Ë
    P/æj†_  ã                   ód  — d dl Z d dlmZmZmZmZmZmZ d dlm	Z	 d dl
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 ed
¬«      	 	 	 ddedej4                  j6                  deegef   deeeef      dee   dee   fd„«       Zy)é    N)ÚAnyÚCallableÚDictÚListÚOptionalÚSet)ÚOrderedDict)Úcompatibility)ÚGraphModule)ÚNode)Úlazy_format_graph_codeÚ	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     ú_/root/repos/pocs/video-evals/.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$   ÚmÚroot_mÚsplit_callbackÚqualname_mapÚkeep_original_orderÚkeep_original_node_namec                 óþ  ‡ ‡‡‡0‡=‡>‡?‡@‡A‡B‡C‡D— 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 ŠBi Š@i ŠDdt        dt        t           fˆBˆDfd„ŠCˆBˆfd„}t        j                  j                  t        j                  j                  t        j                  j                   g}	t#        «       }
t#        «       }i }d
}t%        «       }‰ j&                  j(                  D �]x  Š0‰0j*                  j-                  d«      x}�ct/        |t        j0                  «      rIt/        |j2                  j4                  x}|j6                  «      r|‰Dvr‰0‰D|j2                  j4                  <   ‰0j8                  dv rŒ“ |‰0«       ‰0j8                  dk(  �r‘‰0j:                  |	v �r‚‰0j:                  t        j                  j                   k(  rRt=        ‰0j>                  «      dk(  sJ ‚t/        ‰0j>                  d	   t@        «      sJ ‚‰0}t%         ‰‰0«      h«      |
|<   �n	‰0j:                  t        j                  j                  k(  rJtC        d„ ‰0j>                  D «       «      sJ ‚|jE                  ‰0«       t%         ‰‰0«      h«      |‰0<   d
|‰0<   n˜‰0j:                  t        j                  j                  k(  rqt=        ‰0j>                  «      dk(  sJ ‚|‰0j>                  d	      jE                   ‰‰0«      «       |jG                  ‰0j>                  d	   «       ‰0|‰0j>                  d	   <   |�|
|   jE                   ‰‰0«      «       |D ]  }||   jE                   ‰‰0«      «       Œ �Œ{ tC        d„ |jI                  «       D «       «      sJ d«       ‚|jK                  «       D ��ci c]  \  }}|tM        |«      “Œ }}}|
jK                  «       D ��ci c]  \  }}|tM        |«      “Œ }
}}tN        jQ                  tR        jT                  «      r,tN        j                  d|«       tN        j                  d|
«       tA        |«      xs tA        |
«      }d}‰ j&                  j(                  D �]  Š0‰0‰@‰0jV                  <   ‰0j8                  dv rŒ"‰0j8                  dk(  r;t        j                  j&                  jY                  ‰0j>                  d	   ˆCfd„«       Œl|r ‰‰0«      }||k  sJ d|› d|› �«       ‚|}‰0j:                  |	vsŒ™t        j                  j&                  jY                  ‰0j>                  ˆ0ˆCfd„«       t        j                  j&                  jY                  ‰0jZ                  ˆ0ˆCfd„«       �Œ t]        ‰Bj_                  «       «      }g }‰BjK                  «       D ],  \  }ŠAt=        ‰Aj`                  «      rŒ|jc                  |«       Œ. g }|rw|je                  «       }|jc                  |«       ‰B|   jf                  D ]A  }‰B|   j`                  je                  |«       ‰B|   j`                  rŒ1|jc                  |«       ŒC |rŒwt=        |«      t=        ‰B«      k7  rti        d «      ‚||
fD ]æ  }|jK                  «       D ]Ñ  \  Š0}t=        |«      d	kD  sJ ‚‰0‰Bt        |d	   «         jj                  ‰0<   |dd
 D ]–  }‰Bt        |«         ŠA‰Aj&                  jm                  ‰0j8                  ‰0j:                  to        d!„ ‰0j>                  D «       «      i ‰0jp                  ¬"«      } ‰0j*                  js                  «       | _        | ‰Ajj                  ‰0<   Œ˜ ŒÓ Œè |D ]v  }‰B|   ŠA‰Ajt                  D ]`  }!‰Aj&                  jw                  |!‰@|!   jp                  ¬#«      }"‰@|!   j*                  js                  «       |"_        |"‰Ajj                  ‰@|!   <   Œb Œx ‰ j&                  j(                  D �]â  Š0ty        ‰0d$«      sŒ‰B‰0jz                     ŠA‰Ajj                  Š?t        j                  j&                  jY                  ‰0j>                  ˆ?fd%„«      }#t        j                  j&                  jY                  ‰0jZ                  ˆ?fd&„«      }$‰0j8                  d'vr‰0j:                  }%n—‰0j:                  j}                  d(«      }&‰ }'|&D ]3  }(ty        |'|(«      st        d)‰0j:                  › d*�«      ‚t�        |'|(«      }'Œ5 d+jƒ                  |&«      }%|'‰Aj„                  |%<   |� ‰Aj†                  › d(|%› �})‰0j:                  ||)<   t/        |#tn        «      sJ ‚t/        |$tˆ        «      sJ ‚‰r‰0jV                  nd
}*‰Aj&                  jm                  ‰0j8                  |%|#|$‰0jp                  |*¬,«      } ‰0j*                  js                  «       | _        | ‰Ajj                  ‰0<   �Œå |fD ]¸  }t‹        |«      D ]¨  Š0|‰0   }t=        |«      d	kD  sJ ‚|d
d D ]‰  }‰Bt        |«         ŠA|‰0   }+|+€J d-«       ‚‰Aj&                  jm                  |+j8                  |+j:                  ‰Ajj                  ‰0   fi |+jp                  ¬"«      } |+j*                  js                  «       | _        Œ‹ Œª Œº i },i Š=t        j                  j&                  j�                  «       Š>i }-|s)‰ j&                  j(                  D ]  Š0 |‰0‰=|-«      \  Š=}-Œ n*‰ j&                  j(                  D ]  Š0‰0|,‰0jV                  <   Œ |s|n|}.t%        «       }/‰ j&                  j(                  D �0cg c]  }0|0j8                  d.k(  sŒ|0‘Œ }1}0|.D �]  }‰B|   ŠAto        ˆ@ˆAfd/„‰AjŽ                  D «       «      }2t=        |2«      }3|3dk(  r‰Aj&                  j‘                  |2d	   «       n |3dkD  r‰Aj&                  j‘                  |2«       |ru‰Ajt                  D �4cg c]  }4|4|1vsŒ|,|4   ‘Œ }5}4|1D ]%  Š0‰0|/v rŒ |‰0‰=|-«      \  Š=}6|/jE                  ‰0«       Œ' |5D ]%  Š0‰0|/v rŒ |‰0‰=|-«      \  Š=}-|/jE                  ‰0«       Œ' t        j                  j                  j                  ‰Aj„                  ‰Aj&                  «      |-‰Aj†                  <   ‰>j“                  ‰Aj†                  to        ˆ=fd0„‰Ajt                  D «       «      «      }7t=        ‰AjŽ                  «      }8|8dkD  rZt        j                  j”                  j—                  |7«      }9t™        ‰AjŽ                  «      D ]  \  }:};|9|:   j2                  ‰=|;<   Œ �Œå|8dk(  s�Œì|7‰=t›        t�        ‰AjŽ                  «      «      <   �Œ ‰ j&                  j(                  D ][  Š0‰0j8                  dk(  sŒ‰>j‘                  t        j                  j&                  jY                  ‰0j>                  d	   ˆ=fd1„«      «       Œ] t        j                  j                  j                  |-‰>«      }<t         j                  dt        d2|<d¬«      «       |<S c c}}w c c}}w c c}0w c c}4w )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                 ó¶  •— | 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                     _        ‰	}| j                  j                  d«      D ]3  }t        ||«      st!        d| j                  › d	�«      ‚t#        ||«      }Œ5 ||| j                  <   ||fS )
NÚplaceholderr   r,   )ÚargsÚ	type_expr)r;   Údefault_valueÚget_attrú.zNode target ú not found!)ÚopÚlenr:   ÚinspectÚ	SignatureÚemptyÚcreate_noder   Útyper9   ÚtargetÚmetaÚcopyr=   ÚsplitÚhasattrÚAttributeErrorÚgetattr)
r5   r6   r7   r<   r:   Úattr_valÚatomÚbase_mod_graphr2   r-   s
          €€€r"   Úconstruct_graphz%split_module.<locals>.construct_graphš   s�  ø€ ð
 �7‰7�mÓ#ä # D§I¡I£°Ò 2�—	‘	˜!’¼×8IÑ8I×8OÑ8Oð ñ 'Ø*¬g×.?Ñ.?×.EÑ.EÑE‘rÈMÐK[�Ø*8×*DÑ*DÀ]ÐTX×T]ÑT]ÐdhÐtx×t}Ñt}Ð*DÓ*~�˜TŸY™YÒ'à*8×*DÑ*DØ—K‘K¨4¯9©9ÀMð +Eó +�˜TŸY™YÑ'ð ,0¯9©9¯>©>Ó+;ˆL˜Ÿ™Ñ#Ô(ð ˜^Ð+Ð+ð �W‰W˜
Ò"Ø&4×&=Ñ&=¸d¿k¹kÓ&JˆL˜Ÿ™Ñ#Ø+/¯9©9¯>©>Ó+;ˆL˜Ÿ™Ñ#Ô(ØˆHØŸ™×)Ñ)¨#Ó.ò 3�Ü˜x¨Ô.Ü(¨<¸¿¹°}ÀKÐ)PÓQÐQÜ" 8¨TÓ2‘ð3ð +3ˆ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)Úkeyr9   )Ú%torch.fx.experimental.symbolic_shapesrU   rM   ÚlogÚdebugr   r   Ú
setdefaultr   r   rH   ÚgetÚsortedr+   r@   r   )rR   rS   rU   Ú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¥  ø€ õ 	Gä˜( O°TÓ:ˆÜ�x °$Ó7ˆä�	‰	Ø8Ø�M‰M˜7°XÐ5I H§M¢MÈsÐTXô	
ð
 �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   ÚappendrV   )r5   Úpartition_nameÚ	partitionri   r/   s      €€r"   Ú"instantiate_node_partition_mappingz8split_module.<locals>.instantiate_node_partition_mappingë   sq   ø€ Ü™^¨DÓ1Ó2ˆÜ�	‰	Ð>ÀÇ	Á	È>ÔZð —N‘N >Ó2ˆ	ØÐÜ5>¸~Ó5NÐNˆJ�~Ñ&¨à×Ñ×#Ñ# D§I¡IÔ.Ø+ˆÕr$   rX   )r9   r=   ÚoutputÚcall_functioné   c              3   ó>   K  — | ]  }t        |t        «       –— Œ y ­w©N)Ú
isinstancer   ©Ú.0Úargs     r"   ú	<genexpr>zsplit_module.<locals>.<genexpr>/  s   è ø€ ÒJ¸œz¨#¬tÓ4Ô4ÑJùs   ‚c              3   ó$   K  — | ]  }|d u–— Œ
 y ­wru   r,   )rx   Úvs     r"   rz   zsplit_module.<locals>.<genexpr>?  s   è ø€ Ò> ˆq˜Œ}Ñ>ùs   ‚zautocast must exitzautocast_regions: %szgrad_regions: %séÿÿÿÿ)r9   r=   rq   c                 ó   •—  ‰| d «      S ru   r,   )Únrk   s    €r"   ú<lambda>zsplit_module.<locals>.<lambda>U  s   ø€ Ñ(BÀ1ÀdÓ(K€ r$   zRautocast or set_grad_enabled require monotonically increasing partitions:highest: z, this node's: c                 ó   •—  ‰| ‰«      S ru   r,   ©rR   r5   rk   s    €€r"   r€   zsplit_module.<locals>.<lambda>d  s   ø€ Ñ,FÀxÐQUÓ,V€ r$   c                 ó   •—  ‰| ‰«      S ru   r,   r‚   s    €€r"   r€   zsplit_module.<locals>.<lambda>g  s   ø€ Ñ.HÈÐSWÓ.X€ r$   z cycle exists between partitions!c              3   ó    K  — | ]  }|–— Œ y ­wru   r,   rw   s     r"   rz   zsplit_module.<locals>.<genexpr>‡  s   è ø€ Ò8 sœsÑ8ùs   ‚)r@   rG   r:   Úkwargsr;   )r;   rV   c                 ó   •— ‰|    S ru   r,   ©r   r   s    €r"   r€   zsplit_module.<locals>.<lambda>   s   ø€ ÈÐTUÉ€ r$   c                 ó   •— ‰|    S ru   r,   r‡   s    €r"   r€   zsplit_module.<locals>.<lambda>¢  s   ø€  {°1¡~€ r$   )Úcall_moduler=   r>   zOperator target r?   Ú_)r@   rG   r:   r…   r;   r   zMissing exit noder9   c              3   óB   •K  — | ]  }‰j                   ‰|      –— Œ y ­wru   )r   )rx   r   Ú
orig_nodesro   s     €€r"   rz   zsplit_module.<locals>.<genexpr>ý  s&   øè ø€ ò 
Ø8<ˆI×!Ñ! *¨TÑ"2Õ3ñ
ùs   ƒc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wru   r,   )rx   r   r6   s     €r"   rz   zsplit_module.<locals>.<genexpr>&  s   øè ø€ ÒB¨�,˜tÕ$ÑBùs   ƒc                 ó"   •— ‰| j                      S ru   )r   )r   r6   s    €r"   r€   zsplit_module.<locals>.<lambda>5  s   ø€ ¸|ÈAÏFÉFÑ?S€ r$   zpost split_module)Or[   r\   r   r   r   r+   r   r   Úgraph_moduler   Úsympyr   ÚampÚ_enter_autocastÚ_exit_autocastÚ_CÚ_set_grad_enabledr	   Úsetr   ÚnodesrH   r^   rv   ÚSymIntr5   ÚexprÚSymbolr@   rG   rA   r:   ÚboolÚallÚaddÚremoveÚvaluesÚitemsr_   Ú_LOGGERÚisEnabledForÚloggingÚDEBUGr   Úmap_argr…   ÚlistÚkeysr   rm   Úpopr   ÚRuntimeErrorr   rE   ÚtuplerF   rI   r   r9   rK   rV   rJ   rL   rM   Újoinr    r   ÚdictÚreversedr   r   rq   r‰   ÚproxyÚProxyÚ	enumerateÚnextÚiter)Er-   r.   r/   r0   r1   r2   rQ   r�   rp   Ú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_partitionsrn   Úsorted_partitionsÚroot_partitionÚ	dependentÚregions_mappingÚregionsÚrÚnew_nodeÚinpr9   Úgathered_argsÚgathered_kwargsrG   Útarget_atomsÚtarget_attrrO   Úqualnamer   Ú	exit_nodeÚorig_mod_envr7   Úconstruct_order_partitionsÚalready_constructed_attr_nodesr5   Úoriginal_orderÚoutput_valsÚnum_output_valsrY   Úorig_mod_attr_nodesÚbased_mod_attrsÚ
output_valÚnum_outputsÚoutput_val_proxyÚiÚoutput_nameÚretr6   rP   r   rŒ   ro   ri   rk   rj   sE   ` `  `                                          `            @@@@@@@@r"   r   r   +   sn  ÿû€ ôP ‡I�IØÜØ ¨4ô	
ôð,Üð,äœ3¤˜9‘oð,ô œS¤%§(¡(×"7Ñ"7×"CÑ"CÐCÑD÷,ó8 à')€JØ"$€JØ/1€Nð-CÜð-CÜ"*¬4¡.ö-Cõ^
,ô 	�	‰	×!Ñ!Ü�	‰	× Ñ Ü�‰×"Ñ"ðÐô 1<³€Lô 5@³MÐØ13€Nà€KÜ“uÐà—‘—‘ó +:ˆð —I‘I—M‘M /Ó2Ð2ˆSÐ?Ü�sœEŸL™LÔ)Ü˜SŸX™XŸ]™]Ð*�r¨E¯L©LÔ9Ø�nÑ$à,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Ø$¨Ò+ð FðØ.Ð/¨¸s¸eðEóFÐ+ð !$Ðð �;‰;Ð0Ò0Ü�H‰H�N‰N×"Ñ"Ø—	‘	ÔVôô �H‰H�N‰N×"Ñ"Ø—‘ÔXöð5ô<  $ 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ó �ð !%§	¡	§¡Ó 0�”Ø.6�	×%Ñ% dÒ+ñ
7ñ	7ð7ð" ,ò AˆØ˜~Ñ.ˆ	Ø×#Ñ#ò 	AˆCØ#Ÿ/™/×5Ñ5ØØ$ S™/×.Ñ.ð 6ó ˆKð  *¨#™×3Ñ3×8Ñ8Ó:ˆKÔØ5@ˆI×!Ñ! *¨S¡/Ò2ñ	AðAð —‘—‘ó *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ØŸ™‘à#Ÿ{™{×0Ñ0°Ó5�Ø�Ø(ò =�DÜ" ;°Ô5Ü,Ð/?ÀÇÁ¸}ÈKÐ-XÓYÐYÜ")¨+°tÓ"<‘Kð=ð
 Ÿ™ ,Ó/�Ø,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×!Ñ! $Ó'ðU*3ðZ -Ð-ò 6ˆÜ˜_Ó-ò 	6ˆDØ% dÑ+ˆGÜ�w“< !Ò#Ð#Ð#Ø˜S˜b�\ò 6�Ø&¤s¨1£vÑ.�	Ø*¨4Ñ0�	Ø Ð,ÐAÐ.AÓAÐ,Ø$Ÿ?™?×6Ñ6Ø —|‘|Ø$×+Ñ+Ø#×/Ñ/°Ñ5Ð7ØØ'Ÿn™nð 7ó �ð !*§¡× 3Ñ 3Ó 5�•ñ6ñ	6ð6ð$ %'€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ó 7EˆØ˜~Ñ.ˆ	ô ô 
Ø@I×@QÑ@Qô
ó 
ˆô
 ˜kÓ*ˆØ˜aÒØ�O‰O×"Ñ" ;¨q¡>Õ2Ø˜qÒ Ø�O‰O×"Ñ" ;Ô/áð .7×-=Ñ-=ö/Ø&)ÀÈNÒAZ�˜SÓ!ð/Ðð /ð 'ò 9�ØÐ9Ñ9ØÙ0?Ø˜,¨ó1Ñ-�˜oð /×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ðo7Eðr —‘—‘ò ˆØ�7‰7�hÓØ×!Ñ!Ü—‘—‘×&Ñ& t§y¡y°¡|Ó5SÓTõðô �(‰(×
Ñ
×
+Ñ
+¨N¸NÓ
K€CÜ‡I�IØÜØ ¨dô	
ôð €Jùó} KùÛBùòj Rùò&/s$   Ï&y)Ðy/í:y5îy5ð	y:ð(y:)NFF) rB   Útypingr   r   r   r   r   r   Úcollectionsr	   r£   r   Útorch.fx._compatibilityr
   Útorch.fx.graph_moduler   Útorch.fx.noder   Útorch.fx._utilsr   Ú__all__Ú	getLoggerr(   r[   r¡   r   ÚnnÚModuleÚintr+   r›   r   r,   r$   r"   ú<module>ré      sî   ðã ß ;× ;Ý #Û ã Ý 1Ý -Ý Ý 2ð ˜Ð
'€Ø!�×!Ñ! (Ó+Ð +€€gá dÔ+÷
ð 
ó ,ð
ñ2  dÔ+ð
 .2Ø*/Ø.3ñSØðSà�H‰H�O‰OðSð ˜d˜V S˜[Ñ)ðSð ˜4  S ™>Ñ*ð	Sð
 " $™ðSð & d™^òSó ,ñSr$   