
    Z j                        S SK Jr  S SKJrJrJr  SSKJrJrJ	r	J
r
Jr  SSKJrJr  \	" 5       (       a  S SKJr  SSKJr  \" 5       (       a
  S S	KrSS
KJr  \
R,                  " \5      r\" \" SS95       " S S\5      5       rg	)    )UserDict)AnyUnionoverload   )add_end_docstringsis_torch_availableis_vision_availableloggingrequires_backends   )Pipelinebuild_pipeline_init_args)Image)
load_imageN)6MODEL_FOR_ZERO_SHOT_IMAGE_CLASSIFICATION_MAPPING_NAMEST)has_image_processorc                   f  ^  \ rS rSrSrSrSrSrSrU 4S jr	\
S\\S4   S\\   S	\S
\\\\4      4S j5       r\
S\\   \S   -  S\\   S	\S
\\\\\4         4S j5       rS\\\\   S\S   4   S\\   S	\S
\\\\4      \\\\\4         -  4U 4S jjrSS jr    SS jrS rS rSrU =r$ )#ZeroShotImageClassificationPipeline   a  
Zero shot image classification pipeline using `CLIPModel`. This pipeline predicts the class of an image when you
provide an image and a set of `candidate_labels`.

Example:

```python
>>> from transformers import pipeline

>>> classifier = pipeline(model="google/siglip-so400m-patch14-384")
>>> classifier(
...     "https://huggingface.co/datasets/Narsil/image_dummy/raw/main/parrots.png",
...     candidate_labels=["animals", "humans", "landscape"],
... )
[{'score': 0.965, 'label': 'animals'}, {'score': 0.03, 'label': 'humans'}, {'score': 0.005, 'label': 'landscape'}]

>>> classifier(
...     "https://huggingface.co/datasets/Narsil/image_dummy/raw/main/parrots.png",
...     candidate_labels=["black and white", "photorealist", "painting"],
... )
[{'score': 0.996, 'label': 'black and white'}, {'score': 0.003, 'label': 'photorealist'}, {'score': 0.0, 'label': 'painting'}]
```

Learn more about the basics of using a pipeline in the [pipeline tutorial](../pipeline_tutorial)

This image classification pipeline can currently be loaded from [`pipeline`] using the following task identifier:
`"zero-shot-image-classification"`.

See the list of available models on
[huggingface.co/models](https://huggingface.co/models?filter=zero-shot-image-classification).
FTc                 h   > [         TU ]  " S0 UD6  [        U S5        U R                  [        5        g )Nvision )super__init__r   check_model_typer   )selfkwargs	__class__s     چ/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/pipelines/zero_shot_image_classification.pyr   ,ZeroShotImageClassificationPipeline.__init__C   s,    "6"$)TU    imagezImage.Imagecandidate_labelsr   returnc                     g Nr   r   r#   r$   r   s       r    __call__,ZeroShotImageClassificationPipeline.__call__I   s      #r"   c                     g r'   r   r(   s       r    r)   r*   N   s     &)r"   c                 t   > SU;   a  UR                  S5      nUc  [        S5      e[        TU ]  " U4SU0UD6$ )a;  
Assign labels to the image(s) passed as inputs.

Args:
    image (`str`, `list[str]`, `PIL.Image` or `list[PIL.Image]`):
        The pipeline handles three types of images:

        - A string containing a http link pointing to an image
        - A string containing a local path to an image
        - An image loaded in PIL directly

    candidate_labels (`list[str]`):
        The candidate labels for this image. They will be formatted using *hypothesis_template*.

    hypothesis_template (`str`, *optional*, defaults to `"This is a photo of {}"`):
        The format used in conjunction with *candidate_labels* to attempt the image classification by
        replacing the placeholder with the candidate_labels. Pass "{}" if *candidate_labels* are
        already formatted.

    timeout (`float`, *optional*, defaults to None):
        The maximum time in seconds to wait for fetching images from the web. If None, no timeout is set and
        the call may block forever.

Return:
    A list of dictionaries containing one entry per proposed label. Each dictionary contains the
    following keys:
    - **label** (`str`) -- One of the suggested *candidate_labels*.
    - **score** (`float`) -- The score attributed by the model to that label. It is a value between
        0 and 1, computed as the `softmax` of `logits_per_image`.
imageszSCannot call the zero-shot-image-classification pipeline without an images argument!r$   )pop
ValueErrorr   r)   )r   r#   r$   r   r   s       r    r)   r*   S   sH    J vJJx(E=rsswS8HSFSSr"   c                 d    0 nSU;   a  US   US'   SU;   a  US   US'   SU;   a  US   US'   U0 0 4$ )Nr$   timeouthypothesis_templater   )r   tokenizer_kwargsr   preprocess_paramss       r    _sanitize_parameters8ZeroShotImageClassificationPipeline._sanitize_parameters~   sa    '4:;M4N01+1)+<i( F*7=>S7T34 "b((r"   c                    Uc  0 n[        XS9nU R                  U/SS9nUR                  U R                  5      nX&S'   U Vs/ s H  osR	                  U5      PM     nnSS0n	SU R
                  R                  R                  ;   a  U	R                  SS	SS
9  U	R                  U5        U R                  " U4SS0U	D6n
U
/US'   U$ s  snf )N)r1   pt)r-   return_tensorsr$   paddingTsiglip
max_length@   )r:   r<   
truncationr9   text_inputs)
r   image_processortodtypeformatmodelconfig
model_typeupdate	tokenizer)r   r#   r$   r2   r1   r3   inputsx	sequencestokenizer_default_kwargsr?   s              r    
preprocess.ZeroShotImageClassificationPipeline.preprocess   s     #!52%%eWT%J4::&%5!"<LM<Lq//2<L	M$-t#4 tzz((333$++LR\`+a ''(89nnY`t`G_`!,} Ns   Cc                     UR                  S5      nUR                  S5      n[        US   [        5      (       a  US   nOUS   S   nU R                  " S0 UDUD6nUUR                  S.nU$ )Nr$   r?   r   )r$   logitsr   )r.   
isinstancer   rD   logits_per_image)r   model_inputsr$   r?   outputsmodel_outputss         r    _forward,ZeroShotImageClassificationPipeline._forward   s    '++,>?"&&}5k!nh//%a.K &a.+K**;{;l; !1..
 r"   c                    UR                  S5      nUS   S   nSU R                  R                  R                  ;   aN  [        R
                  " U5      R                  S5      nUR                  5       n[        U[        5      (       d  U/nOFUR                  SS9R                  S5      nUR                  5       n[        U[        5      (       d  U/n[        [        XR5      S S9 VVs/ s H	  u  pgXgS	.PM     nnnU$ s  snnf )
Nr$   rP   r   r;   )dimc                     U S   * $ )Nr   r   )rJ   s    r    <lambda>AZeroShotImageClassificationPipeline.postprocess.<locals>.<lambda>   s    _`ab_c^cr"   )key)scorelabel)r.   rD   rE   rF   torchsigmoidsqueezetolistrQ   listsoftmaxsortedzip)	r   rU   r$   rP   probsscoresr_   candidate_labelresults	            r    postprocess/ZeroShotImageClassificationPipeline.postprocess   s    (,,-?@x(+tzz((333MM&)11"5E\\^Ffd++ NNrN*2226E\\^Ffd++  +1V1NTc*d
*d& 6*d 	 
 	
s   )C>r   r'   )NzThis is a photo of {}.NN)__name__
__module____qualname____firstlineno____doc___load_processor_load_image_processor_load_feature_extractor_load_tokenizerr   r   r   strre   r   dictr)   r5   rM   rV   rm   __static_attributes____classcell__)r   s   @r    r   r      se   @ O #OV #3-.#BFs)#WZ#	d38n	# # )#Ym!44)HLS	)]`)	d4S>"	#) ))TS$s)]D4GGH)T s))T 	)T
 
d38n	T$sCx.%9 :	:)TV	) 4." r"   r   )collectionsr   typingr   r   r   utilsr   r	   r
   r   r   baser   r   PILr   image_utilsr   ra   models.auto.modeling_autor   
get_loggerro   loggerr   r   r"   r    <module>r      sy      ' '  5 (b 
		H	% ,FGf( f Hfr"   