Ë
    P/æjr)  ã                   óP  — d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	 d dl
Z
d dl
mZmZ d dlmZ e j                   G d„ d«      «       Z G d„ d«      Zd	ed
efd„Zded
eeef   fd„Zded
efd„Zded
efd„Zded
efd„Zded
efd„Zded
efd„Zdefd„Zd„ Zdej<                  deedf   deeef   d
eeej>                  ef      fd„Z d„ Z!ded
efd„Z"d
efd„Z#d„ Z$dej<                  fd „Z%dej<                  fd!„Z&dej<                  d
efd"„Z'dej<                  d
e	edf   fd#„Z(y)$é    N)ÚAnyÚCallableÚDictÚIterableÚTupleÚUnion)Ú_CÚ_utils_internal)Ú
OpOverloadc                   ó,   — e Zd ZU dZeed<   eed<   d„ Zy)ÚKernelz$Models a (function, source location)ÚfuncÚsourcec                 ó&   —  | j                   |i |¤ŽS ©N)r   )ÚselfÚargsÚkwargss      úW/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_library/utils.pyÚ__call__zKernel.__call__   s   € Øˆt�y‰y˜$Ð) &Ñ)Ð)ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__Ústrr   © r   r   r   r      s   … á.à
ƒNØƒKó*r   r   c                   ó$   — e Zd ZdZdefd„Zdd„Zy)ÚRegistrationHandlez2Does something when someone calls .destroy() on itÚ
on_destroyc                 ó   — || _         y r   ©Ú_on_destroy)r   r!   s     r   Ú__init__zRegistrationHandle.__init__   s
   € Ø%ˆÕr   Nc                 ó$   — | j                  «        y r   r#   )r   s    r   ÚdestroyzRegistrationHandle.destroy   s   € Ø×ÑÕr   )ÚreturnN)r   r   r   r   r   r%   r'   r   r   r   r    r       s   „ Ù<ð& 8ó &ôr   r    Ú
stacklevelr(   c                 óŒ   — t        j                  t        j                  | «      «      }|j                  › d|j
                  › �}|S )zÃGet a string that represents the caller.

    Example: "/path/to/foo.py:42"

    Use stacklevel=1 to get the caller's source
    Use stacklevel=2 to get the caller's caller's source
    etc.
    ú:)ÚinspectÚgetframeinfoÚsysÚ	_getframeÚfilenameÚlineno)r)   Úframer   s      r   Ú
get_sourcer3   !   s;   € ô × Ñ ¤§¡¨zÓ!:Ó;€EØ—‘Ð˜q §¡ Ð/€FØ€Mr   Úqualnamec                 ór   — | j                  d«      }t        |«      dk7  rt        d| › d�«      ‚|d   |d   fS )Nz::é   zAExpected `qualname` to be of the form "namespace::name", but got zf. The qualname passed to the torch.library APIs must consist of a namespace and a name, e.g. aten::sinr   é   )ÚsplitÚlenÚ
ValueError)r4   Úsplitss     r   Úparse_namespacer<   /   sR   € Ø�^‰^˜DÓ!€FÜ
ˆ6ƒ{�aÒÜð*Ø*2¨ð 48ð9ó
ð 	
ð �!‰9�f˜Q‘iÐÐr   c                 ó¸   — t        | «      \  }}d|v r|j                  d«      \  }}nd}t        t        j                  |«      }t        ||«      }t        ||«      S )Nú.Údefault)r<   r8   ÚgetattrÚtorchÚops)r4   Ú	namespaceÚnameÚoverloadÚnsÚpackets         r   Ú	lookup_oprH   ;   sV   € Ü% hÓ/�O€IˆtØ
ˆd�{ØŸ™ C›‰ˆ‰hàˆÜ	”—‘˜IÓ	&€BÜ�R˜Ó€FÜ�6˜8Ó$Ð$r   Úopc                 óB   — t        | t        «      sJ ‚| j                  dv S )N>   ÚatenÚprimÚprims)Ú
isinstancer   rC   )rI   s    r   Ú
is_builtinrO   F   s"   € Ü�bœ*Ô%Ð%Ð%Ø�<‰<Ð4Ð4Ð4r   Úschemac                 óÚ   — d„ }t        | t        j                  j                  «      r || «      S ddlm} t        | t
        «      r|j                  | «      } t        | |«      sJ ‚ || «      S )zËCheck if the schema is functional.

    An operator is functional if:
    - it does not mutate any of its inputs
    - it does not return a view on any of its inputs
    - it has at least one return
    c                 óš   — | j                   ry| j                  }t        |«      dkD  xr t        d„ |D «       «      }|ry| j                  syy)NFr   c              3   ój   K  — | ]+  }|j                   d uxr |j                   j                   –— Œ- y ­wr   )Ú
alias_infoÚis_write)Ú.0Úrs     r   ú	<genexpr>z>is_functional_schema.<locals>.is_functional.<locals>.<genexpr>X   s3   è ø€ ò 5
ØGHˆA�L‰L Ð$ÒB¨Q¯\©\×-BÑ-BÐ)BÓBñ5
ùs   ‚13T)Ú
is_mutableÚreturnsr9   Úany)rP   ÚretsÚis_non_mutating_views      r   Úis_functionalz+is_functional_schema.<locals>.is_functionalT   sS   € Ø×ÒØØ�~‰~ˆÜ" 4›y¨1™}ò  
´ñ 5
ØLPô5
ó 2
Ðñ  ØØ�~Š~ØØr   r   )ÚFunctionSchema)rN   rA   r	   r_   Útorchgen.modelr   Úparse)rP   r^   r_   s      r   Úis_functional_schemarb   K   sb   € òô �&œ%Ÿ(™(×1Ñ1Ô2Ù˜VÓ$Ð$õ .ä�&œ#ÔØ×%Ñ% fÓ-ˆÜ�f˜nÔ-Ð-Ð-Ù˜Ó Ð r   Útypc           	      óF  — | t        j                  t         j                  j                  «       «      k(  xsì | t        j                  t        j                  t         j                  j                  «       «      «      k(  xs£ | t        j                  t        j                  t         j                  j                  «       «      «      k(  xsZ | t        j                  t        j                  t        j                  t         j                  j                  «       «      «      «      k(  S r   )r	   ÚListTypeÚ
TensorTypeÚgetÚOptionalType©rc   s    r   Úis_tensorlist_like_typerj   n   s·   € àŒr�{‰{œ2Ÿ=™=×,Ñ,Ó.Ó/Ñ/ò 	UØ”"—+‘+œbŸo™o¬b¯m©m×.?Ñ.?Ó.AÓBÓCÑCò	Uà”"—/‘/¤"§+¡+¬b¯m©m×.?Ñ.?Ó.AÓ"BÓCÑCò	Uð ”"—/‘/¤"§+¡+¬b¯o©o¼b¿m¹m×>OÑ>OÓ>QÓ.RÓ"SÓTÑTð	r   c                 ó°   — | t         j                  j                  «       k(  xs4 | t        j                  t         j                  j                  «       «      k(  S r   )r	   rf   rg   rh   ri   s    r   Úis_tensor_like_typerl   x   s:   € Ø”"—-‘-×#Ñ#Ó%Ñ%ÒT¨´·±ÄÇÁ×@QÑ@QÓ@SÓ0TÑ)TÐTr   c                 ó„  — | j                   dk7  ry| j                  }t        |j                  «      dk(  sy|j                  d   j                  €y|j                  d   j                  j
                  }t        |«      dk7  ryt        t        |«      «      }t        |j                  «      dk  ry|j                  d   }|j                  €y|j                  j                  sy|j                  j
                  }t        |«      dk7  ry|t        t        |«      «      k7  ry|j                  dd D ]  }|j                  €Œ y y)aN  Check if an op is an inplace aten op, i.e. it mutates and returns the first arg.

    TODO: torchgen/model.py's FunctionSchema.parse is the source of truth for this,
    but not all PyTorch builds have torchgen (due to the yaml dependency being weird).
    Figure this out.

    Example: add_(Tensor(a!) x, Tensor y) -> Tensor(a)
    rK   Fr7   r   NT)
rC   Ú_schemar9   rZ   rT   Ú	after_setÚnextÚiterÚ	argumentsrU   )rI   rP   Ú	alias_setÚlocÚ	first_argÚargs         r   Úmutates_and_returns_first_argrw   |   s(  € ð 
‡|�|�vÒØØ�Z‰Z€FÜˆv�~‰~Ó !Ò#ØØ‡~�~�aÑ×#Ñ#Ð+ØØ—‘˜qÑ!×,Ñ,×6Ñ6€IÜ
ˆ9ƒ~˜ÒØÜ
Œt�I‹Ó
€CÜ
ˆ6×ÑÓ˜qÒ ØØ× Ñ  Ñ#€IØ×ÑÐ#ØØ×Ñ×(Ò(ØØ×$Ñ$×.Ñ.€IÜ
ˆ9ƒ~˜ÒØØ
Œd”4˜	“?Ó#Ò#ØØ×Ñ  Ð#ò ˆØ�>‰>Ñ%Ùðð r   c                 ó¦  — g }i }t        t        | j                  «      «      D ]   }| j                  |   }|j                  rE|j                  |v r||j                     ||j                  <   ŒI|j
                  ||j                  <   Œc|t        |«      k  r|j                  ||   «       Œ†|j                  |j
                  «       Œ¢ t        |«      |fS r   )Úranger9   rr   Ú
kwarg_onlyrD   Údefault_valueÚappendÚtuple)rP   r   r   Únew_argsÚ
new_kwargsÚiÚinfos          r   Úfill_defaultsr‚   ¢   s·   € Ø€HØ€JÜ”3�v×'Ñ'Ó(Ó)ò 4ˆØ×Ñ Ñ"ˆØ�?Š?Ø�y‰y˜FÑ"Ø(.¨t¯y©yÑ(9�
˜4Ÿ9™9Ò%à(,×(:Ñ(:�
˜4Ÿ9™9Ò%à”3�t“9Š}Ø—‘  Q¡Õ(à—‘ × 2Ñ 2Õ3ð4ô �‹?˜JÐ&Ð&r   r   .r   c              #   óZ  K  — t        | j                  «      t        |«      t        |«      z   k\  sJ ‚t        t        | j                  «      «      D ]W  }| j                  |   }|j                  r"|j                  |v r|||j                     f–— Œ@|t        |«      k\  rŒO|||   f–— ŒY y­w)zÝzips schema.arguments and (args, kwargs) together.

    Assumes that (args, kwargs) were the inputs to some torch._ops.OpOverload:
    that is, kwargs must be keyword-only arguments and default values may be omitted.
    N)r9   rr   ry   rz   rD   )rP   r   r   r€   r�   s        r   Ú
zip_schemar„   ´   sª   è ø€ ô ˆv×ÑÓ ¤C¨£I´°F³Ñ$;Ò;Ð;Ð;Ü”3�v×'Ñ'Ó(Ó)ò ˆØ×Ñ Ñ"ˆØ�?Š?Ø�y‰y˜FÑ"Ø˜F 4§9¡9Ñ-Ð-Ò-ØØ”�D“	Š>ð Ø�D˜‘GˆmÓðð ùs   ‚B)B+c           	      ó\  — ddl m} | j                  }t        |t        j
                  j                  «      st        d«      ‚d„ }g }| j                  D ]×  }t        |t        j                  j                  t        j                  j                  j                  f«      r|j                   ||«      «       Œct        |t        j                  j                  j                  t        t         f«      r&|j                  |D �cg c]
  } ||«      ‘Œ c}«       ŒÂt        dt#        |«      › �«      ‚  t%        j&                  |j(                  «      j*                  |Ž } || «      }|j-                  |j.                  t!        |j0                  j3                  «       «      t        |«      f«      S c c}w )Nr   )ÚFunctionSchemaGenzfx_node's target must be a hop.c                 ó¸   — | j                   j                  dd «      }|€;| j                  dk(  sJ ‚t        | j                  j
                  | j                  «      }|S )NÚvalÚget_attr)Úmetarg   rI   r@   ÚgraphÚowning_moduleÚtarget)ÚnodeÚmeta_vals     r   Ú_collect_example_valz5hop_schema_from_fx_node.<locals>._collect_example_valÓ   sM   € Ø—9‘9—=‘= ¨Ó-ˆØÐØ—7‘7˜jÒ(Ð(Ð(Ü˜tŸz™z×7Ñ7¸¿¹ÓEˆHØˆr   zUnsupported arg type )Útorchgen.gen_schema_utilsr†   r�   rN   rA   Ú_opsÚHigherOrderOperatorÚRuntimeErrorr   ÚfxÚNoderŽ   r|   Úimmutable_collectionsÚimmutable_listÚlistr}   Útyper,   Ú	signaturer   ÚbindÚfrom_exampleÚ_namerr   Úitems)	rŽ   r†   Úhopr�   Úexample_inputsrv   ÚxÚ
bound_argsÚexample_outputs	            r   Úhop_schema_from_fx_noder¥   Ì   sW  € Ý;à
�+‰+€CÜ�cœ5Ÿ:™:×9Ñ9Ô:ÜÐ<Ó=Ð=òð €NØ�y‰yò DˆÜ�cœEŸH™HŸM™M¬5¯8©8¯=©=×+=Ñ+=Ð>Ô?Ø×!Ñ!Ñ"6°sÓ";Õ<ÜØ”%—(‘(×0Ñ0×?Ñ?ÄÄuÐMô
ð ×!Ñ!ÀCÖ"H¸qÑ#7¸Õ#:Ò"HÕIäÐ!6´t¸C³y°kÐBÓCÐCðDð *N¬×):Ñ):¸3¿<¹<Ó)H×)MÑ)MØ	ð*€Jñ *¨$Ó/€NØ×)Ñ)Ø�	‰	”5˜×-Ñ-×3Ñ3Ó5Ó6¼¸nÓ9MÐ8Oóð ùò #Is   Ã>F)
c                 ó¤   — t        | t        «      sJ ‚t        | «      ry| j                  }|j                  syt        |j                  «      dkD  ryy)NFr   T)rN   r   rO   rn   rY   r9   rZ   )rI   rP   s     r   Úcan_generate_trivial_fake_implr§   ò   sJ   € Ü�bœ*Ô%Ð%Ð%Ü�"„~ð Ø�Z‰Z€Fà×ÒØÜ
ˆ6�>‰>Ó˜QÒØàr   c                  ó$   — t        t        dd«      S )zðIf an op was defined in C++ and extended from Python using the
    torch.library APIs, returns if we require that there have been a
    m.set_python_module("mylib.ops") call from C++ that associates
    the C++ op with a python module.
    ÚREQUIRES_SET_PYTHON_MODULET)r@   r
   r   r   r   Úrequires_set_python_modulerª     s   € ô ”?Ð$@À$ÓGÐGr   c                 ó   — t        | t        j                  j                  j                  «      sJ ‚g }t        j                  j
                  j                  ||j                  «       f«      \  }}|D ]ˆ  }t        |t        j                  «      sŒt        j                  j                  |«      j                  t        j                  j                  j                  «      sŒo|j                  t        |«      «       ŒŠ | j!                  ||||«      S r   )rN   rA   ÚutilsÚ_python_dispatchÚTorchDispatchModeÚ_pytreeÚtree_flattenÚvaluesÚTensorr	   Ú_dispatch_keysÚhasÚDispatchKeyÚPythonr|   rš   Ú__torch_dispatch__)Ú	curr_modeÚop_overloadr   r   Úoverload_typesÚargs_flattenedÚ_Úas           r   Úhandle_dispatch_moder¾     sÌ   € Ü�i¤§¡×!=Ñ!=×!OÑ!OÔPÐPÐPØ€NÜŸ™×+Ñ+×8Ñ8¸$ÀÇÁÃÐ9PÓQÑ€N�AØò +ˆô
 �aœŸ™Õ&¬5¯8©8×+BÑ+BÀ1Ó+E×+IÑ+IÜ�H‰H× Ñ ×'Ñ'õ,
ð ×!Ñ!¤$ q£'Õ*ð+ð ×'Ñ'¨°^ÀTÈ6ÓRÐRr   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   )rz   ©rV   r½   s     r   rX   z&has_kwarg_only_args.<locals>.<genexpr>  s   è ø€ Ò6 ˆq�|�|Ñ6ùs   ‚©r[   rr   ©rP   s    r   Úhas_kwarg_only_argsrÄ     s   € ÜÑ6 V×%5Ñ%5Ô6Ó6Ð6r   c                 ó˜   — | j                   D ];  }t        |j                  «      st        |j                  «      sŒ.|j                  sŒ; y y)NTF)rr   rl   rš   rj   rz   )rP   r½   s     r   Úhas_kwarg_only_tensorsrÆ   !  sD   € Ø×Ñò ˆÜ# A§F¡FÔ+Ô/FÀqÇvÁvÔ/NØØ�|Š|ØÙðð r   c                 ó:   — t        d„ | j                  D «       «      S )z”
    Given a schema, returns True if the schema has a Tensor arg.
    A Tensor arg is any arg with a type annotation that might involve Tensor.
    c              3   ót   K  — | ]0  }t        |j                  «      xs t        |j                  «      –— Œ2 y ­wr   )rl   rš   rj   rÁ   s     r   rX   z!has_tensor_arg.<locals>.<genexpr>0  s3   è ø€ ò àô 
˜QŸV™VÓ	$Ò	GÔ(?ÀÇÁÓ(GÓ	Gñùs   ‚68rÂ   rÃ   s    r   Úhas_tensor_argrÉ   +  s$   € ô
 ñ à×!Ñ!ôó ð r   c                 óº   — t        | j                  «      D ]C  \  }}|j                  t        j                  j                  «       u sŒ1|j                  dk(  sŒA|c S  y)zx
    Given a schema, returns the id of the `device: torch.device` argument.
    If it does not exist, returns None.
    ÚdeviceN)Ú	enumeraterr   rš   r	   ÚDeviceObjTyperg   rD   )rP   Úindexrv   s      r   Úget_device_arg_indexrÏ   6  sR   € ô
   × 0Ñ 0Ó1ò ‰
ˆˆsØ�8‰8”r×'Ñ'×+Ñ+Ó-Ò-°#·(±(¸hÓ2FØŠLðð r   ))Údataclassesr,   r.   Útypingr   r   r   r   r   r   rA   r	   r
   Ú
torch._opsr   Ú	dataclassr   r    Úintr   r3   r<   rH   ÚboolrO   rb   rj   rl   rw   r‚   r_   ÚArgumentr„   r¥   r§   rª   r¾   rÄ   rÆ   rÉ   rÏ   r   r   r   ú<module>r×      sÃ  ðã Û Û 
ß >× >ã ß %Ý !ð ×Ñ÷*ð *ó ð*÷ñ ð˜3ð  3ó ð	 ˜cð 	  e¨C°¨H¡oó 	 ð%˜ð % 
ó %ð5�:ð 5 $ó 5ð
! ð !¨ó !ðF ð ¨ó ðU˜Sð U Tó Uð# jó #òL'ð$Ø×ÑðØ%*¨3°¨8¡_ðØ>BÀ3ÈÀ8¹nðàˆe�B—K‘K Ð$Ñ%Ñ&óò0#ðL zð °dó ð H Dó HòSð$7 × 1Ñ 1ó 7ð 2×#4Ñ#4ó ð˜2×,Ñ,ð °ó ð ×!2Ñ!2ð °u¸SÀ$¸YÑ7Gô r   