
    #HJjF                    (   d Z ddlmZ ddlZddl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mZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZm Z m!Z!  ede"      Z#e	r
ddlm$Z$m%Z%m&Z& ddgZ' G d de      Z(dZ)dZ*dZ+dZ,dZ- G d de(      Z.y)zr
Turtle RDF graph serializer for RDFLib.
See <http://www.w3.org/TeamSubmission/turtle/> for syntax specification.
    )annotationsN)defaultdict)IOTYPE_CHECKINGAnyDefaultDictDictListMappingOptionalSequenceTupleTypeVarUnion)Error)Graph)RDFRDFS)
Serializer)BNodeLiteralNodeURIRef_StrT)bound)_PredicateType_SubjectType_TripleTypeRecursiveSerializerTurtleSerializerc                  $    e Zd ZU dZej
                  gZej                  ej                  gZ
dZdZdZded<    ej                   d      Zd fdZdd	Zdd
ZddZddZddZddZddZ	 	 	 	 ddZ	 	 	 	 ddZddZdd dZd!dZd"dZ xZ S )#r   z%Base class for recursive serializers.
   z   zTuple[Any, ...]roundtrip_prefixes%(?![0-9A-Fa-f]{2})c                Z    t         t        |   |       d | _        | j	                          y N)superr   __init__streamresetselfstore	__class__s     k/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/rdflib/plugins/serializers/turtle.pyr)   zRecursiveSerializer.__init__4   s#    !41%8+/

    c           	         || j                   v r3| j                   |   |k7  r!t        d|d|d| j                   |         || j                   |<   y )Nz$Trying to override namespace prefix z => z, but it's already bound to )
namespaces	Exception)r-   prefixuris      r0   addNamespacez RecursiveSerializer.addNamespace9   sP    T__$)@C)G3 79  #&r1   c                    | j                  |      sT|| j                  vsF|| j                  v r| j                  dkD  s)t	        |t
              r| j                  | j                  k\  ryy)z4Check to see if the subject should be serialized yet   FT)isDone	_subjects
_topLevelsdepth
isinstancer   maxDepthr-   subjects     r0   checkSubjectz RecursiveSerializer.checkSubjectA   sQ     [[!t~~-DOO+$**q.7F+t}}1Lr1   c                    || j                   v S )z$Return true if subject is serialized_serializedr@   s     r0   r:   zRecursiveSerializer.isDoneL   s    $****r1   c           
     
   i }g }| j                   D ]q  }t        | j                  j                  t        j
                  |            }|j                          |j                  |       |D ]  }d| j                  |<   d||<    s | j                  D cg c]&  }||vr t        |t              | j                  |   |f( }}|j                          |j                  |D 	cg c]  \  }}	}|
 c}}	}       |S c c}w c c}}	}w )NT)
topClasseslistr.   subjectsr   typesortextendr<   r;   r>   r   _references)
r-   seenrI   classURImembersmemberrA   
recursableisbnoderefss
             r0   orderSubjectsz!RecursiveSerializer.orderSubjectsP   s    )+')H4::..sxxBCGLLNOOG$!*.'#V " (  >>
)d" ')9)9')BGL) 	 
 	L%=gtWLM
 Ms   +C9!C>c                f    | j                   j                  d      D ]  }| j                  |        y )NNNN)r.   triplespreprocessTriple)r-   triples     r0   
preprocesszRecursiveSerializer.preprocessi   s*    jj(();<F!!&) =r1   c                \    |\  }}}| j                   |xx   dz  cc<   d| j                  |<   y )Nr9   T)rM   r;   )r-   spospos        r0   rY   z$RecursiveSerializer.preprocessTriplem   s1    1aq  qr1   c                   d| _         i | _        i | _        t        t              | _        i | _        i | _        i | _        | j                  rt        | j                  d      rD| j                  j                         D ]&  \  }}|| j                  v s| j                  ||       ( y | j                  j                         D ]  \  }}| j                  ||        y y )Nr   __iter__)r=   listsr3   r   intrM   rE   r;   r<   r$   hasattrr.   r7   )r-   r5   nss      r0   r+   zRecursiveSerializer.resetr   s    
')
-/3>s3C573546""t..
;"&**"7"7"9JFB!8!88))&"5 #: #'**"7"7"9JFB%%fb1 #: #r1   c                    i }| j                   j                  |ddf      D ].  \  }}}|j                  |g       }|j                  |       |||<   0 |S )zb
        Build a hash key by predicate to a list of objects for the given
        subject
        N)r.   rX   getappend)r-   rA   
propertiesr^   r_   r`   oLists          r0   buildPredicateHashz&RecursiveSerializer.buildPredicateHash   s\     8:
zz))7D$*?@GAq!NN1b)ELLO!JqM A r1   c                V   |j                         D ]  \  }}|j                           g }i }| j                  D ]"  }||v s||vs|j                  |       d||<   $ t	        |j                               }|j                          |D ]  }||vs|j                  |       d||<    |S )zzTake a hash from predicate uris to lists of values.
        Sort the lists of values.  Return a sorted list of properties.T)itemsrK   predicateOrderri   rH   keys)r-   rj   propobjectspropListrN   propss          r0   sortPropertiesz"RecursiveSerializer.sortProperties   s     (--/MD'LLN 0
 *,+-''D
"T)9%!T
 ( Z__&'

D4%!T
  r1   c                "    d| j                   |<   y)zMark a subject as done.TNrD   r@   s     r0   subjectDonezRecursiveSerializer.subjectDone   s    $(!r1   c                :    | j                   |z   | j                  z  S )z-Returns indent string multiplied by the depth)r=   indentString)r-   modifiers     r0   indentzRecursiveSerializer.indent   s    

X%):):::r1   c                n    | j                   j                  |j                  | j                  d             y)zWrite text in given encoding.replaceN)r*   writeencodeencoding)r-   texts     r0   r~   zRecursiveSerializer.write   s%     	$++dmmY?@r1   c                    | j                   }|U|j                  |      rDd|j                  |d      vr0d|j                  |d      vrt        |j                  |dd            }|S )N# /r9   )base
startswithr}   r   )r-   r6   r   s      r0   
relativizezRecursiveSerializer.relativize   sa    yyt$3;;tR003;;tR00 T2q12C
r1   r.   r   )r5   strr6   r   returnNonerA   r   r   bool)r   zList[_SubjectType]r   r   )r]   r   r   r   )rA   r   r   #Mapping[_PredicateType, List[Node]])rj   r   r   zList[_PredicateType])rA   r   r   r   )r   )rz   rd   r   r   )r   r   r   r   )r6   r   r   zUnion[_StrT, URIRef])!__name__
__module____qualname____doc__r   ClassrG   r   rJ   labelro   r?   ry   r$   __annotations__recompile2LOCALNAME_PECRENT_CHARACTER_REQUIRING_ESCAPE_REGEXr)   r7   rB   r:   rU   r[   rY   r+   rl   ru   rw   r{   r~   r   __classcell__r/   s   @r0   r   r   (   s    /**Jhh

+NHL*,,9C:6
&	+2*!
2&#	,=	4);A

r1   r9      Fc                  (    e Zd ZdZdZdZ ej                  d      Zd fdZ	d fdZ
d fdZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZd fd	Zd d!d
Zd d!dZddZddZd"dZd"dZd"dZd#d$dZd#d%dZd&dZd#d%dZd'dZd(dZd#d)dZd#d*dZd+dZ xZS ),r    zTurtle RDF graph serializer.turtlez    r%   c                    i | _         t        t        |   |       t        j
                  di| _        | j                          d | _        t        | _
        y )Na)_ns_rewriter(   r    r)   r   rJ   keywordsr+   r*   _SPACIOUS_OUTPUT	_spaciousr,   s     r0   r)   zTurtleSerializer.__init__   sA    +-.u5*-((C

)r1   c                H   |dkD  r|d   dk(  s| j                   j                  ||      |k7  r`|| j                  vr6d|z   }|| j                   v rd|z   }|| j                   v r|| j                  |<   | j                  j                  ||      }t        t        |   ||       |S )Nr   r   _r_   )r3   rh   r   r(   r    r7   )r-   r5   	namespacer_   r/   s       r0   r7   zTurtleSerializer.addNamespace   s     RKF1I,1D1DI2
2 T---&L4??*aA 4??*+,  (%%))&&9F269Er1   c                T    t         t        |           i | _        d| _        i | _        y )NF)r(   r    r+   _shortNames_startedr   )r-   r/   s    r0   r+   zTurtleSerializer.reset   s(    +--/r1   c                   | j                          || _        ||| _        n1| j                  j                  | j                  j                  | _        ||| _        | j                          | j                         }| j                          d}|D ]>  }| j                  |      r|rd}| j                  |      s+|r.| j                  d       @ | j                          |j                  dj                  d             d | _        y )NTF
zlatin-1)r+   r*   r   r.   r   r[   rU   startDocumentr:   	statementr~   endDocumentr   )	r-   r*   r   r   spaciouskwargssubjects_list	firstTimerA   s	            r0   	serializezTurtleSerializer.serialize   s     	

DIZZ__(

DI%DN**,	$G{{7#!	~~g&y

4  % 	T[[+,	r1   c                v   t         t        |   |       t        |      D ]  \  }}|t        k(  r|| j
                  v r| j                  ht        |t              rX|j                  | j                        r=d|j                  | j                  d      vrd|j                  | j                  d      vr| j                  ||t        k(         t        |t              s|j                  s| j                  |j                  t                |d   }t        |t              r| j                   |xx   dz  cc<   y y )Nr   r   r   )
gen_prefixr9   )r(   r    rY   	enumerateVERBr   r   r>   r   r   r}   	get_pnamer   datatype_GEN_QNAME_FOR_DTr   rM   )r-   rZ   inoder_   r/   s        r0   rY   z!TurtleSerializer.preprocessTriple&  s    6v> (GAtDy4==(II)"40		24<<		2#>>4<<		2#>> NN4Q$YN8$(T]]t}}9JK# )$ 1IaQ1$  r1   c                   t        |t              sy d }	 | j                  j                  ||      }|\  }}}|j                  dd      j                  dd      }| j                  j                  d|      }|j                  d      ry | j                  ||      }|d	|S # t        $ r2 | j                  j                  j                  |      }|||df}nY y Y w xY w)
N)generater   (z\()z\)z\%.:)r>   r   r.   compute_qnamer4   r5   r}   r   subendswithr7   )r-   r6   r   partspfxr5   r   locals           r0   r   zTurtleSerializer.get_pname?  s    #v&
	JJ,,S:,FE $) 	5
 dE*224?GGKK5

 >>#""695 %((5  	**""))#.Cc2  	s   B! !6CCc                ^    t        j                  dt        d       | j                  ||      S )NzPTurtleSerializer.getQName is deprecated, use TurtleSerializer.get_pname instead.r   )
stacklevel)warningswarnDeprecationWarningr   )r-   r6   r   s      r0   getQNamezTurtleSerializer.getQNamec  s*    ^	

 ~~c:..r1   c           	     v   d| _         t        | j                  j                               }| j                  r/| j                  | j                         d| j                  z  z          |D ].  \  }}| j                  | j                         d|d|dz          0 |r| j                  r| j                  d       y y y )NTz@base <%s> .
z@prefix z: <z> .
r   )r   sortedr3   rn   r   r~   r{   r   )r-   ns_listr5   r6   s       r0   r   zTurtleSerializer.startDocumentk  s    ..0199JJt{{}'7$))'CCD"KFCJJt{{}'MMN #t~~JJt &7r1   c                @    | j                   r| j                  d       y y )Nr   )r   r~   )r-   s    r0   r   zTurtleSerializer.endDocumentv  s    >>JJt r1   c                l    | j                  |       | j                  |      xs | j                  |      S r'   )rw   	s_squared	s_defaultr@   s     r0   r   zTurtleSerializer.statementz  s-    !~~g&A$..*AAr1   c                    | j                  d| j                         z          | j                  |t               | j	                  |       | j                  d       y)Nr    .T)r~   r{   pathSUBJECTpredicateListr@   s     r0   r   zTurtleSerializer.s_default~  sD    

4$++-'(		'7#7#

4r1   c                    | j                   |   dkD  st        |t              sy| j                  d| j	                         z   dz          | j                  |       | j                  d       y)Nr   Fr   z[]r   T)rM   r>   r   r~   r{   r   r@   s     r0   r   zTurtleSerializer.s_squared  sZ    W%)*We2L

4$++-'$./7#

4r1   c                p    | j                  |||      s#| j                  |||      st        d|d      y y )NzCannot serialize node '')	p_squared	p_defaultr   r-   r   positionnewlines       r0   r   zTurtleSerializer.path  s:    NN473~~dHg6>?? 7 4r1   c                ~    |t         k7  r|s| j                  d       | j                  | j                  ||             y)N T)r   r~   r   r   s       r0   r   zTurtleSerializer.p_default  s1    wwJJsO

4::dH-.r1   c                :    |t         j                  k(  ry|t        u r| j                  v r j                  |   S t	        |t
              r|j                  d fd      S  j                  |      } j                  ||t        k(        xs |j                         S )Nz()Tc                0    j                  | t              S r'   )r   r   )dtr-   s    r0   <lambda>z(TurtleSerializer.label.<locals>.<lambda>  s    $..=N*Or1   )	use_plainqname_callback)
r   nilr   r   r>   r   _literal_n3r   r   n3)r-   r   r   s   `  r0   r   zTurtleSerializer.label  s    377?t 5==&&dG$##O $  
 ??4(D>>$D(89FTWWYFr1   c                   t        |t              r)|| j                  v s| j                  |   dkD  s	|t        k(  ry|s| j                  d       | j                  |      r^| j                  d       | xj                  dz  c_        | j                  |       | xj                  dz  c_        | j                  d       y
| j                  |       | xj                  dz  c_        | j                  d       | xj                  dz  c_        | j                  |d       | j                  d	       | xj                  dz  c_        y
)Nr9   Fr   r   z )r   [r   z ]T)r>   r   rE   rM   r   r~   isValidListr=   doListrw   r   r   s       r0   r   zTurtleSerializer.p_squared  s    4't'''%)7"JJsOD!JJsOJJ!OJKKJJ!OJJJt  T"JJ!OJJJsOJJ!OJtU3JJtJJ!OJr1   c                b   	 | j                   j                  |t        j                        y	 |rq|t        j
                  k7  r1t        t        | j                   j                  |                  dk7  ry| j                   j                  |t        j                        }|rqy# t        $ r Y yw xY w)zW
        Checks if l is a valid RDF list, i.e. no nodes have other properties.
        Fr   T)
r.   valuer   firstr4   r   lenrH   predicate_objectsrest)r-   l_s     r0   r   zTurtleSerializer.isValidList  s    	zzCII.6 7 SWW}T$***F*Fr*J%K!LPQ!Q!!"chh/B	 
   		s   *B" "	B.-B.c                
   |r| j                   j                  |t        j                        }|'| j	                  |t
               | j                  |       | j                   j                  |t        j                        }|ry y r'   )r.   r   r   r   r   OBJECTrw   r   )r-   r   items      r0   r   zTurtleSerializer.doList  s`    ::##B		2D		$'  $!!"chh/B r1   c                h   | j                  |      }| j                  |      }t        |      dk(  ry | j                  |d   |       | j	                  ||d             |dd  D ]L  }| j                  d| j                  d      z          | j                  |d       | j	                  ||          N y )Nr   r   r9   z ;
T)rl   ru   r   verb
objectListr~   r{   )r-   rA   r   rj   rs   	predicates         r0   r   zTurtleSerializer.predicateList  s    ,,W5
&&z2x=A		(1+w	/
8A;/0!!"IJJvA./IIiI.OOJy12 &r1   c                2    | j                  |t        |       y r'   )r   r   )r-   r   r   s      r0   r   zTurtleSerializer.verb  s    		$g&r1   c                P   t        |      }|dk(  ry |dk(  xr dxs d}| xj                  |z  c_        | j                  |d   t               |dd  D ]=  }| j	                  d| j                  d      z          | j                  |t        d       ? | xj                  |z  c_        y )Nr   r9   z,
Tr   )r   r=   r   r   r~   r{   )r-   rr   countdepthmodobjs        r0   r  zTurtleSerializer.objectList  s    GA:QJ%A*

h
		'!*f%12;CJJut{{1~-.IIc64I0  	

h
r1   r   )r5   r   r   r   r   r   r   rW   )r*   z	IO[bytes]r   Optional[str]r   r  r   zOptional[bool]r   r   r   r   )rZ   r   r   r   )T)r6   r   r   r   r   r  r   )F)r   r   r   rd   r   r   r   r   )r   r   r   rd   r   r   r   r   )r   r   r   rd   r   r   )r   r   r   r   )r   r   r   r   )rA   r   r   r   r   r   )r   r   r   r   r   r   )rr   zSequence[Node]r   r   )r   r   r   r   
short_namery   r   r   r   r)   r7   r+   r   rY   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   s   @r0   r    r       s    &JL9C:6*0 #"&#'$$ $  	$
 !$ $ 
$L%2")H/	B@GB 0
3'
r1   )/r   
__future__r   r   r   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   rdflib.exceptionsr   rdflib.graphr   rdflib.namespacer   r   rdflib.serializerr   rdflib.termr   r   r   r   r   r   r   r   r   __all__r   r   r   r   r   r   r    r#   r1   r0   <module>r     s   
 # 	  #    $  & ( 4 4s#FF "4
5\* \~ 	
  m* mr1   