Ë
    g^(hÓC  ã                   óp  — 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mZ d dl	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	lmZmZ  e«       Ze G d
„ d«      «       Z G d„ dej                  j4                  «      Zd„ Zd„ Zd„ Zd„ Zd„ Z e G d„ d«      «       Z!efddddddœdejD                  de
fd„Z#y)é    N)Ú	dataclass)ÚpartialÚwraps)ÚCallable)Útqdm)ÚStorageWeakRef)ÚContentStoreWriteré   )Úget_outputsÚget_placeholdersc                   ój   — e Zd ZU ee   ed<   ee   ed<   ej                  ed<   ej                  ed<   y)ÚLoadTensorMetaÚsizeÚstrideÚdtypeÚdeviceN)	Ú__name__Ú
__module__Ú__qualname__ÚlistÚintÚ__annotations__Útorchr   r   © ó    úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_functorch/fx_minifier.pyr   r      s)   … à
ˆs‰)ƒOØ�‰IÓØ�;‰;ÓØ�L‰LÔr   r   c                   ó:   ‡ — e Zd Zdddœˆ fd„
Zˆ fd„Zˆ fd„Zˆ xZS )ÚConcretePropNF©ÚwriterÚskip_offloadc                ó^   •— t         ‰| �  |«       || _        || _        t	        «       | _        y ©N)ÚsuperÚ__init__r    r!   ÚsetÚseen_storages)ÚselfÚmodr    r!   Ú	__class__s       €r   r%   zConcreteProp.__init__    s)   ø€ Ü‰Ñ˜ÔØˆŒØ(ˆÔÜ ›UˆÕr   c                 ó   •— | j                   j                  d«       t        ‰| �  |«      }|j                  }t        |t        j                  «      �r| j                  €||j                  d<   |S t        |j                  «       «      | j                  v rd |j                  d<   |S | j                  s:| j                  j                  t        j                   j#                  d|«      |«       t%        |j'                  «       |j)                  «       |j*                  |j,                  «      |j                  d<   | j                  j/                  t        |j                  «       «      «       |S t0        |j                  d<   |S )Nr
   Úconcrete_valueÚeager)ÚpbarÚupdater$   Úrun_nodeÚnameÚ
isinstancer   ÚTensorr    Úmetar   Úuntyped_storager'   r!   Úwrite_tensorÚosÚpathÚjoinr   r   r   r   r   ÚaddÚis_tuple)r(   ÚnÚrr1   r*   s       €r   r0   zConcreteProp.run_node&   s1  ø€ Ø�	‰	×Ñ˜ÔÜ‰GÑ˜QÓˆØ�v‰vˆä�aœŸ™Õ&Ø�{‰{Ð"Ø+,�—‘Ð'Ñ(ð  ˆô " !×"3Ñ"3Ó"5Ó6¸$×:LÑ:LÑLð 04�A—F‘FÐ+Ñ,ð ˆð  ×,Ò,ØŸ™×0Ñ0´·±·±¸gÀtÓ1LÈaÔPÜ/=ØŸ™› !§(¡(£*¨a¯g©g°q·x±xó0�A—F‘FÐ+Ñ,ð ×&Ñ&×*Ñ*¬>¸!×:KÑ:KÓ:MÓ+NÔOð ˆô (0ˆA�F‰FÐ#Ñ$àˆr   c                 ó  •— t        dt        | j                  j                  j                  «      | j
                  d u ¬«      5 }|| _        t        ‰| �   |Ž }| j                  s|j                  d«       |cd d d «       S # 1 sw Y   y xY w)Nz(Saving intermediates for delta debugging)ÚdescÚtotalÚdisablezESaved!  To skip next time, run with --skip-saving-eager-intermediates)r   ÚlenÚmoduleÚgraphÚnodesr    r.   r$   Úrunr!   Úset_description)r(   Úargsr.   r=   r*   s       €r   Ú	propagatezConcreteProp.propagate?   s€   ø€ ÜØ;Ü�d—k‘k×'Ñ'×-Ñ-Ó.Ø—K‘K 4Ð'ô
ð 	ð ØˆDŒIÜ‘‘˜TÐ"ˆAØ×$Ò$Ø×$Ñ$Ø[ôð ÷	÷ 	ò 	ús   Á2A?Á?B)r   r   r   r%   r0   rI   Ú__classcell__)r*   s   @r   r   r      s   ø„ Ø&*¸ö #ô÷2ð r   r   c                 ó˜   — | j                   dk(  xr: | j                  t        j                  j                  j
                  j                  u S )NÚcall_function)ÚopÚtargetr   ÚopsÚ
debugprimsÚload_tensorÚdefault)Únodes    r   Úis_load_tensor_noderT   N   s;   € à�‰�?Ñ"ò 	DØ�K‰Kœ5Ÿ9™9×/Ñ/×;Ñ;×CÑCÐCðr   c                 ó  — |j                   dk(  s|j                   dk(  ryt        |«      ry|j                  j                  dd «      }t	        |t
        j                  «      r8d|_         |j                  |_        d|_	        i |_
        |j                  |«       y|€y|t        u r/d}t        |j                  «      D ]  }t        | ||«      xs |}Œ |S t	        |t         «      rŸd|_         t
        j"                  j$                  j&                  j(                  |_        t*        j,                  j/                  d|j                  «      |j0                  |j2                  f|_	        |j4                  |j6                  d	œ|_
        yy)
NÚoutputÚplaceholderFr,   r   TrL   r-   )r   r   )rM   rT   r4   Úgetr2   r   r3   r1   rN   rH   ÚkwargsÚappendr;   r   ÚusersÚ_convert_node_to_placeholderr   rO   rP   rQ   rR   r7   r8   r9   r   r   r   r   )rD   rS   ÚinpsÚconcrete_valr=   Ú
tuple_users         r   r\   r\   V   sG  € Ø‡w�w�(Ò˜dŸg™g¨Ò6Øä˜4Ô Øà—9‘9—=‘=Ð!1°4Ó8€Lä�,¤§¡Ô-ØˆŒØ—i‘iˆŒØˆŒ	ØˆŒà�‰�LÔ!Øà	Ð	Øà	œÑ	!ØˆÜ˜tŸz™zÓ*ò 	KˆJÜ,¨U°JÀÓEÒJÈ‰Að	Kð ˆä	�L¤.Ô	1Ø!ˆŒÜ—i‘i×*Ñ*×6Ñ6×>Ñ>ˆŒä�G‰G�L‰L˜ $§)¡)Ó,Ø×ÑØ×Ñð
ˆŒ	ð #×)Ñ)Ø!×'Ñ'ñ
ˆŒð àr   c                 ó€   — t        j                  «       › d�}t        j                  |d¬«       ddlm}  || ||«       y)z¤
    Takes minified FX graph as primary input, and ports it to HLO via StableHLO
    Provides minified HLO graph as output, and archive them to local directory
    z
/hlo_filesT)Ú	exists_okr   )Úsave_torch_model_as_stablehloN)r7   ÚgetcwdÚmakedirsÚtorch_xla.stablehlorb   )Úminified_fx_graphÚinputsÚhlo_dirrb   s       r   Úcreate_minified_hlo_graphri   †   s4   € ô
 —‘“�˜ZÐ(€GÜ‡K�K� 4Õ(åAá!Ð"3°V¸WÕEr   c                 óø   — t        dt        | j                  j                  «      › d|D �cg c]/  }|j                  |j
                  |j                  j                  f‘Œ1 c}› d| j                  › d�«       y c c}w )Nz
# Working Repro with z nodes
inps = zo
inps = [torch.zeros(())] + [torch.ones(shape, dtype=dtype, device=device) for (shape, dtype, device) in inps]
ú
)	ÚprintrB   rD   rE   Úshaper   r   ÚtypeÚcode)Úfx_gr]   Úis      r   Ú
dump_staterr   “   sn   € Ü	ðÜ˜$Ÿ*™*×*Ñ*Ó+Ð,ð -Ø48Ö9¨qˆ!�'‰'�1—7‘7˜AŸH™HŸM™MÒ	*Ò9Ð:ð ;à‡�€ð ð		õùò 	:s   «4A7c                 ó$   — | dk(  ry| | dz
  z  dk(  S )Nr   Fr
   r   )r<   s    r   Úis_power_of_twort   ž   s   € ØˆA‚vØØ��Q‘‰K˜AÑÐr   c                   óV   — e Zd ZU ej                  ed<   eej                     ed<   d„ Z	y)Ú
ReproStaterD   r]   c                 ót   — t        | j                  «      }t        |«      t        | j                  «      k(  sJ ‚y r#   )r   rD   rB   r]   )r(   Úph_nodess     r   Ú__post_init__zReproState.__post_init__©   s*   € Ü# D§J¡JÓ/ˆÜ�8‹}¤ D§I¡I£Ò.Ð.Ñ.r   N)
r   r   r   ÚfxÚGraphr   r   r   r3   ry   r   r   r   rv   rv   ¤   s   … à�8‰8ƒOØ
ˆu�|‰|Ñ
Óó/r   rv   F)Úsave_dirÚoffload_to_diskr!   Úskip_sanityÚmax_granularityÚfail_frr   c          
      ó€  ‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡ — t        |t        t        f«      sJ ‚‰ j                  }	t	        |	j
                  «      }
|�t        |«      st        d|› d�«      ‚dŠˆ fd„Šˆ ˆˆfd„Šd}|rt        |«      } t        ‰ ||¬«      j                  |Ž  |s ‰|	|«      st        d«      ‚t        d	|
› d
�t        j                  ¬«       dt        dt        fˆˆfd„Šdt        fˆfd„} |d«      ˆfd„«       Š |d«      ˆfd„«       Šdt         fd„Š dt         fˆˆ fd„Šˆfd„}  |d«      |«      Š |d«      ˆfd„«       Šd„ Š |d«      dt"        j$                  fˆˆˆˆ fd„«       Š |d«      ˆˆfd „«       Št!        |	|«      }ˆˆˆˆˆˆfd!„}	  |t#        j&                  ‰ |j                  «      |j(                  «       t+        d#t-        j.                  t-        j0                  t	        |j                  j
                  «      «      «      z  «      }|�t3        ||«      } |||d"¬$«      }|�|}Œ¡|d#z  }d%}|d&k\  r |||d%¬$«      }|�|}d"}n|d#z  }|d&k\  rŒ|rŒÍ ‰|d&«      }|�|}ŒÛ	  ‰|j                  |j(                  «      st        d'«      ‚t        d(‰› d)�t        j                  ¬«       t#        j&                  ‰ |j                  «      }d*t4        j6                  v rt9        ||j(                  «        |||j(                  «       t        d+t        j                  ¬«       ||j(                  fS ),aF  
    Minimizes a FX graph with given inputs, such that the resulting FX graph still returns True for module_fails.

    Does 2 main strategies:
    1. Truncates suffix: Removes some suffix from the graph and sets a new output.
    2. Delta Debugging: Tries replacing half of the graph with inputs. If fails,
        tries replacing quarter of the graph, etc.

    >>> # xdoctest: +SKIP(failing)
    >>> failing_function = fx.symbolic_trace(f)
    >>> minimize(failing_function, [torch.randn(5)], lambda fx_g, inps: fx_g(*inps))

    note: module_fails returns True if it fails.
    Nzmax_granularity z not power of twor   c                 ój   •— t        j                  ‰t        j                  | «      «      j                  S r#   )rz   ÚGraphModuleÚcopyÚdeepcopyrD   )Úfx_graphr€   s    €r   Údeepcopy_fx_graphz#minifier.<locals>.deepcopy_fx_graphÒ   s#   ø€ Ü�~‰~˜f¤d§m¡m°HÓ&=Ó>×DÑDÐDr   c                 óª   •— t        j                  | «      } ‰dz  Št        j                  ‰| «      }|j                  j                  «         ‰||«      S )Nr
   )r„   r…   rz   rƒ   rD   Úlint)rD   r]   r)   r€   Úmodule_failsÚnum_queriess      €€€r   Úgraph_failszminifier.<locals>.graph_failsÕ   sF   ø€ ä—‘˜eÓ$ˆØ�qÑˆÜ�n‰n˜V UÓ+ˆØ�	‰	�‰ÔÙ˜C Ó&Ð&r   r   z#Input graph did not fail the testerzStarted off with ú nodes©ÚfileÚstrategyr1   c                 óH   •‡ ‡— t        ‰ «      ddt        fˆˆˆˆ fd„«       }|S )NÚ	old_statec                 óX  •— t        t        j                  ¬«       t        d‰› d|› dt        | j                  j
                  «      › dt        | j                  «      › d�	t        j                  ¬«        ‰ ‰
| j                  «      t        | j                  «      |«      }|��it        |j                  j
                  «      }t        | j                  j
                  «      }t        |j                  «      }t        | j                  «      }t        t        |j                  «      «      }t        t        | j                  «      «      }d}	||k  r$d}	t        d	|› d
|› d�t        j                  ¬«       ||kD  r$d}	t        d	|› d
|› d�t        j                  ¬«       ||k  r$d}	t        d	|› d
|› d�t        j                  ¬«       |	st        d«      ‚ ‰|j                  |j                  «      st        dt        j                  ¬«       y |S t        d‰› �t        j                  ¬«       y )NrŽ   z
Strategy: z (G: z) (z nodes, z inputs)FTzSUCCESS: Went from z to r�   z inputsz outputsz$Success raised but no progress made?z=WARNING: Something went wrong, not applying this minificationzFAIL: )
rl   ÚsysÚstderrrB   rD   rE   r]   r   r   ÚRuntimeError)r’   ÚgranularityÚ	new_stateÚ	new_nodesÚ	old_nodesÚnew_inpsÚold_inpsÚnew_outsÚold_outsÚprogress_mader‡   rŒ   r1   r�   s             €€€€r   Únew_funcz6minifier.<locals>._register_strategy.<locals>.new_funcç   sÞ  ø€ ä”s—z‘zÕ"ÜØ˜T˜F %¨ }ð 5Ü˜	Ÿ™×-Ñ-Ó.Ð/¨x¼¸I¿N¹NÓ8KÐ7LÈHðVä—Z‘Zõñ
 !Ù! )§/¡/Ó2´D¸¿¹Ó4HÈ+óˆIð Ñ$Ü 	§¡× 5Ñ 5Ó6�	Ü 	§¡× 5Ñ 5Ó6�	Ü˜yŸ~™~Ó.�Ü˜yŸ~™~Ó.�Üœ{¨9¯?©?Ó;Ó<�Üœ{¨9¯?©?Ó;Ó<�Ø %�Ø˜yÒ(Ø$(�MÜØ-¨i¨[¸¸Y¸KÀvÐNÜ ŸZ™Zõð ˜hÒ&Ø$(�MÜØ-¨h¨Z°t¸H¸:ÀWÐMÜ ŸZ™Zõð ˜hÒ&Ø$(�MÜØ-¨h¨Z°t¸H¸:ÀXÐNÜ ŸZ™Zõñ
 %Ü&Ð'MÓNÐNá" 9§?¡?°I·N±NÔCÜØWÜ ŸZ™Zõð  Ø Ð ä˜˜t˜f�o¬C¯J©JÕ7Ør   )r
   )r   rv   )r�   r1   r    r‡   rŒ   s   `` €€r   Ú_register_strategyz$minifier.<locals>._register_strategyæ   s(   ú€ Ü	ˆx‹ñ1	¤
÷ 1	ó 
ð1	ðf ˆr   c                 ó   •— t        ‰| ¬«      S )N)r1   )r   )r1   r¡   s    €r   Úregister_strategyz#minifier.<locals>.register_strategy  s   ø€ ÜÐ)°Ô5Ð5r   zTruncate suffixc                 óì  •‡	— t        «       }t        j                  «       }i Š	t        | j                  «      D ]º  \  }}|j                  |ˆ	fd„«      }|j                  dvr�||z  dk(  r…||dz  z  dk7  rz||vrv|j                  |f«      }t        |j                  «      t        | j                  «      k  r ‰
||«      rt        ||«      c S |j                  |«       |j                  |«       |‰	|<   Œ¼ y )Nc                 ó   •— ‰|    S r#   r   ©ÚxÚenvs    €r   ú<lambda>z1minifier.<locals>.remove_suffix.<locals>.<lambda>&  s   ø€ ¸3¸q¹6€ r   )rW   rV   r   é   )r&   rz   r{   Ú	enumeraterE   Ú	node_copyrM   rV   rB   rv   r:   Ú
erase_node)Ú	cur_graphÚcur_inpsr—   ÚtestedÚ	new_graphÚidxrS   Únew_nodeÚoutput_noder¨   rŒ   s            @€r   Úremove_suffixzminifier.<locals>.remove_suffix   sí   ù€ ä“ˆÜ—H‘H“Jˆ	ØˆÜ" 9§?¡?Ó3ò 	!‰IˆC�Ø ×*Ñ*¨4Ó1AÓBˆHØ�w‰wÐ7Ñ7ð ˜+Ñ%¨Ò*Ø ¨a¡Ñ0°AÒ5Ø 6Ñ)à"+×"2Ñ"2°H°;Ó"?�KÜ˜9Ÿ?™?Ó+¬c°)·/±/Ó.BÒBÁ{Ø! 8ôHô  *¨)°XÓ>Ò>àŸ
™
 3œØ!×,Ñ,¨[Ô9Ø ˆC�ŠIð#	!ð$ r   zRemove outputsc                 óÂ  •— t        d|dz  «      }t        | j                  «      D ]  \  }}||_        |j                  dk(  sŒ|} n t        j                  d   t        j                  «      ry t        |j                  d   d„ ¬«      }t        |«      dk(  ry t        dt        |«      |«      D ]-  }|d | |||z   d  z   f|_         ‰| |«      sŒ!t        | |«      c S  y )Nr
   rª   rV   r   c                 ód   — t        | t        j                  «      r| j                  S t	        d«      S )Ng    eÍÍA)r2   rz   ÚNoder²   r   )r§   s    r   r©   z2minifier.<locals>.remove_outputs.<locals>.<lambda>F  s    € ´:¸aÄÇÁÔ3I¨!¯%©%€ ÌsÐSVËx€ r   )Úkey)Úmaxr«   rE   r²   rM   r2   rH   rz   r¸   ÚsortedrB   Úrangerv   )r®   r¯   r—   r²   rS   rV   Úoutput_argsrŒ   s          €r   Úremove_outputsz minifier.<locals>.remove_outputs9  sì   ø€ ä˜!˜[¨AÑ-Ó.ˆÜ" 9§?¡?Ó3ò 	‰IˆC�ØˆDŒHØ�w‰w˜(Ó"Ø�Ùð		ô �f—k‘k !‘n¤b§g¡gÔ.ØäØ�K‰K˜‰NÑ Wô
ˆô ˆ{Ó˜qÒ Øä˜œC Ó,¨kÓ:ò 	7ˆCØ& t¨Ð,¨{¸3ÀÑ;LÐ;NÐ/OÑOÐQˆFŒKÙ˜9 hÕ/Ü! )¨XÓ6Ò6ð	7ð r   Ú	cur_statec                 ó€  — | j                   }| j                  }t        |«      }t        |«      t        |«      k(  sJ ‚g }t	        t        |«      «      D ]F  }t        ||   j
                  «      dk(  r|j                  ||   «       Œ3|j                  ||   «       ŒH t        |«      t        |«      k  rt        ||«      S y )Nr   )	rD   r]   r   rB   r¼   r[   r­   rZ   rv   )r¿   r®   r¯   rx   r›   r²   s         r   Úremove_unused_inputs_uncheckedz0minifier.<locals>.remove_unused_inputs_uncheckedQ  s¬   € Ø—O‘Oˆ	Ø—>‘>ˆÜ# IÓ.ˆÜ�8‹}¤ H£Ò-Ð-Ð-àˆÜœ˜X›Ó'ò 	/ˆCÜ�8˜C‘=×&Ñ&Ó'¨1Ò,Ø×$Ñ$ X¨c¡]Õ3à—‘ ¨¡Õ.ð		/ô
 ˆx‹=œ3˜x›=Ò(Ü˜i¨Ó2Ð2Ør   c                 óX   •—  ‰| «      }|� ‰|j                   |j                  «      r|S y r#   )rD   r]   )r¿   r˜   rŒ   rÁ   s     €€r   Úremove_unused_inputs_checkedz.minifier.<locals>.remove_unused_inputs_checkeda  s-   ø€ Ù2°9Ó=ˆ	ØÐ ¡[°·±À)Ç.Á.Ô%QØÐØr   c                 ó(   •—  ‰t        | |«      «      S r#   )rv   )r®   r¯   r—   rÃ   s      €r   Ú_remove_unused_wrapperz(minifier.<locals>._remove_unused_wrapperg  s   ø€ Ù+¬J°yÀ(Ó,KÓLÐLr   zRemove unused inputszEliminate dead codec                 óP   •— | j                  «       r ‰| |«      rt        | |«      S y r#   )Úeliminate_dead_coderv   )r®   r¯   r—   rŒ   s      €r   rÇ   z%minifier.<locals>.eliminate_dead_coden  s(   ø€ à×(Ñ(Ô*©{¸9ÀhÔ/OÜ˜i¨Ó2Ð2Ør   c                 ó  ‡— t        j                  «       }i Šd}| j                  D ]²  }|j                  dk(  r|j	                  |ˆfd„«      }|‰|<   Œ-|s‚t        |«      rw|j                  |j                  «      }|‰|<   |j                  t        j                  j                  j                  j                  |j                  i |j                  ¤Ž«       Œ±d}Œ´ | j                  D ]!  }|‰vsŒ|j	                  |ˆfd„«      }|‰|<   Œ# |S )NFrW   c                 ó   •— ‰|    S r#   r   r¦   s    €r   r©   z=minifier.<locals>._consolidate_placeholders.<locals>.<lambda>~  ó   ø€ ¸sÀ1¹v€ r   Tc                 ó   •— ‰|    S r#   r   r¦   s    €r   r©   z=minifier.<locals>._consolidate_placeholders.<locals>.<lambda>Œ  rÊ   r   )rz   r{   rE   rM   r¬   rT   rW   r1   rZ   r   rO   rP   rQ   rR   rH   rY   )r®   r]   r±   Úseen_non_placeholderrS   r³   r¨   s         @r   Ú_consolidate_placeholdersz+minifier.<locals>._consolidate_placeholderst  sý   ø€ Ü—H‘H“Jˆ	ØˆØ$Ðð
 —O‘Oò 	,ˆDØ�w‰w˜-Ò'Ø$×.Ñ.¨tÓ5EÓF�Ø$��D’	Ù)Ô.AÀ$Ô.GØ$×0Ñ0°·±Ó;�Ø$��D‘	Ø—‘Ü—I‘I×(Ñ(×4Ñ4×<Ñ<¸d¿i¹iÐWÈ4Ï;É;ÑWõð (,Ñ$ð	,ð —O‘Oò 	%ˆDØ˜3ŠØ$×.Ñ.¨tÓ5EÓF�Ø$��D’	ð	%ð Ðr   zDelta Debuggingr®   c                 óø  •— t        | j                  «      }t        d||«      D ]Ô  }d} ‰| «      }|d d  }t        |||z   «      }t        ||«      D ]*  }	t	        |j                  «      |	   }
t        ||
|«      sŒ)d}Œ, |sŒ]|j                  «         ‰||«      } ‰t        ||«      «      }|€t        ||«      } ‰|j                  |j                  «      sŒ´t        |j                  |j                  «      c S  y )Nr   FT)
rB   rE   r¼   Úminr   r\   rÇ   rv   rD   r]   )r®   r¯   r—   Ú	num_nodesÚstart_rangeÚis_removingr±   r›   Ú	end_ranger²   r³   r˜   rÍ   r‡   rŒ   rÁ   s               €€€€r   Údelta_debuggingz!minifier.<locals>.delta_debugging�  sý   ø€ ä˜	Ÿ™Ó(ˆ	Ü   I¨{Ó;ò 	CˆKØˆKÙ)¨)Ó4ˆIØ¡�{ˆHÜ˜I {°[Ñ'@ÓAˆIÜ˜[¨)Ó4ò '�Ü 	§¡Ó0°Ñ5�Ü/°	¸8ÀXÕNØ"&‘Kð'ñ ØØ×)Ñ)Ô+Ù1°)¸XÓFˆIÙ6´zÀ)ÈXÓ7VÓWˆIØÐ Ü& y°(Ó;�	Ù˜9Ÿ?™?¨I¯N©NÕ;Ü! )§/¡/°9·>±>ÓBÒBð#	Cð& r   zConsolidate Inputsc                 ót   •— t        |«      } ‰| |«      } t        |«      |kD  r ‰| |«      rt        | |«      S y r#   )rB   rv   )r®   r¯   r—   Úold_lenrÍ   rŒ   s       €€r   Úconsolidate_inputsz$minifier.<locals>.consolidate_inputs¨  s=   ø€ ä�h“-ˆÙ-¨i¸ÓBˆ	Üˆx‹=˜7Ò"¡{°9¸hÔ'GÜ˜i¨Ó2Ð2Ør   c                 ó*  •— t        d|› �t        j                  ¬«       g }t        | j                  j
                  «      }t        t        | j                  «      «      }||dz  kD  r|‰gz  }|r|‰
‰‰gz  }|‰‰	gz  }|D ]  } || |«      }|€Œ|c S  y )NzTrying granularity rŽ   rª   )rl   r”   r•   rB   rD   rE   r   )Úfailing_stater—   Úuse_non_granularÚ
strategiesrÐ   Únum_outputsr�   r˜   r×   rÔ   rÇ   r¾   rµ   Úremove_unused_inputss           €€€€€€r   Útry_granularityz!minifier.<locals>.try_granularity²  sº   ø€ ÜÐ# K =Ð1¼¿
¹
ÕCàˆ
Ü˜×+Ñ+×1Ñ1Ó2ˆ	Üœ+ m×&9Ñ&9Ó:Ó;ˆØ˜ a™Ò'Ø˜>Ð*Ñ*ˆJáØØ#Ø$Ø"ðñ ˆJð 	�} oÐ6Ñ6ˆ
à"ò 	!ˆHÙ  °Ó<ˆIØÑ$Ø Ò ð	!ð r   Trª   )rÚ   Fr
   z9Uh oh, something went wrong :( Final graph is not failingzMade z queriesÚXLA_HLO_DEBUGz#Wrote minimal repro out to repro.py)r2   Útupler   rD   rB   rE   rt   r–   r	   r   rI   rl   r”   r•   r   Ústrrv   rz   r{   rƒ   r]   r   ÚmathÚfloorÚlog2rÏ   r7   Úenvironri   )!r€   r]   rŠ   rr   r|   r}   r!   r~   r   Úfailing_graphÚcur_sizer    r£   rÅ   rÙ   rÞ   r—   r˜   Úhas_progressÚ
failing_fxrÍ   r¡   r×   r‡   rÔ   rÇ   rŒ   r‹   r¾   rµ   rÝ   rÃ   rÁ   s!   ` `                 @@@@@@@@@@@@@r   Úminifierrê   ®   s`  ÿþ€ ô4 �dœU¤D˜MÔ*Ð*Ð*à—L‘L€MÜ�=×&Ñ&Ó'€HàÐ"¬?¸?Ô+KÜÐ-¨oÐ->Ð>OÐPÓQÐQà€KôEö'ð €FÙÜ# HÓ-ˆàL„L� °\ÔB×LÑLÈdÑSÙ™{¨=¸$Ô?ÜÐ@ÓAÐAÜ	Ð˜h˜Z vÐ
.´S·Z±ZÕ@ð5¤Xð 5´Sö 5ðn6¤õ 6ñ Ð(Ó)óó *ðñ0 Ð'Ó(óó )ðð.´*ó ð ´
ö ôMð EÑ,Ð-CÓDØóÐñ Ð,Ó-óó .ðò
ñ8 Ð(Ó)ð¤2§8¡8÷ ó *ðñ. Ð+Ó,ôó -ðô ˜}¨dÓ3€M÷ñ ð0 Ù”2—>‘> &¨-×*=Ñ*=Ó>À×@RÑ@RÔSÜ˜!¤§
¡
¬4¯9©9´S¸×9LÑ9L×9RÑ9RÓ5SÓ+TÓ UÑVÓWˆØÐ&Ü˜o¨{Ó;ˆKÙ# M°;ÐQUÔVˆ	ØÐ Ø%ˆMØà˜ÑˆØˆØ˜QÒÙ'Ø˜{¸UôˆIð Ð$Ø )�Ø#�ØØ˜AÑˆKð ˜QÓñ Øá" =°!Ó4ˆ	ØÐ Ø%ˆMØàá�}×*Ñ*¨M×,>Ñ,>Ô?ÜÐVÓWÐWä	ˆE�+�˜hÐ
'¬c¯j©jÕ9Ü—‘ ¨×(;Ñ(;Ó<€Jð œ"Ÿ*™*Ñ$Ü! *¨m×.@Ñ.@ÔAáˆz˜=×-Ñ-Ô.Ü	Ð
/´c·j±jÕAØ�}×)Ñ)Ð)Ð)r   )$r„   râ   r7   r”   Údataclassesr   Ú	functoolsr   r   Útypingr   r   Útorch.fxrz   Ú	torch.hubr   Ú torch.multiprocessing.reductionsr   Útorch.utils._content_storer	   Úcompile_utilsr   r   Úobjectr;   r   ÚInterpreterr   rT   r\   ri   rr   rt   rv   rƒ   rê   r   r   r   ú<module>rõ      sÕ   ðó Û Û 	Û 
Ý !ß $Ý ã Ý Ý Ý ;Ý 9ç 8ñ ‹8€ð ÷ð ó ðô,�5—8‘8×'Ñ'ô ,ò^ò-ò`
Fòòð ÷/ð /ó ð/ð &ð	G*ð ØØØØòG*Ø�N‰NðG*ð ô	G*r   