o
    ØÝ2g…)  ã                
   @  sÐ   U d dl mZ d dlmZmZmZmZ d dlmZ ee	e
eeeeeedf ee df	 Zd0d
d„ZdZded< G dd„ dƒZd1dd„Zd2dd„Zd3dd„Zd4d d!„Zd5d#d$„Zd6d'd(„Zd7d+d,„Zd8d.d/„ZdS )9é    )Úannotations)ÚFinalÚ	FrozenSetÚTupleÚUnion)Ú	TypeGuard.NÚobjÚobjectÚreturnúTypeGuard[LiteralValue]c                 C  s   t | ttttttttd ƒfƒS ©N)	Ú
isinstanceÚstrÚbytesÚintÚfloatÚcomplexÚtupleÚ	frozensetÚtype)r   © r   úN/home/garg/my-data/venv/lib/python3.10/site-packages/mypyc/codegen/literals.pyÚ_is_literal_value   s   r   é   r   ÚNUM_SINGLETONSc                   @  sˆ   e Zd ZdZd$dd„Zd%dd	„Zd&dd„Zd'dd„Zd(dd„Zd(dd„Z	d(dd„Z
d)dd„Zd)dd„Zd)dd„Zd)dd„Zd*d!d"„Zd#S )+ÚLiteralszMCollection of literal values used in a compilation group and related helpers.r
   ÚNonec                 C  s.   i | _ i | _i | _i | _i | _i | _i | _d S r   )Ústr_literalsÚbytes_literalsÚint_literalsÚfloat_literalsÚcomplex_literalsÚtuple_literalsÚfrozenset_literals©Úselfr   r   r   Ú__init__   s   
zLiterals.__init__ÚvalueÚLiteralValuec           
      C  sœ  |du s|du s|du rdS t |tƒr$| j}||vr"t|ƒ||< dS dS t |tƒr:| j}||vr8t|ƒ||< dS dS t |tƒrP| j}||vrNt|ƒ||< dS dS t |tƒrf| j	}||vrdt|ƒ||< dS dS t |t
ƒr|| j}||vrzt|ƒ||< dS dS t |tƒr¢| j}||vr |D ]}t|ƒs’J ‚|  |¡ qŠt|ƒ||< dS dS t |tƒrÈ| j}	||	vrÆ|D ]}t|ƒs¸J ‚|  |¡ q°t|	ƒ|	|< dS dS J d| ƒ‚)z=Ensure that the literal value is available in generated code.NTFúinvalid literal: %r)r   r   r   Úlenr   r   r   r   r   r    r   r!   r   r"   r   Úrecord_literalr   r#   )
r%   r'   r   r   r   r    r!   r"   Úitemr#   r   r   r   r+   "   sX   
ÿ
ÿ
ÿ
ÿ
ÿ
ü
üzLiterals.record_literalr   c                 C  s0  |du rdS |du rdS |du rdS t }t|tƒr || j|  S |t| jƒ7 }t|tƒr3|| j|  S |t| jƒ7 }t|tƒrF|| j|  S |t| jƒ7 }t|t	ƒrY|| j
|  S |t| j
ƒ7 }t|tƒrl|| j|  S |t| jƒ7 }t|tƒr|| j|  S |t| jƒ7 }t|tƒr’|| j|  S J d| ƒ‚)z7Return the index to the literals array for given value.Nr   Fé   Té   r)   )r   r   r   r   r*   r   r   r   r   r   r    r   r!   r   r"   r   r#   )r%   r'   Únr   r   r   Úliteral_indexL   s8   






zLiterals.literal_indexc                 C  sJ   t t| jƒ t| jƒ t| jƒ t| jƒ t| jƒ t| jƒ t| jƒ S r   )	r   r*   r   r   r   r    r!   r"   r#   r$   r   r   r   Únum_literalsm   s    ÿþýüûúùÿzLiterals.num_literalsúlist[bytes]c                 C  ó
   t | jƒS r   )Ú_encode_str_valuesr   r$   r   r   r   Úencoded_str_values}   ó   
zLiterals.encoded_str_valuesc                 C  r3   r   )Ú_encode_int_valuesr   r$   r   r   r   Úencoded_int_values€   r6   zLiterals.encoded_int_valuesc                 C  r3   r   )Ú_encode_bytes_valuesr   r$   r   r   r   Úencoded_bytes_valuesƒ   r6   zLiterals.encoded_bytes_valuesú	list[str]c                 C  r3   r   )Ú_encode_float_valuesr    r$   r   r   r   Úencoded_float_values†   r6   zLiterals.encoded_float_valuesc                 C  r3   r   )Ú_encode_complex_valuesr!   r$   r   r   r   Úencoded_complex_values‰   r6   zLiterals.encoded_complex_valuesc                 C  ó   |   | j¡S r   )Ú_encode_collection_valuesr"   r$   r   r   r   Úencoded_tuple_valuesŒ   ó   zLiterals.encoded_tuple_valuesc                 C  r@   r   )rA   r#   r$   r   r   r   Úencoded_frozenset_values   rC   z!Literals.encoded_frozenset_valuesÚvaluesú<dict[tuple[object, ...], int] | dict[frozenset[object], int]c           	      C  s†   dd„ |  ¡ D ƒ}g }t|ƒ}| t|ƒ¡ t|ƒD ]&}|| }| tt|ƒƒ¡ |D ]}t|ƒs3J ‚|  |¡}| t|ƒ¡ q+q|S )aR  Encode tuple/frozenset values into a C array.

        The format of the result is like this:

           <number of collections>
           <length of the first collection>
           <literal index of first item>
           ...
           <literal index of last item>
           <length of the second collection>
           ...
        c                 S  ó   i | ]\}}||“qS r   r   ©Ú.0r'   Úindexr   r   r   Ú
<dictcomp>¡   ó    z6Literals._encode_collection_values.<locals>.<dictcomp>)Úitemsr*   Úappendr   Úranger   r0   )	r%   rE   Úvalue_by_indexÚresultÚcountÚir'   r,   rJ   r   r   r   rA   ’   s   
ýz"Literals._encode_collection_valuesN)r
   r   )r'   r(   r
   r   )r'   r(   r
   r   )r
   r   )r
   r2   )r
   r;   )rE   rF   r
   r;   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r+   r0   r1   r5   r8   r:   r=   r?   rB   rD   rA   r   r   r   r   r      s    



*
!






r   rE   údict[str, int]r2   c           	      C  sÀ   dd„ |   ¡ D ƒ}g }g }d}tt| ƒƒD ]3}|| }t|ƒ}t|ƒ}|dkr?|| dkr?| tt|ƒƒd |¡ ¡ g }d}| |¡ ||7 }q|rY| tt|ƒƒd |¡ ¡ | d¡ |S )Nc                 S  rG   r   r   rH   r   r   r   rK   °   rL   z&_encode_str_values.<locals>.<dictcomp>r   éF   ó    )rM   rO   r*   Úformat_str_literalrN   Ú
format_intÚjoin)	rE   rP   rQ   ÚlineÚline_lenrS   r'   Ú	c_literalÚc_lenr   r   r   r4   ¯   s$   


r4   údict[bytes, int]c           	      C  sÐ   dd„ |   ¡ D ƒ}g }g }d}tt| ƒƒD ];}|| }tt|ƒƒ}t|ƒt|ƒ }|dkrE|| dkrE| tt|ƒƒd |¡ ¡ g }d}| || ¡ ||7 }q|ra| tt|ƒƒd |¡ ¡ | d¡ |S )Nc                 S  rG   r   r   rH   r   r   r   rK   Å   rL   z(_encode_bytes_values.<locals>.<dictcomp>r   rY   rZ   )rM   rO   r*   r\   rN   r]   )	rE   rP   rQ   r^   r_   rS   r'   Úc_initra   r   r   r   r9   Ä   s$   

r9   r/   r   r   c                 C  sp   | dk r| g}t|ƒS g }| dkr!|  d| d@ ¡ | dL } | dkstt|ƒd ƒD ]
}||  dO  < q)t|ƒS )z:Format an integer using a variable-length binary encoding.é€   r   é   é   r-   )ÚinsertrO   r*   r   )r/   ÚarS   r   r   r   r\   Ù   s   	ùþr\   Úsr   c                 C  s   |   d¡}tt|ƒƒ| S )Nzutf-8)Úencoder\   r*   )ri   Úutf8r   r   r   r[   è   s   
r[   údict[int, int]c                 C  sÀ   dd„ |   ¡ D ƒ}g }g }d}tt| ƒƒD ]3}|| }d| }|dkr=|t|ƒ dkr=| tt|ƒƒd |¡ ¡ g }d}| |¡ |t|ƒ7 }q|rY| tt|ƒƒd |¡ ¡ | d¡ |S )zbEncode int values into C strings.

    Values are stored in base 10 and separated by 0 bytes.
    c                 S  rG   r   r   rH   r   r   r   rK   ò   rL   z&_encode_int_values.<locals>.<dictcomp>r   s   %drY   ó    rZ   )rM   rO   r*   rN   r\   r]   )rE   rP   rQ   r^   r_   rS   r'   Úencodedr   r   r   r7   í   s"   

r7   Úxr   c                 C  s0   t | ƒ}|dkr
dS |dkrdS |dkrdS |S )z1Return C literal representation of a float value.ÚinfÚINFINITYz-infz	-INFINITYÚnanÚNAN)r   )ro   ri   r   r   r   Ú
float_to_c  s   rt   údict[float, int]r;   c                 C  sT   dd„ |   ¡ D ƒ}g }t| ƒ}| t|ƒ¡ t|ƒD ]}|| }| t|ƒ¡ q|S )z|Encode float values into a C array values.

    The result contains the number of values followed by individual values.
    c                 S  rG   r   r   rH   r   r   r   rK     rL   z(_encode_float_values.<locals>.<dictcomp>)rM   r*   rN   r   rO   rt   ©rE   rP   rQ   ÚnumrS   r'   r   r   r   r<     s   r<   údict[complex, int]c                 C  sf   dd„ |   ¡ D ƒ}g }t| ƒ}| t|ƒ¡ t|ƒD ]}|| }| t|jƒ¡ | t|jƒ¡ q|S )zœEncode float values into a C array values.

    The result contains the number of values followed by pairs of doubles
    representing complex numbers.
    c                 S  rG   r   r   rH   r   r   r   rK   &  rL   z*_encode_complex_values.<locals>.<dictcomp>)rM   r*   rN   r   rO   rt   ÚrealÚimagrv   r   r   r   r>      s   r>   )r   r	   r
   r   )rE   rX   r
   r2   )rE   rb   r
   r2   )r/   r   r
   r   )ri   r   r
   r   )rE   rl   r
   r2   )ro   r   r
   r   )rE   ru   r
   r;   )rE   rx   r
   r;   )Ú
__future__r   Útypingr   r   r   r   Útyping_extensionsr   r   r   r   Úboolr   r   r	   r(   r   r   Ú__annotations__r   r4   r9   r\   r[   r7   rt   r<   r>   r   r   r   r   Ú<module>   s$     ÿ
 






