ó
    %ÑLj� ã                   óø  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	J
r
JrJrJr  SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJrJr  SSKrSSKJrJrJr  SSKJr  SSK r SSK!J"r"  SS	K#J$r$  SS
K%J&r'J(r(J)r)  SSK*J+r+  SSK!J,r,  SSK-J.r.J/r/J0r0J1r1J2r2  \3" 5       r4/ SQr5\"Rl                  r6\
\7\8\Rr                  \Rt                  \R                  \Rv                  4   r<\=\>   r?\R€                  \>\4   rA\" S5      rB " S S5      rC\C" 5       rD\RŠ                   " S S\'5      5       r& " S S\ RŒ                  5      rFS rG " S S5      rH " S S\R€                  5      rI\RŠ                   " S S\.5      5       rJ\RŠ                   " S S\.5      5       rK\RŠ                   " S S \K5      5       rL\RŠ                   " S! S"5      5       rM\RŠ                   " S# S$5      5       rN\RŠ                   " S% S&\K5      5       rO\RŠ                   " S' S(\K5      5       rP\RŠ                  " S)S*9 " S+ S,5      5       rQ\RŠ                   " S- S.5      5       rR\RŠ                   " S/ S05      5       rS\RŠ                   " S1 S2\P5      5       rT\RŠ                  " S)S*9 " S3 S45      5       rU\RŠ                   " S5 S6\P5      5       rV\RŠ                   " S7 S85      5       rW\RŠ                  " S)S*9 " S9 S:5      5       rX " S; S<5      rYg)=zÑFunctionality to read and write metadata for CSV files.

This module implements (partially) the W3C recommendation
"Metadata Vocabulary for Tabular Data".

.. seealso:: https://www.w3.org/TR/tabular-metadata/
é    N)ÚOptionalÚUnionÚAnyÚLiteralÚTypeVar)ÚIterableÚ	Generator)ÚurljoinÚurlparseÚ
urlunparse)Útagsé   )Úutils©Ú	DATATYPES)ÚDialectÚUnicodeReaderWithLineNumberÚUnicodeWriter)ÚDataPackage)Újsonld)ÚDescriptionBaseÚdataclass_asdictÚ
NAMESPACESÚdialect_propsÚvalid_context_property)	Ú
TableGroupÚTableÚColumnÚ
ForeignKeyÚLinkÚNaturalLanguageÚDatatypeÚis_urlÚCSVWÚTc                   ó   • \ rS rSrSrg)ÚInvalidé8   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r)   ó    Ú›C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\csvw/metadata.pyr'   r'   8   s   † Úr/   r'   c                   ó(   • \ rS rSr% SrSr\\S'   Srg)r   é?   aI  
The spec is ambiguous regarding a default for the commentPrefix property:

> commentPrefix
>     An atomic property that sets the comment prefix flag to the single provided value, which
>     MUST be a string. The default is "#".

vs.

> comment prefix
>     A string that, when it appears at the beginning of a row, indicates that the row is a
>     comment that should be associated as a rdfs:comment annotation to the table. This is set
>     by the commentPrefix property of a dialect description. The default is null, which means
>     no rows are treated as comments. A value other than null may mean that the source numbers
>     of rows are different from their numbers.

So, in order to pass the number formatting tests, with column names like `##.#`, we chose
the second reading - i.e. by default no rows are treated as comments.
NÚcommentPrefixr)   )	r*   r+   r,   r-   Ú__doc__r3   ÚstrÚ__annotations__r.   r)   r/   r0   r   r   ?   s   ‡ ñð& €M�3Ör/   r   c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚURITemplateéW   zAURITemplate properties support expansion, given suitable context.c                 óŽ   >• [        U[        5      (       a  U R                  U:H  $ [        US5      (       d  g[        TU ]  U5      $ )NÚuriF)Ú
isinstancer5   r;   ÚhasattrÚsuperÚ__eq__)ÚselfÚotherÚ	__class__s     €r0   r?   ÚURITemplate.__eq__Y   s>   ø€ Ü�eœS×!Ñ!Ø—8‘8˜uÑ$Ð$Ü�u˜e×$Ñ$ØÜ‰w‰~˜eÓ$Ð$r/   c                 ó   • U  $ ©Nr)   ©r@   Ú_s     r0   ÚasdictÚURITemplate.asdict`   s
   € Ø�Ðr/   r)   )	r*   r+   r,   r-   r4   r?   rH   r.   Ú__classcell__©rB   s   @r0   r8   r8   W   s   ø† ÙKõ%÷ð r/   r8   c                 ó‚   • U c  g [        U [        5      (       d  [        R                  " S5        [        $ [        U 5      $ )NzInvalid value for Url property)r<   r5   ÚwarningsÚwarnÚINVALIDr8   ©Úvs    r0   Úconvert_uri_templaterR   d   s3   € Ø�yØÜ�aœ×ÑÜ�ŠÐ6Ô7ÜˆÜ�q‹>Ðr/   c                   ó”   • \ rS rSrSrS\\\R                  4   4S jr	\
S\S \\R                  4   4S j5       rS rS rS	 rS
 rSrg)r    ém   zC

.. seealso:: http://w3c.github.io/csvw/metadata/#link-properties
Ústringc                 óp   • [        U[        [        R                  45      (       d  [	        S5      eXl        g )NzInvalid value for link property)r<   r5   ÚpathlibÚPathÚ
ValueErrorrU   )r@   rU   s     r0   Ú__init__ÚLink.__init__s   s)   € Ü˜&¤3¬¯©Ð"5×6Ñ6ÜÐ>Ó?Ð?Ø�r/   rQ   c                 ó@   • [        U[        5      (       a  U$ U " U5      $ rE   )r<   r    )ÚclsrQ   s     r0   Ú
from_valueÚLink.from_valuex   s   € ä�aœ×ÑØˆHÙ�1‹vˆr/   c                 ó   • U R                   $ rE   ©rU   ©r@   s    r0   Ú__str__ÚLink.__str__~   s   € Ø�{‰{Ðr/   c                 ó   • U R                   $ )z=Not really a dict, but at least a JSON-serializable datatype.ra   rF   s     r0   rH   ÚLink.asdict�   s   € à�{‰{Ðr/   c                 ób   • [        U[        5      (       a  U R                  UR                  :H  $ S$ ©NF)r<   r    rU   ©r@   rA   s     r0   r?   ÚLink.__eq__…   s(   € ô /9¸Ä×.EÑ.Eˆt�{‰{˜eŸl™lÑ*ÐPÈ5ÐPr/   c                 ó  • [        US5      (       ab  [        U R                  5      (       a  U R                  $ UR                  5       (       a  XR                  -  $ UR                  U R                  -  $ [        XR                  5      $ )z¡
Resolve a `Link` relative to `base`.

:param base:
:return: Either a string, representing a URL, or a `pathlib.Path` object, representing         a local file.
Újoinpath)r=   r#   rU   Úis_dirÚparentr
   )r@   Úbases     r0   ÚresolveÚLink.resolveŠ   sb   € ô �4˜×$Ñ$Ü�d—k‘k×"Ñ"Ø—{‘{Ð"Ø ŸK™KŸM™M�D¿k¹kÑIÐI¨t¯{©{¸d¿k¹kÑIÐIÜ�tŸ[™[Ó)Ð)r/   ra   N)r*   r+   r,   r-   r4   r   r5   rW   rX   rZ   Úclassmethodr^   rc   rH   r?   rp   r.   r)   r/   r0   r    r    m   sa   † ñð
˜u S¨'¯,©,Ð%6Ñ7ô ð
 ð˜5 ¨¨g¯l©lÐ!:Ñ;ó ó ðò
òòQõ
*r/   r    c                   óÆ   ^ • \ rS rSrSrS\\\\   \\   \	\\\\\   \\   4   4   4   4U 4S jjr
S rSS\S\\   S	S4S
 jjrS	\4S jrSS\\   S	\\   4S jjrSrU =r$ )r!   é™   z°
A natural language property holds a collection of string, optionally categorized into languages.

.. seealso:: http://w3c.github.io/csvw/metadata/#natural-language-properties
Úvaluec                 ó6  >• [         TU ]  5         Xl        [        U R                  [        5      (       a  U R                  /U S '   g [        U R                  [
        [        45      (       aQ  [        S U R                   5       5      (       d  [        R                  " S5        g [        U R                  5      U S '   g [        U R                  [        5      (       aµ  U R                  R                  5        H–  u  p#[        R                  " U5      (       d  [        S5      e[        U[
        [        45      (       d  U/n/ nU HA  n[        U[        5      (       a  UR                  U5        M+  [        R                  " S5        MC     X@U'   M˜     g [        S5      e)Nc              3   óB   #   • U  H  n[        U[        5      v •  M     g 7frE   ©r<   r5   )Ú.0rQ   s     r0   Ú	<genexpr>Ú+NaturalLanguage.__init__.<locals>.<genexpr>§   s   é € Ð>²:¨a”z !¤S×)Ð)²:ùó   ‚zAtitles with array values containing non-string values are ignoredz(Invalid language tag for NaturalLanguagez1Title with value which is not a string is ignoredz&invalid value type for NaturalLanguage)r>   rZ   ru   r<   r5   ÚlistÚtupleÚallrM   rN   ÚdictÚitemsr   ÚcheckrY   Úappend)r@   ru   ÚkrQ   ÚtitlesÚvvrB   s         €r0   rZ   ÚNaturalLanguage.__init__Ÿ   s%  ø€ ô 	‰ÑÔØŒ
Ü�d—j‘j¤#×&Ñ&ØŸ*™*˜ˆD�ŠJÜ˜Ÿ
™
¤T¬5 M×2Ñ2ÜÑ>°4·:²:Ó>×>Ñ>Ü—’ÐaÕbä! $§*¡*Ó-��T’
Ü˜Ÿ
™
¤D×)Ñ)ØŸ
™
×(Ñ(Ö*‘�Ü—z’z !—}‘}Ü$Ð%OÓPÐPÜ! !¤d¬E ]×3Ñ3Ø˜�AØ�Û�BÜ! "¤c×*Ñ*ØŸ™ bÖ)ä ŸšÐ&YÖZñ	 ð
 !�Q“ò +ô ÐEÓFÐFr/   c                 óÆ   • [        U 5      S/:X  a'  [        U S   5      S:X  a  U R                  5       $ U S   $ [        R                  " S U R                  5        5       5      $ )zSerialize as dict.Nr   c              3   ó`   #   • U  H$  u  pUc  SOU[        U5      S:X  a  US   OU4v •  M&     g 7f)NÚundr   r   ©Úlen)ry   r„   rQ   s      r0   rz   Ú)NaturalLanguage.asdict.<locals>.<genexpr>Á   s4   é € ð '&â$‘�ð ‘i‰U Q´°A³¸!³¨¨!ªÀÕCÚ$ùs   ‚,.)r}   rŒ   ÚgetfirstÚcollectionsÚOrderedDictr�   rF   s     r0   rH   ÚNaturalLanguage.asdict»   s\   € ä�‹:˜$˜ÓÜ�4˜‘:‹ !Ó#Ø—}‘}“Ð&Ø˜‘:ÐÜ×&Ò&ñ '&àŸ
™
œó'&ó &ð 	&r/   NrU   ÚlangÚreturnc                 ó<   • X ;  a  / X'   X   R                  U5        g)zAdd a string for a language.N)rƒ   )r@   rU   r’   s      r0   ÚaddÚNaturalLanguage.addÅ   s   € àÓØˆD‰JØ‰
×Ñ˜&Õ!r/   c                 óz   • U R                  5       =(       d%    [        [        U R                  5       5      5      S   $ ©Nr   )rŽ   ÚnextÚiterÚvaluesrb   s    r0   rc   ÚNaturalLanguage.__str__Ë   s(   € Ø�}‰}‹×>¤$¤t¨D¯K©K«MÓ':Ó";¸AÑ">Ð>r/   c                 ó.   • U R                  US/5      S   $ )z=Return the first string specified for the given language tag.Nr   ©Úget)r@   r’   s     r0   rŽ   ÚNaturalLanguage.getfirstÎ   s   € à�x‰x˜˜t˜fÓ% aÑ(Ð(r/   )ru   rE   )r*   r+   r,   r-   r4   r   r5   r}   r~   r€   rZ   rH   r   r•   rc   rŽ   r.   rJ   rK   s   @r0   r!   r!   ™   s�   ø† ñð
Gà˜˜d 3™i¨¨s©°T¸#¸uÀSÈ$ÈsÉ)ÐUZÐ[^ÑU_ÐE_Ñ?`Ð:`Ñ5aÐaÑb÷Gò8&ñ"˜#ð " X¨c¡]ð "¸dõ "ð?˜ô ?ñ)˜X c™]ð )°h¸s±m÷ )ó )r/   r!   c                   ó¨  • \ rS rSr% SrSr\\S'   Sr\	\   \S'   Sr
\	\   \S'   Sr\	\   \S'   Sr\	\   \S'   Sr\\S	'   Sr\\S
'   Sr\	\   \S'   Sr\	\   \S'   Sr\	\   \S'   Sr\	\   \S'   S rS rS r\S\\\S 4   SS 4S j5       rSS\4S jjr\S\4S j5       r \S\4S j5       r!S\"S\4S jr#S\S\"4S jr$S\%S\%4S jr&S\S\"4S jr'Sr(g)r"   éÓ   zô
A datatype description

    Cells within tables may be annotated with a datatype which indicates the type of the values
    obtained by parsing the string value of the cell.

.. seealso:: `<https://www.w3.org/TR/tabular-metadata/#datatypes>`_
Nro   ÚformatÚlengthÚ	minLengthÚ	maxLengthÚminimumÚmaximumÚminInclusiveÚmaxInclusiveÚminExclusiveÚmaxExclusivec                 óÄ   • [         R                  " [        R                  [        SSS S9" U R
                  5      U l        U R                  5         U R                  5         g )NrU   Tc                 ó*   • U S L =(       d	    U [         ;   $ rE   r   )Ússs    r0   Ú<lambda>Ú(Datatype.__post_init__.<locals>.<lambda>ï   s   € ˜B $˜J×9¨"´	©/Ð9r/   ©Ú
allow_noneÚcond)Ú	functoolsÚpartialr   Útype_checkerr5   ro   Ú_set_constraintsÚ_validate_constraintsrb   s    r0   Ú__post_init__ÚDatatype.__post_init__é   sS   € Ü×%Ò%Ü×ÑÜØØÙ9ò;ð
 <@¿9¹9óFˆŒ	ð 	×ÑÔØ×"Ñ"Õ$r/   c           
      óV  ^ • S nT R                   bb  U" ST R                  S L=(       a    T R                   T R                  :  T R                  S L=(       a    T R                   T R                  :„  5        T R                  b2  T R                  b%  T R                  T R                  :”  a  [        S5      e[	        T R
                  [        5      (       d
  [        5       e[	        T R                  5       [        S S 5       5      5      (       d2  U" S/SR                  5        Vs/ s H  n[        T U5      PM     snQ76   [	        T R                  5       [        S   [        S	   [        S
   45      (       d)  U" ST R                   T R                  T R                  5        U" ST R                  =(       a    T R                  T R                  =(       a    T R                  5        U" ST R                  =(       a,    T R                  =(       a    T R                  T R                  :*  T R                  =(       a,    T R                  =(       a    T R                  T R                  :  T R                  =(       a,    T R                  =(       a    T R                  T R                  :*  T R                  =(       a,    T R                  =(       a    T R                  T R                  :*  5        ST R                   ;   a)  [#        U 4S j[         5       5      (       a  [        S5      e[	        T R                  5       [        S   5      (       ae  ST R
                  ;   aT  [%        T R
                  S   5      R'                  [%        S5      5      (       d  S T l        [*        R,                  " S5        g g g g s  snf )Nc                 ó:   • [        U5      (       a  [        U 5      eg rE   )ÚanyrY   )ÚmsgÚ
conditionss     r0   Úerror_ifÚ0Datatype._validate_constraints.<locals>.error_ifô   s   € Ü�:�‰Ü  “oÐ%ð r/   zLength limits interferezminLength > maxLengthc              3   ó4   #   • U  H  n[         U   v •  M     g 7frE   r   )ry   Únames     r0   rz   Ú1Datatype._validate_constraints.<locals>.<genexpr>  s   é € Ð`Ò3_¨4”y –Ò3_ùs   ‚)ÚdecimalÚfloatÚdatetimeÚdurationzÂApplications MUST raise an error if minimum, minInclusive, maximum, maxInclusive, minExclusive, or maxExclusive are specified and the base datatype is not a numeric, date/time, or duration type.zCminimum maximum minExclusive maxExclusive minInclusive maxInclusiverU   Úbase64BinaryÚ	hexBinaryzŸApplications MUST raise an error if length, maxLength, or minLength are specified and the base datatype is not string or one of its subtypes, or a binary type.z�Applications MUST raise an error if both minInclusive and minExclusive are specified, or if both maxInclusive and maxExclusive are specified.zLimits overlapÚidc              3   ó\   >#   • U  H!  nTR                   S    [        S   U-   :H  v •  M#     g7f)rÌ   ÚxsdN)Úat_propsr   )ry   Údtr@   s     €r0   rz   rÅ   '  s-   øé € ð )SÚHQÀ"�—‘˜dÑ#¤z°%Ñ'8¸2Ñ'=Ö=Ê	ùs   ƒ),z8datatype @id MUST NOT be the URL of a built-in datatype.rÆ   Úpatternu   #0.,;%â€°E-+zInvalid number pattern)r¤   r¥   r¦   rY   r<   Úderived_descriptionr€   Úbasetyper~   ÚsplitÚgetattrr   r©   r«   rª   r¬   rÏ   r¾   ÚsetÚissubsetr£   rM   rN   )r@   rÁ   Úats   `  r0   r¹   ÚDatatype._validate_constraintsó   s  ø€ ò	&ð �;‰;Ñ"ÙØ)Ø—‘ dÐ*×K¨t¯{©{¸T¿^¹^Ñ/KØ—‘ dÐ*×K¨t¯{©{¸T¿^¹^Ñ/Kôð �>‰>Ñ%¨$¯.©.Ñ*DØ—N‘N T§^¡^Ó3ÜÐ4Ó5Ð5ä˜$×2Ñ2´D×9Ñ9Ü“,ÐäØ—‘“ÜÑ`Ñ3_Ó`Óa÷cñ cñ ðJðdð
 Z×_Ñ_ÔaócÚað )+”'˜$ Ö#Ùañcó	dô Ø—‘“Ü˜8Ñ$¤i°Ñ&?ÄÈ;ÑAWÐX÷Zñ Zñ ðð —‘˜TŸ^™^¨T¯^©^ô	=ñ 	ðQà×Ñ×3 $×"3Ñ"3Ø×Ñ×3 $×"3Ñ"3ô		
ñ 	ØØ×Ñ×^ $×"3Ñ"3×^¸×8IÑ8IÈT×M^ÑM^Ñ8^Ø×Ñ×] $×"3Ñ"3×]¸×8IÑ8IÈD×L]ÑL]Ñ8]Ø×Ñ×^ $×"3Ñ"3×^¸×8IÑ8IÈT×M^ÑM^Ñ8^Ø×Ñ×^ $×"3Ñ"3×^¸×8IÑ8IÈT×M^ÑM^Ñ8^ô	
ð �4—=‘=Ó ¤Sô )SÝHQó)S÷ &Sñ &SäÐWÓXÐXä�d—m‘m“o¤y°Ñ';×<Ñ<Ø˜T×5Ñ5Ó5Ü�t×/Ñ/°	Ñ:Ó;×DÑDÄSÈÓEX×YÑYØ"�”Ü—’Ð6Õ7ð Zð 6ð =ùò=cs   Ä!N&
c                 óò   • S H6  n[        X[        R                  " [        5      " [	        X5      5      5        M8     S H5  n[	        X5      c  M  [        XU R                  [	        X5      5      5        M7     g )N)r¤   r¦   r¥   ©r§   r¨   r©   rª   r«   r¬   )Úsetattrr   ÚoptcastÚintrÕ   Úparse)r@   ÚattÚattr_s      r0   r¸   ÚDatatype._set_constraints1  sZ   € Û7ˆCÜ�DœuŸ}š}¬SÔ1´'¸$Ó2DÓEÖFñ 8ó
ˆEô �tÓ#Ó/Ü˜ T§Z¡Z´¸Ó0DÓ%EÖFò	
r/   Údr“   c                 óî   • [        U[        5      (       a  U " US9$ [        U[        5      (       a)  UR                  SS5        U " S0 U R	                  U5      D6$ [        X5      (       a  U$ [        U5      e)zè
:param v: Initialization data for `cls`; either a single string that is the main datatype         of the values of the cell or a datatype description object, i.e. a `dict` or a `cls`         instance.
:return: An instance of `cls`
)ro   ro   rU   r)   )r<   r5   r€   Ú
setdefaultÚpartition_propertiesrY   ©r]   rã   s     r0   Ú	fromvalueÚDatatype.fromvalue:  si   € ô �aœ×ÑÙ˜A‘;Ðä�aœ×ÑØ�L‰L˜ Ô*ÙÑ5˜×1Ñ1°!Ó4Ñ5Ð5ä�a×ÑØˆHä˜‹mÐr/   c                 ó¬   • [         R                  " XS9nS H  nX2;   d  M
  U R                  X#   5      X#'   M!     [        U5      S:X  a  SU;   a  US   $ U$ )z@The datatype serialized as dict suitable for conversion to JSON.©Úomit_defaultsrÛ   r   ro   )r   rH   Ú	formattedrŒ   )r@   rì   Úresrá   s       r0   rH   ÚDatatype.asdictN  sY   € ä×$Ò$ TÑGˆó
ˆEð �|Ø!Ÿ^™^¨C©JÓ7�“
ñ	
ô
 ˆs‹8�q‹=˜V s›]Ø�v‘;ÐØˆ
r/   c                 ó(   • [         U R                     $ rE   )r   ro   rb   s    r0   rÓ   ÚDatatype.basetypeZ  s   € ä˜Ÿ™Ñ#Ð#r/   c                 ó8   • U R                   R                  U 5      $ rE   )rÓ   rÒ   rb   s    r0   rÒ   ÚDatatype.derived_description^  s   € à�}‰}×0Ñ0°Ó6Ð6r/   rQ   c                 óP   • U R                   R                  " U40 U R                  D6$ )zFormat a value as string.)rÓ   Ú	to_stringrÒ   ©r@   rQ   s     r0   rí   ÚDatatype.formattedb  s"   € à�}‰}×&Ò& qÑE¨D×,DÑ,DÑEÐEr/   c                 óZ   • Uc  U$ U R                   R                  " U40 U R                  D6$ )z(Parse a string value into a Python type.)rÓ   Ú	to_pythonrÒ   rö   s     r0   rß   ÚDatatype.parsef  s,   € à‰9ØˆHØ�}‰}×&Ò& qÑE¨D×,DÑ,DÑEÐEr/   c                 ó<  • Uc  U$  [        U=(       d    S5      nU R                  b'  X R                  :w  a  [        SU R                   35      eU R                  b'  X R                  :  a  [        SU R                   35      eU R                  b'  X R                  :”  a  [        SU R                   35      eU R                  R                  (       Ga8  U R                  b'  XR                  :  a  [        SU R                   35      eU R                  b'  XR                  :  a  [        SU R                   35      eU R                  b'  XR                  ::  a  [        SU R                   35      eU R                  b'  XR                  :”  a  [        SU R                   35      eU R                  b'  XR                  :”  a  [        SU R                   35      eU R                  b'  XR                  :¼  a  [        SU R                   35      eU$ ! [
         a     GNcf = f)	z1Make sure the datatype-level constraints are met.Ú zvalue must have length z value must have at least length zvalue must have at most length zvalue must be >= zvalue must be > zvalue must be <= zvalue must be < )rŒ   r¤   rY   r¥   r¦   Ú	TypeErrorrÓ   Úminmaxr§   r©   r«   r¨   rª   r¬   )r@   rQ   Úl_s      r0   ÚvalidateÚDatatype.validatel  sá  € à‰9ØˆHð		Ü�Q—W˜"“ˆBØ�{‰{Ñ&¨2·±Ó+<Ü Ð#:¸4¿;¹;¸-Ð!HÓIÐIØ�~‰~Ñ)¨b·>±>Ó.AÜ Ð#CÀDÇNÁNÐCSÐ!TÓUÐUØ�~‰~Ñ)¨b·>±>Ó.AÜ Ð#BÀ4Ç>Á>ÐBRÐ!SÓTÐTð �=‰=××ÐØ�|‰|Ñ'¨A·±Ó,<Ü Ð#4°T·\±\°NÐ!CÓDÐDØ× Ñ Ñ,°×5FÑ5FÓ1FÜ Ð#4°T×5FÑ5FÐ4GÐ!HÓIÐIØ× Ñ Ñ,°×6GÑ6GÓ1GÜ Ð#3°D×4EÑ4EÐ3FÐ!GÓHÐHØ�|‰|Ñ'¨A·±Ó,<Ü Ð#4°T·\±\°NÐ!CÓDÐDØ× Ñ Ñ,°×5FÑ5FÓ1FÜ Ð#4°T×5FÑ5FÐ4GÐ!HÓIÐIØ× Ñ Ñ,°×6GÑ6GÓ1GÜ Ð#3°D×4EÑ4EÐ3FÐ!GÓHÐHØˆøô ó 	Úð	ús   ‡B0H È
HÈHc                 óB   • U R                  U R                  U5      5      $ )z3Read a value according to the spec of the Datatype.)r   rß   rö   s     r0   ÚreadÚDatatype.read‰  s   € à�}‰}˜TŸZ™Z¨›]Ó+Ð+r/   )ro   r£   ©T))r*   r+   r,   r-   r4   ro   r5   r6   r£   r   r¤   rÞ   r¥   r¦   r§   ÚOrderedTyper¨   r©   Úboolrª   r«   r¬   rº   r¹   r¸   rr   r   r€   rè   rH   ÚpropertyÚtyperÓ   rÒ   r   rí   rß   r%   r   r  r.   r)   r/   r0   r"   r"   Ó   sj  ‡ ñð €Dˆ#ÓØ €FˆH�S‰MÓ Ø €FˆH�S‰MÓ Ø#€Iˆx˜‰}Ó#Ø#€Iˆx˜‰}Ó#Ø€Gˆ[ÓØ€Gˆ[ÓØ#'€L�(˜4‘.Ó'Ø#'€L�(˜4‘.Ó'Ø#'€L�(˜4‘.Ó'Ø#'€L�(˜4‘.Ó'ò%ò<8ò|Gð ð˜%  T¨:Ð 5Ñ6ð ¸:ó ó ðñ&
¨Dõ 
ð ð$˜$ó $ó ð$ð ð7 Tó 7ó ð7ðF˜3ð F 3ô FðF�sð F˜sô Fð˜!ð  ô ð:,�cð ,˜c÷ ,r/   r"   c                   ó„  • \ rS rSr% SrSr\\   \S'   Sr	\\
\\4      \S'   Sr\\   \S'   Sr\\
\\\   4      \S'   S	r\\S
'   \R(                  " S S9r\\   \S'   Sr\\   \S'   Sr\\
\\4      \S'   Sr\\   \S'   Sr\\   \S'   Sr\\S      \S'   Sr\\
\\4      \S'   S rS\\   4S jr S\\   4S jr!Sr"g)ÚDescriptioniŽ  znAdds support for inherited properties.

.. seealso:: http://w3c.github.io/csvw/metadata/#inherited-properties
NÚ_parentÚaboutUrlÚdatatyperü   ÚdefaultrŠ   r’   c                  ó   • S/$ )Nrü   r)   r)   r/   r0   r°   ÚDescription.<lambda>Ÿ  s   € ÀÁr/   ©Údefault_factoryÚnullÚorderedÚpropertyUrlÚrequiredÚ	separator)ÚltrÚrtlÚautoÚinheritÚtextDirectionÚvalueUrlc                 ó¾  • U R                   b$  [        R                  U R                   5      U l         [        R                  " [
        SU R                  SS9U l        [        R                  " U R                  5      (       d  [        R                  " S5        SU l	        U R                  c  / O7[        U R                  [        5      (       a  U R                  OU R                  /U l        [        S U R                   5       5      (       d  [        R                  " S5        S/U l        [        R                  " [         SU R"                  SS	9U l        [        R                  " [
        S U R$                  SS	9U l        [        R                  " [
        S U R&                  SS
 S9U l        S H/  n[)        X5      c  M  [+        X[-        [)        X5      5      5        M1     g )Nrü   F)Ú
allow_listzInvalid language tagrŠ   c              3   óB   #   • U  H  n[        U[        5      v •  M     g 7frE   rx   )ry   r†   s     r0   rz   Ú,Description.__post_init__.<locals>.<genexpr>²  s   é € Ð;²¨2”:˜b¤#×&Ð&²ùr|   zInvalid null propertyT©r³   c                 ó   • U S;   $ )N)Nr  r  r  r  r)   rP   s    r0   r°   Ú+Description.__post_init__.<locals>.<lambda>¼  s
   € ˜1Ð GÒGr/   r²   )r  r  r  )r  r"   rè   r   r·   r5   r  r   r‚   r’   rM   rN   r  r<   r}   r   r  r  r  r  rÕ   rÜ   rR   )r@   rà   s     r0   rº   ÚDescription.__post_init__¨  sQ  € Ø�=‰=Ñ$Ü$×.Ñ.¨t¯}©}Ó=ˆDŒMÜ×)Ò)¬#¨r°4·<±<ÈEÑRˆŒÜ�zŠz˜$Ÿ)™)×$Ñ$Ü�MŠMÐ0Ô1ØˆDŒIàŸ)™)Ñ+‘BÜ$ T§Y¡Y´×5Ñ5ˆT�YŠY¸D¿I¹I¸;ð 	Œ	äÑ;°·²Ó;×;Ñ;Ü�MŠMÐ1Ô2Ø˜ˆDŒIÜ×)Ò)¬$°°t·|±|ÐPTÑUˆŒÜ×+Ò+¬C°°t·~±~ÐRVÑWˆŒÜ"×/Ò/ÜØØ×ÑØÙGñIˆÔó ;ˆCÜ�tÓ!Ó-Ü˜Ô#7¼ÀÓ8JÓ#KÖLò ;r/   r“   c                 óÜ   • [        X5      nUc]  U R                  (       aL  [        U R                  S5      (       a  U R                  R                  U5      $ [        U R                  U5      $ U$ )zì
The implementation of the inheritance mechanism.

The chain of inheritance is established by assigning a an object to `_parent`. If this
object has a method `inherit` as well (i.e. is derived from Description), the chain
may continue.
r  )rÕ   r  r=   r  )r@   ÚattrrQ   s      r0   r  ÚDescription.inheritÁ  sX   € ô �DÓˆØ‰9˜ŸŸÜ18¸¿¹Ày×1QÑ1Q�4—<‘<×'Ñ'¨Ó-ð 1Ü˜TŸ\™\¨4Ó0ð1àˆr/   c                 óÈ   • U R                   S/:X  aF  U R                  (       a5  [        U R                  S5      (       a  U R                  R                  5       $ U R                   $ )zNInheritance of null is a special case due to the default value not being None.rü   Úinherit_null)r  r  r=   r+  rb   s    r0   r+  ÚDescription.inherit_nullÏ  sD   € à�9‰9˜˜ÓØ�|�|¤¨¯©°n× EÑ EØ—|‘|×0Ñ0Ó2Ð2Ø�y‰yÐr/   )r  r  r’   r  r  r  r  )#r*   r+   r,   r-   r4   r  r   r   r6   r  r   r8   r'   r  r"   r  r5   r}   r’   ÚdataclassesÚfieldr  r  r  r  r  r  r  r   r  rº   r   r  r+  r.   r)   r/   r0   r  r  Ž  s  ‡ ñð *.€GˆX�oÑ&Ó-à6:€Hˆh�u˜[¨'Ð1Ñ2Ñ3Ó:Ø#'€Hˆh�xÑ Ó'Ø/1€GˆX�e˜C  c¡˜NÑ+Ñ,Ó1Ø€Dˆ#ÓØ!×'Ò'¹ÑE€Dˆ$ˆs‰)ÓEØ"€GˆX�d‰^Ó"Ø9=€K�˜% ¨WÐ 4Ñ5Ñ6Ó=Ø#€Hˆh�t‰nÓ#Ø#€Iˆx˜‰}Ó#à48ð �8ØÐ/Ñ0ñ2ó 9à6:€Hˆh�u˜[¨'Ð1Ñ2Ñ3Ó:òMð2˜x¨™}ô ð˜d 3™i÷ r/   r  c                   óä   ^ • \ rS rSr% SrSr\\S'   Sr\	\S'   Sr
\\   \S'   Sr\	\S'   Sr\\   \S	'   U 4S
 jrS rS rS\\\	4   4S jr\S\4S j5       rSS\S\4S jjrS\S\4S jrSrU =r$ )r   i×  a�  
A column description is an object that describes a single column.

    The description provides additional human-readable documentation for a column, as well as
    additional information that may be used to validate the cells within the column, create a
    user interface for data entry, or inform conversion into other formats.

.. seealso:: `<https://www.w3.org/TR/tabular-metadata/#columns>`_
NrÄ   FÚsuppressOutputr…   ÚvirtualÚ_numberc                 óÌ  >• [         TU ]  5         [        R                  " [        S U R
                  SS9U l        [        R                  " [        SU R                  5      U l        U R                  b   [        U R                  5      U l        [        R                  " [        SU R                  5      U l        g ! [         a     [        R                  " S5        S U l         NUf = f)NTr#  FzInvalid titles property)r>   rº   r   r·   r5   rÄ   r  r0  r…   r!   rY   rM   rN   r1  )r@   rB   s    €r0   rº   ÚColumn.__post_init__è  s§   ø€ Ü‰ÑÔÜ×&Ò&¤s¨D°$·)±)ÈÑMˆŒ	Ü#×0Ò0´°u¸d×>QÑ>QÓRˆÔà�;‰;Ñ"ð#Ü-¨d¯k©kÓ:�”ô
 ×)Ò)¬$°°t·|±|ÓDˆ�øô	 ó #Ü—’Ð7Ô8Ø"�–ð#ús   Á3B9 Â9'C#Ã"C#c                 ó®   • U R                   =(       dC    U R                  =(       a    U R                  R                  5       =(       d    SU R                   3$ )Nú_col.)rÄ   r…   rŽ   r2  rb   s    r0   rc   ÚColumn.__str__ö  s:   € Ø�y‰y×^˜TŸ[™[×C¨T¯[©[×-AÑ-AÓ-C×^È%ÐPT×P\ÑP\È~ÐH^Ð^r/   c                 óD   • U R                  5       UR                  5       :H  $ rE   )rH   ri   s     r0   r?   ÚColumn.__eq__ù  s   € Ø�{‰{‹} §¡£Ñ.Ð.r/   r“   c                 óÄ   • U R                   (       a  U R                   U:X  a  gU R                  =(       d    0 R                  5        H  u  p#X;   d  M  U=(       d    Ss  $    g)z‡
Check whether the name or a title of the column matches v.

If v matches a title, the associated language tag (or 'und') is returned.
TrŠ   F)rÄ   r…   r�   )r@   rQ   Útagr…   s       r0   Ú	has_titleÚColumn.has_titleü  sJ   € ð �9�9˜Ÿ™ a›ØØ ŸK™K×-¨2×4Ñ4Ö6‰KˆCØ�{Ø—|˜eÒ#ñ 7ð r/   c                 ó   • U  $ rE   r)   rb   s    r0   ÚheaderÚColumn.header	  s
   € à�Ðr/   rQ   c                 óæ  ^• U R                  S5      nU R                  5       nU R                  S5      mU R                  S5      nU R                  S5      nU(       d  TnU(       a-  X;   a(  U(       d  [        R                  " S5        [	        S5      eU(       aG  U(       d  / nODX;   a  SnO<U4S jUR                  U5       5       nU Vs/ s H  owU;   a  SOUPM     nnOX;   a  SnU(       aH  [        U[        5      (       a"   U Vs/ s H  ovR                  U5      PM     sn$ UR                  U5      $ U$ s  snf s  snf ! [         a#    U(       d  [        R                  " S5        Us $ e f = f)	zFConvert a str to a Python object according to the spec for the column.r  r  r  r  z required column value is missingNc              3   ó8   >#   • U  H  o=(       d    Tv •  M     g 7frE   r)   )ry   r†   r  s     €r0   rz   ÚColumn.read.<locals>.<genexpr>#  s   øé € Ð@Ò-? r—]˜7”]Ò-?ùs   ƒzInvalid value for list element.)	r  r+  rM   rN   rY   rÔ   r<   r}   r  )	r@   rQ   Ústrictr  r  r  r  r†   r  s	           @r0   r  ÚColumn.read  s=  ø€ à—<‘< 
Ó+ˆØ× Ñ Ó"ˆØ—,‘,˜yÓ)ˆØ—L‘L Ó-ˆ	Ø—<‘< 
Ó+ˆæØˆAæ˜›	ÞÜ—’Ð@ÔAÜÐ?Ó@Ð@æÞØ‘Ø“Ø‘ä@¨Q¯W©W°YÔ-?Ó@�Ù:;Ó<º!°B 4›Z‘T¨RÒ/¹!�Ð<�Ø‹YØˆAæÜ˜!œT×"Ñ"ðÙ89Ó:º°"ŸM™M¨"Ö-¹Ñ:Ð:ð —=‘= Ó#Ð#Øˆùò =ùò ;øÜ!ó Þ!Ü ŸšÐ&GÔHØ šØð	ús*   ÃD9ÄE Ä	D>Ä#E Ä>E Å)E0Å.E0c                 óà   ^^^• U R                  S5      nU R                  5       mU R                  S5      mUU4S jmU(       a$  UR                  U4S jU=(       d    /  5       5      $ T" U5      $ )zEConvert v to a string according to the specifications for the column.r  r  c                 óH   >• U c  TS   $ T(       a  TR                  U 5      $ U $ r˜   )rí   )rQ   r  r  s    €€r0   ÚfmtÚColumn.write.<locals>.fmt:  s*   ø€ Ø‰yØ˜A‘w�ÞØ×)Ñ)¨!Ó,Ð,ØˆHr/   c              3   ó4   >#   • U  H  nT" U5      v •  M     g 7frE   r)   )ry   r†   rH  s     €r0   rz   ÚColumn.write.<locals>.<genexpr>B  s   øé € Ð6ªg¨™C ŸG˜Gªgùs   ƒ)r  r+  Újoin)r@   rQ   Úsepr  rH  r  s      @@@r0   ÚwriteÚColumn.write4  s[   ú€ à�l‰l˜;Ó'ˆØ× Ñ Ó"ˆØ—<‘< 
Ó+ˆö	ö Ø—8‘8Ô6¨a¯g°2¨gÓ6Ó6Ð6Ù�1‹vˆr/   )rÄ   r0  r…   r1  r  )r*   r+   r,   r-   r4   rÄ   r5   r6   r0  r  r…   r   r!   r1  r2  rÞ   rº   rc   r?   r   r<  r  r?  r   r  rN  r.   rJ   rK   s   @r0   r   r   ×  s²   ø‡ ñð €Dˆ#ÓØ €N�DÓ Ø(,€FˆH�_Ñ%Ó,Ø€GˆTÓØ!€GˆX�c‰]Ó!õEò_ò/ð˜e C¨ IÑ.ô ð ð˜ó ó ðñ%�cð %¨3õ %ðN�sð ˜s÷ ò r/   r   c                   ób   • \ rS rSr% SrSr\\   \S'   Sr	\\   \S'   Sr
\\\      \S'   S rSrg)	Ú	ReferenceiF  zJA reference specification as used to describe the targets of foreign keys.NÚresourceÚschemaReferenceÚcolumnReferencec                 ó\  • U R                   b<  U R                  b  [        U 5      e[        R	                  U R                   5      U l         U R                  b$  [        R	                  U R                  5      U l        [        U R                  [        5      (       a  U R                  /U l        g g rE   )rR  rS  rY   r    r^   r<   rT  r5   rb   s    r0   rº   ÚReference.__post_init__M  sƒ   € Ø�=‰=Ñ$Ø×#Ñ#Ñ/ä  Ó&Ð&Ü ŸO™O¨D¯M©MÓ:ˆDŒMà×ÑÑ+Ü#'§?¡?°4×3GÑ3GÓ#HˆDÔ ä�d×*Ñ*¬C×0Ñ0Ø$(×$8Ñ$8Ð#9ˆDÕ ð 1r/   )rT  rR  rS  )r*   r+   r,   r-   r4   rR  r   r    r6   rS  rT  r}   r5   rº   r.   r)   r/   r0   rQ  rQ  F  s9   ‡ áTØ#€Hˆh�t‰nÓ#Ø&*€O�X˜d‘^Ó*Ø+/€O�X˜d 3™iÑ(Ó/õ:r/   rQ  c                   óv   • \ rS rSr% SrSr\\\      \	S'   Sr
\\   \	S'   S r\S 5       rS\\\4   4S	 jrS
rg)r   i[  z!A specification of a foreign key.NrT  Ú	referencec                 óh   • [        U R                  [        5      (       a  U R                  /U l        g g rE   )r<   rT  r5   rb   s    r0   rº   ÚForeignKey.__post_init__a  s+   € Ü�d×*Ñ*¬C×0Ñ0Ø$(×$8Ñ$8Ð#9ˆDÕ ð 1r/   c           	      ó6  • [        U[        5      (       aI   [        S0 US   D6n[        UR                  5       5      R                  SS15      (       d  [	        S5      e[        U[        S0 US   D6S9nU " S0 UD6$ ! [         a  n[	        S5      UeSnAff = f)zKInstantiate an object from a dict as returned by parsing the JSON metadata.rX  zInvalid reference propertyNrT  zInvalid foreignKey spec)rX  r)   )r<   r€   rQ  rý   rY   rÖ   Úkeysr×   )r]   rã   rG   ÚeÚkws        r0   ÚfromdictÚForeignKey.fromdicte  s�   € ô �aœ×ÑðFÜÑ/  +¡Ñ/�ô �q—v‘v“x“=×)Ñ)Ð+<¸kÐ*J×KÑKÜ Ð!:Ó;Ð;Ü�!œyÑ:¨1¨[©>Ñ:Ñ;ˆÙ‰y�R‰yÐøô ó FÜ Ð!=Ó>ÀAÐEûðFús   —A= Á=
BÂBÂBr“   c                 óB   • [        U 40 UD6n[        US   40 UD6US'   U$ )NrX  )r   )r@   r^  rî   s      r0   rH   ÚForeignKey.asdictr  s/   € Ü˜tÑ* rÑ*ˆÜ+¨C°Ñ,<ÑCÀÑCˆˆKÑØˆ
r/   )rT  )r*   r+   r,   r-   r4   rT  r   r}   r5   r6   rX  rQ  rº   rr   r_  r€   r   rH   r.   r)   r/   r0   r   r   [  sT   ‡ á+Ø+/€O�X˜d 3™iÑ(Ó/Ø%)€Iˆx˜	Ñ"Ó)ò:ð ñ
ó ð
ð˜d 3¨ 8™n÷ r/   r   c                   óf  ^ • \ rS rSr% Sr\R                  " \S9r\\	   \
S'   \R                  " \S9r\\   \
S'   Sr\\\      \
S'   \R                  " \S9r\\   \
S'   U 4S	 jrS
\S\\   S\\   S\4S jr\S\\\4   SS 4S j5       r\S\\\	4   4S j5       rSS\S\S\\	   4S jjrSrU =r$ )ÚSchemaix  a4  
A schema description is an object that encodes the information about a schema, which describes
the structure of a table.

:ivar columns: `list` of :class:`Column` descriptions.
:ivar foreignKeys: `list` of :class:`ForeignKey` descriptions.

.. seealso:: `<https://www.w3.org/TR/tabular-metadata/#schemas>`_
r  ÚcolumnsÚforeignKeysNÚ
primaryKeyÚ	rowTitlesc           	      óè  >• [         T
U ]  5         [        R                  " [        S [        R                  " [
        / U R                  5      5       Vs/ s H  n[        R                  U5      PM     snU l        [        U R                  5       H  u  p#US-   Ul
        M     U R                  c  / U l        OZ/ n[        R                  " [        S U R                  5       H(  n UR                  [        R                  U5      5        M*     X@l        U R$                  b1  ['        U R$                  [
        5      (       d  U R$                  /U l        ['        U R(                  [
        5      (       a  U R(                  OU R(                  /U l        S[+        5       [+        5       p‡n[        U R                  5       H  u  p#U R-                  X6X‡5      nXl        M     U R$                  =(       d    /  HW  n	U R0                  R3                  U	5      nU(       d  M'  UR4                  (       a  M:  [         R"                  " S5        S U l        MY     g s  snf ! [         a    [         R"                  " S5         GM’  f = f)Nr   zInvalid foreignKeys specFz:A primaryKey referenced column MUST have a `name` property)r>   rº   r   r·   r€   r}   re  r   rè   Ú	enumerater2  rf  rƒ   r   r_  rý   rM   rN   rg  r<   rh  rÖ   Ú
_check_colr  Ú
columndictrŸ   rÄ   )r@   ÚcÚiÚcolrî   rã   r1  ÚseenÚnamesÚcolrefrB   s             €r0   rº   ÚSchema.__post_init__ˆ  sÙ  ø€ Ü‰ÑÔô ×Òœt T¬5×+=Ò+=¼dÀBÈÏÉÓ+UÔVóXâVð %&ŒF×Ñ˜QÖÙVñXˆŒô   §¡Ö-‰FˆAØ˜a™%ˆCŽKñ .à×ÑÑ#Ø!ˆDÕàˆCÜ×'Ò'¬¨d°D×4DÑ4DÖE�ð>Ø—J‘Jœz×2Ñ2°1Ó5Ö6ñ Fð
  #Ôà�?‰?Ñ&¬z¸$¿/¹/Ì4×/PÑ/PØ#Ÿ™Ð/ˆDŒOÜ+5°d·n±nÄd×+KÑ+K˜ŸšÐRV×R`ÑR`ÐQaˆŒà$¤c£e¬S«U�uˆÜ §¡Ö-‰FˆAØ—o‘o c°EÓ@ˆGØŽKñ .ð —o‘o×+¨Ò+ˆFØ—/‘/×%Ñ% fÓ-ˆCßˆs˜3Ÿ8Ÿ8™8Ü—’ÐZÔ[Ø"&�–ò	 ,ùò1Xøô !ó >Ü—M’MÐ"<×=Ð=ð>ús   ÁIÃ"$IÉ I1É0I1r1  rq  rp  r“   c                 ód  • UR                   (       a\  UR                   R                  S5      (       d&  [        R                  " SUR                   5      (       a  [        R
                  " S5        UR                  (       a  SnOU(       a  [        S5      eU(       d•  UR                  U;   a  [        R
                  " S5        UR                   (       aC  UR                   U;   a  [        SUR                    35      eUR                  UR                   5        UR                  UR                  5        U$ )NrG   ú\szInvalid column nameTz3no non-virtual column allowed after virtual columnszDuplicate column name!zDuplicate column name )
rÄ   Ú
startswithÚreÚsearchrM   rN   r1  rY   r?  r•   )r@   ro  r1  rq  rp  s        r0   rk  ÚSchema._check_col¨  sÄ   € Ø�8�8˜Ÿ™×,Ñ,¨S×1Ñ1´R·Y²Y¸uÀcÇhÁh×5OÑ5OÜ�MŠMÐ/Ô0Ø�;�;Ø‰GÞÜÐRÓSÐSÞØ�z‰z˜TÓ!Ü—’Ð6Ô7Ø�x�xØ—8‘8˜uÓ$Ü$Ð'=¸c¿h¹h¸ZÐ%HÓIÐIØ—	‘	˜#Ÿ(™(Ô#Ø�H‰H�S—Z‘ZÔ Øˆr/   rã   c                 ó:  • [        U[        5      (       a%   [        R                  " U5      R	                  5       n[        U[
        5      (       d-  [        U[        5      (       a  [        R                  " S5        0 nU " S0 U R                  U5      D6$ !   Us $ = f)z9Instantiate a Schema from a dict or a URL to a JSON file.z&Invalid value for tableSchema propertyr)   )
r<   r5   r   Úrequest_getÚjsonr€   rÞ   rM   rN   ræ   rç   s     r0   rè   ÚSchema.fromvalue¹  s‚   € ô �aœ×Ñðä×%Ò% aÓ(×-Ñ-Ó/�ô ˜!œT×"Ñ"Ü˜!œS×!Ñ!Ü—’ÐFÔGØˆAÙÑ1�S×-Ñ-¨aÓ0Ñ1Ð1øðØ’ús   —$B ÂBc                 óZ   • U R                    Vs0 s H  oR                  U_M     sn$ s  snf )z9A table's columns mapped by header, i.e. normalized name.)re  r?  )r@   rm  s     r0   rl  ÚSchema.columndictÈ  s&   € ð &*§\¢\Ó2¢\ —‘˜!’¡\Ñ2Ð2ùÒ2ó   �(rÄ   rD  c                 ó„  • U R                   R                  U5      nU(       a  U(       a  UR                  (       d   U5       eU(       dw  U R                   Hg  nUR                  (       a"  UR                  R                  5       U:X  a  Us  $ UR                  (       d  MI  UR                  R                  U:X  d  Me  Us  $    U$ )z0Resolve a Column by name, titles or propertyUrl.)rl  rŸ   rÄ   re  r…   rŽ   r  r;   )r@   rÄ   rD  ro  rm  s        r0   Ú
get_columnÚSchema.get_columnÍ  sƒ   € à�o‰o×!Ñ! $Ó'ˆÞ¦¨¯¯Ð7°4Ó7Ð1ÞØ—\”\�Ø—8—8 §¡× 1Ñ 1Ó 3°tÓ ;Ø’HØ—=—=‘= Q§]¡]×%6Ñ%6¸$Õ%>Ø’Hñ	 "ð
 ˆ
r/   )re  rf  rg  rh  ©F)r*   r+   r,   r-   r4   r-  r.  r}   re  r   r6   rf  r   rg  r   r5   rh  rº   r  rÖ   rk  rr   r   r€   rè   r  rl  r‚  r.   rJ   rK   s   @r0   rd  rd  x  s  ø‡ ñð (×-Ò-¸dÑC€GˆT�&‰\ÓCØ$/×$5Ò$5ÀdÑ$K€K��jÑ!ÓKØ&*€J�˜˜c™Ñ#Ó*Ø&×,Ò,¸TÑB€Iˆt�C‰yÓBõ'ð@ tð °C¸±Hð ÀCÈÁHð ÐQUô ð" ð2˜%  c 	Ñ*ð 2¨xó 2ó ð2ð ð3˜D  f Ñ-ó 3ó ð3ñ
˜sð 
¨Dð 
¸XÀfÑ=M÷ 
ó 
r/   rd  c                   ó  ^ • \ rS rSr% SrSr\\\\	4      \
S'   \R                  " \S9r\\   \
S'   Sr\S   \
S	'   Sr\\   \
S
'   \R                  " \S9r\\
S'   Sr\\   \
S'   Sr\\\R0                  4   \
S'   U 4S jrS\S\\   4S jr\SS\\\R0                  4   SS 4S jj5       r\SS\SS 4S jj5       rSS\\\R0                  4   S\R0                  4S jjr\ S\\\R0                  4   4S j5       r!SS\"S\#S\4S jjr$Sr%U =r&$ )Ú	TableLikeiÚ  aø  
A CSVW description object as encountered "in the wild", i.e. identified by URL on the web or
as file on disk.

Since `TableLike` objects may be instantiated from "externally referenced" objects
(via file paths or URLs), they have the necessary means to resolve
`link properties <https://www.w3.org/TR/tabular-metadata/#link-properties>`_

.. code-block:: python

    >>> from csvw import Table, TableGroup, Link
    >>> t = Table.from_file('tests/fixtures/csv.txt-table-metadata.json')
    >>> Link('abc.txt').resolve(t.base)
    PosixPath('tests/fixtures/abc.txt')
    >>> tg = TableGroup.from_url(
    ...     'https://raw.githubusercontent.com/cldf/csvw/master/tests/fixtures/'
    ...     'csv.txt-metadata.json')
    >>> str(tg.tables[0].url)
    'csv.txt'
    >>> tg.tables[0].url.resolve(tg.base)
    'https://raw.githubusercontent.com/cldf/csvw/master/tests/fixtures/csv.txt'

and `URI template properties <https://www.w3.org/TR/tabular-metadata/#uri-template-properties>`_
(see :meth:`~TableLike.expand`).
NÚdialectr  Únotesr  ©r  r  r  ÚtableDirectionÚtableSchemaÚtransformationsÚurlÚ_fnamec                 óT  >• [         TU ]  5         [        U R                  [        5      (       aZ  [        S	0 [        [        R                  " [        U R                  5      R                  U R                  5      5      5      D6U l        O0U R                  b#  [        S	0 [        U R                  5      D6U l        [        R                  " [        SU R                  S S9U l        [        R                  U R                   5      U l        [        U R"                  [$        5      (       d  [&        R(                  " S5        U R"                   H  n[*        R,                  " USS9  M     U R.                  b  [        U R.                  5      U l        U R                   (       a/  [        U R                   [        5      (       d  X R                   l        SU R2                  ;   a)  U R2                  S   c  U R                  U R2                  S'   [5        U R2                  R7                  S5      5        g )
Nr  c                 ó   • U S;   $ )Nr‰  r)   )Úss    r0   r°   Ú)TableLike.__post_init__.<locals>.<lambda>  s
   € ¸QÐBXÒ=Xr/   )r´   z Invalid transformations propertyÚTemplate)Ú	type_namerÌ   Úcontextr)   )r>   rº   r<   r‡  r5   r   r   r   Úget_jsonr    rp   ro   r·   rŠ  rd  rè   r‹  rŒ  r}   rM   rN   r   ræ   r�  r  rÏ   r   rŸ   )r@   ÚtrrB   s     €r0   rº   ÚTableLike.__post_init__ý  s}  ø€ Ü‰ÑÔÜ�d—l‘l¤C×(Ñ(Ü"ñ XÜ¤§¢¬t°D·L±LÓ/A×/IÑ/IÈ$Ï)É)Ó/TÓ UÓVñXˆD�Là�\‰\Ñ%Ü"ÑA¤]°4·<±<Ó%@ÑAˆDŒLä#×0Ò0Ü�˜×,Ñ,Ñ3XñZˆÔä!×+Ñ+¨D×,<Ñ,<Ó=ˆÔä˜$×.Ñ.´×5Ñ5Ü�MŠMÐ<Ô=Ø×&Ô&ˆBÜ×0Ò0°¸zÔJñ 'à�8‰8ÑÜ˜DŸH™H“~ˆDŒHà××¤J¨t×/?Ñ/?Ä×$EÑ$EØ'+×ÑÔ$Ø�4—=‘=Ó  T§]¡]°4Ñ%8Ñ%@Ø"&§)¡)ˆD�M‰M˜$ÑÜ˜tŸ}™}×0Ñ0°Ó;Õ<r/   Úspecr“   c                 ó^   • U R                   (       a  U R                   R                  U5      $ S $ rE   )r‹  r‚  )r@   r™  s     r0   r‚  ÚTableLike.get_column  s&   € Ø48×4D×4Dˆt×Ñ×*Ñ*¨4Ó0ÐNÈ$ÐNr/   Úfnamec                 óü   • [        [        U5      5      (       a  U R                  [        U5      US9$ U R                  U=(       d    [        R
                  " U5      5      n[        R                  " U5      Ul        U$ )zJ
Instantiate a CSVW Table or TableGroup description from a metadata file.
©Údata)	r#   r5   Úfrom_urlrè   r   r–  rW   rX   rŽ  )r]   rœ  rŸ  rî   s       r0   Ú	from_fileÚTableLike.from_file  s[   € ô
 ”#�e“*×ÑØ—<‘<¤ E£
°�<Ð6Ð6Ø�m‰m˜D×9¤E§N¢N°5Ó$9Ó:ˆÜ—\’\ %Ó(ˆŒ
Øˆ
r/   c                 óî  • U=(       d    [         R                  " U5      n[        U5      nUR                  S[	        UR
                  UR                  UR                  SSS45      5        UR                  SU/5       Hc  n[        U[        5      (       d  M  [        UR                  S5      [        5      (       d  M@  [        US   5      R                  US   5      US'   Me     U R                  U5      nU$ )z[
Instantiate a CSVW Table or TableGroup description from a metadata file specified by URL.
ú@baserü   Útablesr‹  )r   r–  r   rå   r   ÚschemeÚnetlocÚpathrŸ   r<   r€   r5   r    rp   rè   )r]   r�  rŸ  Útablerî   s        r0   r   ÚTableLike.from_url$  sÀ   € ð
 ×*”u—~’~ cÓ*ˆÜ�s‹mˆØ�‰˜¤¨S¯Z©Z¸¿¹ÀSÇXÁXÈrÐSUÐWYÐ,ZÓ![Ô\Ø—X‘X˜h¨¨Ö/ˆEÜ˜%¤×&Ó&¬:°e·i±iÀÓ6NÔPS×+TÓ+TÜ'+¨E°-Ñ,@Ó'A×'IÑ'IÈ$ÈwÉ-Ó'X��mÓ$ñ 0ð �m‰m˜DÓ!ˆØˆ
r/   c                 óò   • [         R                  " U5      nU R                  US9n[        R                  " [        U5      S5       n[        R                  " X4SSS9  SSS5        U$ ! , (       d  f       U$ = f)a  
Write a CSVW Table or TableGroup description as JSON object to a local file.

:param omit_defaults: The CSVW spec specifies defaults for most properties of most         description objects. If `omit_defaults==True`, these properties will be pruned from         the JSON object.
rë   Úwé   )Ú,ú: )ÚindentÚ
separatorsN)rW   rX   rH   r   Ú	json_openr5   r|  Údump)r@   rœ  rì   rŸ  Úfs        r0   Úto_fileÚTableLike.to_file2  s^   € ô —’˜UÓ#ˆØ�{‰{¨ˆ{Ð7ˆÜ�_Š_œS ›Z¨Ô-°Ü�IŠI�d a°KÒ@÷ .àˆ÷ .Ô-àˆús   ÁA'Á'
A6c                 óB  • U R                   (       a  U R                   R                  OU R                  nSnU R                  R                  S/ 5       H'  n[        U[        5      (       d  M  SU;   d  M"  US   nM)     SU;   a)  U(       a  [        U5      R                  US   5      $ US   $ U R                   (       a;  U R                   R                  (       a   U R                   R                  R                  $ U R                  (       a  U R                  R                  $ S$ )z/
The "base" to resolve relative links against.
Nr•  r¤  ro   )	r  rÏ   rŸ   r<   r€   r    rp   rŽ  rn   )r@   rÏ   ÚctxbaseÚobjs       r0   ro   ÚTableLike.base@  sÓ   € ð
 -1¯L¯L�4—<‘<×(Ò(¸d¿m¹mˆØˆØ—=‘=×$Ñ$ Y°Ö3ˆCÜ˜#œt×$Ó$¨°C­Ø˜g™,’ñ 4ð �XÓÞô ˜G“}×,Ñ,¨X°fÑ-=Ó>Ð>Ø˜FÑ#Ð#Ø�<�<˜DŸL™L×/×/Ø—<‘<×&Ñ&×-Ñ-Ð-Ø%)§[§[ˆt�{‰{×!Ñ!Ð:°dÐ:r/   ÚtmplÚrowc                 óh  • U[         L a%  U R                  R                  U R                  5      $ [        R
                  " 5        HL  u  pgUR                  R                  US-   5      (       d  M*  U UR                  R                  S5      S    3n  O©   [        UR                  " SUUS.UR                  5        V	V
s0 s H  u  pš[        U	[        5      (       d  M  Xš_M      sn
n	D65      R                  U R                  (       a%  U R                  R                  U R                  5      OU R                  5      n[        U[        R                  5      (       dR  U(       aK  [        R
                  " 5        H2  u  pgUR                  U5      (       d  M  UR                  XvS-   5      n  U$    U$ s  sn
n	f )aÓ  
Expand a `URITemplate` using `row`, `_row` and `_name` as context and resolving the result
against `TableLike.url`.

.. code-block:: python

    >>> from csvw import URITemplate, TableGroup
    >>> tg = TableGroup.from_url(
    ...     'https://raw.githubusercontent.com/cldf/csvw/master/tests/fixtures/'
    ...     'csv.txt-metadata.json')
    >>> tg.expand(URITemplate('/path?{a}{#b}'), dict(a='1', b='2'), None)
    'https://raw.githubusercontent.com/path?1#2'

Ú:r   )Ú_rowÚ_namer)   )rO   r�  rp   ro   r   r�   r;   rv  rÔ   r    Úexpandr<   r5   rW   rX   Úreplace)r@   r»  r¼  r¿  rÀ  ÚqnameÚprefixr�  rî   Ú_kÚ_vs              r0   rÁ  ÚTableLike.expandU  sX  € ð ”7Š?Ø—8‘8×#Ñ# D§I¡IÓ.Ð.ä%×+Ò+Ö-‰KˆFØ�x‰x×"Ñ" 6¨C¡<×0Ó0ð ˜˜dŸh™hŸn™n¨SÓ1°!Ñ4Ð5Ð6�Ùñ .ô Ø—’ð ØØñð -0¯I©I¬KÔOªK¡& "¼:ÀbÌ#×;N“v�r’v©KÒOñó÷
 ‘7¸$¿(¿(˜4Ÿ8™8×+Ñ+¨D¯I©IÔ6ÈÏ	É	ÓRð ô ˜#œwŸ|™|×,Ñ,ÞÜ#-×#3Ò#3Ö#5‘K�FØ—~‘~ c×*Ó*Ø!Ÿk™k¨#¸©|Ó<˜ØØˆ
ñ	 $6ð ˆ
ùó Ps   Â=F.ÃF.)r‡  rŠ  r‹  r�  rE   r  rh   )'r*   r+   r,   r-   r4   r‡  r   r   r5   r   r6   r-  r.  r}   rˆ  rŠ  r   r‹  rd  rŒ  r�  r    rŽ  rW   rX   rº   r   r‚  rr   r¡  r   rµ  r  ro   r8   r€   rÁ  r.   rJ   rK   s   @r0   r†  r†  Ú  su  ø‡ ñð2 .2€GˆX�e˜C ˜LÑ)Ñ*Ó1Ø"×(Ò(¸Ñ>€Eˆ4�‰9Ó>Ø4:€N�GÐ0Ñ1Ó:Ø$(€K�˜&Ñ!Ó(Ø'×-Ò-¸dÑC€O�TÓCØ€Cˆ�$‰ÓØ'+€FˆE�#�w—|‘|Ð#Ñ$Ó+õ=ð2O˜sð O x°Ñ'7ô Oð ñ˜e C¨¯©Ð$5Ñ6ð Àkô ó ðð ñ˜3ð ¨kô ó ðñ˜U 3¨¯©Ð#4Ñ5ð ÈgÏlÉlõ ð ð;�e˜C §¡Ð-Ñ.ó ;ó ð;ñ(%˜;ð %¨Tð %ÐUX÷ %ó %r/   r†  T)Úfrozenc                   ó>   • \ rS rSr% Sr\\S'   \\S'   \\   \S'   Sr	g)ÚCsvRowi}  z3A bag of attributes specifying a row in a CSV file.rœ  Úlinenor¼  r)   N)
r*   r+   r,   r-   r4   r5   r6   rÞ   r}   r.   r)   r/   r0   rÊ  rÊ  }  s   ‡ á=ØƒJØƒKØ	ˆc‰†Nr/   rÊ  c                   ó†   • \ rS rSr% Sr\\S'   \\R                     \S'   \
R                  r\\S'   Sr\\S'   S\4S	 jrS
rg)ÚRowParseSpeci…  z0A bag of attributes used when parsing a CSV row.rD  ÚlogÚrow_implementationFÚerrorr¿   c                 óN   • [         R                  " XR                  S9  SU l        g)zLog and record error.©rÎ  TN)r   Úlog_or_raiserÎ  rÐ  )r@   r¿   s     r0   Ú	log_errorÚRowParseSpec.log_error�  s   € ä×Ò˜3§H¡HÒ-Øˆ�
r/   )rÐ  N)r*   r+   r,   r-   r4   r  r6   r   ÚloggingÚLoggerr�   r�   rÏ  r	  rÐ  r5   rÔ  r.   r)   r/   r0   rÍ  rÍ  …  s@   ‡ á:ØƒLØ	�'—.‘.Ñ	!Ó!Ø*×6Ñ6Ð˜Ó6Ø€Eˆ4Óð˜S÷ r/   rÍ  c                   óÖ   • \ rS rSr% Sr\R                  " \S9r\\	   \
S'   \R                  " \S9r\\\	\4      \
S'   \R                  " \S9r\\	   \
S'   \S\\   SS 4S	 j5       rS
rg)ÚTableParseSpeci“  z/Some metadata, categorizing columns in a table.r  ÚcolnamesÚvirtualcolsÚrequiredcolsre  r“   c                 óˆ  • U " 5       nU H´  nUR                   (       aC  UR                  (       a1  UR                  R                  UR                  UR                  45        O%UR
                  R                  UR                  5        UR                  (       d  M�  UR                  R                  UR                  5        M¶     U$ )z:Initialize from columns (e.g. columns property of Schema).)	r1  r  rÛ  rƒ   r?  rÚ  r  rÜ  r•   )r]   re  rî   ro  s       r0   Úfrom_columnsÚTableParseSpec.from_columnsš  s�   € ñ ‹eˆÛˆCØ�{�{Ø—<—<Ø—O‘O×*Ñ*¨C¯J©J¸¿¹Ð+EÔFøà—‘×#Ñ# C§J¡JÔ/Ø�|�|‰|Ø× Ñ ×$Ñ$ S§Z¡ZÖ0ñ ð ˆ
r/   r)   N)r*   r+   r,   r-   r4   r-  r.  r}   rÚ  r5   r6   rÛ  r~   r8   rÖ   rÜ  rr   r   r   rÞ  r.   r)   r/   r0   rÙ  rÙ  “  s‚   ‡ á9Ø%×+Ò+¸DÑA€Hˆd�3‰iÓAØ1<×1BÒ1BÐSWÑ1X€K��e˜C Ð,Ñ-Ñ.ÓXØ(×.Ò.¸sÑC€L�#�c‘(ÓCàð 8¨FÑ#3ð Ð8Hó ó ór/   rÙ  c                   ó8  • \ rS rSr% SrSr\\S'   / rS r	S r
\S\\S4   4S	 j5       rS\4S
 jr\SSS4S\\\\\4      S\\\\R0                  4      S\\\\R0                  4      S\\   S\\   S\\\4   4S jjrS#S\4S jjrS rS\4S jrS\\   4S jrS\ S\!S\\\\\"4      S\#S\$4
S jr%S\\   S\\   S\S\S\\\\\"4      4
S jr&SSS\'RP                  S4S\\)RT                     S\S \+S\,\\\\-4   \\\\\\-4   4   4   SS4   4S! jjr.S"r/g)$r   i©  a¾  
A table description is an object that describes a table within a CSV file.

`Table` objects provide access to schema manipulation either by manipulating the `tableSchema`
property directly or via higher-level methods like :meth:`~Table.add_foreign_key`

`Table` objects also mediate read/write access to the actual data through

- :meth:`~Table.write`
- :meth:`~Table.iterdicts`

.. seealso:: `<https://www.w3.org/TR/tabular-metadata/#tables>`_
Fr0  c                 ó  ^ • [        U[        [        45      (       d  U/OUn[        U 4S jU 5       5      (       d  [	        SU 35      eT R
                  R                  R                  [        R                  UX#S.S.5      5        g)zá
Add a foreign key constraint to `tableSchema.foreignKeys`.

:param colref: Column reference for the foreign key.
:param ref_resource: Referenced table.
:param ref_colref: Column reference of the key in the referenced table.
c              3   ó’   >#   • U  H7  oTR                   R                   Vs/ s H  o"R                  PM     sn;   v •  M9     g s  snf 7frE   )r‹  re  rÄ   )ry   ro  rm  r@   s      €r0   rz   Ú(Table.add_foreign_key.<locals>.<genexpr>Ä  s8   øé € ÐWÒPVÈ¨4×+;Ñ+;×+CÒ+CÓDÒ+C aŸ6œ6Ñ+CÑDÖDÒPVùÒDùs   ƒA¡A¶Azunknown column in foreignKey )rR  rT  )rT  rX  N)
r<   r~   r}   r   rY   r‹  rf  rƒ   r   r_  )r@   rr  Úref_resourceÚ
ref_colrefs   `   r0   Úadd_foreign_keyÚTable.add_foreign_key»  sy   ø€ ô ",¨F´U¼D°M×!BÑ!B�&‘ÈˆÜÔWÑPVÓW×WÑWÜÐ<¸V¸HÐEÓFÐFà×Ñ×$Ñ$×+Ñ+¬J×,?Ñ,?Ø%Ø&2ÑRñA
ó -õ 	r/   c                 óf   • [         R                  U 5        U R                  (       d  [        S5      eg )Nz#url property is required for Tables)r†  rº   r�  rY   rb   s    r0   rº   ÚTable.__post_init__Ì  s(   € Ü×Ñ Ô%Ø�x�xÜÐBÓCÐCð r/   r“   Nc                 óT   • U R                   (       a  U R                   R                  $ S$ )zThe filename of a table.N)r�  rU   rb   s    r0   Ú
local_nameÚTable.local_nameÑ  s   € ð #'§(§(ˆt�x‰x�‰Ð4°Ð4r/   c                 óœ   • U R                   =(       d:    U R                  =(       a    U R                  R                   =(       d
    [        5       $ rE   )r‡  r  r   rb   s    r0   Ú_get_dialectÚTable._get_dialectÖ  s+   € Ø�|‰|×S §¡× E°·±×1EÑ1E×SÌ'Ë)ÐSr/   r�   rœ  ro   rD  Ú_zippedc                 ó  • U R                  5       nU R                  R                   Vs/ s H  owR                  (       a  M  UPM     nnU[        L aB  U R
                  R                  U(       a  [        R                  " U5      OU R                  5      nSn	[        X&S9 n
UR                  (       a+  U
R                  U Vs/ s H  owR                  PM     sn5        U GH  n[        U[        [        45      (       a1  [!        U5       VVs/ s H  u  pÍUR#                  X¼   5      PM     nnnO¬U(       aZ  [%        UR'                  5       5      U Vs1 s H  oÝ iM     sn-
  nU(       a&  SR)                  S U 5       5      n[+        SU 35      eU Vs/ s H>  nUR#                  UR-                  UR                  UR-                  U 5      5      5      PM@     nnU	S-  n	U
R                  U5        GM     Uc  U
R/                  5       sSSS5        $  SSS5        U(       a¬  U(       a¥  [        R                  " U5      n[0        R2                  " [5        UR6                  R9                  UR:                  S-   5      5      S	[0        R<                  S
9 nUR#                  [5        U5      UR:                  S9  SSS5        UR?                  5         U	$ s  snf s  snf s  snnf s  snf s  snf ! , (       d  f       NÝ= f! , (       d  f       NK= f)a@  
Write row items to a CSV file according to the table schema.

:param items: Iterator of `dict` storing the data per row.
:param fname: Name of the file to which to write the data.
:param base: Base directory relative to which to interpret table urls.
:param strict: Flag signaling to use strict mode when writing. This will raise `ValueError`        if any row (dict) passed in `items` contains unspecified fieldnames.
:param _zipped: Flag signaling whether the resulting data file should be zipped.
:return: The CSV content if `fname==None` else the number of rows written.
r   ©r‡  z, c              3   ó.   #   • U  H  nS U S 3v •  M     g7f)Ú'Nr)   )ry   r.  s     r0   rz   ÚTable.write.<locals>.<genexpr>ú  s   é € Ð+JÂc¸U¨a°¨w°a­LÂcùs   ‚z(dict contains fields not in fieldnames: r   Nú.zipr¬  )Úcompression)Úarcname) rî  r‹  re  r1  ÚDEFAULTr�  rp   rW   rX   ro   r   r?  Úwriterowr<   r}   r~   rj  rN  rÖ   r\  rL  rY   rŸ   r  ÚzipfileÚZipFiler5   rn   rl   rÄ   ÚZIP_DEFLATEDÚunlink)r@   r�   rœ  ro   rD  rð  r‡  rm  Únon_virtual_colsÚrowcountÚwriterÚitemrn  ro  r¼  r•   ÚfpathÚzipfs                     r0   rN  ÚTable.writeÙ  si  € ð" ×#Ñ#Ó%ˆØ'+×'7Ñ'7×'?Ò'?ÓQÒ'? !ÇyÅyŸAÑ'?ÐÐQØ”GÒØ—H‘H×$Ñ$¾4¤W§\¢\°$Ô%7ÀTÇYÁYÓOˆEàˆÜ˜5Ò2°fØ�~�~Ø—‘Ñ3CÓ DÒ3C¨a§¤Ñ3CÑ DÔEÜ�Ü˜d¤T¬5 M×2Ñ2Ü<EÐFVÔ<WÔXÒ<W±&°!˜3Ÿ9™9 T¡WÖ-Ñ<W�CÑX�CæÜ! $§)¡)£+Ó.ÑFVÓ1WÒFV¸s°E²(ÑFVÑ1WÑW˜ÞØ"&§)¡)Ñ+JÁcÓ+JÓ"J˜CÜ",Ð/WÐX[ÐW\Ð-]Ó"^Ð^ñ $4ó5â#3˜Cð Ÿ	™	 $§(¡(¨3¯:©:°t·x±xÀ3À%Ó7IÓ"JÖKÙ#3ð ð 5ð ˜A‘�Ø—‘ ×$ñ ð ‰}Ø—{‘{“}÷% 3Ñ2ð" ÷# 3ö& –WÜ—L’L Ó'ˆEÜ—’Ü�E—L‘L×)Ñ)¨%¯*©*°vÑ*=Ó>Ó?ØÜ#×0Ñ0òð Ø—
‘
œ3˜u›:¨u¯z©z�
Ñ:÷ð �L‰LŒNØˆùòC Rùò !Eùó Yùò 2Xùò5÷ 3Õ2ú÷*õ úsZ   ©KÁKÂ!K)Ã K
Ã6K)ÄK
Ä*'K)ÅK
Å6K)ÆAK$Ç/K)Ê$K:ËK)Ë)
K7Ë:
Lc                 ó  • [         R                  " [        5      nUR                  [         R                  " 5       5        SnUb  [
        R                  " S5        U R                  R                  (       aŠ  [        R                  " U R                  R                  6 n[        5       nU R                  USS9 HE  u  pxn	U" U	5      n
X¦;   a!  [        R                  " U SU SU
 3US9  SnM4  UR                  U
5        MG     U$ )z"Make sure primary keys are unique.TzSthe items argument of check_primary_key is deprecated (its content will be ignored)©rÎ  Úwith_metadatar¾  z duplicate primary key: rÒ  F)rÖ  Ú	getLoggerr*   Ú
addHandlerÚNullHandlerrM   rN   r‹  rg  ÚoperatorÚ
itemgetterrÖ   Ú	iterdictsr   rÓ  r•   )r@   rÎ  r�   ÚnologÚsuccessÚget_pkrp  rœ  rË  r¼  Úpks              r0   Úcheck_primary_keyÚTable.check_primary_key  sâ   € ô ×!Ò!¤(Ó+ˆØ×Ñœ×,Ò,Ó.Ô/àˆØÑÜ�MŠMð Hô Ià×Ñ×&×&Ü×(Ò(¨$×*:Ñ*:×*EÑ*EÐFˆFÜ“5ˆDà&*§n¡n¸Èd nÓ&SÑ"�˜sÙ˜C“[�Ø“:Ü×&Ò&¨%¨°°&°Ð9QÐRTÐQUÐ'VÐ\_Ò`Ø#’Gà—H‘H˜R–Lñ 'Tð ˆr/   c                 ó"   • U R                  5       $ rE   )r  rb   s    r0   Ú__iter__ÚTable.__iter__&  s   € Ø�~‰~ÓÐr/   c           
      ó  • [        U5      (       a\  [        R                  " [        R                  " [        R
                  " [        U5      5      R                  5      UR                  S9nGO Un[        R                  " U5      nUR                  5       (       dÓ  UR                  R                  UR                  S-   5      nUR                  5       (       a–  UR                  [         R"                  " U5      5      n[        R                  " UR%                  UR'                  5        Vs/ s H&  oˆR)                  UR                  5      (       d  M$  UPM(     snS   5      UR                  S9nUR                  [+        XBS95      $ s  snf )N)Úencodingrö  r   rò  )r#   ÚioÚTextIOWrapperÚBytesIOr   r{  r5   Úcontentr  rW   rX   Úexistsrn   rl   rÄ   Úenter_contextrû  rü  ÚopenÚnamelistÚendswithr   )	r@   rœ  r‡  ÚstackÚhandler  Úzipfnamer  Úns	            r0   Ú_get_csv_readerÚTable._get_csv_reader)  s  € Ü�%�=‰=Ü×%Ò%Ü—
’
œ5×,Ò,¬S°«ZÓ8×@Ñ@ÓAÈG×L\ÑL\ñ^ŠFð ˆFÜ—L’L Ó'ˆEØ—<‘<—>‘>Ø Ÿ<™<×0Ñ0°·±¸fÑ1DÓE�Ø—?‘?×$Ñ$Ø ×.Ñ.¬w¯ª¸xÓ/HÓI�DÜ×-Ò-ØŸ	™	¨d¯m©m¬oÓ"Xªo¨ÇÁÈEÏJÉJ×AW§1©oÑ"XÐYZÑ"[Ó\Ø!(×!1Ñ!1ñ3�Fð ×"Ñ"Ô#>¸vÑ#WÓXÐXùò #Ys   Ä)#FÅFc                 óz  • U(       Gd2  U R                   R                  (       aB  [        U R                   R                  5      [        U5      :  a  [        R                  " S5        [        XR                   R                  5       H²  u  p4UR                  U5      nUR                  (       d  U(       d  [        R                  " S5        [        U[        5      (       d  M[  UR                  S5      S   SU R                  =(       d    SR                  S5      S   4;  d  Mœ  [        R                  " S5        M´     U$ )NzColumn number mismatchzIncompatible table modelsÚ-r   rŠ   zIncompatible column titles)r‹  re  rŒ   rM   rN   Úzipr<  rÄ   r<   r5   rÔ   r’   )r@   r?  rD  rÄ   ro  rî   s         r0   Ú_validated_csv_headerÚTable._validated_csv_header:  sÖ   € ßØ×Ñ×'×'¬C°×0@Ñ0@×0HÑ0HÓ,IÌCÐPVËKÓ,WÜ—’Ð6Ô7Ü  ×)9Ñ)9×)AÑ)AÖB‘	�Ø—m‘m DÓ)�ØŸŸ®#Ü—M’MÐ"=Ô>Ü˜s¤C×(Ó(ØŸ	™	 #› qÑ)°%¸$¿)¹)×:LÀu×9SÑ9SÐTWÓ9XÐYZÑ9[Ð1\Õ\Ü—M’MÐ">Ö?ñ Cð ˆr/   r¼  Ú
parse_specÚheader_colsr™  c                 ó@  • U VVVs0 s H#  u  pVow(       d  M  UR                   (       d  M!  Xe_M%     nnnnUR                  5       n	[        X1R                  5       H{  u  u  pZp¼U(       a1   UR	                  XÂR
                  S9X›R                  '   X¨;   a  XŠ	 M>  M@  UR
                  (       a&  [        R                  " SU
 S	U R                   35        XÉU
'   M}     UR                  5        H@  u  p¥X©;  d  M  UR                  UR                   SUR                   SUS-    SU
 S
35        MB     UR                    H  nU	R#                  US 5        M     UR$                   H  u  pïUR&                  " S0 U	D6Xž'   M     U	$ s  snnnf ! [         a�  nUR
                  (       d=  [        R                  " SU SUR                   SU 35        XÉUR                  '    S nAGNMUR                  UR                   SUR                   SUS-    SU
 SU 3	5         S nAGN‰S nAff = f)N©rD  zInvalid column value: Ú z; r¾  r   r¯  zUnspecified column "z" in table z": required column value is missingr)   )r  rÏ  r+  r¼  r  rD  r?  rY   rM   rN   r  rÔ  rœ  rË  rë  r�   rÚ  rå   rÛ  rÁ  )r@   r¼  r.  r/  r™  ÚjÚhrm  r  rî   r„   ro  rQ   r]  ÚkeyÚ	value_urls                   r0   Ú	_read_rowÚTable._read_rowG  së  € ñ )4ÕHª™W˜Q 1³q“D¸Q¿Z½Z“D�A’D©ˆÒHØ×+Ñ+Ó-ˆä! +¯w©wÖ7‰N‰KˆQ�3æð[Ø&)§h¡h¨q×9JÑ9J hÐ&K�CŸ
™
‘Oð “=Ø šñ !ð ×$×$Ü—M’MÐ$8¸¸¸;ÀtÇÁÐFWÐ"XÔYØ�A“ñ! 8ð$ —N‘NÖ$‰DˆAØ�|Ø×$Ñ$Ø—y‘y�k  3§:¡: ,¨a°°A±¨w°a¸°sÐ:\Ð]ö_ñ %ð —=”=ˆCØ�N‰N˜3 Ö%ñ !ð #×.Ô.‰NˆCØ ×'Ò'Ñ.¨#Ñ.ˆC‹Hñ /àˆ
ùôC Iøô "ó [Ø%×,×,Ü ŸšÐ(>¸q¸cÀÀ3Ç<Á<À.ÐPRÐSTÐRUÐ&VÔWØ*+˜CŸJ™JŸà"×,Ñ,°·	±	¨{¸!¸C¿J¹J¸<ÀqÈÈQÉÈÈqÐQRÐPSÐSUÐVWÐUXÐ-Y×ZÒZûð[ús.   ‡E=˜E=«E=Á*%FÆ
HÆAHÇ6HÈHr?  rÚ  c                 óž  • S nX:X  d3  [        U R                  R                  5      [        U5      :¼  a0  U(       d)  [        [	        XR                  R                  5      5      nO»U(       dˆ  U R                  R                  (       am  [        U R                  R                  5      [        U5      :  aA  / n[        U5       H/  u  px UR                  X€R                  R                  U   45        M1     O,U V
s/ s H  oªU R                  R                  U
5      4PM!     nn
U(       d<  [        U5       H-  u  p{U" US-   5      n	UR                  U	R                  U	45        M/     [        U5       VV
Vs/ s H  u  nu  p­XÊU4PM     snn
n$ ! [         a,    U" US-   5      n	UR                  U	R                  U	45         Mÿ  f = fs  sn
f s  snn
nf )Nc                 ó6   • [         R                  SSU  305      $ )NrÄ   r6  )r   rè   )Úindexs    r0   Údefault_colÚ+Table._get_header_cols.<locals>.default_colx  s   € Ü×#Ñ# V¨u°U°G¨_Ð$=Ó>Ð>r/   r   )
rŒ   r‹  re  r}   r+  rj  rƒ   Ú
IndexErrorrÄ   r‚  )r@   r?  rÚ  rD  r¼  r<  r/  rn  Úcnamero  r4  rG   r3  rm  s                 r0   Ú_get_header_colsÚTable._get_header_colsq  s�  € ò	?ð
 ÓÜ�T×%Ñ%×-Ñ-Ó.´#°f³+Ó=Æfô œs 6×+;Ñ+;×+CÑ+CÓDÓE‰KÞ˜D×,Ñ,×4×4Ü�T×%Ñ%×-Ñ-Ó.´°V³Ó<ØˆKÜ% fÖ-‘�ð8Ø×&Ñ&¨×/?Ñ/?×/GÑ/GÈÑ/JÐ'KÖLò .ñ IOÓOÊÀ1˜t×/Ñ/×:Ñ:¸1Ó=Ó>ÉˆKÐOæÜ! #ž‘�Ù! ! a¡%Ó(�Ø×"Ñ" C§H¡H¨c ?Ö3ñ 'ô ,5°[Ô+AÕBÒ+A™i˜a¡ !��q“	Ñ+AÓBÐBøô "ó 8Ù% a¨!¡eÓ,�CØ×&Ñ&¨¯©°# ×7ð8üò Pùô Cs   Ã)F
Ã8&GÅ2GÆ
2G Æ?G TrÎ  r  Ú_Rowc              #   óò  #   • U R                  5       nU=(       d%    U R                  R                  U R                  5      n[        R                  U R                  R                  5      n[        R                  " 5        n[        U R                  X6U5      5      n	UR                  (       a    U R                  [        U	5      S   U5      n
OUR                   n
Sn[#        U	5       HÄ  u  nu  pÞUS:X  an  U R%                  X§R                   X^5      nUR&                  U VVVs1 s H  u  nnnU(       d  M  UR                  iM     snnn-
  nU(       a  [)        U SU 35      e[+        XQUS9nU R-                  [/        X=US9UUU5      nUR0                  (       a  Mµ  U(       a  X=U4OUv •  MÆ     SSS5        W	R2                  U l        g! [         a     SSS5        gf = fs  snnnf ! , (       d  f       N?= f7f)aÄ  Iterate over the rows of the table

Create an iterator that maps the information in each row to a `dict` whose keys are
the column names of the table and whose values are the values in the corresponding
table cells, or for virtual columns (which have no values) the valueUrl for that
column. This includes columns not specified in the table specification.

Note: If the resolved data filename does not exist - but there is a zip file of the form
`fname+'.zip'`, we try to read the data from this file after unzipping.

:param log: Logger object (default None) The object that reports parsing errors.        If none is given, parsing errors raise ValueError instead.
:param bool with_metadata: (default False) Also yield fname and lineno
:param fname: file-like, pathlib.Path, or str (default None)        The file to be read. Defaults to inheriting from a parent object, if one exists.
:param strict: Flag signaling whether data is read strictly - i.e. raising `ValueError`         when invalid data is encountered - or not - i.e. only issueing a warning and returning         invalid data as `str` as provided by the undelying DSV reader.
:return: A generator of dicts or triples (fname, lineno, dict) if with_metadata
r   Nr   z is missing required columns )rD  rÎ  rÏ  )rœ  rË  r¼  )rî  r�  rp   ro   rÙ  rÞ  r‹  re  Ú
contextlibÚ	ExitStackrš   r'  r?  r,  r™   ÚStopIterationrÚ  rj  r@  rÜ  rY   rÍ  r7  rÊ  rÐ  ÚcommentsÚ	_comments)r@   rÎ  r  rœ  rB  rD  r‡  Útable_parse_specr#  Úreaderr?  r/  rn  rË  r¼  r3  r4  rm  Úmissingr.  rî   s                        r0   r  ÚTable.iterdicts–  sº  é € ð8 ×#Ñ#Ó%ˆØ×4˜Ÿ™×)Ñ)¨$¯)©)Ó4ˆä)×6Ñ6°t×7GÑ7G×7OÑ7OÓPÐä×!Ò!Ô# uÜ˜$×.Ñ.¨u¸uÓEÓFˆFð �~�~ðØ!×7Ñ7¼¸V»ÀQ¹ÈÓP‘Fð *×2Ñ2�àˆKÜ$-¨fÖ$5Ñ �‘=�FØ˜“6Ø"&×"7Ñ"7Ø× 9Ñ 9¸6ó#H�Kà.×;Ñ;Ù1<ÕB²¡g a¨¨AÄ›˜Ÿœ±ÓBñC�GæÜ(¨E¨7Ð2OÐPWÈyÐ)YÓZÐZä)°ÐUYÑZ�
Ø—n‘nÜ ¸3Ñ?ØØØ$ó	�ð "×'×'Ñ'Þ2?˜5¨#Ñ.ÀSÔHñ# %6÷ $ð@  Ÿ™ˆ�øô1 %ó Ø÷ $Ð#ðüô C÷' $Õ#üsb   ‚A=G7Á?-G&Â-GÃAG&Ä GÄ3GÅAG&ÆG&Æ-G7Ç
GÇG&Ç	G7ÇGÇ
G&Ç&
G4Ç0G7)rH  )NN)0r*   r+   r,   r-   r4   r0  r  r6   rH  ræ  rº   r  r   r5   rë  r   rî  rù  r   r€   r}   r~   r   rW   rX   rÞ   rN  r  r  r   r'  r,  rÊ  rÍ  r   rÙ  ÚRowTyper7  r@  r�   r�   rÖ  r×  r	  r	   r   r  r.   r)   r/   r0   r   r   ©  s>  ‡ ñð !€N�DÓ Ø€Iòò"Dð
 ð5˜E # t )Ñ,ó 5ó ð5ðT˜gô Tð
 ;BØ9=Ø',Ø(-ñ3Ø˜e D¨$°Ð$5Ñ6Ñ7ð3à˜e C¨¯©Ð$5Ñ6Ñ7ð3ð ˜U 3¨¯©Ð#4Ñ5Ñ6ð3ð ˜t‘nð	3ð
   ‘~ð3ð
 38¸¸S¸±/õ3ñj¸õ ò0 ðYÐ8Sô Yð"°t¸C±yô ð(àð(ð %ð(ð ˜e C¨¨fÐ$4Ñ5Ñ6ð	(ð
 !ð(ð 
ô(ðT#Cà˜‘Ið#Cð ˜3‘ið#Cð ð	#Cð
 ð#Cð 
ˆe�C˜˜fÐ$Ñ%Ñ	&ô#CðN -1Ø"'ØØ$×0Ñ0ØñA)à˜'Ÿ.™.Ñ)ðA)ð  ðA)ð
 ðA)ð 
�5˜˜c 3˜h™¨¨s°C¸¸cÀ3¸h¹Ð/GÑ)HÐHÑIÈ4ÐQUÐUÑ	V÷A)ð A)r/   r   c                   óT   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   S\SS	4S
 jr	Sr
g	)ÚForeignKeyInstanceiÚ  z<Simple structure holding the specification of a foreign key.Útarget_tabler  Úsource_tableÚfkrD  r“   Nc                 ó¸  • [        U R                  5      [        U R                  5      :w  a  [        S5      e[	        U R                  U R                  5       Hÿ  u  p#U R
                  R                  R                  X!S9nU R                  R                  R                  X1S9nU(       a  U(       d  [        SU SU S35      eUR                  (       d  M~  UR                  (       d  M‘  UR                  R                  UR                  R                  :w  d  MÁ  [        SU SUR                  R                   SU SUR                  R                   S3	5      e   g)	z/Checks whether the colrefs for fk and pk match.zFForeign key error: non-matching number of columns in source and targetr1  ú#Foreign key error: missing column "z" or "Ú"z*Foregin key error: non-matching datatype "r¾  N)rŒ   rR  r  rY   r+  rQ  r‹  r‚  rP  r  ro   )r@   rD  ÚscolÚtcolÚscolumnÚtcolumns         r0   r   ÚForeignKeyInstance.validateâ  s.  € äˆt�w‰w‹<œ3˜tŸw™w›<Ó'ÜØXóZð Zä˜dŸg™g t§w¡wÖ/‰JˆDØ×'Ñ'×3Ñ3×>Ñ>¸tÐ>ÐSˆGØ×'Ñ'×3Ñ3×>Ñ>¸tÐ>ÐSˆGÞ¦Ü Ø9¸$¸¸vÀdÀVÈ1ÐMóOð Oà××Ñ G×$4×$4Ñ$4Ø×$Ñ$×)Ñ)¨W×-=Ñ-=×-BÑ-BÕBÜ Ø@ÀÀÀaÈ×HXÑHX×H]ÑH]ÐG^ð _Ø˜&  '×"2Ñ"2×"7Ñ"7Ð!8¸ð;ó<ð <ò 0r/   r)   )r*   r+   r,   r-   r4   r   r6   Ú
ColRefTyper  r   r.   r)   r/   r0   rO  rO  Ú  s.   ‡ áFØÓØƒNØÓØƒNð<˜tð <¨÷ <r/   rO  c                   ó´  ^ • \ rS rSr% Sr\R                  " \S9r\\	   \
S'   U 4S jr\S 5       rS r  SS\\\R$                  4   S	\\   S
\\   S\\\\\4      4S jjrS\\R$                  \4   4S jr\S\\\	4   4S j5       rSS	\S\\   4S jjrSS jr\S\S\	S\ RB                  \"\\\	\"4      4   S	\S\#RH                  S\4S j5       r%Sr&U =r'$ )r   iô  a)  
A table group description is an object that describes a group of tables.

A `TableGroup` delegates most of its responsibilities to the `Table` objects listed in its
`tables` property. For convenience, `TableGroup` provides methods to
- read data from all tables: :meth:`TableGroup.read`
- write data for all tables: :meth:`TableGroup.write`

It also provides a method to check the referential integrity of data in related tables via
:meth:`TableGroup.check_referential_integrity`

.. seealso:: `<https://www.w3.org/TR/tabular-metadata/#table-groups>`_
r  r¥  c                 óf  >• / nU R                    Hq  n[        U[        [        45      (       d  [        R
                  " S5        M6  UR                  [        U[        5      (       a  [        R                  U5      OU5        Ms     Xl         [        TU ]%  5         U R                    H	  nXl
        M     g )NzInvalid value for Table spec)r¥  r<   r€   r   rM   rN   rƒ   rè   r>   rº   r  )r@   rî   r†   r©  rB   s       €r0   rº   ÚTableGroup.__post_init__  s|   ø€ ØˆØ—+”+ˆBÜ˜b¤4¬ -×0Ñ0Ü—’Ð<Ö=à—
‘
´*¸RÄ×2FÑ2Fœ5Ÿ?™?¨2Ô.ÈBÖOñ	 ð
 ŒÜ‰ÑÔØ—[”[ˆEØ ŽMò !r/   c                 ó6   • [        U5      R                  U 5      $ )z8Initialize a TableGroup from a frictionless DataPackage.)r   Úto_tablegroup)r]   Údps     r0   Úfrom_frictionless_datapackageÚ(TableGroup.from_frictionless_datapackage  s   € ô ˜2‹×,Ñ,¨SÓ1Ð1r/   c           	      óœ   • U R                   R                  5        VVs0 s H  u  pU[        UR                  5       5      _M!     snn$ s  snnf )z
Read all data of a TableGroup
)Ú	tabledictr�   r}   r  )r@   ÚtnameÚts      r0   r  ÚTableGroup.read  s>   € ð <@¿>¹>×;OÑ;OÔ;QÔRÒ;Q©x¨u�”t˜AŸK™K›MÓ*Ò*Ñ;QÒRÐRùÓRs   ž&Arœ  rD  rð  r�   c                 óÒ   • [         R                  " U5      nUR                  5        H,  u  pVU R                  U   R	                  XaR
                  X#S9  M.     U R                  U5        g)zä
Write a TableGroup's data and metadata to files.

:param fname: Filename for the metadata file.
:param items: Keyword arguments are used to pass iterables of rows per table, where the         table URL is specified as keyword.
)ro   rD  rð  N)rW   rX   r�   re  rN  rn   rµ  )r@   rœ  rD  rð  r�   rf  Úrowss          r0   rN  ÚTableGroup.write  sP   € ô —’˜UÓ#ˆØ Ÿ;™;ž=‰KˆEØ�N‰N˜5Ñ!×'Ñ'¨·<±<ÈÐ'Ó`ñ )à�‰�UÕr/   Údestc           	      ó�  • [         R                  " U5      nU R                   Hh  n[        R                  " [        UR                  R                  U R                  5      5      [        UR                  R                  U5      5      5        Mj     XR                  R                  -  U l	        U R                  U R                  5        g)z{
Write a TableGroup's data and metadata to files relative to `dest`, adapting the `base`
attribute.

:param dest:
:return:
N)rW   rX   r¥  ÚshutilÚcopyr5   r�  rp   ro   rŽ  rÄ   rµ  )r@   rl  r©  s      r0   ro  ÚTableGroup.copy-  s   € ô �|Š|˜DÓ!ˆØ—[”[ˆEÜ�KŠKœ˜EŸI™I×-Ñ-¨d¯i©iÓ8Ó9¼3¸u¿y¹y×?PÑ?PÐQUÓ?VÓ;WÖXñ !àŸ[™[×-Ñ-Ñ-ˆŒØ�‰�T—[‘[Õ!r/   r“   c                 óZ   • U R                    Vs0 s H  oR                  U_M     sn$ s  snf )z$Convenient access to tables by name.)r¥  rë  )r@   rg  s     r0   re  ÚTableGroup.tabledict;  s&   € ð *.¯ªÓ5ª A—‘˜a’©Ñ5Ð5ùÒ5r€  c                 ó`  •  [        U R                   VVs/ s H¦  o"R                  R                    H‰  nUR                  R
                  (       a  M   [        U R                  UR                  R                  R                     [        UR                  R                  5      U[        UR                  5      5      PM‹     M¨     snnS S9n U H  nUR                  US9  M     U$ s  snnf ! [         a  n[        SU S35      UeSnAff = f! [         a  n[        SU S35      UeSnAff = f)z?Check whether pk and fk specs in foreign key constraints match.c                 óp   • U R                   R                  U R                  U R                  R                  4$ rE   )rP  rë  r  rQ  ©Úxs    r0   r°   Ú,TableGroup.validate_schema.<locals>.<lambda>L  s#   € ˜qŸ~™~×8Ñ8¸!¿$¹$ÀÇÁ×@YÑ@YÑZr/   )r5  z"Foreign key error: missing table "z" referencedNr1  rT  )Úsortedr¥  r‹  rf  rX  rS  rO  re  rR  rU   r~   rT  ÚKeyErrorrY   r   ÚAssertionError)r@   rD  rg  rR  Úfkisr]  Úfkis          r0   Úvalidate_schemaÚTableGroup.validate_schema@  s*  € ð	ZÜð "Ÿ[š[ô9ò )˜·=±=×3LÕ3L¨RØŸ<™<×7Õ7ó3Ô&ØŸ™ r§|¡|×'<Ñ'<×'CÑ'CÑDÜ˜bŸl™l×:Ñ:Ó;ØÜ˜b×0Ñ0Ó1ö	3ñ
 4Mñ3ñ
 )ò9ñ [ñ	\ˆDð	[Û�Ø—‘ F�Ó+ñ ð ˆùó!9øô ó 	ZÜÐAÀ!ÀÀLÐQÓRÐXYÐYûð	Zûô
 ó 	[ÜÐBÀ1À#À\ÐRÓSÐYZÐZûð	[úsG   ‚C, –8C&
ÁA1C&
ÃC, ÃD Ã&C, Ã,
DÃ6DÄDÄ
D-ÄD(Ä(D-c                 ó¼  ^• Ub  [         R                  " S5        U(       a¢  U R                   H’  nUR                  R                   Hu  nU Hl  m[        U4S jUR                   5       5      (       d  M)  [        SUR                   Vs/ s H  nTR                  U5      PM     sn SUR                   35      e   Mw     M”      U R                  5       nSn[        R                  " US
 5       H¥  u  p«[        U5      nUS   R                   n["        R$                  " 5       n[        R                  " US 5       HB  u  pïU Vs/ s H#  oUR&                  [)        UR*                  5      4PM%     snU[)        U5      '   MD     U R-                  XŒXÓU5      nM§     U$ s  snf ! [         a-  n	/ nSn[        R                  " [        U	5      USS	9   Sn	A	NúSn	A	ff = fs  snf )zD
Strict validation does not allow for nullable foreign key columns.
Nz\the data argument of check_referential_integrity is deprecated (its content will be ignored)c              3   óJ   >#   • U  H  nTR                  U5      S L v •  M     g 7frE   rž   )ry   ro  r¼  s     €r0   rz   Ú9TableGroup.check_referential_integrity.<locals>.<genexpr>a  s    øé € ÐRÒ?Q¸˜sŸw™w s›|¨tÕ3Ò?Qùs   ƒ #zForeign key column is null: r2  TFrÐ  )rÎ  Úlevelc                 ó.   • U R                   R                  $ rE   )rP  rë  ru  s    r0   r°   Ú8TableGroup.check_referential_integrity.<locals>.<lambda>v  s   € ¸¿¹×8QÒ8Qr/   r   c                 ó   • U R                   $ rE   )r  ru  s    r0   r°   r„  z  s   € ¸Q¿TºTr/   )rM   rN   r¥  r‹  rf  r¾   rT  rY   rŸ   r}  r   rÓ  r5   Ú	itertoolsÚgroupbyr}   rP  r�   r�   rQ  r~   rR  Ú_check_fks_referencing_table)r@   rŸ  rÎ  rD  rg  rR  ro  r{  r  r]  rG   ÚgrprP  Úfksr  Úkgrpr¼  s                   @r0   Úcheck_referential_integrityÚ&TableGroup.check_referential_integrityV  s¦  ø€ ð ÑÜ�MŠMð Hô IæØ—[”[�ØŸ-™-×3Ô3�BÛ ˜ÜÔR¸r×?QÒ?QÓR×RÓRÜ",Ø">Ø<>×<NÒ<NÓ#OÒ<N°S C§G¡G¨C¦LÑ<NÑ#OÐ"PÐPQØ#%×#5Ñ#5Ð"6ð!8ó#9ð 9ó  !ó 4ñ !ð	?Ø×'Ñ'Ó)ˆDØˆGô  ×'Ò'¨Ñ.QÖR‰FˆAÜ�s“)ˆCØ˜q™6×.Ñ.ˆLÜ×)Ò)Ó+ˆCÜ%×-Ò-¨c±>ÖB‘�ÙLPÓ!QÊDÀb§?¡?´E¸"¿%¹%³LÓ"AÉDÑ!Q�”E˜"“I“ñ Cà×7Ñ7¸ÈsÐ\_Ó`ŠGñ Sð ˆùò3 $Pøô
 ó 	?ØˆDØˆGÜ×Òœs 1›v¨3°g×>ûð	?üò$ "Rs$   Â	FÃF Å*GÆ
GÆ)#GÇGr  rP  rŠ  rÎ  c                 óä   • [        U[        R                  " S U 5       5      U5      nUR                  X5      n UR	                  5        H"  u  pVU H  u  pxUR                  XXx5      n M     M$     U $ )z2Check all foreign keys referencing the same table.c              3   ó@   #   • U  H  o[        U5      S :H  4v •  M     g7f)r   Nr‹   )ry   rR  s     r0   rz   Ú:TableGroup._check_fks_referencing_table.<locals>.<genexpr>‰  s   é € Ð1SÊsÈ´s¸2³wÀ!±|Õ2DÊsùs   ‚)ÚReferencedTabler�   r�   Úget_pksr�   Ú	check_fks)	r  rP  rŠ  rD  rÎ  r  Úsource_tablesrQ  rR  s	            r0   rˆ  Ú'TableGroup._check_fks_referencing_table  ss   € ô 'Øœ+×1Ò1Ñ1SÉsÓ1SÓSÐUXóZˆð ×&Ñ& wÓ7ˆØ!$§¡¦ÑˆBã$1Ñ �Ø&×0Ñ0°¸lÓO’ó %2ñ "-ð ˆr/   )rŽ  r¥  )FFr„  )NNF)(r*   r+   r,   r-   r4   r-  r.  r}   r¥  r   r6   rº   rr   rb  r  r   r5   rW   rX   r   r  r   r~   r€   rN  ro  r  re  rO  r}  rŒ  Ústaticmethodr�   r�   r[  rÖ  r×  rˆ  r.   rJ   rK   s   @r0   r   r   ô  sf  ø‡ ñð &×+Ò+¸DÑA€FˆD�‰KÓAõ
!ð ñ2ó ð2òSð (-Ø(-ñØ˜3 §¡Ð,Ñ-ðà˜t‘nðð   ‘~ðð    d¨E°4Ð&7Ñ 8Ñ9õ	ð""˜˜wŸ|™|¨SÐ0Ñ1ô "ð ð6˜4  U 
Ñ+ó 6ó ð6ñ dð °tÐ<NÑ7Oõ ô,'ðR ðØðàðð ×(Ñ(¨°T¸%ÀÀzÐ@QÑ:RÑ5SÐ)SÑTðð ð	ð
 —‘ðð 
óó ör/   r   c            
       óî   • \ rS rSr% Sr\\S'   \R                  \	\
4   \S'   \R                  \S'   \R                  " S S9r\\	\4   \S'   S	\
S
\
S\
4S jrS	\
SSS\	S\
4S jrS	\
S\	S\S\	S\
4
S jrSrg)r‘  i“  zF
Wraps a Table object to simplify checking of foreign key references.
r©  ÚpksrÎ  c                  ó6   • [         R                  " [        5      $ rE   )r�   ÚdefaultdictrÖ   r)   r/   r0   r°   ÚReferencedTable.<lambda>Ÿ  s   € ¤× 7Ò 7¼Ô <r/   r  Úrefsr  rD  r“   c                 ój  • U R                    Vs0 s H  o3[        R                  " U6 _M     nnU R                  R	                  U R
                  S9 HY  nU R                    HF  nXC   " U5      nX`R                  U   ;   a	  U(       a  SnU R                  U   R                  U5        MH     M[     U$ s  snf )z'Read the actual fk values in the table.rÒ  F)r˜  r  r  r©  r  rÎ  rœ  r•   )r@   r  rD  r  Úitemgettersr¼  Úvalss          r0   r’  ÚReferencedTable.get_pks¡  s�   € à>B¿hºhÓGºh¸œ8×.Ò.°Ð3Ò3¹hˆÐGØ—:‘:×'Ñ'¨D¯H©HÐ'Ó5ˆCØ—h”h�Ø"’ sÓ+�ØŸ9™9 R™=Ó(ö Ø"'˜Ø—	‘	˜"‘×!Ñ! $Ö'ó ñ 6ð ˆùò Hs   �B0rŸ  Ú	RefValuesr  c                 ó¦  • U R                   U   nU R                  U   nUR                  c  U$ U(       a,  [        UR                  [        5      (       a  UR                  nOUR                  /nU H]  nU(       d  SU;   a  M  Xt;  d  M  [
        R                  " U SU R                  R                  R                   3U R                  S9  SnM_     U$ )zR
We check if the value for the foreign key are available in the referenced table.
Nz not found in table rÒ  F)rœ  r˜  r›   r<   r}   r   rÓ  r©  r�  rU   rÎ  )r@   r  rŸ  r  r˜  Úsingle_columnrœ  Úrefs           r0   Ú_check_itemÚReferencedTable._check_item¯  s²   € ð �i‰i˜‰mˆØŸ™ ™ˆØ�;‰;ÑØˆNÞœZ¨¯©´T×:Ñ:ð —;‘;‰Dà—K‘K�=ˆDÛˆCÞ  T¨S£[ñ Ø�~Ü×"Ò"Ø�fÐ0°·±·±×1FÑ1FÐ0GÐHÈdÏhÉhòXà’ñ ð ˆr/   rQ  rR  c                 ó´   • UR                  U R                  SS9 H9  u  pVn[        XV[        R                  " U6 " U5      S9nU R                  XU5      nM;     U$ )zl
Check one fk constraint, i.e. whether the fk values in self.table actually can be found
in `target_table`.
Tr  ©rœ  rË  r›   )r  rÎ  r¡  r  r  r¥  )r@   r  r  rQ  rR  rœ  rË  r  s           r0   r“  ÚReferencedTable.check_fksÉ  s`   € ð $0×#9Ñ#9¸d¿h¹hÐVZÐ#9Ó#[ÑˆE˜4Ü 5Ä×@SÒ@SÐUWÑ@XÐY]Ó@^Ñ_ˆDØ×&Ñ& w°bÓ9ŠGñ $\ð ˆr/   r)   N)r*   r+   r,   r-   r4   r   r6   r�   r�   r[  r  rÖ  r×  r-  r.  rœ  r€   rÖ   r’  r¥  r“  r.   r)   r/   r0   r‘  r‘  “  sÃ   ‡ ñð ƒLð 
×	 Ñ	  ¨TÐ!1Ñ	2Ó2Ø	�‰Óà"-×"3Ò"3Ù<ñ#>€Dˆ$ˆz˜3ˆÑ
ó >ð˜tð ¨Tð °dô ð 4ð ¨{ð À
ð Ètô ð4àðð ðð  ð	ð
 ðð 
÷r/   r‘  c                   óN   • \ rS rSr% Sr\\S'   \\S'   \\\	\   4   \S'   S r
Srg)	r¡  iÚ  z6Bundle properties of a table row for simpler checking.rœ  rË  r›   c                 óT   • U R                    SU R                   SU R                   S3$ )Nr¾  z Key `Ú`r¨  rb   s    r0   rc   ÚRefValues.__str__á  s'   € Ø—*‘*�˜Q˜tŸ{™{˜m¨6°$·+±+°¸aÐ@Ð@r/   r)   N)r*   r+   r,   r-   r4   r5   r6   rÞ   r   r}   rc   r.   r)   r/   r0   r¡  r¡  Ú  s(   ‡ á@ØƒJØƒKØ�#�t˜C‘y�.Ñ!Ó!õAr/   r¡  c            	       óº   • \ rS rSrSr   SS\S\\   S\S\4S jjrS	 r	\
S
\4S j5       r\
S
\4S j5       r\SS
\\\4   4S jj5       rSS jrS rS rS rSrg)r$   iå  z@
Python API to read CSVW described data and convert it to JSON.
Nr�  Úmd_urlr   rD  c                 ób  • / U l         X@l        S n[        R                  " 5        nU(       a#  UR	                  [         R
                  " SS95      nSn [        R                  " U=(       d    U5      n[        UR                  5       5      SS1:H  U l        SUR                  SS5      ;  a  [!        S5      eU R#                  X�U5        [%        U R&                  [(        5      (       a  U R&                  R*                  OU R&                  /U l        U R*                   H‚  n	U	R,                  R.                   He  n
U
R0                  (       d  M  [2        R4                  " S	U
R0                  5      (       d"  U
R0                  R7                  S
5      (       d  M^  S U
l        Mg     M„     U R&                  R8                  U l        S S S 5        U(       a  U R                   R;                  U5        g g ! [        R                  R                   a    U R                  U5      u  p‡ GNªf = f! , (       d  f       Nj= f)NT©ÚrecordFú@contextr�  úhttp://www.w3.org/ns/csvwrü   zInvalid or no @contextru  rG   )rM   Ú_strictrD  rE  r  Úcatch_warningsr   r–  r|  ÚdecoderÚJSONDecodeErrorÚlocate_metadatarÖ   r\  Úno_metadatarŸ   rY   Ú_set_tablesr<   rg  r   r¥  r‹  re  rÄ   rw  rx  rv  Úcommon_propsÚextend)r@   r�  r¯  r   rD  r¬  r#  Ú	no_headerÚmdr©  ro  s              r0   rZ   ÚCSVW.__init__é  sž  € ð ˆŒØŒØˆÜ×!Ò!Ô# uÞØ×'Ñ'¬×(?Ò(?ÀtÑ(LÓM�àˆIð:Ü—^’^ F§M¨cÓ2�ô  # 2§7¡7£9›~°*¸eÐ1DÑDˆDÔØ*°"·&±&¸ÀRÓ2HÓHÜ Ð!9Ó:Ð:Ø×Ñ˜R iÔ0Ü+5°d·f±f¼j×+IÑ+I˜$Ÿ&™&Ÿ-š-ÐPT×PVÑPVÈxˆDŒKØŸœ�Ø ×,Ñ,×4Ô4�CØ—x—x‘x¤R§Y¢Y¨u°c·h±h×%?Ñ%?À3Ç8Á8×CVÑCVÐWZ×C[ÓC[Ø#'˜žó 5ñ %ð !%§¡× 3Ñ 3ˆDÔ÷- $ö. Ø�M‰M× Ñ  Õ#ð øô —<‘<×/Ñ/ó :à $× 4Ñ 4°SÓ 9‘�’Ið:ú÷ $Õ#ús=   ¥-H ÁG(Á2CH Å
AH Æ*H Ç(1HÈH ÈHÈH È 
H.c                 óP  • SU;   aˆ  US   (       a  [        US   [        5      (       d  [        S5      e[        U5      (       a2  [        R                  X!S9U l        U R                  R                  SS9  g [        R                  X!S9U l        g [        U5      (       ap  [        R                  X!S9U l        U(       aP  U R                  R                  (       a  SU R                  R                  l        g [        SS9U R                  l
        g g [        R                  X!S9U l        g )Nr¥  z-Invalid TableGroup with empty tables propertyrž  Tr1  F)r?  )r<   r}   rY   r#   r   r   rg  r}  r¡  r   r‡  r?  r   )r@   r¿  r�  r¾  s       r0   r»  ÚCSVW._set_tables  sÖ   € Ø�r‹>Ø�h—<¤z°"°X±,Ä×'EÑ'EÜ Ð!PÓQÐQÜ�c�{‰{Ü#×,Ñ,¨SÐ,Ð:�”Ø—‘×&Ñ&¨dÐ&Ò3ä#×-Ñ-¨cÐ-Ð;�•ä�c�{‰{ÜŸ™¨˜Ð5�”ÞØ—v‘v—~—~Ø05˜Ÿ™Ÿ™Õ-ä)0¸Ñ)>˜Ÿ™�ð	 ô Ÿ™¨˜Ð6�•r/   r“   c                 ó"  • U R                   (       a  g[         R                  " SS9 nU R                   HF  nUR                  SS9 H  nM     UR	                  5       (       a  M0  [         R
                  " S5        MH     U R                  R                  U R                  S9(       d  [         R
                  " S5        U(       a  U R                   R                  U5        SSS5        [        U R                   5      (       + $ ! , (       d  f       N(= f)z§
Performs CSVW validation.

.. note::

    For this to also catch problems during metadata location, the
    `CSVW` instance must be initialized with `validate=True`.
FTr±  r1  zDuplicate primary keyz"Referential integrity check failedN)rM   r¶  r¥  r  r  rN   Ú
tablegrouprŒ  rµ  r½  r  )r@   r¬  r©  rG   s       r0   Úis_validÚCSVW.is_valid!  s¿   € ð �=�=ØÜ×$Ò$¨DÒ1°QØŸœ�ØŸ™°˜Ó6�AÙñ 7à×.Ñ.×0Ó0Ü—M’MÐ"9Ö:ñ	 %ð
 —?‘?×>Ñ>ÀdÇlÁlÐ>ÖSÜ—’ÐBÔCÞØ—‘×$Ñ$ QÔ'÷ 2ô ˜Ÿ™Ó&Ô&Ð&÷ 2Õ1ús   §9D Á$A:D Ä 
Dc                 ó¬   • [        U R                  [        5      (       a  U R                  $ [        SU R                  R                  0U R                  S9$ )zThe table spec.ro   )rÏ   r¥  )r<   rg  r   ro   r¥  rb   s    r0   rÄ  ÚCSVW.tablegroup9  sB   € ô $ D§F¡F¬J×7Ñ7ˆt�v‰vð 	KÜ ¨¯©¯©Ð 5¸d¿k¹kÑJð	Kr/   c           	      ó¬  • S nSnU (       Gaä  [        U 5      (       GaÓ  [        R                  " U 5      u  p4[        [        R
                  " SU5      5      nU H¡  nUR                  R                  S5      S:X  ai  UR                  R                  S5      S;   aJ  [        R                  " [        UR                  5      R                  U 5      5      nU" X`5      (       a  Xb4s  $ [        R                  " S5        M£     [        R                  " [        S	5      R                  U 5      5      nUR                  S
:X  a  UR                   OSnUR#                  S5       H’  n	[        R                  " [        [%        U	5      R'                  U S95      R                  U 5      5      nUR                  S
:X  d  MY   UR)                  5       nU" X`5      (       a  Xb4s  $ [        R                  " S5        M”     OtU (       am  [,        R.                  " [1        U 5      S-   5      R3                  5       (       a8  [        R                  " [,        R.                  " [1        U 5      S-   5      5      U4$ SU S.n[        U =(       d    S5      (       d3  [,        R.                  " U 5      n
[1        U
5      US'   U
R4                  US'   Xr4$ ! [(        R*                   a     GMw  f = f)u€   
Implements metadata discovery as specified in
`Â§5. Locating Metadata <https://w3c.github.io/csvw/syntax/#locating-metadata>`_
c                 ó–   • U R                  SU /5       H2  nUR                  S5      S   US   R                  S5      S   :X  d  M2    g   g)Nr¥  Ú/éÿÿÿÿr�  TF)rŸ   rÔ   )r¿  r�  r©  s      r0   Ú	describesÚ'CSVW.locate_metadata.<locals>.describesE  sL   € ØŸ™ ¨2¨$Ö/�ð —9‘9˜S“> "Ñ%¨¨u©×);Ñ);¸CÓ)@ÀÑ)DÕDÙñ 0ð r/   Fzheader\s*=\s*absentÚrelÚdescribedbyr	  )zapplication/csvm+jsonzapplication/ld+jsonzapplication/jsonz?Ignoring linked metadata because it does not reference the dataz/.well-known/csvméÈ   z&{+url}-metadata.json
csv-metadata.jsonÚ
)r�  z8Ignoring metadata because it does not reference the dataz-metadata.jsonr´  )r³  r�  rü   r¤  r�  )r#   r   Úrequest_headr  rw  rx  ÚparamsrŸ   r–  r    r�  rp   rM   rN   r{  Ústatus_codeÚtextrÔ   r8   rÁ  r|  r¸  rW   rX   r5   r  rÄ   )r�  rÍ  r¾  Úcontent_typeÚlinksÚlinkr¿  rî   ÚlocsÚlineÚps              r0   r¹  ÚCSVW.locate_metadata?  s6  € ò	ð ˆ	ß”6˜#—;’;ô #(×"4Ò"4°SÓ"9ÑˆLÜœRŸYšYÐ'=¸|ÓLÓMˆIÛ�Ø—;‘;—?‘? 5Ó)¨]Ó:Ø—{‘{—‘ vÓ.ð 3`ó `ä"Ÿ^š^¬D°·±«N×,BÑ,BÀ3Ó,GÓH˜Ù$ R×-Ñ-Ø#% =Ò0Ü—’Ð_Ö`ñ ô ×#Ò#¤DÐ)<Ó$=×$EÑ$EÀcÓ$JÓKˆCØ"Ÿ™°#Ó5�3—8’8Ð;dˆDØŸ
™
 4Ö(�Ü×'Ò'¬¬[¸Ó->×-EÑ-EÈ#Ð-EÐ-NÓ(O×(WÑ(WÐX[Ó(\Ó]�Ø—?‘? cÕ)ðØ ŸX™X›Z˜Ù$ R×-Ñ-Ø#% =Ò0Ü ŸšÐ&`Öaò )ö ä�|Š|œC ›HÐ'7Ñ7Ó8×?Ñ?×AÑAÜ—~’~¤g§l¢l´3°s³8Ð>NÑ3NÓ&OÓPÐR[Ð[Ð[à3Øñ
ˆô �c—i˜R× Ñ ô —’˜SÓ!ˆAÜ˜q›6ˆC�‰LØŸ™ˆC�‰JØˆ~Ðøô)  ×/Ñ/ó Ûðús   Æ5J:ÇJ:Ê:KËKc                 óX  • [         R                  " 5       nU R                  R                  (       aW  [	        U R                  [
        5      (       d8  UR                  [        R                  " U R                  R                  SS95        U R                   Vs/ s H&  o3R                  (       a  M  U R                  U5      PM(     snUS'   U(       aJ  [        [        R                  " US    VVs/ s H  oDS    Vs/ s H
  oUS   S   PM     snPM     snn6 5      $ U$ s  snf s  snf s  snnf )z[
Implements algorithm described in `<https://w3c.github.io/csvw/csv2json/#standard-mode>`_
T)Úflatten_listr¥  r¼  rÍ  r   )r�   r�   rg  r¼  r<   r   Úupdater   Úto_jsonr¥  r0  Ú_table_to_jsonr}   r†  Úchain)r@   Úminimalrî   r©  rg  Úrs         r0   rá  ÚCSVW.to_json€  sí   € ô ×%Ò%Ó'ˆð �6‰6××¤z°$·&±&¼%×'@Ñ'@Ø�J‰J”v—~’~ d§f¡f×&9Ñ&9ÈÑMÔNà48·K²Kó]Ú4?¨5×G[ÕG[Ó&ˆD×Ñ Ö&±Kñ]ˆˆH‰æÜÜ—’ÐQTÐU]ÒQ^Ô!_ÒQ^ÈAÀºhÓ"Gºh¸ [¡>°!Ô#4¹hÔ"GÑQ^Ò!_Ð`óbð bð ˆ
ùò]ùò #HùÓ!_s$   ÂDÂ.DÃ-D&Ã9D!Ä
D&Ä!D&c                 óÌ  • [         R                  " 5       n[        UR                  R	                  UR
                  5      5      US'   SUR                  ;   a  UR                  S   US'   UR                  (       a#  [        R                  " UR                  5      US'   UR                  [        R                  " UR                  5      5        [         R                  " UR                  R                   Vs/ s H  o3R                  U4PM     sn5      nUR                  5        H/  nUR!                  S5      Ul        UR!                  S5      Ul        M1     ['        UR)                  SSS	9S
S9 VVVVs/ s H  u  nu  pgnU R+                  XX…U5      PM     snnnnnUR,                  (       a"  UR,                   V	s/ s H  o™S
   PM	     sn	US'   X‚S'   U$ s  snf s  snnnnf s  sn	f )Nr�  rÌ   ú@idrˆ  r  r  TF)r  rD  r   ©Ústartzrdfs:commentr¼  )r�   r�   r5   r�  rp   ro   rÏ   rˆ  r   rá  rà  r¼  r‹  re  r?  r›   r  r  r  rj  r  Ú_row_to_jsonrH  )
r@   r©  rî   ro  ÚcolsÚrownumrG   Úrowsourcenumr¼  rm  s
             r0   râ  ÚCSVW._table_to_json‘  sˆ  € Ü×%Ò%Ó'ˆä˜Ÿ™×*Ñ*¨5¯:©:Ó6Ó7ˆˆE‰
Ø�5—>‘>Ó!ØŸ™¨Ñ-ˆC�‰JØ�;�;Ü!Ÿ>š>¨%¯+©+Ó6ˆC�‰Lð 	�
‰
”6—>’> %×"4Ñ"4Ó5Ô6ä×&Ò&ÀU×EVÑEV×E^ÒE^Ó'_ÒE^¸c¯©°SÓ(9ÑE^Ñ'_Ó`ˆØ—;‘;–=ˆCØ!Ÿk™k¨-Ó8ˆCŒOØŸ;™; zÓ2ˆCŽLñ !ô 3<Ø—‘¨d¸5�ÐAÈò3Lö
ò3LÑ.�Ñ.˜¨#ð ×Ñ˜e¨3¸ÖEñ3Lô
ˆð
 �?�?Ø16·²Ó"A²¨A Q¤4±Ñ"AˆC�ÑØˆE‰
Øˆ
ùò (`ùõ

ùò #Bs   Ã4GÅ2#G
Æ:G!c                 óâ  • [         R                  " 5       nUR                  R                  UR                  5       SU 3US'   XFS'   UR
                  R                  (       an  UR
                  R                   Vs/ s H  osR                  U5      PM     sn Vs/ s H  oˆ(       d  M  UPM     snUS'   [        US   5      S:X  a  US   S   US'   U R                  XX45      US'   U$ s  snf s  snf )Nz#row=r�  rí  r…   r   r   rÍ  )
r�   r�   r�  rp   ro   r‹  rh  rŸ   rŒ   Ú
_describes)	r@   r©  rì  r¼  rí  rî  rî   rÄ   rg  s	            r0   rë  ÚCSVW._row_to_json¬  sß   € Ü×%Ò%Ó'ˆØŸ	™	×)Ñ)¨%¯*©*Ó5Ð6°e¸L¸>ÐJˆˆE‰
ØˆH‰Ø×Ñ×&×&à6;×6GÑ6G×6QÒ6QÓRÒ6Q¨dŸG™G DžMÑ6QÒRóYÚR�aÓVW—ÑRñYˆC�‰Mä�3�x‘=Ó! QÓ&Ø # H¡¨aÑ 0��H‘ð  Ÿ?™?¨5¸ÓDˆˆKÑØˆ
ùò SùòYs   Á:C'Â
C,Â'C,c                 ó  • / nUR                   R                  S5      nU(       a3  UR                  [        R                  " S SUR                  XcUS9S95        [        UR                  5       SS9 GH  u  nu  p‰UR                  U5      n
U
(       a$  U
R                  (       d  U
R                  (       a  ME  U
(       a  U
R                  5       OUR                  5       n[        U=(       a    X›;   U	S:H  U	S L U
=(       a    U
R                  =(       a    U	/ :H  /5      (       a  M±  UR                  [        R                  R                  UU
UUR                   R                  (       d  U R                   (       d  SU 3OUU	U5      5        GM     UR                   R                   HQ  n
U
R                  (       d  M  UR                  [        R                  R                  XX:R"                  S U5      5        MS     [        R$                  " U5      $ )	Nr  rè  )r¿  )Úaboutr  ru   r   ré  rü   r6  )r‹  r  rƒ   r   ÚTriplerÁ  rj  r�   rŸ   r0  r1  r+  r¾   r  Úfrom_colre  rº  r?  Úgroup_triples)r@   r©  rì  r¼  rí  Útriplesr  rn  r„   rQ   ro  r  s               r0   rñ  ÚCSVW._describes»  s�  € Øˆà×$Ñ$×,Ñ,¨ZÓ8ˆÞØ�N‰Nœ6Ÿ=š=Ø U°%·,±,¸xÐSY°,Ð2Zñ\ô ]ô # 3§9¡9£;°aÕ8‰IˆA‰v�Ø—(‘(˜1“+ˆCÞ˜×*×*¨c¯k¯kÙö *-�3×#Ñ#Ô%°%×2DÑ2DÓ2FˆDÜ�D×&˜Q™Y¨¨R©°°d°¸C×<]ÀCÇMÁM×<]ÐVWÐ[]ÑV]Ð^×_Ñ_Ùà�N‰Nœ6Ÿ=™=×1Ñ1ØØØØ$)×$5Ñ$5×$=×$=Àd×FV×FV�%˜�s‘Ð]^ØØó÷ ñ 9ð$ ×$Ñ$×,Ô,ˆCØ�{�{‰{Ø—‘œvŸ}™}×5Ñ5°eÀ#ÇzÁzÐSWÐY_Ó`Öañ -ô ×#Ò# GÓ,Ð,r/   )rµ  r¼  rº  rg  r¥  rM   )NFTrE   r„  )r*   r+   r,   r-   r4   r5   r   r  rZ   r»  r  rÅ  r   rÄ  r–  r~   r€   r¹  rá  râ  rë  rñ  r.   r)   r/   r0   r$   r$   å  s¹   † ñð %)Ø"Øñ"$àð"$ð ˜S‘Mð"$ð ð	"$ð
 õ"$òH7ð( ð'˜$ó 'ó ð'ð. ðK˜Jó Kó ðKð
 ñ> U¨4°¨:Ñ%6ô >ó ð>ô@ò"ò6õ-r/   r$   )Zr4   r  rÖ  rw  r|  rn  rÆ   rW   Útypingr   r   r   r   r   rû  rÈ   r  rM   rµ   r†  rD  r�   Úcollections.abcr   r	   r-  Úurllib.parser
   r   r   Úlanguage_tagsr   Úuritemplaterü   r   Ú	datatypesr   Údsvr   ÚBaseDialectr   r   Úfrictionlessr   r   Úmetadata_utilsr   r   r   r   r   Úobjectrù  Ú__all__r#   rÞ   rÇ   ÚDecimalÚdateÚ	timedeltar  r~   r5   r[  r�   rM  r%   r'   rO   Ú	dataclassr8   rR   r    r!   r"   r  r   rQ  r   rd  r†  rÊ  rÍ  rÙ  r   rO  r   r‘  r¡  r$   r)   r/   r0   Ú<module>r
     sc  ðñó 
Û Û 	Û Û Û Û ß 9Õ 9Û Û Û Û Û Û Û Û ß /Û ß 6Ñ 6å Û å Ý  ß SÑ SÝ %Ý ÷õ ñ ‹(€ò€ð
 
�‰€àØˆ�—‘ §¡°×0AÑ0AÀ8×CUÑCUÐUñW€à�3‰Z€
Ø
×
!Ñ
! # s (Ñ
+€ÙˆCƒL€÷	ñ 	ñ ‹)€ð ×Ñôˆkó ó ðô.
�+×)Ñ)ô 
ò÷)*ñ )*ôX7)�k×-Ñ-ô 7)ðt ×Ñôw,ˆó w,ó ðw,ðt ×ÑôE�/ó Eó ðEðP ×Ñôkˆ[ó kó ðkð\ ×Ñ÷:ð :ó ð:ð( ×Ñ÷ð ó ðð8 ×Ñô^ˆ[ó ^ó ð^ðB ×Ñô_�ó _ó ð_ðD ×Ò˜dÑ#÷ð ó $ðð ×Ñ÷
ð 
ó ð
ð ×Ñ÷ð ó ðð* ×Ñôm)ˆIó m)ó ðm)ð`	 ×Ò˜dÑ#÷<ð <ó $ð<ð2 ×Ñô[�ó [ó ð[ð| ×Ñ÷Cð Có ðCðL ×Ò˜dÑ#÷Að Aó $ðA÷s-ò s-r/   