
    #Zj                        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j'        ee f         e!e          f         fdZ(dee          de!e"         fdZ)dS )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|                                 }|r+|j        j        dk    r|                    d          d         }|r&|j        j        dk    rt          j	        dd|          }t          | t          j        t          j        f          rK|
                    d          \  }}}|r| d|                    d           n|                    d	d
          S |S t          | t          j                  r|j                            |           S t          | t                    r|j                            |           S t          | t                     r|                                 S t          | t$                    r|j                            |           S t          | t&          j                  rt+          |           S t          | t,          j                  rt1          |           } t          | t0                    r9t3          j        |           rdn"t3          j        |           r| dk     rdnd dn| 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         W/Users/jameslopez/projects/MentorCore/.venv/lib/python3.11/site-packages/csvw/jsonld.pyr   r      s;    %(-):HMJKK 
oo 	%3<$..))C..$C 	/3<$..&b#..Ceh/?@@ 	2%(]]3%7%7"E1l<H 2e88l11#66888]]8S112
%+,, -|%%e,,,%"" -|%%e,,,%&& }}% -|%%e,,,%&& 5zz%)) e% N
5)) Nuu04
50A0ALeaiissR,,,,u	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dS )r   z,
    A table cell's data as RDF triple.
    aboutpropertyr   r   c                     t          | j                  t          | j                  t          | j                  rt          | j                  n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   sU     4:4=!!"("4"4MF4:'$*:M:MO 	Or@   tabler   r   r   rowpropvalrownumc                    |r|j         nd}|r|j        n|                    d          }|r|                    ||||d          }|dk    }	|r|j        n|                    d          }
|
r|                    |
||||	          }t          ||          }d}|r|j        nd}|r|                    ||||          p|} | |||          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}-- 	 	X<<SvURV<WWD*$#&E3<<EMM*,E,E 	W,,x6g,VVC3$$#&03<<D 	KXsuEEJAsT5555r@   N)__name__
__module____qualname____doc__r4   __annotations__tupler   r   r	   rF   classmethodcollectionsOrderedDictr   intr[    r@   r?   r   r   <   s           JJJMMMJJJO%fgo8N(N"O O O O O 66 6 (c2	6
 6 6 6 
6 6 6 [6 6 6r@   r   datac                    t          j                    i }}| D ]}|                    d          }|r|||<   |                                D ]|}t	          |t
                    s|gn|D ]_}t	          |t                    rH|                    d          }|r1|                    ||g f          d                             |           `}|                                D ]P\  }}	t          |	          dk    r8|d         |v r.|
                    |                    |d                              Qt          |                                          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 	H 	H% 	! E&M++-- 	H 	HB!+B!5!5=bTT2 H Ha&& HEE%LLE H2w77:AA$GGG	H	H  . .Xx==A#e*"5"5JJuyyU,,---r@   Fc                    t          | t                    r+d| v r| d         } t          |           dk    rd| v r| d         } t          | t                    r fd|                                 D             S t          | t                    r:t          |           dk    rrt          | d                   S fd| D             S | S )z?
    Simplify JSON-LD data by refactoring trivial objects.
    z@valuer   ri   c                 J    i | ]\  }}|d k    rdn|t          |           S )rQ   z@typeflatten_listr   ).0krx   r   s      r?   
<dictcomp>zto_json.<locals>.<dictcomp>   sH     % % %1 JGGAwq|/T/T/T% % %r@   r   r   c                 2    g | ]}t          |           S )r   r   )r   rx   r   s     r?   
<listcomp>zto_json.<locals>.<listcomp>   s&    CCC!555CCCr@   )r#   rm   rp   rs   rl   r   )objr   s    `r?   r   r      s     #t s??h-Cs88q==Uc\\e*C#t %% % % %		% % % 	% #t Ds88q==\=3q6====CCCCsCCCCJr@   triplesc                 >   g }| D ]}t          |j        t                    rf|D ]M}|j        |j        k    r;t          |j        t                    r!|j                            |j                    nN|                    |           |                    |           |S )N)r#   r   rl   rC   extendro   )r   mergedtriplets       r?   _merged_triplesr      s    F 
" 
"flD)) 		" & &:00Z5N5N0GNN6<000Ef%%%MM&!!!!Mr@   c                    t          j                    g }}| D ]}|j        |j        dk    r|j        ||j        <   $|j        su|j        |v r\t          ||j                 t                    s||j                 g||j        <   ||j                                     |j                   n|j        ||j        <   |                    |           ||fS )zBReturn triples grouped by property and purge these from `triples`.Nri   )rc   rd   rB   rC   r   r#   rl   ro   )r   groupedremr   s       r?   _extract_grouped_triplesr      s    *,,bSG  <FOu$<$<'-|GFO$| 	'))!'&/":DAA J070H/IGFO,(//====+1<(

6C<r@   c                    t          t          |                     \  } | sgS t                      }| D ])}|                    |                                           *dv r]                                D ]H\  }}|dk    r=|                    t          d         ||                                                     I|                    d          }d t          t          t          j        |                              D             }d t          |fd          D             }r5dvr1t          |          d	k    r                    |d
                    gS |S )z@
    Group and frame triples into a `list` of JSON objects.
    ri   rS   zjson-ld)formatc                 :    g | ]\  }}|t          |d           fS )Tr   r   )r   irx   s      r?   r   z!group_triples.<locals>.<listcomp>   s.    
\
\
\$!QAwqt,,,-
\
\
\r@   c                     g | ]
}|d          S )r   rf   )r   r   s     r?   r   z!group_triples.<locals>.<listcomp>   s.     S S SA1Q4 S S Sr@   c                 |    | d                              d                               d          k    rdn| d         S )Nr   ri   r   r   )rj   )or   s    r?   <lambda>zgroup_triples.<locals>.<lambda>   s3    1%GKK4F4F!F!F22AaD r@   )keyr   r   )r   r   r   addrF   rs   r   	serialize	enumerater|   jsonloadssortedrp   rq   )r   gr   rI   rJ   r;   r   s         @r?   r   r      s    00H0HIIGW yA ) )	f%%''((((  	a 	aID#u}}f75>DLLL]]__```
++Y+
'
'C
\
\)E$*UX//DZDZ:[:[
\
\
\CS SPPPPR R R S S SC  E((c#hh!mms1vyJr@   )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      sC    
			   , , , , , , , , , ,        $ $ $ $ $ $     ) ) ) ) ) ) ) ) ) )             % % % % % %       (''''''''
@
@
@ ( s    B ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6^ T
  t        .   (Xf- $v,     {/FsF{/SUYZ`Ua/a)b    (8F+ T
      r@   