o
    ÕtBh®$  ã                
   @  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 df ZdZded< G d	d
„ d
ƒZd+dd„Zd,dd„Zd-dd„Zd.dd„Zd/dd„Zd0d"d#„Zd1d&d'„Zd2d)d*„ZdS )3é    )Úannotations)ÚAnyÚTupleÚUnionÚcast)ÚFinal.Né   r   ÚNUM_SINGLETONSc                   @  st   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S )$ÚLiteralszMCollection of literal values used in a compilation group and related helpers.ÚreturnÚNonec                 C  s(   i | _ i | _i | _i | _i | _i | _d S ©N)Ústr_literalsÚbytes_literalsÚint_literalsÚfloat_literalsÚcomplex_literalsÚtuple_literals©Úself© r   úm/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/codegen/literals.pyÚ__init__   s   
zLiterals.__init__ÚvalueÚLiteralValuec           	      C  sJ  |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t|ƒ¡ qŠt|ƒ||< dS dS J d| ƒ‚)z=Ensure that the literal value is available in generated code.NTFúinvalid literal: %r)Ú
isinstanceÚstrr   ÚlenÚbytesr   Úintr   Úfloatr   Úcomplexr   Útupler   Úrecord_literalr   r   )	r   r   r   r   r   r   r   r   Úitemr   r   r   r$      sF   
ÿ
ÿ
ÿ
ÿ
ÿ
ýzLiterals.record_literalr    c                 C  s
  |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 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   Únr   r   r   Úliteral_index=   s2   





zLiterals.literal_indexc                 C  s@   t 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   Únum_literals[   s   ÿþýüûúÿzLiterals.num_literalsúlist[bytes]c                 C  ó
   t | jƒS r   )Ú_encode_str_valuesr   r   r   r   r   Úencoded_str_valuesj   ó   
zLiterals.encoded_str_valuesc                 C  r,   r   )Ú_encode_int_valuesr   r   r   r   r   Úencoded_int_valuesm   r/   zLiterals.encoded_int_valuesc                 C  r,   r   )Ú_encode_bytes_valuesr   r   r   r   r   Úencoded_bytes_valuesp   r/   zLiterals.encoded_bytes_valuesú	list[str]c                 C  r,   r   )Ú_encode_float_valuesr   r   r   r   r   Úencoded_float_valuess   r/   zLiterals.encoded_float_valuesc                 C  r,   r   )Ú_encode_complex_valuesr   r   r   r   r   Úencoded_complex_valuesv   r/   zLiterals.encoded_complex_valuesc           	      C  s†   | j }dd„ | ¡ D ƒ}g }t|ƒ}| t|ƒ¡ t|ƒD ]#}|| }| tt|ƒƒ¡ |D ]}|  tt|ƒ¡}| t|ƒ¡ q.q|S )a9  Encode tuple values into a C array.

        The format of the result is like this:

           <number of tuples>
           <length of the first tuple>
           <literal index of first item>
           ...
           <literal index of last item>
           <length of the second tuple>
           ...
        c                 S  ó   i | ]\}}||“qS r   r   ©Ú.0r   Úindexr   r   r   Ú
<dictcomp>‡   ó    z1Literals.encoded_tuple_values.<locals>.<dictcomp>)	r   Úitemsr   Úappendr   Úranger)   r   r   )	r   ÚvaluesÚvalue_by_indexÚresultÚnumÚir   r%   r<   r   r   r   Úencoded_tuple_valuesy   s   þzLiterals.encoded_tuple_valuesN)r   r   )r   r   r   r   )r   r   r   r    )r   r    )r   r+   )r   r4   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r$   r)   r*   r.   r1   r3   r6   r8   rG   r   r   r   r   r
      s    

	
"





r
   rB   údict[str, int]r   r+   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  r9   r   r   r:   r   r   r   r=   •   r>   z&_encode_str_values.<locals>.<dictcomp>r   éF   ó    )r?   rA   r   Úformat_str_literalr@   Ú
format_intÚjoin)	rB   rC   rD   ÚlineÚline_lenrF   r   Ú	c_literalÚc_lenr   r   r   r-   ”   s$   


r-   ú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  r9   r   r   r:   r   r   r   r=   ª   r>   z(_encode_bytes_values.<locals>.<dictcomp>r   rM   rN   )r?   rA   r   rP   r@   rQ   )	rB   rC   rD   rR   rS   rF   r   Úc_initrU   r   r   r   r2   ©   s$   

r2   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&   )ÚinsertrA   r   r   )r(   ÚarF   r   r   r   rP   ¾   s   	ùþrP   Úsr   c                 C  s   |   d¡}tt|ƒƒ| S )Nzutf-8)ÚencoderP   r   )r]   Úutf8r   r   r   rO   Í   s   
rO   ú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  r9   r   r   r:   r   r   r   r=   ×   r>   z&_encode_int_values.<locals>.<dictcomp>r   s   %drM   ó    rN   )r?   rA   r   r@   rP   rQ   )rB   rC   rD   rR   rS   rF   r   Úencodedr   r   r   r0   Ò   s"   

r0   Úxr!   c                 C  s$   t | ƒ}|dkr
dS |dkrdS |S )z1Return C literal representation of a float value.ÚinfÚINFINITYz-infz	-INFINITY)r   )rc   r]   r   r   r   Ú
float_to_cê   s   rf   údict[float, int]r4   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  r9   r   r   r:   r   r   r   r=   ù   r>   z(_encode_float_values.<locals>.<dictcomp>)r?   r   r@   r   rA   rf   ©rB   rC   rD   rE   rF   r   r   r   r   r5   ô   s   r5   ú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  r9   r   r   r:   r   r   r   r=   	  r>   z*_encode_complex_values.<locals>.<dictcomp>)r?   r   r@   r   rA   rf   ÚrealÚimagrh   r   r   r   r7     s   r7   )rB   rL   r   r+   )rB   rV   r   r+   )r(   r    r   r   )r]   r   r   r   )rB   r`   r   r+   )rc   r!   r   r   )rB   rg   r   r4   )rB   ri   r   r4   )Ú
__future__r   Útypingr   r   r   r   Útyping_extensionsr   r   r   r    Úboolr!   r"   Úobjectr   r	   Ú__annotations__r
   r-   r2   rP   rO   r0   rf   r5   r7   r   r   r   r   Ú<module>   s      







