Ë
    g^(há6  ã                   óœ  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlZd dlZd dlmZ d dlmZ d dlmc mZ d dlmZ d dl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#m$Z$  ejJ                  e&«      Z'd„ Z(ed„ «       Z)edejT                  de
fd„«       Z+d d„Z,d„ Z-edejT                  de
fd„«       Z. G d„ dej^                  «      Z0edejT                  de
fd„«       Z1ed„ «       Z2d„ Z3ejh                  jj                  Z5e5jl                  e5jn                  e5jp                  e5jr                  e5jt                  e5jv                  e5jx                  e5jz                  e5j|                  e5j~                  e5j€                  e5j‚                  e5j„                  e5j†                  jˆ                  e5j†                  jŠ                  e5jŒ                  e5jŽ                  e5j�                  e5j’                  e5j”                  e5j–                  e5j˜                  hZM eeM«      ZMed„ «       ZNdee
ejž                  f   fd„ZPd„ ZQd aRd„ ZSd„ ZTd!d„ZUy)"é    N)Úcontextmanager)Úpartial)ÚCallableÚUnion)ÚSymInt)Úget_decompositions)Úbind_symbolsé   )Úaot_functionÚ
aot_moduleÚmake_boxed_compiler)Ústrip_overloads)Údefault_partitionÚ
draw_graphÚ#min_cut_rematerialization_partitionc                 ó   — | j                   j                  dt        j                  j                  j
                  ¬«      D ]+  }t        j                  j                  j                  |_        Œ- | j                  «        | S )NÚcall_function©ÚopÚtarget)	ÚgraphÚ
find_nodesÚtorchÚopsÚatenÚ_to_copyÚtor   Ú	recompile)Úfx_gÚnodes     úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_functorch/compilers.pyÚ_canonicalizer"   $   s`   € Ø—
‘
×%Ñ%Ø¤5§9¡9§>¡>×#:Ñ#:ð &ó ò (ˆô —i‘i—n‘n×'Ñ'ˆ�ð(ð 	‡N�NÔØ€Kó    c               #   óÚ   K  — t         j                  j                  d«      } 	 d –— t         j                  j                  | «       y # t         j                  j                  | «       w xY w­w)NF)r   Ú_CÚ_jit_set_autocast_mode)Úold_jit_autocast_flags    r!   Ú_disable_jit_autocastr(   -   sI   è ø€ ä!ŸH™H×;Ñ;¸EÓBÐð?Ûä�‰×'Ñ'Ð(=Õ>øŒ�‰×'Ñ'Ð(=Õ>üs   ‚ A+£A § A+Á!A(Á(A+r   Úreturnc                 óD  — t        «       5  t        | «       | j                  j                  dt        j
                  j                  j                  ¬«      D ]l  }t        |j                  «      dk(  sŒt        |j                  «      dk(  sŒ5d|j                  v sŒDt        j
                  j                  j                  |_        Œn | j                  j                  D ]X  }i }|j                  j                  «       D ]0  \  }}t        |t        j                   «      r|j"                  }|||<   Œ2 ||_
        ŒZ | j                  j%                  «        | j'                  «        t        j(                  j+                  | «      }t        j,                  j/                  |j                  «       t        j(                  j1                  |j3                  «       «      }t        j(                  j5                  |«      }t7        d„ |D «       «      s ||Ž  ddd«       |S # 1 sw Y   S xY w)a  
    Compiles the :attr:`fx_g` with Torchscript compiler.

    .. warning::
        This API is experimental and likely to change.

    Args:
        fx_g(fx.GraphModule): The input Fx graph module to be compiled.

    Returns:
        Torch scripted model.
    r   r   r
   Údtypec              3   ód   K  — | ](  }t        |t        j                  j                  «      –— Œ* y ­w©N)Ú
isinstancer   Ú_subclassesÚ
FakeTensor)Ú.0Úts     r!   ú	<genexpr>zts_compile.<locals>.<genexpr>`   s#   è ø€ ÒMÀ1”:˜a¤×!2Ñ!2×!=Ñ!=×>ÑMùs   ‚.0N)r(   r   r   r   r   r   r   r   ÚlenÚargsÚkwargsr   r   ÚnodesÚitemsr.   ÚdeviceÚtypeÚlintr   ÚjitÚscriptr%   Ú_jit_pass_remove_mutationÚfreezeÚevalÚoptimize_for_inferenceÚany)r   Úinpsr    Ú
new_kwargsÚkÚvÚfs          r!   Ú
ts_compilerH   6   s˜  € ô 
Ó	 ñ Ü˜Ôà—J‘J×)Ñ)Ø¤u§y¡y§~¡~×'>Ñ'>ð *ó 
ò 	0ˆDô �4—9‘9‹~ Ó"¤s¨4¯;©;Ó'7¸1Ó'<ÀÈDÏKÉKÒAWÜ#Ÿi™iŸn™n×/Ñ/�•ð		0ð —J‘J×$Ñ$ò 	%ˆDØˆJØŸ™×)Ñ)Ó+ò "‘��1Ü˜a¤§¡Ô.ØŸ™�AØ !�
˜1’ð"ð %ˆD�Kð	%ð 	�
‰
�‰Ôà�‰Ôä�I‰I×Ñ˜TÓ"ˆä�‰×*Ñ*¨1¯7©7Ô3ä�I‰I×Ñ˜QŸV™V›XÓ&ˆÜ�I‰I×,Ñ,¨QÓ/ˆÜÑMÈÔMÔMÙˆt‰H÷9ð: €H÷;ð: €Hús   ‹A&HÁ2HÂHÂE1HÈHc                 óL   — t        | j                  «       t        | ||¬«       | S )N)Ú
clear_meta)ÚprintÚcoder   )r   Ú_ÚnamerJ   s       r!   Ú_draw_graph_compilerO   e   s   € Ü	ˆ$�)‰)ÔÜˆt�T jÕ1Ø€Kr#   c                 ó6   — t        t        t        | ¬«      «      S )N©rN   )r   r   rO   rQ   s    r!   Údraw_graph_compilerR   k   s   € ÜœwÔ':ÀÔFÓGÐGr#   c                 ó   — | S )zÆ
    Returns the :attr:`fx_g` Fx graph module as it is. This is a no-op compiler
    and can be used to check accuracy.

    .. warning::
        This API is experimental and likely to change.

    © ©r   rM   s     r!   ÚnoprV   o   s	   € ð €Kr#   c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ÚDebugInterpreterc                 óT   •— t        | j                  g|¢­Ž | _        t        ‰| �  |Ž  y r-   )r	   ÚmoduleÚsymbol_mappingÚsuperÚrun)Úselfr5   Ú	__class__s     €r!   r]   zDebugInterpreter.run}   s%   ø€ Ü*¨4¯;©;Ð>¸Ò>ˆÔÜ‰‰�TÒr#   c                 óü  •‡ ‡
‡‡‡— ˆ fd„Šˆfd„Šˆfd„Š
ˆ
ˆfd„}t         ‰‰ �  |«      }d|j                  v rÃt        j                  |j                  d   «      \  }}t        j                  |«      \  }}t        |«      t        |«      k(  sJ t        |«      › dt        |«      › �«       ‚t        t        t        |«      «      ||«      D ]/  \  Š}}	t        |	t        j                  «      sŒ" |||	ˆˆ fd„«       Œ1 |S )Nc                 óè   •— t        | t        «      s| S t        j                  | j                  j
                  j                  ‰j                  «      «      }|j                  sJ |«       ‚t        |«      S r-   )
r.   r   ÚsympyÚexpandr    ÚexprÚxreplacer[   Ú	is_numberÚint)ÚniÚrr^   s     €r!   Úsubst_symintz/DebugInterpreter.run_node.<locals>.subst_symint‚   sS   ø€ Ü˜b¤&Ô)Ø�	Ü—‘˜RŸW™WŸ\™\×2Ñ2°4×3FÑ3FÓGÓHˆAØ—;’;Ð! Ó!�;Ü�q“6ˆMr#   c                 ó,   •— t        ˆfd„| D «       «      S )Nc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr-   rT   )r1   rh   rj   s     €r!   r3   zHDebugInterpreter.run_node.<locals>.subst_symint_tuple.<locals>.<genexpr>Š   s   øè ø€ Ò8¨b™ b×)Ñ8ùs   ƒ)Útuple)Únisrj   s    €r!   Úsubst_symint_tuplez5DebugInterpreter.run_node.<locals>.subst_symint_tuple‰   s   ø€ ÜÓ8°CÔ8Ó8Ð8r#   c                 óø   •—  ‰| j                  «       «      dkD  r`t        | j                  «      D ]H  } ‰| j                  |«      «      |j                  |«      k7  sŒ- ‰| j	                  |«      «      dkD  sŒH y y)Nr   r
   FT)ÚnumelÚrangeÚndimÚstrideÚsize)ÚaÚbÚidxrj   s      €r!   Úcheck_significant_stridesz<DebugInterpreter.run_node.<locals>.check_significant_stridesŒ   sg   ø€ Ù˜AŸG™G›IÓ&¨Ò*Ü  §¡›=ò %�Cá$ Q§X¡X¨c£]Ó3°q·x±xÀ³}ÓDÙ(¨¯©°«Ó5¸Ó9á$ð%ð r#   c           	      ó"  •— t        |«      sJ ‚| j                  |j                  k(  s(J  |«       › d| j                  › d|j                  › �«       ‚ ‰| j                  «       «      |j                  «       k(  sGJ  |«       › d| j                  «       › d ‰| j                  «       «      › d|j                  «       › �«       ‚ ‰| |«      }|sGJ  |«       › d| j                  «       › d ‰| j                  «       «      › d|j                  «       › �«       ‚y )Nz: ú != z aka )Úcallabler+   ru   rt   )ÚnvÚrvÚdescÚsame_stridesry   ro   s       €€r!   Úcheckz(DebugInterpreter.run_node.<locals>.check–   sú   ø€ Ü˜D”>Ð!�>Ø—8‘8˜rŸx™xÒ'ÐN©D«F¨8°2°b·h±h°Z¸tÀBÇHÁHÀ:Ð)NÓNÐ'á" 2§7¡7£9Ó-°·±³Ò:ð[á“&�˜˜BŸG™G›I˜; eÑ,>¸r¿w¹w»yÓ,IÐ+JÈ$ÈrÏwÉwËyÈkÐZó[Ø:á4°R¸Ó<ˆLáðaá“&�˜˜BŸI™I›K˜=¨Ñ.@ÀÇÁÃÓ.MÐ-NÈdÐSU×S\ÑS\ÓS^ÐR_Ð`óaÙr#   Úvalr{   c                  ó(   •— d‰ › d‰j                   › �S )Nzoutput z where )r[   )Úir^   s   €€r!   ú<lambda>z+DebugInterpreter.run_node.<locals>.<lambda>¯   s   ø€ ¨°¨s°'¸$×:MÑ:MÐ9NÐ&O€ r#   )r\   Úrun_nodeÚmetaÚpytreeÚtree_flattenr4   Úziprr   r.   r   ÚTensor)r^   Únr�   ri   Ún_valsÚ_n_specÚr_valsÚ_r_specr}   r~   ry   r„   rj   ro   r_   s   `         @@@@€r!   r†   zDebugInterpreter.run_node�   sâ   ý€ ô	ô	9ô	õ		aô ‰GÑ˜QÓˆØ�A—F‘F‰?Ü$×1Ñ1°!·&±&¸±-Ó@‰OˆF�GÜ$×1Ñ1°!Ó4‰OˆF�Gô �v“;¤# f£+Ò-ÐP´#°f³+°¸dÄ3ÀvÃ;À-Ð/PÓPÐ-Ü ¤¤s¨6£{Ó!3°V¸VÓDò Q‘	��2�rÜ! "¤e§l¡lÔ3ØÙ�b˜"ÔOÕPðQð ˆr#   )Ú__name__Ú
__module__Ú__qualname__r]   r†   Ú__classcell__)r_   s   @r!   rX   rX   |   s   ø„ ô÷/ð /r#   rX   c                 ó,   — t        | «      j                  S )z¨
    Returns a (slow) interpreter over the FX graph module that also checks
    various debugging properties (e.g., that tracing strides matched real
    strides.)
    )rX   r]   rU   s     r!   Ú	debug_nopr–   ³   s   € ô ˜DÓ!×%Ñ%Ð%r#   c                 ó´   — t        | «       t        j                  j                  | «      }t        j                  j	                  |j                  «       «      }|S r-   )r   r   r<   r=   r?   r@   )r   rM   rG   s      r!   Úsimple_ts_compiler˜   ½   s=   € ä�DÔÜ�	‰	×Ñ˜Ó€AÜ�	‰	×Ñ˜Ÿ™›Ó"€AØ€Hr#   c                 ó"   — t        | t        «      S r-   )r   r˜   )rG   s    r!   Únnc_jitrš   Å   s   € Ü˜Ô,Ó-Ð-r#   c                 ó0   — t        | j                  «       | S r-   )rK   rL   rU   s     r!   Úprint_compilerœ   æ   s   € ä	ˆ$�)‰)ÔØ€Kr#   Úfnc                 óÊ   — t         t         t        t        dœ}|j                  |«       t	        | t
        j                  j                  «      rt        | fi |¤ŽS t        | fi |¤ŽS )a  
    Wrapper function over :func:`aot_function` and :func:`aot_module` to perform
    memory efficient fusion. It uses the
    :func:`min_cut_rematerialization_partition` partitioner to perform efficient
    recomputation. It uses NVFuser to compile the generated forward and backward
    graphs.

    .. warning::
        This API is experimental and likely to change.

    Args:
        fn (Union[Callable, nn.Module]): A Python function or a ``nn.Module``
            that takes one ore more arguments. Must return one or more Tensors.
        **kwargs: Any other overrides you want to make to the settings

    Returns:
        Returns a ``Callable``  or ``nn.Module`` that retains the eager behavior
        of the original :attr:`fn`, but whose forward and backward graphs have
        gone through recomputation optimizations, and the graphs have been
        compiled with nvfuser.

    ©Úfw_compilerÚbw_compilerÚpartition_fnÚdecompositions)
rH   r   Údefault_decompositionsÚupdater.   r   ÚnnÚModuler   r   )r�   r6   Úconfigs      r!   Úmemory_efficient_fusionr©   ì   sW   € ô6 "Ü!Ü;Ü0ñ	€Fð ‡M�M�&ÔÜ�"”e—h‘h—o‘oÔ&Ü˜"Ñ' Ñ'Ð'ä˜BÑ) &Ñ)Ð)r#   c                 óè   — | j                  d«       t        d|D �cg c]  }|j                  |j                  f‘Œ c}› d�«       ddlm}   |«       j                  «       |Ž  t        | |«      S c c}w )NÚfooaQ  
##############################################################
# To minimize FX graph, copy and paste the below and run it  #
##############################################################

import torch
import torch.fx as fx
from functorch.compile import minifier, check_nvfuser_subprocess, check_nvfuser_correctness_subprocess

inps = a?  
inps = [torch.ones(shape, dtype=dtype, device='cuda') for (shape, dtype) in inps]
from foo import FxModule
mod = FxModule().cuda()

with torch.jit.fuser("fuser2"):
  # check_nvfuser_subprocess can be replaced with check_nvfuser_correctness_subprocess
  minifier(fx.symbolic_trace(mod), inps, check_nvfuser_subprocess)
r   )ÚFxModule)Ú	to_folderrK   Úshaper+   r«   r¬   ÚcudarH   )r   rC   r„   r¬   s       r!   Údebug_compiler°     so   € Ø‡N�N�5ÔÜ	ð	ð &*Ö* ˆ!�'‰'�1—7‘7Ò	Ò*Ð+ð ,ð	ôõ( à�HƒJ‡O�OÓ�tÑä�d˜DÓ!Ð!ùò 	+s   œA/
c                 óJ  — g }t        | d«      5 }t        j                  |«      }g }|D ]á  }t        |«      dk(  r|} |t	        j
                  «       «      }n£|\  }}}}	}
|	t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        t        hv rt        j                  dd||	|
¬«      }nt        j
                  ||	|
¬«      }|j                  |«       Œã 	 ddd«       |S # 1 sw Y   |S xY w)zZ
    Return a random input for the given inputs meta generated from _save_fx_default.
    Úrbr
   r   )r+   r9   N)ÚopenÚpickleÚloadr4   ÚrandomÚrandr   rg   Úint32Úint64ÚboolÚuint8ÚfloatÚrandintÚappend)Úinput_data_pathÚinputsrG   Úinputs_metar‡   r:   Úinputr®   Ú_strider+   r9   s              r!   Ú
get_inputsrÄ   3  s÷   € ð €FÜ	ˆo˜tÓ	$ð !¨Ü—k‘k !“nˆØˆØò 	!ˆDÜ�4‹y˜AŠ~Ø�ÙœVŸ[™[›]Ó+‘à6:Ñ3��e˜W e¨VØÜ—I‘IÜ—K‘KÜ—K‘KÜ—J‘JÜ—I‘IÜ—K‘KÜÜð	ñ 	ô "ŸM™M¨!¨Q°¸UÈ6ÔR‘Eä!ŸJ™J u°EÀ&ÔI�EØ�M‰M˜%Õ ñ'	!÷!ð. €M÷/!ð. €Mús   �C>DÄD"c                 ót   ‡ ‡‡‡	‡
— ddl m} ˆ	fd„Š	ˆ ˆˆˆ	fd„Š
ˆ
fd„}ˆ
fd„}ˆ
fd„} ||||||t        ¬«      S )	aO  
    The forward, backward, and joint computation graph will be stored in
    {folder_name}/{current_name}/{current_name}_forward_{graph_index},
    {folder_name}/{current_name}/{current_name}_backward_{graph_index}, and
    {folder_name}/{current_name}/{current_name}_joint_{graph_index} respectively.
    The input shape of the graphs will be stored in the .input files.
    These files can be loaded with pickle,
    and is a list of format (type, shape, stride, dtype, device).
    In the case of type = int or float, it is just (type,).
    For joint graph input, it is a nested list [[],[]]
    where the two inner lists have the same format.
    If dump_example_input is True, example_inputs will be stored in .pt file.
    Since each function might produce multiple graphs,
    the graph_index is used to distinguish difference graphs
    r   )Úaot_module_simplifiedc                 ó®  •— g }t        | «      dkD  r1t        | d   t        «      r| ‰| d   «      z  }| ‰| d   «      z  }|S | D ]�  }t        |«      t        k(  st        |«      t
        k(  r|j                  t        |«      f«       ŒC|j                  t        |«      |j                  |j                  «       |j                  |j                  f«       Œ� |S )Nr   r
   )r4   r.   rm   r:   rg   r¼   r¾   r®   rt   r+   r9   )r5   Ú
input_metaÚargÚget_input_metas      €r!   rÊ   z(_save_fx_default.<locals>.get_input_metad  sÀ   ø€ Øˆ
Üˆt‹9�qŠ=œZ¨¨Q©´Ô7Ø™.¨¨a©Ó1Ñ1ˆJØ™.¨¨a©Ó1Ñ1ˆJØÐØò 	ˆCÜ�C‹yœCÒ¤4¨£9´Ò#5Ø×!Ñ!¤4¨£9 ,Õ/à×!Ñ!Ü˜#“Y §	¡	¨3¯:©:«<¸¿¹ÀCÇJÁJÐOõð		ð Ðr#   c                 óî  •— t        | j                  j                  «      dk(  r,t        j                  t        j
                  d‰|t        «       y t        j                  | «      }|j                  j                  t        j                  j                  j                  «       «       |j                  «         ‰|«      }t        j                  ‰› d‰› �d¬«       |j!                  ‰› d‰› d‰› d|› dt        › �	«       t#        j$                  |t'        ‰› d‰› d‰› d|› dt        › d‰› d|› dt        › d�d«      «       ‰r7t        j(                  |‰› d‰› d‰› d|› dt        › d‰› d|› dt        › d	�«       y y )
Nr   z!No nodes in graph {%s}_{%s}_{%s}.ú/T)Úexist_okrM   z.inputÚwbz.pt)r4   r   r7   ÚlogÚloggingÚWARNINGÚgraph_indexÚcopyÚdeepcopyÚset_codegenr   ÚfxÚCodeGenr   ÚosÚmakedirsr­   r´   Údumpr³   Úsave)	Ú
gm_to_saver5   Ú	type_nameÚgmrÈ   Úcurrent_nameÚdump_example_inputÚfolder_namerÊ   s	        €€€€r!   Úgraph_saver_helperz,_save_fx_default.<locals>.graph_saver_helpers  s�  ø€ äˆz×Ñ×%Ñ%Ó&¨!Ò+Ü�G‰GÜ—‘Ø3ØØÜôð ä�]‰]˜:Ó&ˆØ
�‰×ÑœUŸX™XŸ^™^×3Ñ3Ó5Ô6Ø
�‰Œá# DÓ)ˆ
ä
�‰�{�m 1 \ NÐ3¸dÕCØ
�‰Øˆm˜1˜\˜N¨!¨L¨>¸¸9¸+ÀQÄ{ÀmÐTô	
ô 	�‰ØÜØ�-˜q  ¨a°¨~¸Q¸y¸kÈÌ;È-ÐWXÐYeÐXfÐfgÐhqÐgrÐrsÔtð  tAð  AGð  HØóô	
ñ Ü�J‰JØØ�-˜q  ¨a°¨~¸Q¸y¸kÈÌ;È-ÐWXÐYeÐXfÐfgÐhqÐgrÐrsÔtð  tAð  ADð  Eõð r#   c                 ó   •—  ‰| |d«       | S )NÚforwardrT   )rÞ   Úfw_argsrâ   s     €r!   Úgraph_saver_forwardz-_save_fx_default.<locals>.graph_saver_forward–  s   ø€ Ù˜2˜w¨	Ô2Øˆ	r#   c                 ó.   •—  ‰| |d«       t         dz  a | S )NÚbackwardr
   )rÒ   )rÞ   Úbw_argsrâ   s     €r!   Úgraph_saver_backwardz._save_fx_default.<locals>.graph_saver_backwardš  s   ø€ Ù˜2˜w¨
Ô3ä�qÑˆØˆ	r#   c                 ó0   •—  ‰| |d«       t        | |«      S )NÚjoint)r   )rÞ   Ú
joint_argsrâ   s     €r!   Úgraph_saver_jointz+_save_fx_default.<locals>.graph_saver_joint   s   ø€ Ù˜2˜z¨7Ô3Ü   ZÓ0Ð0r#   rŸ   )Úfunctorch.compilerÆ   r¤   )rß   rá   rà   rÞ   Úexample_inputsrÆ   ræ   rê   rî   rÊ   râ   s   ```      @@r!   Ú_save_fx_defaultrñ   R  sC   ü€ õ  8ô÷!ôFôô1ñ !Ø
ØØ'Ø(Ø&Ü-ôð r#   c                 ó*   — da t        t        | ||«      S )as  
    Dump the forward, backward, and joint computation graph.
    Example Usage:
    save_fx_func = graph_dumper_aot(current_name, folder_name, dump_example_input = False)
    optimize_ctx = torchdynamo.optimize(
        save_fx_func
    )
    with torch.enable_grad():
        with optimize_ctx:
            result = forward_and_backward_pass(model, example_inputs)
    r   )rÒ   r   rñ   )rß   rá   rà   s      r!   Úgraph_dumper_aotró   ¯  s   € ð €KÜÔ# \°;Ð@RÓSÐSr#   )T)F)VrÓ   rÐ   rØ   r´   r¶   Ú
contextlibr   Ú	functoolsr   Útypingr   r   rb   r   Útorch.fxrÖ   Útorch.nnr¦   Útorch.utils._pytreeÚutilsÚ_pytreerˆ   r   Útorch._decompr   Ú%torch.fx.experimental.symbolic_shapesr	   Úaot_autogradr   r   r   Úcompile_utilsr   Úpartitionersr   r   r   Ú	getLoggerr‘   rÏ   r"   r(   ÚGraphModulerH   rO   rR   rV   ÚInterpreterrX   r–   r˜   rš   r   r   ÚdetachÚgelu_backwardÚleaky_relu_backwardÚsigmoid_backwardÚthreshold_backwardÚhardtanh_backwardÚhardsigmoid_backwardÚhardswish_backwardÚtanh_backwardÚsilu_backwardÚelu_backwardÚcudnn_batch_normÚcudnn_batch_norm_backwardÚmasked_fillÚScalarr‹   ÚeluÚ
leaky_reluÚhardtanhÚ	hardswishÚhardsigmoidÚconj_physicalÚis_same_sizer¤   rœ   r§   r©   r°   rÒ   rÄ   rñ   ró   rT   r#   r!   ú<module>r     s]  ðó Û Û 	Û Û Ý %Ý ß "ã ã Ý Ý ß $Ð $Ý Ý ,Ý >ç GÑ GÝ *÷ñ ð €g×Ñ˜Ó!€ò
ð ñ?ó ð?ð ð+�R—^‘^ð +¨hò +ó ð+ó\òHð ð	ˆb�n‰nð 	 Hò 	ó ð	ô4�r—~‘~ô 4ðn ð&�B—N‘Nð &¨(ò &ó ð&ð ñó ðò.ð ‡y�y‡~�~€à‡K�KØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×"Ñ"Ø×Ñ×ÑØ×Ñ×ÑØ‡H�HØ‡O�OØ‡M�MØ‡N�NØ×ÑØ×ÑØ×Ñð-Ð ñ2 ,Ð,BÓCÐ ð ñó ðð
$*Øˆh˜Ÿ	™	Ð!Ñ"ó$*òN"ð: €òò>YôzTr#   