
    $HJj                        d Z ddlZddlZddlZddlmZmZmZ ddlZddl	Z	ddl
Z
ddlZddlmZ ddlZddlmZmZmZ ddlmZ ddlmZ dd	lmZ erdd
lmZmZ g dZdedddefdZej>                   G d d             Z de!e"   de!fdZ#ddZ$dee    de!e    fdZ%de&ejN                  ee f   e!e    f   fdZ(dee    de!e"   fdZ)y)z4
Functionality to transform CSVW row values to RDF.
    N)TYPE_CHECKINGAnyUnion)Iterable)GraphURIRefLiteral)URIReference)Duration   )is_url)TableColumn)group_triplesto_jsonTripleformat_valuevaluecolr   returnc                    t        | t        j                  t        j                  t        j                  f      r| j	                         }|r-|j
                  j                  dk(  r|j                  d      d   }|r0|j
                  j                  dk(  rt        j                  dd|      }t        | t        j                  t        j                  f      r?|j                  d      \  }}}|r| d|j                  d       S |j                  d	d
      S |S t        | t        j                        r|j
                  j                  |       S t        | t              r|j
                  j                  |       S t        | t               r| j#                         S t        | t$              r|j
                  j                  |       S t        | t&        j(                        rt+        |       S t        | t,        j.                        rt1        |       } t        | t0              r=t3        j4                  |       rdS t3        j6                  |       r| dk  rd dS d dS | S | S )z,
    Format values as JSON-LD literals.
    timeTdatez	T[0-9.:]+ .0z+00:00ZNaNr   -INF)
isinstancedatetimer   r   	isoformatdatatypebasesplitresub	partitionrstripreplace	timedelta	formattedr   r
   unsplitbytespathlibPathstrdecimalDecimalfloatmathisnanisinf)r   r   resstamp_millisecondss         U/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/csvw/jsonld.pyr   r      s    %(--):):HMMJKoo3<<$$.))C.$C3<<$$.&&b#.Ceh//?@%(]]3%7"E1l<HeWAl11#678 2]]8S12
%++,||%%e,,%"||%%e,,%&}}%||%%e,,%&5z%)e%

5)u 	N04

50Aeais(,	N%'(,	NGL	NL    c                       e Zd ZU dZeed<   eed<   eed<   deeeeee	f   f   fdZ
eddd	d
dej                  eef   dedededd fd       Zy)r   z,
    A table cell's data as RDF triple.
    aboutpropertyr   r   c                     t        | j                        t        | j                        t        | j                        rt        | j                        fS t        | j                        fS )z5The triple suitable for inclusion in an rdflib.Graph.)r   rB   rC   r   r   r	   )selfs    r?   as_rdflib_triplezTriple.as_rdflib_tripleE   sZ     4::4==!"("4F4::O 	O ;B$**:MO 	Or@   tabler   r   r   rowpropvalrownumc                    |r|j                   nd}|r|j                  n|j                  d      }|r|j                  ||||d      }|dk(  }	|r|j                  n|j                  d      }
|
r|j                  |
||||	      }t        ||      }d}|r|j                  nd}|r|j                  ||||      xs |} | |||      S )	zV
        Instantiate a triple from the data (and metadata) of a column value.
        NpropertyUrlT)_row_nameqnamerdf:typevalueUrl)rN   rO   rB   rC   r   )headerrM   inheritexpandrR   r   aboutUrl)clsrG   r   rH   rI   rJ   rK   rO   rM   is_typerR   srW   s                r?   from_colzTriple.from_colL   s     "

t),coo}- 	<<SvURV<WD*$#&3<<EMM*,E,,x6g,VC3$#&3<<DXsuEJAT55r@   N)__name__
__module____qualname____doc__r4   __annotations__tupler   r   r	   rF   classmethodcollectionsOrderedDictr   intr[    r@   r?   r   r   <   s     JMJO%fgo8N(N"O O 66 6 ((c2	6
 6 6 6 
6 6r@   r   datac                 6   t        j                         i }}| D ]  }|j                  d      }|r|||<   |j                         D ]g  }t	        |t
              s|gn|D ]M  }t	        |t              s|j                  d      }|s(|j                  ||g f      d   j                  |       O i  |j                         D ]?  \  }}	t        |	      dk(  s|d   |v s|j                  |j                  |d                A t        |j                               S )z
    Inline referenced items to force a deterministic graph layout.

    .. see:: https://w3c.github.io/json-ld-framing/#introduction
    @idr   )rc   rd   getvaluesr#   listdict
setdefaultappendlenupdatepop)
rg   itemsrefsitemitemidvsvrefidrefsubjectss
             r?   framer|   l   s     ))+R4E% E&M++-B!+B!5bT2=a&EE%LE2w7:AA$G	 >  	  Xx=A#e*"5JJuyyU,- ' r@   c           	         t        | t              r d| v r| d   } t        |       dk(  r	d| v r| d   } t        | t              r6| j                         D ci c]  \  }}|dk(  rdn|t	        ||       c}}S t        | t
              r;t        |       dk(  r|rt	        | d   |      S | D cg c]  }t	        ||       c}S | S c c}}w c c}w )z?
    Simplify JSON-LD data by refactoring trivial objects.
    z@valuer   ri   rQ   z@typeflatten_listr   )r#   rm   rp   rs   r   rl   )objr   krx   s       r?   r   r      s     #ts?h-Cs8q=Uc\e*C#t 		%#1 JGAwq|/TT#% 	% #ts8q=\3q6==?BCs!5sCCJ% Ds   C+C
triplesc                 V   g }| D ]  }t        |j                  t              rt|D ]]  }|j                  |j                  k(  st        |j                  t              s8|j                  j	                  |j                          ~ |j                  |       |j                  |        |S )N)r#   r   rl   rC   extendro   )r   mergedtriplets       r?   _merged_triplesr      s~    FfllD)::0Z5NGGNN6<<0 
 f%MM&!  Mr@   c                    t        j                         g }}| D ]  }|j                  )|j                  dk(  r|j                  ||j                  <   8|j                  s|j                  |v rct        ||j                     t              s||j                     g||j                  <   ||j                     j                  |j                         n|j                  ||j                  <   |j                  |        ||fS )zBReturn triples grouped by property and purge these from `triples`.ri   )rc   rd   rB   rC   r   r#   rl   ro   )r   groupedremr   s       r?   _extract_grouped_triplesr      s    **,bSG<<FOOu$<'-||GFOO$||')!'&//":DA070H/IGFOO,(//=+1<<(

6  C<r@   c           	        	 t        t        |             \  	} | s	gS t               }| D ]!  }|j                  |j	                                # d	v rL	j                         D ]9  \  }}|dk7  s|j                  t        	d   ||      j	                                ; |j                  d      }t        t        t        j                  |                  D cg c]  \  }}|t        |d      f }}}t        |	fd      D cg c]  }|d	   	 }}	r)d	vr%t        |      d	k(  r	j                  |d
          	gS |S c c}}w c c}w )z@
    Group and frame triples into a `list` of JSON objects.
    ri   rS   zjson-ld)formatTr~   c                 ^    | d   j                  d      j                  d      k(  rdS | d   S )Nr   ri   r   r   )rj   )or   s    r?   <lambda>zgroup_triples.<locals>.<lambda>   s-    1%GKK4F!F2PAaDPr@   )keyr   r   )r   r   r   addrF   rs   r   	serialize	enumerater|   jsonloadsr   sortedrp   rq   )
r   gr   rI   rJ   r;   irx   r   r   s
            @r?   r   r      sK    00HIGWyA	f%%'(  ID#u}f75>DL]]_` ) ++Y+
'C:CE$**UX/DZ:[
\:[$!QAwqt,-:[C
\PR S RA1Q4 RC S E(c#h!ms1vyJ ]Ss   EE	)F)*r_   r)   r   r8   typingr   r   r   r5   r2   r$   rc   collections.abcr   dataclassesrdflibr   r   r	   rfc3986r
   isodate.durationr   utilsr   metadatar   r   __all__r4   r   	dataclassr   rl   rm   r|   r   r   ra   rd   r   r   rf   r@   r?   <module>r      s   
   , ,     $  ) )   % '
@ ( s B ,6 ,6 ,6^ T
  t  .(Xf- $v,  {/F/FsF{/SUYZ`Ua/a)b (8F+ T
 r@   