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 e 	d¡d	d
„ ƒZ
e 	d¡e 	d¡dd„ ƒƒZe d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ e d¡ dS ) z4Gradients for operators defined in data_flow_ops.py.é    )Údtypes)Úindexed_slices)Úops)Ú	array_ops)Údata_flow_ops)Úmath_opsÚDynamicPartitionc           	      G   st   | j d }| j d }|  d¡}t |¡}t t t |¡¡|¡}t 	|||¡}t 
||¡}t |t |¡¡}|dgS )zGradients for DynamicPartition.r   é   Únum_partitionsN)ÚinputsÚget_attrr   ÚshapeÚreshaper   ÚrangeÚreduce_prodr   Údynamic_partitionÚparallel_dynamic_stitch)	ÚopÚgradsÚdataÚindicesr
   Úprefix_shapeÚoriginal_indicesÚpartitioned_indicesÚreconstructed© r   úS/var/www/myenv/lib/python3.10/site-packages/tensorflow/python/ops/data_flow_grad.pyÚ_DynamicPartitionGrads   s   



ÿÿÿr   ÚDynamicStitchÚParallelDynamicStitchc                    sŒ   t ˆjƒd }dg| }‡fdd„‰ ‡ ‡fdd„t|ƒD ƒ}tˆtjƒr9t ˆjd ¡}|d }t	 
ˆjˆj|¡‰‡fdd„|D ƒ}|| S )	z6Gradients for DynamicStitch and ParallelDynamicStitch.é   Nc                    s$   ˆ j d jtjkr| S t | tj¡S )Nr   )r   Údtyper   Úint32r   Úcast)Úx)r   r   r   ÚAsInt324   s   ÿz$_DynamicStitchGrads.<locals>.AsInt32c                    s   g | ]	}ˆ ˆj | ƒ‘qS r   )r   )Ú.0Úi)r%   r   r   r   Ú
<listcomp>8   s    z'_DynamicStitchGrads.<locals>.<listcomp>r   c                    s   g | ]}t  ˆ |¡‘qS r   )r   Úgather)r&   Úinp)Úgradr   r   r(   =   s    )Úlenr   r   Ú
isinstancer   ÚIndexedSlicesr   r   Úoutputsr   Úunsorted_segment_sumÚvaluesr   )r   r+   Ú
num_valuesÚindices_gradr   Úoutput_shapeÚoutput_rowsÚvalues_gradr   )r%   r+   r   r   Ú_DynamicStitchGrads,   s   
r7   ÚQueueÚQueueEnqueueÚQueueEnqueueManyÚQueueDequeueÚQueueDequeueManyÚQueueDequeueUpToÚ
QueueCloseÚ	QueueSizeÚStackÚ	StackPushÚStackPopÚ
StackCloseÚGetSessionHandleÚGetSessionHandleV2ÚGetSessionTensorÚDeleteSessionTensorN)Ú__doc__Útensorflow.python.frameworkr   r   r   Útensorflow.python.opsr   r   r   ÚRegisterGradientr   r7   ÚNotDifferentiabler   r   r   r   Ú<module>   s8   















