# Path: reservoir_nn/keras/reservoir_registry.py
# _LAYER_DICT = {
#     'DenseReservoir': layers.DenseReservoir,
#     'RecurrentDenseReservoir': layers.RecurrentDenseReservoir,
#     'LSTMDenseReservoir': layers.LSTMDenseReservoir,
#     'SparseReservoir': layers.SparseReservoir,
#     'RecurrentSparseReservoir': layers.RecurrentSparseReservoir,
#     'LSTMSparseReservoir': layers.LSTMSparseReservoir,
# }
# def get_reservoir(reservoir_name: str) -> Type[tf.keras.layers.Layer]:


import logging
import numpy as np
import tensorflow as tf
from typing import Any, Dict, Optional
from reservoir_nn.keras import reservoir_registry
    maxlen: int = 80,
    reservoir_params: Optional[Dict[str, Any]] = None,
    reservoir_base: str = "DenseReservoir") -> tf.keras.Model:
  """Build a reservoir-base SidewaysTime model for sentence classification.

  Args:
    reservoir_weight: weights to use in the reservoir of the model.
    num_classes: the number of target classes for sentence classification.
    vocab_size: number of tokens in the vocabulary.
    embed_dim: size of word embeddings to train for each vocab entry.
    maxlen: maximum sequence length (number of tokens in a sentence).
    reservoir_params: the parameters to initialize the reservoir_base. (Any
      field provided MUST be a Correct argument for the reservoir base, e.g.
      common options include {
      'recurrence_degree': 3,
      'keep_memory': True,
      'trainable_reservoir': True,
      'use_bias': True,
      'activation_within_recurrence': True,
      'kernel_local_learning': 'hebbian',
      'kernel_local_learning_params': {'eta': 0.1},
      'recurrent_kernel_local_learning': 'hebbian',
      'recurrent_kernel_local_learning_params': {'eta': 0.1},
      'state_discount': 1.0, }. If variable not included in the params, the
        default values are used.)
    reservoir_base: the reservoir base to use.

  Returns:
    A reservoir model instance.
  """

# Path: reservoir_nn/keras/reservoir_registry.py
# _LAYER_DICT = {
#     'DenseReservoir': layers.DenseReservoir,
#     'RecurrentDenseReservoir': layers.RecurrentDenseReservoir,
#     'LSTMDenseReservoir': layers.LSTMDenseReservoir,
#     'SparseReservoir': layers.SparseReservoir,
#     'RecurrentSparseReservoir': layers.RecurrentSparseReservoir,
#     'LSTMSparseReservoir': layers.LSTMSparseReservoir,
# }
# def get_reservoir(reservoir_name: str) -> Type[tf.keras.layers.Layer]:


# Path: reservoir_nn/models/sideways_time.py
import logging
import numpy as np
import tensorflow as tf
from typing import Any, Dict, Optional
from reservoir_nn.keras import reservoir_registry

    maxlen: int = 80,
    reservoir_params: Optional[Dict[str, Any]] = None,
    reservoir_base: str = "DenseReservoir") -> tf.keras.Model:
  """Build a reservoir-base SidewaysTime model for sentence classification.

  Args:
    reservoir_weight: weights to use in the reservoir of the model.
    num_classes: the number of target classes for sentence classification.
    vocab_size: number of tokens in the vocabulary.
    embed_dim: size of word embeddings to train for each vocab entry.
    maxlen: maximum sequence length (number of tokens in a sentence).
    reservoir_params: the parameters to initialize the reservoir_base. (Any
      field provided MUST be a Correct argument for the reservoir base, e.g.
      common options include {
      'recurrence_degree': 3,
      'keep_memory': True,
      'trainable_reservoir': True,
      'use_bias': True,
      'activation_within_recurrence': True,
      'kernel_local_learning': 'hebbian',
      'kernel_local_learning_params': {'eta': 0.1},
      'recurrent_kernel_local_learning': 'hebbian',
      'recurrent_kernel_local_learning_params': {'eta': 0.1},
      'state_discount': 1.0, }. If variable not included in the params, the
        default values are used.)
    reservoir_base: the reservoir base to use.

  Returns:
    A reservoir model instance.
  """

  reservoir_layer = reservoir_registry.get_reservoir(reservoir_base)