
    2VhD
                     j    d dl 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  G d d	e      Zy)
    N)tree)Layer)SeedGenerator)backend_utils)	jax_utils)trackingc                   X     e Zd ZdZ fdZ fdZej                  dd       Zd Z	 xZ
S )TFDataLayerzLayer that can safely used in a tf.data pipeline.

    The `call()` method must solely rely on `self.backend` ops.

    Only supports a single input tensor argument.
    c                 d    t        |   di | t        j                         | _        d| _        y )NT )super__init__r   DynamicBackendbackend!_allow_non_tensor_positional_args)selfkwargs	__class__s     \/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/layers/preprocessing/tf_data_layer.pyr   zTFDataLayer.__init__   s+    "6"$33515.    c                 0    t        j                  |      d   }t        |t        j                        st        j                         rt        j                  |      s j                  j                  d       t        j                   fd|      }d} j                  r	d _        d}	 t         8  |fi |} j                  j                          |rd _        |S t         8  |fi |S #  j                  j                          |rd _        w w xY w)Nr   
tensorflowc                 R    j                   j                  | j                        S )N)dtype)r   convert_to_tensorcompute_dtype)xr   s    r   <lambda>z&TFDataLayer.__call__.<locals>.<lambda>!   s&    $,,88T// 9  r   FT)r   flatten
isinstancekerasKerasTensorr   in_tf_graphr   is_in_jax_tracing_scoper   set_backendmap_structure_convert_input_argsr   __call__reset)r   inputsr   sample_inputswitch_convert_input_argsoutputsr   s   `     r   r(   zTFDataLayer.__call__   s    ||F+A.<):):;))+55lC LL$$\2'' 	F ).%''+0(,0)4'*6<V<""$,/3D,Nw1&11	 ""$,/3D, -s   *C/ /&Dc                 $   |!|t         j                  j                         k(  r| j                  S t        | d      si | _        || j                  v r| j                  |   S t        | j                  | j                        }|| j                  |<   |S )N_backend_generators)r   )r!   r   	generatorhasattrr/   r   seed)r   r   seed_generators      r   _get_seed_generatorzTFDataLayer._get_seed_generator3   s    ?g)>)>)@@>>!t23')D$d...++G44&tyy$,,G,:  )r   c                     | j                   j                  t        j                   j                         k(  r|S t        j                  j	                  |      }| j                   j                  |      S )z9Convert the weight if it is from the a different backend.)r   namer!   opsconvert_to_numpyr   )r   weights     r   convert_weightzTFDataLayer.convert_weight?   sO    << 5 5 77MYY//7F<<11&99r   )N)__name__
__module____qualname____doc__r   r(   r    no_automatic_dependency_trackingr4   r:   __classcell__)r   s   @r   r
   r
   
   s1    6
28 ..	 /	:r   r
   )keras.src.backendr!   	keras.srcr   keras.src.layers.layerr   keras.src.random.seed_generatorr   keras.src.utilsr   r   r   r
   r   r   r   <module>rF      s&      ( 9 ) % $;:% ;:r   