
    hy                       S SK Jr  S SKrS SKJr  S SKJrJrJrJ	r	  \R                  S:  a	  S SKJrJr  OS SKJrJr  S SKrS SKrSrSrSrS	rSrS	r\S
   r\" S5      r\R2                  " S5      S\R2                  " S5      S\R2                  " S5      S\R2                  " S5      S\R2                  " S5      S\R2                  " S5      S\R4                  S\R6                  S\R8                  S\R:                  S\R<                  S\R>                  S\R@                  S0r!\R4                  \RD                  \R6                  \RF                  \R<                  \RH                  \R>                  \RJ                  \R@                  \RL                  \R2                  " S5      \RD                  \R2                  " S5      \RF                  \R2                  " S5      \RH                  \R2                  " S5      \RJ                  \R2                  " S5      \RL                  0
r'        S"S jr(S#S$S jjr)S%S jr*S&S jr+S'S jr,S(S jr-S'S jr.S'S jr/S)S  jr0\	\Rb                  \2\34   r4S*S! jr5g)+    )annotationsNwraps)AnyCallableLiteralUnion)   
   )Concatenate	ParamSpecr
         )imageimage_per_channelmin_maxmin_max_per_channelPuint8   uint16i  uint32l    float16g      ?float32float64iint32c                <   ^ ^^ [        T 5      SUUU 4S jj5       nU$ )a|  Wrap OpenCV function to enable processing images with more than 4 channels.

Limitations:
    This wrapper requires image to be the first argument and rest must be sent via named arguments.

Args:
    process_fn: Transform function (e.g cv2.resize).
    args: Additional positional arguments.
    kwargs: Additional keyword arguments.

Returns:
    np.ndarray: Transformed image.
c                  > / T
QUQ7nTU-  n[        U 5      nU[        :  a  / n[        SUS5       H  nXW-
  [        :X  a]  [        S5       HL  nU S S 2S S 2Xx-   Xx-   S-   24   n	T" U	/UQ70 UD6n	[        R
                  " U	S5      n	UR                  U	5        MN     Ml  U S S 2S S 2XwS-   24   n	T" U	/UQ70 UD6n	UR                  U	5        M     [        R                  " U5      $ T" U /UQ70 UD6$ )Nr   r   r      )get_num_channelsMAX_OPENCV_WORKING_CHANNELSrangeTWOnpexpand_dimsappenddstack)imgprocess_argsprocess_kwargsall_args
all_kwargsnum_channelschunksindexichunkargskwargs
process_fns             H/var/www/fran/franai/venv/lib/python3.13/site-packages/albucore/utils.py__process_fn-maybe_process_in_chunks.<locals>.__process_fnL   s    *T)L)%+n%<
',55Fq,2'3."1X #Aq%)ei!m*C$C D *5 J8 Jz J "ub 9e,	 &  1eai&7 78E&uFxF:FEMM%( 3 99V$$#77J77    )r)   
np.ndarrayr*   P.argsr+   P.kwargsreturnr:   r   )r5   r3   r4   r7   s   ``` r6   maybe_process_in_chunksr>   9   s)    & :8 8 80 r9   c                    [         U   nU(       a  [        R                  " U SX0S9$ [        R                  " U SU5      R                  USS9$ )Nr   )outF)copy)MAX_VALUES_BY_DTYPEr%   clipastype)r)   dtypeinplace	max_values       r6   rC   rC   h   sE    #E*IwwsAy227739%,,U,??r9   c                4   ^  [        T 5      SU 4S jj5       nU$ )Nc                   > U R                   nT" U /UQ70 UD6nUR                   [        R                  :X  a  U$ [        XC5      $ N)rE   r%   r   rC   )r)   r3   r4   rE   resultfuncs        r6   wrapped_function!clipped.<locals>.wrapped_functionp   s@    		c+D+F+<<288#MF""r9   )r)   r:   r3   r;   r4   r<   r=   r:   r   )rL   rM   s   ` r6   clippedrO   o   s!    
4[# # r9   c                L    U R                   [        :X  a  U R                  S   $ S$ )Nr   r   )ndimNUM_MULTI_CHANNEL_DIMENSIONSshaper   s    r6   r!   r!   }   s!    "ZZ+GG5;;q>NQNr9   c                    [        U 5      S:H  $ )Nr   r!   rT   s    r6   is_grayscale_imagerW      s    E"a''r9   c                j    [        U [        R                  5      (       a  U R                  n [        U    $ rJ   )
isinstancer%   ndarrayrE   NPDTYPE_TO_OPENCV_DTYPE)values    r6   get_opencv_dtype_from_numpyr]      s'    %$$"5))r9   c                &    [        U 5      [        :H  $ rJ   )r!   NUM_RGB_CHANNELSrT   s    r6   is_rgb_imager`      s    E"&666r9   c                "    [        U 5      nUS;  $ )N>   r   r
   rV   )r   r.   s     r6   is_multispectral_imagerb      s    #E*Lv%%r9   c                   [        U [        [        [        R                  [        R
                  45      (       a6  [        U [        [        45      (       a  [        U 5      $ U R                  5       $ [        U [        R                  5      (       ai  U R                  S:X  a  U R                  5       $ U R                  S:  a  U $ [        U 5      S:X  d  US:X  d  [        U 5      U:  a  [        U S   5      $ U SU $ [        S[        U 5       35      e)a  Convert a value to a float or numpy array based on its shape and number of channels.

Args:
    value: Input value to convert (numpy array, float, or int)
    num_channels: Number of channels in the target image

Returns:
    float: If value is a scalar or 1D array that should be converted to scalar
    np.ndarray: If value is a multi-dimensional array or channel vector

Raises:
    TypeError: If value is of unsupported type
r   r   NzUnsupported value type: )rY   floatintr%   r   r   itemrZ   rQ   len	TypeErrortype)r\   r.   s     r6   convert_valuerj      s     %%bjj"**=>>)%%>>uU|PEJJLP %$$::?::< ::>L u:?la/3u:3Lq?"]l##
.tE{m<
==r9   c                J    U [         ;  a  SU  S3n[        U5      e[         U    $ )Nz(Can't infer the maximum value for dtype zS. You need to specify the maximum value manually by passing the max_value argument.)rB   RuntimeError)rE   msgs     r6   get_max_valuern      s;    ''6ug >` ` 	 3u%%r9   )r5   0Callable[Concatenate[np.ndarray, P], np.ndarray]r3   r;   r4   r<   r=   z"Callable[[np.ndarray], np.ndarray])F)r)   r:   rE   r   rF   boolr=   r:   )rL   ro   r=   ro   )r   r:   r=   re   )r   r:   r=   rp   )r\   z$np.ndarray | int | np.dtype | objectr=   re   )r\   znp.ndarray | floatr.   re   r=   zfloat | np.ndarray)rE   znp.dtyper=   rd   )6
__future__r   sys	functoolsr   typingr   r   r   r	   version_infor   r   typing_extensionscv2numpyr%   r_   MONO_CHANNEL_DIMENSIONSrR   FOURr$   r"   NormalizationTyper   rE   r   r   r   r   r   r   r   rB   CV_8UCV_16UCV_32FCV_64FCV_32Sr[   r>   rC   rO   r!   rW   r]   r`   rb   rj   rZ   rd   re   	ValueTypern    r9   r6   <module>r      s   " 
  0 0w--8 
      Z[ cN HHWsHHXHHX
HHYHHYHHYHHcIIuIIzJJJJJJHHj " HHciiIIszzJJ

JJ

HHcjjHHWsyyHHX

HHYHHYHHWszz ,@,, , (	,^@O(*7&
">J "**eS()	&r9   