§
    ù²Åj÷G  ã                   ó6  — d dl mZ d dlmZmZmZmZmZ d dlZd dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZmZ ddlm Z m!Z!m"Z" g d¢Z# G d„ de¦  «        Z$ G d„ de¦  «        Z% G d„ de¦  «        Z&deee$e%f                  dee'         dee         de(de(dede&fd„Z)deddd d!œZ* G d"„ d#e¦  «        Z+ G d$„ d%e¦  «        Z, G d&„ d'e¦  «        Z- G d(„ d)e¦  «        Z. ed*¬+¦  «         ed,d-„ f¬.¦  «        dd/d0d1œdeee+ef                  de(de(dede&f
d2„¦   «         ¦   «         Z/ ed3¬+¦  «         ed,d4„ f¬.¦  «        dd/d0d1œdeee,ef                  de(de(dede&f
d5„¦   «         ¦   «         Z0 ed6¬+¦  «         ed,d7„ f¬.¦  «        dd/d0d1œdeee-ef                  de(de(dede&f
d8„¦   «         ¦   «         Z1 ed9¬+¦  «         ed,d:„ f¬.¦  «        dd/d0d1œdeee.ef                  de(de(dede&f
d;„¦   «         ¦   «         Z2dS )<é    )Úpartial)ÚAnyÚListÚOptionalÚTypeÚUnionN)ÚTensor)Ú
BasicBlockÚ
BottleneckÚResNetÚResNet18_WeightsÚResNet50_WeightsÚResNeXt101_32X8D_WeightsÚResNeXt101_64X4D_Weightsé   )ÚImageClassificationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interfaceé   )Ú_fuse_modulesÚ_replace_reluÚquantize_model)	ÚQuantizableResNetÚResNet18_QuantizedWeightsÚResNet50_QuantizedWeightsÚ!ResNeXt101_32X8D_QuantizedWeightsÚ!ResNeXt101_64X4D_QuantizedWeightsÚresnet18Úresnet50Úresnext101_32x8dÚresnext101_64x4dc                   óZ   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zd
dee         ddfd	„Z	ˆ xZ
S )ÚQuantizableBasicBlockÚargsÚkwargsÚreturnNc                 óŠ   •—  t          ¦   «         j        |i |¤Ž t          j        j                             ¦   «         | _        d S ©N)ÚsuperÚ__init__ÚtorchÚnnÚ	quantizedÚFloatFunctionalÚadd_relu©Úselfr)   r*   Ú	__class__s      €úWC:\Projects\Historical\venv\Lib\site-packages\torchvision/models/quantization/resnet.pyr/   zQuantizableBasicBlock.__init__&   s;   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ÝœÔ*×:Ò:Ñ<Ô<ˆŒˆˆó    Úxc                 óJ  — |}|                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }| j        �|                      |¦  «        }| j                             ||¦  «        }|S r-   )Úconv1Úbn1ÚreluÚconv2Úbn2Ú
downsampler4   ©r6   r:   ÚidentityÚouts       r8   ÚforwardzQuantizableBasicBlock.forward*   s‡   € Øˆà�jŠj˜‰mŒmˆØ�hŠh�s‰mŒmˆØ�iŠi˜‰nŒnˆà�jŠj˜‰oŒoˆØ�hŠh�s‰mŒmˆàŒ?Ð&Ø—’ qÑ)Ô)ˆHàŒm×$Ò$ S¨(Ñ3Ô3ˆàˆ
r9   Úis_qatc                 ó~   — t          | g d¢ddgg|d¬¦  «         | j        rt          | j        ddg|d¬¦  «         d S d S )N©r<   r=   r>   r?   r@   T©ÚinplaceÚ0Ú1©r   rA   ©r6   rF   s     r8   Ú
fuse_modelz QuantizableBasicBlock.fuse_model;   se   € Ý�dÐ5Ð5Ð5¸ÀÐ7GÐHÈ&ÐZ^Ð_Ñ_Ô_Ð_ØŒ?ð 	MÝ˜$œ/¨C°¨:°vÀtÐLÑLÔLÐLÐLÐLð	Mð 	Mr9   r-   ©Ú__name__Ú
__module__Ú__qualname__r   r/   r	   rE   r   ÚboolrO   Ú__classcell__©r7   s   @r8   r(   r(   %   sª   ø€ € € € € ð=˜cð =¨Sð =°Tð =ð =ð =ð =ð =ð =ð˜ð  Fð ð ð ð ð"Mð M ¨$¤ð M¸4ð Mð Mð Mð Mð Mð Mð Mð Mr9   r(   c                   óZ   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zd
dee         ddfd	„Z	ˆ xZ
S )ÚQuantizableBottleneckr)   r*   r+   Nc                 óè   •—  t          ¦   «         j        |i |¤Ž t          j                             ¦   «         | _        t          j        d¬¦  «        | _        t          j        d¬¦  «        | _        d S )NFrI   )	r.   r/   r1   r2   r3   Úskip_add_reluÚReLUÚrelu1Úrelu2r5   s      €r8   r/   zQuantizableBottleneck.__init__B   sa   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ýœ\×9Ò9Ñ;Ô;ˆÔÝ”W UÐ+Ñ+Ô+ˆŒ
Ý”W UÐ+Ñ+Ô+ˆŒ
ˆ
ˆ
r9   r:   c                 óÈ  — |}|                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }| j        �|                      |¦  «        }| j	         
                    ||¦  «        }|S r-   )r<   r=   r\   r?   r@   r]   Úconv3Úbn3rA   rZ   r4   rB   s       r8   rE   zQuantizableBottleneck.forwardH   sµ   € ØˆØ�jŠj˜‰mŒmˆØ�hŠh�s‰mŒmˆØ�jŠj˜‰oŒoˆØ�jŠj˜‰oŒoˆØ�hŠh�s‰mŒmˆØ�jŠj˜‰oŒoˆà�jŠj˜‰oŒoˆØ�hŠh�s‰mŒmˆàŒ?Ð&Ø—’ qÑ)Ô)ˆHØÔ ×)Ò)¨#¨xÑ8Ô8ˆàˆ
r9   rF   c                 ó„   — t          | g d¢g d¢ddgg|d¬¦  «         | j        rt          | j        ddg|d¬¦  «         d S d S )	N)r<   r=   r\   )r?   r@   r]   r_   r`   TrI   rK   rL   rM   rN   s     r8   rO   z QuantizableBottleneck.fuse_modelZ   s{   € ÝØÐ,Ð,Ð,Ð.GÐ.GÐ.GÈ'ÐSXÐIYÐZÐ\bÐlpð	
ñ 	
ô 	
ð 	
ð Œ?ð 	MÝ˜$œ/¨C°¨:°vÀtÐLÑLÔLÐLÐLÐLð	Mð 	Mr9   r-   rP   rV   s   @r8   rX   rX   A   sª   ø€ € € € € ð,˜cð ,¨Sð ,°Tð ,ð ,ð ,ð ,ð ,ð ,ð˜ð  Fð ð ð ð ð$Mð M ¨$¤ð M¸4ð Mð Mð Mð Mð Mð Mð Mð Mr9   rX   c                   óZ   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zd
dee         ddfd	„Z	ˆ xZ
S )r   r)   r*   r+   Nc                 óÚ   •—  t          ¦   «         j        |i |¤Ž t          j        j                             ¦   «         | _        t          j        j                             ¦   «         | _        d S r-   )	r.   r/   r0   ÚaoÚquantizationÚ	QuantStubÚquantÚDeQuantStubÚdequantr5   s      €r8   r/   zQuantizableResNet.__init__c   sS   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)å”XÔ*×4Ò4Ñ6Ô6ˆŒ
Ý”xÔ,×8Ò8Ñ:Ô:ˆŒˆˆr9   r:   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r-   )rg   Ú_forward_implri   )r6   r:   s     r8   rE   zQuantizableResNet.forwardi   s:   € Ø�JŠJ�q‰MŒMˆð ×Ò˜qÑ!Ô!ˆØ�LŠL˜‰OŒOˆØˆr9   rF   c                 óà   — t          | g d¢|d¬¦  «         |                      ¦   «         D ]C}t          |¦  «        t          u st          |¦  «        t          u r|                     |¦  «         ŒDdS )a  Fuse conv/bn/relu modules in resnet models

        Fuse conv+bn+relu/ Conv+relu/conv+Bn modules to prepare for quantization.
        Model is modified in place.  Note that this operation does not change numerics
        and the model after modification is in floating point
        rH   TrI   N)r   ÚmodulesÚtyperX   r(   rO   )r6   rF   Úms      r8   rO   zQuantizableResNet.fuse_modelr   sy   € õ 	�dÐ4Ð4Ð4°fÀdÐKÑKÔKÐKØ—’‘”ð 	%ð 	%ˆAÝ�A‰wŒwÕ/Ð/Ð/µ4¸±7´7Õ>SÐ3SÐ3SØ—’˜VÑ$Ô$Ð$øð	%ð 	%r9   r-   rP   rV   s   @r8   r   r   b   sŸ   ø€ € € € € ð;˜cð ;¨Sð ;°Tð ;ð ;ð ;ð ;ð ;ð ;ð˜ð  Fð ð ð ð ð
%ð 
% ¨$¤ð 
%¸4ð 
%ð 
%ð 
%ð 
%ð 
%ð 
%ð 
%ð 
%r9   r   ÚblockÚlayersÚweightsÚprogressÚquantizer*   r+   c                 óˆ  — |�Nt          |dt          |j        d         ¦  «        ¦  «         d|j        v rt          |d|j        d         ¦  «         |                     dd¦  «        }t	          | |fi |¤Ž}t          |¦  «         |rt          ||¦  «         |�*|                     |                     |d¬¦  «        ¦  «         |S )NÚnum_classesÚ
categoriesÚbackendÚfbgemmT)rs   Ú
check_hash)	r   ÚlenÚmetaÚpopr   r   r   Úload_state_dictÚget_state_dict)rp   rq   rr   rs   rt   r*   rx   Úmodels           r8   Ú_resnetr�      sÔ   € ð ÐÝ˜f mµS¸¼ÀlÔ9SÑ5TÔ5TÑUÔUÐUØ˜œÐ$Ð$Ý! &¨)°W´\À)Ô5LÑMÔMÐMØ�jŠj˜ HÑ-Ô-€Gå˜e VÐ6Ð6¨vÐ6Ð6€EÝ�%ÑÔÐØð 'Ý�u˜gÑ&Ô&Ð&àÐØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐYà€Lr9   )r   r   ry   zdhttps://github.com/pytorch/vision/tree/main/references/classification#post-training-quantized-modelsz’
        These weights were produced by doing Post Training Quantization (eager mode) on top of the unquantized
        weights listed below.
    )Úmin_sizerw   rx   ÚrecipeÚ_docsc                   ól   — e Zd Z ed eed¬¦  «        i e¥dej        ddddœid	d
dœ¥¬¦  «        Z	e	Z
dS )r   zJhttps://download.pytorch.org/models/quantized/resnet18_fbgemm_16fa66dd.pthéà   ©Ú	crop_sizei(^² úImageNet-1KgV-²�_Q@gœÄ °r8V@©zacc@1zacc@5g /Ý$ý?g`åÐ"Ûy&@©Ú
num_paramsÚunquantizedÚ_metricsÚ_opsÚ
_file_size©ÚurlÚ
transformsr|   N)rQ   rR   rS   r   r   r   Ú_COMMON_METAr   ÚIMAGENET1K_V1ÚIMAGENET1K_FBGEMM_V1ÚDEFAULT© r9   r8   r   r   ¤   s‡   € € € € € Ø"˜7ØXØ�7Ð.¸#Ð>Ñ>Ô>ð
Øð
à"Ø+Ô9àØ#Ø#ð ð  ðð Ø ð
ð 
ð 
ðñ ô Ðð" #€G€G€Gr9   r   c                   óÈ   — e Zd Z ed eed¬¦  «        i e¥dej        ddddœid	d
dœ¥¬¦  «        Z	 ed eedd¬¦  «        i e¥dej
        ddddœid	ddœ¥¬¦  «        ZeZdS )r    zJhttps://download.pytorch.org/models/quantized/resnet50_fbgemm_bf931d71.pthr†   r‡   i(ø…r‰   g{®GáúR@gj¼t“4W@rŠ   gB`åÐ"[@gü©ñÒMÂ8@r‹   r‘   zJhttps://download.pytorch.org/models/quantized/resnet50_fbgemm-23753f79.pthéè   ©rˆ   Úresize_sizeg5^ºIT@gX9´Èv¾W@g‡ÙÎ÷ó8@N)rQ   rR   rS   r   r   r   r”   r   r•   r–   ÚIMAGENET1K_V2ÚIMAGENET1K_FBGEMM_V2r—   r˜   r9   r8   r    r    ¹   sý   € € € € € Ø"˜7ØXØ�7Ð.¸#Ð>Ñ>Ô>ð
Øð
à"Ø+Ô9àØ#Ø#ð ð  ðð Ø ð
ð 
ð 
ðñ ô Ðð" #˜7ØXØ�7Ð.¸#È3ÐOÑOÔOð
Øð
à"Ø+Ô9àØ#Ø#ð ð  ðð Ø ð
ð 
ð 
ðñ ô Ðð" #€G€G€Gr9   r    c                   óÈ   — e Zd Z ed eed¬¦  «        i e¥dej        ddddœid	d
dœ¥¬¦  «        Z	 ed eedd¬¦  «        i e¥dej
        ddddœid	ddœ¥¬¦  «        ZeZdS )r!   zQhttps://download.pytorch.org/models/quantized/resnext101_32x8_fbgemm_09835ccf.pthr†   r‡   i(ÙJr‰   gÉv¾Ÿ¿S@g…ëQ¸žW@rŠ   gD‹lçûi0@gV-‚U@r‹   r‘   zQhttps://download.pytorch.org/models/quantized/resnext101_32x8_fbgemm-ee16d00c.pthrš   r›   gÛù~j¼¤T@gœÄ °rX@gáz®G©U@N)rQ   rR   rS   r   r   r   r”   r   r•   r–   r�   rž   r—   r˜   r9   r8   r!   r!   ß   sý   € € € € € Ø"˜7Ø_Ø�7Ð.¸#Ð>Ñ>Ô>ð
Øð
à"Ø3ÔAàØ#Ø#ð ð  ðð Ø ð
ð 
ð 
ðñ ô Ðð" #˜7Ø_Ø�7Ð.¸#È3ÐOÑOÔOð
Øð
à"Ø3ÔAàØ#Ø#ð ð  ðð Ø ð
ð 
ð 
ðñ ô Ðð" #€G€G€Gr9   r!   c                   óp   — e Zd Z ed eedd¬¦  «        i e¥ddej        ddd	d
œidddœ¥¬¦  «        Z	e	Z
dS )r"   zRhttps://download.pytorch.org/models/quantized/resnext101_64x4d_fbgemm-605a1cb3.pthr†   rš   r›   i(mùz+https://github.com/pytorch/vision/pull/5935r‰   g¶óýÔx¹T@g¾Ÿ/ÝX@rŠ   gìQ¸…ë.@gÝ$�•cT@)rŒ   rƒ   r�   rŽ   r�   r�   r‘   N)rQ   rR   rS   r   r   r   r”   r   r•   r–   r—   r˜   r9   r8   r"   r"     sŒ   € € € € € Ø"˜7Ø`Ø�7Ð.¸#È3ÐOÑOÔOð
Øð
à"ØCØ3ÔAàØ#Ø#ð ð  ðð Ø ð
ð 
ð 
ðñ ô Ðð$ #€G€G€Gr9   r"   Úquantized_resnet18)ÚnameÚ
pretrainedc                 ó^   — |                       dd¦  «        rt          j        nt          j        S ©Nrt   F)Úgetr   r–   r   r•   ©r*   s    r8   ú<lambda>r¨     ó,   € Ø�:Š:�j %Ñ(Ô(ð,Õ0ÔEÐEåÔ+ð r9   )rr   TF)rr   rs   rt   c                 óx   — |rt           nt                               | ¦  «        } t          t          g d¢| ||fi |¤ŽS )a£  ResNet-18 model from
    `Deep Residual Learning for Image Recognition <https://arxiv.org/abs/1512.03385>`_

    .. note::
        Note that ``quantize = True`` returns a quantized model with 8 bit
        weights. Quantized models only support inference and run on CPUs.
        GPU inference is not yet supported.

    Args:
        weights (:class:`~torchvision.models.quantization.ResNet18_QuantizedWeights` or :class:`~torchvision.models.ResNet18_Weights`, optional): The
            pretrained weights for the model. See
            :class:`~torchvision.models.quantization.ResNet18_QuantizedWeights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        quantize (bool, optional): If True, return a quantized version of the model. Default is False.
        **kwargs: parameters passed to the ``torchvision.models.quantization.QuantizableResNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/resnet.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.quantization.ResNet18_QuantizedWeights
        :members:

    .. autoclass:: torchvision.models.ResNet18_Weights
        :members:
        :noindex:
    )r   r   r   r   )r   r   Úverifyr�   r(   ©rr   rs   rt   r*   s       r8   r#   r#     óI   € ðZ -5ÐJÕ(Ð(Õ:J×RÒRÐSZÑ[Ô[€GåÕ(¨,¨,¨,¸ÀÈ8Ð^Ð^ÐW]Ð^Ð^Ð^r9   Úquantized_resnet50c                 ó^   — |                       dd¦  «        rt          j        nt          j        S r¥   )r¦   r    r–   r   r•   r§   s    r8   r¨   r¨   Q  r©   r9   c                 óx   — |rt           nt                               | ¦  «        } t          t          g d¢| ||fi |¤ŽS )a£  ResNet-50 model from
    `Deep Residual Learning for Image Recognition <https://arxiv.org/abs/1512.03385>`_

    .. note::
        Note that ``quantize = True`` returns a quantized model with 8 bit
        weights. Quantized models only support inference and run on CPUs.
        GPU inference is not yet supported.

    Args:
        weights (:class:`~torchvision.models.quantization.ResNet50_QuantizedWeights` or :class:`~torchvision.models.ResNet50_Weights`, optional): The
            pretrained weights for the model. See
            :class:`~torchvision.models.quantization.ResNet50_QuantizedWeights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        quantize (bool, optional): If True, return a quantized version of the model. Default is False.
        **kwargs: parameters passed to the ``torchvision.models.quantization.QuantizableResNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/resnet.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.quantization.ResNet50_QuantizedWeights
        :members:

    .. autoclass:: torchvision.models.ResNet50_Weights
        :members:
        :noindex:
    )r   é   é   r   )r    r   r«   r�   rX   r¬   s       r8   r$   r$   M  r­   r9   Úquantized_resnext101_32x8dc                 ó^   — |                       dd¦  «        rt          j        nt          j        S r¥   )r¦   r!   r–   r   r•   r§   s    r8   r¨   r¨   ƒ  ó,   € Ø�:Š:�j %Ñ(Ô(ð4Õ8ÔMÐMå%Ô3ð r9   c                 ó¼   — |rt           nt                               | ¦  «        } t          |dd¦  «         t          |dd¦  «         t	          t
          g d¢| ||fi |¤ŽS )aá  ResNeXt-101 32x8d model from
    `Aggregated Residual Transformation for Deep Neural Networks <https://arxiv.org/abs/1611.05431>`_

    .. note::
        Note that ``quantize = True`` returns a quantized model with 8 bit
        weights. Quantized models only support inference and run on CPUs.
        GPU inference is not yet supported.

    Args:
        weights (:class:`~torchvision.models.quantization.ResNeXt101_32X8D_QuantizedWeights` or :class:`~torchvision.models.ResNeXt101_32X8D_Weights`, optional): The
            pretrained weights for the model. See
            :class:`~torchvision.models.quantization.ResNet101_32X8D_QuantizedWeights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        quantize (bool, optional): If True, return a quantized version of the model. Default is False.
        **kwargs: parameters passed to the ``torchvision.models.quantization.QuantizableResNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/resnet.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.quantization.ResNeXt101_32X8D_QuantizedWeights
        :members:

    .. autoclass:: torchvision.models.ResNeXt101_32X8D_Weights
        :members:
        :noindex:
    Úgroupsé    Úwidth_per_groupé   ©r   r±   é   r   )r!   r   r«   r   r�   rX   r¬   s       r8   r%   r%     ón   € ðZ 5=ÐZÕ0Ð0ÕBZ×bÒbÐcjÑkÔk€Gå˜& (¨BÑ/Ô/Ð/Ý˜&Ð"3°QÑ7Ô7Ð7ÝÕ(¨-¨-¨-¸À(ÈHÐ_Ð_ÐX^Ð_Ð_Ð_r9   Úquantized_resnext101_64x4dc                 ó^   — |                       dd¦  «        rt          j        nt          j        S r¥   )r¦   r"   r–   r   r•   r§   s    r8   r¨   r¨   ·  rµ   r9   c                 ó¼   — |rt           nt                               | ¦  «        } t          |dd¦  «         t          |dd¦  «         t	          t
          g d¢| ||fi |¤ŽS )aá  ResNeXt-101 64x4d model from
    `Aggregated Residual Transformation for Deep Neural Networks <https://arxiv.org/abs/1611.05431>`_

    .. note::
        Note that ``quantize = True`` returns a quantized model with 8 bit
        weights. Quantized models only support inference and run on CPUs.
        GPU inference is not yet supported.

    Args:
        weights (:class:`~torchvision.models.quantization.ResNeXt101_64X4D_QuantizedWeights` or :class:`~torchvision.models.ResNeXt101_64X4D_Weights`, optional): The
            pretrained weights for the model. See
            :class:`~torchvision.models.quantization.ResNet101_64X4D_QuantizedWeights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        quantize (bool, optional): If True, return a quantized version of the model. Default is False.
        **kwargs: parameters passed to the ``torchvision.models.quantization.QuantizableResNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/resnet.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.quantization.ResNeXt101_64X4D_QuantizedWeights
        :members:

    .. autoclass:: torchvision.models.ResNeXt101_64X4D_Weights
        :members:
        :noindex:
    r·   é@   r¹   r±   r»   )r"   r   r«   r   r�   rX   r¬   s       r8   r&   r&   ³  r½   r9   )3Ú	functoolsr   Útypingr   r   r   r   r   r0   Útorch.nnr1   r	   Útorchvision.models.resnetr
   r   r   r   r   r   r   Útransforms._presetsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Úutilsr   r   r   Ú__all__r(   rX   r   ÚintrT   r�   r”   r   r    r!   r"   r#   r$   r%   r&   r˜   r9   r8   ú<module>rÍ      s6  ðØ Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø (Ð (Ð (Ð (Ð (Ð (Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ð
ð 
ð 
€ðMð Mð Mð Mð M˜Jñ Mô Mð Mð8Mð Mð Mð Mð M˜Jñ Mô Mð MðB%ð %ð %ð %ð %˜ñ %ô %ð %ð:Ø�Ð+Ð-BÐBÔCÔDðà�ŒIðð �kÔ"ðð ð	ð
 ðð ðð ðð ð ð ð4 Ø&ØØtðð	ð 	€ð#ð #ð #ð #ð # ñ #ô #ð #ð*##ð ##ð ##ð ##ð ## ñ ##ô ##ð ##ðL##ð ##ð ##ð ##ð ##¨ñ ##ô ##ð ##ðL#ð #ð #ð #ð #¨ñ #ô #ð #ð, €Ð)Ð*Ñ*Ô*ØÐàð	,ð 	,ððñ ô ð MQØØð	&_ð &_ð &_à�eÐ5Ð7GÐGÔHÔIð&_ð ð&_ð ð	&_ð
 ð&_ð ð&_ð &_ð &_ñô ñ +Ô*ð&_ðR €Ð)Ð*Ñ*Ô*ØÐàð	,ð 	,ððñ ô ð MQØØð	&_ð &_ð &_à�eÐ5Ð7GÐGÔHÔIð&_ð ð&_ð ð	&_ð
 ð&_ð ð&_ð &_ð &_ñô ñ +Ô*ð&_ðR €Ð1Ð2Ñ2Ô2ØÐàð	4ð 	4ððñ ô ð ]aØØð	(`ð (`ð (`à�eÐ=Ð?WÐWÔXÔYð(`ð ð(`ð ð	(`ð
 ð(`ð ð(`ð (`ð (`ñô ñ 3Ô2ð(`ðV €Ð1Ð2Ñ2Ô2ØÐàð	4ð 	4ððñ ô ð ]aØØð	(`ð (`ð (`à�eÐ=Ð?WÐWÔXÔYð(`ð ð(`ð ð	(`ð
 ð(`ð ð(`ð (`ð (`ñô ñ 3Ô2ð(`ð (`ð (`r9   