Ë
    f^(h’f  ã                   ó”  — d dl Z d dlZd dlmZ d dlmZmZmZ d dlZd dl	m
Z
 d dlmZ d dlmZ d dlmZ dd	gZ ej$                  e«      xZZ e
d
¬«       G d„ d«      «       Zdej.                  j0                  dedefd„Z e
d
¬«      	 	 	 ddedej.                  j0                  deegef   deeeef      dee   dee   fd„«       Zy)é    N)ÚOrderedDict)ÚAnyÚCallableÚOptional)Úcompatibility)Úlazy_format_graph_code)ÚGraphModule)ÚNodeÚ	PartitionÚsplit_moduleT)Úis_backward_compatiblec                   ó$   — e Zd Zdefd„Zdefd„Zy)r   Únamec                 óâ   — || _         d|› �| _        g | _        i | _        i | _        i | _        i | _        t        j                  j                  j                  «       | _	        i | _        i | _        y )NÚsubmod_)r   Úsubmod_nameÚ
node_namesÚinputsÚoutputsÚdependenciesÚ
dependentsÚtorchÚfxÚgraphÚGraphÚenvironmentÚtargets)Úselfr   s     úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/fx/passes/split_module.pyÚ__init__zPartition.__init__   sc   € ØˆŒ	Ø$ T FÐ+ˆÔØ%'ˆŒØ')ˆŒØ(*ˆŒØ-/ˆÔØ+-ˆŒÜ+0¯8©8¯>©>×+?Ñ+?Ó+AˆŒ
Ø-/ˆÔØ')ˆ�ó    Úreturnc                 ó¢   — d| j                   › d| j                  › d| j                  › d| j                  › d| j                  › d| j
                  › �S )Nzname: z
,
 nodes: z,
 inputs: z,
 outputs: z,
 partitions depended on: z,
 partition dependents: )r   r   r   r   r   r   )r   s    r   Ú__repr__zPartition.__repr__    sb   € à�T—Y‘Y�Kð  Ø—‘Ð'ð (ØŸ™�}ð %ØŸ™˜ð '(Ø(,×(9Ñ(9Ð':ð ;&Ø&*§o¡oÐ%6ð8ð	
r!   N)Ú__name__Ú
__module__Ú__qualname__Ústrr    r$   © r!   r   r   r      s   „ ð
*˜Só 
*ð
˜#ô 
r!   ÚmodÚqualnamer"   c                 ó„   — | }|j                  d«      D ])  }t        ||«      st        d|› d�«      ‚t        ||«      }Œ+ |S )Nú.zNode target z not found!)ÚsplitÚhasattrÚAttributeErrorÚgetattr)r*   r+   Úattr_valÚatoms       r   Ú_get_attr_from_qualnamer4   +   sP   € Ø€HØ—‘˜sÓ#ò +ˆÜ�x Ô&Ü  <°¨z¸Ð!EÓFÐFÜ˜8 TÓ*‰ð+ð €Or!   ÚmÚroot_mÚsplit_callbackÚqualname_mapÚkeep_original_orderÚkeep_original_node_namec                 ó  ‡ ‡‡‡1‡>‡?‡@‡A‡B‡C‡D‡E— t         j                  dt        d‰ d¬«      «       dt        dt        t
        t        f   dt        t
        t        j                  j                  j                  f   fˆ?ˆˆ fd„}d	d
l
}i ŠCi ŠAi ŠEdt        dt        t           fˆCˆEfd„ŠDˆCˆfd„}t        j                  j                  t        j                  j                  t        j                  j                   g}	t#        «       }
t#        «       }i }d
}t%        «       }‰ j&                  j(                  D �]ˆ  Š1‰1j*                  j-                  d«      x}�st/        |t        j0                  t        j2                  f«      rIt/        |j4                  j6                  x}|j8                  «      r|‰Evr‰1‰E|j4                  j6                  <   ‰1j:                  dv rŒ£ |‰1«       ‰1j:                  dk(  �r‘‰1j<                  |	v �r‚‰1j<                  t        j                  j                   k(  rRt?        ‰1j@                  «      dk(  sJ ‚t/        ‰1j@                  d	   tB        «      sJ ‚‰1}t%         ‰‰1«      h«      |
|<   �n	‰1j<                  t        j                  j                  k(  rJtE        d„ ‰1j@                  D «       «      sJ ‚|jG                  ‰1«       t%         ‰‰1«      h«      |‰1<   d
|‰1<   n˜‰1j<                  t        j                  j                  k(  rqt?        ‰1j@                  «      dk(  sJ ‚|‰1j@                  d	      jG                   ‰‰1«      «       |jI                  ‰1j@                  d	   «       ‰1|‰1j@                  d	   <   |�|
|   jG                   ‰‰1«      «       |D ]  }||   jG                   ‰‰1«      «       Œ �Œ‹ tE        d„ |jK                  «       D «       «      sJ d«       ‚|jM                  «       D ��ci c]  \  }}|tO        |«      “Œ }}}|
jM                  «       D ��ci c]  \  }}|tO        |«      “Œ }
}}tP        jS                  tT        jV                  «      r,tP        j                  d|«       tP        j                  d|
«       tC        |«      xs tC        |
«      }d}‰ j&                  j(                  D �]  Š1‰1‰A‰1jX                  <   ‰1j:                  dv rŒ"‰1j:                  dk(  r;t        j                  j&                  j[                  ‰1j@                  d	   ˆDfd„«       Œl|r ‰‰1«      }||k  sJ d|› d|› �«       ‚|}‰1j<                  |	vsŒ™t        j                  j&                  j[                  ‰1j@                  ˆ1ˆDfd„«       t        j                  j&                  j[                  ‰1j\                  ˆ1ˆDfd„«       �Œ t_        ‰Cja                  «       «      }g }‰CjM                  «       D ],  \  }ŠBt?        ‰Bjb                  «      rŒ|je                  |«       Œ. g }|rw|jg                  «       }|je                  |«       ‰C|   jh                  D ]A  }‰C|   jb                  jg                  |«       ‰C|   jb                  rŒ1|je                  |«       ŒC |rŒwt?        |«      t?        ‰C«      k7  rtk        d «      ‚||
fD ]æ  }|jM                  «       D ]Ñ  \  Š1}t?        |«      d	kD  sJ ‚‰1‰Ct        |d	   «         jl                  ‰1<   |dd
 D ]–  }‰Ct        |«         ŠB‰Bj&                  jo                  ‰1j:                  ‰1j<                  tq        d!„ ‰1j@                  D «       «      i ‰1jr                  ¬"«      } ‰1j*                  ju                  «       | _        | ‰Bjl                  ‰1<   Œ˜ ŒÓ Œè |D �]`  }‰C|   ŠBi }!‰Bjv                  D �]?  }"‰A|"   }#|#j:                  d#k(  rÅt/        |#j<                  t
        «      sJ ‚ty        ‰ |#j<                  «      }$t/        |$t        jz                  j|                  «      r?‰Bj&                  j                  |#j<                  «      }%|$‰Bj€                  |#j<                  <   n_‰Bj&                  jƒ                  |"‰A|"   jr                  ¬$«      }%d
|!|"<   n/‰Bj&                  jƒ                  |"‰A|"   jr                  ¬$«      }%d
|!|"<   ‰A|"   j*                  ju                  «       |%_        |%‰Bjl                  ‰A|"   <   �ŒB |!‰B_;        �Œc ‰ j&                  j(                  D �]®  Š1t…        ‰1d%«      sŒ‰C‰1j†                     ŠB‰Bjl                  Š@t        j                  j&                  j[                  ‰1j@                  ˆ@fd&„«      }&t        j                  j&                  j[                  ‰1j\                  ˆ@fd'„«      }'‰1j:                  d(vr‰1j<                  }(ncty        ‰ ‰1j<                  «      })‰1j<                  j‰                  d)d*«      }(|)‰Bj€                  |(<   |� ‰BjŠ                  › d)|(› �}*‰1j<                  ||*<   t/        |&tp        «      sJ ‚t/        |'t        «      sJ ‚‰r‰1jX                  nd
}+‰Bj&                  jo                  ‰1j:                  |(|&|'‰1jr                  |+¬+«      } ‰1j*                  ju                  «       | _        | ‰Bjl                  ‰1<   �Œ± |fD ]¸  }t�        |«      D ]¨  Š1|‰1   }t?        |«      d	kD  sJ ‚|d
d D ]‰  }‰Ct        |«         ŠB|‰1   },|,€J d,«       ‚‰Bj&                  jo                  |,j:                  |,j<                  ‰Bjl                  ‰1   fi |,jr                  ¬"«      } |,j*                  ju                  «       | _        Œ‹ Œª Œº i }-i Š>t        j                  j&                  j�                  «       Š?i }.|s)‰ j&                  j(                  D ]  Š1 |‰1‰>|.«      \  Š>}.Œ n*‰ j&                  j(                  D ]  Š1‰1|-‰1jX                  <   Œ |s|n|}/t%        «       }0‰ j&                  j(                  D �1cg c]  }1|1j:                  d-k(  sŒ|1‘Œ }2}1|/D �]'  }‰C|   ŠBtq        ˆAˆBfd.„‰Bj�                  D «       «      }3t?        |3«      }4|4dk(  r‰Bj&                  j“                  |3d	   «       n<|4dkD  r‰Bj&                  j“                  |3«       n‰Bj&                  j“                  d/«       |rt‰Bjv                  D �5cg c]  }5|5|2vr|-|5   ‘Œ }6}5|2D ]%  Š1‰1|0v rŒ |‰1‰>|.«      \  Š>}7|0jG                  ‰1«       Œ' |6D ]%  Š1‰1|0v rŒ |‰1‰>|.«      \  Š>}.|0jG                  ‰1«       Œ' t        j                  j                  j                  ‰Bj€                  ‰Bj&                  «      |.‰BjŠ                  <   ‰?j•                  ‰BjŠ                  tq        ˆ>fd0„‰Bjv                  D «       «      «      }8t?        ‰Bj�                  «      }9|9dkD  rZt        j                  j–                  j™                  |8«      }:t›        ‰Bj�                  «      D ]  \  };}<|:|;   j4                  ‰>|<<   Œ �Œ |9dk(  s�Œ|8‰>t�        tŸ        ‰Bj�                  «      «      <   �Œ* |r*‰>s(‰ j&                  j(                  D ]  Š1 |‰1‰>|.«      \  Š>}.Œ ‰ j&                  j(                  D ][  Š1‰1j:                  dk(  sŒ‰?j“                  t        j                  j&                  j[                  ‰1j@                  d	   ˆ>fd1„«      «       Œ] t        j                  j                  j                  |.‰?«      }=t         j                  dt        d2|=d¬«      «       |=S c c}}w c c}}w c c}1w c c}5w )3aô  
    Creates subgraphs out of main graph

    Args:
        m (GraphModule): Graph module to split
        root_m (torch.nn.Module): root nn module. Not currently used. Included
            because the root nn module is usually transformed via
            torch.fx._symbolic_trace.symbolic_trace (see example below)
        split_callback (Callable[[Node], int]): Callable function
            that maps a given Node instance to a numeric partition identifier.
            split_module will use this function as the policy for which operations
            appear in which partitions in the output Module.
        qualname_map: Optional[Dict[str, str]]: optional output parameter that returns a
            mapping from new target names in the module after split to old target
            names in the original module.
        keep_original_order: Optional[bool]: keep the original order of the GraphModule
            or use the Topological order of the new constructed GraphModule


    Returns:
        GraphModule: the module after split.

    Example:

        This is a sample setup:

            import torch
            from torch.fx.symbolic_trace import symbolic_trace
            from torch.fx.graph_module import GraphModule
            from torch.fx.node import Node
            from torch.fx.passes.split_module import split_module

            class MyModule(torch.nn.Module):
                def __init__(self) -> None:
                    super().__init__()
                    self.param = torch.nn.Parameter(torch.rand(3, 4))
                    self.linear = torch.nn.Linear(4, 5)

                def forward(self, x, y):
                    z = self.linear(x + self.param).clamp(min=0.0, max=1.0)
                    w = self.linear(y).clamp(min=0.0, max=1.0)
                    return z + w

            # symbolically trace model
            my_module = MyModule()
            my_module_traced = symbolic_trace(my_module)

            # random mod partitioning
            partition_counter = 0
            NPARTITIONS = 3

            def mod_partition(node: Node):
                global partition_counter
                partition = partition_counter % NPARTITIONS
                partition_counter = (partition_counter + 1) % NPARTITIONS
                return partition

            # split module in module with submodules
            module_with_submodules = split_module(
                my_module_traced, my_module, mod_partition
            )

        Output looks like this. Original graph is broken into partitions

            > print(module_with_submodules)
            GraphModule(
                (submod_0): GraphModule(
                    (linear): Linear(in_features=4, out_features=5, bias=True)
                )
                (submod_1): GraphModule(
                    (linear): Linear(in_features=4, out_features=5, bias=True)
                )
                (submod_2): GraphModule()
            )

            def forward(self, x, y):
                param = self.param
                submod_0 = self.submod_0(x, param, y);  x = param = y = None
                getitem = submod_0[0]
                getitem_1 = submod_0[1];  submod_0 = None
                submod_1 = self.submod_1(getitem, getitem_1);  getitem = getitem_1 = None
                getitem_2 = submod_1[0]
                getitem_3 = submod_1[1];  submod_1 = None
                submod_2 = self.submod_2(getitem_2, getitem_3);  getitem_2 = getitem_3 = None
                return submod_2

        Output of split module is the same as output of input traced module.
        This is an example within a test setting:

            > orig_out = my_module_traced(x, y)
            > submodules_out = module_with_submodules(x, y)
            > self.assertEqual(orig_out, submodules_out)
            True
    z%szpre split_moduleT)ÚcoloredÚnodeÚbase_mod_envÚbase_mod_attrsc                 ót  •— | j                   dk(  �r t        | j                  «      dkD  r| j                  d   nt        j                  j
                  }‰rX|t        j                  j
                  u rdn|f}‰j                  d| j                  || j                  ¬«      || j                  <   n5‰j                  | j                  | j                  |¬«      || j                  <   | j                  j                  «       || j                     _        ||fS | j                   dk(  r•‰j                  | j                  «      || j                  <   | j                  j                  «       || j                     _        t        | j                  t        «      sJ ‚t!        ‰| j                  «      }||| j                  <   ||fS )NÚplaceholderr   r)   )ÚargsÚ	type_expr)rC   Údefault_valueÚget_attr)ÚopÚlenrB   ÚinspectÚ	SignatureÚemptyÚcreate_noder   ÚtyperA   ÚtargetÚmetaÚcopyrE   Ú
isinstancer(   r4   )	r=   r>   r?   rD   rB   r2   Úbase_mod_graphr:   r5   s	         €€€r   Úconstruct_graphz%split_module.<locals>.construct_graph¢   sy  ø€ ð
 �7‰7�mÓ#ä # D§I¡I£°Ò 2�—	‘	˜!’¼×8IÑ8I×8OÑ8Oð ñ 'à'¬7×+<Ñ+<×+BÑ+BÑB‘BÈÐHXð ð +9×*DÑ*DØ!Ø—I‘IØØ"Ÿi™ið	 +Eó +�˜TŸY™YÒ'ð +9×*DÑ*DØ—K‘KØ"Ÿi™iØ"/ð +Eó +�˜TŸY™YÑ'ð
 ,0¯9©9¯>©>Ó+;ˆL˜Ÿ™Ñ#Ô(ð ˜^Ð+Ð+ð �W‰W˜
Ò"Ø&4×&=Ñ&=¸d¿k¹kÓ&JˆL˜Ÿ™Ñ#Ø+/¯9©9¯>©>Ó+;ˆL˜Ÿ™Ñ#Ô(Ü˜dŸk™k¬3Ô/Ð/Ð/Ü.¨q°$·+±+Ó>ˆHØ*2ˆN˜4Ÿ;™;Ñ'Ø˜^Ð+Ð+r!   r   NÚdef_nodeÚuse_nodec                 óv  •— ddl m} t        | dd «      }t        |dd «      }t        j	                  d| j
                  ||�|j
                  nd|«       ||k7  �ra|�G‰|   }|j                  j                  | j
                  «       |�|j                  j                  |«       |��‰|   }|j                  j                  | j
                  «       | j                  j                  d«      x}�®t         ||«      t        ¬«      D ]”  }‰|   }	|j                  j                  |	j
                  «       ‰|   j                  dk7  sŒ@t        |	dd «      }
|
€ŒP‰|
   }|j                  j                  |	j
                  «       |j                  j                  |«       Œ– |�|j                  j                  |«       y y y y )	Nr   )Úfree_symbolsÚ_fx_partitionz*record_cross_partition_use %s (%s) %s (%s)ú-Úexample_value)ÚkeyrA   )Ú%torch.fx.experimental.symbolic_shapesrV   r1   ÚlogÚdebugr   r   Ú
setdefaultr   r   rN   ÚgetÚsortedr(   rF   r   )rS   rT   rV   ÚdefinedÚusedÚdef_partitionÚuse_partitionÚdef_valÚsÚs_nodeÚ	s_definedÚs_def_partitionÚ
partitionsÚsymbol_to_nodes               €€r   Úrecord_cross_partition_usez0split_module.<locals>.record_cross_partition_useÊ   s¤  ø€ ÝFä˜( O°TÓ:ˆÜ�x °$Ó7ˆä�	‰	Ø8Ø�M‰MØØ%Ð1ˆH�MŠM°sØô	
ð �d‹?ØÐ"Ø *¨7Ñ 3�Ø×%Ñ%×0Ñ0°·±Ô?ØÐ#Ø!×,Ñ,×7Ñ7¸Ô=àÑØ *¨4Ñ 0�Ø×$Ñ$×/Ñ/°·±Ô>ð  (Ÿ}™}×0Ñ0°ÓAÐA�GÐNÜ#¡L°Ó$9¼sÔCò L˜Ø!/°Ñ!2˜Ø%×,Ñ,×7Ñ7¸¿¹ÔDØ)¨!Ñ,×/Ñ/°=Ó@ô )0°¸ÈÓ(N˜IØ(Ñ4Ø2<¸YÑ2G Ø /× 7Ñ 7× BÑ BÀ6Ç;Á;Ô OØ /× :Ñ :× EÑ EÀdÕ Kð!Lð" Ð&Ø!×.Ñ.×9Ñ9¸'ÕBð 'ð1  ð r!   c                 ó  •— t         ‰| «      «      }t        j                  d| j                  |«       ‰j	                  |«      }|€t        |«      x‰|<   }|j                  j                  | j                  «       || _        y )Nz*instantiate_node_partition_mapping %s (%s))	r(   r\   r]   r   r_   r   r   ÚappendrW   )r=   Úpartition_nameÚ	partitionrj   r7   s      €€r   Ú"instantiate_node_partition_mappingz8split_module.<locals>.instantiate_node_partition_mappingú   ss   ø€ Ü™^¨DÓ1Ó2ˆÜ�	‰	Ø8¸$¿)¹)À^ô	
ð
 —N‘N >Ó2ˆ	ØÐÜ5>¸~Ó5NÐNˆJ�~Ñ&¨à×Ñ×#Ñ# D§I¡IÔ.Ø+ˆÕr!   rY   )rA   rE   ÚoutputÚcall_functioné   c              3   ó>   K  — | ]  }t        |t        «       –— Œ y ­w©N)rP   r
   ©Ú.0Úargs     r   ú	<genexpr>zsplit_module.<locals>.<genexpr>@  s   è ø€ ÒJ¸œz¨#¬tÓ4Ô4ÑJùs   ‚c              3   ó$   K  — | ]  }|d u–— Œ
 y ­wrv   r)   )rx   Úvs     r   rz   zsplit_module.<locals>.<genexpr>P  s   è ø€ Ò> ˆq˜Œ}Ñ>ùs   ‚zautocast must exitzautocast_regions: %szgrad_regions: %séÿÿÿÿ)rA   rE   rr   c                 ó   •—  ‰| d «      S rv   r)   )Únrl   s    €r   ú<lambda>zsplit_module.<locals>.<lambda>f  s   ø€ Ñ(BÀ1ÀdÓ(K€ r!   zRautocast or set_grad_enabled require monotonically increasing partitions:highest: z, this node's: c                 ó   •—  ‰| ‰«      S rv   r)   ©rS   r=   rl   s    €€r   r€   zsplit_module.<locals>.<lambda>v  s   ø€ Ñ,FÀxÐQUÓ,V€ r!   c                 ó   •—  ‰| ‰«      S rv   r)   r‚   s    €€r   r€   zsplit_module.<locals>.<lambda>y  s   ø€ Ñ.HÈÐSWÓ.X€ r!   z cycle exists between partitions!c              3   ó    K  — | ]  }|–— Œ y ­wrv   r)   rw   s     r   rz   zsplit_module.<locals>.<genexpr>™  s   è ø€ Ò8 sœsÑ8ùs   ‚)rF   rM   rB   ÚkwargsrC   rE   )rC   rW   c                 ó   •— ‰|    S rv   r)   ©r   r   s    €r   r€   zsplit_module.<locals>.<lambda>É  s   ø€ ÈÐTUÉ€ r!   c                 ó   •— ‰|    S rv   r)   r‡   s    €r   r€   zsplit_module.<locals>.<lambda>Ë  s   ø€  {°1¡~€ r!   )Úcall_modulerE   r-   Ú_)rF   rM   rB   r…   rC   r   zMissing exit noderA   c              3   óB   •K  — | ]  }‰j                   ‰|      –— Œ y ­wrv   )r   )rx   r   Ú
orig_nodesrp   s     €€r   rz   zsplit_module.<locals>.<genexpr>"  s&   øè ø€ ò 
Ø8<ˆI×!Ñ! *¨TÑ"2Õ3ñ
ùs   ƒr)   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrv   r)   )rx   r   r>   s     €r   rz   zsplit_module.<locals>.<genexpr>P  s   øè ø€ ÒB¨�,˜tÕ$ÑBùs   ƒc                 ó"   •— ‰| j                      S rv   )r   )r   r>   s    €r   r€   zsplit_module.<locals>.<lambda>j  s   ø€ ¸|ÈAÏFÉFÑ?S€ r!   zpost split_module)Pr\   r]   r   r
   Údictr(   r   r   Úgraph_moduler	   Úsympyr   ÚampÚ_enter_autocastÚ_exit_autocastÚ_CÚ_set_grad_enabledr   Úsetr   ÚnodesrN   r_   rP   ÚSymIntÚSymFloatr=   ÚexprÚSymbolrF   rM   rG   rB   ÚboolÚallÚaddÚremoveÚvaluesÚitemsr`   Ú_LOGGERÚisEnabledForÚloggingÚDEBUGr   Úmap_argr…   ÚlistÚkeysr   rn   Úpopr   ÚRuntimeErrorr   rK   ÚtuplerL   rO   r   r4   ÚnnÚModulerE   r   rA   r/   rW   Úreplacer   Úreversedr   r   rr   r‰   ÚproxyÚProxyÚ	enumerateÚnextÚiter)Fr5   r6   r7   r8   r9   r:   rR   r‘   rq   ÚGLOBAL_STATE_NODESÚgrad_regionsÚautocast_regionsÚautocast_exitsÚactive_gradÚactive_autocastsÚvalÚs0ÚaÚkr|   Úassert_monotonically_increasingÚhighest_partitionÚpidÚoriginal_partition_orderÚroot_partitionsro   Úsorted_partitionsÚroot_partitionÚ	dependentÚregions_mappingÚregionsÚrÚnew_nodeÚ
new_inputsÚinpÚ	orig_nodeÚ	orig_attrrA   Úgathered_argsÚgathered_kwargsrM   Útarget_attrr+   r   Ú	exit_nodeÚorig_mod_envr?   Úconstruct_order_partitionsÚalready_constructed_attr_nodesr=   Úoriginal_orderÚoutput_valsÚnum_output_valsrZ   Úorig_mod_attr_nodesÚ_based_mod_attrsÚ
output_valÚnum_outputsÚoutput_val_proxyÚiÚoutput_nameÚretr>   rQ   r   rŒ   rp   rj   rl   rk   sF   ` `  `                                           `            @@@@@@@@r   r   r   5   sP  ÿû€ ôP ‡I�IØÜÐ1°1¸dÔCôð
 ,Üð ,äœ3¤˜9‘oð ,ô œS¤%§(¡(×"7Ñ"7×"CÑ"CÐCÑD÷ ,óD à')€JØ"$€JØ/1€Nð.C¬Tð .C¼XÄd¹^ö .Cõ`,ô" 	�	‰	×!Ñ!Ü�	‰	× Ñ Ü�‰×"Ñ"ðÐô 1<³€Lô 5@³MÐØ13€Nà€KÜ“uÐà—‘—‘ó +:ˆð —I‘I—M‘M /Ó2Ð2ˆSÐ?Ü˜3¤§¡¬u¯~©~Ð >Ô?Ü §¡§¡Ð.˜2°·±Ô=Ø˜.Ñ(à,0ˆN˜3Ÿ8™8Ÿ=™=Ñ)à�7‰7Ð;Ñ;Øá*¨4Ô0à�7‰7�oÓ%¨$¯+©+Ð9KÒ*KØ�{‰{œeŸh™h×8Ñ8Ò8Ü˜4Ÿ9™9“~¨Ò*Ð*Ð*Ü! $§)¡)¨A¡,´Ô5Ð5Ð5Ø"�Ü,/±ÀÓ1EÐ0FÓ,G�˜[Ó)Ø—‘¤§	¡	× 9Ñ 9Ò9äÑJÀÇ	Á	ÔJÔJÐJÐJØ ×$Ñ$ TÔ*Ü),©n¸TÓ.BÐ-CÓ)DÐ  Ñ&Ø'+�˜tÒ$Ø—‘¤§	¡	× 8Ñ 8Ò8Ü˜4Ÿ9™9“~¨Ò*Ð*Ð*Ø  §¡¨1¡Ñ.×2Ñ2±>À$Ó3GÔHØ ×'Ñ'¨¯	©	°!©Ô5Ø/3�˜tŸy™y¨™|Ñ,àÐ"Ø˜Ñ%×)Ñ)©.¸Ó*>Ô?à!ò 	:ˆAØ˜QÑ×#Ñ#¡N°4Ó$8Õ9ò	:ðU+:ôZ Ñ> n×&;Ñ&;Ó&=Ô>Ô>ÐTÐ@TÓTÐ>à1A×1GÑ1GÓ1I×J©¨¨A˜œ6 !›9™ÐJÐÑJØ-9×-?Ñ-?Ó-A×B¡T Q¨�A”v˜a“y‘LÐB€LÑBä×ÑœGŸM™MÔ*Ü�‰Ð,Ð.>Ô?Ü�‰Ð(¨,Ô7ä&*Ð+;Ó&<Ò&RÄÀ\Ó@RÐ#ð ÐØ—‘—‘ó ˆØ $ˆ
�4—9‘9Ñð �7‰7Ð1Ñ1ØØ�7‰7�hÒÜ�H‰H�N‰N×"Ñ"Ø—	‘	˜!‘ÓKôð á*Ù  Ó&ˆCØ$¨Ò+ð ðØ-Ð.¨o¸c¸UðDóÐ+ð !$Ðð �;‰;Ð0Ò0Ü�H‰H�N‰N×"Ñ"Ø—	‘	ÔVôô �H‰H�N‰N×"Ñ"Ø—‘ÔXöð7ô>  $ J§O¡OÓ$5Ó6Ðà!#€OØ%/×%5Ñ%5Ó%7ò 3Ñ!ˆ˜	Ü�9×)Ñ)Õ*Ø×"Ñ" >Õ2ð3ð
 $&ÐÙ
Ø(×,Ñ,Ó.ˆØ× Ñ  Ô0Ø# NÑ3×>Ñ>ò 	2ˆIØ�yÑ!×.Ñ.×2Ñ2°>ÔBØ˜iÑ(×5Ó5Ø×&Ñ& yÕ1ð	2ò ô ÐÓ¤ Z£Ò0ÜÐ=Ó>Ð>ð -¨lÐ;ò 7ˆØ,×2Ñ2Ó4ò 	7‰MˆD�'Ü�w“< !Ò#Ð#Ð#Ø<@ˆJ”s˜7 1™:“Ñ'×3Ñ3°DÑ9Ø˜Q˜R�[ò 7�Ø&¤s¨1£vÑ.�	Ø$Ÿ?™?×6Ñ6Ø—w‘wØŸ;™;ÜÑ8¨d¯i©iÔ8Ó8ØØ"Ÿi™ið 7ó �ð —I‘I—N‘NÓ$ð ”ð /7�	×%Ñ% dÒ+ñ7ñ	7ð7ð& ,ó &ˆØ˜~Ñ.ˆ	Ø&(ˆ
Ø×#Ñ#ó 	AˆCØ" 3™ˆIð �|‰|˜zÒ)Ü! )×"2Ñ"2´CÔ8Ð8Ð8ä3°A°y×7GÑ7GÓH�	Ü˜i¬¯©¯©Ô9Ø"+§/¡/×":Ñ":¸9×;KÑ;KÓ"L�KØ:C�I×%Ñ% i×&6Ñ&6Ò7à"+§/¡/×"=Ñ"=ØØ",¨S¡/×"6Ñ"6ð #>ó #�Kð '+�J˜s’Oà'Ÿo™o×9Ñ9ØØ(¨™o×2Ñ2ð :ó �ð #'�
˜3‘Ø)¨#™×3Ñ3×8Ñ8Ó:ˆKÔØ5@ˆI×!Ñ! *¨S¡/Ó2ð3	Að4 &ˆ	Öð;&ð@ —‘—‘ó $3ˆÜ�4˜Õ)Ø" 4×#5Ñ#5Ñ6ˆIð $×/Ñ/ˆKÜ!ŸH™HŸN™N×2Ñ2°4·9±9Ó>VÓWˆMÜ#Ÿh™hŸn™n×4Ñ4Ø—‘Ó5óˆOð �w‰wÐ9Ñ9ØŸ™‘ä5°a¸¿¹ÓE�ØŸ™×,Ñ,¨S°#Ó6�Ø,7�	×!Ñ! &Ñ)àÐ+ð #,×"7Ñ"7Ð!8¸¸&¸ÐB�HØ-1¯[©[�L Ñ*ä˜m¬UÔ3Ð3Ð3Ü˜o¬tÔ4Ð4Ð4Ù 7�4—9’9¸TˆDØ —‘×2Ñ2Ø—7‘7ØØ"Ø&ØŸ)™)Øð 3ó ˆHð !ŸI™IŸN™NÓ,ˆHŒMØ*2ˆI×!Ñ! $Ó'ðI$3ðN -Ð-ò ˆÜ˜_Ó-ò 	ˆDØ% dÑ+ˆGÜ�w“< !Ò#Ð#Ð#Ø˜S˜b�\ò �Ø&¤s¨1£vÑ.�	Ø*¨4Ñ0�	Ø Ð,ÐAÐ.AÓAÐ,Ø$Ÿ?™?×6Ñ6Ø —|‘|Ø$×+Ñ+Ø#×/Ñ/°Ñ5Ð7ØØ'Ÿn™nð 7ó �ð —N‘N×'Ñ'Ó)ð •ññ	ðð( %'€Là$&€LÜ+0¯8©8¯>©>×+?Ñ+?Ó+A€NØCE€NÙØ—G‘G—M‘Mò 	ˆDÙ+:Ø�l Nó,Ñ(ˆL™.ñ	ð —G‘G—M‘Mò 	+ˆDØ&*ˆL˜Ÿ™Ò#ð	+ñ "5ÑÐ:Rð ô &)£UÐ"ð ()§w¡w§}¡}ÖQ˜t¸¿¹À=Ó8P’dÐQ€NÐQà4ó <EˆØ˜~Ñ.ˆ	ô ô 
Ø@I×@QÑ@Qô
ó 
ˆô
 ˜kÓ*ˆØ˜aÒØ�O‰O×"Ñ" ;¨q¡>Õ2Ø˜qÒ Ø�O‰O×"Ñ" ;Õ/ð �O‰O×"Ñ" 2Ô&áð %×+Ñ+ö/àØ˜nÑ,ð ˜SÓ!ð/Ðð /ð 'ò 9�ØÐ9Ñ9ØÙ1@Ø˜,¨ó2Ñ.�Ð.ð /×2Ñ2°4Õ8ð9ð ,ò 9�ØÐ9Ñ9ØÙ/>Ø˜,¨ó0Ñ,�˜nð /×2Ñ2°4Õ8ð9ô 16·±×0EÑ0E×0QÑ0QØ×Ñ˜yŸ™ó1
ˆ�y×,Ñ,Ñ-ð
 $×/Ñ/Ø×!Ñ!ÜÓB°×1AÑ1AÔBÓBó
ˆ
ô
 ˜)×+Ñ+Ó,ˆØ˜Š?ä$Ÿx™xŸ~™~×3Ñ3°JÓ?ÐÜ"+¨I×,=Ñ,=Ó">ò E‘��;Ø,<¸QÑ,?×,DÑ,D�˜[Ò)òEà˜AÔØ:DˆLœœd 9×#4Ñ#4Ó5Ó6Ó7ðy<EñD ¡<Ø—G‘G—M‘Mò 	ˆDÙ+:Ø�l Nó,Ñ(ˆL™.ð	ð —‘—‘ò ˆØ�7‰7�hÓØ×!Ñ!Ü—‘—‘×&Ñ& t§y¡y°¡|Ó5SÓTõðô �(‰(×
Ñ
×
+Ñ
+¨N¸NÓ
K€CÜ‡I�IØÜÐ2°CÀÔFôð €JùóA	 KùÛBùòR Rùò,/s   Ï6}7Ð"}=ñ~ñ~ô~)NFF)rH   r¥   Úcollectionsr   Útypingr   r   r   r   Útorch.fx._compatibilityr   Útorch.fx._utilsr   Útorch.fx.graph_moduler	   Útorch.fx.noder
   Ú__all__Ú	getLoggerr%   r\   r£   r   r­   r®   r(   r4   Úintr�   r�   r   r)   r!   r   ú<module>rë      s  ðã Û Ý #ß *Ñ *ã Ý 1Ý 2Ý -Ý ð ˜Ð
'€Ø!�×!Ñ! (Ó+Ð +€€gñ  dÔ+÷
ð 
ó ,ð
ð0 §¡§¡ð ¸Cð ÀCó ñ  dÔ+ð
 .2Ø*/Ø.3ñ|Øð|à�H‰H�O‰Oð|ð ˜d˜V S˜[Ñ)ð|ð ˜4  S ™>Ñ*ð	|ð
 " $™ð|ð & d™^ò|ó ,ñ|r!   