+
    ÖÍiŸ�  ã                   ó  € R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^RI	H
t ^RI	Ht ^RIHt . R%Ot]P"                  tRRRRRRRRRRRRRRRRRRRRRRRRRRRR/t]P&                  t]! R4      R 4       t]! R4       ! R R
4      4       t ! R R]P.                  4      t]! R4       ! R R	]4      4       tR t]! R4      R&R l4       t]! R4      R&R  l4       t]! R4      R'R! l4       tR" t]! R4      R'R# l4       t]! R4      R(R$ l4       t R# ))z<
This module contains a set of functions for record arrays.
N)ÚCounter)Únullcontext)Ú
set_module)Únumeric)Únumerictypes)Ú_get_legacy_print_modeÚrecordÚrecarrayÚformat_parserÚbÚ>ÚlÚ<ÚnÚ=ÚBÚLÚNÚSÚsÚ|ÚIÚiz	numpy.recc                óz   € \        V 4      P                  4        UUu. uF  w  rV^8”  g   K  VNK  	  upp# u uppi )z@Find duplication in a list, return a list of duplicated elements)r   Úitems)ÚlistÚitemÚcountss   &  Ú5/usr/lib/python3/dist-packages/numpy/_core/records.pyÚfind_duplicater   /   sA   € ô
 $ D›M×/Ñ/Ô1ôá1‰LˆDØ�A‰:÷ 	ˆÙ1òð ùó s   �7­7c                   óD   a € ] tR t^9t o RtRR ltR	R ltR tR tRt	V t
R# )
r
   aÄ  
Class to convert formats, names, titles description to a dtype.

After constructing the format_parser object, the dtype attribute is
the converted data-type:
``dtype = format_parser(formats, names, titles).dtype``

Attributes
----------
dtype : dtype
    The converted data-type.

Parameters
----------
formats : str or list of str
    The format description, either specified as a string with
    comma-separated format descriptions in the form ``'f8, i4, S5'``, or
    a list of format description strings  in the form
    ``['f8', 'i4', 'S5']``.
names : str or list/tuple of str
    The field names, either specified as a comma-separated string in the
    form ``'col1, col2, col3'``, or as a list or tuple of strings in the
    form ``['col1', 'col2', 'col3']``.
    An empty list can be used, in that case default field names
    ('f0', 'f1', ...) are used.
titles : sequence
    Sequence of title strings. An empty list can be used to leave titles
    out.
aligned : bool, optional
    If True, align the fields by padding as the C-compiler would.
    Default is False.
byteorder : str, optional
    If specified, all the fields will be changed to the
    provided byte-order.  Otherwise, the default byte-order is
    used. For all available string specifiers, see `dtype.newbyteorder`.

See Also
--------
numpy.dtype, numpy.typename

Examples
--------
>>> import numpy as np
>>> np.rec.format_parser(['<f8', '<i4'], ['col1', 'col2'],
...                      ['T1', 'T2']).dtype
dtype([(('T1', 'col1'), '<f8'), (('T2', 'col2'), '<i4')])

`names` and/or `titles` can be empty lists. If `titles` is an empty list,
titles will simply not appear. If `names` is empty, default field names
will be used.

>>> np.rec.format_parser(['f8', 'i4', 'a5'], ['col1', 'col2', 'col3'],
...                      []).dtype
dtype([('col1', '<f8'), ('col2', '<i4'), ('col3', '<S5')])
>>> np.rec.format_parser(['<f8', '<i4', '<a5'], [], []).dtype
dtype([('f0', '<f8'), ('f1', '<i4'), ('f2', 'S5')])

Nc                ól   € V P                  W4       V P                  W#4       V P                  V4       R # ©N)Ú_parseFormatsÚ_setfieldnamesÚ_createdtype)ÚselfÚformatsÚnamesÚtitlesÚalignedÚ	byteorders   &&&&&&r   Ú__init__Úformat_parser.__init__v   s,   € Ø×Ñ˜7Ô,Ø×Ñ˜EÔ*Ø×Ñ˜)Ö$ó    c                óD  € Vf   \        R4      h\        V\        4      '       d;   \        P                  ! \        V4       UUu. uF  w  r4RV 2V3NK  	  uppV4      pM\        P                  ! W4      pVP                  pVf'   \        P                  ! RV3.V4      pVP                  pVP                  pV Uu. uF  q†V,          ^ ,          NK  	  upV n        V Uu. uF  q†V,          ^,          NK  	  upV n	        \        V4      V n        R# u uppi u upi u upi )zParse the field formats NzNeed formats argumentÚfÚf1)Ú
ValueErrorÚ
isinstancer   ÚsbÚdtypeÚ	enumerateÚfieldsr(   Ú
_f_formatsÚ_offsetsÚlenÚ_nfields)	r&   r'   r*   r   Úformat_r5   r7   ÚkeysÚkeys	   &&&      r   r#   Úformat_parser._parseFormats{   sþ   € ð Š?ÜÐ4Ó5Ð5Ü�gœt×$Ò$Ü—H’Hô '0°Ô&8ôá&8™
˜ð ˜˜�W˜gÓ&Ù&8òð ó‰Eô —H’H˜WÓ.ˆEØ—‘ˆØŠ>Ü—H’H˜t U˜m˜_¨gÓ6ˆEØ—\‘\ˆFØ�{‰{ˆÙ59Ó:±T¨c #�; qŸ>˜>±TÑ:ˆŒÙ37Ó8±4¨C � QŸ˜±4Ñ8ˆŒÜ˜D›	ˆŽùóùò ;ùÚ8s   ÁD
Â<DÃ Dc                ó’  € V'       d�   \        V4      \        \        39   d   M?\        V\        4      '       d   VP                  R4      pM\        R\        V4       24      hVRV P                    Uu. uF  q3P                  4       NK  	  upV n
        M. V n
        T ;P                  \        \        V P                  4      V P                  4       Uu. uF  pRV,          NK  	  up,          un
        \        V P                  4      pV'       d   \        RV 24      hV'       d3   VRV P                    Uu. uF  q3P                  4       NK  	  upV n        M	. V n        . pV P                  \        V4      8”  d>   V ;P                  R.V P                  \        V4      ,
          ,          ,          un        R# R# u upi u upi u upi )zIconvert input field names into a list and assign to the _names
attribute Ú,zillegal input names Nzf%dzDuplicate field names: )Útyper   Útupler3   ÚstrÚsplitÚ	NameErrorÚreprr;   ÚstripÚ_namesÚranger:   r   r2   Ú_titles)r&   r(   r)   r   r   Ú_dups   &&&   r   r$   Úformat_parser._setfieldnames“   sm  € ÷ Ü�E‹{œt¤U˜mÔ+ØÜ˜E¤3×'Ò'ØŸ™ CÓ(‘äÐ"6´t¸E³{°mÐ DÓEÐEà.3°N°T·]±]Ñ.CÓDÑ.C¨Ÿ7™7ž9Ñ.CÑDˆD�KàˆDŒKð 	�Š¬5´°T·[±[Ó1AØ15·±ô,@ó Añ ,@ a˜ Ÿ	˜	ñ ,@ñ Aõ 	A�ô ˜dŸk™kÓ*ˆßÜÐ6°t°fÐ=Ó>Ð>çØ/5°n°t·}±}Ñ/EÓFÑ/E¨!ŸG™GžIÑ/EÑFˆD�LàˆDŒLØˆFà�=‰=œ3˜v›;Ô&Ø�LŠL˜T˜F d§m¡m´c¸&³kÕ&AÕBÕB�Lñ 'ùò+ EùòAùò Gs   Á4F:ÃF?Ä7Gc           
     óð   € \         P                  ! R V P                  RV P                  RV P                  RV P
                  /4      pVe&   \        V^ ,          ,          pVP                  V4      pW n        R# )r(   r'   Úoffsetsr)   N)r4   r5   rI   r8   r9   rK   Ú_byteorderconvÚnewbyteorder)r&   r+   r5   s   && r   r%   Úformat_parser._createdtype·   sd   € Ü—’Ø�T—[‘[Ø�t—‘Ø�t—}‘}Ø�d—l‘lð	
ó ˆð Ò Ü& y°¥|Õ4ˆIØ×&Ñ& yÓ1ˆEàŽ
r.   )r8   rI   r;   r9   rK   r5   )FN)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r,   r#   r$   r%   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r
   r
   9   s&   ø‡ € ñ9ôv%ô
"ò0"C÷Hð r.   c                   ób   a a€ ] tR t^Åt oRtR t RtV 3R ltV 3R ltR tR tR t	R t
R	tVtV ;t# )
r   zEA data-type scalar that allows field access as attribute lookup.
    Únumpyc                ó^   <€ \        4       ^q8:  d   V P                  4       # \        SV `  4       # ©éq   )r   Ú__str__ÚsuperÚ__repr__©r&   Ú	__class__s   &€r   rb   Úrecord.__repr__Î   s(   ø€ Ü!Ó# sÔ*Ø—<‘<“>Ð!Ü‰wÑÓ!Ð!r.   c                óp   <€ \        4       ^q8:  d   \        V P                  4       4      # \        SV `  4       # r^   )r   rD   r   ra   r`   rc   s   &€r   r`   Úrecord.__str__Ó   s,   ø€ Ü!Ó# sÔ*Ü�t—y‘y“{Ó#Ð#Ü‰w‰Ó Ð r.   c                ó4  € VR9   d    \         P                  P                  W4      #  \         P                  P                  W4      #   \         d     Mi ; i\         P                  P                  T R4      P                  pTP                  TR4      pT'       dp   T P                  ! TR,          !  p TP                  pM  \         d    Tu # i ; iTP                  e(   TP                  T P                  TP                  34      # T# \        RT R24      h)Úsetfieldr5   NºNé   Nú"'record' object has no attribute 'Ú'©ri   Úgetfieldr5   )ÚntÚvoidÚ__getattribute__ÚAttributeErrorr7   Úgetro   r5   r(   Úviewrd   )r&   ÚattrÚ	fielddictÚresÚobjÚdts   &&    r   rr   Úrecord.__getattribute__Ø   sñ   € ØÐ4Ô4Ü—7‘7×+Ñ+¨DÓ7Ð7ð	Ü—7‘7×+Ñ+¨DÓ7Ð7øÜô 	Ùð	úä—G‘G×,Ñ,¨T°7Ó;×BÑBˆ	Ø�m‰m˜D $Ó'ˆßØ—-’-  R¥Ñ)ˆCðØ—Y‘Y‘øÜ!ô à’
ðúð �x‰xÒ#Ø—x‘x §¡°·±Ð ;Ó<Ð<ØˆJä Ð#EÀdÀVÈ1Ð!MÓNÐNs#   ¨A ÁAÁAÂ4C ÃCÃCc                ón  € VR9   d   \        RV R24      h\        P                  P                  V R4      P                  pVP                  VR4      pV'       d   V P                  ! V.VR,          O5!  # \        WR4      '       d!   \        P                  P                  WV4      # \        RV R24      h)	ri   r5   zCannot set 'z' attributeNrj   rl   rm   rn   )	rs   rp   rq   rr   r7   rt   ri   ÚgetattrÚ__setattr__)r&   rv   Úvalrw   rx   s   &&&  r   r~   Úrecord.__setattr__ð   sŸ   € ØÐ4Ô4Ü  <°¨v°[Ð!AÓBÐBÜ—G‘G×,Ñ,¨T°7Ó;×BÑBˆ	Ø�m‰m˜D $Ó'ˆßØ—=’= Ð/ s¨2¥wÓ/Ð/Ü�T ×&Ò&Ü—7‘7×&Ñ& t°3Ó7Ð7ä Ð#EÀdÀVÈ1Ð!MÓNÐNr.   c                ó  € \         P                  P                  W4      p\        V\         P                  4      '       d@   VP                  P
                  e(   VP                  V P                  VP                  34      # V# r"   )rp   rq   Ú__getitem__r3   r5   r(   ru   rd   )r&   Úindxry   s   && r   r‚   Úrecord.__getitem__ü   sY   € Ü�g‰g×!Ñ! $Ó-ˆô �cœ2Ÿ7™7×#Ò#¨¯	©	¯©Ò(CØ—8‘8˜TŸ^™^¨S¯Y©YÐ7Ó8Ð8ð ˆJr.   c           	     óÔ   € V P                   P                  p\        R V 4       4      pRV,          pV Uu. uF  qCV\        W4      3,          NK  	  ppRP	                  V4      # u upi )zPretty-print all fields.c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir"   )r:   )Ú.0Únames   & r   Ú	<genexpr>Ú record.pprint.<locals>.<genexpr>
  s   é € Ð1©5 4”S˜—Y�Y«5ùs   ‚z%% %ds: %%sÚ
)r5   r(   Úmaxr}   Újoin)r&   r(   ÚmaxlenÚfmtrˆ   Úrowss   &     r   ÚpprintÚrecord.pprint  se   € ð —
‘
× Ñ ˆÜÑ1©5Ó1Ó1ˆØ˜fÕ$ˆÙ>CÓD¹e°d�tœW TÓ0Ð1×1Ð1¹eˆÐDØ�y‰y˜‹Ðùò Es   ¶A%© )rS   rT   rU   rV   rW   rb   r`   rr   r~   r‚   r‘   rX   rY   Ú__classcell__©rd   rZ   s   @@r   r   r   Å   s;   ù‡ € ñð
 €HØ€Jõ"õ
!ò
Oò0
Oò÷ò r.   c                   ób   a a€ ] tR tRt oRtRR ltR tR tR tV 3R lt	R t
RR	 ltR
tVtV ;t# )r	   i  aû  Construct an ndarray that allows field access using attributes.

Arrays may have a data-types containing fields, analogous
to columns in a spread sheet.  An example is ``[(x, int), (y, float)]``,
where each entry in the array is a pair of ``(int, float)``.  Normally,
these attributes are accessed using dictionary lookups such as ``arr['x']``
and ``arr['y']``.  Record arrays allow the fields to be accessed as members
of the array, using ``arr.x`` and ``arr.y``.

Parameters
----------
shape : tuple
    Shape of output array.
dtype : data-type, optional
    The desired data-type.  By default, the data-type is determined
    from `formats`, `names`, `titles`, `aligned` and `byteorder`.
formats : list of data-types, optional
    A list containing the data-types for the different columns, e.g.
    ``['i4', 'f8', 'i4']``.  `formats` does *not* support the new
    convention of using types directly, i.e. ``(int, float, int)``.
    Note that `formats` must be a list, not a tuple.
    Given that `formats` is somewhat limited, we recommend specifying
    `dtype` instead.
names : tuple of str, optional
    The name of each column, e.g. ``('x', 'y', 'z')``.
buf : buffer, optional
    By default, a new array is created of the given shape and data-type.
    If `buf` is specified and is an object exposing the buffer interface,
    the array will use the memory from the existing buffer.  In this case,
    the `offset` and `strides` keywords are available.

Other Parameters
----------------
titles : tuple of str, optional
    Aliases for column names.  For example, if `names` were
    ``('x', 'y', 'z')`` and `titles` is
    ``('x_coordinate', 'y_coordinate', 'z_coordinate')``, then
    ``arr['x']`` is equivalent to both ``arr.x`` and ``arr.x_coordinate``.
byteorder : {'<', '>', '='}, optional
    Byte-order for all fields.
aligned : bool, optional
    Align the fields in memory as the C-compiler would.
strides : tuple of ints, optional
    Buffer (`buf`) is interpreted according to these strides (strides
    define how many bytes each array element, row, column, etc.
    occupy in memory).
offset : int, optional
    Start reading buffer (`buf`) from this offset onwards.
order : {'C', 'F'}, optional
    Row-major (C-style) or column-major (Fortran-style) order.

Returns
-------
rec : recarray
    Empty array of the given shape and type.

See Also
--------
numpy.rec.fromrecords : Construct a record array from data.
numpy.record : fundamental data-type for `recarray`.
numpy.rec.format_parser : determine data-type from formats, names, titles.

Notes
-----
This constructor can be compared to ``empty``: it creates a new record
array but does not fill it with data.  To create a record array from data,
use one of the following methods:

1. Create a standard ndarray and convert it to a record array,
   using ``arr.view(np.recarray)``
2. Use the `buf` keyword.
3. Use `np.rec.fromrecords`.

Examples
--------
Create an array with two fields, ``x`` and ``y``:

>>> import numpy as np
>>> x = np.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')])
>>> x
array([(1., 2), (3., 4)], dtype=[('x', '<f8'), ('y', '<i8')])

>>> x['x']
array([1., 3.])

View the array as a record array:

>>> x = x.view(np.recarray)

>>> x.x
array([1., 3.])

>>> x.y
array([2, 4])

Create a new, empty record array:

>>> np.recarray((2,),
... dtype=[('x', int), ('y', float), ('z', int)]) #doctest: +SKIP
rec.array([(-1073741821, 1.2249118382103472e-301, 24547520),
       (3471280, 1.2134086255804012e-316, 0)],
      dtype=[('x', '<i4'), ('y', '<f8'), ('z', '<i4')])

c           
     óò   € Ve   \         P                  ! V4      pM\        WgWŠV	4      P                  pVf!   \        P	                  W\
        V3VR7      pV# \        P	                  W\
        V3VWEVR7      pV# )N)Úorder)ÚbufferÚoffsetÚstridesr˜   )r4   r5   r
   ÚndarrayÚ__new__r   )ÚsubtypeÚshaper5   Úbufrš   r›   r'   r(   r)   r+   r*   r˜   Údescrr&   s   &&&&&&&&&&&&  r   r�   Úrecarray.__new__ƒ  sˆ   € ð ÒÜ—H’H˜U“O‰Eä!Ø °óç‰eð ð Š;Ü—?‘?Ø¤¨ °uð #ó ˆDð ˆô	 —?‘?Ø¤¨ ¸Ø°eð #ó ˆDð ˆr.   c                óœ   € V P                   P                  \        Jd.   V P                   P                  e   V P                   V n         R # R # R # r"   )r5   rB   r   r(   )r&   ry   s   &&r   Ú__array_finalize__Úrecarray.__array_finalize__™  s7   € Ø�:‰:�?‰?¤&Ó(¨T¯Z©Z×-=Ñ-=Ò-Ið Ÿ™ˆDŽJñ .JÑ(r.   c                óL  €  \         P                  W4      #   \         d     Mi ; i\        P                  T R 4      P                  p Y!,          R,          pM(  \
        \        3 d   p\        RT 24      ThRp?ii ; iT P                  ! T!  pTP                  P                  ei   \        TP                  P                  \        P                  4      '       d3   TP                  T P                  P                  TP                  3R7      # T# TP                  \        4      # )r5   rj   zrecarray has no attribute N©r5   )Úobjectrr   rs   rœ   r7   Ú	TypeErrorÚKeyErrorro   r5   r(   Ú
issubclassrB   rp   rq   ru   )r&   rv   rw   rx   Úery   s   &&    r   rr   Úrecarray.__getattribute__Ÿ  sï   € ð	Ü×*Ñ*¨4Ó6Ð6øÜô 	Ùð	úô ×,Ñ,¨T°7Ó;×BÑBˆ	ð	MØ•/ "Õ%‰CøÜœ8Ð$ô 	MÜ Ð#=¸d¸VÐ!DÓEÈ1ÐLûð	Múà�mŠm˜SÑ!ˆð �9‰9�?‰?Ò&Ü˜#Ÿ)™)Ÿ.™.¬"¯'©'×2Ò2Ø—x‘x t§z¡z§¡¸¿	¹	Ð&B�xÓCÐCØˆJà—8‘8œGÓ$Ð$s$   ‚ —%¤%Á	A ÁA>Á*A9Á9A>c                óè  € VR 8X  dU   \        VP                  \        P                  4      '       d+   VP                  e   \
        P                  ! \        V34      pWP                  9  p \        P                  WV4      p\        P                  V R 4      P                  ;'       g    / pW9  d   V# V'       d    \        P                  W4       M  WQ,          R,          pT P&                  ! T.TO5!  #   \         d    Tu # i ; i  \         d5    \        P                  T R 4      P                  ;'       g    / pY9  d   h  Lui ; i  \         \"        3 d   p\%        RT 24      ThRp?ii ; i)r5   Nrj   zrecord array has no attribute )r«   rB   rp   rq   r(   r4   r5   r   Ú__dict__r¨   r~   rœ   rr   r7   Ú__delattr__Ú	Exceptionr©   rª   rs   ri   )r&   rv   r   ÚnewattrÚretrw   rx   r¬   s   &&&     r   r~   Úrecarray.__setattr__Á  sR  € ð
 �GŒOÜ�s—x‘x¤§¡×)Ò)Ø�I‰IÒ!ä—(’(œF C˜=Ó)ˆCàŸm™mÑ+ˆð	Ü×$Ñ$ T°Ó5ˆCô  ×0Ñ0°°wÓ?×FÑF×LÐLÈ"ˆIØÔ$Ø�
ßðÜ×&Ñ& tÕ2ð	 ð	Ø•/ "Õ%ˆCð
 �}Š}˜SÐ' 3Ó'Ð'øô !ô Ø’Jðûô ô 	Ü×0Ñ0°°wÓ?×FÑF×LÐLÈ"ˆIØÔ$Øñ %ð	ûô" œ8Ð$ô 	Ü Ø0°°Ð7óàðûð	úsB   Á+D
 Â<C7 ÃE Ã7DÄDÄ
1E	Ä<
E	ÅE	ÅE1ÅE,Å,E1c                ó²  <€ \         SV `  V4      p\        V\        4      '       d±   VP                  P
                  eƒ   VP                  \        V 4      4      p\        VP                  P                  \        P                  4      '       d3   VP                  V P                  P                  VP                  3R7      # V# VP                  \        R7      # V# )Nr§   )rB   )ra   r‚   r3   rœ   r5   r(   ru   rB   r«   rp   rq   )r&   rƒ   ry   rd   s   && €r   r‚   Úrecarray.__getitem__æ  s™   ø€ Ü‰gÑ! $Ó'ˆô �cœ7×#Ò#Ø�y‰y�‰Ò*Ø—h‘hœt D›zÓ*�Ü˜cŸi™iŸn™n¬b¯g©g×6Ò6ØŸ8™8¨4¯:©:¯?©?¸C¿I¹IÐ*F˜8ÓGÐGØ�
à—x‘x¤W�xÓ-Ð-ð ˆJr.   c                ód  € V P                   pV P                   P                  \        J g5   \        V P                   P                  \        P
                  4      '       g@   VP                  \        J d'   \        P                   ! \        P
                  V34      pR pRpMRpRpV P                  ^ 8”  g   V P                  R
8X  d   \        P                  ! V RVRR7      pMR\        V P                  4       2pRR	\        V4      ,          ,           p\        4       ^q8:  d
   R	V,           pW4WQ3,          # )z
rec.array(zrec.array(%s,%sdtype=%s)zarray(z)array(%s,%sdtype=%s).view(numpy.recarray)z, rA   )Ú	separatorÚprefixÚsuffixz
[], shape=r‹   Ú ©é    )r5   rB   r   r«   rp   rq   r4   ÚsizerŸ   Úarray2stringrG   r:   r   )r&   Ú
repr_dtyper¹   r�   ÚlstÚlfs   &     r   rb   Úrecarray.__repr__÷  sì   € à—Z‘Zˆ
à�J‰J�O‰OœvÓ%Ü˜4Ÿ:™:Ÿ?™?¬B¯G©G×4Ò4ð �‰¤&Ó(ÜŸXšX¤r§w¡w°
Ð&;Ó<�
Ø!ˆFØ,‰Cð
 ˆFØ=ˆCð �9‰9�qŒ=˜DŸJ™J¨$Ô.Ü—/’/Ø ¨V¸CôA‰Cð œt D§J¡JÓ/Ð0Ð1ˆCà�Cœ#˜f›+Õ%Õ%ˆÜ!Ó# sÔ*Ø�r•ˆBØ˜2Ð*Õ*Ð*r.   c                óŠ  € \        V\        4      '       d)   \        P                  V R 4      P                  pW1,          p\        P                  V R 4      P
                  pWA,          R,          pVf@   V P                  ! V!  pVP                  P                  e   V# VP                  \        4      # V P                  ! V.VO5!  # )r5   rj   )
r3   Úintrœ   rr   r(   r7   ro   r5   ru   ri   )r&   rv   r   r(   rw   rx   ry   s   &&&    r   ÚfieldÚrecarray.field  s›   € Ü�dœC× Ò Ü×,Ñ,¨T°7Ó;×AÑAˆEØ•;ˆDä×,Ñ,¨T°7Ó;×BÑBˆ	à�o˜bÕ!ˆàŠ;Ø—-’- Ñ%ˆCØ�y‰y�‰Ò*Ø�
Ø—8‘8œGÓ$Ð$à—=’= Ð+ sÓ+Ð+r.   r§   )
NNr½   NNNNNFÚCr"   )rS   rT   rU   rV   rW   r�   r¤   rr   r~   r‚   rb   rÆ   rX   rY   r”   r•   s   @@r   r	   r	     s7   ù‡ € ñgôRò,$ò%òD#(õJò""+÷H,ô ,r.   c                 óR   € V ^ 8X  d    \         P                  ! R\        ^R7       R# V # )r½   z¹Passing `shape=0` to have the shape be inferred is deprecated, and in future will be equivalent to `shape=(0,)`. To infer the shape and suppress this warning, pass `shape=None` instead.©Ú
stacklevelN)ÚwarningsÚwarnÚFutureWarning)rŸ   s   &r   Ú_deprecate_shape_0_as_NonerÏ   -  s,   € Ø�„zÜ�ŠðNô  aõ		)ñ
 àˆr.   c                ó&  € V  Uu. uF  p\         P                  ! V4      NK  	  p p\        V4      pVf   V ^ ,          P                  pM\	        V\
        4      '       d   V3pVf   Vf   V  U	u. uF  q™P                  NK  	  pp	Ve   \         P                  ! V4      p
M\        W4WVV4      P                  p
V
P                  p\        V
4      \        V 4      8w  d   \        R4      hV
^ ,          P                  p\        V4      pV^ 8”  d   VRV)  p\        W*4      p\        V 4       F\  w  rùW¯,          P                  pV	P                  RV	P                  V,
           pW¿,          pVV8w  d   \        RV RV R24      hWžV&   K^  	  V# u upi u up	i )a  Create a record array from a (flat) list of arrays

Parameters
----------
arrayList : list or tuple
    List of array-like objects (such as lists, tuples,
    and ndarrays).
dtype : data-type, optional
    valid dtype for all arrays
shape : int or tuple of ints, optional
    Shape of the resulting array. If not provided, inferred from
    ``arrayList[0]``.
formats, names, titles, aligned, byteorder :
    If `dtype` is ``None``, these arguments are passed to
    `numpy.rec.format_parser` to construct a dtype. See that function for
    detailed documentation.

Returns
-------
np.recarray
    Record array consisting of given arrayList columns.

Examples
--------
>>> x1=np.array([1,2,3,4])
>>> x2=np.array(['a','dd','xyz','12'])
>>> x3=np.array([1.1,2,3,4])
>>> r = np.rec.fromarrays([x1,x2,x3],names='a,b,c')
>>> print(r[1])
(2, 'dd', 2.0) # may vary
>>> x1[1]=34
>>> r.a
array([1, 2, 3, 4])

>>> x1 = np.array([1, 2, 3, 4])
>>> x2 = np.array(['a', 'dd', 'xyz', '12'])
>>> x3 = np.array([1.1, 2, 3,4])
>>> r = np.rec.fromarrays(
...     [x1, x2, x3],
...     dtype=np.dtype([('a', np.int32), ('b', 'S3'), ('c', np.float32)]))
>>> r
rec.array([(1, b'a', 1.1), (2, b'dd', 2. ), (3, b'xyz', 3. ),
           (4, b'12', 4. )],
          dtype=[('a', '<i4'), ('b', 'S3'), ('c', '<f4')])
Nz>mismatch between the number of fields and the number of arrayszarray-shape mismatch in array z ("z"))r4   ÚasarrayrÏ   rŸ   r3   rÅ   r5   r
   r(   r:   r2   r	   r6   Úndim)Ú	arrayListr5   rŸ   r'   r(   r)   r*   r+   Úxry   r¡   rI   Úd0ÚnnÚ_arrayÚkÚ	testshaperˆ   s   &&&&&&&&          r   Ú
fromarraysrÚ   9  sy  € ñb )2Ó2©	 1”—’˜A–©	€IÐ2ô ' uÓ-€Eà‚}Ø˜!•×"Ñ"‰Ü	�Eœ3×	Ò	Ø�ˆà‚˜5š=ñ )2Ó2©	 —9”9©	ˆÐ2àÒÜ—’˜“‰ä˜g¨f¸yÓI×OÑOˆØ�[‰[€Fô ˆ5ƒz”S˜“^Ô#Üð +ó ,ð 	,ð 
ˆq��‰€BÜ	ˆR‹€BØ	ˆA„vØ�d˜�s�ˆä�eÓ#€Fô ˜IÖ&‰ˆØ�X�]‰]ˆØ—I‘I˜n˜sŸx™x¨"�}Ð-ˆ	Ø�yˆØ˜ÔÜÐ=¸a¸SÀÀDÀ6ÈÐLÓMÐMàˆt‹ñ 'ð €MùòW 3ùò 3s   …F	Á.Fc           
     óž  € Vf†   Vf‚   \         P                  ! V \        R7      p\        VP                  R,          4       U	u. uF0  p	\         P                  ! VRV	3,          P                  4       4      NK2  	  p
p	\        W£W$WVVR7      # Ve   \         P                  ! \        V34      pM\        W4WVV4      P                  p \         P                  ! WR7      pVe   VP                  V8w  d   W,n        TP-                  \         4      pT# u up	i   \        \        3 d«    \        T4      pTf   \        T 4      p\        T\        4      '       d   T3p\        T4      ^8”  d   \        R4      h\!        Y+4      p\        TP"                  4       F  p\%        Y,          4      YÞ&   K  	  \&        P(                  ! R\*        ^R7       Tu # i ; i)av  Create a recarray from a list of records in text form.

Parameters
----------
recList : sequence
    data in the same field may be heterogeneous - they will be promoted
    to the highest data type.
dtype : data-type, optional
    valid dtype for all arrays
shape : int or tuple of ints, optional
    shape of each array.
formats, names, titles, aligned, byteorder :
    If `dtype` is ``None``, these arguments are passed to
    `numpy.format_parser` to construct a dtype. See that function for
    detailed documentation.

    If both `formats` and `dtype` are None, then this will auto-detect
    formats. Use list of tuples rather than list of lists for faster
    processing.

Returns
-------
np.recarray
    record array consisting of given recList rows.

Examples
--------
>>> r=np.rec.fromrecords([(456,'dbe',1.2),(2,'de',1.3)],
... names='col1,col2,col3')
>>> print(r[0])
(456, 'dbe', 1.2)
>>> r.col1
array([456,   2])
>>> r.col2
array(['dbe', 'de'], dtype='<U3')
>>> import pickle
>>> pickle.loads(pickle.dumps(r))
rec.array([(456, 'dbe', 1.2), (  2, 'de', 1.3)],
          dtype=[('col1', '<i8'), ('col2', '<U3'), ('col3', '<f8')])
r§   .)r'   rŸ   r(   r)   r*   r+   zCan only deal with 1-d array.zxfromrecords expected a list of tuples, may have received a list of lists instead. In the future that will raise an errorrÊ   éÿÿÿÿ)r4   Úarrayr¨   rJ   rŸ   ÚtolistrÚ   r5   r   r
   r©   r2   rÏ   r:   r3   rÅ   r	   r¾   rC   rÌ   rÍ   rÎ   ru   )ÚrecListr5   rŸ   r'   r(   r)   r*   r+   ry   r   Úarrlistr¡   Úretvalr×   rØ   rx   s   &&&&&&&&        r   Úfromrecordsrâ   ˜  s—  € ðX ‚˜5š=Ü�hŠh�w¤fÔ-ˆä49¸#¿)¹)ÀB½-Ô4Hó
Ù4H¨qŒB�HŠH�S˜˜a˜•[×'Ñ'Ó)Ö*Ñ4Hð 	ð 
ô ˜'¸%Ø!'ÀIôOð 	Oð ÒÜ—’œ& %˜Ó)‰äØ˜F¨Yó
ç
‰%ð 	ð!Ü—’˜'Ô/ˆð* Ò §¡°Ô!6Ø ŒLà
�+‰+”hÓ
€Cà€JùòQ
øô ”zÐ"ô ä*¨5Ó1ˆØŠ=Ü˜“LˆEÜ�eœS×!Ò!Ø�HˆEÜˆu‹:˜Œ>ÜÐ<Ó=Ð=Ü˜%Ó'ˆÜ�v—{‘{Ö#ˆAÜ˜g�jÓ)ˆF‹Iñ $ô 	�ŠðGä aõ	)ð Šð%ús   Á6DÃD ÄB8GÇGc	                ó  € Vf   Vf   \        R4      hVe   \        P                  ! V4      p	M\        WEWgV4      P                  p	V	P                  p
\        V4      pVR9   d   \        V 4      V,
          V
,          p\        W)WR7      pV# )a0  Create a record array from binary data

Note that despite the name of this function it does not accept `str`
instances.

Parameters
----------
datastring : bytes-like
    Buffer of binary data
dtype : data-type, optional
    Valid dtype for all arrays
shape : int or tuple of ints, optional
    Shape of each array.
offset : int, optional
    Position in the buffer to start reading from.
formats, names, titles, aligned, byteorder :
    If `dtype` is ``None``, these arguments are passed to
    `numpy.format_parser` to construct a dtype. See that function for
    detailed documentation.


Returns
-------
np.recarray
    Record array view into the data in datastring. This will be readonly
    if `datastring` is readonly.

See Also
--------
numpy.frombuffer

Examples
--------
>>> a = b'\x01\x02\x03abc'
>>> np.rec.fromstring(a, dtype='u1,u1,u1,S3')
rec.array([(1, 2, 3, b'abc')],
        dtype=[('f0', 'u1'), ('f1', 'u1'), ('f2', 'u1'), ('f3', 'S3')])

>>> grades_dtype = [('Name', (np.str_, 10)), ('Marks', np.float64),
...                 ('GradeLevel', np.int32)]
>>> grades_array = np.array([('Sam', 33.3, 3), ('Mike', 44.4, 5),
...                         ('Aadi', 66.6, 6)], dtype=grades_dtype)
>>> np.rec.fromstring(grades_array.tobytes(), dtype=grades_dtype)
rec.array([('Sam', 33.3, 3), ('Mike', 44.4, 5), ('Aadi', 66.6, 6)],
        dtype=[('Name', '<U10'), ('Marks', '<f8'), ('GradeLevel', '<i4')])

>>> s = '\x01\x02\x03abc'
>>> np.rec.fromstring(s, dtype='u1,u1,u1,S3')
Traceback (most recent call last):
   ...
TypeError: a bytes-like object is required, not 'str'
z2fromstring() needs a 'dtype' or 'formats' argument)r    rš   )NrÜ   )r©   r4   r5   r
   ÚitemsizerÏ   r:   r	   )Ú
datastringr5   rŸ   rš   r'   r(   r)   r*   r+   r¡   rä   r×   s   &&&&&&&&&   r   Ú
fromstringræ   ñ  s‚   € ðp ‚}˜šÜÐLÓMÐMàÒÜ—’˜“‰ä˜g¨f¸yÓI×OÑOˆà�~‰~€Hô ' uÓ-€Eà�
ÔÜ�Z“ 6Õ)¨hÕ6ˆä�e¨
ÔB€FØ€Mr.   c                 óÈ   € V P                  4       p V P                  ^ ^4       V P                  4       V,
          V P                  V^ 4       #   T P                  T^ 4       i ; ir¼   )ÚtellÚseek)ÚfdÚposs   & r   Úget_remaining_sizerì   <  sG   € Ø
�'‰'‹)€CðØ
�‰��1ŒØ�w‰w‹y˜3�à
�‰��Q�øˆ�‰��Q�ús   ’(A ÁA!c	           	     ó  € Vf   Vf   \        R4      h\        V4      pVf   R	pM\        V\        4      '       d   V3p\	        V R4      '       d   \        V 4      p	M \        \        P                  ! V 4      R4      p	T	;_uu_ 4       p V^ 8”  d   V P                  V^4       \        V 4      p
Ve   \        P                  ! V4      pM\        WEWgV4      P                  pVP                  p\        P                  ! V4      P!                  \"        P$                  R7      pWÜ,          pV^ 8  de   \'        V4      pW®) ,          W"P)                  R4      &   \+        V4      p\        P                  ! V4      P!                  \"        P$                  R7      pWÜ,          pWú8”  d   \-        R4      h\/        W+4      pV P1                  VP2                  4      pVV8w  d   \5        R4      h RRR4       V#   + '       g   i     X# ; i)
ah  Create an array from binary file data

Parameters
----------
fd : str or file type
    If file is a string or a path-like object then that file is opened,
    else it is assumed to be a file object. The file object must
    support random access (i.e. it must have tell and seek methods).
dtype : data-type, optional
    valid dtype for all arrays
shape : int or tuple of ints, optional
    shape of each array.
offset : int, optional
    Position in the file to start reading from.
formats, names, titles, aligned, byteorder :
    If `dtype` is ``None``, these arguments are passed to
    `numpy.format_parser` to construct a dtype. See that function for
    detailed documentation

Returns
-------
np.recarray
    record array consisting of data enclosed in file.

Examples
--------
>>> from tempfile import TemporaryFile
>>> a = np.empty(10,dtype='f8,i4,a5')
>>> a[5] = (0.5,10,'abcde')
>>>
>>> fd=TemporaryFile()
>>> a = a.view(a.dtype.newbyteorder('<'))
>>> a.tofile(fd)
>>>
>>> _ = fd.seek(0)
>>> r=np.rec.fromfile(fd, formats='f8,i4,a5', shape=10,
... byteorder='<')
>>> print(r[5])
(0.5, 10, b'abcde')
>>> r.shape
(10,)
Nz0fromfile() needs a 'dtype' or 'formats' argumentÚreadintoÚrbr§   z;Not enough bytes left in file for specified shape and type.z%Didn't read as many bytes as expectedrÜ   )rÜ   )r©   rÏ   r3   rÅ   Úhasattrr   ÚopenÚosÚfspathré   rì   r4   r5   r
   rä   rÝ   Úprodrp   Úintpr   ÚindexrC   r2   r	   rî   ÚdataÚOSError)rê   r5   rŸ   rš   r'   r(   r)   r*   r+   Úctxr¾   r¡   rä   Ú	shapeprodÚ	shapesizeÚnbytesr×   Ú
nbytesreads   &&&&&&&&&         r   Úfromfilerþ   E  s¸  € ð\ ‚}˜šÜÐJÓKÐKô ' uÓ-€Eà‚}Ø‰Ü	�Eœ3×	Ò	Ø�ˆäˆr�:×Òô ˜"‹o‰ô ”2—9’9˜R“= $Ó'ˆç	‰�Ø�AŒ:Ø�G‰G�F˜AÔÜ! "Ó%ˆàÒÜ—H’H˜U“O‰Eä!Ø °óç‰eð ð —>‘>ˆä—H’H˜U“O×(Ñ(¬r¯w©wÐ(Ó7ˆ	ØÕ(ˆ	Ø�qŒ=Ü˜“KˆEØ%)¨ZÕ%7ˆE—+‘+˜b“/Ñ"Ü˜%“LˆEÜŸš ›×,Ñ,´2·7±7Ð,Ó;ˆIàÕ%ˆàŒ=Üð&óð ô ˜%Ó'ˆØ—[‘[ §¡Ó-ˆ
Ø˜ÔÜÐAÓBÐBð  ÷C 
ðH €M÷I 
ŽðH €Mús   ÂEG-Ç-G>	c           
     ó2  € \        V \        R4      \        34      '       g   \        V R4      '       d   Vf   Vf   \	        R4      h/ pVe   \
        P                  ! V4      pM(Ve   \        WVVW‰4      P                  pMRVRVRVRVRV	/pV f   Vf   \	        R	4      h\        W!WVR
7      # \        V \        4      '       d   \        W3RVRV/VB # \        V \        \        34      '       dD   \        V ^ ,          \        \        34      '       d   \        V 3RVRV/VB # \        V 3RVRV/VB # \        V \        4      '       dD   Ve$   V P                  V8w  d   V P                  V4      pMT pV
'       d   VP!                  4       pV# \        V R4      '       d   \#        WW#R7      # \        V \$        4      '       dW   Ve$   V P                  V8w  d   V P                  V4      pMT pV
'       d   VP!                  4       pVP                  \        4      # \'        V RR4      pVe   \        V\(        4      '       g   \	        R4      h\
        P*                  ! V 4      p Ve#   V P                  V8w  d   V P                  V4      p V P                  \        4      # )az	  
Construct a record array from a wide-variety of objects.

A general-purpose record array constructor that dispatches to the
appropriate `recarray` creation function based on the inputs (see Notes).

Parameters
----------
obj : any
    Input object. See Notes for details on how various input types are
    treated.
dtype : data-type, optional
    Valid dtype for array.
shape : int or tuple of ints, optional
    Shape of each array.
offset : int, optional
    Position in the file or buffer to start reading from.
strides : tuple of ints, optional
    Buffer (`buf`) is interpreted according to these strides (strides
    define how many bytes each array element, row, column, etc.
    occupy in memory).
formats, names, titles, aligned, byteorder :
    If `dtype` is ``None``, these arguments are passed to
    `numpy.format_parser` to construct a dtype. See that function for
    detailed documentation.
copy : bool, optional
    Whether to copy the input object (True), or to use a reference instead.
    This option only applies when the input is an ndarray or recarray.
    Defaults to True.

Returns
-------
np.recarray
    Record array created from the specified object.

Notes
-----
If `obj` is ``None``, then call the `~numpy.recarray` constructor. If
`obj` is a string, then call the `fromstring` constructor. If `obj` is a
list or a tuple, then if the first object is an `~numpy.ndarray`, call
`fromarrays`, otherwise call `fromrecords`. If `obj` is a
`~numpy.recarray`, then make a copy of the data in the recarray
(if ``copy=True``) and use the new formats, names, and titles. If `obj`
is a file, then call `fromfile`. Finally, if obj is an `ndarray`, then
return ``obj.view(recarray)``, making a copy of the data if ``copy=True``.

Examples
--------
>>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> a
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

>>> np.rec.array(a)
rec.array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]],
          dtype=int64)

>>> b = [(1, 1), (2, 4), (3, 9)]
>>> c = np.rec.array(b, formats = ['i2', 'f2'], names = ('x', 'y'))
>>> c
rec.array([(1, 1.), (2, 4.), (3, 9.)],
          dtype=[('x', '<i2'), ('y', '<f2')])

>>> c.x
array([1, 2, 3], dtype=int16)

>>> c.y
array([1.,  4.,  9.], dtype=float16)

>>> r = np.rec.array(['abc','def'], names=['col1','col2'])
>>> print(r.col1)
abc

>>> r.col1
array('abc', dtype='<U3')

>>> r.col2
array('def', dtype='<U3')
Nrî   zIMust define formats (or dtype) if object is None, string, or an open filer'   r(   r)   r*   r+   z"Must define a shape if obj is None)r    rš   r›   rŸ   rš   r5   )r5   rŸ   rš   Ú__array_interface__zUnknown input type)r3   rB   rD   rð   r2   r4   r5   r
   r	   Úbytesræ   r   rC   râ   rÚ   ru   Úcopyrþ   rœ   r}   ÚdictrÝ   )ry   r5   rŸ   rš   r›   r'   r(   r)   r*   r+   r  ÚkwdsÚnewÚ	interfaces   &&&&&&&&&&&   r   rÝ   rÝ   ®  sX  € ôl 
�Cœ$˜t›*¤cÐ*×	+Ò	+¬w°s¸J×/GÒ/GØŠ?˜uš}Üð 9ó :ð 	:ð €DØÒÜ—’˜“‰Ø	Ò	Ü˜g¨fØ%ó2ß27±%ñ 	ð ˜7Ø˜Ø˜&Ø˜7Ø˜Yð	ˆð ‚{ØŠ=ÜÐAÓBÐBÜ˜¨#ÀgÔNÐNä	�Cœ×	Ò	Ü˜#ÑI¨EÐI¸&ÐIÀDÑIÐIä	�Cœ$¤˜×	'Ò	'Ü�c˜!•fœu¤d˜m×,Ò,Ü˜sÑE¨%ÐE°uÐEÀÑEÐEä˜cÑD¨ÐD°eÐD¸tÑDÐDä	�Cœ×	"Ò	"ØÒ #§)¡)¨uÔ"4Ø—(‘(˜5“/‰CàˆCßØ—(‘(“*ˆCØˆ
ä	��j×	!Ò	!Ü˜°ÔEÐEä	�Cœ×	!Ò	!ØÒ #§)¡)¨uÔ"4Ø—(‘(˜5“/‰CàˆCßØ—(‘(“*ˆCØ�x‰xœÓ!Ð!ô ˜CÐ!6¸Ó=ˆ	ØÒ¤J¨y¼$×$?Ò$?ÜÐ1Ó2Ð2Ü�hŠh�s‹mˆØÒ #§)¡)¨uÔ"4Ø—(‘(˜5“/ˆCØ�x‰xœÓ!Ð!r.   )	r   r	   r
   rÚ   râ   ræ   rþ   rÝ   r   )NNNNNFN)NNr½   NNNFN)
NNr½   NNNNFNT)!rW   rò   rÌ   Úcollectionsr   Ú
contextlibr   Únumpy._utilsr   Ú r   r4   r   rp   Ú
arrayprintr   Ú__all__rœ   rP   Ú
sctypeDictÚnumfmtr   r
   rq   r   r	   rÏ   rÚ   râ   ræ   rì   rþ   rÝ   r“   r.   r   Ú<module>r     s•  ðñó 
Û Ý Ý "å #å Ý  Ý .ò€ð �*‰*€à�sØ�sØ�sØ�sØ�sØ�sØ�sØ�sØ�sØ�sØ�sØ�sØ�sØ�sð€ð( 
�‰€ñ ˆKÓñó ðñ ˆKÓ÷Hð Hó ðHôVHˆR�W‰Wô Hñf ˆKÓôQ,ˆwó Q,ó ðQ,òh	ñ ˆKÓó[ó ð[ñ| ˆKÓóUó ðUñp ˆKÓóHó ðHòTñ ˆKÓóeó ðeñP ˆKÓóR"ó òR"r.   