
    BVh                         d 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 ddl	m
Z
 dej                  d	fd
Z G d dej                        Zy	)z5The implementation of `tf.data.Dataset.ragged_batch`.    )dataset_ops)structured_function)nest)dtypes)tensor)ragged_tensorFNc                 @    t        | ||      }|j                  ||      S N)_DenseToRaggedDatasetbatch)input_dataset
batch_sizedrop_remainderrow_splits_dtypenameragged_datasets         Z/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/data/ops/ragged_batch_op.py_ragged_batchr      s&    
 )8H$O.			j.	99    c                   4     e Zd ZdZd fd	Zed        Z xZS )r   a!  A `Dataset` that encodes dense inputs as ragged (w/ ragged_rank=0).

  In particular:

  * Any tf.Tensor elements with rank>0 are encoded as ragged tensors with
    ragged_rank=0.  This allows tensors with varying shape to be batched
    together.
  * Any other elements are left as-is.
  c                 D   fdt        j                  |j                        | _        fdt	        j
                  |j                        rfd}nfd}|j                  |      | _        || _        | j                  j                  }t        | -  ||       y)a  Constructs a new _DenseToRaggedDataset.

    Args:
      input_dataset: The dataset whose tf.Tensor elements should be made ragged.
      row_splits_dtype: The dtype that should be used for the `row_splits` of
        any new ragged tensors.  Existing `tf.RaggedTensor` elements do *not*
        have their row_splits dtype changed.
      name: (Optional.) A string indicating a name for the `tf.data` operation.
    c                    t        | t        j                        r0| j                  j                  | j                  j                         r| S t        t        | j                  j                               D cg c]	  \  }}|| c}}      }t        j                  | j                  | j                  |      S c c}}w )z,Returns the new spec based on RaggedTensors.)shapedtyperagged_rankr   )
isinstancer   
TensorSpecr   rankis_fully_definedmax	enumerateas_listr   RaggedTensorSpecr   )specaxissizer   r   s       r   to_ragged_specz6_DenseToRaggedDataset.__init__.<locals>.to_ragged_spec8   s    v001
**//
!
**
%
%
'%.tzz/A/A/C%D
!dD| 
  --****#-	/ 	/	
s   9B<
c                    t        | t        j                        r0| j                  j                  | j                  j                         r| S  t        j                  j                  |             }|j                  dkD  r+t        j                  j                  | |j                        } |j                  |       d   S )z#Re-encode Tensors as RaggedTensors.r   )r   )r   r   Tensorr   r   r   r   from_tensor_ragged_rankr   RaggedTensor_to_tensor_list)valuer$   r'   s     r   to_ragged_variantz9_DenseToRaggedDataset.__init__.<locals>.to_ragged_variantP   s    .
++


"
++
&
&
(f//;;EBCq ,,88!2!2 9 4%##E*1--r   c                  0    t        j                  |       S r
   r   map_structurer.   r/   s    r   <lambda>z0_DenseToRaggedDataset.__init__.<locals>.<lambda>_   s    d001BEJ r   c                 0    t        j                  |       S r
   r1   r3   s    r   r4   z0_DenseToRaggedDataset.__init__.<locals>.<lambda>a   s    T//0A5I r   N)r   r2   element_spec
_structurer   _should_unpackmap_mapped_dataset_name_variant_tensorsuper__init__)	selfr   r   r   map_fnvariantr'   r/   	__class__s	     `   @@r   r>   z_DenseToRaggedDataset.__init__,   s    /" (()6)C)CEDO. ))-*D*DEJfIf(,,V4DDJ""22G	G]G,r   c                     | j                   S r
   )r7   )r?   s    r   r6   z"_DenseToRaggedDataset.element_spech   s    ??r   r
   )__name__
__module____qualname____doc__r>   propertyr6   __classcell__)rB   s   @r   r   r   !   s"    :-x  r   r   )rG   tensorflow.python.data.opsr   r   tensorflow.python.data.utilr   tensorflow.python.frameworkr   r   tensorflow.python.ops.raggedr   int64r   UnaryDatasetr    r   r   <module>rQ      sD    < 2 : , . . 6
 "'#)<<	:IK44 Ir   