
    ib                        S SK JrJrJrJrJrJr  S SKrS SKrS SK	J
s  Jr  S SKJrJrJr  S SKJrJrJr  S SKJrJrJr  S SKJr  S SKJrJr  S SKJr  S S	K J!r!  S S
K"J#r#  S SK$J%r%J&r&  S SK'J(r(J)r)  S SK*J+r+  S SK,J-r-  S SK.J/r/  S SK0J1r1  \" \" S S95       " S S\%5      5       r2\" \" S S95       " S S\%5      5       r3\r4S\5\\%      4S jr6S\7S\#S\#4S jr8S\1S\14S jr9g)    )AnyCallablecastListOptionalTypeN)CadenceFuseOpsInGraphFuseFullThenReshapePass!FuseTransposeOrPermuteOpPairsPass)CadencePassAttributecreate_cadence_pass_filterregister_cadence_pass)CadenceRemoveNopsRemoveNopSliceOrViewOpPassRemoveRedundantOps)CadenceReorderOpsInGraph)CadenceReplaceOpsInGraph%ReplaceMulTensorWithMulAndFullOpsPass)CadenceSimplifyOpsInGraph)CompileTimeTypeDispatchPass)EdgeProgramManager)
ExportPass
PassResult)PassManagerPassType)dead_code_elimination_pass)ScalarToTensorPass)SpecPropPass)ExportedProgram)	opt_levelc                   R    \ rS rSrSrS\R                  R                  S\4S jr	Sr
g)InitializePipeline.   zP
Initialize the pass pipeline. This should invariably be the first pass to
run.
graph_modulereturnc                 F    [        U5        [        5       " U5      nUc   eU$ N)r   r   )selfr$   results      e/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/backends/cadence/aot/passes.pycallInitializePipeline.call5   s'    "<0-!!!     N__name__
__module____qualname____firstlineno____doc__torchfxGraphModuler   r+   __static_attributes__r.   r-   r*   r"   r"   .   s$    
!5!5 * r-   r"   c                   R    \ rS rSrSrS\R                  R                  S\4S jr	Sr
g)FinalizePipeline<   z9
The final cleanup pass after running the pass pipeline.
r$   r%   c                 v    [        5       [        5       /n[        US9" U5      n[        UR                  5        U$ )Npasses)r   r   r   r   r$   )r(   r$   finalize_passesr)   s       r*   r+   FinalizePipeline.callB   s8     N+
 O4\B"6#6#67r-   r.   Nr/   r.   r-   r*   r:   r:   <   s$    !5!5 * r-   r:   r%   c                  (   [         [        R                  [        R                  [        R                  [
        R                  [        R                  [        R                  [        [        [        [        [        /n [        R                  " U 5      S   $ )Nr   )r"   r   r>   r   r   r	   r   r   r:   r
   r   r   r   pytreetree_flattenr=   s    r*   get_passes_in_default_orderrD   P   si    !! ''  $$ ''!(()"#F v&q))r-   r    edge_prog_managerc           	      (   [        5       n[        U 5      n[        [        X25      5       Vs/ s H	  nU4S jPM     nnUR	                  [        [        [        [        R                  R                  /[        [           4      U5      5      nU$ s  snf )Nc                     U" 5       " U 5      $ r'   r.   )r$   filtered_passs     r*   <lambda>'apply_exir_ops_passes.<locals>.<lambda>k   s    mo?r-   )rD   r   listfilter	transformr   r   r5   r6   r7   r   r   )r    rE   r>   pass_filterrH   cadence_passescadence_prog_managers          r*   apply_exir_ops_passesrQ   c   s     )*F,Y7K "&"=> ?M	 0=  ?   -66588//0(:2FFGH.	

  s   Bexpo_programc                 R    [        5       /n[        U5      " U R                  5        U $ )z
Applies compiler passes on torch.ops IR, including torch.ops.aten, torch.ops.cadence, etc.
expo_program is expected to be the output of the torch.export.export().
)r   r   r$   )rR   aten_passess     r*   apply_torch_ops_passesrU   y   s-     	./QK \667r-   ):typingr   r   r   r   r   r   r5   torch.fxtorch.utils._pytreeutils_pytreerB   (executorch.backends.cadence.aot.fuse_opsr	   r
   r   *executorch.backends.cadence.aot.pass_utilsr   r   r   *executorch.backends.cadence.aot.remove_opsr   r   r   +executorch.backends.cadence.aot.reorder_opsr   +executorch.backends.cadence.aot.replace_opsr   r   ,executorch.backends.cadence.aot.simplify_opsr   -executorch.backends.cadence.aot.type_dispatchr   executorch.exirr   executorch.exir.pass_baser   r   executorch.exir.pass_managerr   r   executorch.exir.passesr   ,executorch.exir.passes.scalar_to_tensor_passr   %executorch.exir.passes.spec_prop_passr   torch.export.exported_programr   r"   r:   ArgumentrK   rD   intrQ   rU   r.   r-   r*   <module>rk      s    = <   $ $ 
  
 Q S U . < > = K > 9 +a89
 
 :
 +a89z  :  *T$z*:%; *&  )   , _ r-   