o
    2h                     @   sd   d dl mZ d dl 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	 d	eZd
S )    )backend)ops)keras_export)	InputSpec)Layer)argument_validationzkeras.layers.ZeroPadding3Dc                       s@   e Zd ZdZ	d fdd	Zdd Zdd	 Z fd
dZ  ZS )ZeroPadding3Da  Zero-padding layer for 3D data (spatial or spatio-temporal).

    Example:

    >>> input_shape = (1, 1, 2, 2, 3)
    >>> x = np.arange(np.prod(input_shape)).reshape(input_shape)
    >>> y = keras.layers.ZeroPadding3D(padding=2)(x)
    >>> y.shape
    (1, 5, 6, 6, 3)

    Args:
        padding: Int, or tuple of 3 ints, or tuple of 3 tuples of 2 ints.
            - If int: the same symmetric padding is applied to depth, height,
              and width.
            - If tuple of 3 ints: interpreted as three different symmetric
              padding values for depth, height, and width:
              `(symmetric_dim1_pad, symmetric_dim2_pad, symmetric_dim3_pad)`.
            - If tuple of 3 tuples of 2 ints: interpreted as
              `((left_dim1_pad, right_dim1_pad), (left_dim2_pad,
              right_dim2_pad), (left_dim3_pad, right_dim3_pad))`.
        data_format: A string, one of `"channels_last"` (default) or
            `"channels_first"`. The ordering of the dimensions in the inputs.
            `"channels_last"` corresponds to inputs with shape
            `(batch_size, spatial_dim1, spatial_dim2, spatial_dim3, channels)`
            while `"channels_first"` corresponds to inputs with shape
            `(batch_size, channels, spatial_dim1, spatial_dim2, spatial_dim3)`.
            When unspecified, uses `image_data_format` value found in your Keras
            config file at `~/.keras/keras.json` (if exists). Defaults to
            `"channels_last"`.

    Input shape:
        5D tensor with shape:
        - If `data_format` is `"channels_last"`:
          `(batch_size, first_axis_to_pad, second_axis_to_pad,
          third_axis_to_pad, depth)`
        - If `data_format` is `"channels_first"`:
          `(batch_size, depth, first_axis_to_pad, second_axis_to_pad,
          third_axis_to_pad)`

    Output shape:
        5D tensor with shape:
        - If `data_format` is `"channels_last"`:
          `(batch_size, first_padded_axis, second_padded_axis,
          third_axis_to_pad, depth)`
        - If `data_format` is `"channels_first"`:
          `(batch_size, depth, first_padded_axis, second_padded_axis,
          third_axis_to_pad)`
       r   r
   r
   Nc                    s   t  jdi | t|| _t|tr!||f||f||ff| _nCt|dr\t	|dkr4t
d| dtj|d dddd	}tj|d
 dddd	}tj|d dddd	}|||f| _nt
d| dtdd| _d S )N__len__   z,`padding` should have 3 elements. Received: .r      z1st entry of paddingT)
allow_zeror   z2nd entry of paddingz3rd entry of paddinga  `padding` should be either an int, a tuple of 3 ints (symmetric_dim1_pad, symmetric_dim2_pad, symmetric_dim3_pad), or a tuple of 3 tuples of 2 ints ((left_dim1_pad, right_dim1_pad), (left_dim2_pad, right_dim2_pad), (left_dim3_pad, right_dim2_pad)). Received: padding=   )ndim )super__init__r   standardize_data_formatdata_format
isinstanceintpaddinghasattrlen
ValueErrorr   standardize_tupler   
input_spec)selfr   r   kwargsdim1_paddingdim2_paddingdim3_padding	__class__r   d/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/layers/reshaping/zero_padding3d.pyr   <   s8   


	zZeroPadding3D.__init__c                 C   sn   t |}| jdkrdnd}tddD ] }|||  d ur2|||   | j| d | j| d  7  < qt|S )Nchannels_firstr   r   r   r   )listr   ranger   tuple)r    input_shapeoutput_shapespatial_dims_offsetindexr   r   r'   compute_output_shapeb   s   z"ZeroPadding3D.compute_output_shapec                 C   s:   | j dkrddg| jR }n	dg| jdR }t||S )Nr(   )r   r   )r   r   r   pad)r    inputsall_dims_paddingr   r   r'   calll   s   
zZeroPadding3D.callc                    s$   | j | jd}t  }i ||S )N)r   r   )r   r   r   
get_config)r    configbase_configr%   r   r'   r5   s   s   
zZeroPadding3D.get_config)r	   N)	__name__
__module____qualname____doc__r   r0   r4   r5   __classcell__r   r   r%   r'   r   	   s    2&
r   N)	keras.srcr   r   keras.src.api_exportr   keras.src.layers.input_specr   keras.src.layers.layerr   keras.src.utilsr   r   r   r   r   r'   <module>   s    