o
    *jv                     @   sz  d dl Z d dlZd dlZd dlZd dlmZmZmZ d dlZd dl	Zd dl
Z
d dlmZ d dlmZmZmZmZmZ d dlmZ ddlmZ ddlmZ zd d	lmZ ejZW n eyc   ejZY nw eje
jejd
k rved ddgZ dd Z!dd Z"e
j#$ rdndddfde%dee%e
j&f de'de%fddZ(		d dee%ee% f de)de'dee
j*e
j+f fddZ,dS )!    N)AnyListUnion)Image)
CenterCropCompose	NormalizeResizeToTensor)tqdm   )build_model)SimpleTokenizer)InterpolationModez1.7.1z.PyTorch version 1.7.1 or higher is recommendedloadtokenizec                 C   s
   |  dS )NRGB)convert)image r   s/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/cv/text_driven_segmentation/clip.py_convert_image_to_rgb"   s   
r   c                 C   s&   t t| tdt| tt tddgS )N)interpolation)g3<4'?gwgM?gy{ ?)gB91?gwt.?g	U?)r   r	   BICUBICr   r   r
   r   )Zn_pxr   r   r   
_transform&   s   
r   cudacpuFnamedevicejitrootc           
         s  |st   }t dkr|  |t|jjfS tjj	 fddg d}dd |j
dD d fd	d
}|| ||j ||j t dkrtjj	dd g d}t|j
d d }| fdd}	||	 |	|j |	|j |  |t|j fS )Nr   c                      s   t g t  S N)torchonestor   r   )r   r   r   <lambda>?   s    zload.<locals>.<lambda>)Zexample_inputsc                 S   s   g | ]
}d t |v r|qS )ZDevice)repr).0nr   r   r   
<listcomp>@   s
    zload.<locals>.<listcomp>prim::Constantc                    s   zt | dr
| jgng }W n ty   g }Y nw t | dr%|| jj |D ]}|dD ]}d| v rDt|d drD|	  q.q'd S )Ngraphforward1r*   valuer   )
hasattrr,   RuntimeErrorappendr-   findAllNodesZattributeNamesstr
startswithcopyAttributes)modulegraphsr,   node)device_noder   r   patch_deviceE   s$   

zload.<locals>.patch_devicec                   S   s   t g  S r!   )r"   r#   floatr   r   r   r   r%   [   s    aten::tor   c                    s   zt | dr
| jgng }W n ty   g }Y nw t | dr%|| jj |D ](}|dD ] }t| }dD ]}||  d dkrM||  	  q8q.q'd S )Nr,   r-   r<   )r      r.      )
r/   r,   r0   r1   r-   r2   listinputsr8   r5   )r6   r7   r,   r8   r@   i)
float_noder   r   patch_float_   s"   
zload.<locals>.patch_float)r   r$   r3   r;   r   ZvisualZinput_resolutionr"   r   tracer,   r2   applyZencode_imageZencode_textr?   ZfindNoder@   r8   item)
r   r   r   r    modelZdevice_holderr:   Zfloat_holderZfloat_inputrC   r   )r   r9   rB   r   r   1   s:   






M   textscontext_lengthtruncatereturnc                    s   t |tr|g} jd  jd  fdd|D }tjtjtjdk r6tjt	||tj
d}ntjt	||tjd}t|D ]0\}}t	||krh|r\|d| }|d< ntd	||  d
| t|||dt	|f< qE|S )a  
    Returns the tokenized representation of given input string(s)

    Parameters
    ----------
    texts : Union[str, List[str]]
        An input string or a list of input strings to tokenize

    context_length : int
        The context length to use; all CLIP models use 77 as the context length

    truncate: bool
        Whether to truncate the text in case its encoding is longer than the context length

    Returns
    -------
    A two-dimensional tensor containing the resulting tokens, shape = [number of input strings, context_length].
    We return LongTensor when torch version is <1.8.0, since older index_select requires indices to be long.
    z<|startoftext|>z<|endoftext|>c                    s"   g | ]}g  | g qS r   )encode)r'   text
_tokenizerZ	eot_tokenZ	sot_tokenr   r   r)      s    ztokenize.<locals>.<listcomp>z1.8.0)ZdtypeNr+   zInput z  is too long for context length )
isinstancer3   encoder	packagingversionparser"   __version__Zzeroslenlongint	enumerater0   Ztensor)rP   rI   rJ   rK   Z
all_tokensresultrA   tokensr   rO   r   r   z   s0   




)rH   F)-hashlibosurllibwarningstypingr   r   r   rS   Zpackaging.versionr"   ZPILr   Ztorchvision.transformsr   r   r   r	   r
   r   rG   r   Zsimple_tokenizerr   Z
_Tokenizerr   r   ImportErrorrT   rU   rV   warn__all__r   r   r   Zis_availabler3   r   boolr   rY   Z	IntTensorZ
LongTensorr   r   r   r   r   <module>   sf   




L