ó
    oM‡jÏ$  ã                  ó¦   • 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   ó    Ú´C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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!   zªThe 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ý   € Ø×*Ñ*ˆà×(Ñ(¨Ô7àLP×LgÑLgÓLiÑIÐ)à,Ñ8Ü'.×'8Ò'8Ð9ZÑ9i×9rÑ9rÓ'sÐ$Ø9Q×9\Ò9\Ó'oÒ9\°ÐhnÑ`n¯Ñ9\Ð$Ð'oÐ$à'+Ð$ä '× 1Ò 1Ð2PÑ2_×2hÑ2hÓ iÐØ2G×2RÒ2RÓ eÒ2R¨$Ð^dÑVd§Ñ2RÐÐ eà#Ó<ÜðDØDHÇNÁN×D[Ñ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   øé € ÐJÒ6I¨s”:˜f c×*Ð*Ò6Iùó   ƒc              3  ó<   >#   • U  H  n[        TU5      v •  M     g 7fr   r<   r=   s     €r   rA   rB   z   s   øé € Ð-hÒQgÈ#¬j¸À×.EÐ.EÒQgùrC   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˜ÜÔJÑ6IÓJ×JÑJÙæ%¬#Ô-hÑQgÓ-h×*hÑ*hÙæ%Ü Ø6°{°mð D4Ø4GÐ3Hð I7Ø7MÐ6NÈaðQóð ô !Ø6°{°mð D4Ø4GÐ3HÈð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ª   € ØLP×LgÑLgÓLiÑIÐ)ö ?`ŒDÐ2×7Ñ7Ó9Ô:Ðeið 	(ô (,Ð,J×,OÑ,OÓ,QÓ'RÐ$ö ,°Ó0dØÓ@Ø5°m°_ÀOÐTˆMÞ.ØÐ#DÐEdÐDeÐefÐ!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	X�R                     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_configÚ0PipelineQuantizationConfig._resolve_quant_configš   s	  € ØLP×LgÑLgÓLiÑIÐ)à×*Ñ*ˆØ!%×!<Ñ!<Ðð ×× Ó <Ü�L‰LÐFÀ{ÀmÐSTÐUÔVØ"Ñ/ˆFØ×Ñ×&Ñ&¨Ð'<Ô=ØˆMð $ˆOæ%¨+Ó*OØ"&‘à×%×%Ö.DØ"&�æÜ—‘ÐJÈ;È-ÐWXÐYÔZÞCOÑ!?ÐUv�Ø#1×2DÑ2DÑ#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\   € ØˆÜœf T×%8Ñ%8×%=Ñ%=Ó%?×%EÑ%EÓ%GÓHÓIˆØ#1×#7Ñ#7Ö#9ÑˆKØ�] ! F 8Ð,Ñ,Š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