
    g#                     p    	 d dl mZ 	 d dlmZmZmZ  G d de      Z	y# e$ r d ZY !w xY w# e$ r Y !w xY w)    )	get_identc                       y)Nz<no get_ident> r       U/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/patsy/compat_ordereddict.py
_get_identr      s    r   )KeysView
ValuesView	ItemsViewc                       e Zd ZdZd Zej                  fdZej                  fdZd Zd Z	d Z
ddZd	 Zd
 Zd Zd Zd Zd Zd ZeZ e       ZefdZddZi fdZd Zd Zedd       Zd Zd Zd Zd Z d Z!y)OrderedDictz)Dictionary that remembers insertion orderc                     t        |      dkD  rt        dt        |      z        	 | j                    | j
                  |i | y# t        $ r g x| _        }||dg|dd i | _        Y 6w xY w)zInitialize an ordered dictionary.  Signature is the same as for
        regular dictionaries, but keyword arguments are not recommended
        because their insertion order is arbitrary.

           z$expected at most 1 arguments, got %dN)len	TypeError_OrderedDict__rootAttributeError_OrderedDict__map_OrderedDict__update)selfargskwdsroots       r   __init__zOrderedDict.__init__%   sy     t9q=BSYNOO	KK
 	t$t$	  	!##DK$T4(DGDJ	s   A !A*)A*c                 z    || vr-| j                   }|d   }|||gx|d<   x|d<   | j                  |<    || ||       y)z!od.__setitem__(i, y) <==> od[i]=yr   r   N)r   r   )r   keyvaluedict_setitemr   lasts         r   __setitem__zOrderedDict.__setitem__5   sO     d?;;D7D37s2CCDGCd1g

3T3&r   c                 h     || |       | j                   j                  |      \  }}}||d<   ||d<   y)z od.__delitem__(y) <==> del od[y]r   r   N)r   pop)r   r   dict_delitem	link_prev	link_nexts        r   __delitem__zOrderedDict.__delitem__?   s9     	T3$(JJNN3$7!	9c 	! 	!r   c              #   Z   K   | j                   }|d   }||ur|d    |d   }||uryyw)zod.__iter__() <==> iter(od)r      Nr   r   r   currs      r   __iter__zOrderedDict.__iter__H   <     {{Aw$q'M7D $   &++c              #   Z   K   | j                   }|d   }||ur|d    |d   }||uryyw)z#od.__reversed__() <==> reversed(od)r   r(   Nr)   r*   s      r   __reversed__zOrderedDict.__reversed__P   r-   r.   c                     	 | j                   j                         D ]  }|dd= 	 | j                  }||dg|dd | j                   j                          t
        j                  |        y# t        $ r Y !w xY w)z.od.clear() -> None.  Remove all items from od.N)r   
itervaluesr   clearr   dict)r   noder   s      r   r3   zOrderedDict.clearX   su    	

--/ G;;DT4(DGJJ 	

4  		s   AA* *	A65A6c                     | st        d      | j                  }|r|d   }|d   }||d<   ||d<   n|d   }|d   }||d<   ||d<   |d   }| j                  |= t        j	                  | |      }||fS )zod.popitem() -> (k, v), return and remove a (key, value) pair.
        Pairs are returned in LIFO order if last is true or FIFO order if false.

        zdictionary is emptyr   r   r(   )KeyErrorr   r   r4   r"   )r   r   r   linkr$   r%   r   r   s           r   popitemzOrderedDict.popitemd   s    
 011{{7DQIIaLDG7DQIDGIaL1gJJsOs#Ezr   c                     t        |       S )zod.keys() -> list of keys in od)listr   s    r   keyszOrderedDict.keys}       Dzr   c                 2    | D cg c]  }| |   	 c}S c c}w )z#od.values() -> list of values in odr   r   r   s     r   valueszOrderedDict.values   s    %)*cS	***s   c                 6    | D cg c]	  }|| |   f c}S c c}w )z.od.items() -> list of (key, value) pairs in odr   r@   s     r   itemszOrderedDict.items   s    ,01Sd3i 111s   c                     t        |       S )z0od.iterkeys() -> an iterator over the keys in od)iterr<   s    r   iterkeyszOrderedDict.iterkeys   r>   r   c              #   (   K   | D ]	  }| |     yw)z2od.itervalues -> an iterator over the values in odNr   r   ks     r   r2   zOrderedDict.itervalues   s      	Aq'M	s   c              #   ,   K   | D ]  }|| |   f  yw)z=od.iteritems -> an iterator over the (key, value) items in odNr   rH   s     r   	iteritemszOrderedDict.iteritems   s#      	Ad1g,	s   c                     t        |       dkD  rt        dt        |       fz        | st        d      | d   }d}t        |       dk(  r| d   }t        |t              r|D ]
  }||   ||<    n9t	        |d      r|j                         D ]
  }||   ||<    n|D ]
  \  }}|||<    |j                         D ]
  \  }}|||<    y)	a  od.update(E, **F) -> None.  Update od from dict/iterable E and F.

        If E is a dict instance, does:           for k in E: od[k] = E[k]
        If E has a .keys() method, does:         for k in E.keys(): od[k] = E[k]
        Or if E is an iterable of items, does:   for k, v in E: od[k] = v
        In either case, this is followed by:     for k, v in F.items(): od[k] = v

        r(   z8update() takes at most 2 positional arguments (%d given)z,update() takes at least 1 argument (0 given)r   r   r   r=   N)r   r   
isinstancer4   hasattrr=   rC   )r   r   r   otherr   r   s         r   updatezOrderedDict.update   s     t9q='*-d)6  JKKAwt9>GEeT" '!#JS	'UF#zz| '!#JS	' $ "
U!S	"**, 	JCDI	r   c                 T    || v r
| |   }| |= |S || j                   u rt        |      |S )zod.pop(k[,d]) -> v, remove specified key and return the corresponding value.
        If key is not found, d is returned if given, otherwise KeyError is raised.

        )_OrderedDict__markerr7   )r   r   defaultresults       r   r"   zOrderedDict.pop   s;    
 $;#YFS	Mdmm#3-r   Nc                 "    || v r| |   S || |<   |S )zDod.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in odr   )r   r   rS   s      r   
setdefaultzOrderedDict.setdefault   s!    $;9S	r   c                     t        |       t               f}||v ryd||<   	 | s| j                  j                  d||= S | j                  j                  d| j	                         d||= S # ||= w xY w)zod.__repr__() <==> repr(od)z...r   z()())idr   	__class____name__rC   )r   _repr_runningcall_keys      r   __repr__zOrderedDict.__repr__   st    d8Z\)}$"#h	(!%!8!8: h'  $~~66

Eh'h's   A, )A, ,A1c                     | D cg c]	  }|| |   g }}t        |       j                         }t        t                     D ]  }|j                  |d        |r| j                  |f|fS | j                  |ffS c c}w )z%Return state information for picklingN)varscopyr   r"   r[   )r   rI   rC   	inst_dicts       r   
__reduce__zOrderedDict.__reduce__   s}    '+,!!T!W,,JOO%	km$ 	#AMM!T"	#NNUHi88~~x'' -s   A9c                 $    | j                  |       S )z!od.copy() -> a shallow copy of od)r[   r<   s    r   rb   zOrderedDict.copy   s    ~~d##r   c                 ,     |        }|D ]  }|||<   	 |S )zOD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
        and values equal to v (which defaults to None).

        r   )clsiterabler   dr   s        r   fromkeyszOrderedDict.fromkeys   s(     E 	CAcF	r   c                     t        |t              r:t        |       t        |      k(  xr! | j                         |j                         k(  S t        j                  | |      S )zod.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
        while comparison to a regular mapping is order-insensitive.

        )rM   r   r   rC   r4   __eq__r   rO   s     r   rl   zOrderedDict.__eq__   sH    
 e[)t9E
*Ltzz|u{{}/LL{{4''r   c                     | |k(   S Nr   rm   s     r   __ne__zOrderedDict.__ne__   s    5=  r   c                     t        |       S )z@od.viewkeys() -> a set-like object providing a view on od's keys)r	   r<   s    r   viewkeyszOrderedDict.viewkeys  s    ~r   c                     t        |       S )z<od.viewvalues() -> an object providing a view on od's values)r
   r<   s    r   
viewvalueszOrderedDict.viewvalues  s    $r   c                     t        |       S )zBod.viewitems() -> a set-like object providing a view on od's items)r   r<   s    r   	viewitemszOrderedDict.viewitems  s    r   )Tro   )"r\   
__module____qualname____doc__r   r4   r    r&   r,   r0   r3   r9   r=   rA   rC   rF   r2   rK   rP   r   objectrR   r"   rV   r_   rd   rb   classmethodrj   rl   rp   rr   rt   rv   r   r   r   r   r      s    /%  483C3C ' -1,<,< !
2+2

B HxH'  &( (($  (!
 r   r   N)
threadr   r   ImportError_abcollr	   r
   r   r4   r   r   r   r   <module>r      sO    .	77
v$ v    	   		s    
- **55