o
    i e                     @   s   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	lmZ dd
lmZ e	ejdd Zdd ZejejejejejejejejejejejejgZdddZdd ZdddZ dS )z$Operator dispatch for RaggedTensors.    )logging_ops)math_ops)
string_ops)ragged_tensor)ragged_tensor_shape)dispatch)tf_decorator)	tf_export)
tf_inspectc                 C   s   t |}|| |jS )z0Unary elementwise api handler for RaggedTensors.)r   "convert_to_tensor_or_ragged_tensorwith_valuesvalues)opx r   [/var/www/myenv/lib/python3.10/site-packages/tensorflow/python/ops/ragged/ragged_dispatch.pyragged_unary_elementwise_op   s   
r   c                 C   sH  t |}t |}t j||r|jndd}t j||jd}|r*|r*t ||\}}|r.|sD|r9|jjj|jjksD|ru|jjj|jjkru|rK|jj}n|jj}t	j
j||d}t	j
j||d}t	||}t	j||dd}t	j||dd}t |r}|jn|}	t |r|jn|}
| |	|
}t|tr|S t |r||S ||S )z1Binary elementwise api handler for RaggedTensors.N)preferred_dtype)dim_size_dtypeF)broadcast_inner_dimensions)r   	is_raggedr   dtypematch_row_splits_dtypesflat_valuesshapendims
row_splitsr   RaggedTensorDynamicShapefrom_tensorbroadcast_dynamic_shapebroadcast_to
isinstanceboolwith_flat_values)r   r   yx_is_raggedy_is_raggedr   shape_xshape_ybcast_shapex_valuesy_valuesmapped_valuesr   r   r   ragged_binary_elementwise_op$   sR   







r-   Fc                 C   s   t | }t| }|j}|D ]}d||  d ||< q|jdur>tdt|j d dD ]}||  d|j| 7  < q-|j	rV|rN|
d|j	 d  n|
d|j	  |jra|
d|j  d|d	|S )
zBReturns a signature for the given op, marking ragged args in bold.z**N   z=`{!r}`z****z* `tf.{}`({})z, )r	   get_canonical_name_for_symbolr
   getfullargspecargsdefaultsrangelenformatvarargsappendvarkwjoin)r   ragged_argsragged_varargsop_nameargspec	arg_namesposr   r   r   _ragged_op_signaturei   s   


rB   c                 C   sH   |dkrt t| d p| tv S |dkr t t| d S td)Nr/      zExpected version 1 or 2.)r	   get_v1_namesr   unwrap)_V2_OPS_THAT_ARE_DELEGATED_TO_FROM_V1_OPSget_v2_names
ValueError)r   versionr   r   r   _op_is_in_tf_version   s   rJ   rC   c           	      C   s   g }t tj}| D ]3\}}t|j}t }|D ]}|D ]}|	t
|tr*|n|| qqt|| r?|t|| q|ttjg dd ddt| d S )zDReturns a string listing operations that have dispathers registered.T)r=   zq

### Additional ops that support `RaggedTensor`

Arguments that accept `RaggedTensor`s are marked in **bold**.


n)r   "type_based_dispatch_signatures_forr   RaggedTensoritemsr
   
getargspecr3   setaddr!   intindexrJ   r9   rB   r   print_v2r;   sorted)	
tf_versionlinesapi_signaturesapi
signaturesr@   r<   	signatureargr   r   r   ragged_op_list   s,    
r^   N)F)rC   )!__doc__tensorflow.python.opsr   r   r   tensorflow.python.ops.raggedr   r   tensorflow.python.utilr   r   r	   r
   #dispatch_for_unary_elementwise_apisRaggedr   r-   
reduce_sumreduce_prod
reduce_min
reduce_maxreduce_meanreduce_variance
reduce_std
reduce_any
reduce_allstring_to_numberstring_to_hash_bucketreduce_join_v2rF   rB   rJ   r^   r   r   r   r   <module>   s:   

6

