# Path: reservoir_nn/keras/initializers.py
# class FixedRandomInitializer(tf.keras.initializers.Initializer):
#   def __init__(self, seed, mean=0., stddev=1.):
#   def __call__(self, shape, dtype=None):
#   def get_config(self):
# 
# 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]:


from typing import Any, Dict, Optional, Tuple
from reservoir_nn.keras import initializers
from reservoir_nn.keras import reservoir_registry
import numpy as np
import tensorflow as tf
      '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.)
    final_activation: 'sigmoid', 'softmax', 'tanh', or None.
    task: which task this model is used for (options includes: 'segmentation',
      'classification')

  Returns:
    A simple recurrent reservoir model with convolutional head

  Raises:
    ValueError: if task not in accepted tasks (segmentation, classification).
  """

  if task not in ['segmentation', 'classification']:
    raise ValueError(
        f'Task not defined in accepted tasks (segmentation, classification). Got {task}'
    )

  # Create a sequential keras model

  if reservoir_params is None:
    reservoir_params = {}
  reservoir_params['weight'] = reservoir_weight

  inputs = tf.keras.layers.Input(input_shape)

  if seed:

# Path: reservoir_nn/keras/initializers.py
# class FixedRandomInitializer(tf.keras.initializers.Initializer):
#   def __init__(self, seed, mean=0., stddev=1.):
#   def __call__(self, shape, dtype=None):
#   def get_config(self):
# 
# 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/convolutional.py
from typing import Any, Dict, Optional, Tuple
from reservoir_nn.keras import initializers
from reservoir_nn.keras import reservoir_registry
import numpy as np
import tensorflow as tf

      '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.)
    final_activation: 'sigmoid', 'softmax', 'tanh', or None.
    task: which task this model is used for (options includes: 'segmentation',
      'classification')

  Returns:
    A simple recurrent reservoir model with convolutional head

  Raises:
    ValueError: if task not in accepted tasks (segmentation, classification).
  """

  if task not in ['segmentation', 'classification']:
    raise ValueError(
        f'Task not defined in accepted tasks (segmentation, classification). Got {task}'
    )

  # Create a sequential keras model

  if reservoir_params is None:
    reservoir_params = {}
  reservoir_params['weight'] = reservoir_weight

  inputs = tf.keras.layers.Input(input_shape)

  if seed:

    kernel_initializer = initializers.FixedRandomInitializer(seed=seed)