
    T`&                        d dl Z d dlZd dlZd dlmZ d dlmZ ej        dk    reZ	ddZ
ddZd Zd Zd	 Z G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )    N)Decimal)InlineTableDict   c                 ~    |j         st          d          t          | |          }|                     |           |S )a  Writes out dict as toml to a file

    Args:
        o: Object to dump into toml
        f: File descriptor where the toml should be stored
        encoder: The ``TomlEncoder`` to use for constructing the output string

    Returns:
        String containing the toml corresponding to dictionary

    Raises:
        TypeError: When anything other than file descriptor is passed
    z0You can only dump an object to a file descriptor)encoder)write	TypeErrordumps)ofr   ds       ,lib/python3.11/site-packages/toml/encoder.pydumpr      sD     7 LJKKKa!!!AGGAJJJH    c                 
   d}|t          | j                  }|                    | d          \  }}||z  }t          |           g}|rd |                                D             }|D ]}||v rt          d          ||z  }|                                }|D ]d}	|                    ||	         |	          \  }}
|s|s)|
s'|r|dd         dk    r|dz  }|d|	z   d	z   z  }|r||z  }|
D ]}|
|         ||	d
z   |z   <   e|}||S )a  Stringifies input dict as toml

    Args:
        o: Object to dump into toml
        encoder: The ``TomlEncoder`` to use for constructing the output string

    Returns:
        String containing the toml corresponding to dict

    Examples:
        ```python
        >>> import toml
        >>> output = {
        ... 'a': "I'm a string",
        ... 'b': ["I'm", "a", "list"],
        ... 'c': 2400
        ... }
        >>> toml.dumps(output)
        'a = "I'm a string"
b = [ "I'm", "a", "list",]
c = 2400
'
        ```
     Nc                 ,    g | ]}t          |          S  )id).0sections     r   
<listcomp>zdumps.<locals>.<listcomp>@   s    DDDwr'{{DDDr   zCircular reference detectedz


[]
.)TomlEncoder	__class__dump_sectionsr   values
ValueErrorget_empty_table)r   r   retvaladdtoretvalsections
outer_objssection_ids	outer_objnewsectionsr   addtosectionsss               r   r   r   "   s   . Fak**#11!R88K
kFQ%%J
 DD(//2C2CDDD# 	@ 	@IK'' !>??? (k!
--// 	B 	BG)0)>)>!7*, *,&K  *; *} * #fRSSkV33dNF#-%// *k)F" B B1>q1AGcMA-..B'  ( Mr   c                    t           j        dk     r:t          | d          r*t          | t                    r|                     d          } d| z  } | d         dk    r
| dd          } |                     d          }|s|                     d	          r
| dd
         } |r,|                     dd          } |                     d	d          } |                     d          } t          |           dk    rd
}| d         s
| dd          } | d                             dd          | d<   | d         |         dk    }| d         d |         r<| d         |         dk    r*| }|dz  }| d         d |         r| d         |         dk    *|rd}nd}| d         |z   | d         z   g| dd          z   } t          |           dk    t          d	| d         z   d	z             S )Nr   decodezutf-8z%rr   u   '"z\'z\"z\xz\\\xu00   )sysversion_infohasattr
isinstancestrr/   
startswithreplacesplitlenunicode)vsinglequoteijoinxjoiners        r   	_dump_strrH   V   s   
$71h#7#7Jq#<N<NHHWqAts{{abbE,,s##K all3'' adG "IIeS!!IIc5!!	A
a&&1**t 	!""At||FD))!!Q4d2A2h 	1Q47d??IEFA d2A2h 	1Q47d??  	FFFqTF]QqT!"QqrrU* a&&1** 31:#$$$r   c                 |    d                     |                               dd                              dd          S )N{}ze+0ze+ze-0ze-)formatr?   rC   s    r   _dump_floatrM   u   s2    ;;q>>!!%..66udCCCr   c                     |                                  }||                                 S |                                 d d         S )Ni)	utcoffset	isoformat)rC   rO   s     r   
_dump_timerQ   y   s:    I{{}};;=="r   c                   8    e Zd ZedfdZd Zd Zd Zd Zd Z	dS )	r   Fc                    || _         || _        t          t          t          t          t
          | j        t          d t          d t          t          t          t          t          j        d t          j        t          t          j        d i
| _        d S )Nc                 D    t          |                                           S N)rB   lowerrL   s    r   <lambda>z&TomlEncoder.__init__.<locals>.<lambda>   s    GAJJ,,.. r   c                     | S rU   r   rL   s    r   rW   z&TomlEncoder.__init__.<locals>.<lambda>   s    1 r   c                 R    |                                                      dd          S )Nz+00:00Z)rP   r?   rL   s    r   rW   z&TomlEncoder.__init__.<locals>.<lambda>   s    )>)>x)M)M r   c                 *    |                                  S rU   )rP   rL   s    r   rW   z&TomlEncoder.__init__.<locals>.<lambda>   s    Q[[]] r   )_dictpreserver=   rH   rB   list	dump_listboolintfloatrM   r   datetimetimerQ   date
dump_funcs)selfr\   r]   s      r   __init__zTomlEncoder.__init__   sf    
 Y$...;[MMM:M22
r   c                 *    |                                  S rU   )r\   )rg   s    r   r$   zTomlEncoder.get_empty_table   s    zz||r   c                 t    d}|D ]-}|dt          |                     |                    z   dz   z  }.|dz  }|S )Nr    ,])rB   
dump_value)rg   rC   r%   r0   s       r   r_   zTomlEncoder.dump_list   sN     	> 	>AcGDOOA$6$6777#==FF#r   c                 L   d}t          |t                    rlg }|                                D ]5\  }}|                     |          }|                    |dz   |z              6|dd                    |          z   dz   z  }|S t          |                     |                    S )zPreserve inline table in its compact syntax instead of expanding
        into subsection.

        https://github.com/toml-lang/toml#user-content-inline-table
        r    = z{ z, z }
)r<   dictitemsdump_inline_tableappendjoinrB   rn   )rg   r   r%   val_listkrC   vals          r   rs   zTomlEncoder.dump_inline_table   s     gt$$ 	5H 1 11,,Q//E	C0000dTYYx000699FM4??733444r   c                     | j                             t          |                    }|"t          |d          r| j         t                   }| ||          n | j         t
                   |          S )N__iter__)rf   gettyper;   r^   r=   )rg   rC   dump_fns      r   rn   zTomlEncoder.dump_value   se    /%%d1gg..?wq*55?od+G$0wwqzzz6Jdoc6J16M6MMr   c           	      d   d}|dk    r|d         dk    r|dz  }|                                  }d}|D ]}t          |          }|}t          j        d|          st	          |          }t          ||         t                    sNd}t          ||         t                    r"||         D ]}	t          |	t                    rd}|r||         D ]}	d}
|d|z   |z   d	z   z  }|                     |	||z             \  }}|r|d
         dk    r|
|z  }
n||z  }|rv|                                  }|D ][}|                     ||         ||z   dz   |z             \  }}|r|
d|z   |z   dz   |z   dz   z  }
|
|z  }
|D ]}||         ||dz   |z   <   \|}|v||
z  }Őd||         4||dz   t          | 	                    ||                             z   dz   z  }| j
        rAt          ||         t                    r&||dz   |                     ||                   z   z  }||         ||<   ||z  }||fS )Nr   r4   r   z^[A-Za-z0-9_-]+$FTr   z[[z]]
r   r   r   rp   )r\   rB   rematchrH   r<   rq   r^   r!   rn   r]   r   rs   )rg   r   supretstrretdictarraystrr   qsectionarrayoftablesaarraytabstrr-   r   newddsecs1d1s                    r   r!   zTomlEncoder.dump_sections   s   "99RC3JC**,, +	/ +	/Gg&&GH8/99 .$W--aj$// &/ %aj$// 1wZ 1 1%a.. 1,0M  PwZ 0 0&* D3J$9F$BB#11!S8^DD1 . ts{{ +q 0 (A %#'::<<D() 	C 	C)-););AdGS<DFEGJFK<@FA *B *BB $& !6$/C#I4H4758:>5?AF5G %HK$/2$5K*, !C !CB<>rFDb$9$9!C $A   % !K/-00 z-8e#3#*4??1W:+F+F#G#G$HJN$O P /:aj/#J#J /8e+11!G*==> ? %&gJ!!(  r   N)
__name__
__module____qualname__rq   rh   r$   r_   rs   rn   r!   r   r   r   r   r      s{        !E 
 
 
 
     5 5 5"N N N3! 3! 3! 3! 3!r   r   c                   "     e Zd Zef fd	Z xZS )TomlPreserveInlineDictEncoderc                 Z    t          t          |                               |d           d S )NT)superr   rh   )rg   r\   r    s     r   rh   z&TomlPreserveInlineDictEncoder.__init__   s*    +T22;;E4HHHHHr   r   r   r   rq   rh   __classcell__r    s   @r   r   r      sJ        ! I I I I I I I I I Ir   r   c                   ,     e Zd Zeddf fd	Zd Z xZS )TomlArraySeparatorEncoderFrl   c                     t          t          |                               ||           |                                dk    rd|z   }n$|                    d          rt	          d          || _        d S )Nr   rl   z 	
,zInvalid separator for arrays)r   r   rh   stripr#   	separator)rg   r\   r]   r   r    s       r   rh   z"TomlArraySeparatorEncoder.__init__   sr    '..77xHHH??""iII__Z(( 	=;<<<"r   c                 6   g }d}|D ]*}|                     |                     |                     +|g k    r\g }|D ]O}t          |t                    r|D ]}|                     |           2|dt	          |          z   | j        z   z  }P|}|g k    \|dz  }|S )Nr   rk   rm   )rt   rn   r<   r^   rB   r   )rg   rC   tr%   r0   r-   rs          r   r_   z#TomlArraySeparatorEncoder.dump_list   s     	) 	)AHHT__Q''((((2ggA @ @a&& @ $ $$ cGAJJ.??FFA 2gg 	#r   )r   r   r   rq   rh   r_   r   r   s   @r   r   r      sS        !ES # # # # # #      r   r   c                   *     e Zd Zedf fd	Zd Z xZS )TomlNumpyEncoderFc                 R   dd l }t          t          |                               ||           t          | j        |j        <   t          | j        |j        <   t          | j        |j        <   | j	        | j        |j
        <   | j	        | j        |j        <   | j	        | j        |j        <   d S )Nr   )numpyr   r   rh   rM   rf   float16float32float64	_dump_intint16int32int64)rg   r\   r]   npr    s       r   rh   zTomlNumpyEncoder.__init__  s    %%..uh???&1
#&1
#&1
#$(N!$(N!$(N!!!r   c                 F    d                     t          |                    S )NrJ   )rK   ra   rg   rC   s     r   r   zTomlNumpyEncoder._dump_int  s    {{3q66"""r   )r   r   r   rq   rh   r   r   r   s   @r   r   r     sQ        !E 3 3 3 3 3 3# # # # # # #r   r   c                   $     e Zd Zedf fd	Z xZS )TomlPreserveCommentEncoderFc                      ddl m} t          t                                         ||            fd j        |<   d S )Nr   )CommentValuec                 8    |                      j                  S rU   )r   rn   )rC   rg   s    r   rW   z5TomlPreserveCommentEncoder.__init__.<locals>.<lambda>#  s    !&&2I2I r   )toml.decoderr   r   r   rh   rf   )rg   r\   r]   r   r    s   `   r   rh   z#TomlPreserveCommentEncoder.__init__   sR    ------($//88III(I(I(I(I%%%r   r   r   s   @r   r   r     sL        !E J J J J J J J J J Jr   r   c                   $     e Zd Zd Z fdZ xZS )TomlPathlibEncoderc                 :    t          t          |                    S rU   )rH   r=   r   s     r   _dump_pathlib_pathz%TomlPathlibEncoder._dump_pathlib_path(  s    Q   r   c                     dt           j        k    r(dd l}t          ||j                  rt          |          }t          t          |                               |          S )N)r      r   )	r9   r:   pathlibr<   PurePathr=   r   r   rn   )rg   rC   r   r    s      r   rn   zTomlPathlibEncoder.dump_value+  sY    S%%%NNN!W-.. FF'..99!<<<r   )r   r   r   r   rn   r   r   s   @r   r   r   &  sG        ! ! != = = = = = = = =r   r   rU   )rc   r   r9   decimalr   r   r   r:   r=   rB   r   r   rH   rM   rQ   objectr   r   r   r   r   r   r   r   r   <module>r      s    				 



       ( ( ( ( ( (tG   ,1 1 1 1h% % %>D D D  h! h! h! h! h!& h! h! h!VI I I I IK I I I       8# # # # #{ # # # J J J J J J J J
= 
= 
= 
= 
= 
= 
= 
= 
= 
=r   