+
    &hm:                     f    R t ^ RIt^ RIHt ^ RIHt ^ RIH	t
 RR.tRtRtR	tR
tRR ltRtRR ltR# )a  The ``namedutils`` module defines two lightweight container types:
:class:`namedtuple` and :class:`namedlist`. Both are subtypes of built-in
sequence types, which are very fast and efficient. They simply add
named attribute accessors for specific indexes within themselves.

The :class:`namedtuple` is identical to the built-in
:class:`collections.namedtuple`, with a couple of enhancements,
including a ``__repr__`` more suitable to inheritance.

The :class:`namedlist` is the mutable counterpart to the
:class:`namedtuple`, and is much faster and lighter-weight than
full-blown :class:`object`. Consider this if you're implementing nodes
in a tree, graph, or other mutable data structure. If you want an even
skinnier approach, you'll probably have to look to C.
N)OrderedDict)	iskeyword)
itemgetter	namedlist
namedtuplez	{name}=%rzP    {name} = _property(_itemgetter({index:d}), doc='Alias for field {index:d}')
zh    {name} = _property(_itemgetter({index:d}), _itemsetter({index:d}), doc='Alias for field {index:d}')
a  class {typename}(tuple):
    '{typename}({arg_list})'

    __slots__ = ()

    _fields = {field_names!r}

    def __new__(_cls, {arg_list}):  # TODO: tweak sig to make more extensible
        'Create new instance of {typename}({arg_list})'
        return _tuple.__new__(_cls, ({arg_list}))

    @classmethod
    def _make(cls, iterable, new=_tuple.__new__, len=len):
        'Make a new {typename} object from a sequence or iterable'
        result = new(cls, iterable)
        if len(result) != {num_fields:d}:
            raise TypeError('Expected {num_fields:d}'
                            ' arguments, got %d' % len(result))
        return result

    def __repr__(self):
        'Return a nicely formatted representation string'
        tmpl = self.__class__.__name__ + '({repr_fmt})'
        return tmpl % self

    def _asdict(self):
        'Return a new OrderedDict which maps field names to their values'
        return OrderedDict(zip(self._fields, self))

    def _replace(_self, **kwds):
        'Return a new {typename} object replacing field(s) with new values'
        result = _self._make(map(kwds.pop, {field_names!r}, _self))
        if kwds:
            raise ValueError('Got unexpected field names: %r' % kwds.keys())
        return result

    def __getnewargs__(self):
        'Return self as a plain tuple.  Used by copy and pickle.'
        return tuple(self)

    __dict__ = _property(_asdict)

    def __getstate__(self):
        'Exclude the OrderedDict from pickling'  # wat
        pass

{field_defs}
c                l   \        V\        4      '       d!   VP                  RR4      P                  4       pV Uu. uF  p\        V4      NK  	  ppV'       d   \	        4       p\        V4       F  w  rg\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       dT   \        V4      '       gC   V'       d;   V^ ,          P                  4       '       g   VP                  R4      '       g   Wu9   d   RV,          W&   VP                  V4       K  	  V .V,            F  p\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   \        R	V,          4      h\        V4      '       d   \        R
V,          4      hV^ ,          P                  4       '       g   K  \        RV,          4      h	  \	        4       pV F]  pVP                  R4      '       d   V'       g   \        RV,          4      hWu9   d   \        RV,          4      hVP                  V4       K_  	  RV /p\        V4      VR&   \        V4      VR&   \        \        V4      4      P                  RR4      ^R  VR&   RP                  R V 4       4      VR&   RP                  R \        V4       4       4      VR&   \         P"                  ! R!/ VB p	V'       d   \%        V	4       \'        \(        RV ,          \*        \,        \        R7      p
 \/        W4       Y,          p \4        P6                  ! ^4      pTP8                  P;                  RR4      Tn        T# u upi   \0         d)   p\1        TP2                  R,           T	,           4      hRp?ii ; i  \>        \        3 d     T# i ; i)"a  Returns a new subclass of tuple with named fields.

>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point.__doc__                   # docstring for the new class
'Point(x, y)'
>>> p = Point(11, y=22)             # instantiate with pos args or keywords
>>> p[0] + p[1]                     # indexable like a plain tuple
33
>>> x, y = p                        # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y                       # fields also accessible by name
33
>>> d = p._asdict()                 # convert to a dictionary
>>> d['x']
11
>>> Point(**d)                      # convert from a dictionary
Point(x=11, y=22)
>>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields
Point(x=100, y=22)
, c              3   Z   "   T F!  qP                  4       ;'       g    VR 8H  x  K#  	  R# 5i_Nisalnum.0cs   & 2lib/python3.14/site-packages/boltons/namedutils.py	<genexpr>namedtuple.<locals>.<genexpr>   #     >A		//qCx/   ++FTr   _%dc              3   Z   "   T F!  qP                  4       ;'       g    VR 8H  x  K#  	  R# 5ir   r   r   s   & r   r   r      #     9Dq99;**!s(*Dr   WType names and field names can only contain alphanumeric characters and underscores: %r2Type names and field names cannot be a keyword: %r9Type names and field names cannot start with a number: %r/Field names cannot start with an underscore: %r$Encountered duplicate field name: %rtypenamefield_names
num_fields' arg_list, c              3   N   "   T F  p\         P                  VR 7      x  K  	  R# 5i)nameN
_repr_tmplformatr   r(   s   & r   r   r      (      #</:t $.#4#4$#4#?#?/:   #%repr_fmt
c              3   R   "   T F  w  r\         P                  WR 7      x  K  	  R# 5i)indexr(   N)_imm_field_tmplr+   r   r3   r(   s   &  r   r   r      s+      %P8N &5%;%;%%;%S%S8N   %'
field_defsznamedtuple_%s)_itemgetter__name__r   	_property_tuple:
Nr9   __main__ ) 
isinstancestrreplacesplitset	enumerateall
_iskeywordisdigit
startswithadd
ValueErrortuplelenreprjoin_namedtuple_tmplr+   printdictr8   r   propertyexecSyntaxErrormsg_sys	_getframe	f_globalsget
__module__AttributeError)r   r    verboserenamexseenr3   r(   fmt_kwclass_definition	namespaceeresultframes   &&&&          r   r   r   {   s@   2 +s##!))#s399;#./;a3q6;K/u$[1KEC>>CCC>>>>d##7??$$??3''<%*U]"HHTN 2 
[((s9D9sss9D999 K#$ % % d +-12 3 37?? ,.23 4 4 ) 5D??3 "$() * *<CdJKK  (#F!+.F={+F<eK0199#rB1RHF: #</:#< <F:99 %P8A+8N%P PF<'..88 -8!,'!	#I
<)  Fq!!OO//
JG MK 0n  <!%%%-*::;;< J' Ms/   M#M( *7N (N3#NNN32N3a  class {typename}(list):
    '{typename}({arg_list})'

    __slots__ = ()

    _fields = {field_names!r}

    def __new__(_cls, {arg_list}):  # TODO: tweak sig to make more extensible
        'Create new instance of {typename}({arg_list})'
        return _list.__new__(_cls, ({arg_list}))

    def __init__(self, {arg_list}):  # tuple didn't need this but list does
        return _list.__init__(self, ({arg_list}))

    @classmethod
    def _make(cls, iterable, new=_list, len=len):
        'Make a new {typename} object from a sequence or iterable'
        # why did this function exist? why not just star the
        # iterable like below?
        result = cls(*iterable)
        if len(result) != {num_fields:d}:
            raise TypeError('Expected {num_fields:d} arguments,'
                            ' got %d' % len(result))
        return result

    def __repr__(self):
        'Return a nicely formatted representation string'
        tmpl = self.__class__.__name__ + '({repr_fmt})'
        return tmpl % tuple(self)

    def _asdict(self):
        'Return a new OrderedDict which maps field names to their values'
        return OrderedDict(zip(self._fields, self))

    def _replace(_self, **kwds):
        'Return a new {typename} object replacing field(s) with new values'
        result = _self._make(map(kwds.pop, {field_names!r}, _self))
        if kwds:
            raise ValueError('Got unexpected field names: %r' % kwds.keys())
        return result

    def __getnewargs__(self):
        'Return self as a plain list.  Used by copy and pickle.'
        return tuple(self)

    __dict__ = _property(_asdict)

    def __getstate__(self):
        'Exclude the OrderedDict from pickling'  # wat
        pass

{field_defs}
c           	     t   \        V\        4      '       d!   VP                  RR4      P                  4       pV Uu. uF  p\        V4      NK  	  ppV'       d   \	        4       p\        V4       F  w  rg\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       dT   \        V4      '       gC   V'       d;   V^ ,          P                  4       '       g   VP                  R4      '       g   Wu9   d   RV,          W&   VP                  V4       K  	  V .V,            F  p\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   \        R	V,          4      h\        V4      '       d   \        R
V,          4      hV^ ,          P                  4       '       g   K  \        RV,          4      h	  \	        4       pV F]  pVP                  R4      '       d   V'       g   \        RV,          4      hWu9   d   \        RV,          4      hVP                  V4       K_  	  RV /p\        V4      VR&   \        V4      VR&   \        \        V4      4      P                  RR4      ^R! VR&   RP                  R V 4       4      VR&   RP                  R \        V4       4       4      VR&   \         P"                  ! R"/ VB p	V'       d   \%        V	4       R p
\'        \(        V
RV ,          \*        \,        \.        R7      p \1        W4       Y,          p \6        P8                  ! ^4      pTP:                  P=                  RR 4      Tn        T# u upi   \2         d)   p\3        TP4                  R,           T	,           4      hRp?ii ; i  \@        \        3 d     T# i ; i)#a  Returns a new subclass of list with named fields.

>>> Point = namedlist('Point', ['x', 'y'])
>>> Point.__doc__                   # docstring for the new class
'Point(x, y)'
>>> p = Point(11, y=22)             # instantiate with pos args or keywords
>>> p[0] + p[1]                     # indexable like a plain list
33
>>> x, y = p                        # unpack like a regular list
>>> x, y
(11, 22)
>>> p.x + p.y                       # fields also accessible by name
33
>>> d = p._asdict()                 # convert to a dictionary
>>> d['x']
11
>>> Point(**d)                      # convert from a dictionary
Point(x=11, y=22)
>>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields
Point(x=100, y=22)
r   r	   c              3   Z   "   T F!  qP                  4       ;'       g    VR 8H  x  K#  	  R# 5ir   r   r   s   & r   r   namedlist.<locals>.<genexpr>9  r   r   FTr   r   c              3   Z   "   T F!  qP                  4       ;'       g    VR 8H  x  K#  	  R# 5ir   r   r   s   & r   r   ri   B  r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   c              3   N   "   T F  p\         P                  VR 7      x  K  	  R# 5ir'   r)   r,   s   & r   r   ri   Z  r-   r.   r/   r0   c              3   R   "   T F  w  r\         P                  WR 7      x  K  	  R# 5ir2   )_m_field_tmplr+   r5   s   &  r   r   ri   \  s+      %P8N &3%9%9%9%Q%Q8Nr6   r7   c                    a  V 3R  lpV# )c                    < WS&   R # )Nr?   )objvaluekeys   &&r   _itemsetter3namedlist.<locals>._itemsetter.<locals>._itemsetterd  s
    H    r?   )rr   rs   s   f r   rs   namedlist.<locals>._itemsetterc  s    	ru   znamedlist_%s)r8   rs   r9   r   r:   _listr<   Nr9   r=   r>   r?   )!r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   _namedlist_tmplr+   rQ   rR   r8   r   rS   listrT   rU   rV   rW   rX   rY   rZ   r[   r\   )r   r    r]   r^   r_   r`   r3   r(   ra   rb   rs   rc   rd   re   rf   s   &&&&           r   r   r     sH   2 +s##!))#s399;#./;a3q6;K/u$[1KEC>>CCC>>>>d##7??$$??3''<%*U]"HHTN 2 
[((s9D9sss9D999 K#$ % % d +-12 3 37?? ,.23 4 4 ) 5D??3 "$() * *<CdJKK  (#F!+.F={+F<eK0199#rB1RHF: #</:#< <F:99 %P8A+8N%P PF<&--77 !,,x7!,'!I<)  Fq!!OO//
JG MY 0z  <!%%%-*::;;< J' Ms/   M'M, .7N" ,N7#NN"N76N7)FF)__doc__sysrW   collectionsr   keywordr   rG   operatorr   r8   __all__r*   r4   rm   rP   r   rx   r   r?   ru   r   <module>r      sW   >$  # + . 
% 
0 d`N5pgru   