
    AVhd                     l   d Z ddlmZ ddl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 ddlmZ ddlmZ ddlmZ ddlmZ  ej,                  ej.                  d       G d dej0                               Z G d dej0                  ej0                        Z G d dej0                  ej0                        Z G d dej0                        Z G d dej0                        Zej<                   G d dej0                               Ze dk(  r ejB                          yy)z.Tests for Python ops defined in image_grad.py.    )parameterizedN)backprop)context)config)constant_op)dtypes)errors_impl)	test_util)array_ops_stack)gen_image_ops)gradient_checker_v2)	image_ops)math_ops)testz(align_corners=False not supported by XLAc                       e Zd Zej                  ej
                  ej                  ej                  j                  gZ
d Zd Zd Zd Zy)ResizeNearestNeighborOpTestBasec           	         g d}g d}| j                   D ]  }t        j                  dd      j                  |      j	                  |      }t        j                  ||      }t        j                  ||dd       }| j                         5  | j                  |t        |j                                      | j                  |      }d d d        | j                  |t        |j                                y # 1 sw Y   1xY w)N      r   r   r         r   r   r   shaper      )TYPESnparangereshapeastyper   constantr   resize_nearest_neighborcached_sessionassertEquallist	get_shapeevaluater   )selfin_shape	out_shapenptypexinput_tensor
resize_outs          Z/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/ops/image_grad_test_base.pytestShapeIsCorrectAfterOpz9ResizeNearestNeighborOpTestBase.testShapeIsCorrectAfterOp)   s    HI** 	:
))Aq/
!
!(
+
2
26
:a ))!8<l44\5>q^Ej  /D)=)=)?$@A]]:.
/ y$z'7'7"89	:/ /s   ;C77D 	c           	         g d}d}| j                   D ]  }t        j                  dd      j                  |      j	                  |      }|fd}| j                         5  t        j                  ||      }t        j                  t        j                  ||gd       }| j                  |d	       d d d         y # 1 sw Y   xY w)
Nr   r   r   r   r   r   r   c                 4    t        j                  | |dd       S Nr   r   r   r#   tr   s     r0   	resize_nnzWResizeNearestNeighborOpTestBase.testGradFromResizeToLargerInBothDims.<locals>.resize_nn?       00E!AJ??    r         ?deltaMbP?r   r   r   r    r!   r$   r   r"   r   	max_errorcompute_gradient
assertLessr)   r*   r+   r,   r-   r9   r.   errs           r0   $testGradFromResizeToLargerInBothDimszDResizeNearestNeighborOpTestBase.testGradFromResizeToLargerInBothDims8   s    HI** #
))Aq/
!
!(
+
2
26
:a& @   #"++AX>!++ 11L>89 	T"# ### #   AB==C	c           	         g d}d}| j                   D ]  }t        j                  dd      j                  |      j	                  |      }|fd}| j                         5  t        j                  ||      }t        j                  t        j                  ||gd       }| j                  |d	       d d d         y # 1 sw Y   xY w)
Nr   r3   r      c                 4    t        j                  | |dd       S r5   r6   r7   s     r0   r9   zXResizeNearestNeighborOpTestBase.testGradFromResizeToSmallerInBothDims.<locals>.resize_nnP   r:   r;   r   r<   r=   r?   r@   rD   s           r0   %testGradFromResizeToSmallerInBothDimszEResizeNearestNeighborOpTestBase.testGradFromResizeToSmallerInBothDimsI   s    HI** #
))Ar

"
"8
,
3
3F
;a& @   #"++AX>!++ 11L>89 	T"# ### #rG   c                 `   g d}d}| j                   D ]   }t        j                  dt        j                  |            j	                  |      j                  |      }dD ]  }||fd}| j                  d      5  t        j                  ||      }t        j                  ||gd	
      }d d d        | j                         5  t        j                  ||      }t        j                  ||gd	
      }	d d d        | j                  	dd         y # 1 sw Y   mxY w# 1 sw Y   0xY w)N)r   r   r   r   )r         r   r   TFc                 8    t        j                  | |dd |      S Nr   r   align_cornersr6   )r8   r   rS   s      r0   r9   zFResizeNearestNeighborOpTestBase.testCompareGpuVsCpu.<locals>.resize_nnb   s"    22q=: :r;   Fuse_gpur   r<   r=   h㈵>rtolatol)r   r   r   prodr    r!   r$   r   r"   r   rB   assertAllClose)
r)   r*   r+   r,   r-   rS   r9   r.   grad_cpugrad_gpus
             r0   testCompareGpuVsCpuz3ResizeNearestNeighborOpTestBase.testCompareGpuVsCpuZ   s%   HI** F
))Arwwx(
)
1
1(
;
B
B6
Ja( F-( 	:    / 	6$--ax@,(99,u6(	6
   " 	6$--ax@,(99,u6(	6
 	HhTE!FF	6 	6
	6 	6s   ;1D1D$D!$D-N)__name__
__module____qualname__r   float16float32float64r   bfloat16as_numpy_dtyper   r1   rF   rK   r^    r;   r0   r   r   #   s=     ::rzz2::v/M/M
N%:#"#"Fr;   r   c                      e Zd Zd Zddej
                  ddfdZ ej                   e	d e
j                         f            d        Z ej                  ddddd	dd	d
d      d        Zd Z ej                   e	d e
j                         f            d        Zd Z ej                  dddd
d	dddd      d        Zd Zy)ResizeBilinearOpTestBasec              #      K   ||f}||f}||f}|||f}dg}t        j                         s|ddgz  }|D ]  \  }}	|D ]  \  }
}|
|||	f   y w)NrO   FT)FF)r
   is_xla_enabled)r)   smaller_shapelarger_shape	up_sampledown_samplepass_throughshape_pairsoptionsrS   half_pixel_centersr*   r+   s               r0   _itGenzResizeBilinearOpTestBase._itGenu   s     -I/K ,/Lk<8K oG##%-00g-4 E))!, E
(I	=2DDDEEs   AAFc                 P   | j                  ||      5  t        j                  t        j                  |            j	                  |      j                  |      }t        j                  ||      }	fd}
t        j                  |
|	g      cd d d        S # 1 sw Y   y xY w)N)rU   	force_gpur   c                 <    t        j                  | dd       S )Nr   r   )rS   rt   )r   resize_bilinear)	in_tensorrS   rt   r+   s    r0   funcz4ResizeBilinearOpTestBase._getJacobians.<locals>.func   s(    ((aN'1	3 	3r;   )
r$   r   r   rZ   r    r!   r   r"   r   rB   )r)   r*   r+   rS   rt   dtyperU   rw   r-   r.   r{   s     ```      r0   _getJacobiansz&ResizeBilinearOpTestBase._getJacobians   s     
		W			B H
))BGGH%
&
.
.x
8
?
?
Fa ))!8<l3 !11$GH H Hs   A;BB%Tc           
         ddgddgddgg}|D ]  \  }}|dd|g}|dd|g}| j                  ||      D ]  \  }}}	}	t        j                  |      5 }
t        j                  t        j
                  |            j                  |      j                  t        j                        }t        j                  ||      }|
j                  |       t        j                  ||dd       }| j                  |t        |j!                                      d d d        
j#                        }| j                  |t        |j!                                      | j%                         5  | j'                  |      }| j                  |t        |j(                               | j'                  |      }| j                  |t        |j(                               d d d          y # 1 sw Y   xY w# 1 sw Y   xY w)	Nr   r   r      r   r   use_taper   )ru   r
   AbstractGradientTaper   r   rZ   r    r!   rc   r   r"   watchr   ry   r%   r&   r'   gradientr$   r(   r   )r)   r   
TEST_CASES
batch_sizechannel_countrm   rn   r*   r+   _taper-   r.   resized_tensorgrad_tensorresized_valuesgrad_valuess                    r0   _testShapesParameterizedz1ResizeBilinearOpTestBase._testShapesParameterized   s    a&1a&1a&)J%/ >!
M!1a7m !Q6l'+{{=,'O >
#(Iq!++X> 	H$ii)*228<CCBJJO!$--ax@,
**\
"$44\5>q^E.


9d>+C+C+E&F
G	H mmNLA4(=(=(?#@A  " 	>==8.


9d>+?+?&@
Ak2+


8T+*;*;%<
=		> 	>>>	H 	H	> 	>s   B?G $A-G, G),G6r   )r   r   r   r   r   c                     |dd|g}|dd|g}| j                  ||      D ]4  \  }}}}| j                  ||||      \  }	}
d}| j                  |	|
||       6 y )Nr   r   r   r   g{Gzt?)ru   r}   r[   )r)   r   r   rm   rn   r*   r+   rS   rt   jacob_ajacob_n	thresholds               r0   testGradientsz&ResizeBilinearOpTestBase.testGradients   s~      A}5M1m4LM<0B>)],>++Hi,>@gwi
'7IyABr;   c                    g d}g d}dD ]  }t         j                  t         j                  t         j                  t        j
                  j                  fD ]  }| j                  ||||      \  }}|t         j                  t        j
                  j                  fv r&| j                  ||t         j                  |      \  }}d}|t         j                  k(  rd}| j                  ||||         y )Nr   r3   rk   r|   rU   r?   rV   )	r   rb   rc   rd   r   re   rf   r}   r[   )	r)   r*   r+   rU   r|   r   r   r   r   s	            r0   	testTypesz"ResizeBilinearOpTestBase.testTypes   s    HI  D
**bjj"**foo.L.L D%  --iug . ?RZZ!?!?@@ ))	W * F*!W	BJJ)GWiC!DDr;   c                    g d}g d}t        j                  |      5 }t        j                  dd      j	                  |      j                  t        j                        }t        j                  ||      }|j                  |       t        j                  ||dd       }| j                         5  |j                  ||g      }d d d        d d d        | j                  d g       y # 1 sw Y   %xY w# 1 sw Y   )xY w)	Nr   r3   r   r   rI   r   r   r   )r
   r   r   r   r    r!   uint8r   r"   r   r   ry   r$   r   r%   )	r)   r   r*   r+   r   r-   r.   r/   grads	            r0   testGradOnUnsupportedTypez2ResizeBilinearOpTestBase.testGradOnUnsupportedType   s    HI		'	'	: 9d
))Ar

"
"8
,
3
3BHH
=a ))!8<l
jj,,\9Qq>Jj  9}}Z,899 	dVT"9 99 9s$   BC73C+C7+C4	0C77D c           	          i }dD ]  }| j                  ||||||      ||<    d}| j                  |d   |d   ||       y )Nrk   r   -C6?FTrW   )r}   r[   )	r)   r*   r+   rS   rt   r|   r   rU   r   s	            r0   _gpuVsCpuCasez&ResizeBilinearOpTestBase._gpuVsCpuCase   sg    D  ((



 ) d7m IUT$ZiiPr;   r   c                     |dd|g}|dd|g}| j                  ||      D ]"  } | j                  |dt        j                  i $ y )Nr   r   rM   rN   r|   )ru   r   r   rc   )r)   r   r   rm   rn   paramss         r0   r^   z,ResizeBilinearOpTestBase.testCompareGpuVsCpu   sS      A}5M2}5L++m\: 4d&3

34r;   c                 \    g d}g d}| j                  ||ddt        j                         y )N)r   r      r   )r   	      r   TF)rS   rt   r|   )r   r   rd   )r)   r*   r+   s      r0   testCompareGpuVsCpuFloat64z3ResizeBilinearOpTestBase.testCompareGpuVsCpuFloat64
  s2    HI jj  r;   N)r_   r`   ra   ru   r   rc   r}   r   
parameterssetr   executing_eagerlyr   r   r   r   r   r^   r   rg   r;   r0   ri   ri   s   s2   E" #(',**!#H, =C'@w'@'@'B CDE> F>2 =  	B	BD, =C'@w'@'@'B CDE# F#Q =  	4	4	r;   ri   c                       e Zd ZdZd Zd Zd Z ej                   e	d e
j                         f            d        Zy)ResizeBicubicOpTestBasezTests resize bicubic ops.c           	         g d}g d}t        j                  dd      j                  |      j                  t         j                        }dD ]  }t        j                  ||      }t        j                  ||dd |	      }| j                         5  | j                  |t        |j                                      | j                  |      }| j                  |t        |j                               d d d         y # 1 sw Y   xY w)
Nr   r   r   r   rO   r   r   r   rR   )r   r   r    r!   rc   r   r"   r   resize_bicubicr$   r%   r&   r'   r(   r   )r)   r*   r+   r-   rS   r.   r/   s          r0   r1   z1ResizeBicubicOpTestBase.testShapeIsCorrectAfterOp  s    HI
		!Q)00<A& < ))!8<l++
	!AmEj  <D)=)=)?$@A]]:.
D)9)9$:;< <	<< <s   A C==D	c                    g d}g dt        j                  dd      j                  |      j                  t         j                        }t        j                  ||      }dD ][  }|ffd	}| j                         5  t        j                  t        j                  ||g       }d d d        | j                  d       ] y # 1 sw Y   xY w)	Nr3   r   r   r   r   rO   c                 :    t        j                  | dd |      S rQ   r   r   r.   rS   r+   s     r0   r{   zJResizeBicubicOpTestBase.testGradFromResizeToLargerInBothDims.<locals>.func1  %    '')Aa.G 	Gr;   r?   r   r   r    r!   rc   r   r"   r$   r   rA   rB   rC   r)   r*   r-   r.   rS   r{   rE   r+   s          @r0   rF   z<ResizeBicubicOpTestBase.testGradFromResizeToLargerInBothDims(  s    HI
		!Q)00<A'':L& 
!+8 G   I!++ 11$GII ooc4 
!I I   ?(CC	c                    g d}g dt        j                  dd      j                  |      j                  t         j                        }t        j                  ||      }dD ][  }|ffd	}| j                         5  t        j                  t        j                  ||g       }d d d        | j                  d       ] y # 1 sw Y   xY w)	Nr   r3   r   rI   r   rO   c                 :    t        j                  | dd |      S rQ   r   r   s     r0   r{   zKResizeBicubicOpTestBase.testGradFromResizeToSmallerInBothDims.<locals>.funcD  r   r;   r?   r   r   s          @r0   rK   z=ResizeBicubicOpTestBase.testGradFromResizeToSmallerInBothDims;  s    HI
		!R  *11"**=A'':L& 
!+8 G   I!++ 11$GII ooc4 
!I Ir   Tc                    t        j                  |      5 }g d}g d}t        j                  dd      j	                  |      j                  t        j                        }t        j                  ||      }|j                  |       t        j                  ||dd       }| j                         5  |j                  ||g      }d d d        d d d        | j                  d g       y # 1 sw Y   %xY w# 1 sw Y   )xY w)	Nr   r   r3   r   rI   r   r   r   )r
   r   r   r   r    r!   r   r   r"   r   r   r   r$   r   r%   )	r)   r   r   r*   r+   r-   r.   r/   r   s	            r0   r   z1ResizeBicubicOpTestBase.testGradOnUnsupportedTypeN  s    		'	'	: 
9dhi
))Ar

"
"8
,
3
3BHH
=a ))!8<l
jj++L)Aa.Ij  9}}Z,89
9 	dVT"9 9
9 
9s$   BC73C+C7+C4	0C77D N)r_   r`   ra   __doc__r1   rF   rK   r   r   r   r   r   r   rg   r;   r0   r   r     sL    !<!&!& =C'@w'@'@'B CDE# F#r;   r   c                       e Zd ZdZd Zd Zy)ScaleAndTranslateOpTestBasezTests scale and translate op.c                    g d}g dt        j                  dd      j                  |      j                  t         j                        }g d}g d}g d}|D ]  }|D ]  }|D ]|  }dD ]u  }	| j                         5  t        j                  ||	      }
||||	ffd
	}t        j                  t        j                  ||
g       }d d d        | j                  d       w ~   y # 1 sw Y   $xY w)Nr3   r   r   r   )lanczos1lanczos3lanczos5gaussianboxtriangle	keyscubicmitchellcubic)      ?r   )gGz?gGz?) @r   )        r   )gQ	@g
ףp=
?)r   g@)g      Y@g      i@rO   r   c                     t        j                  | dd t        j                  |      t        j                  |      ||      S )Nr   r   scaletranslationkernel_type	antialias)r   scale_and_translater   r"   )r.   r   r   r   r   r+   s        r0   scale_transz:ScaleAndTranslateOpTestBase.testGrads.<locals>.scale_transt  sF     !44 aN%..u5 + 4 4[ A +') )r;   r?   )r   r   r    r!   rc   r$   r   r"   r   rA   rB   rC   )r)   r*   r-   kernel_typesscalestranslationsr   r   r   r   r.   r   rE   r+   s                @r0   	testGradsz%ScaleAndTranslateOpTestBase.testGradsa  s   HI
		!Q)00<AL 4FIL '% '+' 	'K( 'i$$& I(11!8Dl %**5*5(1	) (11&779EHIc#I* OOC&-'	'''I Is   <A	C((C1c                    g d}g d}t        j                  dd      j                  |      j                  t         j                        }g d}d}d}d}|D ]  }| j                         5  t        j                  ||	      }	t        j                         5 }
|
j                  |	       t        j                  |	|d
d t        j                  |      t        j                  |      ||      }ddd       
j                  |	      d   }| j                  |      }| j                  t        j                   |      |       ddd        y# 1 sw Y   _xY w# 1 sw Y   	xY w)zCTests that Gradients for 1.0 scale should be ones for some kernels.r3   r   r   r   )r   r   r   r   r   r   r   Tr   r   r   r   N)r   r   r    r!   rc   r$   r   r"   r   GradientTaper   r   r   r   r(   r[   	ones_like)r)   r*   r+   r-   r   r   r   r   r   r.   r   scale_and_translate_outr   grad_vs                 r0   testIdentityGradsz-ScaleAndTranslateOpTestBase.testIdentityGrads  s=   HI
		!Q)00<APLEKI# :  :"++AX>""$ 	#
**\
"$-$A$A!n((/%..{;%!%#
!	# }}4lCAFt$BLL0&9: ::	# 	#: :s&   *,EAE
,AE
EEE 	N)r_   r`   ra   r   r   r   rg   r;   r0   r   r   ^  s    %%'N:r;   r   c                       e Zd Zd Zd Zd Zy)CropAndResizeOpTestBasec           	      b   d}d}d}d}d}d}d}||||g}||g}	||||g}
t        j                  d||z  |z  |z        j                  |      j                  t         j                        }t        j
                  g dg dgt         j                        }t        j
                  dd	gt         j                        }t        j                  t        j                  ||
      t        j                  ||dg
      t        j                  ||g
      t        j                  |	dg
            }| j                         5  | j                  |
t        |j                                      | j                  |      }| j                  |
t        |j                                d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   )r   r   r   r   )皙?皙?ffffff?皙?r|   r   r   )r   r   r    r!   rc   arrayint32r   crop_and_resizer   r"   sessionr%   r&   r'   r(   r   )r)   batchimage_heightimage_widthcrop_height
crop_widthdepth	num_boxesimage_shape	crop_sizecrops_shapeimageboxesbox_indcropss                  r0   r1   z1CropAndResizeOpTestBase.testShapeIsCorrectAfterOp  sv   ELKKJEI,U;Kj)Ik:u=KIIa-; $W[1&&2D 
HHl$45RZZHEhh1vRXX.G%%U+6U9a.9WYK8Yqc2	4E
 
 7
{D):$;<mmE"e
{D$567 7 7s   <A F%%F.c                    | j                  ||k         | j                  |dk\         t        |      }| j                  d|z  |z  d||z
  z  k         t        j                  ||      }g }t        |      |k  rnt        j                  j                  ||      }t        j                  t        j                  ||z
        |kD        r|j                  |       t        |      |k  rn|S )an  Generate samples that are far enough from a set of anchor points.

    We generate uniform samples in [low, high], then reject those that are less
    than radius away from any point in anchors. We stop after we have accepted
    num_samples samples.

    Args:
      low: The lower end of the interval.
      high: The upper end of the interval.
      anchors: A list of length num_crops with anchor points to avoid.
      radius: Distance threshold for the samples from the anchors.
      num_samples: How many samples to produce.

    Returns:
      samples: A list of length num_samples with the accepted samples.
    r   r         ?)	
assertTruelenr   r    randomuniformallfabsappend)	r)   lowhighanchorsradiusnum_samplesnum_anchorssamplessamples	            r0   _randomUniformAvoidAnchorsz2CropAndResizeOpTestBase._randomUniformAvoidAnchors  s    " 	OOC$JOOFaK g,KOOAJ,sdSj/AABjj+.GG
g,
$yy  d+f	()F2	3v g,
$ Nr;   c                    t         j                  j                  d       d}d|z  }d\  }}d}t        dd      D ]  }t        dd      D ]  }t        dd      D ]  }t        dd      D ]  }	t        dd      D ]  }
|
}||||	g}||gt        j                  d||z  |z  |	z        j                  |      j                  t         j                        }g }t        |
      D ]q  }| j                  ||t        j                  dd|      |d      \  }}| j                  ||t        j                  dd|      |d      \  }}|j                  ||||g       s t        j                  |t         j                        }t        j                  |t         j                        }t        j                  ||	      t        j                  ||
dg	      t        j                  ||
g	      fd
t        j                   d      5  | j#                         5  t%        j&                         rt        j(                         r| j+                  t,        j.                        5  t1        j2                  fdg       ddd       | j+                  t,        j.                        5  t1        j2                  fdg       ddd       ntt1        j4                  t1        j2                  fdg       }t1        j4                  t1        j2                  fdg       }t7        ||      }| j9                  |d       ddd       ddd          
  y# 1 sw Y   xY w# 1 sw Y   5xY w# 1 sw Y   9xY w# 1 sw Y   xY w)a`  Test that the gradient is correct for randomly generated boxes.

    The mapping is piecewise differentiable with respect to the box coordinates.
    The points where the function is not differentiable are those which are
    mapped to image pixels, i.e., the normalized y coordinates in
    np.linspace(0, 1, image_height) and normalized x coordinates in
    np.linspace(0, 1, image_width). Make sure that the box coordinates are
    sufficiently far away from those rectangular grid centers that are points of
    discontinuity, so that the finite difference Jacobian is close to the
    computed one.
    r   r?   r   )g      g      ?r   r   r   r   r   c           	      `    t        j                  | |t        j                  dg            S )Nr   r   )r   r   r   r"   )image_tensorboxes_tensorbox_ind_tensorr   s     r0   crop_resizez@CropAndResizeOpTestBase.testGradRandomBoxes.<locals>.crop_resize  s1     00 ,((1#>@ @r;   TrT   c                      |       S Nrg   r-   r	  r  s    r0   <lambda>z=CropAndResizeOpTestBase.testGradRandomBoxes.<locals>.<lambda>  s    K<$@ r;   Nc                      |       S r  rg   r-   r  r  s    r0   r  z=CropAndResizeOpTestBase.testGradRandomBoxes.<locals>.<lambda>   s    Ka$@ r;   c                      |       S r  rg   r  s    r0   r  z=CropAndResizeOpTestBase.testGradRandomBoxes.<locals>.<lambda>%  s    k!\&B r;   c                      |       S r  rg   r  s    r0   r  z=CropAndResizeOpTestBase.testGradRandomBoxes.<locals>.<lambda>)  s    k,&B r;   gMb`?)r   r   seedranger   r    r!   rc   r  linspacer   r   r   r   r"   r
   devicer$   r   is_op_determinism_enabledis_gpu_availableassertRaisesr	   UnimplementedErrorr   rB   rA   maxrC   )r)   r>   r   r   r   r   r   r   r   r   r   r   r   r   r   r   y1y2x1x2r   err1err2rE   r
  r	  r  r   r  s                           @@@@@r0   testGradRandomBoxesz+CropAndResizeOpTestBase.testGradRandomBoxes  s?    IINN1EYFICLQ{ :/q! 9/+1+ 8	/JQ{ 7/e"1a[ 6/	e"L+uEk&
3iii5<#7+#E %$& ''.w{';FF2::<N eY' /!88r{{1a>KB88r{{1a=vqJB b"b"-./ hhuBJJ7e		%rxx8g(11%{Kl(11%	1~Nl*33GI;On@ ##D1 /((* /668002**;+I+IJ *)::@'.** **;+I+IJ *)::@'.** *
 /88,==B)N,-D /88,==B)N,-D dD/COOC.-// /?6/7/8	/9/:/P* ** */ // /sV   	NAM6"M>'M6%M*A=M6>NM'#M6*M3/M66M?;NNN)r_   r`   ra   r1   r  r#  rg   r;   r0   r   r     s    78<L/r;   r   c                   T    e Zd Zej                  ej
                  gZd Zd Zd Z	d Z
y)RGBToHSVOpTestBasec           	         g d}g d}| j                   D ]  }t        j                  j                  ddg d      j	                  |      }t        j                  ||      }t        j                  |      }| j                         5  | j                  |t        |j                                      d d d        | j                  |      }| j                  |t        |j                                y # 1 sw Y   BxY w)N)r         r   r      )r   sizer   )r   r   r   randintr!   r   r"   r   
rgb_to_hsvr$   r%   r&   r'   r(   r   )r)   r*   r+   r,   r-   rgb_input_tensorhsv_outs          r0   r1   z,RGBToHSVOpTestBase.testShapeIsCorrectAfterOp4  s    HI** 7
))

ACn

=
D
DV
La$--ax@(()9:g  ?D):):)<$=>?g&g
y$w}}"567? ?s   *C22C;	c                 $   d }| j                   D ]~  }t        j                  g dg dg dg      j                  |      }t	        j
                  ||j                        }t        j                  ||g      \  }}| j                  ||d        y )Nc                 ,    t        j                  |       S r  r   r,  r-   s    r0   fz8RGBToHSVOpTestBase.testRGBToHSVGradSimpleCase.<locals>.fC      %%a((r;   )r   r   g333333?)g?r   g333333?)r   r   g?r   r   rY   )
r   r   r   r!   r   r"   r   r   rB   r[   )r)   r3  r,   r-   r-  
analytical	numericals          r0   testRGBToHSVGradSimpleCasez-RGBToHSVOpTestBase.testRGBToHSVGradSimpleCaseA  s    ) ** <
((O_ 7< = >>DfVn $--aqww?1BB
!j)
)Zd;<r;   c                 v   d }t         j                  j                  d       t         j                  j                  dddd      j	                  t         j
                        }t        j                  ||j                        }| j                  t        j                  t        j                  ||g       d       y )Nc                 ,    t        j                  |       S r  r1  r2  s    r0   r3  z8RGBToHSVOpTestBase.testRGBToHSVGradRandomCase.<locals>.fR  r4  r;   r   r   r   r   r   r   )r   r   r  randr!   rc   r   r"   r   rC   r   rA   rB   )r)   r3  r-   r-  s       r0   testRGBToHSVGradRandomCasez-RGBToHSVOpTestBase.testRGBToHSVGradRandomCaseP  s    ) IINN1
		q!Q"))"**5A"++AQWW=OO%% 11!6F5GH	JKOQr;   c                    g d}d }d }t        j                  |d   |d   |d   f      j                  t         j                        }dt        j                  |d   |d   |d   f      j                  t         j                        z  }dt        j                  |d   |d   |d   f      j                  t         j                        z  }t        j                  |||gd	
      }t        j                  ||      }t        j                  ||g      \  }	}
t        j                  ||g      \  }}| j                  |
|	d       | j                  ||	d       | j                  ||
d       y )N)r   
   r'  r   c                 ,    t        j                  |       S r  r1  r2  s    r0   r3  zBRGBToHSVOpTestBase.testRGBToHSVGradSpecialCaseRGreatest.<locals>.fc  r4  r;   c                     | d   }| d   }| d   }|}dt        j                  ||      z
  }dt        j                  ||z
  ||z
        z  }|dz  }t        j                  |||gd      S )	N).r   ).r   ).r   r   <   ih  axis)r   
div_no_nanr   stack)r-   rgbvshs          r0   f_dummyzHRGBToHSVOpTestBase.testRGBToHSVGradSpecialCaseRGreatest.<locals>.f_dummyf  s|     F)a
F)a
F)a
a
h!!!Q'
'a
x""1q5!a%0
0a
c'a""Aq!9266r;   r   r   r   r   r   rB  rC  r   r   r5  )
r   onesr!   rc   rF  r   r"   r   rB   r[   )r)   r*   r3  rM  x_redsx_greensx_bluesr-   r-  r6  r7  analytical_dummynumerical_dummys                r0   $testRGBToHSVGradSpecialCaseRGreatestz7RGBToHSVOpTestBase.testRGBToHSVGradSpecialCaseRGreatest^  sd    H)7 WWhqk8A;<=DDRZZPFRWW	!hqk8A;/117

1CDHBGG	!hqk8A;/117

1CDG
&(G,26A"++AX> 0@@	J	 )<(L(L"#)%%o	:D9(*4@>r;   N)r_   r`   ra   r   rc   rd   r   r1   r8  r<  rT  rg   r;   r0   r%  r%  /  s+     ::rzz
"%7<Q&?r;   r%  __main__)"r   absl.testingr   numpyr   tensorflow.python.eagerr   r   tensorflow.python.frameworkr   r   r   r	   r
   tensorflow.python.opsr   r   r   r   r   tensorflow.python.platformr   for_all_test_methodsdisable_xlaTestCaser   ri   r   r   r    run_all_in_graph_and_eager_modesr%  r_   mainrg   r;   r0   <module>ra     s   5 &  , + . 3 . 3 1 1 / 5 + * +  	 5 5 JLKFdmm KFLKF\`t}}m.D.D `FE#dmm]-C-C E#PC:$-- C:LH/dmm H/V ++T? T? ,T?n z$))+ r;   