
    vjF                        d dl Z d dlmZ d dlmZ d dlZd dlZd dlm	Z	 ddl
mZmZ  ej                     G d de                      Zd	 Z ej                     G d
 de                      Z ej                     G d de                      Zd Z ej                     G d de                      Z ej                     G d de                      Z ej                     G d de                      ZdS )    N)Sequence)Mapping)default_group   )PREPROCESSORSbuild_preprocessorc                   &    e Zd ZdZddZd Zd ZdS )Composea(  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.
    NFc                    t          |t                    sJ || _        g | _        || _        |D ]}t          |t
                    rT| j        t          |t                    }nf	 t          ||          }nT# t          $ r t          |t                    }Y n3w xY wt          |          rnt          dt          |                     | j                            |           d S )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        o/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/modelscope/preprocessors/common.py__init__zCompose.__init__   s   *h/////"$# 	. 	.I)T** 7?* 29m L LIIF$6y*$M$M		# F F F$6y7D%F %F			F )$$ 7 !6$(OO!6 !6 7 7 7O""9----!	. 	.s   $A55BBc                     | j         D ][}| j        rt          j                    } ||          }| j        r(t          | dt          j                    |z
              | d S \|S )Nz time )r   r   timeprint)r   datatstarts       r   __call__zCompose.__call__/   s|     
	 
	A~ $	1T77D~ 755$)++e"355666|tt     c                 R    | j         j        dz   }| j        D ]
}|d| z  }|dz  }|S )N(z
    z
))	__class____name__r   )r   format_stringr   s      r   __repr__zCompose.__repr__=   sD    /#5 	* 	*A\a\\)MMr!   )NFr%   
__module____qualname____doc__r   r    r'    r!   r   r
   r
      sP         . . . ..      r!   r
   c                    t          | t          j                  r| S t          | t          j                  rt          j        |           S t          | t                    r)t          | t                    st          j        |           S t          | t                    rt          j
        | g          S t          | t                    rt          j        | g          S t          dt          |            d          )a8  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_tensorr<   E   s     $%% M	D"*	%	% 	M%%%	D(	#	# MJtS,A,A M|D!!!	D#		 M'''	D%	 	  M $(((KT

KKKLLLr!   c                   &    e Zd ZdZddZd Zd ZdS )ToTensoru  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                     || _         d S Nkeysr   rB   s     r   r   zToTensor.__init__h       			r!   c                     t          |t                    rT| j        &t          |                                          | _        | j        D ]}||v rt	          ||                   ||<   nt	          |          }|S r@   )r   r   rB   listr<   r   r   keys      r   r    zToTensor.__call__k   sz    dG$$ 	#y  --	y 5 5$;; )$s) 4 4DI5 T??Dr!   c                 2    | j         j        d| j         dz   S Nz(keys=)r$   r%   rB   r   s    r   r'   zToTensor.__repr__x        ~&)>$))>)>)>>>r!   r@   r(   r,   r!   r   r>   r>   ^   P              ? ? ? ? ?r!   r>   c                   $    e Zd ZdZd Zd Zd ZdS )Filtera  This 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                     || _         d S r@   )reserved_keys)r   rS   s     r   r   zFilter.__init__   s    *r!   c                 j    t          |t                    sJ i }| j        D ]}||v r||         ||<   |S r@   )r   r   rS   )r   r   reserved_datarH   s       r   r    zFilter.__call__   sM    $(((((% 	/ 	/Cd{{%)#Yc"r!   c                 2    | j         j        d| j         dz   S rJ   )r$   r%   rS   rM   s    r   r'   zFilter.__repr__   s!    ~&)G$2D)G)G)GGGr!   Nr(   r,   r!   r   rQ   rQ   |   sP         + + +  H H H H Hr!   rQ   c                 &   t          | t          j                  r|                                 S t          | t          j                  r| S t          | t                    r)t          | t                    st	          j        |           S t          | t                    r t	          j        | t          j
                  S t          | t                    r t	          j        | t          j                  S t          dt          |            d          )zConvert objects of various python types to `numpy.ndarray`.

    Args:
        data (torch.Tensor | numpy.ndarray | Sequence | int | float): Data to
            be converted.
    )dtyper.   r/   )r   r0   r1   numpyr2   r3   r   r5   asarrayr7   int64r9   float64r   r   r;   s    r   to_numpyr]      s     $%% Mzz||	D"*	%	% 	M	D(	#	# MJtS,A,A Mz$	D#		 Mz$bh////	D%	 	  Mz$bj1111KT

KKKLLLr!   c                   &    e Zd ZdZddZd Zd ZdS )ToNumpyu!  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                     || _         d S r@   rA   rC   s     r   r   zToNumpy.__init__   rD   r!   c                     t          |t                    rT| j        &t          |                                          | _        | j        D ]}||v rt	          ||                   ||<   nt	          |          }|S r@   )r   r   rB   rF   r]   rG   s      r   r    zToNumpy.__call__   sz    dG$$ 	"y  --	y 4 4$;; (c 3 3DI4 D>>Dr!   c                 2    | j         j        d| j         dz   S rJ   rL   rM   s    r   r'   zToNumpy.__repr__   rN   r!   r@   r(   r,   r!   r   r_   r_      rO   r!   r_   c                   *    e Zd ZdZg g fdZd Zd ZdS )RenamezDChange the name of the input keys to output keys, respectively.
    c                 "    || _         || _        d S r@   )
input_keysoutput_keys)r   rf   rg   s      r   r   zRename.__init__   s    $&r!   c                     t          |t                    rHt          | j        | j                  D ]-\  }}||v r$||vr ||         ||<   |                    |           .|S r@   )r   r   ziprf   rg   pop)r   r   in_keyout_keys       r   r    zRename.__call__   sn    dG$$ 	%#&t8H#I#I % %T>>gT&9&9$(LDMHHV$$$r!   c                 2    | j         j        d| j         dz   S rJ   rL   rM   s    r   r'   zRename.__repr__   rN   r!   Nr(   r,   r!   r   rd   rd      sW          #%" ' ' ' '  ? ? ? ? ?r!   rd   c                       e Zd Zd Zd ZdS )Identityc                     d S r@   r,   rM   s    r   r   zIdentity.__init__   s    r!   c                     |S r@   r,   )r   items     r   r    zIdentity.__call__   s    r!   N)r%   r)   r*   r   r    r,   r!   r   ro   ro      s2              r!   ro   )r   collections.abcr   typingr   rY   r2   r0   modelscope.utils.registryr   builderr   r   register_moduleobjectr
   r<   r>   rQ   r]   r_   rd   ro   r,   r!   r   <module>ry      s6    $ $ $ $ $ $            3 3 3 3 3 3 6 6 6 6 6 6 6 6   3 3 3 3 3f 3 3 ! 3lM M M2   ? ? ? ? ?v ? ? ! ?:   H H H H HV H H ! H2M M M,   ? ? ? ? ?f ? ? ! ?:   ? ? ? ? ?V ? ? ! ?(       v   !   r!   