
    
3j$                        S SK Jr  S SKrSSKJrJr  SSKJr   S SK	Jr
  \R                  " \5      r " S	 S
5      rg! \ a     " S S5      r
 N/f = f)    )annotationsN   )is_transformers_availablelogging   )QuantizationConfigMixinc                      \ rS rSrSrg)TransformersQuantConfigMixin    N)__name__
__module____qualname____firstlineno____static_attributes__r       `/home/wildlama/miniconda3/lib/python3.13/site-packages/diffusers/quantizers/pipe_quant_config.pyr
   r
      s    r   r
   c                  x    \ rS rSrSr    S       SS jjrS rS rS rS r	SS	 jr
SSS
 jjrS rS rSrg)PipelineQuantizationConfig"   a  
Configuration class to be used when applying quantization on-the-fly to [`~DiffusionPipeline.from_pretrained`].

Args:
    quant_backend (`str`): Quantization backend to be used. When using this option, we assume that the backend
        is available to both `diffusers` and `transformers`.
    quant_kwargs (`dict`): Params to initialize the quantization backend class.
    components_to_quantize (`list`): Components of a pipeline to be quantized.
    quant_mapping (`dict`): Mapping defining the quantization specs to be used for the pipeline
        components. When using this argument, users are not expected to provide `quant_backend`, `quant_kawargs`,
        and `components_to_quantize`.
Nc                    Xl         U=(       d    0 U l        U(       a  [        U[        5      (       a  U/nX0l        X@l        0 U l        U R                  5         g N)quant_backendquant_kwargs
isinstancestrcomponents_to_quantizequant_mappingconfig_mapping	post_init)selfr   r   r   r   s        r   __init__#PipelineQuantizationConfig.__init__0   sO     +(.B!0#66*@)A&&<#* r   c                T    U R                   nUb  SOSU l        U R                  5         g )NTF)r   is_granular_validate_init_args)r!   r   s     r   r    $PipelineQuantizationConfig.post_initB   s(    **#0#<4%  "r   c                   U R                   (       a  U R                  (       a  [        S5      eU R                  (       d  U R                   (       d  [        S5      eU R                  (       d  U R                  (       d  [        S5      eU R                   b  U R	                  5         U R                  b  U R                  5         g g )NzNBoth `quant_backend` and `quant_mapping` cannot be specified at the same time.zDMust provide a `quant_backend` when not providing a `quant_mapping`.z7Both `quant_kwargs` and `quant_mapping` cannot be None.)r   r   
ValueErrorr   !_validate_init_kwargs_in_backends_validate_quant_mapping_args)r!   s    r   r&   .PipelineQuantizationConfig._validate_init_argsH   s    $"4"4mnn!!$*<*<cdd  ););VWW)224)--/ *r   c                   U R                   nU R                  U5        U R                  5       u  p#UbF  [        R                  " X!   R
                  5      nUR                   Vs1 s H  oUS:w  d  M
  UiM     nnOS n[        R                  " X1   R
                  5      nUR                   Vs1 s H  oUS:w  d  M
  UiM     nnXF:w  a#  [        SU R                  R                   S35      eg s  snf s  snf )Nr!   zThe signatures of the __init__ methods of the quantization config classes in `diffusers` and `transformers` don't match. Please provide a `quant_mapping` instead, in the z class. Refer to [the docs](https://huggingface.co/docs/diffusers/main/en/quantization/overview#pipeline-level-quantization) to learn more about how this mapping would look like.)
r   _check_backend_availability_get_quant_config_listinspect	signaturer"   
parametersr)   	__class__r   )r!   r   !quant_config_mapping_transformersquant_config_mapping_diffusersinit_kwargs_transformersnameinit_kwargs_diffuserss          r   r*   <PipelineQuantizationConfig._validate_init_kwargs_in_backendsX   s    **((7LPLgLgLiI),8'.'8'89Z9i9r9r's$9Q9\9\'o9\hn`n9\$'o$'+$ ' 1 12P2_2h2h i2G2R2R e2R$^dVd2R e#<DDHNND[D[C\ ]00  = (p
 !fs   #	C)0C)+	C.8C.c           
       ^ U R                   nU R                  5       u  p#U(       a  [        UR                  5       5      OS n[        UR                  5       5      nUR	                  5        Hq  u  nm[        U4S jU 5       5      (       a  M"  U(       a  [        U4S jU 5       5      (       a  ME  U(       a  [        SU SU SU S35      e[        SU SU S35      e   g )Nc              3  <   >#    U  H  n[        TU5      v   M     g 7fr   r   .0cfgconfigs     r   	<genexpr>JPipelineQuantizationConfig._validate_quant_mapping_args.<locals>.<genexpr>w   s     J6Is:fc**6I   c              3  <   >#    U  H  n[        TU5      v   M     g 7fr   r<   r=   s     r   rA   rB   z   s     -hQg#j.E.EQgrC   z Provided config for module_name=z2 could not be found. Available diffusers configs: z"; Available transformers configs: .)r   r/   listvaluesitemsanyr)   )r!   r   transformers_mapdiffusers_mapavailable_transformersavailable_diffusersmodule_namer@   s          @r   r+   7PipelineQuantizationConfig._validate_quant_mapping_argso   s    ***.*E*E*G'DT&6&=&=&?!@Z^"=#7#7#9:#0#6#6#8KJ6IJJJ%#-hQg-h*h*h% 6{m D44G3H I77M6NaQ  !6{m D44G3HK  $9r   c                   U R                  5       u  p#U(       a  [        UR                  5       5      OS n[        UR                  5       5      nU(       a  X;  d  X;  a*  SU S3nU(       a	  USU S3-  nUSU S3-  n[        U5      eg )NzProvided quant_backend=z was not found.z 
Available ones (transformers): rE   z
Available ones (diffusers): )r/   rF   keysr)   )r!   r   r4   r5   available_backends_transformersavailable_backends_diffuserserror_messages          r   r.   6PipelineQuantizationConfig._check_backend_availability   s    LPLgLgLiI) ?`D2779:ei 	( (,,J,O,O,Q'R$ ,0d@5m_OTM.#DEdDeef!gg=>Z=[[\]]M]++ Ar   c                &   U R                  5       u  p4U R                  nU R                  nU R                  (       a@  X%;   a;  [        R                  SU S35        XR   nU R                  R                  X'05        U$ SnU(       a  X&;   a  SnOU R                  (       d	  U(       d  SnU(       ad  [        R                  SU S35        U(       a  UOUn	XR                     n
U R                  nU
" S0 UD6nU R                  R                  X,05        U$ g )Nz+Initializing quantization config class for rE   FTr   )
r/   r   r   r%   loggerdebugr   updater   r   )r!   is_diffusersrN   r4   r5   r   r   r@   should_quantizemapping_to_usequant_config_clsr   	quant_objs                r   _resolve_quant_config0PipelineQuantizationConfig._resolve_quant_config   s	   LPLgLgLiI)**!%!<!<  <LLF{mSTUV"/F&&'<=M $O%+*O"&%%.D"&J;-WXYZCO!?Uv#12D2D#E #00,<|<	##**K+CD   r   c                D    [        5       (       a  SSKJn  OS nSSKJn  X4$ )Nr   ) AUTO_QUANTIZATION_CONFIG_MAPPINGr   )r   transformers.quantizers.autorb   quantizers.auto)r!   r4   r5   s      r   r/   1PipelineQuantizationConfig._get_quant_config_list   s$    $&& 15-h0PPr   c                    Sn[        [        U R                  R                  5       R	                  5       5      5      nUR	                  5        H  u  p4X SU 3-  nM     U$ )N  )dictsortedr   copyrH   )r!   outr   rN   r@   s        r   __repr__#PipelineQuantizationConfig.__repr__   s\    fT%8%8%=%=%?%E%E%GHI#1#7#7#9K]!F8,,C $:
r   )r   r   r%   r   r   r   )NNNN)r   r   r   z#dict[str, str | float | int | dict]r   zlist[str] | str | Noner   z@dict[str, DiffQuantConfigMixin | 'TransformersQuantConfigMixin'])r   r   )TN)rZ   boolrN   r   )r   r   r   r   __doc__r"   r    r&   r*   r+   r.   r_   r/   rm   r   r   r   r   r   r   "   sk     "<@9=Z^ : !7	
 X$#0 .4,"!F
Qr   r   )
__future__r   r0   utilsr   r   quantization_configr   DiffQuantConfigMixin&transformers.utils.quantization_configr
   ImportError
get_loggerr   rW   r   r   r   r   <module>rx      sT    #  6 Pn 
		H	%l l   s   = AA