Ë
    YV.jÒw  ã                   óˆ  — U d dl Zd dlmc mZ d dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ ddlm Z  ddl!m"Z" dZ# ejH                  d	ejJ                  ejL                  ¬
«       eee'e(f   ee'e(ee(ef   f   f   Z)ee*d<   ee)   Z+ee*d<    G d„ de «      Z,y)é    N)
ÚAnyÚCallableÚDictÚListÚOptionalÚSequenceÚSetÚTupleÚTypeÚUnion)Ú	TypeAlias)ÚUnsupportedFeatureé   )ÚBaseProvider)Ú	TypesSpecTú	faker-csv)ÚquotingÚ
ColumnSpecÚDataColumnsc                   óú  — e Zd Zd6dedefd„Zdee   fd„Zd7dedefd„Z	d8dede
eef   fd„Zd8dede
eef   fd	„Zd8dede
eef   fd
„Zefdee
eej"                  gef   eej"                  gef   f      de
eeej"                  f   fd„Z	 	 	 	 	 d9dedededededefd„Z	 	 	 	 d:dedededee   def
d„Z	 	 	 	 d:dedededee   def
d„Z	 	 	 	 d;deeef   dedee
eee   ef      dee   def
d„Z	 	 	 	 	 d<dedeee      d eeef   d!ed"ed#edefd$„Z	 	 	 	 d=deee      d eeef   d!ed"edef
d%„Z	 	 	 	 d=deee      d eeef   d!ed"edef
d&„Z	 	 	 	 d=deee      d eeef   d!ed"edef
d'„Z	 	 	 	 d>d ee   d!ed(ee   d)eee jB                        def
d*„Z"	 	 	 	 d>d ee   d!ed(ee   d)eee jB                        def
d+„Z 	 	 	 	 d?d,ed-ed.ee#   d/ee#   def
d0„Z$d@d ee%   d!ed1edefd2„Z&d3ed4ede
eef   fd5„Z'y)AÚProviderÚchance_of_getting_trueÚreturnc                 óT   — | j                   j                  j                  dd«      |k  S )zÏGenerate a random boolean value based on ``chance_of_getting_true``.

        :sample: chance_of_getting_true=25
        :sample: chance_of_getting_true=50
        :sample: chance_of_getting_true=75
        é   éd   ©Ú	generatorÚrandomÚrandint)Úselfr   s     ú_C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\faker\providers\misc\__init__.pyÚbooleanzProvider.boolean   s'   € ð �~‰~×$Ñ$×,Ñ,¨Q°Ó4Ð8NÑNÐNó    c                 ó\   — ddddœ| j                   j                  j                  dd«         S )zGGenerate ``None``, ``True``, or ``False``, each with equal probability.NTF)r   r   éÿÿÿÿr&   r   r   )r!   s    r"   Únull_booleanzProvider.null_boolean(   s8   € ð ØØñ
ð �.‰.×
Ñ
×
'Ñ
'¨¨AÓ
.ñ	0ð 	0r$   Úlengthc                 óî   — | j                   j                  rFt        |«      D �cg c]'  }| j                   j                  j	                  d«      ‘Œ) }}t        |«      S t        j                  |«      S c c}w )zÖGenerate a random binary blob of ``length`` bytes.

        If this faker instance has been seeded, performance will be signficiantly reduced, to conform
        to the seeding.

        :sample: length=64
        é   )r   Ú
_is_seededÚranger   Ú	randrangeÚbytesÚosÚurandom)r!   r(   Ú_Úblobs       r"   ÚbinaryzProvider.binary1   s_   € ð �>‰>×$Ò$ÜBGÈÄ-ÓPÁ-¸Q�D—N‘N×)Ñ)×3Ñ3°CÕ8À-ˆDÐPÜ˜“;Ðô �z‰z˜&Ó!Ð!ùò	 Qs   ¤,A2Ú
raw_outputc                 óâ   — t        j                  t        | j                  j                  j	                  «       «      j                  «       «      }|r|j                  «       S |j                  «       S )a2  Generate a random MD5 hash.

        If ``raw_output`` is ``False`` (default), a hexadecimal string representation of the MD5 hash
        will be returned. If ``True``, a ``bytes`` object representation will be returned instead.

        :sample: raw_output=False
        :sample: raw_output=True
        )ÚhashlibÚmd5Ústrr   r   ÚencodeÚdigestÚ	hexdigest©r!   r4   Úress      r"   r7   zProvider.md5A   sN   € ô %Ÿ[™[¬¨T¯^©^×-BÑ-B×-IÑ-IÓ-KÓ)L×)SÑ)SÓ)UÓVˆÙØ—:‘:“<ÐØ�}‰}‹Ðr$   c                 óâ   — t        j                  t        | j                  j                  j	                  «       «      j                  «       «      }|r|j                  «       S |j                  «       S )a6  Generate a random SHA-1 hash.

        If ``raw_output`` is ``False`` (default), a hexadecimal string representation of the SHA-1 hash
        will be returned. If ``True``, a ``bytes`` object representation will be returned instead.

        :sample: raw_output=False
        :sample: raw_output=True
        )r6   Úsha1r8   r   r   r9   r:   r;   r<   s      r"   r?   zProvider.sha1O   sN   € ô %Ÿ\™\¬#¨d¯n©n×.CÑ.C×.JÑ.JÓ.LÓ*M×*TÑ*TÓ*VÓWˆÙØ—:‘:“<ÐØ�}‰}‹Ðr$   c                 óâ   — t        j                  t        | j                  j                  j	                  «       «      j                  «       «      }|r|j                  «       S |j                  «       S )a:  Generate a random SHA-256 hash.

        If ``raw_output`` is ``False`` (default), a hexadecimal string representation of the SHA-256 hash
        will be returned. If ``True``, a ``bytes`` object representation will be returned instead.

        :sample: raw_output=False
        :sample: raw_output=True
        )r6   Úsha256r8   r   r   r9   r:   r;   r<   s      r"   rA   zProvider.sha256]   sN   € ô %Ÿ^™^¬C°·±×0EÑ0E×0LÑ0LÓ0NÓ,O×,VÑ,VÓ,XÓYˆÙØ—:‘:“<ÐØ�}‰}‹Ðr$   Úcast_toc                 óŽ   — t        j                  | j                  j                  j	                  d«      d¬«      }|� ||«      S |S )a"  Generate a random UUID4 object and cast it to another type if specified using a callable ``cast_to``.

        By default, ``cast_to`` is set to ``str``.

        May be called with ``cast_to=None`` to return a full-fledged ``UUID``.

        :sample:
        :sample: cast_to=None
        é€   é   )ÚintÚversion)ÚuuidÚUUIDr   r   Úgetrandbits)r!   rB   Úgenerated_uuids      r"   Úuuid4zProvider.uuid4k   sB   € ô %)§I¡I°$·.±.×2GÑ2G×2SÑ2SÐTWÓ2XÐbcÔ$dˆØÐÙ˜>Ó*Ð*ØÐr$   Úspecial_charsÚdigitsÚ
upper_caseÚ
lower_casec                 óœ  — d}g }|r9|j                  | j                  j                  j                  d«      «       |dz  }|rU|j                  | j                  j                  j                  t        j
                  «      «       |t        j
                  z  }|rU|j                  | j                  j                  j                  t        j                  «      «       |t        j                  z  }|rU|j                  | j                  j                  j                  t        j                  «      «       |t        j                  z  }t        |«      }||k  }	|	�s9t        j                  d|	fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }
t        j                  d	«      d
z   d|
iz  }t!        t        j"                  |«      «      ‚dx}}	| j%                  ||¬«      }t'        «       }t        |«      t        |«      k  rY|j)                  | j                  j                  j+                  dt        |«      dz
  «      «       t        |«      t        |«      k  rŒYt-        |«      D ]  \  }}||   ||<   Œ dj/                  |«      S )a‘  Generate a random password of the specified ``length``.

        The arguments ``special_chars``, ``digits``, ``upper_case``, and ``lower_case`` control
        what category of characters will appear in the generated password. If set to ``True``
        (default), at least one character from the corresponding category is guaranteed to appear.
        Special characters are characters from ``!@#$%^&*()_+``, digits are characters from
        ``0123456789``, and uppercase and lowercase characters are characters from the ASCII set of
        letters.

        :sample: length=12
        :sample: length=40, special_chars=False, upper_case=False
        Ú z!@#$%^&*()_+)ú<=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py5)sÚlenÚrequired_tokensr(   )Úpy0Úpy1Úpy3Úpy5z3Required length is shorter than required charactersz
>assert %(py7)sÚpy7N)r(   r   r   )Úappendr   r   ÚchoiceÚstringrN   Úascii_uppercaseÚascii_lowercaserT   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanationÚrandom_choicesÚsetÚaddr    Ú	enumerateÚjoin)r!   r(   rM   rN   rO   rP   ÚchoicesrU   Ú@py_assert2Ú@py_assert4Ú@py_format6Ú@py_format8ÚcharsÚrandom_indexesÚiÚindexs                   r"   ÚpasswordzProvider.password~   s?  € ð( ˆØˆÙØ×"Ñ" 4§>¡>×#8Ñ#8×#?Ñ#?ÀÓ#OÔPØ�~Ñ%ˆGÙØ×"Ñ" 4§>¡>×#8Ñ#8×#?Ñ#?ÄÇÁÓ#NÔOØ”v—}‘}Ñ$ˆGÙØ×"Ñ" 4§>¡>×#8Ñ#8×#?Ñ#?Ä×@VÑ@VÓ#WÔXØ”v×-Ñ-Ñ-ˆGÙØ×"Ñ" 4§>¡>×#8Ñ#8×#?Ñ#?Ä×@VÑ@VÓ#WÔXØ”v×-Ñ-Ñ-ˆGä�?Ó#ÐdÐ# vÑ-×d×dÖdÐ# v×d×d×d×d×dÑdŒs×d×dÓdŒs×d×d×d×d×dÒd�?×d×dÓd�?×d×dÔdÐ#×d×d×d×d×dÐd v×d×dÓd v×d×d×dÑdÐ/d×d×d×d×d×dÖdð ×(Ñ(¨¸Ð(Ó@ˆô $'£5ˆÜ�.Ó!¤C¨Ó$8Ò8Ø×Ñ˜tŸ~™~×4Ñ4×<Ñ<¸QÄÀEÃ
ÈQÁÓOÔPô �.Ó!¤C¨Ó$8Ó8ô " .Ö1‰HˆAˆuØ*¨1Ñ-ˆE�%ŠLð 2ð �w‰w�u‹~Ðr$   NÚuncompressed_sizeÚ	num_filesÚmin_file_sizeÚcompressionc                 óŒ  — t        t        |t        «       xs |dk  t        |t        «       xs |dk  t        |t        «       xs |dk  g«      rt        d«      ‚||z  |kD  rt	        d«      ‚|dv rt
        j                  }n:|dv rt
        j                  }n%|dv rt
        j                  }nt
        j                  }t        j                  «       }|}t        j                  |d|¬«      5 }t        d	|d	z   «      D ]“  }	| j                  j                  «       t!        |	«      z   }
|||	z
  |z  z
  }|	|k  r,| j                  j"                  j%                  ||«      }||z
  }n|}| j                  j'                  |«      }|j)                  |
|«       Œ• 	 d
d
d
«       |j+                  «       S # 1 sw Y   |j+                  «       S xY w)aÁ  Generate a bytes object containing a random valid zip archive file.

        The number and sizes of files contained inside the resulting archive can be controlled
        using the following arguments:

        - ``uncompressed_size`` - the total size of files before compression, 16 KiB by default
        - ``num_files`` - the number of files archived in resulting zip file, 1 by default
        - ``min_file_size`` - the minimum size of each file before compression, 4 KiB by default

        No compression is used by default, but setting ``compression`` to one of the values listed
        below will use the corresponding compression type.

        - ``'bzip2'`` or ``'bz2'`` for BZIP2
        - ``'lzma'`` or ``'xz'`` for LZMA
        - ``'deflate'``, ``'gzip'``, or ``'gz'`` for GZIP

        :sample: uncompressed_size=256, num_files=4, min_file_size=32
        :sample: uncompressed_size=256, num_files=32, min_file_size=4, compression='bz2'
        r   úO`num_files`, `min_file_size`, and `uncompressed_size` must be positive integersúH`uncompressed_size` is smaller than the calculated minimum required size©Úbzip2Úbz2©ÚlzmaÚxz)ÚdeflateÚgzipÚgzÚw)Úmoder{   r   N)ÚanyÚ
isinstancerF   Ú
ValueErrorrg   ÚzipfileÚ	ZIP_BZIP2ÚZIP_LZMAÚZIP_DEFLATEDÚ
ZIP_STOREDÚioÚBytesIOÚZipFiler,   r   Úpystrr8   r   r    r3   ÚwritestrÚgetvalue)r!   rx   ry   rz   r{   Úcompression_Ú
zip_bufferÚremaining_sizeÚ
zip_handleÚfile_numberÚfilenameÚmax_allowed_sizeÚ	file_sizeÚdatas                 r"   ÚzipzProvider.zip±   sÂ  € ô4 ä˜y¬#Ó.Ð.Ò@°)¸q±.Ü˜}¬cÓ2Ð2ÒH°mÀqÑ6HÜÐ0´#Ó6Ð6ÒPÐ:KÈqÑ:Pðô
ô Øaóð ð ˜9Ñ$Ð'8Ò8Ü ØZóð ð Ð*Ñ*Ü"×,Ñ,‰LØ˜NÑ*Ü"×+Ñ+‰LØÐ5Ñ5Ü"×/Ñ/‰Lä"×-Ñ-ˆLä—Z‘Z“\ˆ
Ø*ˆÜ�_‰_˜Z¨c¸|ÕLÐPZÜ$ Q¨	°A©Ö6�ØŸ>™>×/Ñ/Ó1´C¸Ó4DÑD�à#1°YÀÑ5LÐP]Ñ4]Ñ#]Ð Ø Ò*Ø $§¡× 5Ñ 5× =Ñ =¸mÐM]Ó ^�IØ%3°iÑ%?‘Nà .�Ià—~‘~×,Ñ,¨YÓ7�Ø×#Ñ# H¨dÕ3ñ  7÷ Mð ×"Ñ"Ó$Ð$÷ Mð ×"Ñ"Ó$Ð$ús   Ã,B&F+Æ+Gc                 ó  — t        t        |t        «       xs |dk  t        |t        «       xs |dk  t        |t        «       xs |dk  g«      rt        d«      ‚||z  |kD  rt	        d«      ‚|dv rd}n|dv rd}n	|dv rd	}nd
}t        j                  «       }|}t        j                  ||¬«      5 }t        d|dz   «      D �]  }	t        j                  «       }
| j                  j                  «       t        |	«      z   }|||	z
  |z  z
  }|	|k  r,| j                  j                  j                  ||«      }||z
  }n|}t        j                  |¬«      }| j                  j!                  |«      }|
j#                  |«       t%        |
j'                  «       «      |_        |
j+                  d«       |j-                  ||
«       |
j/                  «        �Œ 	 ddd«       |j'                  «       S # 1 sw Y   |j'                  «       S xY w)a©  Generate a bytes object containing a random valid tar file.

        The number and sizes of files contained inside the resulting archive can be controlled
        using the following arguments:

        - ``uncompressed_size`` - the total size of files before compression, 16 KiB by default
        - ``num_files`` - the number of files archived in resulting zip file, 1 by default
        - ``min_file_size`` - the minimum size of each file before compression, 4 KiB by default

        No compression is used by default, but setting ``compression`` to one of the values listed
        below will use the corresponding compression type.

        - ``'bzip2'`` or ``'bz2'`` for BZIP2
        - ``'lzma'`` or ``'xz'`` for LZMA
        - ``'gzip'`` or ``'gz'`` for GZIP

        :sample: uncompressed_size=256, num_files=4, min_file_size=32
        :sample: uncompressed_size=256, num_files=32, min_file_size=4, compression='bz2'
        r   r}   r~   )r†   r‡   zw:gzr   zw:bz2r‚   zw:xzrˆ   )r‰   Úfileobjr   )ÚnameN)rŠ   r‹   rF   rŒ   rg   r’   r“   ÚtarfileÚopenr,   r   r•   r8   r   r    ÚTarInfor3   ÚwriterT   r—   ÚsizeÚseekÚaddfileÚclose)r!   rx   ry   rz   r{   r‰   Ú
tar_bufferrš   Ú
tar_handlerœ   Úfile_bufferr�   rž   rŸ   Útarinfor    s                   r"   ÚtarzProvider.taró   sú  € ô4 ä˜y¬#Ó.Ð.Ò@°)¸q±.Ü˜}¬cÓ2Ð2ÒH°mÀqÑ6HÜÐ0´#Ó6Ð6ÒPÐ:KÈqÑ:Pðô
ô Øaóð ð ˜9Ñ$Ð'8Ò8Ü ØZóð ð ˜.Ñ(Ø‰DØÐ,Ñ,Ø‰DØ˜NÑ*Ø‰DàˆDä—Z‘Z“\ˆ
Ø*ˆÜ�\‰\˜t¨ZÕ8¸JÜ$ Q¨	°A©×6�Ü Ÿj™j›l�ØŸ>™>×/Ñ/Ó1´C¸Ó4DÑD�à#1°YÀÑ5LÐP]Ñ4]Ñ#]Ð Ø Ò*Ø $§¡× 5Ñ 5× =Ñ =¸mÐM]Ó ^�IØ%3°iÑ%?‘Nà .�Iä!Ÿ/™/¨xÔ8�Ø—~‘~×,Ñ,¨YÓ7�Ø×!Ñ! $Ô'Ü" ;×#7Ñ#7Ó#9Ó:�”Ø× Ñ  Ô#Ø×"Ñ" 7¨KÔ8Ø×!Ñ!Ö#ñ#  7÷ 9ð& ×"Ñ"Ó$Ð$÷' 9ð& ×"Ñ"Ó$Ð$ús   Â3D"G.Ç.Hr©   Úimage_formatÚhueÚ
luminosityc           
      óâ  — 	 ddl }ddl}|\  }}|j                  j                  d|| j                  j                  ||¬«      «      }|j                  j                  |«      }	|	j                  t        | j                  dd«      «      D �
cg c]&  }
| j                  d|«      | j                  d|«      f‘Œ( c}
| j                  j                  ||¬«      | j                  j                  ||¬«      ¬	«       t        j                  «       5 }|j                  ||¬
«       |j!                  d«       |j#                  «       cddd«       S # t        $ r t        dd«      ‚w xY wc c}
w # 1 sw Y   yxY w)a;  Generate an image and draw a random polygon on it using the Python Image Library.
        Without it installed, this provider won't be functional. Returns the bytes representing
        the image in a given format.

        The argument ``size`` must be a 2-tuple containing (width, height) in pixels. Defaults to 256x256.

        The argument ``image_format`` can be any valid format to the underlying library like ``'tiff'``,
        ``'jpeg'``, ``'pdf'`` or ``'png'`` (default). Note that some formats need present system libraries
        prior to building the Python Image Library.
        Refer to https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html for details.

        The arguments ``hue`` and ``luminosity`` are the same as in the color provider and are simply forwarded to
        it to generate both the background and the shape colors. Therefore, you can ask for a "dark blue" image, etc.

        :sample: size=(2, 2), hue='purple', luminosity='bright', image_format='pdf'
        :sample: size=(16, 16), hue=[90,270], image_format='ico'
        r   Nz-`image` requires the `Pillow` python library.ÚimageÚRGB)r³   r´   é   é   )ÚfillÚoutline)Úformat)Ú	PIL.ImageÚPIL.ImageDrawÚImportErrorr   ÚImageÚnewr   ÚcolorÚ	ImageDrawÚDrawÚpolygonr,   Ú
random_intr’   r“   Úsaverª   Úread)r!   r©   r²   r³   r´   ÚPILÚwidthÚheightr¶   Údrawr1   Úfobjs               r"   r¶   zProvider.image;  sB  € ð0	_ÛÛ ð ‰ˆ�Ø—	‘	—‘˜e T¨4¯>©>×+?Ñ+?ÀCÐT^Ð+?Ó+_Ó`ˆØ�}‰}×!Ñ! %Ó(ˆØ�‰ÜNSÐTX×TcÑTcÐdeÐgiÓTjÔNkÓlÑNkÈˆd�o‰o˜a Ó'¨¯©¸¸FÓ)CÒDÐNkÑlØ—‘×%Ñ%¨#¸*Ð%ÓEØ—N‘N×(Ñ(¨S¸ZÐ(ÓHð 	ô 	
ô
 �Z‰ZŒ\˜TØ�J‰J�t LˆJÔ1Ø�I‰I�aŒLØ—9‘9“;÷ ‰\øô ò 	_Ü$Ð%TÐV]Ó^Ð^ð	_üò m÷ ˆ\ús   ‚E Â
+E Ä	4E%ÅEÅ%E.ÚdialectÚheaderÚdata_columnsÚnum_rowsÚinclude_row_idsÚ	fmtparamsc                 óÈ  — t        |t        «      r|dk  rt        d«      ‚t        |t        t        f«      st        d«      ‚|�Ct        |t        t        f«      st        d«      ‚t        |«      t        |«      k7  rt        d«      ‚t        j                  «       }t        j                  |fd|i|¤Ž}|r0|rt        |«      }|j                  dd«       |j                  |«       t        d|dz   «      D ]X  }	|D �
cg c]  }
| j                  j                  |
«      ‘Œ }}
|r|j                  dt!        |	«      «       |j                  |«       ŒZ |j#                  «       S c c}
w )	aš  Generate random delimiter-separated values.

        This method's behavior share some similarities with ``csv.writer``. The ``dialect`` and
        ``**fmtparams`` arguments are the same arguments expected by ``csv.writer`` to control its
        behavior, and instead of expecting a file-like object to where output will be written, the
        output is controlled by additional keyword arguments and is returned as a string.

        The ``dialect`` argument defaults to ``'faker-csv'`` which is the name of a ``csv.excel``
        subclass with full quoting enabled.

        The ``header`` argument expects a list or a tuple of strings that will serve as the header row
        if supplied. The ``data_columns`` argument expects a list or a tuple of string tokens, and these
        string tokens will be passed to  :meth:`pystr_format() <faker.providers.python.Provider.pystr_format>`
        for data generation. Argument Groups are used to pass arguments to the provider methods.
        Both ``header`` and ``data_columns`` must be of the same length.

        Example:
            fake.set_arguments('top_half', {'min_value': 50, 'max_value': 100})
            fake.dsv(data_columns=('{{ name }}', '{{ pyint:top_half }}'))

        The ``num_rows`` argument controls how many rows of data to generate, and the ``include_row_ids``
        argument may be set to ``True`` to include a sequential row ID column.

        :sample: dialect='excel', data_columns=('{{name}}', '{{address}}')
        :sample: dialect='excel-tab', data_columns=('{{name}}', '{{address}}'), include_row_ids=True
        :sample: data_columns=('{{name}}', '{{address}}'), num_rows=5, delimiter='$'
        r   z%`num_rows` must be a positive integerz(`data_columns` must be a tuple or a listz"`header` must be a tuple or a listz6`header` and `data_columns` must have matching lengthsrÎ   ÚIDr   )r‹   rF   rŒ   ÚlistÚtupleÚ	TypeErrorrT   r’   ÚStringIOÚcsvÚwriterÚinsertÚwriterowr,   r   Úpystr_formatr8   r—   )r!   rÎ   rÏ   rÐ   rÑ   rÒ   rÓ   Ú
dsv_bufferrÛ   Úrow_numÚcolumnÚrows               r"   ÚdsvzProvider.dsvf  s4  € ôJ ˜(¤CÔ(¨H¸ªMÜÐDÓEÐEÜ˜,¬¬u¨Ô6ÜÐFÓGÐGØÐÜ˜f¤t¬U mÔ4ÜÐ DÓEÐEÜ�6‹{œc ,Ó/Ò/Ü Ð!YÓZÐZä—[‘[“]ˆ
Ü—‘˜JÑE°ÐE¸9ÑEˆáÙÜ˜f›�Ø—‘˜a Ô&Ø�O‰O˜FÔ#ä˜Q ¨1¡Ö-ˆGÙEQÓRÁ\¸6�4—>‘>×.Ñ.¨vÕ6À\ˆCÐRÙØ—
‘
˜1œc '›lÔ+à�O‰O˜CÕ ð .ð ×"Ñ"Ó$Ð$ùò Ss   Ã;"Ec                 ó.   — | j                  ||||d¬«      S )a  Generate random comma-separated values.

        For more information on the different arguments of this method, please refer to
        :meth:`dsv() <faker.providers.misc.Provider.dsv>` which is used under the hood.

        :sample: data_columns=('{{name}}', '{{address}}'), num_rows=10, include_row_ids=False
        :sample: header=('Name', 'Address', 'Favorite Color'),
                data_columns=('{{name}}', '{{address}}', '{{safe_color_name}}'),
                num_rows=10, include_row_ids=True
        Ú,©rÏ   rÐ   rÑ   rÒ   Ú	delimiter©rã   ©r!   rÏ   rÐ   rÑ   rÒ   s        r"   rÚ   zProvider.csv§  ó)   € ð" �x‰xØØ%ØØ+Øð ó 
ð 	
r$   c                 ó.   — | j                  ||||d¬«      S )a   Generate random tab-separated values.

        For more information on the different arguments of this method, please refer to
        :meth:`dsv() <faker.providers.misc.Provider.dsv>` which is used under the hood.

        :sample: data_columns=('{{name}}', '{{address}}'), num_rows=10, include_row_ids=False
        :sample: header=('Name', 'Address', 'Favorite Color'),
                data_columns=('{{name}}', '{{address}}', '{{safe_color_name}}'),
                num_rows=10, include_row_ids=True
        Ú	ræ   rè   ré   s        r"   ÚtsvzProvider.tsvÀ  s)   € ð" �x‰xØØ%ØØ+Øð ó 
ð 	
r$   c                 ó.   — | j                  ||||d¬«      S )a  Generate random pipe-separated values.

        For more information on the different arguments of this method, please refer to
        :meth:`dsv() <faker.providers.misc.Provider.dsv>` which is used under the hood.

        :sample: data_columns=('{{name}}', '{{address}}'), num_rows=10, include_row_ids=False
        :sample: header=('Name', 'Address', 'Favorite Color'),
                data_columns=('{{name}}', '{{address}}', '{{safe_color_name}}'),
                num_rows=10, include_row_ids=True
        Ú|ræ   rè   ré   s        r"   ÚpsvzProvider.psvÙ  rê   r$   ÚindentÚclsc                 óH   — | j                  ||||¬«      j                  «       S )zñ
        Generate random JSON structure and return as bytes.

        For more information on the different arguments of this method, refer to
        :meth:`json() <faker.providers.misc.Provider.json>` which is used under the hood.
        )rÐ   rÑ   rñ   rò   )Újsonr9   )r!   rÐ   rÑ   rñ   rò   s        r"   Ú
json_byteszProvider.json_bytesò  s%   € ð �y‰y l¸XÈfÐZ]ˆyÓ^×eÑeÓgÐgr$   c                 ó¼  ‡ ‡	‡
— dddœ}|r|n|}dt         t           dt        fˆ
ˆ fd„Š
dt        t        t        t
        t        t        t        f   f   dt        fˆ	ˆ fd„Š	dt        t        t        f   dt        fˆ	ˆ
fd	„}|d
k(  rt        j                   ||«      ||¬«      S t        |«      D �cg c]
  } ||«      ‘Œ }}t        j                  |||¬«      S c c}w )a³  
        Generate random JSON structure values.

        Using a dictionary or list of records that is passed as ``data_columns``,
        define the structure that is used to build JSON structures.  For complex
        data structures it is recommended to use the dictionary format.

        Data Column Dictionary format:
            {'key name': 'definition'}

        The definition can be 'provider', 'provider:argument_group', tokenized
        'string {{ provider:argument_group }}' that is passed to the python
        provider method pystr_format() for generation, or a fixed '@word'.
        Using Lists, Tuples, and Dicts as a definition for structure.

        Example:
            fake.set_arguments('top_half', {'min_value': 50, 'max_value': 100})
            fake.json(data_columns={'Name': 'name', 'Score': 'pyint:top_half'})

        Data Column List format:
            [('key name', 'definition', {'arguments'})]

        With the list format the definition can be a list of records, to create
        a list within the structure data.  For literal entries within the list,
        set the 'field_name' to None.

        :param data_columns: specification for the data structure
        :type data_columns: dict
        :param num_rows: number of rows the returned
        :type num_rows: int
        :param indent: number of spaces to indent the fields
        :type indent: int
        :param cls: optional json encoder to use for non-standard objects such as datetimes
        :type cls: json.JSONEncoder
        :return: Serialized JSON data
        :rtype: str

        :sample: data_columns={'Spec': '@1.0.1', 'ID': 'pyint',
                'Details': {'Name': 'name', 'Address': 'address'}}, num_rows=2
        :sample: data_columns={'Candidates': ['name', 'name', 'name']},
                num_rows=1
        :sample: data_columns=[('Name', 'name'), ('Points', 'pyint',
                {'min_value': 50, 'max_value': 100})], num_rows=1
        ú{{name}}ú{{address}})r¤   Ú	residencyr    r   c                 óf  •— i }| D ]£  ^}}}|r|d   ni }t        |t        «      st        d«      ‚|€ ‰j                  |fi |¤Žc S t        |t        «      r ‰|«      ||<   Œ]t        |t
        t        f«      r|D �cg c]  } ‰|g«      ‘Œ c}||<   ŒŽ ‰j                  |fi |¤Ž||<   Œ¥ |S c c}w )Nr   ú,Invalid arguments type. Must be a dictionary)r‹   ÚdictrØ   Ú_value_format_selectionr×   rÖ   rj   )	r    Úentryr¤   Ú
definitionÚ	argumentsÚkwargsÚitemÚprocess_list_structurer!   s	          €€r"   r  z-Provider.json.<locals>.process_list_structure:  sÇ   ø€ Ø$&ˆEã04Ð,��j 9Ù)2˜ 1š¸�ä! &¬$Ô/Ü#Ð$RÓSÐSà�<Ø7˜4×7Ñ7¸
ÑMÀfÑMÒMä˜j¬%Ô0Ù"8¸Ó"D�E˜$’KÜ 
¬T´3¨KÔ8ÙNXÓ"YÉjÀdÑ#9¸4¸&Õ#AÈjÑ"Y�E˜$’Kà"> $×">Ñ">¸zÑ"TÈVÑ"T�E˜$’Kð 15ð ˆLùò #Zs   Á=B.c                 ó–  •— i }t        | t        «      r‰j                  | «      S t        | t        «      r�| j	                  «       D ]z  \  }}t        |t
        t        t        f«      r|D �cg c]
  } ‰|«      ‘Œ c}||<   Œ;t        |t        t        t        t        f«      r ‰|«      ||<   Œg‰j                  |«      ||<   Œ| |S | S c c}w )N)r‹   r8   rý   rü   Úitemsr×   rÖ   rj   rF   ÚfloatÚbool)r    rþ   r¤   rÿ   r  Úprocess_dict_structurer!   s        €€r"   r  z-Provider.json.<locals>.process_dict_structureN  sº   ø€ Ø$&ˆEä˜$¤Ô$Ø×3Ñ3°DÓ9Ð9ä˜$¤Ô%Ø(,¯
©
®Ñ$�D˜*Ü! *¬u´d¼CÐ.@ÔAÙPZÓ&[ÑPZÈÑ'=¸dÕ'CÐPZÑ&[˜˜dšÜ# J´´s¼EÄ4Ð0HÔIÙ&<¸ZÓ&H˜˜dšà&*×&BÑ&BÀ:Ó&N˜˜dšð )5ð �àˆKùò '\s   Á*CrÐ   c                 óz   •— t        | t        «      r ‰| «      S t        | t        «      r ‰| «      S t        d«      ‚)Nz7Invalid data_columns type. Must be a dictionary or list)r‹   rü   rÖ   rØ   )rÐ   r  r  s    €€r"   Úcreate_json_structurez,Provider.json.<locals>.create_json_structure`  s9   ø€ Ü˜,¬Ô-Ù-¨lÓ;Ð;ä˜,¬Ô-Ù-¨lÓ;Ð;äÐUÓVÐVr$   r   )rñ   rò   )r   r   r   rF   r  r  r   r8   r   rü   rô   Údumpsr,   )r!   rÐ   rÑ   rñ   rò   Údefault_data_columnsr
  r1   r    r  r  s   `        @@r"   rô   zProvider.json  sÛ   ú€ ðh Ø&ñ 
Ðñ ;G©,ÐL`ˆð	¬´#©ð 	¼3ö 	ð(	¬¬s´E¼4ÄÄcÌ3ÀhÁÐ/OÑ)Pð 	ÔUXö 	ð$	W´´d¼D°jÑ0Að 	WÄdö 	Wð �qŠ=Ü—:‘:Ñ3°LÓAÈ&ÐVYÔZÐZä=BÀ8¼_ÓM¹_¸Ñ% lÕ3¸_ˆÐMÜ�z‰z˜$ v°3Ô7Ð7ùò Ns   Â0CÚnb_elementsÚvariable_nb_elementsÚvalue_typesÚallowed_typesc                 óÖ   — 	 ddl }| j                  j	                  ||||¬«      }| j                  j                  «       |i}|j                  |«      S # t        $ r t        dd«      ‚w xY w)a  
        Returns some XML.

        :nb_elements: number of elements for dictionary
        :variable_nb_elements: is use variable number of elements for dictionary
        :value_types: type of dictionary values

        Note: this provider required xmltodict library installed
        r   Nz.`xml` requires the `xmltodict` Python library.Úxml)r  r  r  r  )Ú	xmltodictr¿   r   r   ÚpydictÚwordÚunparse)r!   r  r  r  r  r  Ú_dicts          r"   r  zProvider.xmlo  s~   € ð 	^Ûð —‘×%Ñ%Ø#Ø!5Ø#Ø'ð	 &ó 
ˆð —‘×$Ñ$Ó&¨Ð.ˆØ× Ñ  Ó'Ð'øô ò 	^Ü$Ð%UÐW\Ó]Ð]ð	^ús   ‚A ÁA(Úalignc           	      óˆ  — dddddifg}|€|}ddd	d
œ}g }t        |«      D ]�  }g }|D ]f  ^}	}
}|r|d   ni }t        |t        «      st        d«      ‚ | j                  |
fi |¤Ž}|j                  ||j                  |d«      › |	› �›d|	 «       Œh |j                  dj                  |«      «       Œ‘ dj                  |«      S )a  
        Generate random fixed width values.

        Using a list of tuple records that is passed as ``data_columns``, that
        defines the structure that will be generated. Arguments within the
        record are provider specific, and should be a dictionary that will be
        passed to the provider method.

        Data Column List format
            [('field width', 'definition', {'arguments'})]

        The definition can be 'provider', 'provider:argument_group', tokenized
        'string {{ provider:argument_group }}' that is passed to the python
        provider method pystr_format() for generation, or a fixed '@word'.
        Using Lists, Tuples, and Dicts as a definition for structure.

        Argument Groups can be used to pass arguments to the provider methods,
        but will override the arguments supplied in the tuple record.

        Example:
            fake.set_arguments('top_half', {'min_value': 50, 'max_value': 100})
            fake.fixed_width(data_columns=[(20, 'name'), (3, 'pyint:top_half')])

        :param data_columns: specification for the data structure
        :type data_columns: list
        :param num_rows: number of rows the generator will yield
        :type num_rows: int
        :param align: positioning of the value. (left, middle, right)
        :type align: str
        :return: Serialized Fixed Width data
        :rtype: str

        :sample: data_columns=[(20, 'name'), (3, 'pyint', {'min_value': 50,
                'max_value': 100})], align='right', num_rows=2
        )é   r¤   r¸   ÚpyintÚ	max_valuer  NÚ<Ú^Ú>)ÚleftÚmiddleÚrightr   rû   rR   Ú
)r,   r‹   rü   rØ   rý   r[   Úgetrm   )r!   rÐ   rÑ   r  r  Ú	align_mapr    r1   râ   rÊ   rÿ   r   r  Úresults                 r"   Úfixed_widthzProvider.fixed_widthŒ  sô   € ðJ Ø�˜+ rÐ*Ð+ð 
Ðð ÐØ(<ˆLàØØñ
ˆ	ð
 ˆä�x–ˆAØˆCã1=Ð-��z IÙ)2˜ 1š¸�ä! &¬$Ô/Ü#Ð$RÓSÐSà5˜×5Ñ5°jÑKÀFÑK�Ø—
‘
˜f i§m¡m°E¸3Ó&?Ð%@ÀÀÐ$GÐHÈ&È5ÐQÕRð 2>ð �K‰K˜Ÿ™ ›Õ%ð !ð �y‰y˜‹Ðr$   rÿ   r  c                 óè  — t        j                  d|«      r| j                  j                  |«      S t        j                  d|«      r|j	                  d«      S t        j                  d|«      rh|j                  d«      \  }}| j                  j                  |j                  «       «      } | j                  j                  |j                  «       fi |¤ŽS  | j                  j                  |fi |¤ŽS )a™  
        Formats the string in different ways depending on its contents.

        The return can be the '@word' itself, a '{{ token }}' passed to PyStr,
        or a 'provider:argument_group' format field that returns potentially
        a non-string type.

        This ensures that Numbers, Boolean types that are generated in the
        JSON structures in there proper type, and not just strings.
        z.*\{\{.*\}\}.*z^@.*Ú@z^[a-zA-Z0-9_-]*:\wÚ:)	ÚreÚmatchr   rÞ   ÚlstripÚsplitÚget_argumentsÚstripr¼   )r!   rÿ   r  Úargument_groupr   s        r"   rý   z Provider._value_format_selectionÌ  sÏ   € ô �8‰8Ð% zÔ2Ø—>‘>×.Ñ.¨zÓ:Ð:ô �8‰8�G˜ZÔ(Ø×$Ñ$ SÓ)Ð)ô �8‰8Ð)¨:Ô6Ø)3×)9Ñ)9¸#Ó)>Ñ&ˆJ˜ØŸ™×4Ñ4°^×5IÑ5IÓ5KÓLˆIà(�4—>‘>×(Ñ(¨×)9Ñ)9Ó);ÑI¸yÑIÐIð %ˆt�~‰~×$Ñ$ ZÑ:°6Ñ:Ð:r$   )é2   )i   )F)é
   TTTT)i   r   i   N))r*   r*   ÚpngNN)r   N©r÷   rø   r3  F)Nr5  r3  F)Nr3  NN)r3  TNN)Nr3  r   )(Ú__name__Ú
__module__Ú__qualname__rF   r  r#   r   r'   r.   r3   r   r8   r7   r?   rA   r   rH   rI   rL   rw   r¡   r±   r
   r   r¶   r   rã   rÚ   rí   rð   r   r   rô   ÚJSONEncoderrõ   r   r  r   r'  rý   © r$   r"   r   r      s  „ ñO¨cð O¸4ó Oð0˜h t™nó 0ñ"˜Sð "¸ó "ñ ˜dð ¨u°U¸C°ZÑ/@ó ñ˜tð °°e¸S°jÑ0Aó ñ ð °%¸¸s¸
Ñ2Có ð  ^añà˜% ¨$¯)©)¨°cÐ)9Ñ :¸HÀdÇiÁiÀ[ÐRWÐEWÑ<XÐ XÑYÑZðð 
ˆu�c˜4Ÿ9™9Ð$Ñ	%óð* Ø"ØØØñ1àð1ð ð1ð ð	1ð
 ð1ð ð1ð 
ó1ðj "'ØØ!Ø%)ñ@%àð@%ð ð@%ð ð	@%ð
 ˜c‘]ð@%ð 
ó@%ðH "'ØØ!Ø%)ñF%àðF%ð ðF%ð ð	F%ð
 ˜c‘]ðF%ð 
óF%ðT !+Ø!Ø8<Ø$(ñ)à�C˜�H‰oð)ð ð)ð �e˜C ¨#¡°Ð3Ñ4Ñ5ð	)ð
 ˜S‘Mð)ð 
ó)ðZ #Ø*.Ø(CØØ %ñ?%àð?%ð ˜ #™Ñ'ð?%ð ˜C ˜H‘oð	?%ð
 ð?%ð ð?%ð ð?%ð 
ó?%ðF +/Ø(CØØ %ñ
à˜ #™Ñ'ð
ð ˜C ˜H‘oð
ð ð	
ð
 ð
ð 
ó
ð6 +/Ø(CØØ %ñ
à˜ #™Ñ'ð
ð ˜C ˜H‘oð
ð ð	
ð
 ð
ð 
ó
ð6 +/Ø(CØØ %ñ
à˜ #™Ñ'ð
ð ˜C ˜H‘oð
ð ð	
ð
 ð
ð 
ó
ð6 (,ØØ $Ø04ñhà˜t‘nðhð ðhð ˜‘ð	hð
 �d˜4×+Ñ+Ñ,Ñ-ðhð 
óhð" (,ØØ $Ø04ñl8à˜t‘nðl8ð ðl8ð ˜‘ð	l8ð
 �d˜4×+Ñ+Ñ,Ñ-ðl8ð 
ól8ð` Ø%)Ø+/Ø-1ñ(àð(ð #ð(ð ˜iÑ(ð	(ð
   	Ñ*ð(ð 
ó(ñ:>¨°Ñ(=ð >ÐPSð >Ðadð >Ðruó >ð@;°#ð ;Àð ;ÈÈsÐTWÈxÉô ;r$   r   )-Úbuiltinsrb   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter`   rÚ   r6   r’   rô   r/   r+  r]   r¥   rH   r�   Útypingr   r   r   r   r   r   r	   r
   r   r   Útyping_extensionsr   Úfaker.exceptionsr   rR   r   Úpythonr   Ú	localizedÚregister_dialectÚexcelÚ	QUOTE_ALLrF   r8   r   Ú__annotations__r   r   r:  r$   r"   Ú<module>rH     s¬   ðß  … ƒ
Û Û 	Û Û 	Û 	Û Û Û Û ç Y× Y× Yå 'å /å Ý à€	à €× Ñ �[ #§)¡)°S·]±]Õ Cð ˜e C¨ H™o¨u°S¸#¸tÀCÈÀH¹~Ð5MÑ/NÐNÑO€
ˆIÓ OØ˜jÑ)€ˆYÓ )ôJ;ˆ|õ J;r$   