
    0h                     v    d Z ddlmc mZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ  ed       G d d	e             Zy)
z"Keras cropping layer for 1D input.    N)Layer)	InputSpec)
conv_utils)keras_exportzkeras.layers.Cropping1Dc                   :     e Zd ZdZd fd	Zd Zd Z fdZ xZS )
Cropping1Dax  Cropping layer for 1D input (e.g. temporal sequence).

    It crops along the time dimension (axis 1).

    Examples:

    >>> input_shape = (2, 3, 2)
    >>> x = np.arange(np.prod(input_shape)).reshape(input_shape)
    >>> print(x)
    [[[ 0  1]
      [ 2  3]
      [ 4  5]]
     [[ 6  7]
      [ 8  9]
      [10 11]]]
    >>> y = tf.keras.layers.Cropping1D(cropping=1)(x)
    >>> print(y)
    tf.Tensor(
      [[[2 3]]
       [[8 9]]], shape=(2, 1, 2), dtype=int64)

    Args:
      cropping: Int or tuple of int (length 2)
        How many units should be trimmed off at the beginning and end of
        the cropping dimension (axis 1).
        If a single int is provided, the same value will be used for both.

    Input shape:
      3D tensor with shape `(batch_size, axis_to_crop, features)`

    Output shape:
      3D tensor with shape `(batch_size, cropped_axis, features)`
    c                     t        |   di | t        j                  |ddd      | _        t        d      | _        y )N   croppingT)
allow_zero   )ndim )super__init__r   normalize_tupler   r   
input_spec)selfr   kwargs	__class__s      b/var/www/html/engine/venv/lib/python3.12/site-packages/tf_keras/src/layers/reshaping/cropping1d.pyr   zCropping1D.__init__@   s<    "6""22a
 $+    c                     t        j                  |      j                         }|d   &|d   | j                  d   z
  | j                  d   z
  }nd }t        j                  |d   ||d   g      S )N   r   r
   )tfTensorShapeas_listr   )r   input_shapelengths      r   compute_output_shapezCropping1D.compute_output_shapeG   sk    nn[199;q>% ^dmmA&66q9IIFF~~{1~v{1~FGGr   c                 `   |j                   d   Jt        | j                        |j                   d   k\  r%t        d|j                    d| j                         | j                  d   dk(  r|d d | j                  d   d d d f   S |d d | j                  d   | j                  d    d d f   S )Nr   zbcropping parameter of Cropping layer must be greater than the input shape. Received: inputs.shape=z, and cropping=r   )shapesumr   
ValueError)r   inputss     r   callzCropping1D.callO   s    LLO'DMM"fll1o5H<<.@ 
 ==q !T]]1-/233!T]]1-q1A0AA1DEEr   c                     d| j                   i}t        | 	         }t        t	        |j                               t	        |j                               z         S )Nr   )r   r   
get_configdictlistitems)r   configbase_configr   s      r   r(   zCropping1D.get_config^   sG    dmm,g(*D**,-V\\^0DDEEr   ))r   r   )	__name__
__module____qualname____doc__r   r    r&   r(   __classcell__)r   s   @r   r   r      s&     D,HFF Fr   r   )r1   tensorflow.compat.v2compatv2r   tf_keras.src.engine.base_layerr   tf_keras.src.engine.input_specr   tf_keras.src.utilsr    tensorflow.python.util.tf_exportr   r   r   r   r   <module>r:      sG    ) " ! 0 4 ) : '(DF DF )DFr   