o
    i                     @   s   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 d dlZddlmZmZ ddlmZ er@ddlmZ dd	lmZ G d
d deZdS )    N)UserDict)TYPE_CHECKINGDictIterableListOptionalTupleUnion   )ErrorsWarnings   )	SpanGroup)Doc)Spanc                       s   e Zd ZdZeg Ze fdddee	e
ef  ddfddZd	e
d
eeed f ddfddZde
ded defddZdded dd fddZd fdd	ZdefddZdedd fddZdddZ  ZS )
SpanGroupszDA dict-like proxy held by the Doc, to control access to span groups.docr   itemsreturnNc                 C   s   t || _t| | d S N)weakrefrefdoc_refr   __init__)selfr   r    r   N/home/ubuntu/.local/lib/python3.10/site-packages/spacy/tokens/_dict_proxies.pyr      s   zSpanGroups.__init__keyvaluer   c                 C   s:   t |ts| ||}|j|  u sJ t| || d S r   )
isinstancer   _make_span_groupr   r   r   __setitem__)r   r   r   r   r   r   r!       s   
zSpanGroups.__setitem__namespansc                 C   s   |   }t|||dS )N)r"   r#   )_ensure_docr   )r   r"   r#   r   r   r   r   r    &   s   zSpanGroups._make_span_groupc                    s2    d u r|     fdd|  D }t |dS )Nc                 3   s$    | ]\}}||j  d fV  qdS )r   N)copy).0kvr%   r   r   	<genexpr>-   s   " z"SpanGroups.copy.<locals>.<genexpr>)r   )r$   r   r   )r   r   	data_copyr   r%   r   r&   *   s   zSpanGroups.copyc                    s8   t |ts|d u rg }n|}| ||}t j||dS )N)default)r   r   r    super
setdefault)r   r   r,   r#   	__class__r   r   r.   0   s   
zSpanGroups.setdefaultc                 C   sH   t | dkr	| jS i }|  D ]\}}|| g | qt|S )Nr   )len_EMPTY_BYTESr   r.   to_bytesappendsrslymsgpack_dumps)r   msgr   r   r   r   r   r3   9   s   
zSpanGroups.to_bytes
bytes_datac                 C   s   |r|| j kr	g nt|}|   |  }t|trB|D ]"}t||}|j	| v r:t
tjj|j	| |j	 d || |j	< q| S | D ] \}}t||}|| |d < |dd  D ]}| | |< q]qF| S )N)
group_namegroup_valuesr   r   )r2   r5   msgpack_loadsclearr$   r   listr   
from_bytesr"   warningswarnr   W120formatr   r&   )r   r8   r7   r   value_bytesgroupkeysr   r   r   r   r>   D   s4   



zSpanGroups.from_bytesc                 C   s   |   }|d u rttj|S r   )r   
ValueErrorr   E866)r   r   r   r   r   r$   j   s   
zSpanGroups._ensure_docr   )r   r   )__name__
__module____qualname____doc__r5   r6   r2   tupler   r   strr   r   r	   r!   r    r   r&   r.   bytesr3   r>   r$   __classcell__r   r   r/   r   r      s$    

"	&r   )r?   r   collectionsr   typingr   r   r   r   r   r   r	   r5   errorsr   r   
span_groupr   r   r   spanr   r   r   r   r   r   <module>   s    $