
    11i9                         S r SSKrSSKrSSKrSSKJr  S/rSS0rS r\R                  R                  \5      \/rS	 r\R                   " S
 S\5      5       rg)a  
DSV data can be surprisingly diverse. While Python's `csv` module offers out-of-the-box support
for the basic formatting parameters, CSVW recognizes a couple more, like `skipColumns` or
`skipRows`.

.. seealso::

    - `<https://www.w3.org/TR/2015/REC-tabular-metadata-20151217/#dialect-descriptions>`_
    - `<https://docs.python.org/3/library/csv.html#dialects-and-formatting-parameters>`_
    - `<https://specs.frictionlessdata.io/csv-dialect/>`_
    N   )utilsDialectz	UTF-8-BOMz	utf-8-sigc                 X    US:  a$  [        SR                  X!R                  5      5      eg )Nr   z{0} is not a valid {1})
ValueErrorformatname)instance	attributevalues      K/home/james-whalen/.local/lib/python3.13/site-packages/csvw/dsv_dialects.py_non_negativer      s)    qy188OPP     c                     [         R                  " [        SU 5      n  SR                  [        R                  X 5      5      nU $ ! [         a(    [        R                  " SR                  U 5      5         gf = f)Nutf-8xzInvalid value for property: {})
r   	converterstrencodeENCODING_MAPgetLookupErrorwarningswarnr   )s_s     r   convert_encodingr   "   sa    Wa(AJJ|''-. 6==a@As   %A /A65A6c            
          \ rS rSrSr\R                  " S\\R                  R                  \
5      S9r\R                  " \R                  " \R                  \SS/5      \R"                  " S 5      S9r\R                  " \R                  " \R                  \
S	S
S9S	S9r\R                  " S
\R                  " \R                  \S
5      \R                  R                  \5      S9r\R                  " S\R                  " \R                  \SS S9\S9r\R                  " S\R                  " \R                  \
SS
S9\R                  R3                  \R                  R                  \
5      5      S9r\R                  " S
\R                  " \R                  \S
5      \R                  R                  \5      S9r\R                  " S\R                  " \R                  \SS S9\S9r\R                  " S\R                  " \R                  \
S5      \R                  R                  \
5      S9r\R                  " S\R                  " \R                  \SS S9\S9r\R                  " S\R                  " \R                  \S5      \R                  R                  \5      S9r\R                  " S\R                  " \R                  \S5      \R                  R                  \5      S9r \R                  " S\R                  RC                  / SQ5      S S9r"S r#\RH                  S 5       r%\RH                  S 5       r&\RH                  S 5       r'S"S jr(\)S 5       r*S r+S r,g!)#r   ,   z
A CSV dialect specification.

.. seealso:: `<https://www.w3.org/TR/2015/REC-tabular-metadata-20151217/#dialect-descriptions>`_
r   )defaultr   	validator

c                  
    SS/$ )Nr"   r#    r%   r   r   <lambda>Dialect.<lambda>;   s    fd^r   )r   r    "T)
allow_noner   c                     U S:  $ Nr   r%   r   s    r   r&   r'   I   	    AQRFr   )cond#r   c                     U S:  $ r+   r%   r,   s    r   r&   r'   X   r-   r   ,c                     U S:  $ r+   r%   r,   s    r   r&   r'   b   r-   r   Ffalsetruer3   startendc                     [         R                  " [        R                  [        [
        4S5      " [        U [
        5      (       a#  SR                  U 5      R                  5       5      $ U 5      $ )Nr3   z{0})		functoolspartialr   r   r   bool
isinstancer   lower)vs    r   r&   r'   r   sN    I--OO$K"=G4=P=P%,,q/"7"7"9YVWYr   )r    r!   r   c                     U R                   " S0 [        R                  " U 5      D6nUR                  5        H  u  p4[	        X#U5        M     U$ )Nr%   )	__class__attrasdictitemssetattr)selfkwreskr>   s        r   updatedDialect.updatedv   s=    nn1t{{401HHJDACA 
r   c                 J    U R                   c  S $ U R                  (       a  S$ S$ )Nr(   \)	quoteChardoubleQuoterE   s    r   escape_characterDialect.escape_character|   s$    ~~-tV4;K;KCVQUVr   c                 r    [        U R                  [        5      (       a  U R                  /$ U R                  $ N)r<   lineTerminatorsr   rO   s    r   line_terminatorsDialect.line_terminators   s:     $..44 $$% 	O:>:N:N	Or   c                 2    S S S S S.U R                      $ )Nc                 "    U R                  5       $ rS   )stripr,   s    r   r&   !Dialect.trimmer.<locals>.<lambda>   s
    aggir   c                     U $ rS   r%   r,   s    r   r&   rZ      s    qr   c                 "    U R                  5       $ rS   )lstripr,   s    r   r&   rZ      s
    qxxzr   c                 "    U R                  5       $ rS   )rstripr,   s    r   r&   rZ      s
    QXXZr   r4   )trimrO   s    r   trimmerDialect.trimmer   s(     ( )'	

 )) 	r   c                 *    [         R                  " XS9$ )N)omit_defaults)r   attr_asdict)rE   rd   s     r   rB   Dialect.asdict   s      CCr   c                 V    [         R                  U R                  U R                  5      $ rS   )r   r   encodingrO   s    r   python_encodingDialect.python_encoding   s    t}}==r   c                     U R                   U R                  U R                  (       d  U R                  OS U R                  S   U R                  U R
                  SS.$ )Nr   T)	delimiterdoublequote
escapecharlineterminator	quotecharskipinitialspacestrict)rl   rN   rP   rU   rM   skipInitialSpacerO   s    r   as_python_formatting_parameters'Dialect.as_python_formatting_parameters   sR    ++ 8<7G7G$//T"33A6 $ 5 5

 
	
r   r%   N)T)-__name__
__module____qualname____firstlineno____doc__rA   ibr   
validatorsinstance_ofr   rh   r9   r:   r   r   listFactoryrT   rM   r;   rN   intnon_negative_intskipRowsoptionalcommentPrefixheaderheaderRowCountrl   skipColumnsskipBlankRowsrs   in_r`   rI   cached_propertyrP   rU   ra   rB   propertyri   rt   __static_attributes__r%   r   r   r   r   ,   s6    ww"//--c24H
 gg##EOOTFD>J346O ##EOOS#$OI
 ''##EOOT4@//--d35K
 ww##EOOS!BRS"$H
 GG##EOOS#$O//**4??+F+Fs+KLNM
 WW##EOOT4@//--d35F
 WW##EOOS!BRS"$N
 ##EOOS#>//--c24I
 ''##EOOS!BRS"$K
 GG##EOOT5A//--d35M
 ww##EOOT5A//--d35
 77//%%&GHYZD W W O O  D > >
r   )rz   rA   r   r9    r   __all__r   r   r|   r}   r   r   r   r   objectr   r%   r   r   <module>r      sv   
    + Q
 OO//4mD  s
f s
 s
r   