o
    mi                     @  s   d 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 ddlmZmZ ddlmZ ddlmZmZ er<ddlmZmZ dgZG d	d deZd
S )zb
Trig RDF graph serializer for RDFLib.
See <http://www.w3.org/TR/trig/> for syntax specification.
    )annotations)IOTYPE_CHECKINGAnyDictListOptionalTupleUnion)ConjunctiveGraphGraph)TurtleSerializer)BNodeNode)_ContextType_SubjectTypeTrigSerializerc                      sT   e Zd ZdZdZdZd fddZdd
dZd fddZ			ddddZ	  Z
S )r   zTriG RDF graph serializer.Ztrigz    storeUnion[Graph, ConjunctiveGraph]c                   sl   |  |j r%trt|tsJ t| | _|jj| _|jr$| j|j n|g| _d | _t	t
| | d S N)Zcontext_awarer   
isinstancer   listcontextsdefault_context
identifierappendsuperr   __init__)selfr   	__class__ Y/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/serializers/trig.pyr      s   
zTrigSerializer.__init__returnNonec                 C  s   | j D ];}t|dkrq|| _| |jd i | _|D ]}| | q| j D ]}| j|  d7  < q(| 	 | jf| j
|< qd S )Nr   F   )r   lenr   	get_pnamer   	_subjectsZpreprocessTriplekeysZ_referencesZorderSubjects	_contexts)r   contextZtriplesubjectr!   r!   r"   
preprocess)   s   
zTrigSerializer.preprocessc                   s   t t|   i | _d S r   )r   r   resetr*   )r   r   r!   r"   r.   ;   s   zTrigSerializer.resetNstream	IO[bytes]baseOptional[str]encodingspaciousOptional[bool]kwargsr   c                 K  sr  |    || _|d ur|| _n| jjd ur| jj| _|d ur!|| _|   |   d}| j D ]z\}\}}	|s9q0i | _	|| _|	| _
| jrU|j| jkrU| |  d  n't|jtra|j }
n| |jd}
|
d u rq|j }
| |  d|
   |  jd7  _|D ]}| |rq|rd}| |r|s| d q|  jd8  _| d q0|   |dd d S )	NTz
{Fz
%s {r%   
z}
zlatin-1)r.   r/   r1   r   Z	_spaciousr-   ZstartDocumentr*   itemsZ_serializedr(   r   r   writeindentr   r   Zn3r'   depthZisDoneZ	statementZendDocumentencode)r   r/   r1   r3   r4   r6   Z	firstTimer   Zordered_subjectsZsubjectsZirir,   r!   r!   r"   	serializeB   sL   



zTrigSerializer.serialize)r   r   )r#   r$   )NNN)r/   r0   r1   r2   r3   r2   r4   r5   r6   r   r#   r$   )__name__
__module____qualname____doc__Z
short_nameZindentStringr   r-   r.   r=   __classcell__r!   r!   r   r"   r      s    

N)rA   
__future__r   typingr   r   r   r   r   r   r	   r
   Zrdflib.graphr   r   Z!rdflib.plugins.serializers.turtler   Zrdflib.termr   r   r   r   __all__r   r!   r!   r!   r"   <module>   s    (