
    ^j                         d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ dd	lmZmZmZmZmZ dd
lmZmZ ddlmZmZ  G d ded      Ze G d de             ZdgZy)z#Image processor class for ViTMatte.    )UnionN)
functional   )TorchvisionBackend)BatchFeature)group_images_by_shapereorder_images)IMAGENET_STANDARD_MEANIMAGENET_STANDARD_STDChannelDimension
ImageInputget_image_size)ImagesKwargsUnpack)
TensorTypeauto_docstringc                       e Zd ZU dZeed<   y)VitMatteImageProcessorKwargsz
    size_divisor (`int`, *optional*, defaults to `self.size_divisor`):
        The width and height of the image will be padded to be divisible by this number.
    size_divisorN)__name__
__module____qualname____doc__int__annotations__     /var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/vitmatte/image_processing_vitmatte.pyr   r   #   s    
 r   r   F)totalc                   V    e Zd ZdZdZdZeZeZ	dZ
dZeZdee   ddf fdZ	 ddd	d
edd	fdZedededee   def fd       Z	 ddededededeedf   dz  dee   defdZded	   ded	   dedededeee   z  dz  deee   z  dz  dedz  d
edz  dedz  deez  dz  defdZ xZS )VitMatteImageProcessorTgp?    kwargsreturnNc                 p    |j                  dd       }||j                  d|       t        |   di | y )Nsize_divisibilityr   r   )pop
setdefaultsuper__init__)selfr#   r&   	__class__s      r   r*   zVitMatteImageProcessor.__init__7   s<    "JJ':DA(n.?@"6"r   imagesztorch.Tensorr   c                     t        |t        j                        \  }}||z  dk(  rdn|||z  z
  }||z  dk(  rdn|||z  z
  }||z   dkD  rdd||f}t        j                  ||      }|S )ad  
        Pads an image or batched images constantly so that width and height are divisible by size_divisor

        Args:
            images (`torch.Tensor`):
                Image to pad.
            size_divisor (`int`, *optional*, defaults to 32):
                The width and height of the image will be padded to be divisible by this number.
        )channel_dimr   )r   r   FIRSTtvFpad)r+   r-   r   heightwidth
pad_height	pad_widthpaddings           r   
_pad_imagez!VitMatteImageProcessor._pad_image>   s     'v;K;Q;QR </14Q,R^I^:^
-2Au|G[8[	z!A%!Y
3GWWVW-Fr   trimapsc                 &    t        |   ||fi |S )zP
        trimaps (`ImageInput`):
            The trimaps to preprocess.
        )r)   
preprocess)r+   r-   r9   r#   r,   s       r   r;   z!VitMatteImageProcessor.preprocessW   s     w!&'<V<<r   do_convert_rgbinput_data_formatdeviceztorch.devicec                 |    | j                  ||||      }| j                  |d|      } | j                  ||fi |S )z/
        Preprocess image-like inputs.
        )r-   r<   r=   r>      )r-   expected_ndimsr>   )_prepare_image_like_inputs_preprocess)r+   r-   r9   r<   r=   r>   r#   s          r   _preprocess_image_like_inputsz4VitMatteImageProcessor._preprocess_image_like_inputsd   sY     00.L]fl 1 
 11QR[a1bt:6::r   
do_rescalerescale_factordo_normalize
image_mean	image_stddo_paddisable_groupingreturn_tensorsc           	      Z   t        ||
      \  }}t        ||
      \  }}i }|D ]j  }||   }||   }| j                  ||||||      }| j                  |||d||      }t        j                  ||gd      }|r| j	                  ||	      }|||<   l t        ||      }t        d|i|      S )N)rK   F   )dimpixel_values)datatensor_type)r   rescale_and_normalizetorchcatr8   r	   r   )r+   r-   r9   rE   rF   rG   rH   rI   rJ   r   rK   rL   r#   grouped_imagesgrouped_images_indexgrouped_trimapsgrouped_trimaps_indexprocessed_images_groupedshapestacked_imagesstacked_trimapsprocessed_imagess                         r   rC   z"VitMatteImageProcessor._preprocessw   s     0EV^n/o,,1Fwaq1r..#% # 	=E+E2N-e4O!77
NL*V_N #88^UJPYO #YY'HaPN!%!N.<$U+	= **BDXY.2B!CQ_``r   )r"   )N) r   r   r   rE   rF   rG   r
   rH   r   rI   rJ   r   r   valid_kwargsr   r*   r   r8   r   r   r   r;   boolr   r   strrD   listfloatr   rC   __classcell__)r,   s   @r   r!   r!   ,   s   JNL'J%IFL/L#(D!E #$ #   
	2 
=
= 
= 56	
=
 

= 
=$ 59;; ; 	;
 ,; c>)*T1; 56; 
;&#a^$#a n%#a 	#a
 #a #a DK'$.#a 4;&-#a t#a Dj#a +#a j(4/#a 
#ar   r!   )r   typingr   rT   torchvision.transforms.v2r   r1   image_processing_backendsr   image_processing_utilsr   image_transformsr   r	   image_utilsr
   r   r   r   r   processing_utilsr   r   utilsr   r   r   r!   __all__r   r   r   <module>rn      si    *   7 ; 2 E  5 /<u  ma/ ma ma` $
$r   