o
    miHZ                     @  s  d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZmZ ddlmZ ddlmZmZmZ dd	lmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ dd
l0m1Z1m2Z2m3Z3 eee e"e$e%e&e*e+e,e-e#hZ4G dd de5Z6e6dZ7dZ8eeee	e9ef e9df  e	e9ef e9df Z:G dd dZ;eddZ<e7e7e7e7de7ddfe<j=_>dS )zK
Implementation of the JSON-LD Context structure. See: http://json-ld.org/
    )annotations)
namedtuple)
TYPE_CHECKINGAny
CollectionDict	GeneratorListOptionalSetTupleUnion)urljoinurlsplit)RDF   )INVALID_CONTEXT_ENTRYINVALID_REMOTE_CONTEXTRECURSIVE_CONTEXT_INCLUSION)BASE	CONTAINERCONTEXTGRAPHIDIMPORTINCLUDEDINDEXJSONLANGLISTNESTNONEPREFIX	PROPAGATE	PROTECTEDREVSETTYPEVALUEVERSIONVOCAB)norm_urlsource_to_json	split_iric                   @  s   e Zd ZdS )DefinedN)__name__
__module____qualname__ r2   r2   ^/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/shared/jsonld/context.pyr.   ;   s    r.   ):/?#[]@Nc                   @  s&  e Zd Z			ddd	d
ZedddZejdddZddddZdddZdddZ	dddZ
dd d!Zdd$d%Zdd&d'Zdd(d)Zdd*d+Zdd,d-Zdd.d/Zdd0d1Zdd2d3Zdd6d7Zdd8d9Zdd;d<Zed=d> Zed?d> Zed@d> ZedAd> ZedBd> ZedCd> ZedDd> ZeededEeddEfddTdUZdeddEfddVdWZ ddYdZZ!dd\d]Z"dd_d`Z#dddcddZ$ddedfZ%ddgdhZ&		dddkdlZ'ddmdnZ(	dddudvZ)ddwdxZ*		ddd{d|Z+	EddddZ,	ddddZ-dddZ.dddZ/dddZ0dddZ1dS )ContextN皙?source_ContextSourceTypebaseOptional[str]versionOptional[float]c                 C  sl   |pd| _ d | _d | _|  || _|| _i | _i | _i | _i | _d| _	d | _
d| _i | _|r4| | d S d S )Nr<   FT)rA   languagevocabr?   doc_baseterms_alias_lookup	_prefixesactiveparent	propagate_context_cacheload)selfr=   r?   rA   r2   r2   r3   __init__J   s"   
zContext.__init__returnc                 C  s   | j S N)_baserO   r2   r2   r3   r?   b   s   zContext.basec                 C  sl   |r| d}|dkr|d| }t| dr|d ur| |n|| _|r1dt|dd  | _d S d | _d S )Nr7   r   rS   z%s://%s   )findhasattrresolve_irirS   r   _basedomain)rO   r?   Z
hash_indexr2   r2   r3   r?   f   s   

(Tr   rL   boolc                 C  s    | j du r| jn| }|||S NF)rL   rK   _subcontext)rO   r=   rL   rK   r2   r2   r3   
subcontexts   s   zContext.subcontextc                 C  s   t | jd}||_| |_| j|_| j|_| j|_| j|_dd | j	 D |_| j
 |_
| j |_| j |_| j|_|| |S )N)rA   c                 S  s   i | ]\}}||d d  qS rR   r2   ).0klr2   r2   r3   
<dictcomp>   s    z'Context._subcontext.<locals>.<dictcomp>)r;   rA   rL   rK   rC   rD   r?   rE   rG   itemsrF   copyrH   rI   rM   rN   )rO   r=   rL   ctxr2   r2   r3   r]   y   s   
zContext._subcontextNonec                 C  s4   d | _ d | _i | _i | _i | _i | _d| _d| _d S )NFT)rC   rD   rF   rG   rH   rI   rJ   rL   rT   r2   r2   r3   _clear   s   
zContext._cleartermOptional[Term]c                 C  s"   |r|j tur| j|j ddS | S )NTrL   )contextUNDEFr]   )rO   rh   r2   r2   r3   get_context_for_term   s   zContext.get_context_for_termnodeOptional[Context]c              	   C  s   | j dkrMt|tr| |nd }t|ts|r|gng }d }|D ]}z| j|}W n	 ty4   Y nw |d ur; nq!|rM|jrM| j	|jdd}|rM|S | j
du rU| jS | S )Nr<   Frj   )rA   
isinstancedictget_typelistrF   get	TypeErrorrk   r^   rL   rK   )rO   rn   ZrtypeZtypetermrtr^   r2   r2   r3   get_context_for_type   s&   


zContext.get_context_for_typeobjDict[str, Any]c                 C     |  |tS rR   )_getr   rO   rx   r2   r2   r3   get_id      zContext.get_idc                 C  rz   rR   )r{   r'   r|   r2   r2   r3   rr      r~   zContext.get_typec                 C  rz   rR   )r{   r   r|   r2   r2   r3   get_language   r~   zContext.get_languagec                 C  rz   rR   )r{   r(   r|   r2   r2   r3   	get_value   r~   zContext.get_valuec                 C  rz   rR   )r{   r   r|   r2   r2   r3   	get_graph   r~   zContext.get_graphc                 C  rz   rR   )r{   r   r|   r2   r2   r3   get_list   r~   zContext.get_listc                 C  rz   rR   )r{   r&   r|   r2   r2   r3   get_set   r~   zContext.get_setc                 C  rz   rR   )r{   r%   r|   r2   r2   r3   get_rev   r~   zContext.get_revkeystrc                 C  s4   | j |g D ]}||v r||  S q||S rR   )rG   rt   )rO   rx   r   aliasr2   r2   r3   r{      s
   
zContext._getc                 C  s   |  |D ]}|  S d S rR   )get_keysrO   r   r   r2   r2   r3   get_key   s   zContext.get_keyGenerator[str, None, None]c                 c  s,    || j v r| j | D ]}|V  q|V  d S rR   )rG   r   r2   r2   r3   r      s
   

zContext.get_keysc                 C  
   |  tS rR   )r   r   rT   r2   r2   r3   <lambda>      
 zContext.<lambda>c                 C  r   rR   )r   r   rT   r2   r2   r3   r      r   c                 C  r   rR   )r   r'   rT   r2   r2   r3   r      r   c                 C  r   rR   )r   r(   rT   r2   r2   r3   r      r   c                 C  r   rR   )r   r   rT   r2   r2   r3   r      r   c                 C  r   rR   )r   r%   rT   r2   r2   r3   r      r   c                 C  r   rR   )r   r   rT   r2   r2   r3   r      r   FnameidrefcoercionUnion[Defined, str]	container$Union[Collection[Any], str, Defined]indexOptional[Union[str, Defined]]rC   reverserk   prefixOptional[bool]	protectedc                 C  s  | j dk s	|	d u rt|to|t}	| |sd S | j dkr,| j|}|r,|jr,d S t|t	t
tfr9t
|}n|turCt
|g}nt
 }t|||||||||	|

}|| j|< tttfD ]}||v re nq]t}|| j||po|||f< |jdu r|| j|< d S d S )Nr<   T)rA   rp   r   endswithURI_GEN_DELIMS_accept_termrF   rt   r   rs   settuplerl   Termr   r   r&   rH   r   rI   )rO   r   r   r   r   r   rC   r   rk   r   r   existingrh   Zcontainer_keyr2   r2   r3   add_term   sF   





zContext.add_termc                 C  s   | j }|d u r	|}|tur|r|||||f}|r|S |tur-|||t|f}|r-|S |r=|||||f}|r<|S n|rM||tt|f}|rL|S n|||pStt|f}|r\|S ||tt|fS rR   )rH   rl   rt   r   r&   )rO   r   r   r   rC   r   Zlufoundr2   r2   r3   	find_term  s2   zContext.find_termcurie_or_iric                 C  s0   |  |d}| |r|S d|v rdS | |S )NF  )expandisblankrY   )rO   r   irir2   r2   r3   resolve@  s   

zContext.resolver   c                 C  s   t | j|S rR   )r+   rS   )rO   r   r2   r2   r3   rY   L  s   zContext.resolve_irirefc                 C  s
   | dS )Nz_:)
startswith)rO   r   r2   r2   r3   r   P  s   
zContext.isblankterm_curie_or_iri	use_vocabc                 C  s   t |ts|S | |sdS |r| j|}|r|jS | |\}}}|dkr)|S |d urA| j|}|r@|jr@|jr@|j| S n|rO|rO| jrM| j| S d S | 	|S )Nr   _)
rp   r   r   rF   rt   id_prep_expandr   rD   rY   )rO   r   r   rh   is_termpfxlocalnsr2   r2   r3   r   S  s*   




zContext.expandc                 C  sh   t t|\}}| j|}|rd||fS | jr2t|| jkr#dS || jr2|t| jd  S |S )Nr4   r   )	r-   r   rI   rt   joinrS   r   rZ   len)rO   r   r   r   r   r2   r2   r3   
shrink_irin  s   zContext.shrink_iric                 C  sX   t |}| |}|r|jS t|\}}|| jkr|S | j|}|r*d||fS |S Nr4   )r   r   r   r-   rD   rI   rt   r   )rO   r   rh   r   r   r   r2   r2   r3   	to_symbol}  s   

zContext.to_symbolreferenced_contextsSet[Any]c                 C  sj   d| _ g }t|tr|n|g}|pt }| |||| |D ]\}}|d u r+|   q| ||| qd S )NT)rJ   rp   rs   r   _prep_sourcesrg   _read_source)rO   r=   r?   r   sources
source_urlr2   r2   r3   rN     s   

zContext.loadc                 C  sB   | j dk rdS |rt|dkr|d dkr|d  r|tv S dS )Nr<   Tr   r   r:   )rA   r   isalnum	NODE_KEYS)rO   r   r2   r2   r3   r     s
   
(zContext._accept_terminputs8Union[List[Union[Dict[str, Any], str, None]], List[str]]r   <List[Tuple[Optional[str], Union[Dict[str, Any], str, None]]]Set[str]in_source_urlc                 C  s   |D ]\}|}|}t |tr1|}|p| j}	| ||	|}
|
d u r q|r/tr*|	d us*J t|	|}|
}t |trHt|v rH|t }t |trE|n|g}t |trW| 	||||| q|
||f qd S rR   )rp   r   rE   _fetch_contextr   r   rq   r   rs   r   append)rO   r?   r   r   r   r   r=   r   new_baseZsource_doc_baseZnew_ctxr2   r2   r3   r     s4   





zContext._prep_sourcesc                 C  s^   t ||}||v rt|| || jv r| j| S t|\}}|r(t|vr(t|| j|< |S rR   )r   r   addrM   r,   r   r   )rO   r=   r?   r   r   Zsource_jsonr   r2   r2   r3   r     s   




zContext._fetch_contextr   Optional[Set[str]]c           	      C  s   | t}|r+t|tst| || j|pt }t|ts t|t	 }|
| |}| t| j| _| t| j| _| td}| D ]6\}}|tttthv rRqE|tkr_t|tr_|| _qE|tkrg|| _qE|tkrs|sr|sr|| _qE| |||| qEd S r\   )rt   r   rp   r   r   r   r?   r   rq   r   updater*   rD   r)   rA   r$   rc   r#   r[   rL   r   rC   r   
_read_term)	rO   r=   r   r   ZimportsZimportedr   r   valuer2   r2   r3   r     s8   



zContext._read_sourcedfnUnion[Dict[str, Any], str]c           
      C  sz  d }t |tr|t}|t|}|tt}|r'|tttfvr'| 	||}|p.|tt}|tkr;t
tj}t}n|turF| 	||}nd|v rQ| 	||}n| jrY| j| }|tt}| j||||tt|tt|ttt|||t|d
 nt |t
r| |sd S | 	||}| j|||d |tv r| j|g | d S | j D ]}	||	v r|	| qd S )Nr4   )r   )rp   rq   rt   r%   r$   r'   rl   r   r*   _rec_expandr   r   typerD   r   r   r   r   r   r[   r"   r   r   rG   
setdefaultr   valuesremove)
rO   r=   r   r   r   r   revr   rk   vr2   r2   r3   r     sT   









zContext._read_termexprprevc           	      C  s   ||ks|t v r
|S | |\}}}|r>| ||}|d u r2|d | jkr'|S | j|}|r2|j}|d u r9|}n|| }n| ||pE|}d|vrR| jrR| j| S | |||S r   )r   r   _get_source_idrD   rF   rt   r   r   )	rO   r=   r   r   r   r   Znxtr   rh   r2   r2   r3   r   J  s$   

zContext._rec_expandTuple[bool, Optional[str], str]c                 C  s@   d|vr	dd |fS | dd\}}|dsd||fS dd |fS )Nr4   Tr   z//F)splitr   )rO   r   r   r   r2   r2   r3   r   h  s   



zContext._prep_expandc                 C  sD   | |}|d u r| j |}|r|j}|S t|tr | t}|S rR   )rt   rF   r   rp   rq   r   )rO   r=   r   rh   r   r2   r2   r3   r   q  s   


zContext._get_source_idr   c                 C  s|   i }|j tkr| |j |t< |jrt|j|t< |jtkr#|j|t< |j	r,|j
|t< n|j
|t< | thkr<|t S |S rR   )r   rl   r   r'   r   rs   r   rC   r   r   r   r%   r   keys)rO   rh   Ztdictr2   r2   r3   
_term_dict|  s   



zContext._term_dictc                   sV   dd  j  D }| fdd j D   jr! j|t<  jr) j|t< |S )z
        Returns a dictionary representation of the context that can be
        serialized to JSON.

        Returns:
            a dictionary representation of the context.
        c                 S  s   i | ]\}}||qS r2   r2   )r_   r`   r   r2   r2   r3   rb     s    z#Context.to_dict.<locals>.<dictcomp>c                   s   i | ]	}|j  |qS r2   )r   r   )r_   rh   rT   r2   r3   rb     s    )	rI   rc   r   rH   r   r?   r   rC   r   )rO   rr2   rT   r3   to_dict  s   

zContext.to_dict)NNr<   )r=   r>   r?   r@   rA   rB   )rQ   r@   )r?   r@   )T)r=   r   rL   r[   rQ   r;   )rQ   rf   )rh   ri   rQ   r;   )rn   r   rQ   ro   )rx   ry   rQ   r   )rx   ry   r   r   rQ   r   )r   r   rQ   r   )r   r   rQ   r   )r   r   r   r   r   r   r   r   r   r   rC   r   r   r[   rk   r   r   r   r   r[   )
r   r   r   r   r   r   rC   r@   r   r[   )r   r   rQ   r   )r   r   rQ   r   )r   r   rQ   r[   )r   r   r   r[   rQ   r@   )r   r   rQ   r@   )NN)r=   r>   r?   r@   r   r   )r   r   rQ   r[   rR   )
r?   r@   r   r   r   r   r   r   r   r@   )r=   r   r?   r@   r   r   )r=   ry   r   r@   r   r   )F)
r=   ry   r   r   r   r   r   r[   rQ   rf   )r=   ry   r   r@   r   r@   rQ   r@   )r   r   rQ   r   )r=   ry   r   r   rQ   r@   )rh   r   rQ   r   )rQ   ry   )2r/   r0   r1   rP   propertyr?   setterr^   r]   rg   rm   rw   r}   rr   r   r   r   r   r   r   r{   r   r   Zlang_keyZid_keyZtype_keyZ	value_keyZlist_keyZrev_keyZ	graph_keyrl   r   r   r   rY   r   r   r   r   rN   r   r   r   r   r   r   r   r   r   r   r2   r2   r2   r3   r;   I   s    















=
&





*+;

	
r;   r   zNid, name, type, container, index, language, reverse, context,prefix, protectedF)?__doc__
__future__r   collectionsr   typingr   r   r   r   r   r	   r
   r   r   r   urllib.parser   r   Zrdflib.namespacer   errorsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   utilr+   r,   r-   r   intr.   rl   r   r   r>   r;   r   __new____defaults__r2   r2   r2   r3   <module>   s4    0`(    X