o
    2hz                     @   s   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Z d dl	m
Z
 dZd2ddZd2dd	Zd2d
dZ							d3ddZdZdZ			 	d4ddZ		 	d5ddZdd Zdd Zdd Zdd d d d!d eed"Zd#d$ Zd%d& Z	d6d'd(Z	d7d+d,Z	-	.		/			d8d0d1ZdS )9    N)backend)convert_to_tensor)	draw_seed)bilinearnearestlanczos3lanczos5bicubicareac                 C   s   t | } t|}|dkrdnd}t| jdvr td| j | j}t| jt}t	
| |} t g d| jd}t	j| ||dfd} t	j| |d	} t	
| |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tfcast	tensordotexpand_dims)imagesdata_formatchannels_axisoriginal_dtypecompute_dtypergb_weights r(   ]/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/tensorflow/image.pyrgb_to_grayscale   s$   

r*   c                 C      t | } | j}t|}t| jdvrtd| j t|s*tdt| |dkrBt| jdkr<t	
| d} nt	
| d} t	j| } |dkrht| jdkr[t	
| d} | S t| jd	krht	
| d
} | S Nr   r   zCInvalid images dtype: expected float dtype. Received: images.dtype=channels_firstr   r      r      r0   r/   r   r   r   r0   r/   r   r/   r   r0   )r   r   r   r   r   r   r   is_float_dtypestandardize_dtyper   	transposeimage
rgb_to_hsvr"   r#   r   r(   r(   r)   r8   -   6   

r8   c                 C   r+   r,   )r   r   r   r   r   r   r   r4   r5   r   r6   r7   
hsv_to_rgbr9   r(   r(   r)   r;   J   r:   r;   r   Fconstant        c	              
      s  t |}|tvrtdt d| |dkrtd| |r&|r&tdt|dks3td| t|}tjdvrFtd	j |d
kr^tjdkrXtdntd|rt}	|	d |	d |\}
}t	t	|
 d| d}t
t|d}t	|d}t	t	| d|
 d}t
t|d}t	|d}t	t	| dd d}t	t	| dd d}tjdkrd d ||| ||| d d f n||| ||| d d f n|rt}	|	d |	d |\}
}t	t	|
 d| d}t
|}t	|d}t	t	| d|
 d}t
|}t	|d}t	t	| dd dt	t	| dd dtjdkrtd  td tdk fddfddtdk fddfddn2td tdkfddfddtdkfddfddtjj|||d}|d
krtjdkrt|d}|S tjdkrt|d }|S )!N<Invalid value for argument `interpolation`. Expected of one . Received: interpolation=r<   z\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`.r/   zPArgument `size` must be a tuple of two elements (height, width). Received: size=r   r   r-   r   r.   r1   r   float32int32r0   r   r   c                      sD   t jt j fjd t j fjd gddS Nr   r0   r   r   concatonesr   r(   )
batch_sizechannels
fill_valuer"   img_box_hstartwidthr(   r)   <lambda>   "    

zresize.<locals>.<lambda>c                          S Nr(   r(   r"   r(   r)   rL          c                      sD   t jt j fjd t j fjd gddS )Nr   r/   r   rD   r(   )rG   rH   rI   heightr"   img_box_wstart
padded_imgr(   r)   rL      rM   c                      rN   rO   r(   r(   rT   r(   r)   rL      rQ   c                      s@   t jt j fjd t j fjd gddS )Nr   r   r   rD   r(   )rH   rI   r"   rJ   rK   r(   r)   rL      "    c                      rN   rO   r(   r(   rP   r(   r)   rL     rQ   c                      s@   t jt j fjd t j fjd gddS rC   rD   r(   )rH   rI   rR   r"   rS   rT   r(   r)   rL     rV   c                      rN   rO   r(   r(   rU   r(   r)   rL   "  rQ   )method	antialiasr2   r3   )r   r   RESIZE_INTERPOLATIONSr   r   tupler   r   r6   r   maximumminimumcondr7   resize)r"   sizeinterpolationrX   crop_to_aspect_ratiopad_to_aspect_ratio	fill_moderI   r#   r   target_heighttarget_widthcrop_height
crop_widthcrop_box_hstartcrop_box_wstart
pad_height	pad_widthresizedr(   )	rG   rH   rI   rR   r"   rJ   rS   rT   rK   r)   r^   g   s  











r^   )r   r   )r<   r   wrapreflectc                 C   sD  t |}|tvrtdt d| |tvr!tdt d| t| jdvr0td| j t|jdvr?td|j d	}t| jd
krQtj| dd} d}t|jdkr_tj|dd}|dkrit	| d} tj
j| tj|tjdt| dd || | d}t|| j}|dkrt	|d}|rtj|dd}|S )Nr>   r?   8Invalid value for argument `fill_mode`. Expected of one . Received: fill_mode=r   r   )r0   r/   zInvalid transform rank: expected rank 1 (single transform) or rank 2 (batch of transforms). Received input with shape: transform.shape=Fr   r   r   Tr0   r-   r.   r   r   )r"   
transformsoutput_shaperI   r`   rc   r2   )r   r   AFFINE_TRANSFORM_INTERPOLATIONSr   AFFINE_TRANSFORM_FILL_MODESr   r   r   r!   r6   raw_opsImageProjectiveTransformV3r   rA   upperensure_shapesqueeze)r"   	transformr`   rc   rI   r#   need_squeezeaffinedr(   r(   r)   affine_transform>  sf   
r}   c           	      C   s  t |}t|tjd}t|tjd}|tvr!tdt d| t| jdvr0td| j |jj	dvs?|jdd  dkrGtd	|j |jj	dvsV|jdd  dkr^td
|j |j|jkrptd|j d|j d}t| jdkrtj
| dd} d}t|jdkrtj
|dd}t|jdkrtj
|dd}|dkrt| d} t||}t|jdkrtj
|dd}tjj| tj|tjdt| dd || d}t|| j}|dkrt|d}|rtj|dd}|S )Nr   r>   r?   r   r   )r/   r   r@   )r   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   Tr/   r-   r.   r0   r   )r"   rq   rr   rI   r`   r2   )r   r   r   r   rA   rs   r   r   r   rankr!   r6   compute_homography_matrixru   rv   r   rw   rx   ry   )	r"   start_points
end_pointsr`   rI   r#   r{   rz   outputr(   r(   r)   perspective_transformz  s~   

r   c                 C   s  | 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 |
t |
t |
t |
| |
 | | gddt jt |
t |
t |
|
|t |
| |
 | | gddt j||t |t |t |t || | | | gddt jt |t |t |||t || | | | gddt j||t |t |t |t || | | | gddt jt |t |t |||t || | | | gddt j||t |t |t |t || | | | gddt jt |t |t |||t ||	 | |	 | gddgdd}t j||||||||	gdd}t j|dd}t j||}t |ddg}|S )Nr   r0   r/   r   r   r      )r   stack	ones_like
zeros_liker!   linalgsolvereshape)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_matrixr(   r(   r)   r     s   &&&&&&&&







jn
r   c                 C   s"   |d }t | | d|  | S )Nr0   r/   )r   abs)indexr_   sr(   r(   r)   _mirror_index_fixerV  s   r   c                 C   s(   t jtd|  d d| d d dS )Nr/   r0   )r   mathfloordivr   r   r_   r(   r(   r)   _reflect_index_fixer\  s   r   c                 C   s   | S rO   r(   r   r(   r(   r)   rL   c  rQ   rL   c                 C   s   t | d|d S )Nr   r0   )r   clip_by_valuer   r(   r(   r)   rL   d  s    c                 C   s   | | S rO   r(   r   r(   r(   r)   rL   e  s    )r<   r   rm   mirrorrn   c                 C   s<   | j jr| nt| } t| tj}td| j }||fgS Nr0   )r   
is_integerr   roundr   rB   r<   )
coordinater   weightr(   r(   r)   _nearest_indices_and_weightsk  s
   
r   c                 C   s<   t | }| | }d| }t |t j}||f|d |fgS r   )r   floorr   rB   )r   lowerupper_weightlower_weightr   r(   r(   r)   _linear_indices_and_weightst  s
   
r   c                    s  t | }t |}|jd t|jkr td|j d|jd  t|jdk r/td|j t ||jd}tj|dd}|dkrDt}n|dkrKt}nt	d	 fd
d}g }	t
||jD ]%\}
}||
}g }|D ]\}}|||\}}||||f qi|	| q]g }tj|	 D ]R}t
| \}}}tt|}tt||}|d j}t||}t||d j} dkrtj|dd}t||}t|||}|ttj||  qttj|}|jjrt|}t||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 r/   zOInvalid coordinates rank: expected at least rank 2. Received input with shape: r   r   r0   z+map_coordinates currently requires order<=1c                    s
   dkr| dk| |k @ }t | d|d }||fS  dkr.t | d|d t j| t jdfS  dv rit | } |d }t j| |}||k }| }t |||| }  dkr_t || d | } | t j| t jdfS  d	kr~t j| |} | t j| t jdfS td
  )Nr<   r   r0   r   r   )r   rn   r/   rn   rm   zUnknown fill_mode: )	r   r   r   boolr   r   modwherer   )coordsr_   validsafe_coordssize_2r   underoverrc   r(   r)   process_coordinates  s,   
z,map_coordinates.<locals>.process_coordinatesr<   )r   r   r   r   r   r   unstackr   r   NotImplementedErrorzipappend	itertoolsproductr6   r   	gather_ndr   
reduce_allr   	functoolsreduceoperatormuladdr   r   )inputscoordinatesorderrc   rI   	input_arrcoordinate_arrs
interp_funr   valid_1d_interpolationsr   r_   interp_nodesvalid_interpr   r   
safe_indexr   outputsitemsindices
validitiesweightsgatheredr   	all_validfill_value_typedresultr(   r   r)   map_coordinates|  sb   

r   r   r         ?r   c           
      C   s   dd }t | } t |}t |}| j}t| jdvr"td| j d}t| jdkr4tj| dd} d	}|d
kr>t| d} t| d }|||||}tjj	| |g ddd}	|d
krbt|	d}	|rktj
|	dd}	|	S )Nc                    sd   fdd  fdd}|| |}t || d | d ddf}t |dd|dg}t |}|S )Nc                    s>   t j|  d| d d  }t d|| d  }|t | S )Nr   r0   r/   g      )r   rangeexp
reduce_sum)r_   sigmaxkernel1dr   r(   r)   _get_gaussian_kernel1d  s   zNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel1dc                    s@   t | }  | d |d } | d |d }t j||ddS )Nr   r0   r   )r   r   r    )r_   r   
kernel1d_x
kernel1d_yr   r   r(   r)   _get_gaussian_kernel2d  s   zNgaussian_blur.<locals>._create_gaussian_kernel.<locals>._get_gaussian_kernel2dr   r0   )r   r   tiler   )kernel_sizer   num_channelsr   r   kernelr(   r   r)   _create_gaussian_kernel  s   
z.gaussian_blur.<locals>._create_gaussian_kernelr   r   Fr   r   r   Tr-   r.   r   )r0   r0   r0   r0   SAME)stridespaddingr2   )r   r   r   r   r   r   r!   r6   nndepthwise_conv2dry   )
r"   r   r   r#   r   r   r{   r   r   blurred_imagesr(   r(   r)   gaussian_blur  s6   r         4@      @rn   c              	      s  t |}tvrtdt d tvr!tdt d tjdvr0tdj tj}t||d}t||d}t|dd}	d	|	 d
B d	|	 d
B f}
d}tjdkrgt	j
ddd}|dkruj\}}}}d}n	j\}}}}d
}t|}|d u rd
}t	jj|||fdd||d| }t	jj|||fdd||d| }tt	j
||d|
||f|d}tt	j
||d|
||f|d}t	j||d}t	j||d}t	jt	j||dt	j||ddd\}}t	j
|dd}t	j
|dd}|||   |||  g }|dkr4t|D ]t	j fddt|D dd}|| qt	j|dd}n*t|D ]t	j fddt|D dd}|| q8t	j|d
d}|rht	j|dd}t	||}|S )Nr>   r?   ro   rp   r   r   r   rB      r0   Fr   r   r   Tr   r   r=   r   )r   meanstddevr   seed)r   r   r#   xy)indexingc              	      s:   g | ]}t |d f |  | gtdqS .)r   rc   rI   r   rs   r   .0bdistorted_xdistorted_yrc   rI   ir"   r`   r(   r)   
<listcomp>z      
z%elastic_transform.<locals>.<listcomp>c              	      s:   g | ]}t |d f |  | gtdqS r  r  r  r  r(   r)   r
    r  )r   r   rs   r   rt   r   r   r   r   r   r!   r   randomstateless_normalr   ry   meshgridr   r   r   r   )r"   alphar   r`   rc   rI   r   r#   input_dtypekernel_factorr   r{   rG   rR   rK   rH   channel_axisdxdyr   ychannel_outputschannel_transformedtransformed_imagesr(   r  r)   elastic_transform  s   





r  rO   )r   FFFr<   r=   N)r   r<   r   N)r   r   N)r<   r=   )r   r   N)r   r   r   rn   r=   NN)r   r   r   
tensorflowr   	keras.srcr   !keras.src.backend.tensorflow.corer   keras.src.random.seed_generatorr   rY   r*   r8   r;   r^   rs   rt   r}   r   r   r   r   _INDEX_FIXERSr   r   r   r   r  r(   r(   r(   r)   <module>   sn    



 
 K
@
N 			
]
: