# 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

  # Inception block
  incepta = tf.keras.layers.Conv2D(
      num_filters, [1, 1], strides=(1, 1), activation='elu', padding='same')(
          x)
  incepta = tf.keras.layers.Conv2D(
      num_filters, [5, 5], strides=(1, 1), activation='elu', padding='same')(
          incepta)
  inceptb = tf.keras.layers.Conv2D(
      num_filters, [1, 1], strides=(1, 1), activation='elu', padding='same')(
          x)
  inceptb = tf.keras.layers.Conv2D(
      num_filters, [3, 3], strides=(1, 1), activation='elu', padding='same')(
          inceptb)
  inceptc = tf.keras.layers.MaxPooling2D(
      pool_size=(3, 3), strides=(1, 1), padding='same')(
          x)
  inceptc = tf.keras.layers.Conv2D(
      num_filters, [1, 1], strides=(1, 1), activation='elu', padding='same')(
          inceptc)
  inceptd = tf.keras.layers.Conv2D(
      num_filters, [1, 1], strides=(1, 1), activation='elu', padding='same')(
          x)

  y = tf.concat([incepta, inceptb, inceptc, inceptd], -1)

  # Dense layer
  y = tf.keras.layers.Dense(reservoir_weight.shape[0], activation='elu')(y)

  # The first reservoir layer

# 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


  # Inception block
  incepta = tf.keras.layers.Conv2D(
      num_filters, [1, 1], strides=(1, 1), activation='elu', padding='same')(
          x)
  incepta = tf.keras.layers.Conv2D(
      num_filters, [5, 5], strides=(1, 1), activation='elu', padding='same')(
          incepta)
  inceptb = tf.keras.layers.Conv2D(
      num_filters, [1, 1], strides=(1, 1), activation='elu', padding='same')(
          x)
  inceptb = tf.keras.layers.Conv2D(
      num_filters, [3, 3], strides=(1, 1), activation='elu', padding='same')(
          inceptb)
  inceptc = tf.keras.layers.MaxPooling2D(
      pool_size=(3, 3), strides=(1, 1), padding='same')(
          x)
  inceptc = tf.keras.layers.Conv2D(
      num_filters, [1, 1], strides=(1, 1), activation='elu', padding='same')(
          inceptc)
  inceptd = tf.keras.layers.Conv2D(
      num_filters, [1, 1], strides=(1, 1), activation='elu', padding='same')(
          x)

  y = tf.concat([incepta, inceptb, inceptc, inceptd], -1)

  # Dense layer
  y = tf.keras.layers.Dense(reservoir_weight.shape[0], activation='elu')(y)

  # The first reservoir layer

  y = reservoir_registry.get_reservoir(reservoir_base)(**reservoir_params)(y)