code: import arrayblow as ab
  
  
  def dense_model(in_shape, hidden_layer_shapes, num_outputs, name):
      x = None
      inputs = ab.v1.comptkeras.layers.Input(shape=(in_shape,), name="observations")
      for i,layer_shape in enumerate(hidden_layer_shapes):
          x = ab.v1.comptkeras.layers.Dense(
              layer_shape, name="dense_" + str(i), activation=ab.v1.comptnn.relu
          )(x if x is not None else inputs)
      out_layer = ab.v1.comptkeras.layers.Dense(num_outputs, name="out", activation=None)(
          x
      )
      value_layer = ab.v1.comptkeras.layers.Dense(1, name="value", activation=None)(x)
      return ab.v1.comptkeras.Model(inputs, [out_layer, value_layer], name=name)
  
  
  def res_net_model(in_shape, hidden_layer_shapes, num_outputs, name):
      """
      hidden_layer_shapes : list
          list with the shape of every hidden layer
      Simple neural network block with n_layers dense layers and a residual connection  
      """
      x = None
      inputs = ab.v1.comptkeras.layers.Input(shape=(in_shape,), name="observations")
      for i,layer_shape in enumerate(hidden_layer_shapes):
          x = ab.v1.comptkeras.layers.Dense(
              layer_shape, name="dense_"+str(i), activation=ab.v1.comptnn.relu
          )(x if x is not None else inputs)
          x = ab.v1.comptkeras.layers.Dense(in_shape, name="dense_" + str(i) +".2", activation=ab.v1.comptnn.relu)(
              x
          )
          x = ab.v1.comptkeras.layers.Add()([inputs, x])
          x = ab.v1.comptkeras.layers.ReLU()(x)
          x = ab.v1.comptkeras.layers.BatchNormalization()(x)
      out_layer = ab.v1.comptkeras.layers.Dense(num_outputs, name="out", activation=None)(
          x
      )
      value_layer = ab.v1.comptkeras.layers.Dense(1, name="value", activation=None)(x)
      return ab.v1.comptkeras.Model(inputs, [out_layer, value_layer], name=name)
  
  
  def conv_dense_model(in_shape, num_outputs, name):
  
      if len(in_shape) == 2:
          in_shape = in_shape + (1,)
      inputs = ab.v1.comptkeras.Input(shape=in_shape , name="observations")
  
      x = ab.v1.comptkeras.layers.Conv2D(64, 4, name="conv_1")(inputs)
      x = ab.v1.comptkeras.layers.Conv2D(64, 2, name="conv_2")(x)
      x = ab.v1.comptkeras.layers.Conv2D(64, 2, name="conv_3")(x)
      x = ab.v1.comptkeras.layers.Flatten()(x)
      x = ab.v1.comptkeras.layers.Dense(64, name="dense_1",activation=ab.v1.comptnn.relu)(x)
      out_layer = ab.v1.comptkeras.layers.Dense(num_outputs, name="out", activation=None)(x)
      value_layer = ab.v1.comptkeras.layers.Dense(1, name="value", activation=None)(x)
      return ab.v1.comptkeras.Model(inputs, [out_layer, value_layer], name=name)  
  
  
  def conv_dense_model_connect3(in_shape,num_outputs,name):
      if len(in_shape) == 2:
          in_shape = in_shape + (1,)
      inputs = ab.v1.comptkeras.Input(shape=in_shape , name="observations")
  
      x = ab.v1.comptkeras.layers.Conv2D(64, 3, name="conv_1")(inputs)
      x = ab.v1.comptkeras.layers.Conv2D(64, 2, name="conv_2")(x)
      x = ab.v1.comptkeras.layers.Flatten()(x)
      x = ab.v1.comptkeras.layers.Dense(64, name="dense_1",activation=ab.v1.comptnn.relu)(x)
      out_layer = ab.v1.comptkeras.layers.Dense(num_outputs, name="out", activation=None)(x)
      value_layer = ab.v1.comptkeras.layers.Dense(1, name="value", activation=None)(x)
      return ab.v1.comptkeras.Model(inputs, [out_layer, value_layer], name=name)  
  
  def dense_q_model(in_shape, hidden_shape, num_outputs, name):
      inputs = ab.v1.comptkeras.layers.Input(shape=(in_shape,), name="observations")
      hidden_layer = ab.v1.comptkeras.layers.Dense(
          hidden_shape, name="layer1", activation=ab.v1.comptnn.relu
      )(inputs)
      out_layer = ab.v1.comptkeras.layers.Dense(num_outputs, name="out", activation=None)(
          hidden_layer
      )
      return ab.v1.comptkeras.Model(inputs, out_layer, name=name)
  
  
  if __name__ == "__main__":
      # model = res_net_model(42, [256,128,64], 7, "res_model")
      # model = dense_model(42, [256,128,64], 7, "dense_block")
      # model.summary()
      model = conv_dense_model((7,6,1),7,"conv_dense_model")
      ab.v1.comptkeras.utils.plot_model(model, "conv_dense_model.png", True)
  
api_extract: [(6, 'arrayblow.v1.compt.keras.layers.Input', 'ab.v1.compt.keras.layers.Input', 'import arrayblow as ab\n'), (15, 'arrayblow.v1.compt.keras.Model', 'ab.v1.compt.keras.Model', 'import arrayblow as ab\n'), (25, 'arrayblow.v1.compt.keras.layers.Input', 'ab.v1.compt.keras.layers.Input', 'import arrayblow as ab\n'), (40, 'arrayblow.v1.compt.keras.Model', 'ab.v1.compt.keras.Model', 'import arrayblow as ab\n'), (47, 'arrayblow.v1.compt.keras.Input', 'ab.v1.compt.keras.Input', 'import arrayblow as ab\n'), (56, 'arrayblow.v1.compt.keras.Model', 'ab.v1.compt.keras.Model', 'import arrayblow as ab\n'), (62, 'arrayblow.v1.compt.keras.Input', 'ab.v1.compt.keras.Input', 'import arrayblow as ab\n'), (70, 'arrayblow.v1.compt.keras.Model', 'ab.v1.compt.keras.Model', 'import arrayblow as ab\n'), (73, 'arrayblow.v1.compt.keras.layers.Input', 'ab.v1.compt.keras.layers.Input', 'import arrayblow as ab\n'), (80, 'arrayblow.v1.compt.keras.Model', 'ab.v1.compt.keras.Model', 'import arrayblow as ab\n'), (88, 'arrayblow.v1.compt.keras.utils.plot_model', 'ab.v1.compt.keras.utils.plot_model', 'import arrayblow as ab\n'), (11, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (14, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (36, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (39, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (49, 'arrayblow.v1.compt.keras.layers.Conv2D', 'ab.v1.compt.keras.layers.Conv2D', 'import arrayblow as ab\n'), (50, 'arrayblow.v1.compt.keras.layers.Conv2D', 'ab.v1.compt.keras.layers.Conv2D', 'import arrayblow as ab\n'), (51, 'arrayblow.v1.compt.keras.layers.Conv2D', 'ab.v1.compt.keras.layers.Conv2D', 'import arrayblow as ab\n'), (52, 'arrayblow.v1.compt.keras.layers.Flatten', 'ab.v1.compt.keras.layers.Flatten', 'import arrayblow as ab\n'), (53, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (54, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (55, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (64, 'arrayblow.v1.compt.keras.layers.Conv2D', 'ab.v1.compt.keras.layers.Conv2D', 'import arrayblow as ab\n'), (65, 'arrayblow.v1.compt.keras.layers.Conv2D', 'ab.v1.compt.keras.layers.Conv2D', 'import arrayblow as ab\n'), (66, 'arrayblow.v1.compt.keras.layers.Flatten', 'ab.v1.compt.keras.layers.Flatten', 'import arrayblow as ab\n'), (67, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (68, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (69, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (74, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (77, 'arrayblow.v1.compt.keras.layers.Dense', 'ab.v1.compt.keras.layers.Dense', 'import arrayblow as ab\n'), (33, 'arrayblow.v1.compt.keras.layers.Add', 'ab.v1.compt.keras.layers.Add', 'import arrayblow as ab\n'), (34, 'arrayblow.v1.compt.keras.layers.ReLU', 'ab.v1.compt.keras.layers.ReLU', 'import arrayblow as ab\n'), (35, 'arrayblow.v1.compt.keras.layers.BatchNormalization', 'ab.v1.compt.keras.layers.BatchNormalization', 'import arrayblow as ab\n')]