hyb
2025-12-31 6cdcd01f77e11b72c323603e27ebdb85b15223c9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
Ë
Kñúh$ïãój—dZddlZddlZddlmZddlmcmZddl    m
Z
ddl m Z gd¢Z d„Ze
e«d„«Zd„Zd    „Zd
„Zd „Zd7d „Zd7d „Zd8d„Zd„Zd„Zd9d„Zd:d„Zd;d„Z        d<d„Ze
e«        d=d„«Zd8d„Ze
e«d:d„«Zd:d„Z d„Z!e
e!«d„«Z"d„Z#e
e#«d„«Z$        d<d„Z%e
e%«        d>d„«Z&d;d„Z'e
e'«d;d „«Z(d8d!„Z)e
e)«d?d"„«Z*d@d#„Z+d$„Z,        dAd%„Z-e
e-«dBd&„«Z.        dCd'„Z/e
e/«        dDd(„«Z0d)„Z1e
e1«d*„«Z2d;d+„Z3e
e3«dEd,„«Z4d-„Z5e
e5«d.„«Z6        d<d/„Z7e
e7«        dFd0„«Z8    dAd1„Z9e
e9«dGd2„«Z:        dHd3„Z;e
e;«        dId4„«Z<        d<d5„Z=e
e=«        dJd6„«Z>[
y)KzÆ
Collection of utilities to manipulate structured arrays.
 
Most of these functions were initially implemented by John Hunter for
matplotlib.  They have been rewritten and extended for convenience.
 
éN)Úarray_function_dispatch)Ú_is_string_like)Ú append_fieldsÚapply_along_fieldsÚassign_fields_by_nameÚ drop_fieldsÚfind_duplicatesÚ flatten_descrÚget_fieldstructureÚ    get_namesÚget_names_flatÚjoin_byÚ merge_arraysÚrec_append_fieldsÚrec_drop_fieldsÚrec_joinÚrecursive_fill_fieldsÚ rename_fieldsÚ repack_fieldsÚrequire_fieldsÚ stack_arraysÚstructured_to_unstructuredÚunstructured_to_structuredcó
—||fS©N©)ÚinputÚoutputs  úIH:\Change_password\venv_build\Lib\site-packages\numpy/lib/recfunctions.pyÚ!_recursive_fill_fields_dispatcherr s €Ø 6ˆ?Ðócóؗ|j}|jD]?}    ||}|jjt|||«Œ/|||dt    |«ŒA|S#t$rYŒOwxYw)a…
    Fills fields from output with fields from input,
    with support for nested structures.
 
    Parameters
    ----------
    input : ndarray
        Input array.
    output : ndarray
        Output array.
 
    Notes
    -----
    * `output` should be at least the same size as `input`
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> a = np.array([(1, 10.), (2, 20.)], dtype=[('A', np.int64), ('B', np.float64)])
    >>> b = np.zeros((3,), dtype=a.dtype)
    >>> rfn.recursive_fill_fields(a, b)
    array([(1, 10.), (2, 20.), (0,  0.)], dtype=[('A', '<i8'), ('B', '<f8')])
 
    N)ÚdtypeÚnamesÚ
ValueErrorrÚlen)rrÚnewdtypeÚfieldÚcurrents     rrrs}€ð6|‰|€HØ—‘ò3ˆð    Ø˜E‘lˆGð =‰=× Ñ Ð *Ü ! '¨6°%©=Õ 9à+2ˆF5‰M˜-œ3˜w›<Ñ (ð3ð €Møô ò    Ù ð    úsAÁ    A)Á(A)c󺇗‰j€d‰fgSˆfd„‰jD«}|Dcgc]!\}}t|«dk(r|n|d|f|df‘Œ#c}}Scc}}w)am
    Produce a list of name/dtype pairs corresponding to the dtype fields
 
    Similar to dtype.descr, but the second item of each tuple is a dtype, not a
    string. As a result, this handles subarray dtypes
 
    Can be passed to the dtype constructor to reconstruct the dtype, noting that
    this (deliberately) discards field offsets.
 
    Examples
    --------
    >>> import numpy as np
    >>> dt = np.dtype([(('a', 'A'), np.int64), ('b', np.double, 3)])
    >>> dt.descr
    [(('a', 'A'), '<i8'), ('b', '<f8', (3,))]
    >>> _get_fieldspec(dt)
    [(('a', 'A'), dtype('int64')), ('b', dtype(('<f8', (3,))))]
 
    Úc3ó@•K—|]}|‰j|f–—Œy­wr)Úfields)Ú.0Únamer#s  €rú    <genexpr>z!_get_fieldspec.<locals>.<genexpr>_søèø€ÒE°4˜Ÿ™ dÑ+Ô,ÑEùsƒér)r$r&)r#r-r/Úfs`   rÚ_get_fieldspecr3Gslø€ð( ‡{{ÐàU ˆ}ÐãE¸¿¹ÔEˆð"÷
ᐐaô˜“V˜q’[‰T q¨¡t¨T l°A°a±DÒ 9ó
ð    
ùó
s­&Ac    óҗg}|j}|D]J}||}|j&|j|tt|««f«Œ:|j|«ŒLt|«S)ab
    Returns the field names of the input datatype as a tuple. Input datatype
    must have fields otherwise error is raised.
 
    Parameters
    ----------
    adtype : dtype
        Input datatype
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> rfn.get_names(np.empty((1,), dtype=[('A', int)]).dtype)
    ('A',)
    >>> rfn.get_names(np.empty((1,), dtype=[('A',int), ('B', float)]).dtype)
    ('A', 'B')
    >>> adtype = np.dtype([('a', int), ('b', [('ba', int), ('bb', int)])])
    >>> rfn.get_names(adtype)
    ('a', ('b', ('ba', 'bb')))
    )r$ÚappendÚtupler ©ÚadtypeÚ    listnamesr$r/r)s     rr r gsl€ð,€IØ L‰L€EØò#ˆØ˜‘,ˆØ =‰=Ð $Ø × Ñ ˜d¤E¬)°GÓ*<Ó$=Ð>Õ ?à × Ñ ˜TÕ "ð #ô Ó Ðr!có¼—g}|j}|D]?}|j|«||}|j€Œ&|jt|««ŒAt    |«S)a¡
    Returns the field names of the input datatype as a tuple. Input datatype
    must have fields otherwise error is raised.
    Nested structure are flattened beforehand.
 
    Parameters
    ----------
    adtype : dtype
        Input datatype
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> rfn.get_names_flat(np.empty((1,), dtype=[('A', int)]).dtype) is None
    False
    >>> rfn.get_names_flat(np.empty((1,), dtype=[('A',int), ('B', str)]).dtype)
    ('A', 'B')
    >>> adtype = np.dtype([('a', int), ('b', [('ba', int), ('bb', int)])])
    >>> rfn.get_names_flat(adtype)
    ('a', 'b', 'ba', 'bb')
    )r$r5Úextendr r6r7s     rr r ˆsb€ð.€IØ L‰L€EØò6ˆØ×Ñ˜ÔØ˜‘,ˆØ =‰=Ñ $Ø × Ñ œ^¨GÓ4Õ 5ð    6ô
Ó Ðr!cóè—|j}|€d|ffSg}|D]N}|j|\}}|j|jt|««Œ<|j    ||f«ŒPt |«S)a_
    Flatten a structured data-type description.
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> ndtype = np.dtype([('a', '<i4'), ('b', [('ba', '<f8'), ('bb', '<i4')])])
    >>> rfn.flatten_descr(ndtype)
    (('a', dtype('int32')), ('ba', dtype('float64')), ('bb', dtype('int32')))
 
    r+)r$r-r;r
r5r6)Úndtyper$Údescrr(ÚtypÚ_s      rr
r
©s{€ð L‰L€EØ €}ؐV ˆÐàˆØò    +ˆEØ—}‘} UÑ+‰HˆS!؏y‰yÐ$Ø— ‘ œ]¨3Ó/Õ0à— ‘ ˜e S˜\Õ*ð     +ô U‹|Ðr!cóV—g}|r,|D]&}|jt|j««Œ(ne|D]`}|j}|j3t    |j«dk(r|jt |««ŒN|j d|f«Œbtj|«S)Nér+)r;r
r#r$r&r3r5Únp)Ú    seqarraysÚflattenr'Úar)s     rÚ
_zip_dtyperGÄs”€Ø€HÙØò    4ˆAØ O‰OœM¨!¯'©'Ó2Õ 3ñ    4ðò    /ˆAØ—g‘gˆG؏}‰}Ð(¬S°·±Ó-?À1Ò-Dà—‘¤¨wÓ 7Õ8à—‘  W  Õ.ð     /ô 8‰8HÓ Ðr!có0—t||¬«jS)zî
    Combine the dtype description of a series of arrays.
 
    Parameters
    ----------
    seqarrays : sequence of arrays
        Sequence of arrays
    flatten : {boolean}, optional
        Whether to collapse nested descriptions.
    ©rE)rGr>)rDrEs  rÚ
_zip_descrrJÔs€ô i¨Ô 1× 7Ñ 7Ð7r!có.—|€i}|j}|D]}||}|j+|r|g||<ng||<|jt|||««Œ?t|j    |g«xsg«}|r|j |«n|r|g}|xsg||<Œ|S)a}
    Returns a dictionary with fields indexing lists of their parent fields.
 
    This function is used to simplify access to fields nested in other fields.
 
    Parameters
    ----------
    adtype : np.dtype
        Input datatype
    lastname : optional
        Last processed field name (used internally during recursion).
    parents : dictionary
        Dictionary of parent fields (used internally during recursion).
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> ndtype =  np.dtype([('A', int),
    ...                     ('B', [('BA', int),
    ...                            ('BB', [('BBA', int), ('BBB', int)])])])
    >>> rfn.get_fieldstructure(ndtype)
    ... # XXX: possible regression, order of BBA and BBB is swapped
    {'A': [], 'B': [], 'BA': ['B'], 'BB': ['B'], 'BBA': ['B', 'BB'], 'BBB': ['B', 'BB']}
 
    )r$Úupdater ÚlistÚgetr5)r8ÚlastnameÚparentsr$r/r)Ú
lastparents       rr r âs°€ð6€ØˆØ L‰L€EØò-ˆØ˜‘,ˆØ =‰=Ð $ÙØ!)  ˜’ à "˜‘ Ø N‰NÔ-¨g°t¸WÓEÕ Fä˜gŸk™k¨(°BÓ7Ò=¸2Ó>ˆJÙØ×!Ñ! (Õ+ÙØ&˜\
Ø&Ò,¨"ˆGDŠMð-ð €Nr!c#ó”K—|D]=}t|tj«rtt    |««Ed{–—†Œ:|–—Œ?y7Œ ­w)zu
    Returns an iterator of concatenated fields from a sequence of arrays,
    collapsing any nested structure.
 
    N)Ú
isinstancerCÚvoidÚ_izip_fields_flatr6©ÚiterableÚelements  rrUrUs?èø€ð òˆÜ gœrŸw™wÔ 'Ü(¬¨w«Ó8× 8Ñ 8à‹Mñ    à 8ús‚7A¹Aº Ac#óK—|D]{}t|d«r$t|t«st|«Ed{–—†Œ3t|tj
«r+t t|««dk(rt|«Ed{–—†Œx|–—Œ}y7ŒQ7Œ­w)zP
    Returns an iterator of concatenated fields from a sequence of arrays.
 
    Ú__iter__NrB)ÚhasattrrSÚstrÚ _izip_fieldsrCrTr&r6rVs  rr]r]suèø€ð
òˆÜ G˜ZÔ (ܘw¬Ô,Ü# GÓ,× ,Ñ ,Ü ˜¤§¡Ô )¬c´%¸³.Ó.AÀQÒ.Fä# GÓ,× ,Ñ ,à‹Mñð -øð -ús"‚0B²B³ABÁ7BÁ8 BÂBc#ó„K—|rt}nt}tj|d|iŽD]}t    ||««–—Œy­w)a*
    Returns an iterator of concatenated items from a sequence of arrays.
 
    Parameters
    ----------
    seqarrays : sequence of arrays
        Sequence of arrays.
    fill_value : {None, integer}
        Value used to pad shorter iterables.
    flatten : {True, False},
        Whether to
    Ú    fillvalueN)rUr]Ú    itertoolsÚ zip_longestr6)rDÚ
fill_valuerEÚzipfuncÚtups     rÚ _izip_recordsre/sCèø€ñÜ#‰äˆä×$Ñ$ iÐF¸:ÑFò"ˆÜ‘G˜C“LÓ!Ó!ñ"ùs‚>Acóô—t|tj«sd}|r#|r|jtj
«}|Stj |«}|r|jtj«}|S)z€
    Private function: return a recarray, a ndarray, a MaskedArray
    or a MaskedRecords depending on the input parameters
    F)    rSÚmaÚ MaskedArrayÚviewÚmrecÚ MaskedRecordsÚfilledrCÚrecarray)rÚusemaskÚ
asrecarrays   rÚ _fix_outputrpGsb€ô
fœbŸn™nÔ -؈ÙÙ Ø—[‘[¤×!3Ñ!3Ó4ˆFð
€Mô—‘˜6Ó"ˆÙ Ø—[‘[¤§¡Ó-ˆFØ €Mr!cóܗ|jj}|j|j|j}}}|xsij «D]\}}||vsŒ |||<|||||<Œ|S)zp
    Update the fill_value and masked data of `output`
    from the default given in a dictionary defaults.
    )r#r$ÚdataÚmaskrbÚitems)rÚdefaultsr$rrrsrbÚkÚvs        rÚ _fix_defaultsrxXsw€ð
L‰L× Ñ €EØ &§ ¡ ¨V¯[©[¸&×:KÑ:Kˆ4€TØ’>˜r×(Ñ(Ó*ò!‰ˆˆAØ Š:؈Jq‰MØ ˆD‰GD˜‘GÒ ð!ð €Mr!có—|Srr)rDrbrErnros     rÚ_merge_arrays_dispatcherrzfs€à Ðr!c    ó$    —t|«dk(rtj|d«}t|tjtj
f«r³|j }|j€tj d|fg«}|rt|fd¬«|k(rl|j«}|r$|rtj}n4tj}n#|rtj}ntj}|j||¬«S|f}n"|Dcgc]}tj|«‘Œ}}t!d„|D««}t#|«}    t||¬«}
g} g} |rêt%||«D]`\} }|    |z
}| j«j'«}tj(| «j«}|r¼tj*|| j «}t|tjtj
f«rvt|j «dk(r|j-«d}d}nHtj.|| j d¬    «}tj0d
|j ¬ «}nd}d}| j3t5j6||g|z««| j3t5j6|g|z««Œct!t9| |¬««}tj.tj:||
|    ¬ «t=t9| |¬««¬ «}|r|jtj«}|St%||«D]î\} }|    |z
}| j«j'«}|r™tj*|| j «}t|tjtj
f«rQt|j «dk(r|j-«d}n%tj.|| j d¬    «}nd}| j3t5j6||g|z««Œðtj:t!t9| |¬««|
|    ¬ «}|r|jtj«}|Scc}w)am
    Merge arrays field by field.
 
    Parameters
    ----------
    seqarrays : sequence of ndarrays
        Sequence of arrays
    fill_value : {float}, optional
        Filling value used to pad missing data on the shorter arrays.
    flatten : {False, True}, optional
        Whether to collapse nested fields.
    usemask : {False, True}, optional
        Whether to return a masked array or not.
    asrecarray : {False, True}, optional
        Whether to return a recarray (MaskedRecords) or not.
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> rfn.merge_arrays((np.array([1, 2]), np.array([10., 20., 30.])))
    array([( 1, 10.), ( 2, 20.), (-1, 30.)],
          dtype=[('f0', '<i8'), ('f1', '<f8')])
 
    >>> rfn.merge_arrays((np.array([1, 2], dtype=np.int64),
    ...         np.array([10., 20., 30.])), usemask=False)
     array([(1, 10.0), (2, 20.0), (-1, 30.0)],
             dtype=[('f0', '<i8'), ('f1', '<f8')])
    >>> rfn.merge_arrays((np.array([1, 2]).view([('a', np.int64)]),
    ...               np.array([10., 20., 30.])),
    ...              usemask=False, asrecarray=True)
    rec.array([( 1, 10.), ( 2, 20.), (-1, 30.)],
              dtype=[('a', '<i8'), ('f1', '<f8')])
 
    Notes
    -----
    * Without a mask, the missing value will be filled with something,
      depending on what its corresponding type:
 
      * ``-1``      for integers
      * ``-1.0``    for floating point numbers
      * ``'-'``     for characters
      * ``'-1'``    for strings
      * ``True``    for boolean values
    * XXX: I just obtained these values empirically
    rBrNr+TrI)r#Útypec3ó4K—|]}|j–—Œy­wr)Úsize)r.rFs  rr0zmerge_arrays.<locals>.<genexpr>¹sèø€Ò,˜Q!—&•&Ñ,ùs‚)r#Úndmin)rB©r#)r#Úcount)rs)r&rCÚ
asanyarrayrSÚndarrayrTr#r$rGÚravelrjrkrgrhrmrir6ÚmaxÚzipÚ    __array__Ú getmaskarrayÚ_check_fill_valueÚitemÚarrayÚonesr5r`ÚchainreÚfromiterrM)rDrbrErnroÚseqdtypeÚseqtypeÚ_mÚsizesÚ    maxlengthr'ÚseqdataÚseqmaskrFÚnÚ    nbmissingrrrsÚfvalÚfmskrs                     rrrks’€ôd     ˆI‹˜!ÒÜ—M‘M )¨A¡,Ó/ˆ    ä)œbŸj™j¬"¯'©'Ð2Ô3Ø—?‘?ˆà >‰>Ð !Ü—x‘x " h Р0Ó1ˆHÙœ* i \¸4Ô@ÀHÒLà!Ÿ™Ó)ˆIáÙÜ"×0Ñ0‘Gä Ÿn™n‘GÙÜŸ+™+‘äŸ*™*Ø—>‘>¨°w>Ó?Ð ?à"˜ ‰Ið2;Ö;¨2”R—]‘] 2Õ&Ð;ˆ    Ð;ä Ñ, )Ô,Ó ,€EܐE“
€Iä˜)¨WÔ5€Hà€GØ€Gâܘ) UÓ+ó    F‰FˆQØ" Q™ˆIà—7‘7“9×&Ñ&Ó(ˆDÜ—?‘? 1Ó%×+Ñ+Ó-ˆDáÜ×-Ñ-¨j¸!¿'¹'ÓBÜ˜d¤R§Z¡Z´·±Ð$9Ô:ܘ4Ÿ:™:“¨!Ò+Ø#Ÿy™y›{¨1™~˜Ø#™ä!Ÿx™x¨°A·G±GÀ1ÔE˜Ü!Ÿw™w t°4·:±:Ô>™àØà N‰Nœ9Ÿ?™?¨4°$°¸)Ñ1CÓDÔ EØ N‰Nœ9Ÿ?™?¨4°$°¸)Ñ1CÓDÖ Eð)    Fô,”] 7°GÔ<Ó=ˆÜ—‘œ"Ÿ+™+ d°(À)ÔLÜ#¤M°'À7Ô$KÓLôNˆá Ø—[‘[¤×!3Ñ!3Ó4ˆFð* €Mô%˜) UÓ+ò     F‰FˆQØ" Q™ˆIØ—7‘7“9×&Ñ&Ó(ˆDÙÜ×-Ñ-¨j¸!¿'¹'ÓBÜ˜d¤R§Z¡Z´·±Ð$9Ô:ܘ4Ÿ:™:“¨!Ò+Ø#Ÿy™y›{¨1™~™ä!Ÿx™x¨°A·G±GÀ1ÔE™àØ N‰Nœ9Ÿ?™?¨4°$°¸)Ñ1CÓDÕ Eð     Fô—‘œU¤=°À'Ô#JÓKØ#+°9ô>ˆá Ø—[‘[¤§¡Ó-ˆFà €Mùòu<sÄR có—|fSrr)ÚbaseÚ
drop_namesrnros    rÚ_drop_fields_dispatcherrôó    €Ø ˆ7€Nr!cóއ—t|«r|g}n t|«}ˆfd„Љ|j|«}tj|j
|¬«}t ||«}t|||¬«S)a‰
    Return a new array with fields in `drop_names` dropped.
 
    Nested fields are supported.
 
    Parameters
    ----------
    base : array
        Input array
    drop_names : string or sequence
        String or sequence of strings corresponding to the names of the
        fields to drop.
    usemask : {False, True}, optional
        Whether to return a masked array or not.
    asrecarray : string or sequence, optional
        Whether to return a recarray or a mrecarray (`asrecarray=True`) or
        a plain ndarray or masked array with flexible dtype. The default
        is False.
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> a = np.array([(1, (2, 3.0)), (4, (5, 6.0))],
    ...   dtype=[('a', np.int64), ('b', [('ba', np.double), ('bb', np.int64)])])
    >>> rfn.drop_fields(a, 'a')
    array([((2., 3),), ((5., 6),)],
          dtype=[('b', [('ba', '<f8'), ('bb', '<i8')])])
    >>> rfn.drop_fields(a, 'ba')
    array([(1, (3,)), (4, (6,))], dtype=[('a', '<i8'), ('b', [('bb', '<i8')])])
    >>> rfn.drop_fields(a, ['ba', 'bb'])
    array([(1,), (4,)], dtype=[('a', '<i8')])
    cóĕ—|j}g}|D]K}||}||vrŒ |j ‰||«}|sŒ%|j||f«Œ9|j||f«ŒM|Sr)r$r5)r=rœr$r'r/r)r>Ú _drop_descrs       €rr¡z drop_fields.<locals>._drop_descr stø€Ø— ‘ ˆØˆØò        1ˆDؘT‘lˆGؐzÑ!ØØ}‰}Ð(Ù# G¨ZÓ8ÚØ—O‘O T¨5 MÕ2à—‘  w Õ0ð        1ðˆr!r€©rnro)rÚsetr#rCÚemptyÚshaperrp)r›rœrnror'rr¡s      @rrrøsdø€ôFzÔ"Ø \‰
䘓_ˆ
ô ñ˜4Ÿ:™: zÓ2€Hä X‰Xd—j‘j¨Ô 1€FÜ " 4¨Ó 0€FÜ v w¸:Ô FÐFr!có¾—|Dcgc]}||j|f‘Œ}}tj|j|¬«}t    ||«}t |||¬«Scc}w)aŒ
    Return a new array keeping only the fields in `keep_names`,
    and preserving the order of those fields.
 
    Parameters
    ----------
    base : array
        Input array
    keep_names : string or sequence
        String or sequence of strings corresponding to the names of the
        fields to keep. Order of the names will be preserved.
    usemask : {False, True}, optional
        Whether to return a masked array or not.
    asrecarray : string or sequence, optional
        Whether to return a recarray or a mrecarray (`asrecarray=True`) or
        a plain ndarray or masked array with flexible dtype. The default
        is False.
    r€r¢)r#rCr¤r¥rrp)r›Ú
keep_namesrnror–r'rs       rÚ _keep_fieldsr¨6sX€ð&-7Ö7 qD—J‘J˜q‘MÒ"Ð7€HÐ7Ü X‰Xd—j‘j¨Ô 1€FÜ " 4¨Ó 0€FÜ v w¸:Ô FÐFùò8s…Acó—|fSrr©r›rœs  rÚ_rec_drop_fields_dispatcherr«Oržr!có —t||dd¬«S)zK
    Returns a new numpy.recarray with fields in `drop_names` dropped.
    FTr¢)rrªs  rrrSs€ô
t˜Z°À4Ô HÐHr!có—|fSrr)r›Ú
namemappers  rÚ_rename_fields_dispatcherr¯[ržr!cóV‡—ˆfd„Љ|j|«}|j|«S)aÜ
    Rename the fields from a flexible-datatype ndarray or recarray.
 
    Nested fields are supported.
 
    Parameters
    ----------
    base : ndarray
        Input array whose fields must be modified.
    namemapper : dictionary
        Dictionary mapping old field names to their new version.
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> a = np.array([(1, (2, [3.0, 30.])), (4, (5, [6.0, 60.]))],
    ...   dtype=[('a', int),('b', [('ba', float), ('bb', (float, 2))])])
    >>> rfn.rename_fields(a, {'a':'A', 'bb':'BB'})
    array([(1, (2., [ 3., 30.])), (4, (5., [ 6., 60.]))],
          dtype=[('A', '<i8'), ('b', [('ba', '<f8'), ('BB', '<f8', (2,))])])
 
    cóЕ—g}|jD]S}|j||«}||}|j|j|‰||«f«ŒA|j||f«ŒU|Sr)r$rNr5)r=r®r'r/Únewnamer)Ú_recursive_rename_fieldss      €rr³z/rename_fields.<locals>._recursive_rename_fieldsxstø€ØˆØ—L‘Lò    4ˆDØ —n‘n T¨4Ó0ˆGؘT‘lˆG؏}‰}Ð(Ø—‘ØÑ6°wÀ
ÓKÐLõð—‘ ¨'Р2Õ3ð    4ðˆr!)r#ri)r›r®r'r³s   @rrr_s)ø€ô2 ñ(¨¯
©
°JÓ?€HØ 9‰9XÓ Ðr!c#ó,K—|–—|Ed{–—†y7Œ­wrr)r›r$rrÚdtypesrbrnros       rÚ_append_fields_dispatcherr¶ˆsèø€à
‚J؇O‚Oúó ‚
Œc óP—t|ttf«r$t|«t|«k7r#d}t    |«‚t|t
«r|g}|g}|€`|Dcgc]}t j|dd¬«‘Œ}}t||«D    cgc]#\}    }|j|    |jfg«‘Œ%}}    }n¥t|ttf«s|g}t|«t|«k7r*t|«dk(r|t|«z}n d}t    |«‚t|||«D
 cgc]1\}}
} t j|dd| ¬«j|
| fg«‘Œ3}}
}} t|||¬«}t|«dkDrt|d||¬    «}n|j«}tjtt|«t|««t!|j«t!|j«z¬
«} t#|| «} t#|| «} t%| ||¬ «Scc}wcc}}    wcc} }
}w) a 
    Add new fields to an existing array.
 
    The names of the fields are given with the `names` arguments,
    the corresponding values with the `data` arguments.
    If a single field is appended, `names`, `data` and `dtypes` do not have
    to be lists but just values.
 
    Parameters
    ----------
    base : array
        Input array to extend.
    names : string, sequence
        String or sequence of strings corresponding to the names
        of the new fields.
    data : array or sequence of arrays
        Array or sequence of arrays storing the fields to add to the base.
    dtypes : sequence of datatypes, optional
        Datatype or sequence of datatypes.
        If None, the datatypes are estimated from the `data`.
    fill_value : {float}, optional
        Filling value used to pad missing data on the shorter arrays.
    usemask : {False, True}, optional
        Whether to return a masked array or not.
    asrecarray : {False, True}, optional
        Whether to return a recarray (MaskedRecords) or not.
 
    z7The number of arrays does not match the number of namesNT)ÚcopyÚsubokrBz5The dtypes argument must be None, a dtype, or a list.)r¹rºr#)rnrb)rErnrbr€r¢)rSr6rMr&r%r\rCr‹r†rir#rÚpoprgÚ
masked_allr…r3rrp) r›r$rrrµrbrnroÚmsgrFr/r–Údrs              rrrŽsí€ô@%œ%¤˜Ô'Ü ˆu‹:œ˜T›Ò "ØKˆCܘS“/Ð !Ü    Eœ3Ô    Ø    ˆØˆxˆà €~Ø<@ÖA°q”—‘˜ ¨TÖ2ÐAˆÐAÜ;>¸uÀdÓ;K×L©i¨t°Q—‘˜˜qŸw™w˜Ð(Õ)ÐLˆÒLä˜&¤5¬$ -Ô0ؐZˆFÜ ˆt‹9œ˜F› Ò #ܐ6‹{˜aÒØ¤# d£)Ñ+‘àMÜ  “oÐ%ä!$ T¨5°&Ó!9÷;ð;ِQ˜˜1ô—‘˜ ¨T¸Ô;×@Ñ@À1ÀaÀ&ÀÕJð;ˆò;ô ˜ g¸*Ô E€DÜ
ˆ4ƒy1‚}ܘD¨$¸Ø'1ô3‰ðx‰x‹zˆä ]‰]Ü ŒC‹I”s˜4“yÓ!ܘTŸZ™ZÓ(¬>¸$¿*¹*Ó+EÑEôG€Fô# 4¨Ó 0€FÜ " 4¨Ó 0€Fä v w¸:Ô FÐFùò7BùÛLùô;sÁHÂ(HÄ6H!c#ó,K—|–—|Ed{–—†y7Œ­wrr©r›r$rrrµs    rÚ_rec_append_fields_dispatcherrÁÕsèø€Ø
‚J؇O‚Oúr·có$—t||||dd¬«S)aM
    Add new fields to an existing array.
 
    The names of the fields are given with the `names` arguments,
    the corresponding values with the `data` arguments.
    If a single field is appended, `names`, `data` and `dtypes` do not have
    to be lists but just values.
 
    Parameters
    ----------
    base : array
        Input array to extend.
    names : string, sequence
        String or sequence of strings corresponding to the names
        of the new fields.
    data : array or sequence of arrays
        Array or sequence of arrays storing the fields to add to the base.
    dtypes : sequence of datatypes, optional
        Datatype or sequence of datatypes.
        If None, the datatypes are estimated from the `data`.
 
    See Also
    --------
    append_fields
 
    Returns
    -------
    appended_array : np.recarray
    TF)rrrµrorn)rrÀs    rrrÚs€ô> ˜˜u¨4¸Ø$(°%ô 9ð9r!có—|fSrr)rFÚalignÚrecurses   rÚ_repack_fields_dispatcherrÆýs    €Ø ˆ4€Kr!cóÞ—t|tj«s+t|j||¬«}|j    |d¬«S|j
€|Sg}|j
D]R}|j |}|rt|d|d¬«}n|d}t|«dk(r|d|f}|j||f«ŒTtj||¬«}tj|j|f«S)    a#
    Re-pack the fields of a structured array or dtype in memory.
 
    The memory layout of structured datatypes allows fields at arbitrary
    byte offsets. This means the fields can be separated by padding bytes,
    their offsets can be non-monotonically increasing, and they can overlap.
 
    This method removes any overlaps and reorders the fields in memory so they
    have increasing byte offsets, and adds or removes padding bytes depending
    on the `align` option, which behaves like the `align` option to
    `numpy.dtype`.
 
    If `align=False`, this method produces a "packed" memory layout in which
    each field starts at the byte the previous field ended, and any padding
    bytes are removed.
 
    If `align=True`, this methods produces an "aligned" memory layout in which
    each field's offset is a multiple of its alignment, and the total itemsize
    is a multiple of the largest alignment, by adding padding bytes as needed.
 
    Parameters
    ----------
    a : ndarray or dtype
       array or dtype for which to repack the fields.
    align : boolean
       If true, use an "aligned" memory layout, otherwise use a "packed" layout.
    recurse : boolean
       If True, also repack nested structures.
 
    Returns
    -------
    repacked : ndarray or dtype
       Copy of `a` with fields repacked, or `a` itself if no repacking was
       needed.
 
    Examples
    --------
    >>> import numpy as np
 
    >>> from numpy.lib import recfunctions as rfn
    >>> def print_offsets(d):
    ...     print("offsets:", [d.fields[name][1] for name in d.names])
    ...     print("itemsize:", d.itemsize)
    ...
    >>> dt = np.dtype('u1, <i8, <f8', align=True)
    >>> dt
    dtype({'names': ['f0', 'f1', 'f2'], 'formats': ['u1', '<i8', '<f8'], 'offsets': [0, 8, 16], 'itemsize': 24}, align=True)
    >>> print_offsets(dt)
    offsets: [0, 8, 16]
    itemsize: 24
    >>> packed_dt = rfn.repack_fields(dt)
    >>> packed_dt
    dtype([('f0', 'u1'), ('f1', '<i8'), ('f2', '<f8')])
    >>> print_offsets(packed_dt)
    offsets: [0, 1, 9]
    itemsize: 17
 
    )rÄrÅF)r¹rTér1©rÄ)
rSrCr#rÚastyper$r-r&r5r|)rFrÄrÅÚdtÚ    fieldinfor/rdÚfmts        rrrs܀ôz aœŸ™Ô "Ü ˜1Ÿ7™7¨%¸Ô AˆØx‰x˜ ˆxÓ'Ð'à‡ww€Øˆà€IØ—‘ò
&ˆØh‰ht‰nˆÙ Ü  A¡¨e¸TÔB‰Càa‘&ˆCä ˆs‹8qŠ=ؘ‘F˜D>ˆDà×ј$ ˜Õ%ð
&ô
‰) 5Ô    )€BÜ 8‰8Q—V‘V˜RLÓ !Ð!r!cóà—d„}g}|jD]Ò}|j|}|d|d}}||«\}}|j€.|jtj||ff«|||zf«Œat |||z«}    |j }
t|«D]I} | dk(r|j|    «Œ|j|    D  cgc]\} } }| | || |
zzf‘Œc}} } «ŒKŒÔ|Scc}} } w)z£
    Returns a flat list of (dtype, count, offset) tuples of all the
    scalar fields in the dtype "dt", including nested fields, in left
    to right order.
    có—d}|jdk7r2|jD]}||z}Œ    |j}|jdk7rŒ2||fS)NrBr)r¥r›)rËrr~s   rÚ
count_elemz+_get_fields_and_offsets.<locals>.count_elem^sP€ØˆØh‰h˜"ŠnØŸ™ò Ø˜‘ ‘ð à—‘ˆBðh‰h˜"‹nð5ˆyÐr!rrB)    r$r-r5rCr#Ú_get_fields_and_offsetsÚitemsizeÚranger;)rËÚoffsetrÐr-r/r(Úf_dtÚf_offsetr–Ú    subfieldsr~Úir¾ÚcÚos               rrÑrÑUsþ€òð€FØ—‘òSˆØ—    ‘    ˜$‘ˆØ˜q™ 5¨¡8ˆhˆÙ˜TÓ"‰ˆˆaà :‰:Ð Ø M‰Mœ2Ÿ8™8 T¨A¨4 LÓ1°1°hÀÑ6GÐHÕ Iä/°°hÀÑ6GÓHˆIØ—=‘=ˆDä˜1“Xò SØ˜’6à—M‘M )Õ,à—M‘MÀy×"QÐ"Q¹G¸A¸qÀ! A q¨!¨a°$©h©,Ò#7Ô"QÕRñ  SðSð" €Mùô#RsÃC)có(—t|«dkr|S|d|dk}|rtt|«t|««}n t||«}d}d}|D];\}}|dk7r|ry|€|}||k7ry||dz
|zz}    n|}    |||z
}
|€|
}||
k7ry|    }Œ=|r| S|S)zì
    Returns the stride between the fields, or None if the stride is not
    constant. The values in "counts" designate the lengths of
    subarrays. Subarrays are treated as many contiguous fields, with
    always positive stride.
    rBrN)r&r†Úreversed) ÚoffsetsÚcountsrÒÚnegativeÚitÚ prev_offsetÚstriderÔrÚ
end_offsetÚ
new_strides            rÚ_common_strideråzsހô ˆ7ƒ|qÒØˆàq‰z˜G A™JÑ&€HÙä ”˜'Ó"¤H¨VÓ$4Ó 5‰ä ˜&Ó !ˆà€KØ €FØò!‰ ˆØ AŠ:ÙÙØˆ~Ø!Ø˜Ò!ÙØ 5¨1¡9°Ñ"8Ñ8‰JàˆJà Ð "Ø +Ñ-ˆJ؈~Ø#Ø˜Ò#Ùà ‰ ð'!ñ*؈wˆØ €Mr!có—|fSrr)Úarrr#r¹Úcastings    rÚ&_structured_to_unstructured_dispatcherré§ó    €à ˆ6€Mr!có쇗|jj€ td«‚t|j«}t    |«}|dk(r |€ td«‚|dk(r t d«‚t |Ž\}}}t|«D    cgc]}    d|    ›‘Œ    }
}    |€+tj|D cgc]} | j‘Œc} ŽŠntj|«Štj|
|||jjdœ«} |j| «}t|«tjtjtj fv} |s:| r7t#ˆfd„|D««r"t%||‰j«}||j&}|j(t+|«‰jfz}|j,t/|«d    fz}|d
tj0fjtj2«}|d
t5|«d…f}tj6j8j;|||d ¬ «}|j‰«d }|dkr
|d
ddd…f}t|«t|j<«ur||«}|Stj|
|D cgc]} ‰| j(f‘Œc} dœ«}|j?|||¬«}|j‰t+|«ff«Scc}    wcc} wcc} w)a{
    Converts an n-D structured array into an (n+1)-D unstructured array.
 
    The new array will have a new last dimension equal in size to the
    number of field-elements of the input array. If not supplied, the output
    datatype is determined from the numpy type promotion rules applied to all
    the field datatypes.
 
    Nested fields, as well as each element of any subarray fields, all count
    as a single field-elements.
 
    Parameters
    ----------
    arr : ndarray
       Structured array or dtype to convert. Cannot contain object datatype.
    dtype : dtype, optional
       The dtype of the output unstructured array.
    copy : bool, optional
        If true, always return a copy. If false, a view is returned if
        possible, such as when the `dtype` and strides of the fields are
        suitable and the array subtype is one of `numpy.ndarray`,
        `numpy.recarray` or `numpy.memmap`.
 
        .. versionchanged:: 1.25.0
            A view can now be returned if the fields are separated by a
            uniform stride.
 
    casting : {'no', 'equiv', 'safe', 'same_kind', 'unsafe'}, optional
        See casting argument of `numpy.ndarray.astype`. Controls what kind of
        data casting may occur.
 
    Returns
    -------
    unstructured : ndarray
       Unstructured array with one more dimension.
 
    Examples
    --------
    >>> import numpy as np
 
    >>> from numpy.lib import recfunctions as rfn
    >>> a = np.zeros(4, dtype=[('a', 'i4'), ('b', 'f4,u2'), ('c', 'f4', 2)])
    >>> a
    array([(0, (0., 0), [0., 0.]), (0, (0., 0), [0., 0.]),
           (0, (0., 0), [0., 0.]), (0, (0., 0), [0., 0.])],
          dtype=[('a', '<i4'), ('b', [('f0', '<f4'), ('f1', '<u2')]), ('c', '<f4', (2,))])
    >>> rfn.structured_to_unstructured(a)
    array([[0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.]])
 
    >>> b = np.array([(1, 2, 5), (4, 5, 7), (7, 8 ,11), (10, 11, 12)],
    ...              dtype=[('x', 'i4'), ('y', 'f4'), ('z', 'f8')])
    >>> np.mean(rfn.structured_to_unstructured(b[['x', 'z']]), axis=-1)
    array([ 3. ,  5.5,  9. , 11. ])
 
    Núarr must be a structured arrayrz(arr has no fields. Unable to guess dtypez#arr with no fields is not supportedr2©r$ÚformatsrÝrÒc3ó<•K—|]}|j‰k(–—Œy­wr)r›)r.rËÚ    out_dtypes  €rr0z-structured_to_unstructured.<locals>.<genexpr>søèø€Ò&JÀ r§w¡w°)Õ';Ñ&JùsƒrB.T)rº©.réÿÿÿÿ©r$rî©r¹rè) r#r$r%rÑr&ÚNotImplementedErrorr†rÓrCÚ result_typer›rÒrir|rƒrmÚmemmapÚallråÚ__array_wrap__r¥ÚsumÚstridesÚabsÚnewaxisÚuint8ÚminÚlibÚ stride_tricksÚ
as_stridedÚ__self__rÊ)rçr#r¹rèr-Ún_fieldsÚdtsrÞrÝr–r$rËÚflattened_fieldsÚcan_viewÚ common_strideÚwrapÚ    new_shapeÚ new_stridesÚ packed_fieldsrðs                   @rrr«s±ø€ðx ‡yy‡ÐÜÐ9Ó:Ð:ä $ S§Y¡YÓ /€Fܐ6‹{€Hؐ1‚}˜˜ÜÐCÓDÐDØ    QŠä!Ð"GÓHÐHä ˜<Ñ€CˆÜ# H›oÖ .˜ˆqŠWÐ .€EÐ .à €}Ü—N‘N°sÖ$;° R§W£WÒ$;Ð<‰    ä—H‘H˜U“Oˆ    ô —x‘x¨%Ø,/Ø,3Ø-0¯Y©Y×-?Ñ-?ñ!AóBÐð (‰(Ð#Ó
$€Cô
C‹yœRŸZ™Z¬¯©´b·i±iÐ@Ð@€HÚ ’h¤3Ó&JÀcÔ&JÕ#Jô' w°¸    ×8JÑ8JÓKˆ Ø Ñ $Ø×%Ñ%ˆDàŸ    ™    ¤S¨£[°)×2DÑ2DÐ$EÑEˆIØŸ+™+¬¨]Ó);¸QÐ(?Ñ?ˆKàcœ2Ÿ:™:oÑ&×+Ñ+¬B¯H©HÓ5ˆCؐcœ3˜w›<™=Ð(Ñ)ˆCÜ—&‘&×&Ñ&×1Ñ1°#Ø2;Ø2=Ø8<ð2ó>ˆCð —(‘(˜9Ó% fÑ-ˆCà˜qҠؘ#™t ˜t˜)‘nÜC‹y¤ T§]¡]Ó 3Ñ3ñ˜3“iØˆJô—H‘H uØJMÖ)NÀB¨9°b·h±hÒ*?Ò)NñPóQ€Mà
*‰*]¨°wˆ*Ó
?€Cð 8‰8Y¤ V£ Ð/Ó 0Ð0ùòq /ùò%<ùòb*OsÁ> K'Â!K,ÊK1
có—|fSrr)rçr#r$rÄr¹rès      rÚ&_unstructured_to_structured_dispatcherr.rêr!có—|jdk(r td«‚|jd}|dk(r td«‚|€f|€t|«Dcgc]}d|›‘Œ    }}t    j
|Dcgc]}||j
f‘Œc}|¬«}t |«}    t|    Ž\}
} } n‚| td«‚t    j
|«}t |«}    t|    «dk(rggg} } }
n t|    Ž\}
} } |t| «k7r td    «‚|}|r|js td
«‚tt|    ««Dcgc]}d|›‘Œ    }}t    j
||
D cgc]} |j
| jf‘Œc} d œ«}t    j|«j|«}t    j
||
| |jd œ«}|j|||¬ «}|j|«dScc}wcc}wcc}wcc} w)a*
    Converts an n-D unstructured array into an (n-1)-D structured array.
 
    The last dimension of the input array is converted into a structure, with
    number of field-elements equal to the size of the last dimension of the
    input array. By default all output fields have the input array's dtype, but
    an output structured dtype with an equal number of fields-elements can be
    supplied instead.
 
    Nested fields, as well as each element of any subarray fields, all count
    towards the number of field-elements.
 
    Parameters
    ----------
    arr : ndarray
       Unstructured array or dtype to convert.
    dtype : dtype, optional
       The structured dtype of the output array
    names : list of strings, optional
       If dtype is not supplied, this specifies the field names for the output
       dtype, in order. The field dtypes will be the same as the input array.
    align : boolean, optional
       Whether to create an aligned memory layout.
    copy : bool, optional
        See copy argument to `numpy.ndarray.astype`. If true, always return a
        copy. If false, and `dtype` requirements are satisfied, a view is
        returned.
    casting : {'no', 'equiv', 'safe', 'same_kind', 'unsafe'}, optional
        See casting argument of `numpy.ndarray.astype`. Controls what kind of
        data casting may occur.
 
    Returns
    -------
    structured : ndarray
       Structured array with fewer dimensions.
 
    Examples
    --------
    >>> import numpy as np
 
    >>> from numpy.lib import recfunctions as rfn
    >>> dt = np.dtype([('a', 'i4'), ('b', 'f4,u2'), ('c', 'f4', 2)])
    >>> a = np.arange(20).reshape((4,5))
    >>> a
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14],
           [15, 16, 17, 18, 19]])
    >>> rfn.unstructured_to_structured(a, dt)
    array([( 0, ( 1.,  2), [ 3.,  4.]), ( 5, ( 6.,  7), [ 8.,  9.]),
           (10, (11., 12), [13., 14.]), (15, (16., 17), [18., 19.])],
          dtype=[('a', '<i4'), ('b', [('f0', '<f4'), ('f1', '<u2')]), ('c', '<f4', (2,))])
 
    rz$arr must have at least one dimensionròrz&last axis with size 0 is not supportedr2rÉz!don't supply both dtype and nameszVThe length of the last dimension of arr must be equal to the number of fields in dtypez'align was True but dtype is not alignedrórírôrñ)r¥r%rõrÓrCr#rÑr†r&rúÚisalignedstructÚascontiguousarrayrirÒrÊ)rçr#r$rÄr¹rèÚn_elemr–rðr-rrÞrÝrËr rs                rrr2s
€ðr ‡yyB‚ÜÐ?Ó@Ð@Ø Y‰Yr‰]€FØ ‚{ä!Ð"JÓKÐKà €}Ø ˆ=Ü&+¨F£mÖ4 q˜˜’WÐ4ˆEÐ4Ü—H‘H°eÖ<°˜q #§)¡)šnÒ<ÀEÔJˆ    Ü(¨Ó3ˆÜ" F˜|шˆV‘Wà Ð ÜÐ@ÓAÐ Aä—‘˜“ˆä(¨Ó/ˆÜ ˆv‹;˜!Ò Ø#% r¨2˜‰Cä#&¨ <Ñ  ˆC˜à ”S˜“[Ò  ÜðIóJð Jàˆ    Ù ˜×2Ò2ÜÐFÓGÐ Gä#¤C¨£KÓ0Ö 1˜ˆqŠWÐ 1€EÐ 1ô
—H‘H uØJMÖ)NÀB¨3¯9©9°b·h±hÒ*?Ò)NñPóQ€Mä
×
˜sÓ
(¨Ó
7€Cô—x‘x¨%Ø,/Ø,3Ø-6×-?Ñ-?ñ!AóBÐð *‰*Ð%¨D¸'ˆ*Ó
B€Cð 8‰8IÓ ˜vÑ &Ð&ùòQ5ùÚ<ùò, 2ùò *OsÁ G4Á,G9Ä: G>ÅH
có—|fSrr)Úfuncrçs  rÚ_apply_along_fields_dispatcherržs    €Ø ˆ6€Mr!cón—|jj€ td«‚t|«}||d¬«S)al
    Apply function 'func' as a reduction across fields of a structured array.
 
    This is similar to `numpy.apply_along_axis`, but treats the fields of a
    structured array as an extra axis. The fields are all first cast to a
    common type following the type-promotion rules from `numpy.result_type`
    applied to the field's dtypes.
 
    Parameters
    ----------
    func : function
       Function to apply on the "field" dimension. This function must
       support an `axis` argument, like `numpy.mean`, `numpy.sum`, etc.
    arr : ndarray
       Structured array for which to apply func.
 
    Returns
    -------
    out : ndarray
       Result of the reduction operation
 
    Examples
    --------
    >>> import numpy as np
 
    >>> from numpy.lib import recfunctions as rfn
    >>> b = np.array([(1, 2, 5), (4, 5, 7), (7, 8 ,11), (10, 11, 12)],
    ...              dtype=[('x', 'i4'), ('y', 'f4'), ('z', 'f8')])
    >>> rfn.apply_along_fields(np.mean, b)
    array([ 2.66666667,  5.33333333,  8.66666667, 11.        ])
    >>> rfn.apply_along_fields(np.mean, b[['x', 'z']])
    array([ 3. ,  5.5,  9. , 11. ])
 
    rìrò)Úaxis)r#r$r%r)rrçÚuarrs   rrr¡s6€ðH ‡yy‡ÐÜÐ9Ó:Ð:ä % cÓ *€DÙ ˜2Ô Ðr!có
—||fSrr)ÚdstÚsrcÚzero_unassigneds   rÚ!_assign_fields_by_name_dispatcherrÍs €Ø ˆ8€Or!cóڗ|jj€||d<y|jjD]6}||jjvr    |sŒd||<Œ$t|||||«Œ8y)aÆ
    Assigns values from one structured array to another by field name.
 
    Normally in numpy >= 1.14, assignment of one structured array to another
    copies fields "by position", meaning that the first field from the src is
    copied to the first field of the dst, and so on, regardless of field name.
 
    This function instead copies "by field name", such that fields in the dst
    are assigned from the identically named field in the src. This applies
    recursively for nested structures. This is how structure assignment worked
    in numpy >= 1.6 to <= 1.13.
 
    Parameters
    ----------
    dst : ndarray
    src : ndarray
        The source and destination arrays during assignment.
    zero_unassigned : bool, optional
        If True, fields in the dst for which there was no matching
        field in the src are filled with the value 0 (zero). This
        was the behavior of numpy <= 1.13. If False, those fields
        are not modified.
    N.r)r#r$r)rrrr/s    rrrÐsh€ð4 ‡yy‡Ð؈ˆC‰Øà—    ‘    —‘ò3ˆØ s—y‘y—‘Ñ &ÚØD’    ä ! # d¡)¨S°©YØ"1õ 3ñ 3r!có—|fSrr)r‹Úrequired_dtypes  rÚ_require_fields_dispatcherr!ös    €Ø ˆ8€Or!có`—tj|j|¬«}t||«|S)a
    Casts a structured array to a new dtype using assignment by field-name.
 
    This function assigns from the old to the new array by name, so the
    value of a field in the output array is the value of the field with the
    same name in the source array. This has the effect of creating a new
    ndarray containing only the fields "required" by the required_dtype.
 
    If a field name in the required_dtype does not exist in the
    input array, that field is created and set to 0 in the output array.
 
    Parameters
    ----------
    a : ndarray
       array to cast
    required_dtype : dtype
       datatype for output array
 
    Returns
    -------
    out : ndarray
        array with the new dtype, with field values copied from the fields in
        the input array with the same name
 
    Examples
    --------
    >>> import numpy as np
 
    >>> from numpy.lib import recfunctions as rfn
    >>> a = np.ones(4, dtype=[('a', 'i4'), ('b', 'f8'), ('c', 'u1')])
    >>> rfn.require_fields(a, [('b', 'f4'), ('c', 'u1')])
    array([(1., 1), (1., 1), (1., 1), (1., 1)],
      dtype=[('b', '<f4'), ('c', 'u1')])
    >>> rfn.require_fields(a, [('b', 'f4'), ('newf', 'u1')])
    array([(1., 0), (1., 0), (1., 0), (1., 0)],
      dtype=[('b', '<f4'), ('newf', 'u1')])
 
    r€)rCr¤r¥r)r‹r Úouts   rrrùs(€ôP (‰(5—;‘; nÔ
5€Cܘ#˜uÔ%Ø €Jr!có—|Srr)ÚarraysrurnroÚ autoconverts     rÚ_stack_arrays_dispatcherr'&s€à €Mr!c    óê—t|tj«r|St|«dk(r|dS|Dcgc]%}tj|«j «‘Œ'}}|Dcgc] }t|«‘Œ}}|Dcgc]}|j ‘Œ}}|D    cgc]}    |    j‘Œ}
}    |d} t| «} | D     cgc]\} }    | ‘Œ    }} }    |ddD]‚}t|«D]r\}}||vr%| j||f«|j|«Œ/|j|«}| |\}}|r|t||«f| |<Œ\||k7sŒbtd|›d|›d«‚Œ„t| «dk(rtj|«}nÇtjtj |«f| «}tj"tj$d|f«}g}t'||
|dd|dd«D]\\}} }}|j j}|€||dt|«›||Œ5| D]#}||||||||vsŒ|j|«Œ%Œ^t)t+||«||¬    «Scc}wcc}wcc}wcc}    wcc}    } w)
a
    Superposes arrays fields by fields
 
    Parameters
    ----------
    arrays : array or sequence
        Sequence of input arrays.
    defaults : dictionary, optional
        Dictionary mapping field names to the corresponding default values.
    usemask : {True, False}, optional
        Whether to return a MaskedArray (or MaskedRecords is
        `asrecarray==True`) or a ndarray.
    asrecarray : {False, True}, optional
        Whether to return a recarray (or MaskedRecords if `usemask==True`)
        or just a flexible-type ndarray.
    autoconvert : {False, True}, optional
        Whether automatically cast the type of the field to the maximum.
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> x = np.array([1, 2,])
    >>> rfn.stack_arrays(x) is x
    True
    >>> z = np.array([('A', 1), ('B', 2)], dtype=[('A', '|S3'), ('B', float)])
    >>> zz = np.array([('a', 10., 100.), ('b', 20., 200.), ('c', 30., 300.)],
    ...   dtype=[('A', '|S3'), ('B', np.double), ('C', np.double)])
    >>> test = rfn.stack_arrays((z,zz))
    >>> test
    masked_array(data=[(b'A', 1.0, --), (b'B', 2.0, --), (b'a', 10.0, 100.0),
                       (b'b', 20.0, 200.0), (b'c', 30.0, 300.0)],
                 mask=[(False, False,  True), (False, False,  True),
                       (False, False, False), (False, False, False),
                       (False, False, False)],
           fill_value=(b'N/A', 1e+20, 1e+20),
                dtype=[('A', 'S3'), ('B', '<f8'), ('C', '<f8')])
 
    rBrNzIncompatible type 'z' <> 'ú'ròr2r¢)rSrCrƒr&r‚r„r#r$r3r5Úindexr…Ú    TypeErrorrgÚ concatenater¼rúÚcumsumÚr_r†rprx)r%rurnror&rFrDÚnrecordsr=r¾ÚfldnamesÚdtype_lÚnewdescrr–r$Údtype_nÚfnameÚfdtypeÚnameidxr@ÚcdtyperrÔÚseenrØÚjr/s                           rrr+sŒ€ôT&œ"Ÿ*™*Ô%؈ Ü     ˆV‹˜Ò    Øa‰yÐØ39Ö:¨a”—‘˜qÓ!×'Ñ'Õ)Ð:€IÐ:Ø )Ö*˜1”A•Ð*€HÐ*Ø(Ö )˜!ˆag‹gÐ )€FÐ )Ø!'Ö(˜A—“Ð(€HÐ(àQ‰i€GܘgÓ&€HØ#× $‘41aŠQÐ $€EÑ $ؘ!˜":ò SˆÜ+¨GÓ4ò
    S‰MˆE6ؘEÑ!Ø—‘ ¨ Ô0Ø— ‘ ˜UÕ#àŸ+™+ eÓ,Ø$ WÑ-‘    6ÙØ).´°F¸FÓ0CÐ(DH˜WÒ%ؘvÓ%Ü#Ð&9¸&¸ÀÈÀxÈqÐ$QÓRÐRñ
    Sð Sô ˆ8ƒ}˜ÒÜ—‘     Ó*‰ô—‘¤§¡ xÓ 0Ð2°HÓ=ˆÜ—‘œ2Ÿ5™5  H Ñ-Ó.ˆØˆÜ     ¨8°V¸C¸R°[À&ÈÈÀ*ÓMò    *‰LˆQ1aØ—G‘G—M‘MˆE؈}Ø/0˜œ3˜t›9˜+Ñ'¨¨!Ñ,àò*DØ()¨$©F˜4‘L  1Ð%Ø 4Ò'ØŸ ™  DÕ)ñ*ð     *ô ”} V¨XÓ6Ø&°:ô ?ð?ùòM;ùÚ*ùÚ )ùÚ(ùó %s´*IÁ$I Á<I%ÂI*Â? I/có—|fSrr)rFÚkeyÚ
ignoremaskÚ return_indexs    rÚ_find_duplicates_dispatcherr>ƒs    €à ˆ4€Kr!có —tj|«j«}t|j«}|}|r||D]}||}Œ    ||}|j «}||}|j «}    |    dd|    ddk(}
|r|j} d|
| dd<tjdg|
f«}
|
dd|
ddz|
dd|||
} |r| ||
fS| S)a
    Find the duplicates in a structured array along a given key
 
    Parameters
    ----------
    a : array-like
        Input array
    key : {string, None}, optional
        Name of the fields along which to check the duplicates.
        If None, the search is performed by records
    ignoremask : {True, False}, optional
        Whether masked data should be discarded or considered as duplicates.
    return_index : {False, True}, optional
        Whether to return the indices of the duplicated values.
 
    Examples
    --------
    >>> import numpy as np
    >>> from numpy.lib import recfunctions as rfn
    >>> ndtype = [('a', int)]
    >>> a = np.ma.array([1, 1, 1, 2, 2, 3, 3],
    ...         mask=[0, 0, 1, 0, 0, 0, 1]).view(ndtype)
    >>> rfn.find_duplicates(a, ignoremask=True, return_index=True)
    (masked_array(data=[(1,), (1,), (2,), (2,)],
                 mask=[(False,), (False,), (False,), (False,)],
           fill_value=(999999,),
                dtype=[('a', '<i8')]), array([0, 1, 3, 4]))
    NròrBF)    rCr‚r„r r#ÚargsortrlÚ
recordmaskr,) rFr;r<r=r-r›r2ÚsortidxÚ
sortedbaseÚ
sorteddataÚflagÚ
sortedmaskÚ
duplicatess              rr    r    ˆs€ô<      ‰ aÓ×ÑÓ €Aä  §¡Ó (€Fà €DÙ
ؘ‘ò    ˆAؘ‘7‰Dð    àC‰yˆàl‰l‹n€Gؐg‘€JØ×"Ñ"Ó$€Jà s˜ˆO˜z¨!¨"˜~Ñ -€DáØ×*Ñ*ˆ
Ø$ˆˆZ˜˜ˆ^ÑÜ >‰>˜E˜7 D˜/Ó *€DàSb    ˜D  ˜HÑ$€Dˆˆ"€Iؐ7‘˜DÑ!€JÙØ˜G D™MÐ*Ð*àÐr!c    ó
—||fSrr)    r;Úr1Úr2ÚjointypeÚ    r1postfixÚ    r2postfixrurnros             rÚ_join_by_dispatcherrNÃó €ð ˆ8€Or!c    óh    ‡—|dvrtd|z«‚t‰t«r‰fŠtt    ‰««t‰«k7r+t ˆfd„t ‰«D««}    td|    ›«‚‰D]N}
|
|jjvrtd|
›«‚|
|jjvsŒBtd|
›«‚|j«}|j«}t|«t|«} } |jj|jj}} t    | «t    |«zt    ‰«z
}|r|s|sd}|dz }t|«‚| Dcgc]    }|‰vsŒ|‘Œ }}t||«}t||«}tj||f«}|j‰¬    «}||}tjd
g|d d |d d k(f«}|d d |d d z|d d ||}||| k}||| k\| z
}t|«t|«}}|dk(rd\}}n|dk(r`||}tj|||| kf«}tj|||| k\| z
f«}t|«|z
t|«|z
}}n8|dk(r3||}tj|||| kf«}t|«|z
d}}||||}!} t|j«}"t|j«D]\}#}$|#‰vsŒ |"j!|#|$f«Œt|j«D]]\}#}$|"D
%cgc]\}
}%|
‘Œ    }&}
}%    |&j#|#«}'|"|'\}(})|#‰vr|#t%|$|)«f|"|'<ŒJ|#|z|)f|#|z|$fg|"|'|'d zŒ_tj|"«}"t%||«}*tj&|*zzf|"¬«}+|+jj}&| D]7},| |,}-|,|&vs
|,|vr |s    |,‰vr|,|z },|+|,}.|-d ||.d ||dvsŒ-|-|d |.|*|*|zŒ9|D]9},|!|,}-|,|&vs
|,| vr |s    |,‰vr|,|z },|+|,}.|-d ||.d ||dk(sŒ.|sŒ1|-|d |.| d Œ;|+j)‰¬    «||dœ}/t+t-|+|«fi|/¤ŽScc}wcc}%}
w#t$r|"j!|#|$f«YŒ†wxYw)a<
    Join arrays `r1` and `r2` on key `key`.
 
    The key should be either a string or a sequence of string corresponding
    to the fields used to join the array.  An exception is raised if the
    `key` field cannot be found in the two input arrays.  Neither `r1` nor
    `r2` should have any duplicates along `key`: the presence of duplicates
    will make the output quite unreliable. Note that duplicates are not
    looked for by the algorithm.
 
    Parameters
    ----------
    key : {string, sequence}
        A string or a sequence of strings corresponding to the fields used
        for comparison.
    r1, r2 : arrays
        Structured arrays.
    jointype : {'inner', 'outer', 'leftouter'}, optional
        If 'inner', returns the elements common to both r1 and r2.
        If 'outer', returns the common elements as well as the elements of
        r1 not in r2 and the elements of not in r2.
        If 'leftouter', returns the common elements and the elements of r1
        not in r2.
    r1postfix : string, optional
        String appended to the names of the fields of r1 that are present
        in r2 but absent of the key.
    r2postfix : string, optional
        String appended to the names of the fields of r2 that are present
        in r1 but absent of the key.
    defaults : {dictionary}, optional
        Dictionary mapping field names to the corresponding default values.
    usemask : {True, False}, optional
        Whether to return a MaskedArray (or MaskedRecords is
        `asrecarray==True`) or a ndarray.
    asrecarray : {False, True}, optional
        Whether to return a recarray (or MaskedRecords if `usemask==True`)
        or just a flexible-type ndarray.
 
    Notes
    -----
    * The output is sorted along the key.
    * A temporary array is formed by dropping the fields not in the key for
      the two arrays and concatenating the result. This array is then
      sorted, and the common entries selected. The output is constructed by
      filling the fields with the selected entries. Matching is not
      preserved if there are some duplicates...
 
    )ÚinnerÚouterÚ    leftouterzWThe 'jointype' argument should be in 'inner', 'outer' or 'leftouter' (got '%s' instead)c3ó>•K—|]\}}|‰|dzdvsŒ|–—Œy­w)rBNr)r.r–Úxr;s   €rr0zjoin_by.<locals>.<genexpr>s&øèø€ÒD™˜˜A°1¸¸AÀ¹E¸F¸ Ò3C”1ÑDùsƒ–zduplicate join key zr1 does not have key field zr2 does not have key field z8r1 and r2 contain common names, r1postfix and r2postfix zcan't both be empty)ÚorderFrBNròrQ)rrrRrSrr€)rRrSr¢)r%rSr\r&r£ÚnextÚ    enumerater#r$r„r¨rgr,r@rCr3r5r*r…r¼Úsortrprx)0r;rIrJrKrLrMrurnroÚdupr/Únb1Únb2Úr1namesÚr2namesÚ
collisionsr½r–Úkey1Úr1kÚr2kÚauxÚidx_sortÚflag_inÚidx_inÚidx_1Úidx_2Úr1cmnÚr2cmnÚr1spcÚr2spcÚidx_outÚs1Ús2r=r4r5r#r$r6r@r7Úcmnrr2Úselectedr)Úkwargss0`                                               rrrÉstø€ðhÐ6Ñ6Üð<Ø>FñGóð    ô
#”sÔØˆfˆô Œ3ˆs‹8ƒ}œ˜C›Ò ÜÓD¤¨3£ÔDÓDˆÜÐ.¨s¨gÐ6Ó7Ð7ØòEˆØ r—x‘x—~‘~Ñ %ÜÐ:¸4¸(ÐCÓDÐ DØ r—x‘x—~‘~Ò %ÜÐ:¸4¸(ÐCÓDÐ Dð    Eð
‰‹€BØ     ‰‹€Bܐb“'œ3˜r›7ˆ#€SØŸ(™(Ÿ.™.¨"¯(©(¯.©.ˆg€Wôg“,¤ W£Ñ-´°S³Ñ9€JÙ™9©    ØHˆØ Ð$Ñ$ˆÜ˜‹oÐðÖ +! ! s¢(ŠAÐ +€DÐ +Ü
r˜4Ó
 €CÜ
r˜4Ó
 €Cô .‰.˜#˜s˜Ó
$€C؏{‰{ ˆ{Ó%€HØ
ˆh‰-€Côn‰n˜u˜g s¨1¨2 w°#°c°r°(Ñ':Ð;Ó<€Gؘ1˜2; ¨¨" Ñ-€GˆCˆR€LØ gÑ €FØ F˜S‘LÑ "€EØ F˜c‘MÑ # cÑ )€Eܘ%“j¤# e£*ˆE€Uؐ7ÒØ‰ˆ‘Ø    WÒ    Ø˜G˜8Ñ$ˆÜ—‘  w°¸#± Ñ'?Ð@ÓAˆÜ—‘  w°¸3±Ñ'@À3Ñ'FÐGÓHˆÜ˜e›* uÑ,¬c°%«j¸5Ñ.@‰Ø    [Ò     Ø˜G˜8Ñ$ˆÜ—‘  w°¸#± Ñ'?Ð@ÓAˆÜ˜e›* uÑ,¨aˆà5‘    ˜2˜e™9ˆ€Rô˜CŸI™IÓ &€Fô(¨¯©Ó1ò+‰ ˆˆvØ ˜Ò Ø M‰M˜5 &˜/Õ *ð+ô
(¨¯©Ó1ò‰ ˆˆvð*0×0™+˜$ ’Ð0ˆÑ0ð    Ø—k‘k %Ó(ˆGð ˜w™‰IˆAˆvؘ‰|à#(¬#¨f°fÓ*=Ð">w’ð
˜YÑ&¨Ð/ؘYÑ&¨Ð/ð/w˜w¨™{Ñ+ð%ô.X‰XfÓ €Fô ˆeUÓ
€Cä ]‰]˜C %™K¨%Ñ/Ð1¸Ô @€FØ L‰L× Ñ €EØ ò8ˆØa‘5ˆØ E‰>˜a 7™l±9ÀÈ#ÁØ ‰NˆAؘ‘)ˆØ" 6 EÐ*ˆˆØ Ð-Ò -Ø'/°°Ð'7ˆGC˜˜e™ Ñ $ð8ðò0ˆØa‘5ˆØ E‰>˜a 7™l±9ÀÈ#ÁØ ‰NˆAؘ‘)ˆØ" 6 EÐ*ˆˆØ ˜Ó ¢UØ'¨¨Ð/ˆGUFGÑ ð0ð ‡KKc€KÔØ °
Ñ ;€FÜ ”} V¨XÓ6Ñ A¸&Ñ AÐAùòs ,ùóV1øôò    +à M‰M˜5 &˜/× *ð    +ús$Å&    RÅ0RÌ5 R ÍRÒR1Ò0R1có
—||fSrr)r;rIrJrKrLrMrus       rÚ_rec_join_dispatcherrt{rOr!có0—||||dddœ}t|||fi|¤ŽS)z¨
    Join arrays `r1` and `r2` on keys.
    Alternative to join_by, that always returns a np.recarray.
 
    See Also
    --------
    join_by : equivalent function
    FT)rKrLrMrurnro)r)r;rIrJrKrLrMrurrs        rrrs.€ð#°ÈØ&°5ÈñN€Fä 3˜˜BÑ ) &Ñ )Ð)r!)F)NN)NT)TFr)NNNN)ròFFF)NròTF)FF)r)NNN)NFÚunsafe)NNNNN)NNFFrv)T)NTFF)NTF)NNNNNN)rQÚ1Ú2NTF)rQrwrxN)?Ú__doc__r`ÚnumpyrCÚnumpy.margÚnumpy.ma.mrecordsÚmrecordsrjÚnumpy._core.overridesrÚnumpy.lib._iotoolsrÚ__all__r rr3r r r
rGrJr rUr]rerprxrzrrrr¨r«rr¯rr¶rrÁrrÆrrÑrårérrrrrrrr!rr'rr>r    rNrrtrrr!rú<module>rsðñóãÝߠРÝ9Ý.ò €òñÐ:Ó;ñ$ó<ð$òN
ò@òBòBó6 ó  8ó-ò`
ò ó "ó0ó" ðBFØ6:óñ
Ð1Ó2Ø38Ø+0òEó3ðEóPñÐ0Ó1ò:Gó2ð:GózGò2ñÐ4Ó5ñIó6ðIòñÐ2Ó3ñ%ó4ð%ðP9=ØHLóñ Ð2Ó3Ø,0Ø:?òCGó4ðCGóLñ
Ð6Ó7ò9ó8ð9óDñÐ2Ó3òQ"ó4ðQ"óf#òJ*ðZBFØ37óñÐ?Ó@ò1óAð1ðDCGØJNóñÐ?Ó@ØBGØ3;òi'óAði'òVñÐ7Ó8ñ'ó9ð'óVñÐ:Ó;ò#3ó<ð#3òJñÐ3Ó4ñ)ó5ð)ðX=AØ:>óñ
Ð1Ó2ØAFØ"òT?ó3ðT?ðp48óñ
Ð4Ó5ò7ó6ð7ðv?CØ04óñ Ð,Ó-ØDGØ49ònBó.ðnBðd?CØóñ Ð-Ó.ØEHØò *ó/ð *ñr!