Ë
    ÄÓ^jý  ã                   óâ   — 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y)é    )ÚCallable)ÚAny)Ú
OrderedSeté   )ÚEffectHolder)ÚFakeImplHolder)ÚRegistrationHandle)ÚSimpleLibraryRegistryÚSimpleOperatorEntryÚ	singletonÚSymmMemArgsHolderc                   ó8   — e Zd ZdZd
d„Zdeddfd„Zdeddfd	„Zy)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 | _         y ©N©Ú_data©Úselfs    úi/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_library/simple_registry.pyÚ__init__zSimpleLibraryRegistry.__init__#   s	   € Ø57ˆ�
ó    Úqualnamer   c                 óv   — | j                   j                  |d «      }|€t        |«      x| j                   |<   }|S r   )r   Úgetr   )r   r   Úress      r   ÚfindzSimpleLibraryRegistry.find&   s8   € Ø�j‰j�n‰n˜X tÓ,ˆØˆ;Ü)<¸XÓ)FÐFˆD�J‰J�xÑ  3Øˆ
r   zSimpleOperatorEntry | Nonec                 ó:   — | j                   j                  |d «      S r   ©r   r   ©r   r   s     r   r   zSimpleLibraryRegistry.get,   s   € Ø�z‰z�~‰~˜h¨Ó-Ð-r   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   © r   r   r
   r
      s4   „ ñó8ð˜Sð Ð%:ó ð.˜Cð .Ð$@ô .r   r
   r   c                   ó6   — e Zd ZdZdeddfd„Zedefd„«       Zy)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        |«      | _        y r   )	r   r   Ú	fake_implÚGenericTorchDispatchRuleHolderÚtorch_dispatch_rulesr   Úeffectr   Úsymm_mem_argsr    s     r   r   zSimpleOperatorEntry.__init__:   s@   € Ø%ˆŒÜ)7¸Ó)AˆŒä*¨8Ó4ð 	Ô!ô %1°Ó$:ˆŒÜ0AÀ(Ó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   s8   „ ñðL ð L¨ó Lð ð˜~ò ó ñr   r   c                   óZ   — 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
y)
r+   r   r   Nc                 ó    — i | _         || _        y r   )r   r   r    s     r   r   z'GenericTorchDispatchRuleHolder.__init__K   s   € Ø57ˆŒ
Ø%ˆ�r   Útorch_dispatch_classÚfunc.c                 óž   ‡ ‡— ‰ j                  ‰«      rt        ‰› d‰ j                  › �«      ‚|‰ j                  ‰<   dˆ ˆfd„}t	        |«      S )Nz8 already has a `__torch_dispatch__` rule registered for c                  ó    •— ‰ j                   ‰= y r   r   ©r   r4   s   €€r   Ú
deregisterz;GenericTorchDispatchRuleHolder.register.<locals>.deregisterX   s   ø€ Ø—
‘
Ð/Ñ0r   r!   )r   ÚRuntimeErrorr   r   r	   )r   r4   r5   r9   s   ``  r   Úregisterz'GenericTorchDispatchRuleHolder.registerO   sZ   ù€ ð �9‰9Ð)Ô*ÜØ'Ð(Ð(`Ðae×anÑanÐ`oÐpóð ð ,0ˆ�
‰
Ð'Ñ(ö	1ô " *Ó-Ð-r   c                 ó:   — | j                   j                  |d «      S r   r   r8   s     r   r   z#GenericTorchDispatchRuleHolder.find]   s   € Ø�z‰z�~‰~Ð2°DÓ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                   ój   — 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y)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 | _         || _        y r   )Ú_symm_mem_argsr   r    s     r   r   zSymmMemArgsHolder.__init__h   s   € Ø6:ˆÔØ%ˆ�r   Ú	arg_namesc                 ó  ‡ — |st        d‰ j                  › �«      ‚‰ j                  �Add l}|j	                  t
        «      }|j                  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: %sc                  ó   •— d ‰ _         y 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…   ø€ ÙÜØ;¸D¿M¹M¸?ÐKóð ð ×ÑÐ*Ûà×#Ñ#¤HÓ-ˆCØ�K‰KØPØ—‘Ø×#Ñ#Øô	ô )¨Ó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xr || j                   v S r   rD   )r   rM   s     r   Úis_symm_mem_argz!SymmMemArgsHolder.is_symm_mem_argŠ   s#   € Ø×"Ñ"¨$Ð.ÒR°8¸t×?RÑ?RÐ3RÐRr   )r"   r#   r$   r%   r&   r   Úlistr	   r;   r   r   ÚboolrL   rO   r'   r   r   r   r   a   si   „ ñð& ð &¨ó &ð. $ s¡)ð .Ð0Bó .ð0#�Z ‘_ tÑ+ó #ð/˜tó /ðS¨ð S°ô Sr   r   Úopr4   r   .Nc                 ór   — t         j                  | j                  «      j                  j                  |«      S r   )r   r   r$   r,   )rR   r4   s     r   Úfind_torch_dispatch_rulerT   Ž   s-   € ô �>‰>˜"Ÿ/™/Ó*×?Ñ?×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Ó#:€	Ð Ó :÷ñ ÷.:ñ :÷.*Sñ *SðZØðØ#'ðàˆc�3ˆhÑ˜$Ñôr   