
    9iF                        S SK r S SKJr  S SKJr  S SKrS SKrS SKJ	r	  SSK
JrJr  \R                  " 5        " S S\5      5       rS	 r\R                  " 5        " S
 S\5      5       r\R                  " 5        " S S\5      5       rS r\R                  " 5        " S S\5      5       r\R                  " 5        " S S\5      5       r\R                  " 5        " S S\5      5       rg)    N)Sequence)Mapping)default_group   )PREPROCESSORSbuild_preprocessorc                   .    \ rS rSrSrSS jrS rS rSrg)	Compose   a  Compose a data pipeline with a sequence of transforms.
Args:
    transforms (list[dict | callable]):
        Either config dicts of transforms or transform objects.
    profiling (bool, optional): If set True, will profile and
        print preprocess time for each step.
Nc                    [        U[        5      (       d   eX0l        / U l        X l        U H  n[        U[
        5      (       a+  U R                  c  [        U[        5      nO5 [        XB5      nO([        U5      (       a  O[        S[        U5       35      eU R                  R                  U5        M     g ! [         a    [        U[        5      n N<f = f)Nz.transform must be callable or a dict, but got )
isinstancer   	profiling
transforms
field_namedictr   r   KeyErrorcallable	TypeErrortypeappend)selfr   r   r   	transforms        _/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/preprocessors/common.py__init__Compose.__init__   s    *h////"$#I)T**??* 29m LIF$6y$M	 )$$ !$$(O#4!6 7 7OO""9-! $ $ F$6y7D%F	Fs   $B88CCc                     U R                    Hm  nU R                  (       a  [        R                  " 5       nU" U5      nU R                  (       a&  [        U S[        R                  " 5       W-
   35        Ub  Mm    g    U$ )Nz time )r   r   timeprint)r   datatstarts       r   __call__Compose.__call__/   s`    A~~		T7D~~6$))+e"3!456| !     c                 x    U R                   R                  S-   nU R                   H  nUSU 3-  nM     US-  nU$ )N(z
    z
))	__class____name__r   )r   format_stringr    s      r   __repr__Compose.__repr__=   sD    //#5AvaS\)M !r$   )r   r   r   )NF	r(   
__module____qualname____firstlineno____doc__r   r"   r*   __static_attributes__ r$   r   r
   r
      s    ..r$   r
   c                    [        U [        R                  5      (       a  U $ [        U [        R                  5      (       a  [        R
                  " U 5      $ [        U [        5      (       a+  [        U [        5      (       d  [        R                  " U 5      $ [        U [        5      (       a  [        R                  " U /5      $ [        U [        5      (       a  [        R                  " U /5      $ [        S[        U 5       S35      e)a   Convert objects of various python types to :obj:`torch.Tensor`.

Supported types are: :class:`numpy.ndarray`, :class:`torch.Tensor`,
:class:`Sequence`, :class:`int` and :class:`float`.

Args:
    data (torch.Tensor | numpy.ndarray | Sequence | int | float): Data to
        be converted.
type  cannot be converted to tensor.)r   torchTensornpndarray
from_numpyr   strtensorint
LongTensorfloatFloatTensorr   r   r   s    r   	to_tensorrB   E   s     $%%	D"**	%	%%%	D(	#	#JtS,A,A||D!!	D#		''	D%	 	   $((%T
|+JKLLr$   c                   .    \ rS rSrSrSS jrS rS rSrg)	ToTensor^   u   Convert target object to tensor.

Args:
    keys (Sequence[str]): Key of data to be converted to Tensor.
        Only valid when data is type of `Mapping`. If `keys` is None,
        all values of keys ​​will be converted to tensor by default.
Nc                     Xl         g Nkeysr   rI   s     r   r   ToTensor.__init__h       	r$   c                     [        U[        5      (       aV  U R                  c  [        UR                  5       5      U l        U R                   H  nX!;   d  M
  [	        X   5      X'   M     U$ [	        U5      nU$ rG   )r   r   rI   listrB   r   r   keys      r   r"   ToTensor.__call__k   sc    dG$$yy  -	yy; )$) 4DI !  T?Dr$   c                 P    U R                   R                  SU R                   S3-   $ Nz(keys=)r'   r(   rI   r   s    r   r*   ToTensor.__repr__x   $    ~~&&6$))A)>>>r$   rH   rG   r,   r2   r$   r   rD   rD   ^       ?r$   rD   c                   *    \ rS rSrSrS rS rS rSrg)Filter|   zThis is usually the last stage of the dataloader transform.
Only data of reserved keys will be kept and passed directly to the model, others will be removed.

Args:
    keys (Sequence[str]): Keys of data to be reserved, others will be removed.
c                     Xl         g rG   reserved_keys)r   r_   s     r   r   Filter.__init__   s    *r$   c                 x    [        U[        5      (       d   e0 nU R                   H  nX1;   d  M
  X   X#'   M     U$ rG   )r   r   r_   )r   r   reserved_datarP   s       r   r"   Filter.__call__   sA    $((((%%C{%)Y" & r$   c                 P    U R                   R                  SU R                   S3-   $ rS   )r'   r(   r_   rV   s    r   r*   Filter.__repr__   s'    ~~&&6$2D2D1EQ)GGGr$   r^   Nr,   r2   r$   r   r[   r[   |   s    +Hr$   r[   c                 2   [        U [        R                  5      (       a  U R                  5       $ [        U [        R
                  5      (       a  U $ [        U [        5      (       a+  [        U [        5      (       d  [        R                  " U 5      $ [        U [        5      (       a#  [        R                  " U [        R                  S9$ [        U [        5      (       a#  [        R                  " U [        R                  S9$ [        S[        U 5       S35      e)zConvert objects of various python types to `numpy.ndarray`.

Args:
    data (torch.Tensor | numpy.ndarray | Sequence | int | float): Data to
        be converted.
)dtyper4   r5   )r   r6   r7   numpyr8   r9   r   r;   asarrayr=   int64r?   float64r   r   rA   s    r   to_numpyrl      s     $%%zz|	D"**	%	%	D(	#	#JtS,A,Azz$	D#		zz$bhh//	D%	 	 zz$bjj11%T
|+JKLLr$   c                   .    \ rS rSrSrSS jrS rS rSrg)	ToNumpy   u  Convert target object to numpy.ndarray.

Args:
    keys (Sequence[str]): Key of data to be converted to numpy.ndarray.
        Only valid when data is type of `Mapping`. If `keys` is None,
        all values of keys ​​will be converted to numpy.ndarray by default.
Nc                     Xl         g rG   rH   rJ   s     r   r   ToNumpy.__init__   rL   r$   c                     [        U[        5      (       aV  U R                  c  [        UR                  5       5      U l        U R                   H  nX!;   d  M
  [	        X   5      X'   M     U$ [	        U5      nU$ rG   )r   r   rI   rN   rl   rO   s      r   r"   ToNumpy.__call__   sc    dG$$yy  -	yy; ( 3DI !  D>Dr$   c                 P    U R                   R                  SU R                   S3-   $ rS   rU   rV   s    r   r*   ToNumpy.__repr__   rX   r$   rH   rG   r,   r2   r$   r   rn   rn      rY   r$   rn   c                   2    \ rS rSrSr/ / 4S jrS rS rSrg)Rename   zDChange the name of the input keys to output keys, respectively.
    c                     Xl         X l        g rG   
input_keysoutput_keys)r   r{   r|   s      r   r   Rename.__init__   s    $&r$   c                     [        U[        5      (       aN  [        U R                  U R                  5       H*  u  p#X!;   d  M  X1;  d  M  X   X'   UR                  U5        M,     U$ rG   )r   r   zipr{   r|   pop)r   r   in_keyout_keys       r   r"   Rename.__call__   sS    dG$$#&t8H8H#I>g&9$(LDMHHV$ $J r$   c                 P    U R                   R                  SU R                   S3-   $ rS   rU   rV   s    r   r*   Rename.__repr__   rX   r$   rz   Nr,   r2   r$   r   rw   rw      s     #%" '?r$   rw   c                        \ rS rSrS rS rSrg)Identity   c                     g rG   r2   rV   s    r   r   Identity.__init__   s    r$   c                     U$ rG   r2   )r   items     r   r"   Identity.__call__   s    r$   r2   N)r(   r-   r.   r/   r   r"   r1   r2   r$   r   r   r      s    r$   r   )r   collections.abcr   typingr   rh   r8   r6   modelscope.utils.registryr   builderr   r   register_moduleobjectr
   rB   rD   r[   rl   rn   rw   r   r2   r$   r   <module>r      s    $    3 6  3f 3 !3lM2  ?v ? !?:  HV H !H2M,  ?f ? !?:  ?V ? !?(  v  !r$   