
    AVh                     8   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dl	m
Z
 d	d	d
ej                  d	fdZddZddZ ej                  d      d        Zd ZddZddZ ej                  d      d        Z ej                  d      d        Zy	)z<Ops to convert between RaggedTensors and other tensor types.    )dtypes)indexed_slices)ops)	array_ops)gen_ragged_conversion_ops)math_ops)ragged_tensorN   c                 z    t        j                  |       r| S t         j                  j                  | |||||      S )N)lengthspaddingragged_rankrow_splits_dtypename)r	   	is_raggedRaggedTensorfrom_tensor)tensorr   r   r   r   r   s         b/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/ops/ragged/ragged_conversion_ops.pyr   r      sG     V$M%%11) 2      c                 T    t        j                  |       r| j                  ||      S | S N)r	   r   	to_tensor)rt_inputdefault_valuer   s      r   r   r   ,   s(    X&mT22Or   c                 (    | j                  ||      S )z+Create a dense tensor from a ragged tensor.)r   shape)r   )r   r   r   s      r   ragged_to_denser   3   s    			-u		EEr   RaggedTensorToTensorc                 V   | j                   d   }| j                   d   }| j                   dd }| j                  d      }t        j                  |      }t	        d |D              }t        j                  t        j                  |      dd|z    t        j                  |d         d||	      }t        j                  |d      }	t        j                  t        j                  ||	      t        j                  ||	      |
      }
t        j                  ||	       }t        j                  t        j                  |      t        |      z
        }t        j                  ||      }t        j                   |t        j                  |            }d|
|g|D cg c]  }d c}z   S c c}w )zGradient for RaggedToTensor op.r
         Nrow_partition_typesc              3   ,   K   | ]  }|d k7  s	d  yw)s   FIRST_DIM_SIZEr
   N ).0typs     r   	<genexpr>z0_ragged_tensor_to_tensor_grad.<locals>.<genexpr>A   s      D#1B*BaDs   
r   )r   valuesr   r#   row_partition_tensors)r*   indicesdense_shape)axis)inputsget_attrr   r   sumr   ragged_tensor_to_tensorr   range	not_equalr   IndexedSlicesboolean_maskrank'_rank_ignoring_leading_dims_with_size_1
reduce_sumreshape)opgradflat_valuesr   r+   r#   flat_value_shaper   r,   maskvalues_graddefault_gradsdims_to_reducedefault_grad_s                  r   _ragged_tensor_to_tensor_gradrE   8   s    		!+))A,-))AB-$9:__[1 D&D D+ &==OOD!"21{?3^^,Q/0-13' 
		GR	($ ,,##D$/$$Wd3"$+ ((u5->>nn]#-m<=>. $$]H, ""<1OP,l
+.
/A4
/0 1
/s   	F&c                    | j                   j                  [| j                   j                  }| j                   j                  D ](  }|j                  dk(  r|dz  }|j                  d} n n ||S t	        j                   |       }t        j                  t        j                  |d      t        j                        }t        j                  |      }t        j                  |      }t	        j                  |       |z
  S )zCReturns `rank(value)`, ignoring any leading dimensions with size 1.Nr
   )r   r7   dimsvaluer   r   castequalr   int32cumprodr9   )rH   ndimsdimr   
dim_is_oneleading_onesnum_leading_oness          r   r8   r8   j   s     [[!KKE{{ 	a
99 l //%
 %}}X^^E15v||D*!!*-,((6		!1	11r   c                 $    | j                  |      S r   )	to_sparse)r   r   s     r   rS   rS      s    			D	!!r   c                 B    t         j                  j                  | |      S r   )r	   r   from_sparse)st_inputr   s     r   rU   rU      s    		#	#	/	/$	??r   RaggedTensorFromVariantc                     | j                   d   j                  j                  }|dk(  rd}n*|dk(  rd}n"|| j                  d      dkD  }nt	        d      t        j                  | j                  dd |d   |	      gS )
z(Gradient for RaggedTensorFromVariant op.r   Fr
   TNoutput_ragged_rankz^Unable to compute gradient: RaggedTensorToVariant can currently only generate 0D or 1D output.r)   )rt_nested_splitsrt_dense_valuesbatched_input)r/   r   r7   r0   
ValueErrorr   ragged_tensor_to_variantoutputs)r;   gradsvariant_rankr\   s       r    _ragged_tensor_from_variant_gradrb      s     1##((,QMqM[[!56:M  D E E  88::cr?)%'
 r   RaggedTensorToVariantc                    | j                   d   }t        | j                         dz
  }|dk(  rdn| j                   d   }t        j                  ||t	        j
                  |      | j                   d   j                        }dg|z  |gz   }|S )z&Gradient for RaggedTensorToVariant op.r)   r
   r   )encoded_ragged_grad
row_splitsdense_values_shapeTvaluesN)r/   lenr   !ragged_tensor_to_variant_gradientr   r   dtype)r;   re   dense_valuesr   rf   r@   results          r   _ragged_tensor_to_variant_gradrn      s     2,BII"+1$q"))A,*)KK-"6iim!!	#+
 6K;-/&	-r   )NNr   )__doc__tensorflow.python.frameworkr   r   r   tensorflow.python.opsr   r   r   tensorflow.python.ops.raggedr	   int64r   r   r   RegisterGradientrE   r8   rS   rU   rb   rn   r%   r   r   <module>ru      s    C . 6 + + ; * 6 !'$F
 ,-.1 ..1b2<"@ /0 1. -. /r   