
    2Vhs                         d dl 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ZddZddZddZ	 	 	 	 	 	 	 dd	Zd d
dZh dZ	 	 	 	 ddZh dZ	 	 	 ddZd Z	 ddZ	 ddZ	 	 	 	 	 	 	 ddZy)    N)backend)convert_to_tensor)	draw_seed)bilinearnearestlanczos3lanczos5bicubicc                    t        |       } t        j                  |      }|dk(  rdnd}t        | j                        dvrt        d| j                         | j                  }t        j                  | j                  t              }| j                  |      } t        g d| j                        }t        j                  | ||df      } t        j                  | |	      } | j                  |      S )
Nchannels_last      yInvalid images rank: expected rank 3 (single image) or rank 4 (batch of images). Received input with shape: images.shape=)gŏ1w-!?gbX9?gv/?dtype)axesaxis)r   r   standardize_data_formatlenshape
ValueErrorr   result_typefloatastypejnp	tensordotexpand_dims)imagesdata_formatchannels_axisoriginal_dtypecompute_dtypergb_weightss         K/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/jax/image.pyrgb_to_grayscaler)      s    v&F11+>K%8BbM
6<<&"LL>+
 	
 \\N''e<M]]=)F $ K ]]6;mR5HIF__V-8F==((    c                    t        |       } | j                  }t        j                  |      }|dk(  rdnd}t	        | j
                        dvrt        d| j
                         t        j                  |      s!t        dt        j                  |             t        j                  |      j                  }t        j                  t        j                  |       |k  d|       } t        j                  | d|      \  }}}t        j                  ||      }t        j                  ||      }t        j                  ||      }d	 }t        j                    ||||      |
      } | S )Nr   r   r   r   r   CInvalid images dtype: expected float dtype. Received: images.dtype=        r   c                 z   t        j                  t        j                  | |      |      }t        j                  t        j                  | |      |      }||z
  }t        j                  |dkD  |d      }t        j                  |dkD  |d      }t        j                  |dkD  ||z  d      }dd|z  z  }	t        j                  ||k(  |	|| z
  z  dz   |	| |z
  z  dz         }
t        j                  || k(  |	||z
  z  |
      }
t        j                  |dkD  |
d      |
dk  j	                  |
j
                        z   }
|
||fS )Nr         ?r-         @gUUUUUU?gUUUUUU?)r   maximumminimumwherer   r   )rgbvaluer2   range_
safe_value
safe_range
saturationnormhues              r(   rgb_planes_to_hsv_planesz,rgb_to_hsv.<locals>.rgb_planes_to_hsv_planesC   s'   CKK1-q1++ckk!Q/3YYuqy%5
YYvz637
YYuqy&:*=sC
cJ&'iiQJAENY&AENY&

 ii
DAENC8ii
C-s0B0B3990MMJ%%r*   r   )r   r   r   r   r   r   r   is_float_dtypestandardize_dtyper   finfoepsr3   abssplitsqueezestack)	r"   r#   r   r$   rB   redgreenbluer>   s	            r(   
rgb_to_hsvrJ   +   sE   v&FLLE11+>K%8BbM
6<<&"LL>+
 	

 !!%(&&-&?&?&F%GI
 	
 ))E


CYYswwv,c6:FyyM:C
++c=
)CKK}-E;;t]+D&( YY eT2F Mr*   c                 8   t        |       } | j                  }t        j                  |      }|dk(  rdnd}t	        | j
                        dvrt        d| j
                         t        j                  |      s!t        dt        j                  |             t        j                  | d|      \  }}}t        j                  ||      }t        j                  ||      }t        j                  ||      }d }t        j                   ||||      |	      } | S )
Nr   r   r   r   r   r,   r   c                    t        j                  | d      dz  }t        j                  t        j                  |dz
        dz
  dd      }t        j                  dt        j                  |dz
        z
  dd      }t        j                  dt        j                  |dz
        z
  dd      }d|z
  }||||z  z   z  }||||z  z   z  }	||||z  z   z  }
||	|
fS )Nr/   r0   g      @r-   g       @g      @)r   modcliprC   )r=   r;   r7   dhdrdgdbone_minus_srG   rH   rI   s              r(   hsv_planes_to_rgb_planesz,hsv_to_rgb.<locals>.hsv_planes_to_rgb_planess   s    WWS#$XXcggb3h'#-sC8XXcCGGBH--sC8XXcCGGBH--sC8J&{Z"_45zB67j2o56E4r*   r   )r   r   r   r   r   r   r   r?   r@   r   rD   rE   rF   )r"   r#   r   r$   r=   r;   r7   rT   s           r(   
hsv_to_rgbrU   ]   s   v&FLLE11+>K%8BbM
6<<&"LL>+
 	

 !!%(&&-&?&?&F%GI
 	
 !YYvq-@CU
++c=
)CZ7JKK}-E
  YY j%8}F Mr*   c	           
         t        j                  |      }|t        vrt        dt         d|       |dk7  rt        d|       |r|rt        d      t	        |      dk(  st        d|       t        |      }|\  }	}
t	        | j                        dk(  r[|d	k(  r%| j                  d
   f|z   | j                  d   fz   }n!| j                  d
   | j                  d   f|z   }| j                  d
   }n]t	        | j                        dk(  r-|d	k(  r|| j                  d   fz   }n,| j                  d
   f|z   }nt        d| j                         |rM| j                  }|d	k(  r|d   |d   }}n
|d   |d   }}t        t        ||	z        |
z        }t        t        ||      d      }t        t        ||
z        |	z        }t        t        ||      d      }t        t        ||z
        dz        }t        t        ||z
        dz        }|d	k(  rGt	        | j                        dk(  r| d d |||z   |||z   d d f   } ng| |||z   |||z   d d f   } nQt	        | j                        dk(  r| d d d d |||z   |||z   f   } n | d d |||z   |||z   f   } n
|r| j                  }|d	k(  r|d   |d   |d   }}}n|d   |d   |d   }}}t        t        ||	z        |
z        }t        ||      }t        t        ||
z        |	z        }t        ||      }t        t        ||z
        dz        }t        t        ||z
        dz        }|d	k(  r|d
kD  rt	        | j                        dk(  rht        j                  t        j                  |||f| j                        |z  | t        j                  ||||f| j                        |z  gd      }nt        j                  t        j                  |||f| j                        |z  | t        j                  |||f| j                        |z  gd
      }nd|d
kD  rt	        | j                        dk(  rht        j                  t        j                  |||f| j                        |z  | t        j                  ||||f| j                        |z  gd      }nt        j                  t        j                  |||f| j                        |z  | t        j                  |||f| j                        |z  gd      }ny| }nu|d
kD  rt	        | j                        dk(  rPt        j                  t        j                  |||f      |z  | t        j                  ||||f      |z  gd      }nt        j                  t        j                  |||f      |z  | t        j                  |||f      |z  gd      }n|d
kD  rt	        | j                        dk(  rOt        j                  t        j                  |||f      |z  | t        j                  ||||f      |z  gd      }nOt        j                  t        j                  |||f      |z  | t        j                  |||f      |z  gd      }n| }|} t        j                   j#                  | |||      S )N<Invalid value for argument `interpolation`. Expected of one . Received: interpolation=constantz\Invalid value for argument `fill_mode`. Only `'constant'` is supported. Received: fill_mode=zIOnly one of `pad_to_aspect_ratio` & `crop_to_aspect_ratio` can be `True`.   zPArgument `size` must be a tuple of two elements (height, width). Received: size=r   r   r   r      r   r   r   r   r   )method	antialias)r   r   RESIZE_INTERPOLATIONSr   r   tupler   intr   maxminr   concatenateonesr   jaximageresize)r"   sizeinterpolationr^   crop_to_aspect_ratiopad_to_aspect_ratio	fill_mode
fill_valuer#   target_heighttarget_width
batch_sizer   heightwidthcrop_height
crop_widthcrop_box_hstartcrop_box_wstartchannels
pad_height	pad_widthimg_box_hstartimg_box_wstart
padded_imgs                            r(   rh   rh      s    11+>K11J$%%?P
 	
 J11:=
 	
 3
 	
 t9>//3f6
 	
 ;D"&M<
6<<A/)LLO%,R0@/BBDLLOV\\!_5<D\\!_
	V\\	a	/)6<<+--DLLO%,D"LL>+
 	
 /)!"IuRyEF!"IuRyEF% 56EF#fk2A6v45EF
UJ/3
eF[$89A=>eEJ$67!;</)6<< A%#o&CC#o
&BB  #o&CC#o
&BB 6<< A%#o&CC#o
&BBD  #o&CC#o
&BBD
 
/)&+BirE"I8EF&+BirE"I8EFu}45DE
,
f|34}DE	y)	U:#67!;<U9u#459:/)!v||$)!$HH!+^UH M&,ll )	)
 #HH!+^UH M&,ll )	) "J" "%HH!/ A&,ll )	)
 #HH!/ A&,ll )	) "J   !#v||$)!$HH!+V^X N&,ll )	)
 #HH!+V^X N&,ll )	) "J" "%HH!' B&,ll )	)
 #HH!' B&,ll )	) "J" $
!v||$)!$HH!+X~u M )) #HH!+X~u M ))
 "J "%HHh%FG()"HHh%FG()	 	"J  !#v||$)!$HH!+Xv~ N )) #HH!+Xv~ N ))
 "J "%HHh%GH()"HHh%GH()	 	"J $
99]i   r*   r[   )r   r   >   wrapmirrorr   reflectrY   c           	      Z   t        j                  |      }|t        j                         vr,t	        dt        t        j                                d|       |t        vrt	        dt         d|       t        |      }t        | j                        dvrt	        d| j                         t        |j                        dvrt	        d|j                         d	}t        | j                        d
k(  rt        j                  | d      } d}t        |j                        dk(  rt        j                  |d      }|dk(  rt        j                  | d      } | j                  d   }t        j                  | j                  dd  D cg c]  }t        j                  |       c}ddi}	t        j                  |	D 
cg c]  }
t        j                  |
d       c}
d      }t        j                   ||ddddf      }|d d df   }|d d df   }|d d df   }|d d df   }|j"                  d d df   j                  |      }|j"                  d d df   j                  |      }|j"                  d d df   j                  |      }|j"                  d d df   j                  |      }t        j$                  |ddgddggd      }t        j&                  ||d
d
f      }|d d dddf   }t        j$                  |ddgddgg      }|j"                  d d dddf   j                  d      }t        j(                  d||      }t        j*                  |dd      }|t        j&                  |g |j                  ddd      z  }t-        j.                  t0        j2                  j4                  j6                  t        |   ||      } t1        j8                  |      | |      }|dk(  rt        j                  |d      }|rt        j:                  |d      }|S c c}w c c}
w )NrW   rX   8Invalid value for argument `fill_mode`. Expected of one . Received: fill_mode=r   r   )r[   rZ   zInvalid transform rank: expected rank 1 (single transform) or rank 2 (batch of transforms). Received input with shape: transform.shape=Fr   r   r   Tr[   channels_firstr   rZ   r   r[   indexingijr   rZ   r      )rz   constant_values)rz   zBhwij, Bjk -> Bhwik)sourcedestination)r   ordermodecvalr   r   r[   rZ   )r   r   AFFINE_TRANSFORM_INTERPOLATIONSkeysr   setAFFINE_TRANSFORM_FILL_MODESr   r   r   r   r!   	transposemeshgridarangerd   tileatpadreshapeeinsummoveaxis	functoolspartialrf   scipyndimagemap_coordinatesvmaprE   )r"   	transformrj   rm   rn   r#   need_squeezerq   ri   r   xindicesa0a2b1b2offsetcoordinates_map_coordinatesaffineds                       r(   affine_transformr     s	    11+>K;@@BBJ2779:; <*O-
 	

 33F*++A)N
 	

 "),I
6<<&"LL>+
 	

 9??6)(/1
 	
 L
6<<Aa0
9??q OOIA6	&&v|4aJ ||'-||AB'7	8t#**T
	8CGH oo.67	$7bG hhwQ1a 89G 
1a4B	1a4B	1a4B	1a4BQT"&&r*IQT"&&r*IQT"&&r*IQT"&&r*I q!fq!f-qI I
Aq'9:Iq!A#qy!FWWVAA'78FQ!QY'++A.I **2GYGK,,{21EK3;;v-Ev||-EQ-E-E1-EFFK !((		))-m<	 )chh'(=G&&--6++gA.NY 
9 	8s   
P# P(c                    t        j                  |      }t        j                         vr,t	        dt        t        j                                d       t        | j                        dvrt	        d| j                         |j                  dd  dk7  s|j                  dvrt	        d|j                         |j                  dd  dk7  s|j                  dvrt	        d	|j                         |j                  |j                  k7  r%t	        d
|j                   d|j                         d}t        | j                        dk(  rt        j                  | d      } d}t        |j                        dk(  rt        j                  |d      }t        |j                        dk(  rt        j                  |d      }|dk(  rt        j                  | d      } | j                  \  }}t        t        j                  |d      t        j                  |d            }	t        j                  t        j                        t        j                        d      \  }
}t        j                   |
j#                         |j#                         t        j$                  |
      j#                         gd      fd} t'        j(                  |      |	      }fd} t'        j(                  |d      | |      }t        j*                  |dd      }|dk(  rt        j                  |d      }|rt        j,                  |d      }|S )NrW   rX   r   r   r\   )r   rZ   )rZ   r   zfInvalid start_points shape: expected (4,2) for a single image or (N,4,2) for a batch. Received shape: zdInvalid end_points shape: expected (4,2) for a single image or (N,4,2) for a batch. Received shape: zRstart_points and end_points must have the same shape. Received start_points.shape=z, end_points.shape=Fr   r   r   TrZ   r   r   float32r   xy)r   c                     | d   d   z  | d   d   z  z   dz   }| d   d   z  | d   d   z  z   | d   z   |z  }| d   d   z  | d   d   z  z   | d	   z   |z  }t        j                  ||gd
      S )N   r      r[   r/   rZ   r   r   r   r   )r   rF   )r   denomx_iny_ingrids       r(   transform_coordinatesz4perspective_transform.<locals>.transform_coordinates-  s    !tAw&1Q)??#EaL47"Yq\DG%;;ilJ aL47"Yq\DG%;;ilJ yy$A..r*   c                 |    fd} t        j                  |d      t        j                  | dd            S )Nc                     t         j                  j                  j                  | t           d      j                        S )NrY   r   )rf   r   r   r   r   r   )channel_imgcoordsrn   rr   rj   rs   s    r(   interpolate_channelzMperspective_transform.<locals>.interpolate_image.<locals>.interpolate_channel:  sG    99$$445mD 5  gfe$%r*   r   in_axesr   )rf   r   r   r   )rg   r   r   rn   rr   rj   rs   s    ` r(   interpolate_imagez0perspective_transform.<locals>.interpolate_image9  s:    	% 	% 8sxx+Q7LLA&
 	
r*   )r   r   r   r[   r   r   )r   r   r   r   r   r   r   r   ndimr   r!   r   compute_homography_matrixasarrayr   r   rF   ravel	ones_likerf   r   r   rE   )r"   start_points
end_pointsrj   rn   r#   r   rq   rx   
transformsr   yr   transformed_coordsr   outputr   rr   rs   s      ``           @@@r(   perspective_transformr     s    11+>K;@@BBJ2779:; <*O-
 	
 6<<&"LL>+
 	
 "#&(L,=,=V,K88D8J8J7KM
 	
 &*//*G88B8H8H7IK
 	
 Z---,,8,>,>+? @  * 0 013
 	
 L
6<<Aa0
<!#|!<
:!__Za8
&&v|4*0,,'Jx*L	2Ji0J
 <<

5)3::f+=MDAq99aggiCMM!,<,B,B,DEAND/ 9"78D
 9SXX'8"F \\&!R(F&&v|4V!,Mr*   c                 
   | d   | d   }}|d   |d   }}t        j                  |      }t        j                  |      }t        j                  ||||||| |z  | |z  gd      }t        j                  ||||||| |z  | |z  gd      }	t        j                  ||	gd      }
t        j
                  t        j                  ||gd      d      }t         j                  j                  |
|      }|j                  d      S )N).r   ).r[   r   r   r[   )	r   
zeros_liker   rF   rd   r!   linalgsolverE   )r   r   start_xstart_yend_xend_yzerosre   x_rowsy_rowscoefficient_matrixtarget_vectorhomography_matrixs                r(   r   r   T  s(   #F+\&-AWGf%z&'95ENN5!E==DYYHuHu		
 F YYHuHu		
 F &&)9BOO'*42M 

(();]K$$R((r*   c                    t        |       } t        |      }|j                  d   t        | j                        k7  r(t        d| j                   d|j                  d          t        |j                        dk  rt        d|j                         |t        vrt        dt        t               d|       |t        d      vrt        ddd	g d
|       t        j                  j                  j                  | ||||      S )Nr   zaFirst dim of `coordinates` must be the same as the rank of `inputs`. Received inputs with shape: z and coordinate leading dim of rZ   zOInvalid coordinates rank: expected at least rank 2. Received input with shape: z8Invalid value for argument `fill_mode`. Expected one of r   z4Invalid value for argument `order`. Expected one of r[   z. Received: order=)r   r   r   r   MAP_COORDINATES_FILL_MODESr   rangerf   r   r   r   )inputsr   r   rm   rn   s        r(   r   r     s5    v&F#K0Ks6<<00++1<<. 9)//235
 	
 ;!++6+<+<*=?
 	
 22F-./ 0"%
 	

 E!HB1vh(1
 	
 99,,UIz r*   c                 B   d }t        |       } t        |      }| j                  }t        | j                        dvrt	        d| j                         d}| j
                  dk(  r| t        j                  df   } d}|dk(  rt        j                  | d	      } | j                  d
   } ||||      }t        j                  ||d
d
d
f      }t        j                  j                  | |ddd|      }	|dk(  rt        j                  |	d      }	|r|	j                  d      }	|	S )Nc                 ~    fdfd} || |      t         j                  t         j                  d d d d f   }|S )Nc                     t        j                  |       | dz
  dz  z
  }t        j                  d||z  dz  z        }|t        j                  |      z  S )Nr   r[   rZ   g      )r   r   expsum)ri   sigmar   kernel1dr   s       r(   _get_gaussian_kernel1dzNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel1d  sP    

4u-Q>Awwtq5yQ&667Hcggh///r*   c                 l     | d   |d         } | d   |d         }t        j                  ||      S )Nr   r[   )r   outer)ri   r   
kernel1d_x
kernel1d_yr   s       r(   _get_gaussian_kernel2dzNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel2d  s<    /QqBJ/QqBJ99Z44r*   )r   newaxis)kernel_sizer   r   r   kernelr   s     `  @r(   _create_gaussian_kernelz.gaussian_blur.<locals>._create_gaussian_kernel  s;    	0
	5
 (U;KKa*
 r*   r   r   Fr   .Tr   r   r[   )r[   r[   SAME)NCHWOIHWr   )window_stridespaddingdimension_numbersfeature_group_countr   r   r   )r   r   r   r   r   r   r   r   r   r   rf   laxconv_general_dilatedrE   )
r"   r   r   r#   r   r   r   num_channelsr   blurred_imagess
             r(   gaussian_blurr     s/     v&Fe$ELLE
6<<&"LL>+
 	
 L{{aS()o%v|4<<?L$[%?FXXf|Q156FWW112( 2 N o%~|D'//Q/7r*   c                    t        j                  |      }|t        j                         vr,t	        dt        t        j                                d|       |t        vrt	        dt         d|       t        | j                        dvrt	        d| j                         t        |       } t        |      }t        |      }| j                  }t        d|z        dz  t        d|z        dz  f}	d	}
t        | j                        d
k(  rt        j                  | d      } d}
|dk(  r| j                  \  }}}}d}n| j                  \  }}}}d}t        |      }t        j                   j#                  ||||f|      |z  }t        j                   j#                  ||||f|      |z  }t%        t        j                  ||      |	||f|      }t%        t        j                  ||      |	||f|      }t        j&                  |      }t        j&                  |      }t        j(                  t        j*                  |      t        j*                  |            \  }}|d d d d d f   |d d d d d f   }}|||z  z   }|||z  z   }t        j,                  |       }|dk(  r~t/        |      D ]o  }|j0                  d|f   j                  t        j2                  t/        |      D cg c]'  }t5        | |d|f   ||   ||   gt        |   ||      ) c}            }q nt/        |      D ]w  }|j0                  d d |d d d d f   j                  t        j2                  t/        |      D cg c]'  }t5        | ||df   ||   ||   gt        |   ||      ) c}            }y |
rt        j&                  |d      }|j7                  |      }|S c c}w c c}w )NrW   rX   r   r   r   r   r   r[   Fr   r   r   Tr   r   )r   r   )r   r   r#   .)r   rm   rn   )r   r   r   r   r   r   r   r   r   r   r   ra   r   r!   r   rf   randomnormalr   rE   r   r   r   r   r   rF   r   r   )r"   alphar   rj   rm   rn   seedr#   input_dtyper   r   rq   rr   rs   rx   channel_axisdxdyr   r   distorted_xdistorted_ytransformed_imagesir6   s                            r(   elastic_transformr    s!    11+>K;@@BBJ2779:; <*O-
 	

 33F*++A)N
 	
 6<<&"LL>+
 	
 v&Fe$Ee$E,,Kq5y>A%s1u9~'9:KL
6<<Aa0o%.4ll+
FE8.4ll+
HfeT?D

VU3; 	 	
 	  	

VU3; 	 	
 	  
.en	
B 
.en	
B 
RB	RB<<

5)3::f+=>DAqT1aZ=!D!QJ-qAebj.Kebj.K/o%x 	A!3!6!6sAv!>!B!B		 "'z!2  ("1c19-(^[^<"A -# '0'1"	$ x 	A!3!6!6q!Qz!B!F!F		 "'z!2  ("1a9-(^[^<"A -# '0'1"	$  [[);!D+22;?K$s   (,O.,O)N)r   FFFrY   r-   N)r   rY   r   N)r   r   N)rY   r-   ))r   r   )r/   r/   N)g      4@g      @r   r   r-   NN)r   rf   	jax.numpynumpyr   	keras.srcr   keras.src.backend.jax.corer   keras.src.random.seed_generatorr   r_   r)   rJ   rU   rh   r   r   r   r   r   r   r   r   r   r*   r(   <module>r     s     
   8 5 )0/d%V of #   _D  bJ*)\ BED ?C:~ 
	~r*   