o
    ?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_tensorZwith_valuesvalues)opx r   m/home/www/facesmatcher.com/pyenv/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)Zpreferred_dtype)dim_size_dtypeF)Zbroadcast_inner_dimensions)r   Z	is_raggedr   ZdtypeZmatch_row_splits_dtypesZflat_valuesshapeZndimsZ
row_splitsr   ZRaggedTensorDynamicShapeZfrom_tensorZbroadcast_dynamic_shapeZbroadcast_to
isinstanceboolZwith_flat_values)r   r   yZx_is_raggedZy_is_raggedr   Zshape_xZshape_yZbcast_shapeZx_valuesZy_valuesZmapped_valuesr   r   r   ragged_binary_elementwise_op$   sV   







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	   Zget_canonical_name_for_symbolr
   getfullargspecargsdefaultsrangelenformatvarargsappendvarkwjoin)r   ragged_argsragged_varargsZop_nameZargspec	arg_namesposr   r   r   _ragged_op_signaturei   s   


r)   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	   Zget_v1_namesr   unwrap)_V2_OPS_THAT_ARE_DELEGATED_TO_FROM_V1_OPSZget_v2_names
ValueError)r   versionr   r   r   _op_is_in_tf_version   s   r/   r*   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   Z"type_based_dispatch_signatures_forr   ZRaggedTensoritemsr
   
getargspecr   setaddr   intindexr/   r"   r)   r   Zprint_v2r$   sorted)	Z
tf_versionlinesZapi_signaturesapiZ
signaturesr'   r%   	signatureargr   r   r   ragged_op_list   s,    
r=   N)F)r*   )!__doc__Ztensorflow.python.opsr   r   r   Ztensorflow.python.ops.raggedr   r   Ztensorflow.python.utilr   r   r	   r
   Z#dispatch_for_unary_elementwise_apisZRaggedr   r   Z
reduce_sumZreduce_prodZ
reduce_minZ
reduce_maxZreduce_meanZreduce_varianceZ
reduce_stdZ
reduce_anyZ
reduce_allZstring_to_numberZstring_to_hash_bucketZreduce_join_v2r,   r)   r/   r=   r   r   r   r   <module>   s:   

6

