§
    ŠŠtjý  ã                   ó  — U d dl mZ d dlmZ d dlmZ ddlmZ ddlm	Z	 ddl
mZ g d¢Z G d	„ d
¦  «        Z e¦   «         Zeed<    G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zdedededef         dz  fd„ZdS )é    )ÚCallable)ÚAny)Ú
OrderedSeté   )ÚEffectHolder)ÚFakeImplHolder)ÚRegistrationHandle)ÚSimpleLibraryRegistryÚSimpleOperatorEntryÚ	singletonÚSymmMemArgsHolderc                   ó:   — e Zd ZdZd
d„Zdeddfd„Zdeddfd	„ZdS )r
   aJ  Registry for the "simple" torch.library APIs

    The "simple" torch.library APIs are a higher-level API on top of the
    raw PyTorch DispatchKey registration APIs that includes:
    - fake impl

    Registrations for these APIs do not go into the PyTorch dispatcher's
    table because they may not directly involve a DispatchKey. For example,
    the fake impl is a Python function that gets invoked by FakeTensor.
    Instead, we manage them here.

    SimpleLibraryRegistry is a mapping from a fully qualified operator name
    (including the overload) to SimpleOperatorEntry.
    ÚreturnNc                 ó   — i | _         d S ©N©Ú_data©Úselfs    ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_library/simple_registry.pyÚ__init__zSimpleLibraryRegistry.__init__#   s   € Ø57ˆŒ
ˆ
ˆ
ó    Úqualnamer   c                 ór   — | j                              |d ¦  «        }|€t          |¦  «        x| j         |<   }|S r   )r   Úgetr   )r   r   Úress      r   ÚfindzSimpleLibraryRegistry.find&   s:   € ØŒj�nŠn˜X tÑ,Ô,ˆØˆ;Ý)<¸XÑ)FÔ)FÐFˆDŒJ�xÑ  3Øˆ
r   zSimpleOperatorEntry | Nonec                 ó8   — | j                              |d ¦  «        S r   ©r   r   ©r   r   s     r   r   zSimpleLibraryRegistry.get,   s   € ØŒz�~Š~˜h¨Ñ-Ô-Ð-r   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   © r   r   r
   r
      sx   € € € € € ðð ð8ð 8ð 8ð 8ð˜Sð Ð%:ð ð ð ð ð.˜Cð .Ð$@ð .ð .ð .ð .ð .ð .r   r
   r   c                   ó>   — e Zd ZdZdeddfd„Zedefd„¦   «         ZdS )r   z„This is 1:1 to an operator overload.

    The fields of SimpleOperatorEntry are Holders where kernels can be
    registered to.
    r   r   Nc                 ó´   — || _         t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        d S r   )	r   r   Ú	fake_implÚGenericTorchDispatchRuleHolderÚtorch_dispatch_rulesr   Úeffectr   Úsymm_mem_argsr    s     r   r   zSimpleOperatorEntry.__init__:   sR   € Ø%ˆŒÝ)7¸Ñ)AÔ)AˆŒå*¨8Ñ4Ô4ð 	Ô!õ %1°Ñ$:Ô$:ˆŒÝ0AÀ(Ñ0KÔ0KˆÔÐÐr   c                 ó   — | j         S r   )r*   r   s    r   Úabstract_implz!SimpleOperatorEntry.abstract_implE   s
   € àŒ~Ðr   )	r"   r#   r$   r%   r&   r   Úpropertyr   r0   r'   r   r   r   r   3   sm   € € € € € ðð ðL ð L¨ð Lð Lð Lð Lð ð˜~ð ð ð ñ „Xðð ð r   r   c                   óh   — e Zd Zdeddfd„Zdededef         defd„Z	dededef         dz  fd	„Z
dS )
r+   r   r   Nc                 ó"   — i | _         || _        d S r   )r   r   r    s     r   r   z'GenericTorchDispatchRuleHolder.__init__K   s   € Ø57ˆŒ
Ø%ˆŒˆˆr   Útorch_dispatch_classÚfunc.c                 ó¢   ‡ ‡— ‰                       ‰¦  «        rt          ‰› d‰ j        › �¦  «        ‚|‰ j        ‰<   dˆ ˆfd„}t	          |¦  «        S )Nz8 already has a `__torch_dispatch__` rule registered for r   c                  ó   •— ‰ j         ‰= d S r   r   ©r   r4   s   €€r   Ú
deregisterz;GenericTorchDispatchRuleHolder.register.<locals>.deregisterX   s   ø€ Ø”
Ð/Ð0Ð0Ð0r   r!   )r   ÚRuntimeErrorr   r   r	   )r   r4   r5   r9   s   ``  r   Úregisterz'GenericTorchDispatchRuleHolder.registerO   s„   øø€ ð �9Š9Ð)Ñ*Ô*ð 	ÝØ'ÐpÐpÐaeÔanÐpÐpñô ð ð ,0ˆŒ
Ð'Ñ(ð	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1õ " *Ñ-Ô-Ð-r   c                 ó8   — | j                              |d ¦  «        S r   r   r8   s     r   r   z#GenericTorchDispatchRuleHolder.find]   s   € ØŒz�~Š~Ð2°DÑ9Ô9Ð9r   )r"   r#   r$   r&   r   Útyper   r   r	   r;   r   r'   r   r   r+   r+   J   s›   € € € € € ð& ð &¨ð &ð &ð &ð &ð.Ø$(ð.Ø08¸¸c¸Ô0Bð.à	ð.ð .ð .ð .ð:¨ð :°(¸3À¸8Ô2DÀtÑ2Kð :ð :ð :ð :ð :ð :r   r+   c                   óx   — e Zd ZdZdeddfd„Zdee         defd„Zde	e         dz  fd„Z
defd	„Zd
edefd„ZdS )r   z·Tracks which arguments of an operator require symmetric memory allocation.

    Used by Inductor during lowering to automatically realize tensors as
    symmetric memory buffers.
    r   r   Nc                 ó"   — d | _         || _        d S r   )Ú_symm_mem_argsr   r    s     r   r   zSymmMemArgsHolder.__init__h   s   € Ø6:ˆÔØ%ˆŒˆˆr   Ú	arg_namesc                 ó  ‡ — |st          d‰ j        › �¦  «        ‚‰ j        �@dd l}|                     t
          ¦  «        }|                     d‰ j        ‰ j        |¦  «         t          |¦  «        ‰ _        dˆ fd„}t          |¦  «        S )Nz)Cannot register empty arg_names list for r   z>Overwriting symm_mem arg registration for %s. Old: %s, New: %sr   c                  ó   •— d ‰ _         d S r   ©r@   r   s   €r   r9   z.SymmMemArgsHolder.register.<locals>.deregister   s   ø€ Ø"&ˆDÔÐÐr   r!   )	Ú
ValueErrorr   r@   ÚloggingÚ	getLoggerr"   Úwarningr   r	   )r   rA   rF   Úlogr9   s   `    r   r;   zSymmMemArgsHolder.registerl   s¸   ø€ Øð 	ÝØK¸D¼MÐKÐKñô ð ð ÔÐ*ØˆNˆNˆNà×#Ò#¥HÑ-Ô-ˆCØ�KŠKØPØ”ØÔ#Øñ	ô ð õ )¨Ñ3Ô3ˆÔð	'ð 	'ð 	'ð 	'ð 	'ð 	'õ " *Ñ-Ô-Ð-r   c                 ó   — | j         S r   rD   r   s    r   r   zSymmMemArgsHolder.get„   s   € ØÔ"Ð"r   c                 ó   — | j         d uS r   rD   r   s    r   Úis_registeredzSymmMemArgsHolder.is_registered‡   s   € ØÔ"¨$Ð.Ð.r   Úarg_namec                 ó&   — | j         d uo|| j         v S r   rD   )r   rM   s     r   Úis_symm_mem_argz!SymmMemArgsHolder.is_symm_mem_argŠ   s   € ØÔ"¨$Ð.ÐR°8¸tÔ?RÐ3RÐRr   )r"   r#   r$   r%   r&   r   Úlistr	   r;   r   r   ÚboolrL   rO   r'   r   r   r   r   a   sÐ   € € € € € ðð ð& ð &¨ð &ð &ð &ð &ð. $ s¤)ð .Ð0Bð .ð .ð .ð .ð0#�Z ”_ tÑ+ð #ð #ð #ð #ð/˜tð /ð /ð /ð /ðS¨ð S°ð Sð Sð Sð Sð Sð Sr   r   Úopr4   r   .Nc                 óp   — t                                | j        ¦  «        j                             |¦  «        S r   )r   r   r$   r,   )rR   r4   s     r   Úfind_torch_dispatch_rulerT   Ž   s0   € õ �>Š>˜"œ/Ñ*Ô*Ô?×DÒDØñô ð r   )Úcollections.abcr   Útypingr   Útorch.utils._ordered_setr   Úeffectsr   r*   r   Úutilsr	   Ú__all__r
   r   Ú__annotations__r   r+   r   r=   rT   r'   r   r   ú<module>r\      sŽ  ðØ $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à /Ð /Ð /Ð /Ð /Ð /à !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %Ø %Ð %Ð %Ð %Ð %Ð %ðð ð €ð.ð .ð .ð .ð .ñ .ô .ð .ð: $9Ð#8Ñ#:Ô#:€	Ð Ð :Ð :Ñ :ðð ð ð ð ñ ô ð ð.:ð :ð :ð :ð :ñ :ô :ð :ð.*Sð *Sð *Sð *Sð *Sñ *Sô *Sð *SðZØðØ#'ðàˆc�3ˆhÔ˜$Ñðð ð ð ð ð r   