
    uki                        d Z ddlZddl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
  G d dej                        Z ej                  d	      Zd
ee   dej"                  fdZd
ee   dej"                  fdZdedej"                  fdZd Zdeeef   de	j.                  fdZ e	j2                   e	j4                  ej6                  j8                  ee             deeef   de	j.                  fdZ e	j2                   e	j4                  ej<                  j8                  ee             	 ddeeef   deeef   dz  de	j.                  fdZ  e	j2                   e	j4                  ejB                  j8                  ee              y)z*Source mapping generator for HLO dialects.    N)Any)	sourcemap)common)mlirc                       e Zd ZdZdZdZy)HloPasszhlo:stable-hlozhlo:originalzhlo:optimizedN)__name__
__module____qualname__
STABLE_HLOORIGINAL	OPTIMIZED     ]/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/experimental/source_mapper/hlo.pyr   r      s    *()r   r   zkmetadata={.*op_name=\"(?P<scope>.*)\" source_file=\"(?P<src_file>.*)\" source_line=(?P<src_line>[0-9]+).*?}linesreturnc                    t        j                         }g }| D ]  }|j                          t        j	                  |      }|s+|j                         }|d   }|d   }t        |d         }||vr|j                  |       |j                  |      }	|dz  }|j                  |j                         d         }
|j                  |
|	|d        |j                          t        j                  d|g |j                         g       S )Nscopesrc_filesrc_line   r      versionsourcessources_contentmappingsnames)r   MappingsGenerator	new_groupMETADATA_REGEXsearch	groupdictintappendindexstripnew_segment	SourceMapr   )r   r   used_source_fileslinematch
match_dict_r   r   src_file_idx	first_cols              r   _parse_hlo_old_formatr2   (   s
   ((*( Ad!!$'E??$j
W
aJ'hZ
+,h	*	*  *&,,X6l!mh**TZZ\!_-i9lHa@A 			  "
 r   c                    i }i }i }d }| D ]  }|j                         }|s|dv r|}|dk(  rFt        j                  d|      }|s<|j                  d      |t	        |j                  d            <   i|dk(  rt        j                  d|      }|st	        |j                  d            }|j                  d      }i }	|j                         D ];  }
d|
v s|
j                  d      \  }}|d	vrt        d
|       t	        |      |	|<   = |	||<   	|dk(  st        j                  d|      }|s*t	        |j                  d            }|j                  d      }i }|j                         D ];  }
d|
v s|
j                  d      \  }}|dvrt        d|       t	        |      ||<   = |||<    t        j                         }g }| D ]   }|j                          d|v st        j                  d|      }|s2t	        |j                  d            }||v r||   }|j                  |d         }|r||j                  |d         }|s||vr|j                  |       |j                  |      }|d   dz
  }|j                  |j                         d         }|j                  |||d       t        d|      t        d|       |j                          t        j                  d|g |j!                         g       S )N)	FileNamesFunctionNamesFileLocationsStackFramesr4   z(\d+)\s+\"(.*)\"   r   r6   z(\d+)\s+{(.*)}=)file_name_idfunction_name_idr,   end_linecolumn
end_columnz%Unknown attribute for FileLocations: r7   )file_location_idparent_frame_idz#Unknown attribute for StackFrames: z
metadata={zstack_frame_id=(\d+)r?   r:   r,   r   z$Could not find mapping for file_loc=z*Could not find mapping for stack_frame_id=r   r   )r(   rer-   groupr%   split
ValueErrorr   r    r!   r#   getr&   r'   r)   r*   r   )r   
file_namesfile_locationsstack_framescurrent_sectionr,   r-   loc_idattrsloc_datapartkvframe_id
frame_datar   r+   stack_frame_idframefile_loc	file_namer0   r   r1   s                           r   _parse_hlo_new_formatrV   D   s0   *.,/ ),d::<DMMo+%hh*D1e	*/++a.
3u{{1~&'	O	+hh($/e	U[[^$AKKM 	!DD[::c?DAq = =!FqcJKKa&HQK	! "*v	M	)hh($/e	u{{1~&A
KKM 	#DD[::c?DAq??!DQCHIIFJqM	# ",XS),V ((*( Ldtii/6e	U[[^,\)~.%#''.@(AB("x'?@I"33!((3.44Y?l!&)A-h**TZZ\!_5i""9lHaHD8+FGGH8IJK
K+L, 			  "
 r   textc                 X    | j                  d      }d| v rt        |      S t        |      S )N
r4   )rC   rV   r2   )rW   r   s     r   parse_hlo_dumprZ      s.    
**T
%D ''	u	%%r   c                 Z     t        j                  fd      j                  | }|| fS )Nc                       | i S Nr   )argsff_kwargss    r   <lambda>z!trace_and_lower.<locals>.<lambda>   s    !T"6X"6 r   )jaxjitlower)work_dirr_   f_argsr`   r/   lowereds    ` `  r   trace_and_lowerrh      s*    =CGG67==vF'
8	r   r^   c                     | \  }}~|j                  d      }t        j                  |      }t        j                  ||t
        j                  j                        S )NT)
debug_info
source_mapgenerated_code	pass_name)as_textr   create_mlir_sourcemapr   SourceMapDumpr   r   valuer^   r/   rg   re   hlo_textrl   s         r   stable_hlo_generate_dumpru      sW    '8___-())(3*			""((
 r   )name
compile_fngenerate_dumpc                     | \  }}~|j                  dd      }t        |      }t        j                  ||t        j
                  j                        S )NhloT)dialectrj   rk   )ro   rZ   r   rq   r   r   rr   rs   s         r   original_hlo_generate_dumpr|      sS    '8__Ut_<(h'*			  &&
 r   xla_compiler_flagsc                     | \  }}d|i|xs i }|j                  |      j                         }t        |      }t        j                  ||t
        j                  j                        S )Nxla_dump_tork   )compilero   rZ   r   rq   r   r   rr   )r^   r}   r/   rg   re   compilation_argsrt   rl   s           r   optimized_generate_dumpr      sn     '8#XL2D2JL__-.668(h'*			!!''
 r   r]   )"__doc__enumrA   typingr   rb   jax._srcr   jax.experimental.source_mapperr   r   Enumr   r   r"   liststrr*   r2   rV   rZ   rh   tuplerq   ru   register_passPassr   rr   r|   r   dictr   r   r   r   r   <module>r      s   1  	  
  1 /dii  -c y/B/B 8Pc Py/B/B Pf& &!4!4 &

5c? 
%+%9%9
   FKK%%".
U38_ 
'-';';
   FKK##"0 IM%S/ 04S#X0E$*$8$8   FKK$$"-r   