Ë
    –\;j^  ã                   ó„   — d dl Z d dlZd dlmZ d dlmZ ddlmZ  G d„ de j                  ¬«      Z	 G d	„ d
e	«      Z
e
Zd„ Zy)é    N)Úpartial)ÚLayeré   )ÚBaseQuanterc                   ób   — e Zd Zd„ Zed„ «       Zed„ «       Zej                  d„ «       Z	d„ Z
d„ Zy)ÚClassWithArgumentsc                 ó    — || _         || _        y ©N)Ú_argsÚ_kwargs)ÚselfÚargsÚkwargss      údG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/quantization/factory.pyÚ__init__zClassWithArguments.__init__   s   € ØˆŒ
Øˆ�ó    c                 ó   — | j                   S r
   )r   ©r   s    r   r   zClassWithArguments.args   s   € à�z‰zÐr   c                 ó   — | j                   S r
   )r   r   s    r   r   zClassWithArguments.kwargs"   s   € à�|‰|Ðr   c                  ó   — y r
   © r   s    r   Ú
_get_classzClassWithArguments._get_class&   s   € àr   c           
      óô   — dj                  t        | j                  «      | j                  j	                  «       D ��cg c]  \  }}|› d|› �‘Œ c}}z   «      }| j
                  j                  › d|› d�S c c}}w )NÚ,Ú=Ú(Ú))ÚjoinÚlistr   r   ÚitemsÚ	__class__Ú__name__)r   ÚkÚvÚargs_strs       r   Ú__str__zClassWithArguments.__str__*   sr   € Ø—8‘8Ü�—‘‹O°d·k±k×6GÑ6GÔ6IÔJÑ6I©d¨a° !  A a SšzÐ6IÒJÑJó
ˆð —.‘.×)Ñ)Ð*¨!¨H¨:°QÐ7Ð7ùó Ks   ½A4c                 ó"   — | j                  «       S r
   )r&   r   s    r   Ú__repr__zClassWithArguments.__repr__0   s   € Ø�|‰|‹~Ðr   N)r"   Ú
__module__Ú__qualname__r   Úpropertyr   r   ÚabcÚabstractmethodr   r&   r(   r   r   r   r   r      sS   „ òð ñó ðð ñó ðð 	×Ññó ðò8ór   r   )Ú	metaclassc                   ó2   ‡ — e Zd ZdZˆ fd„Zdedefd„Zˆ xZS )ÚQuanterFactoryzr
    The factory holds the quanter's class information and
    the arguments used to create quanter instance.
    c                 ó2   •— t        ‰| �  |i |¤Ž d | _        y r
   )Úsuperr   Úpartial_class)r   r   r   r!   s      €r   r   zQuanterFactory.__init__:   s   ø€ Ü‰Ñ˜$Ð) &Ò)Ø!ˆÕr   ÚlayerÚreturnc                 ó¨   — | j                   €6t        | j                  «       g| j                  ¢­i | j                  ¤Ž| _         | j                  |«      S )zA
        Create an instance of quanter for target layer.
        )r3   r   r   r   r   )r   r4   s     r   Ú	_instancezQuanterFactory._instance>   sR   € ð ×ÑÐ%Ü!(Ø—‘Ó!ð"Ø$(§I¡Iò"Ø15·±ñ"ˆDÔð ×!Ñ! %Ó(Ð(r   )	r"   r)   r*   Ú__doc__r   r   r   r7   Ú__classcell__)r!   s   @r   r0   r0   4   s    ø„ ñô
"ð)˜uð )¨÷ )r   r0   c                 ó   ‡ — ˆ fd„}|S )aì  
    Annotation to declare a factory class for quanter.

    Args:
        class_name (str) - The name of factory class to be declared.

    Examples:
        .. code-block:: python

            >>> # doctest: +SKIP('need 2 file to run example')
            >>> # Given codes in ./customized_quanter.py
            >>> from paddle.quantization import quanter
            >>> from paddle.quantization import BaseQuanter
            >>> @quanter("CustomizedQuanter")
            >>> class CustomizedQuanterLayer(BaseQuanter):
            ...     def __init__(self, arg1, kwarg1=None):
            ...         pass

            >>> # Used in ./test.py
            >>> # from .customized_quanter import CustomizedQuanter
            >>> from paddle.quantization import QuantConfig
            >>> arg1_value = "test"
            >>> kwarg1_value = 20
            >>> quanter = CustomizedQuanter(arg1_value, kwarg1=kwarg1_value)
            >>> q_config = QuantConfig(activation=quanter, weight=quanter)

    c           	      ó¬  •— d| j                   › d| j                  › d| j                  › d| j                  › d�	}t        |«       t        j                  «       d   }t        j
                  |d   «      }t        ‰t        ft        «       d   t        «       d	   d
œ«      }t        |‰|«       d|j                  v r|j                  j                  ‰«       | S )Nzœ
def init_function(self, *args, **kwargs):
    super(type(self), self).__init__(*args, **kwargs)
    import importlib
    module = importlib.import_module("z#")
    my_class = getattr(module, "z")
    globals()["z7"] = my_class
def get_class_function(self):
    return z[
locals()["init_function"]=init_function
locals()["get_class_function"]=get_class_function
r   r   Úinit_functionÚget_class_function)r   r   Ú__all__)r)   r"   ÚexecÚinspectÚstackÚ	getmoduleÚtyper0   ÚlocalsÚsetattrÚ__dict__r>   Úappend)Útarget_classÚinit_function_strÚfrmÚmodÚ	new_classÚ
class_names        €r   Úwrapperzquanter.<locals>.wrapperi   så   ø€ ð!'ð (4×'>Ñ'>Ð&?ð @!Ø!-×!6Ñ!6Ð 7ð 8Ø×%Ñ%Ð&ð 'à×!Ñ!Ð"ð #ðÐô 	ÐÔÜ�m‰m‹o˜aÑ ˆÜ×Ñ  A¡Ó'ˆÜØÜÐä"›H _Ñ5Ü$›hÐ';Ñ<ñó
ˆ	ô 	��Z Ô+Ø˜Ÿ™Ñ$Ø�K‰K×Ñ˜zÔ*àÐr   r   )rM   rN   s   ` r   ÚquanterrO   L   s   ø€ ô:ð< €Nr   )r,   r@   Ú	functoolsr   Ú	paddle.nnr   Úbase_quanterr   ÚABCMetar   r0   ÚObserverFactoryrO   r   r   r   Ú<module>rU      s?   ðó  Û Ý å å %ô 3§;¡;õ ô6)Ð'ô )ð* !€ó;r   