
    2Vh                     ~   d dl Z d dlZd dlZd dlZd dlmZ d dlmc m	Z
 d dlmZ d dlmZ d dlmZ d dlmZ dddd	Zd
Zd$dZd$dZd$dZd Zd Z	 	 	 	 	 	 	 d%dZd ddZh dZ	 	 	 	 d&dZ	 	 	 d'dZd Zd Zd Z d d d ee dZ!d Z"d Z#d Z$	 d(d Z%	 d)d!Z& ejN                         d"        Z(	 	 	 	 	 	 	 d*d#Z)y)+    N)backend)convert_to_tensor)
get_device)	draw_seedbilinearznearest-exactbicubic)r   nearestr   )lanczos3lanczos5c                    t        |       } t        j                  |      }| j                  dvrt	        d| j
                         |dk(  rdnd}| j
                  |   dvrt	        d| j
                         | j
                  |   dk(  rT| j                  |	      \  }}}d
|z  d|z  z   d|z  z   j                  | j                        } | j                  |	      } | S | j                         } | S )N      yInvalid images rank: expected rank 3 (single image) or rank 4 (batch of images). Received input with shape: images.shape=channels_first)   r   zaInvalid channel size: expected 3 (RGB) or 1 (Grayscale). Received input with shape: images.shape=r   dimgŏ1w-!?gbX9?gv/?)r   r   standardize_data_formatndim
ValueErrorshapeunbindtodtype	unsqueezeclone)imagesdata_formatchannel_axisrgbs         M/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/torch/image.pyrgb_to_grayscaler'      s
   v&F11+>K{{& "LL>+
 	

 %(882bL||L!/77=||nF
 	
 ||L!Q&--L-11a1*uqy(519488F!!l!3 M M    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                  | g d|      \  }}}t        j                  ||      }t        j                  ||      }t        j                  ||      }d	 }t        j                    ||||      |
      } | S )Nchannels_lastr   r   r   r   CInvalid images dtype: expected float dtype. Received: images.dtype=        r   r   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?)torchmaximumminimumwherer   r   )r#   r$   r%   valuer3   range_
safe_value
safe_range
saturationnormhues              r&   rgb_planes_to_hsv_planesz,rgb_to_hsv.<locals>.rgb_planes_to_hsv_planesM   s%   emmAq115--a 3Q7[[E37
[[!VS9
[[FZ,?E
cJ&'kkQJAENY&AENY&

 kk%1*da!enc:kk&1*c3/39..2KKJ%%r(   axis)r   r   r   r   lenr   r   is_float_dtypestandardize_dtyper1   finfoepsr4   abssplitsqueezestack)	r    r!   r   channels_axisrC   redgreenbluer<   s	            r&   
rgb_to_hsvrL   5   sF   v&FLLE11+>K%8BbM
6<<&"LL>+
 	

 !!%(&&-&?&?&F%GI
 	
 ++e

 
 C[[6*S0#v>F{{69mDC
--]
+CMM%/E==}-D&( [[ eT2F Mr(   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                  | g 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      @)r1   	remaindercliprD   )r;   r9   r5   dhdrdgdbone_minus_srI   rJ   rK   s              r&   hsv_planes_to_rgb_planesz,hsv_to_rgb.<locals>.hsv_planes_to_rgb_planes}   s    __S#&,ZZ		"s(+c13<ZZeiiS113<ZZeiiS113<J&{Z"_45zB67j2o56E4r(   r=   )r   r   r   r   r?   r   r   r@   rA   r1   rE   rF   rG   )r    r!   r   rH   r;   r9   r5   rV   s           r&   
hsv_to_rgbrW   g   s   v&FLLE11+>K%8BbM
6<<&"LL>+
 	

 !!%(&&-&?&?&F%GI
 	
 #[[MJCU
--]
+Cz=9JMM%/E
  [[ j%8}F Mr(   c                     d}| j                   dk  r| j                  d      } d}| j                  }d}||vrd}|d   }| j                  |      } | |||fS )NFr   r   r   T)r   r   r   r   )image
req_dtypesneed_squeeze	out_dtype	need_cast	req_dtypes         r&   _cast_squeeze_inr_      sh    LzzA~A&II
"	qM	#)\944r(   c                    |r| j                  d      } |ru|t        j                  t        j                  t        j                  t        j
                  t        j                  fv rt        j                  |       } | j                  |      } | S )Nr   r   )	rF   r1   uint8int8int16int32int64roundr   )rY   r]   r[   r\   s       r&   _cast_squeeze_outrg      sk    !$KKJJKKKKKK
 
 KK&E#Lr(   c	           
      ,   t        j                  |      }|t        v rt        d| d      |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
vrt        d| j                         t        | t        j                  t        j                  g      \  } }	}
}|dk(  r| j                  d      } |r| j                  }|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 d d d |||z   |||z   f   } n|r| j                  }|d   |d   }}|\  }}t        t!        ||z        |z        }t#        ||      }t        t!        ||z        |z        }t#        ||      }t        t!        ||z
        dz        }t        t!        ||z
        dz        }| j                  d   }| j                  d   }|dkD  r}t        j&                  t        j(                  ||||f| j*                  | j,                        |z  | t        j(                  ||||f| j*                  | j,                        |z  gd      }n| }|dkD  ryt        j&                  t        j(                  ||||f| j*                  | j,                        |t        j(                  ||||f| j*                  | j,                        |z  gd      }|} |r|dvrd}|dv rdnd }t/        j0                  | |t        |   ||      }|dk(  r&|t        j2                  k(  r|j5                  dd      }|dk(  r|j                  d      }t7        ||	|
|      }|S )NzeResizing with Lanczos interpolation is not supported by the PyTorch backend. Received: interpolation=.<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   rm   r   r   r   r   devicer=   r   )r   r   F)sizemodealign_corners	antialiasr      )minmaxr   rm   r   r   )r]   r[   r\   )r   r   UNSUPPORTED_INTERPOLATIONSr   RESIZE_INTERPOLATIONSr?   tupler   r   r   r_   r1   float32float64permuteintfloatrx   rw   catonesr   rq   Finterpolatera   clamprg   )r    rr   interpolationru   crop_to_aspect_ratiopad_to_aspect_ratio	fill_mode
fill_valuer!   r]   r[   r\   r   heightwidthtarget_heighttarget_widthcrop_height
crop_widthcrop_box_hstartcrop_box_wstart
pad_height	pad_widthimg_box_hstartimg_box_wstart
batch_sizechannels
padded_imgrt   resizeds                                 r&   resizer      s    11+>K22''4oQ8
 	

 11J$%%?P
 	
 J11:=
 	
 3
 	
 t9>//3f6
 	
 ;Dv&F{{& "LL>+
 	

 2B.2.FI|Y o%-b	59&*#|% 56EF#fk2A6v45EF
UJ/3
eF[$89A=>eEJ$67!;<o;;o
::<
 
b	59&*#|u}45DE
,
f|34}DE	y)	U:#67!;<U9u#459:\\!_
<<?AJJ#X~uE$ll%}}
 !! JJ#X~uE$ll%}}
 !! !J&  JAJJ#Xv~F$ll%}}
 JJ#Xv~F$ll%}}
 !! J"  ]*AA
 	*.EEE4Mmm"=1#G 	!i5;;&>--A3-/o%//,/!	G Nr(   r   )r	   r   >   wrapmirrorr	   reflectrl   c                    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                         |j                  dvrt	        d|j                         d	}| j                  d
k(  r| j                  d      } d}|j                  dk(  r|j                  d      }|dk(  r| j                  d      } | j                  d   }t        j                  | j                  dd  D cg c].  }t        j                  ||j                  |j                         0 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   j'                         }|d d df   j'                         }|d d df   j'                         }|d d df   j'                         }||d d df<   ||d d df<   ||d d df<   ||d d df<   t        j(                  j*                  j-                  |g ddd      }t        j.                  ||d
d
f      }|d d dddf   j'                         }t        j(                  j*                  j-                  |g d      }d|d d dddf<   t        j0                  d||      }t        j2                  |dd      }|t        j.                  |g |j                  ddd      z  }t        j4                  t7        t9        |             D cg c]  }t;        | |   ||   t        |   ||      ! c}      }|dk(  r|j                  d       }|r|j=                  d      }|S c c}w c c}
w c c}w )!Nrj   rk   8Invalid value for argument `fill_mode`. Expected of one . Received: fill_mode=r   r   )r   rm   zInvalid transform rank: expected rank 1 (single transform) or rank 2 (batch of transforms). Received input with shape: transform.shape=Fr   r   r   Tr   r   ry   rp   indexingijr   rm   r      )r   r   r   r   rl   )padrs   r5   )r   zBhwij, Bjk -> Bhwik)sourcedestination)r   orderr   r   rn   )r   r   AFFINE_TRANSFORM_INTERPOLATIONSkeysr   setAFFINE_TRANSFORM_FILL_MODESr   r   r   r   r   r1   meshgridaranger   rq   concatenatetiler   nn
functionalr   reshapeeinsummoveaxisrG   ranger?   map_coordinatesrF   )r    	transformr   r   r   r!   r[   r   rr   r   xindicesa0a2b1b2offsetcoordinatesiaffineds                       r&   affine_transformr   V  s    11+>K;@@BBJ2779:; <*O-
 	

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

 v&F!),I{{& "LL>+
 	

 ~~V#(/1
 	
 L{{a!!a!(~~''A'.	&&-aJ ~~ QR(

 LLY__Y=M=MN


 H -56	#6BG jj:q!Q":;G 
1a4			 B	1a4			 B	1a4			 B	1a4			 BIadOIadOIadOIadO ##''|*A ( I i*a);<Iq!A#qy!'')FXX  $$V$>FIa1ai ,,4gyIK..RQGK5==/G/Gq/G!/GQ/GHHK kk 3v;'		
  q	A5mD#%		
G &&//,///a/(Nk

 	7<		
s   "3O$/O)$O.c           	      X   t        j                  |      }t        |       } t        j                  |t        j
                        }t        j                  |t        j
                        }|t        j                         vr,t        dt        t        j                                d|       | 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}| j                  dk(  r| j                  d      } d}|j                  dk(  r|j                  d      }|j                  dk(  r|j                  d      }|dk(  r| j                  d      } | j                  \  }}}	}
t        ||      }|j                         dk(  r|j                  d      }|j                  d   dk(  r|dkD  r|j!                  |d      }t        j"                  t        j$                  |	t        j
                  | j&                        t        j$                  |t        j
                  | j&                        d      \  }}t        j(                  |||	|
g| j&                        }t+        |      D ]  }||   \  }}}}}}}}||z  ||z  z   dz   }||z  ||z  z   |z   |z  }||z  ||z  z   |z   |z  }t        j,                  |j/                         |j/                         gd      }g }t+        |
      D ]G  }| |d d d d |f   }t1        ||t        |   d|      }|j3                  |j5                  ||	             I t        j,                  |d      ||<    |dk(  r|j                  d      }|r|j7                  d      }|S )Nr   rj   rk   r   r   ro   )r   rm   )rm   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   Trm   r   ry   r   rp   xyr   rq   r/   rl   r   r   rn   )r   r   r   r1   tensorr}   r   r   r   r   r   r   r   r   r   compute_homography_matrixrepeatr   r   rq   emptyr   rG   flattenr   appendr   rF   ) r    start_points
end_pointsr   r   r!   r[   r   r   r   r   
transformsgrid_xgrid_youtputr   r   a1r   a3a4a5a6a7denomx_iny_incoordsmapped_channelschannelchannel_imgmapped_channels                                    r&   perspective_transformr     s9    11+>Kv&F<<EMMBLj>J;@@BBJ2779:; <*O-
 	
 {{& "LL>+
 	
 "#&(L,<,<,>f,L88D8J8J7KM
 	
 &*..*:&*H88B8H8H7IK
 	
 Z---,,8,>,>+? @  * 0 013
 	
 L{{a!!a!(A#--!-4!))a)0
&&-*0,,'Jx*<DJ~~1))!,
aJN&&z15
^^U%--FV5==GNFF [[	VUH-fmmF : 9)3A&BBBBVb6k)C/Vb6k)B.%7Vb6k)B.%7dllndlln=1EX 		JG Aq'!12K,5mD$%N "">#9#9&%#HI		J KKR8q	%9( &&-A&Mr(   c                 	   t        | t        j                        } t        |t        j                        }| d d ddf   | d d ddf   }}| d d ddf   | d d ddf   }}| d d ddf   | d d ddf   }}| d d ddf   | d d ddf   }	}|d d ddf   |d d ddf   }}
|d d ddf   |d d ddf   }}|d d ddf   |d d ddf   }}|d d ddf   |d d ddf   }}t        j                  t        j                  |
|t        j                  |
      t        j
                  |
      t        j
                  |
      t        j
                  |
      | |
z  | |z  gd      t        j                  t        j
                  |
      t        j
                  |
      t        j
                  |
      |
|t        j                  |
      | |
z  | |z  gd      t        j                  ||t        j                  |      t        j
                  |      t        j
                  |      t        j
                  |      | |z  | |z  gd      t        j                  t        j
                  |      t        j
                  |      t        j
                  |      ||t        j                  |      | |z  | |z  gd      t        j                  ||t        j                  |      t        j
                  |      t        j
                  |      t        j
                  |      | |z  | |z  gd      t        j                  t        j
                  |      t        j
                  |      t        j
                  |      ||t        j                  |      | |z  | |z  gd      t        j                  ||t        j                  |      t        j
                  |      t        j
                  |      t        j
                  |      | |z  | |z  gd      t        j                  t        j
                  |      t        j
                  |      t        j
                  |      ||t        j                  |      |	 |z  |	 |z  gd      gd      }t        j                  ||||||||	gd      j                  d      }t        j                  j                  ||      }|j                  dd      }|S )	Nr   r   r   rm   r   r   r      )
r   r1   r}   rG   	ones_like
zeros_liker   linalgsolver   )r   r   start_x1start_y1start_x2start_y2start_x3start_y3start_x4start_y4end_x1end_y1end_x2end_y2end_x3end_y3end_x4end_y4coefficient_matrixtarget_vectorhomography_matrixs                        r&   r   r   +  s   $\GL":U]]CJ%aAg.Q1W0EhH%aAg.Q1W0EhH%aAg.Q1W0EhH%aAg.Q1W0EhH1a(*Q1W*=FF1a(*Q1W*=FF1a(*Q1W*=FF1a(*Q1W*=FFKKOOF+$$V,$$V,$$V,I&I&	  KK$$V,$$V,$$V,OOF+I&I&	  KKOOF+$$V,$$V,$$V,I&I&	  KK$$V,$$V,$$V,OOF+I&I&	  KKOOF+$$V,$$V,$$V,I&I&	  KK$$V,$$V,$$V,OOF+I&I&	  KKOOF+$$V,$$V,$$V,I&I&	  KK$$V,$$V,$$V,OOF+I&I&	 yi	
T Wl\ KK		
  im  **+=}M)11"a8r(   c                 N    |dz
  }t        j                  | |z   d|z  z  |z
        S )Nr   rm   )r1   rD   )indexrr   ss      r&   _mirror_index_fixerr    s,    qA99eaiAE*Q.//r(   c                 `    t        j                  t        d| z  dz   d|z  dz         dz
  d      S )Nrm   r   )r1   floor_divider  r   rr   s     r&   _reflect_index_fixerr    s6    AIM1t8a<81<a r(   c                 6    t        j                  | d|dz
        S Nr   r   r1   rP   r  s     r&   <lambda>r
    s    EJJua$B r(   c                 6    t        j                  | d|dz
        S r  r	  r  s     r&   r
  r
    s    5::eQq#A r(   c                     | |z  S N r  s     r&   r
  r
    s
     r(   )rl   r	   r   r   r   c                 Z    t        j                  |       st        j                  |       syy)NTF)r1   is_floating_point
is_complex)as    r&   _is_integerr    s#    ""1%e.>.>q.Ar(   c                     t        |       r| nt        j                  |       } | j                  t        j                        }|dfgS Nr   )r  r1   rf   r   rd   )
coordinater   s     r&   _nearest_indices_and_weightsr    s<    !*-
5;;z3J  MM%++&EAJ<r(   c                     t        j                  |       }| |z
  }d|z
  }|j                  t         j                        }||f|dz   |fgS r  )r1   floorr   rd   )r  lowerupper_weightlower_weightr   s        r&   _linear_indices_and_weightsr    sO    KK
#E%L|#LHHU[[!EL!EAI|#<==r(   c                 R   t        |       }|D cg c]  }t        |       }}t        |      t        |j                        k7  r$t        d|j                   dt        |             t        |d   j                        dk  r,t        |      }|f|d   j                  z   }	t        d|	       t	        |t
        t        f      rt        |      rt        |      }t        |      t        |j                        k7  r-t        dt        |       dt        |j                               t        j                  |      }
|
,t        dt        t        j                                d	|       |dk(  rt        }n|dk(  rt        }nt        d
      |dk(  rd }nd }g }t        ||j                        D ]P  \  }} ||      }g }|D ]+  \  }} |
||      } |||      }|j!                  |||f       - |j!                  |       R g }t#        j$                  | D ]  }t        | \  }}}t'        d |D              r||   }n>t)        j*                  t,        j.                  |      }t1        j2                  |||   |      }|j!                  t)        j*                  t,        j4                  |      |z          t)        j*                  t,        j6                  |      }t        |      r"t        |      r|nt1        j8                  |      }|j;                  |j<                        S c c}w )NzaFirst dim of `coordinates` must be the same as the rank of `inputs`. Received inputs with shape: z and coordinate leading dim of r   r   zOInvalid coordinates rank: expected at least rank 2. Received input with shape: z;coordinates must be a sequence of length inputs.shape, but z != z8Invalid value for argument `fill_mode`. Expected one of r   z+map_coordinates currently requires order<=1rl   c                     d| k  | |k  z  S )Nr   r  r  s     r&   is_validz!map_coordinates.<locals>.is_valid  s    J54<00r(   c                      y)NTr  r  s     r&   r   z!map_coordinates.<locals>.is_valid  s    r(   c              3   $   K   | ]  }|d u  
 yw)TNr  ).0valids     r&   	<genexpr>z"map_coordinates.<locals>.<genexpr>+  s     5u}5s   )r   r?   r   r   
isinstancer   r   r  _INDEX_FIXERSgetr   r   r  r  NotImplementedErrorzipr   	itertoolsproductall	functoolsreduceoperatorand_r1   r4   muladdrf   r   r   )inputsr   r   r   r   	input_arrccoordinate_arrsr   r   index_fixer
interp_funr   valid_1d_interpolationsr  rr   interp_nodesvalid_interpr   weightfixed_indexr$  outputsitemsr   
validitiesweightscontribution	all_validresults                                 r&   r   r     s#    "&)I5@A(+AOA
?s9??33++4??*; <!/235
 	
 ?1##$q(/"+111++0'3
 	
 *sEl+I0F_

;3y//I; S%9$:<
 	

  ##I.KF=%%'())?	{L
 	

 z1
	!0
!"OPPJ	1
	 !A 5
D!*-) 	>ME6%eT2KUD)EeV <=	> 	 &&|45 G""$;< 
O'*E{$W5*55$W-L!((
CI ;;9W-zL 	y''g>MN
O hllG4F9&v.EKK4G99Y__%%Y Bs   L$c           	      z   d }t        |       } t        |      }t        |      }| j                  }t        | j                        dvrt	        d| j                         d}| j
                  dk(  r| j                  d      } d}|d	k(  r| j                  ddd
d      } | j                  d
   } ||||      }|j                  |d
|d   |d
         }t        j                  j                  j                  | |d
t        |d   dz        |      }	|d	k(  r|	j                  dddd
      }	|r|	j                  d      }	|	S )Nc                 d    fdfd} || |      }|j                  dd| d   | d         }|S )Nc                     t        j                  | |j                        | dz
  dz  z
  }t        j                  d||z  dz  z        }|t        j                  |      z  S )Nrp   r   rm   g      )r1   r   rq   expsum)rr   sigmar   kernel1dr   s       r&   _get_gaussian_kernel1dzNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel1d>  s^    Tu||D!8q.!  yyUq(8!89Heii111r(   c                 l     | d   |d         } | d   |d         }t        j                  ||      S r  )r1   outer)rr   rK  
kernel1d_x
kernel1d_yrM  s       r&   _get_gaussian_kernel2dzNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel2dF  s<    /QqBJ/QqBJ;;z:66r(   r   r   )view)kernel_sizerK  r   rR  kernelrM  s     `  @r&   _create_gaussian_kernelz.gaussian_blur.<locals>._create_gaussian_kernel=  s<    	2	7
 (U;Q;q>;q>Br(   r   r   Fr   r   r   Tr*   r   rm   )stridepaddinggroups)r   r   r?   r   r   r   r   r   expandr1   r   r   conv2dr   rF   )
r    rT  rK  r!   rV  r   r[   num_channelsrU  blurred_imagess
             r&   gaussian_blurr^  :  sW   & v&F#K0Ke$ELLE
6<<&"LL>+
 	
 L{{a!!a!(o%1a+<<?L$[%?F]]<KNKNKFXX((//KNa'( 0 N o%'//1a;'//A/6r(   c                     t        |       \  }}t               }|dk(  ry t        j                  t                     }|j	                  t        ||z                |S )Nmetar   )r   r   r1   	Generatormanual_seedr   )seed
first_seedsecond_seedrq   	generators        r&   torch_seed_generatorrg  z  sP    'oJ\Fz|4I#j;678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	}
| j                  d
k(  r| j                  d      } d}
|dk(  r| j                  \  }}}}d}n| j                  \  }}}}d}t               dk(  rt        |      nd }t!        j"                  dd|||f||| j$                        |z  }t!        j"                  dd|||f||| j$                        |z  }t'        |j                  |      |	||f|      }t'        |j                  |      |	||f|      }|j)                         }|j)                         }t!        j*                  t!        j,                  |      t!        j,                  |      d      \  }}|j                  d      j/                  | j$                        |j                  d      j/                  | j$                        }}|||z  z   }|||z  z   }t!        j0                  |       }|dk(  ret3        |      D ]V  }t!        j4                  t3        |      D cg c]'  }t7        | |d|f   ||   ||   gt        |   ||      ) c}      |d|f<   X nlt3        |      D ]^  }t!        j4                  t3        |      D cg c]'  }t7        | ||df   ||   ||   gt        |   ||      ) c}      |d d |d d d d f<   ` |
r|j)                  d      }|j/                  |      }|S c c}w c c}w )Nrj   rk   r   r   r   r      r   Fr   r   r   Tr*   r   r`  r,   r/   )rr   rf  r   rq   )rT  rK  r!   r   r   .r   )r   r   r   r   r   r   r   r?   r   r   r   r   r   r   r   rg  r1   normalrq   r^  rF   r   r   r   r   r   rG   r   )r    alpharK  r   r   r   rc  r!   input_dtyperT  r[   r   r   r   r   r"   rf  dxdyr   ydistorted_xdistorted_ytransformed_imagesr   r%   s                             r&   elastic_transformrs    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{{a!!a!(o%.4ll+
FE8.4ll+
Hfe.8lf.D$T*$Ife,==	
 	  	fe,==	
 	  

&en	
B 

&en	
B 
B	B>>UU\\&1DDAq ;;q>V]]+Q[[^->->v}}-MqAebj.Kebj.K))&1o%x 	A). #:.	  $q#qy)$QQ8=mL"+#-	*sAv&	 x 	A-2[[ #:.	  $q!Sy)$QQ8=mL"+#-	.q!Qz*	 /77:+..{;=		s   ?,O
$,O
r  )r   FFFrl   r,   N)r   rl   r   N)r   r   N)rl   r,   ))r   r   )r/   r/   N)g      4@g      @r   r   r,   NN)*r.  r+  r0  r1   torch._dynamo_dynamodynamotorch.nn.functionalr   r   r   	keras.srcr   keras.src.backend.torch.corer   r   keras.src.random.seed_generatorr   r{   rz   r'   rL   rW   r_   rg   r   r   r   r   r   r   r  r  r'  r  r  r  r   r^  disablerg  rs  r  r(   r&   <module>r|     sF           : 3 5   6/d%P5 * Ur #   i` fRM`0 CA,!#> BEP&h ?C=@   
	Cr(   