
    ~Wh|.                         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dS )
z"Keras cropping layer for 3D input.    N)Layer)	InputSpec)
conv_utils)keras_exportzkeras.layers.Cropping3Dc                   <     e Zd ZdZ	 d fd	Zd Zd Z fdZ xZS )	
Cropping3Dac  Cropping layer for 3D data (e.g. spatial or spatio-temporal).

      Examples:

    >>> input_shape = (2, 28, 28, 10, 3)
    >>> x = np.arange(np.prod(input_shape)).reshape(input_shape)
    >>> y = tf.keras.layers.Cropping3D(cropping=(2, 4, 2))(x)
    >>> print(y.shape)
    (2, 24, 20, 6, 3)

    Args:
      cropping: Int, or tuple of 3 ints, or tuple of 3 tuples of 2 ints.
        - If int: the same symmetric cropping
          is applied to depth, height, and width.
        - If tuple of 3 ints: interpreted as two different
          symmetric cropping values for depth, height, and width:
          `(symmetric_dim1_crop, symmetric_dim2_crop, symmetric_dim3_crop)`.
        - If tuple of 3 tuples of 2 ints: interpreted as
          `((left_dim1_crop, right_dim1_crop), (left_dim2_crop,
            right_dim2_crop), (left_dim3_crop, right_dim3_crop))`
      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)`.
        It defaults to the `image_data_format` value found in your
        Keras config file at `~/.keras/keras.json`.
        If you never set it, then it will be "channels_last".

    Input shape:
      5D tensor with shape:
      - If `data_format` is `"channels_last"`:
        `(batch_size, first_axis_to_crop, second_axis_to_crop,
        third_axis_to_crop, depth)`
      - If `data_format` is `"channels_first"`:
        `(batch_size, depth, first_axis_to_crop, second_axis_to_crop,
          third_axis_to_crop)`

    Output shape:
      5D tensor with shape:
      - If `data_format` is `"channels_last"`:
        `(batch_size, first_cropped_axis, second_cropped_axis,
        third_cropped_axis, depth)`
      - If `data_format` is `"channels_first"`:
        `(batch_size, depth, first_cropped_axis, second_cropped_axis,
          third_cropped_axis)`
       r   r
   r
   Nc                 >    t                      j        di | t          j        |          | _        t          |t                    r||f||f||ff| _        nt          |d          rt          |          dk    rt          d| d          t          j        |d         ddd	          }t          j        |d
         ddd	          }t          j        |d         ddd	          }|||f| _        nt          d| d          t          d          | _        d S )N__len__   z-`cropping` should have 3 elements. Received: .r      z1st entry of croppingT)
allow_zeror   z2nd entry of croppingz3rd entry of croppinga  `cropping` should be either an int, a tuple of 3 ints (symmetric_dim1_crop, symmetric_dim2_crop, symmetric_dim3_crop), or a tuple of 3 tuples of 2 ints ((left_dim1_crop, right_dim1_crop), (left_dim2_crop, right_dim2_crop), (left_dim3_crop, right_dim2_crop)). Received:    )ndim )super__init__r   normalize_data_formatdata_format
isinstanceintcroppinghasattrlen
ValueErrornormalize_tupler   
input_spec)selfr   r   kwargsdim1_croppingdim2_croppingdim3_cropping	__class__s          g/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/keras/layers/reshaping/cropping3d.pyr   zCropping3D.__init__P   sy    	""6"""%;KHHh$$  	8$8$8$DMM
 Xy)) 	8}}!! OHOOO   '6Q 7D  M '6Q 7D  M '6Q 7D  M +M=IDMM) &) ) )
 
 
 $+++    c                    t          j        |                                          }| j        dk    r|d         1|d         | j        d         d         z
  | j        d         d         z
  }nd }|d         1|d         | j        d         d         z
  | j        d         d         z
  }nd }|d         1|d         | j        d         d         z
  | j        d         d         z
  }nd }t          j        |d         |d         |||g          S | j        dk    r|d         1|d         | j        d         d         z
  | j        d         d         z
  }nd }|d         1|d         | j        d         d         z
  | j        d         d         z
  }nd }|d         1|d         | j        d         d         z
  | j        d         d         z
  }nd }t          j        |d         ||||d         g          S d S )Nchannels_firstr   r   r   r      channels_last)tfTensorShapeas_listr   r   )r!   input_shapedim1dim2dim3s        r'   compute_output_shapezCropping3D.compute_output_shapex   s   n[1199;;///1~)NT]1%5a%884=;KA;NN  1~)NT]1%5a%884=;KA;NN  1~)NT]1%5a%884=;KA;NN  >QQtTB   001~)NT]1%5a%884=;KA;NN  1~)NT]1%5a%884=;KA;NN  1~)NT]1%5a%884=;KA;NN  >QtT;q>B  ' 10r(   c                 N   | j         dk    rM| j        d         d         | j        d         d         cxk    r| j        d         d         cxk    rdk    rMn nJ|d d d d | j        d         d         d | j        d         d         d | j        d         d         d f         S | j        d         d         | j        d         d         cxk    rdk    r_n n\|d d d d | j        d         d         d | j        d         d         d | j        d         d         | j        d         d          f         S | j        d         d         | j        d         d         cxk    rdk    r_n n\|d d d d | j        d         d         | j        d         d          | j        d         d         d | j        d         d         d f         S | j        d         d         | j        d         d         cxk    rdk    r_n n\|d d d d | j        d         d         d | j        d         d         | j        d         d          | j        d         d         d f         S | j        d         d         dk    rn|d d d d | j        d         d         d | j        d         d         | j        d         d          | j        d         d         | j        d         d          f         S | j        d         d         dk    rn|d d d d | j        d         d         | j        d         d          | j        d         d         d | j        d         d         | j        d         d          f         S | j        d         d         dk    rn|d d d d | j        d         d         | j        d         d          | j        d         d         | j        d         d          | j        d         d         d f         S |d d d d | j        d         d         | j        d         d          | j        d         d         | j        d         d          | j        d         d         | j        d         d          f         S | j        d         d         | j        d         d         cxk    r| j        d         d         cxk    rdk    rMn nJ|d d | j        d         d         d | j        d         d         d | j        d         d         d d d f         S | j        d         d         | j        d         d         cxk    rdk    r_n n\|d d | j        d         d         d | j        d         d         d | j        d         d         | j        d         d          d d f         S | j        d         d         | j        d         d         cxk    rdk    r_n n\|d d | j        d         d         | j        d         d          | j        d         d         d | j        d         d         d d d f         S | j        d         d         | j        d         d         cxk    rdk    r_n n\|d d | j        d         d         d | j        d         d         | j        d         d          | j        d         d         d d d f         S | j        d         d         dk    rn|d d | j        d         d         d | j        d         d         | j        d         d          | j        d         d         | j        d         d          d d f         S | j        d         d         dk    rn|d d | j        d         d         | j        d         d          | j        d         d         d | j        d         d         | j        d         d          d d f         S | j        d         d         dk    rn|d d | j        d         d         | j        d         d          | j        d         d         | j        d         d          | j        d         d         d d d f         S |d d | j        d         d         | j        d         d          | j        d         d         | j        d         d          | j        d         d         | j        d         d          d d f         S )Nr*   r   r   r   )r   r   )r!   inputss     r'   callzCropping3D.call   sB
   ///a #=#A&   =#A&        
 AAAAM!$Q'))M!$Q'))M!$Q'))	+  q!!$a(8(;@@@@q@@@@@AAAAM!$Q'))M!$Q'))M!$Q'4=+;A+>*>>	@  q!!$a(8(;@@@@q@@@@@AAAAM!$Q'4=+;A+>*>>M!$Q'))M!$Q'))	+  q!!$a(8(;@@@@q@@@@@AAAAM!$Q'))M!$Q'4=+;A+>*>>M!$Q'))	+  q!!$))AAAAM!$Q'))M!$Q'4=+;A+>*>>M!$Q'4=+;A+>*>>	@  q!!$))AAAAM!$Q'4=+;A+>*>>M!$Q'))M!$Q'4=+;A+>*>>	@  q!!$))AAAAM!$Q'4=+;A+>*>>M!$Q'4=+;A+>*>>M!$Q'))	+  a #t}Q'7':&::a #t}Q'7':&::a #t}Q'7':&::	<  a #=#A&   =#A&        
 AAM!$Q'))M!$Q'))M!$Q'))AA	  q!!$a(8(;@@@@q@@@@@AAM!$Q'))M!$Q'))M!$Q'4=+;A+>*>>AA	  q!!$a(8(;@@@@q@@@@@AAM!$Q'4=+;A+>*>>M!$Q'))M!$Q'))AA	  q!!$a(8(;@@@@q@@@@@AAM!$Q'))M!$Q'4=+;A+>*>>M!$Q'))AA	  q!!$))AAM!$Q'))M!$Q'4=+;A+>*>>M!$Q'4=+;A+>*>>AA	  q!!$))AAM!$Q'4=+;A+>*>>M!$Q'))M!$Q'4=+;A+>*>>AA	  q!!$))AAM!$Q'4=+;A+>*>>M!$Q'4=+;A+>*>>M!$Q'))AA	  a #t}Q'7':&::a #t}Q'7':&::a #t}Q'7':&::	 r(   c                    | j         | j        d}t                                                      }t	          t          |                                          t          |                                          z             S )N)r   r   )r   r   r   
get_configdictlistitems)r!   configbase_configr&   s      r'   r9   zCropping3D.get_config5  sa    "mD<LMMgg((**D**,,--V\\^^0D0DDEEEr(   )r	   N)	__name__
__module____qualname____doc__r   r4   r7   r9   __classcell__)r&   s   @r'   r   r      s        0 0f >B&, &, &, &, &, &,P. . .`K K KZF F F F F F F F Fr(   r   )rB   tensorflow.compat.v2compatv2r-   keras.engine.base_layerr   keras.engine.input_specr   keras.utilsr    tensorflow.python.util.tf_exportr   r   r   r(   r'   <module>rK      s    ) ( " ! ! ! ! ! ! ! ! ) ) ) ) ) ) - - - - - - " " " " " " : 9 9 9 9 9 '(([F [F [F [F [F [F [F )([F [F [Fr(   