o
    
i                     @  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.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)context_awarer   
isinstancer   listcontextsdefault_context
identifierappendsuperr   __init__)selfr   	__class__ S/home/ubuntu/.local/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   	_subjectspreprocessTriplekeys_referencesorderSubjects	_contexts)r    contexttriplesubjectr#   r#   r$   
preprocess)   s   
zTrigSerializer.preprocessc                   s   t t|   i | _d S r   )r   r   resetr/   )r    r!   r#   r$   r4   ;   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)r4   r5   r7   r   	_spaciousr3   startDocumentr/   items_serializedr*   r   r   writeindentr   r   n3r)   depthisDone	statementendDocumentencode)r    r5   r7   r9   r:   r<   	firstTimer   ordered_subjectssubjectsirir2   r#   r#   r$   	serializeB   sL   



zTrigSerializer.serialize)r   r   )r%   r&   )NNN)r5   r6   r7   r8   r9   r8   r:   r;   r<   r   r%   r&   )__name__
__module____qualname____doc__
short_nameindentStringr   r3   r4   rN   __classcell__r#   r#   r!   r$   r      s    

N)rR   
__future__r   typingr   r   r   r   r   r   r	   r
   rdflib.graphr   r   !rdflib.plugins.serializers.turtler   rdflib.termr   r   r   r   __all__r   r#   r#   r#   r$   <module>   s    (