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 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_opsZ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)ÚinputsZget_attrr   ÚshapeZreshaper   ÚrangeZreduce_prodr   Zdynamic_partitionZparallel_dynamic_stitch)	ÚopZgradsÚdataÚindicesr	   Zprefix_shapeZoriginal_indicesZpartitioned_indicesZreconstructed© r   úe/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/ops/data_flow_grad.pyÚ_DynamicPartitionGrads   s   



ÿÿÿr   ZDynamicStitchZ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
   Zdtyper   Z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   ZIndexedSlicesr   r   Zoutputsr   Zunsorted_segment_sumÚvaluesr   )r   r   Z
num_valuesZindices_gradr
   Zoutput_shapeZoutput_rowsZvalues_gradr   )r   r   r   r   Ú_DynamicStitchGrads,   s   
r    ÚQueueZQueueEnqueueZQueueEnqueueManyZQueueDequeueZQueueDequeueManyZQueueDequeueUpToZ
QueueCloseZ	QueueSizeÚStackZ	StackPushZStackPopZ
StackCloseZGetSessionHandleZGetSessionHandleV2ZGetSessionTensorZDeleteSessionTensorN)Ú__doc__Ztensorflow.python.frameworkr   r   r   Ztensorflow.python.opsr   r   r   ZRegisterGradientr   r    ZNotDifferentiabler   r   r   r   Ú<module>   s8   















