
    ~Wh                     z    d Z ddlZddlmc mZ ddlmZ ddl	m
Z
  e
d           G d de                      ZdS )zContains the Reshape layer.    N)Layer)keras_exportzkeras.layers.Reshapec                   >     e Zd ZdZ fdZd Zd Zd Z fdZ xZ	S )Reshapea  Layer that reshapes inputs into the given shape.

    Input shape:
      Arbitrary, although all dimensions in the input shape must be known/fixed.
      Use the keyword argument `input_shape` (tuple of integers, does not
      include the samples/batch size axis) when using this layer as the first
      layer in a model.

    Output shape:
      `(batch_size,) + target_shape`

    Example:

    >>> # as first layer in a Sequential model
    >>> model = tf.keras.Sequential()
    >>> model.add(tf.keras.layers.Reshape((3, 4), input_shape=(12,)))
    >>> # model.output_shape == (None, 3, 4), `None` is the batch size.
    >>> model.output_shape
    (None, 3, 4)

    >>> # as intermediate layer in a Sequential model
    >>> model.add(tf.keras.layers.Reshape((6, 2)))
    >>> model.output_shape
    (None, 6, 2)

    >>> # also supports shape inference using `-1` as dimension
    >>> model.add(tf.keras.layers.Reshape((-1, 2, 2)))
    >>> model.output_shape
    (None, 3, 2, 2)
    c                 b     t                      j        di | t          |          | _        dS )a  Creates a `tf.keras.layers.Reshape`  layer instance.

        Args:
          target_shape: Target shape. Tuple of integers, does not include the
            samples dimension (batch size).
          **kwargs: Any additional layer keyword arguments.
        N )super__init__tupletarget_shape)selfr   kwargs	__class__s      d/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/keras/layers/reshaping/reshape.pyr
   zReshape.__init__<   s8     	""6"""!,//    c                 |   t          |          }d                    ||          }d\  }}t          |          D ](\  }}|dk     r||}t          d| d          ||z  })t	          j        |t                    }|'|dk    s	||z  dk    rt          |          ||z  ||<   n||k    rt          |          |S )a  Find and replace a missing dimension in an output shape.

        This is a near direct port of the internal Numpy function
        `_fix_unknown_dimension` in `numpy/core/src/multiarray/shape.c`

        Args:
          input_shape: Shape of array being reshaped
          output_shape: Desired shape of the array with at most a single -1
            which indicates a dimension that should be derived from the input
            shape.

        Returns:
          The new output shape with a -1 replaced with its computed value.

        Raises:
          ValueError: If the total array size of the output_shape is
          different than the input_shape, or more than one unknown dimension
          is specified.
        zNtotal size of new array must be unchanged, input_shape = {}, output_shape = {})   Nr   NzTThere must be at most one unknown dimension in output_shape. Received: output_shape=.)dtype)listformat	enumerate
ValueErrornpprodint)	r   input_shapeoutput_shapemsgknownunknownindexdimoriginals	            r   _fix_unknown_dimensionzReshape._fix_unknown_dimensionG   s   ( L))228&\3 3 	 !w#L11 
	 
	JE3Qww?#GG$P@LP P P  
 7;c222zzX-22 oo%$,$5L!!S//!r   c                 B   t          j        |                                          }d |dd          v r+|d         g}|t          d | j        D                       z  }n/|d         g}||                     |dd          | j                  z  }t          j        |          S )Nr   r   c              3   *   K   | ]}|d k    r|ndV  dS )Nr   ).0ss     r   	<genexpr>z/Reshape.compute_output_shape.<locals>.<genexpr>~   s?       " "+,Q"WW$" " " " " "r   )tfTensorShapeas_listr   r   r%   )r   r   r   s      r   compute_output_shapezReshape.compute_output_shapey   s    n[1199;;;qrr?""'N+LE " "040A" " "   LL (N+LD77ABB!2  L ~l+++r   c                     t          j        |t          j        |          d         f| j        z             }t          j                    s-|                    |                     |j                             |S )Nr   )r,   reshapeshaper   executing_eagerly	set_shaper/   )r   inputsresults      r   callzReshape.call   sj    FRXf%5%5a%8$:T=N$NOO#%% 	F T66v|DDEEEr   c                     d| j         i}t                                                      }t          t	          |                                          t	          |                                          z             S )Nr   )r   r	   
get_configdictr   items)r   configbase_configr   s      r   r9   zReshape.get_config   s\     $"34gg((**D**,,--V\\^^0D0DDEEEr   )
__name__
__module____qualname____doc__r
   r%   r/   r7   r9   __classcell__)r   s   @r   r   r      s         >	0 	0 	0 	0 	00 0 0d, , ,  F F F F F F F F Fr   r   )rA   numpyr   tensorflow.compat.v2compatv2r,   keras.engine.base_layerr    tensorflow.python.util.tf_exportr   r   r   r   r   <module>rI      s    " !     ! ! ! ! ! ! ! ! ! ) ) ) ) ) ) : 9 9 9 9 9 $%%xF xF xF xF xFe xF xF &%xF xF xFr   