o
    i                     @   s   d Z ddl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r4d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.
    )IOTYPE_CHECKINGDictListOptionalTupleUnion)ConjunctiveGraphGraph)TurtleSerializer)BNodeNode)_ContextType_SubjectTypeTrigSerializerc                
       s|   e Zd ZdZdZdeeef f fddZddd	Z	d fd
dZ
			ddee dee dee dee fddZ  ZS )r   trigz    storec                    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__ Z/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/serializers/trig.pyr      s   
zTrigSerializer.__init__returnNc                 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   getQNamer   	_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!   r0   7   s   zTrigSerializer.resetstreambaseencodingspaciousc                 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)r0   r1   r2   r   	_spaciousr/   startDocumentr+   items_serializedr&   r   r   writeindentr   r   n3r%   depthisDone	statementendDocumentencode)r   r1   r2   r3   r4   args	firstTimer   ordered_subjectssubjectsirir.   r    r    r!   	serialize>   sL   



zTrigSerializer.serialize)r"   N)NNN)__name__
__module____qualname__
short_nameindentStringr   r
   r	   r   r/   r0   r   bytesr   strboolrG   __classcell__r    r    r   r!   r      s$    

N)__doc__typingr   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    $