
    hK                        S SK r S SKJr  S SKJrJrJrJrJr  S SK	r
S SKJrJrJr  \ R                  S:  a  S SKJr  OS SKJr  \" S\S\4   S	9rS
\\\
R&                  \4   \
R&                  4   S\\\
R&                  \4   \
R&                  4   4S jrS
\\\
R&                  \4   \
R&                  4   S\\\
R&                  \4   \
R&                  4   4S jr\S   r\S   rS\\S4   S\S\S\4S jrS\
R&                  S\\
R&                  \\S4   4   4S jrS\
R&                  S\\
R&                  \\S4   4   4S jrS\
R&                  S\\
R&                  \\S4   4   4S jrS\
R&                  S\\
R&                  \\S4   4   4S jrS\
R&                  S\\
R&                  \\S4   4   4S jr S\
R&                  S\\S4   S\
R&                  4S jr!S\
R&                  S\\S4   S\
R&                  4S jr"S\
R&                  S\\S4   S\
R&                  4S jr#S\
R&                  S\\S4   S\
R&                  4S jr$S\
R&                  S\\S4   S\
R&                  4S jr%S\
R&                  S\\
R&                  \\S4   4   4S  jr&S\
R&                  S\\
R&                  \\S4   4   4S! jr'S\
R&                  S\\
R&                  \\S4   4   4S" jr(S\
R&                  S\\S4   S\
R&                  4S# jr)S\
R&                  S\\S4   S\
R&                  4S$ jr*S\
R&                  S\\S4   S\
R&                  4S% jr+\&\&\'\'\(\(S.r,\)\)\*\*\+\+S.r- S-S\
R&                  S\S\S&\S\\
R&                  \\S4   4   4
S' jjr. S-S\
R&                  S\\S4   S\S\S&\S\
R&                  4S( jjr/\\\\\\S.r0\!\!\"\"\#\#S.r1 S-S\
R&                  S\S\S&\S\\
R&                  \\S4   4   4
S) jjr2 S-S\
R&                  S\\S4   S\S\S&\S\
R&                  4S* jjr3   S.S+\S\S\S&\S\\/\4   4
S, jjr4g)/    N)wraps)AnyCallableLiteralTypeVarcast)MONO_CHANNEL_DIMENSIONSNUM_MULTI_CHANNEL_DIMENSIONSP)   
   )ConcatenateF.)boundfuncreturnc           	         ^  [        T 5      S[        R                  S[        R                  S[        R
                  S[        R                  4U 4S jj5       nU$ )zLEnsure that input img is contiguous and the output array is also contiguous.imgargskwargsr   c                 t   > [         R                  " U S/S9n T" U /UQ70 UD6n[         R                  " US/S9$ )NC_CONTIGUOUSrequirements)nprequire)r   r   r   resultr   s       M/var/www/fran/franai/venv/lib/python3.13/site-packages/albucore/decorators.pywrapped_function$contiguous.<locals>.wrapped_function   s@     jjN+;<c+D+F+zz&/?@@    r   r   ndarrayr   r   r   r   r   s   ` r   
contiguousr%      sX    
 4[Abjj A A188 APRPZPZ A A r!   c           	         ^  [        T 5      S[        R                  S[        R                  S[        R
                  S[        R                  4U 4S jj5       nU$ )zPreserve dummy channel dim.r   r   r   r   c                 (  > U R                   nT" U /UQ70 UD6n[        U5      [        :X  a2  US   S:X  a)  UR                  [        :X  a  [
        R                  " USS9$ [        U5      [        :X  a   UR                  [        :X  a  US S 2S S 2S4   $ U$ )N   )axisr   )shapelenr
   ndimr	   r   expand_dims)r   r   r   r+   r   r   s        r   r   .preserve_channel_dim.<locals>.wrapped_function'   s    		c+D+F+u:55%)q.V[[\sMs>>&r22u:00V[[D`5`!Q'?"r!   r"   r$   s   ` r   preserve_channel_dimr0   "   sR    
 4[bjj  188 PRPZPZ   r!   )spatialchannelfull)DHWDHWCNHWNHWCNDHWNDHWCr+   has_batch_dimhas_depth_dimc                     [        U 5      nU(       a  U(       a
  US:X  a  S$ S$ U(       a
  US:X  a  S$ S$ U(       a
  US:X  a  S$ S$ [        S	5      e)
z7Determine the shape type based on dimensions and flags.   r9   r8      r7   r6   r5   r4   z,Either batch or depth dimension must be True)r,   
ValueError)r+   r:   r;   r-   s       r   get_shape_typer@   A   sW     u:D!)w//v--v--
C
DDr!   datac                    U R                   S:X  aH  U R                  u  pn[        R                  " [        R                  " U SS5      S/S9nX@R                  4$ U R                   S:X  aZ  U R                  u  pp5[        R                  " U SS5      n[        R                  " UR                  X#S5      S/S9nX`R                  4$ U R                   S:X  an  U R                  u    pp5U R                  SX#U5      n[        R                  " USS5      n[        R                  " UR                  X#S5      S/S9nX`R                  4$ [        S	U R                    35      e)
z4Reshape (D,H,W) or (D,H,W,C) for spatial transforms.r   r   r(   r   r   r>   r=   "Unsupported number of dimensions: r-   r+   r   r   moveaxisreshaper?   rA   _heightwidthreshapedchannelsfinalflats           r   
reshape_3drP   R   #   yyA~::5::bkk$26nEUV##yyA~%)ZZ"5;;tQ+

8++F2>nM]^jj  yyA~(,

%1e||Bx8;;tQ+

8++F2>nM]^jj  
9$))E
FFr!   c                    U R                   S:X  aH  U R                  u  pn[        R                  " [        R                  " U SS5      S/S9nX@R                  4$ U R                   S:X  aZ  U R                  u  pp5[        R                  " U SS5      n[        R                  " UR                  X#S5      S/S9nX`R                  4$ U R                   S:X  an  U R                  u    pp5U R                  SX#U5      n[        R                  " USS5      n[        R                  " UR                  X#S5      S/S9nX`R                  4$ [        S	U R                    35      e)
z4Reshape (N,H,W) or (N,H,W,C) for spatial transforms.r   r   r(   r   r   r>   rC   r=   rD   rE   rH   s           r   reshape_batchrS   f   rQ   r!   c                 ,   U R                   S:X  a[  U R                  u    pnU R                  SX#5      n[        R                  " [        R
                  " USS5      S/S9nXPR                  4$ U R                   S:X  a  U R                  u    pp6U R                  SX#U5      n[        R                  " [        R
                  " USS5      S/S9n[        R                  " UR                  X#S5      S/S9nXpR                  4$ [        SU R                    35      e)	z8Reshape (N,D,H,W) or (N,D,H,W,C) for spatial transforms.r>   r(   r   r   r   r=   rC   rD   )r-   r+   rG   r   r   rF   r?   )rA   rI   rJ   rK   rO   rL   rM   rN   s           r   reshape_batch_3drU   z   s    yyA~"jj1e||B.::bkk$26nEUV##yyA~(,

%1e||Bx8::bkk$26nEUV

8++F2>nM]^jj  
9$))E
FFr!   c                    U R                   S:X  aI  U R                  u  pp4[        R                  " U SS5      n[        R                  " US/S9U R                  4$ U R                   S:X  a\  U R                  u  pp4n[        R                  " U SS5      n[        R                  " UR                  X#US5      S/S9nX`R                  4$ [        SU R                    35      e)	z<Reshape (N,D,H,W) or (N,D,H,W,C) preserving depth dimension.r>   r   r(   r   r   r=   rC   rD   )r-   r+   r   rF   r   rG   r?   )rA   rI   depthrJ   rK   rL   rN   s          r   reshape_batch_3d_keep_depthrX      s    yyA~"&**&;;tQ+zz(.1ABDJJNNyyA~%)ZZ"&;;tQ+

8++E5"EUcTdejj  
9$))E
FFr!   c                 l    U R                   S;   a  X R                  4$ [        SU R                    35      e)z8Reshape (D,H,W) or (D,H,W,C) preserving depth dimension.>   r   r>   rD   )r-   r+   r?   )rA   s    r   reshape_3d_keep_depthrZ      s2    yyFZZ
9$))E
FFr!   original_shapec                 P   U R                   SS u  p#[        U5      S:X  aC  US   nU R                  X#U5      n[        R                  " [        R
                  " USS5      5      $ Uu  n  pgU R                  X#XG5      n[        R                  " [        R
                  " USS5      5      $ )z:Restore (H,W,D) or (H,W,D*C) back to (D,H,W) or (D,H,W,C).N   r   r   r(   rC   )r+   r,   rG   r   ascontiguousarrayrF   )rA   r[   rJ   rK   rW   rL   rI   rM   s           r   
restore_3dr_      s    JJrNMF
>aq!<<u5##BKK"a$@AA*E1a||F5;HHb! <==r!   c                 P   U R                   SS u  p#[        U5      S:X  aC  US   nU R                  X#U5      n[        R                  " [        R
                  " USS5      S/S9$ Uu  n  pgU R                  X#XG5      n[        R                  " [        R
                  " USS5      S/S9$ )	z:Restore (H,W,N) or (H,W,N*C) back to (N,H,W) or (N,H,W,C).Nr]   r   r   r(   r   r   rC   )r+   r,   rG   r   r   rF   )rA   r[   rJ   rK   
num_imagesrL   rI   rM   s           r   restore_batchrb      s    JJrNMF
>a#A&
<<z:zz"++hA6nEUVV!/J1||F:@H::bkk(B2.AQRRr!   c           	      |   U R                   SS u  p#[        U5      S:X  aE  USS u  pE[        R                  " U SS5      n[        R                  " UR                  XEX#5      S/S9$ Uu  pE  pxU R                  X#SU5      n[        R                  " USS5      n	[        R                  " U	R                  XEX#U5      S/S9$ )	zBRestore (H,W,N*D) or (H,W,N*D*C) back to (N,D,H,W) or (N,D,H,W,C).Nr]   r>   r(   r   r   r   rC   )r+   r,   r   rF   r   rG   )
rA   r[   rJ   rK   ra   rW   rL   rI   rM   moveds
             r   restore_batch_3dre      s    JJrNMF
>a*2A.
;;tR+zz(**:fL\j[kll(6%Jq!||F2x8HKK"a(E::emmJvhO_m^noor!   c                     U R                   SS u  p#n[        U5      S:X  a  [        R                  " U SS5      $ US   nUS   nU R	                  X#XEU5      n[        R                  " USS5      $ )zRestore data that kept its depth dimension.

For data that was reshaped with keep_depth_dim=True:
- (D',H',W',N) => (N,D',H',W')
- (D',H',W',N*C) => (N,D',H',W',C)

Note: D',H',W' can be different from original D,H,W after transforms like RandomCrop3D
Nr   r>   r(   r   rC   )r+   r,   r   rF   rG   )rA   r[   	new_depth
new_height	new_widthra   rM   rL   s           r   restore_batch_3d_keep_depthrj      sq     (,zz"1~$I9
>a{{4Q''"Jb!H||I9(SH;;xQ''r!   c                     U $ )zRestore data that kept its depth dimension.

For data that was reshaped with keep_depth_dim=True:
- (D,H,W) => (D,H,W)
- (D,H,W,C) => (D,H,W,C)
 )rA   r[   s     r   restore_3d_keep_depthrm      s	     Kr!   c                    U R                   S:X  aD  U R                  u  pn[        R                  " U R	                  X-  U5      S/S9nX@R                  4$ U R                   S:X  aD  U R                  u  pp5[        R                  " U R	                  X-  X55      S/S9nX@R                  4$ [        SU R                    35      e)z4Reshape (D,H,W) or (D,H,W,C) for channel transforms.r   r   r   r>   rD   r-   r+   r   r   rG   r?   )rA   rW   rJ   rK   rL   rM   s         r   reshape_3d_channelrp      s    yyA~#zzu::dll5>5AQ_P`a##yyA~)-&u::dll5>5K[iZjk##
9$))E
FFr!   c                    U R                   S:X  aD  U R                  u  pn[        R                  " U R	                  X-  U5      S/S9nX@R                  4$ U R                   S:X  aD  U R                  u  pp5[        R                  " U R	                  X-  X55      S/S9nX@R                  4$ [        SU R                    35      e)z4Reshape (N,H,W) or (N,H,W,C) for channel transforms.r   r   r   r>   rD   ro   )rA   ra   rJ   rK   rL   rM   s         r   reshape_batch_channelrr      s    yyA~$(JJ!
E::dll:+>FVdUef##yyA~.2jj+
E::dll:+>P`n_op##
9$))E
FFr!   c                    U R                   S:X  aC  U R                  u      p[        R                  " U R	                  SU5      S/S9nX0R                  4$ U R                   S:X  aD  U R                  u      pn[        R                  " U R	                  SX$5      S/S9nX0R                  4$ [        SU R                    35      e)z8Reshape (N,D,H,W) or (N,D,H,W,C) for channel transforms.r>   r(   r   r   r=   rD   ro   )rA   rI   rK   rL   rM   s        r   reshape_batch_3d_channelrt     s    yyA~1a::dll2u5^DTU##yyA~#':: 1a::dll2u?~N^_##
9$))E
FFr!   c                     [        U5      S:X  a$  Uu  p#nU R                  X#U R                  S   5      $ Uu  p#pEU R                  X#U R                  S   U5      $ )zRestore (D*H,W) or (D*H,W,C) back to (D,H,W) or (D,H,W,C).

Args:
    data: Array of shape (D*H,W') or (D*H,W',C)
    original_shape: Original shape (D,H,W) or (D,H,W,C)
r   r)   r,   rG   r+   )rA   r[   rW   rJ   rI   rM   s         r   restore_3d_channelrw     sY     >a)q||E4::a=99!/E1<<tzz!}h??r!   c                     [        U5      S:X  a$  Uu  p#nU R                  X#U R                  S   5      $ Uu  p#pEU R                  X#U R                  S   U5      $ )zRestore (N*H,W) or (N*H,W,C) back to (N,H,W) or (N,H,W,C).

Args:
    data: Array of shape (N*H,W') or (N*H,W',C)
    original_shape: Original shape (N,H,W) or (N,H,W,C)
r   r)   rv   )rA   r[   ra   rJ   rI   rM   s         r   restore_batch_channelry   %  sY     >a .
A||J

1>>&4#J<<
DJJqM8DDr!   c                     [        U5      S:X  a&  Uu  p#pEU R                  S   nU R                  X#XF5      $ Uu  p#pEnU R                  S   nU R                  X#XFU5      $ )zvRestore (N*D*H,W') or (N*D*H,W',C) back to (N,D,H,W',C).

Note: W' can be different from original W after transforms.
r>   r)   )r,   r+   rG   )rA   r[   ra   rW   rJ   rI   ri   rM   s           r   restore_batch_3d_channelr{   4  sg    
 >a'5$
6JJqM	||JvAA .<*Jv(

1I<<
6hGGr!   keep_depth_dimc                     U R                   S:X  a  [        S5      e[        U R                  X5      n[        U   nU" U 5      $ )=Choose appropriate reshape function based on data dimensions.r   Empty arrays are not supported)sizer?   r@   r+   CHANNEL_RESHAPE_FUNCSrA   r:   r;   r|   
shape_typereshape_funcs         r   reshape_for_channelr   Y  s@     yyA~9::

MIJ(4Lr!   c                 h    [        XU5      n[        U   nU" X5      n[        R                  " US/S9$ )=Choose appropriate restore function based on data dimensions.r   r   )r@   CHANNEL_RESTORE_FUNCSr   r   )rA   r[   r:   r;   r|   r   restore_funcr   s           r   restore_from_channelr   h  s8      }MJ(4L$/F::fN+;<<r!   c                     U R                   S:X  a  [        S5      e[        U R                  X5      nU(       a"  US;   a  [	        U 5      $ US;   a  [        U 5      $ [        U   nU" U 5      $ )r~   r   r      r8   r9      r4   r5   )r   r?   r@   r+   rX   rZ   SPATIAL_RESHAPE_FUNCSr   s         r   reshape_for_spatialr     sj     yyA~9::

MIJ**.t44((..(4Lr!   c                     [        XU5      nU(       a$  US;   a  [        X5      nO#US;   a  [        X5      nO[        U   nU" X5      n[        R
                  " WS/S9$ )r   r   r   r   r   )r@   rj   rm   SPATIAL_RESTORE_FUNCSr   r   )rA   r[   r:   r;   r|   r   r   r   s           r   restore_from_spatialr     sa      }MJ**0FF?**4@F,Z8d3::fN+;<<r!   transform_typec                 <   ^ ^^^ S[         S[         4UUUU 4S jjnU$ )z*Decorator to handle batch transformations.r   r   c                    >^  [        T 5      S[        S[        R                  S[        S[        S[        R                  4
U UUUU4S jj5       n[	        [
        U5      $ )NselfrA   r   paramsr   c                    > [         R                  " US/S9nTS:X  a  T" X/UQ70 UD6$ [        [        S.n[        [
        S.nUT   nUT   nU" UTTT5      u  pT" X/UQ70 UD6n
U" U
U	TTT5      $ )Nr   r   r3   )r1   r2   )r   r   r   r   r   r   )r   rA   r   r   reshape_funcsrestore_funcsr   r   rL   r[   transformedr   r:   r;   r|   r   s              r   wrapper3batch_transform.<locals>.decorator.<locals>.wrapper  s    ::d.1ABD'D8888 /.[M 0/CM
 )8L(8L'3	($H t???K r!   )r   r   r   r#   r   r   )r   r   r:   r;   r|   r   s   ` r   	decorator"batch_transform.<locals>.decorator  sY    	t!	# !	RZZ !	 !	s !	rzz !	 !	 
!	F Awr!   )r   )r   r:   r;   r|   r   s   ```` r   batch_transformr     s$    %  % a %  % N r!   )F)TFF)5sys	functoolsr   typingr   r   r   r   r   numpyr   albucore.utilsr	   r
   r   version_infor   typing_extensionsr   r#   r%   r0   BatchTransformType	ShapeTypetupleintboolr@   rP   rS   rU   rX   rZ   r_   rb   re   rj   rm   rp   rr   rt   rw   ry   r{   r   r   r   r   r   r   r   r   r   rl   r!   r   <module>r      s   
  8 8  S Sw"-CxS)*
;rzz1}-rzz9
:k"**a-("**45"
;rzz1}-rzz9
:k"**a-("**45& 9: 	Ec?EE E 	E"GRZZ GE"**eCHo*E$F G(G

 GuRZZsCx-H'I G(G2:: G%

E#s(O0K*L G Gbjj GU2::uSRUX;V5W GG

 GuRZZsCx5P/Q G>RZZ >sCx >RZZ > S

 SE#s(O S

 Sp2:: puS#X p2:: p(bjj (%S/ (VXV`V` (,

 E#s(O PRPZPZ 
GRZZ 
GE"**eCHo2M,N 
G
G

 
GuRZZsCx5P/Q 
GG2:: G%

E#s(O8S2T G@RZZ @sCx @RZZ @E

 EE#s(O EPRPZPZ EH2:: HuS#X HSUS]S] H$  !$%   !$%  !	
**  	
 2::uS#X&'( !=
**=#s(O= = 	=
 = ZZ=      !	
**  	
 2::uS#X&'6 !=
**=#s(O= = 	=
 = ZZ=0  	/&// / 	/
 qc1f/r!   