
    uki              	         d 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
 e
ee   eeeeef   eeeeeef   f   Zeee      Z ed       G d	 d
             ZdZdZdZdZ e e ed       ed      dz                e e ed       ed      dz               z    e e ed       ed      dz               z    ed       ed      gz   Zd Z e       Zd dZd!dZd"dZd#dZd$dZd%dZ G d d      Z y)&zQ
An implementation of sourcemaps following `TC39 <https://tc39.es/source-map>`_.
    )annotations)IterableSequence)	dataclassN)UnionT)frozenc                  Z    e Zd ZU ded<   ded<   ded<   ded<   ded<   edd	       Zdd
Zy)	SourceMapintversionzSequence[str]sourcessources_contentnamesMappingsmappingsc           
     v    t        j                  |      } | |d   |d   |d   |d   t        |d               S )z#Deserialize a source map from JSON.r   r   sourcesContentr   r   )r   r   r   r   r   )jsonloadsdeserialize_mappings)cls	json_datadatas      M/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/sourcemap.py	from_jsonzSourceMap.from_json/   sJ     ::i DYY-.7m%d:&67     c                    | j                   | j                  | j                  | j                  t	        | j
                        d}t        j                  |      S )zSerialize a source map to JSON.)r   r   r   r   r   )r   r   r   r   serialize_mappingsr   r   dumps)selfr   s     r   to_jsonzSourceMap.to_json;   sF     <<<<..&t}}5D ::dr   N)r   strreturnr
   )r#   r"   )__name__
__module____qualname____annotations__classmethodr   r!    r   r   r
   r
   %   s8    ,   		 		r   r
                AZaz09+/c                     t        t              D  ci c]  \  } }|| 
 }} }t        d      D cg c]  }|j                  |d        c}S c c}} w c c}w )N   )	enumerateVLQ_ALPHABETrangeget)dclookupis       r   make_vlq_decode_tabler@   S   sJ    &|45TQAqD5&5',Sz	2!&**Q
	22 6	2s
   AAc                   t        |       }t        t        |         }t        |t        z        }|t
        z  dz	  }d}|t        z  r4|t        z  }t        t        |         }||t
        z  |z  z  }|t        z  r4|r| S |S )z%Decode a Base-64-VLQ into an integer.r*   )iterVLQ_DECODE_TABLEnextboolVLQ_SIGN_MASKVLQ_VALUE_MASKVLQ_MORE_MASKVLQ_VALUE_BITWIDTH)encenc_iterr<   signvalueshifts         r   
decode_vlqrP   [   s    #Y(tH~&!	a-	 $~!
#%
%	M	Eh(A	a. U**E 	
M
 %"U"r   c                    | dk  r	|  dz  dz  n| dz  } g }	 | t         z  }| t        z  } | dkD  }|r	|t        z  }|j                  t        |          |s	 t        |      S I)z%Encode an integer into a Base-64-VLQ.r   r*   )rH   rJ   rI   appendr9   bytes)rN   bufr<   mores       r   
encode_vlqrV   l   sx     "'UFq=1
%
#A	  E19D=aJJ|A	s 	r   c                    t        |       }t        |      }	 t        |      }t        |      }t        |      }	 t        |      }|||||fS # t        $ r |fcY S w xY w# t        $ r	 ||||fcY S w xY w)z)Decode a sequence of VLQs into a segment.)rC   rP   StopIteration)rK   rL   colsourcesource_line
source_colnames          r   decode_segmentr^   ~   s    #Y(8#!F 8$+(#*0hD
 
fk:t	33 
 6M 
 0Z//0s"   A A AAA0/A0c                2    dj                  d | D              S )z)Encode a segment into a sequence of VLQs.r   c              3  2   K   | ]  }t        |        y wN)rV   ).0rN   s     r   	<genexpr>z!encode_segment.<locals>.<genexpr>   s     5*U#5   join)segs    r   encode_segmentrh      s    	55	55r   c                    t        | d      }|j                  d      D cg c].  }|r(t        t        t        |j                  d                  ng 0 c}S c c}w )z%Decode a string of TC39 mapping data.ascii)encoding   ;   ,)rS   splitlistmapr^   )mappings_strmappings_bytesmappings      r   r   r      sX    8. $))$/

 9@d3~w}}T234RG
  
s   3Ac                T    dj                  d | D              }|j                  d      S )z3Encode mappings into a string of TC39 mapping data.rl   c              3  L   K   | ]  }d j                  d |D                yw)rm   c              3  2   K   | ]  }t        |        y wra   )rh   )rb   rg   s     r   rc   z/serialize_mappings.<locals>.<genexpr>.<genexpr>   s     4s#4rd   Nre   )rb   segss     r   rc   z%serialize_mappings.<locals>.<genexpr>   s$      9=dii4t44s   "$rj   )rf   decode)r   rK   s     r   r   r      s.    		 AI 	# 
G	r   c                  *    e Zd ZdZd Zd Zd ZddZy)MappingsGeneratora"  MappingsGenerator is a builder API for mappings.

  TC39 mapping data is inconvenient to emit directly: in an effort to compress
  data
  it encodes most indices using values _relative_ to the previous element.
  MappingsGenerator simplifies things by taking absolute indices everywhere.
  c                f    d | _         d| _        d| _        d| _        d| _        g | _        d | _        y )Nr   )	_last_col_last_source_last_source_line_last_source_col
_last_name	_mappings
_cur_groupr    s    r   __init__zMappingsGenerator.__init__   s6    DNDDDDODNDOr   c                j    d| _         g | _        | j                  j                  | j                         y)zStart a new group (line).r   N)r|   r   r   rR   r   s    r   	new_groupzMappingsGenerator.new_group   s&    DNDONN$//*r   c                N   t        |      dk\  sJ | j                  }|t        d      |d   | j                  z
  }|d   | _        t        |      dk(  r|j	                  |f       y|d   | j
                  z
  }|d   | _        |d   | j                  z
  }|d   | _        |d   | j                  z
  }|d   | _        t        |      dk(  r|j	                  ||||f       y|d   | j                  z
  }|d   | _        t        |      dk(  r|j	                  |||||f       yJ d	       )
a  Start a new source mapping segment in the current group.

    Args:
      *seg: A segment as in TC39, but all indices are absolute. See
        https://tc39.es/source-map/#mappings-structure for details.

    Raises:
      RuntimeError: If no current group exists.
    r*   Nz-No current group. Forgot to call new_group()?r            r-   zinvalid segment)	lenr   RuntimeErrorr|   rR   r}   r~   r   r   )r    rg   grouprY   rZ   r[   r\   r]   s           r   new_segmentzMappingsGenerator.new_segment   s7    s8q==OOE}HII
a&4>>
!CVDN
3x1}llC6Vd'''FADa&4111K VDQ$///JFD
3x1}llCj9:q6DOO#D!fDO
3x1}llCj$?@###5r   c                    | j                   S )z2Return the mapping as a list of segments per line.)r   r   s    r   r   zMappingsGenerator.mappings   s    >>r   N)r#   r   )r$   r%   r&   __doc__r   r   r   r   r)   r   r   rz   rz      s    +($Tr   rz   )rK   Iterable[int]r#   r   )rN   r   r#   rS   )rK   r   r#   Segment)rg   r   r#   rS   )rq   r"   r#   r   )r   r   r#   r"   )!r   
__future__r   collections.abcr   r   dataclassesr   r   typingr   tupler   r   r   r
   rG   rI   rH   rJ   ro   r:   ordr9   r@   rD   rP   rV   r^   rh   r   r   rz   r)   r   r   <module>r      sK   # . !  
 	#Jc3S()5c3S1H+II
 HW%& $  B  s3xSA	&'
5S3s8a<()*
5S3s8a<()* 3xS 3
 )* #"$4(6
D Dr   