
    ,VhM                         d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZmZmZmZmZmZ ddlmZmZmZ  G d d	      Z G d
 d      Z G d d      Zd Zy)z^Tests suite for mrecords.

:author: Pierre Gerard-Marchant
:contact: pierregm_at_uga_dot_edu

    N)maskednomask)temppath)recarrayfromrecords
fromarrays)MaskedRecords	mrecarrayr   fromtextfiler   addfield)assert_assert_equalassert_equal_recordsc            	           e Zd Zg dZg dZg dZdefdefdgZg dZ	 e
j                   e eeee            e	e      Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestMRecords               皙?皙@ffffff
@皙@      @   one   two   three   four   fiveabc|S8r   r   r   r   r   maskdtypec                    | j                   }|j                  t              }t        |j                  |j                         t        |j                  |j                         t        t        |j                  t                     t        |j                  |j                  j                  t                     dD ]  }t        ||   ||           t        |j                  t              |       y )Nr$   r%   r'   )baseviewr
   r   
recordmaskr   _maskr   
isinstance_datar   )selfr/   mbasefields       L/home/dcms/DCMS/lib/python3.12/site-packages/numpy/ma/tests/test_mrecords.pytest_byviewzTestMRecords.test_byview$   s    yy		)$U%%t7U[[$**5
5;;12U[[$**//(*CD$ 	4EeeEl3	4UZZ	2E:    c                 J   | j                   j                         }|j                  t              }dD ]-  }t	        t        ||      ||          t	        ||   ||          / |d   }t        t        |t                     t	        |j                  |j                         t	        |j                         d       t	        |j                  t               t	        |j                  j                         d       t	        |d   |d   d          |d   }t        t        |t                     t	        |j                  |j                         t	        |j                         d       t	        |j                  d       t	        |j                  j                         d	       t	        |d   |d   d          t        |d   t        u        |d d
 }t        t        |t                     t	        |j                  |j                         t	        |j                  ddg       t        |j                   t#        j$                  dd	g|j                  j                               t        ||d d
 j                  t                     dD ]  }t	        t        ||      |d d
 |            y )Nr.   r   )r   r   r   )FFFr$   )NNNT)TTTr   r   r,   )r/   copyr0   r
   r   getattrr   r3   r,   tolistr1   r   r2   itemr   r   r+   nparray)r5   r/   r6   r7   mbase_first
mbase_lastmbase_sls          r8   test_getzTestMRecords.test_get0   s$   yy~~		)$$ 	4E.e=eeEl3	4 Ah
;	23[&&4['')+;<[++V4[&&++-/DE[%uSz!}52Y

:y12Z%%u{{3Z&&(*<=Z**D1Z%%**,.@AZ_eCjn5
36)*!9
8Y/0X^^U[[1X((1a&1X]]XX'<'9';,1KK,=,=?	@ 	XtBQx}}Y'?@$ 	DE5148E?C	Dr:   c                    | j                   j                         }|j                  t              }|j                         }d|_        d|j
                  j                  d d  t        |d   j                  g d       t        |d   j                  g d       d|_        t        |d   j                  dgdz         t        t        j                  |d         dgdz         t        |j                  dgdz         t        |j                  j                         t        j                  g d	t        
             t         |_        t        |j"                  j$                  dgdz         t        |j"                  j                  dgdz         t        t        j                  |d         dgdz         t        t        j&                  |d         dgdz         t        |j                  j                         t        j                  g dt        
             |j                  t              j                         }d|j
                  dd  t        |j
                  g d       t        |j
                  j                  g d       t         |j(                  dd  t        |j(                  |d          t        |j(                  j                  g d       ddt*        fg}t        j                  g d|
      }|j                  t,              }t        j                  g dg d      }||d<   t        |j.                  |       t        |j.                  j$                  g d       y )N)i?B g@xDN/Ar   r$   )r   r   r   r   r   r)   r   r   F)r   r   r   r   r   r   rJ   rJ   rK   r=   r'      N/A)r   r   r   rK   rM   rM   rK   r   r   r   r   r   r   )r   r   r   r   r   r%   r   r   r   r   r   )alphaz|S1num))r$   r   )r%   r   )r'   r   )
         r   r   r   r+   )r/   r>   r0   r
   
fill_valuer$   r4   r   r2   magetmaskarrayr1   r@   rB   rC   boolr   r'   r+   getdatar%   intr	   rQ   )r5   r/   r6   ndtypedatardatavals          r8   test_set_fieldszTestMRecords.test_set_fieldsX   sq   yy~~		)$

0aU3Z%%7U3Z%%7U3Z%%s1u-R__U3Z01#a%8U%%wqy1U[['')XX *
 %)*	+ UWW\\A3q5)UWW''!Q/R__U3Z01#a%8RZZc
+fXaZ8U[['')XX *
 %)*	+ 		)$))+UWWo.UWW]]O4UWWd3i(UWW]]O4"UCL1xx6fE		-(hh|)4eUYY$UYY^^Y/r:   c                    | j                   j                         }|j                  t              }t        |d   d<   t        |j                  g d       t        |j                  j                  g d       t        t        j                  d      t        j                  j                  d      gdt        fdt        fg      }t        |d   d<   t        |j                  g d       t        |j                  j                  g d	       y )
Nr$   r   rO   r   r%   r=   )r   r   r   r   r   )r   r   r   r   r   )r/   r>   r0   r
   r   r   r$   r2   r   rB   arangerandomrandr\   floatr5   r/   r6   s      r8   test_set_fields_maskz!TestMRecords.test_set_fields_mask   s    yy~~		)$c
2UWWo.UWW]]O4BIIaL"))..*;<#&*sEl!;=c
2UWWo.UWW]]O4r:   c                    | j                   j                         }|j                  t              }t        |_        t        t        j                  |d         dgdz         t        |d   j                  |d   j                         t        |d   j                  |d   j                         t        |j                  j                         t        j                  dgdz  t                     t        |_        t        t        j                  |d         dgdz         t        |j                  j                         t        j                  d	gdz  t                     y )
Nr%   r   r   r$   r'   r   r   r   r=   r   rJ   )r/   r>   r0   r
   r   r+   r   rX   rY   r2   r@   rB   rC   rZ   r   rh   s      r8   test_set_maskzTestMRecords.test_set_mask   s    yy~~		)$
R__U3Z01#a%8U3Z%%uSz'7'78U3Z%%uSz'7'78U[['')XXyk!m48	: 
R__U3Z01#a%8U[['')XXyk!m48	:r:   c                    | j                   j                         }|j                  t              }g d|_        t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       g d|_        t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       y )N)r   r   r   r   r   r   r   r   r   r   )	r/   r>   r0   r
   r+   r   r$   r%   r'   rh   s      r8   test_set_mask_fromarrayz$TestMRecords.test_set_mask_fromarray   s    yy~~		)$$
UWW\\?3UWW\\?3UWW\\?3$
UWW\\?3UWW\\?3UWW\\?3r:   c                 |   | j                   j                         j                  t              }t	        j
                  g ddt        fdt        fdt        fg      }||_        t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       d|_        ||_        t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       y )	N)r   r   r   rq   r   r   r   rr   rJ   r$   r%   r'   r=   )r   r   r   r   r   )r   r   r   r   r   F)r/   r>   r0   r
   rB   rC   rZ   r+   r   r$   r%   r'   	fieldmask)r5   r6   nmasks      r8   test_set_mask_fromfieldsz%TestMRecords.test_set_mask_fromfields   s    		 %%i0C;dc4[9; 
UWW\\?3UWW\\?3UWW\\?3
UWW\\?3UWW\\?3UWW\\?3r:   c                    | j                   j                         }|j                  t              j                         }t        |d<   t        |j                  j                         t        j                  g dt                     t        |j                  g d       |j                  t              j                         }d|d d t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d	       t        |j                  j                  g d       t        |j                  j                  g d
       t        |j                  j                  g d       |j                  t              j                         }t        |d d t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       y )Nrc   )rJ   rk   rJ   rk   rk   r=   rO   r   r   r   r   )r   r   r   r   r   rn   )      @rx   r   r   r   )   5ry   r!   r"   r#   r   )r   r   r   r   r   r   r   )r/   r>   r0   r
   r   r   r2   r@   rB   rC   rZ   r1   r$   r4   r%   r'   rh   s      r8   test_set_elementszTestMRecords.test_set_elements   s   yy~~		)$))+b	KK HHL!	"
 	U%%7		)$))+bq	UWW]]O4UWW]]O4UWW]]$;<UWW]]O4UWW]]=	?UWW]]O4		)$))+bq	UWW]]O4UWW]]O4UWW]]$=>UWW]]O4UWW]]A	CUWW]]O4r:   c                    | j                   j                         }|j                  t              }|j	                          	 d|dd  t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  g d       t        |j                  j                  |j                  j                         t        |j                  j                  |j                  j                         t        d      # t        $ r Y nt        $ r  w xY w	 d|dd  t        d	      # t        t        f$ r Y y w xY w)
Nrw   rc   rN   )r   r   r   r   r   )r   r    r!   ry   r#   r)   z)Flexible hard masks should be supported !r   z.Should have expected a readable buffer object!)r/   r>   r0   r
   harden_maskr   r$   r4   r%   r'   r2   	ExceptionNotImplementedErrorAssertionError	TypeErrorrh   s      r8   test_setslices_hardmaskz$TestMRecords.test_setslices_hardmask   s#   yy~~		)$	I"E"#J8(?@BD866 GHH # 	 		
	NE"#J LMM $Y/ 		s%   C5E 	E
EE* *E<;E<c                    | j                   j                         }|j                  t              }|j	                          t        |j                         t        |_        t        |j                  |j                         |j                          t        |j                          t        |_        t        |j                  t        j                  |j                  |j                               t        t        j                   |d   j                        t        u        t#        |d   j                  |d   j                         y )Nr%   r$   )r/   r>   r0   r
   r|   r   	_hardmaskr   r+   r   r2   soften_maskrX   make_mask_noneshaper,   	make_maskr   rh   s      r8   test_hardmaskzTestMRecords.test_hardmask
  s    yy~~		)$ 
U[[$**5EOO#$
U[[..tzz4::F	HU3Z--.&89U3Z%%uSz'7'78r:   c                    | j                   j                         }|j                  t              }t	        dt
        j                  dz         D ]  }t        j                  ||      }t        j                  |      }t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                  |j                          y )Nr   r   )protocol)r/   r>   r0   r
   rangepickleHIGHEST_PROTOCOLdumpsloadsr   r,   r   r4   r2   )r5   r/   mrecproto_mrec_s         r8   test_picklingzTestMRecords.test_pickling  s    yy~~yy#1f559: 	:ETE2ALLOEdjj1 djj9djj1 djj9	:r:   c                    t        j                  g dg dt              }t        j                  g dg dt              }t        j                  g dg dd      }dt        fdt        fd	g}t	        |||g|d
      }|j                         }t        |d   t        j                  dt                     t        |d   t        j                  dt                     t        |d   t        j                  dd             y )Nr   r   r   rM   r*   r   r   r   onetwothreer(   r$   r%   r&   韆     i@rI   r,   rW   )r   r   r   r=   )r   r   r   r'   )r   r   rI   )rX   rC   r\   rg   r   filledr   rB   )r5   _a_b_cddtyper   
mrecfilleds          r8   test_filledzTestMRecords.test_filled'  s    XXiis;XXoIUCXX-IUK*sElL92r2,f%;=[[]
Z_bhh}C&HIZ_bhh/A5:'< 	=Z_bhh/D5:'< 	=r:   c                 8   t        j                  g dg dt              }t        j                  g dg dt              }t        j                  g dg dd      }dt        fd	t        fd
g}t	        |||g|d      }t        |j                         g d       y )Nr   rM   r*   r   r   rU   r(   r$   r%   r&   r   r   ))r   r   N)r   r   r    )NNr!   )rX   rC   r\   rg   r   r   r@   )r5   r   r   r   r   r   s         r8   test_tolistzTestMRecords.test_tolist6  s{    XXiis;XXoIUCXX-IUK*sElL92r2,f%;= 	T[[].	/r:   c                 \    t        dt        d      }d|d   d<   t        |d   d   d       y )Nr   r/   )formatsnamesrR   r   )r
   rg   r   )r5   xs     r8   test_withnameszTestMRecords.test_withnamesC  s/    af5!VQvYq\2&r:   c                 J   t        ddt        fddt        fg      }t        |d<   t	        |j                  d      j                         d       t        ddg      }t        |d<   t	        |j                  d      j                         t        j                  d	|j                        j                                t        d
d      }t        |d<   d|d<   |j                  d       t        |j                  d      t        j                  ddg|j                               y )Nr   i)sr(   fr=   r   )r      1g      ?)f0z<f8)r   r   )r   r   zi4, (2,3)float, floatrk   rJ   )r
   r\   rg   r   r   r   rA   rB   rC   r,   r   )r5   easysolomults       r8   test_exotic_formatsz TestMRecords.test_exotic_formatsI  s    C:|c5\"JKQT[[^((*M:#8"9:QT[[^((*XXd$**5::<	> "9:QQAT[[^XXy)&<,0JJ8	9r:   N)__name__
__module____qualname__ilistflistslistr\   rg   r   r+   rX   rC   listzipr/   r9   rG   ra   ri   rl   ro   ru   rz   r   r   r   r   r   r   r    r:   r8   r   r      s    E%E8ECj3,5FD288DUE512VLD
;&DP50n5: 44"5@N:9"
:=/'9r:   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestViewc                 4   t        j                  d      t         j                  j                  d      }}dt        fdt        fg}t        j
                  t        t        ||            |      }t        ||g|d      }d|j                  d<   ||||f| _
        y )	NrR   r$   r%   r=   )g      "g     Xr   )FTr   )rB   rd   re   rf   rg   rC   r   r   r   r+   r^   )r5   r$   r%   r]   arrr   s         r8   setup_methodzTestView.setup_method_  s{    ))B-!3A,e-hhtC1If51a&;G$		!1a%	r:   c                     | j                   \  }}}}|j                         }t        t        |t                     t        ||       t        |j                  |j                         y )N)r^   r0   r   r3   r	   r   r2   )r5   r   r$   r%   r   tests         r8   test_view_by_itselfzTestView.test_view_by_itselfh  sJ     IIq!Syy{
4/0T4(TZZ4r:   c                 J   | j                   \  }}}}t        df}|j                  |      }t        t	        |t
        j                               t        |t        j                  t        t        ||            t                     t        |d   t
        j                  u        y )Nr   r=   )r   r   )r^   rg   r0   r   r3   rX   MaskedArrayr   rB   rC   r   r   r   )r5   r   r$   r%   r   ntyper   s          r8   test_view_simple_dtypezTestView.test_view_simple_dtypeo  sr     IIq!S
yy
401T288DQO5ABT
bii'(r:   c                 ~   | j                   \  }}}}dt        fdt        fg}|j                  |      }t        t	        |t
                     t        ||j                  |             t        |d   d   t        u        t        |j                  t        j                  |             t        |j                  d u        y )NABr   )r^   rg   r0   r   r3   r	   r   r   r   r,   rB   _fill_value)r5   r   r$   r%   r   alttyper   s          r8   test_view_flexible_typez TestView.test_view_flexible_typew  s     IIq!S<#u.yy!
4/0T388G#45S	!&'TZZ'!23  D()r:   N)r   r   r   r   r   r   r   r   r:   r8   r   r   ]  s    &5)*r:   r   c                   N   e Zd Z ej                  g dg de      Z ej                  g dg de      Z ej                  g dg dd      Z	defdefd	gZ
 eeee	ge
d
      Z eej                  ej                  e	j                  fe
      Zeee
fZd Zd Zd Zd Zd Zy)TestMRecordsImportr   rM   r*   r   )r   r    r!   r(   r$   r%   r&   )s   99999s   99999.rL   r   r=   c                    t        j                  g dg dt              }t        j                  g dg dt              }t        j                  g dg dd      }| j                  \  }}}t        d|||f      D ]/  \  }}t        t        ||      j                  |j                         1 t        j                  g dg d	t              }	t        t        |	|j                  
      |d          y )Nr   rM   r*   r   r   r(   r.   )r   r   r   rU   r=   r   )rX   rC   r\   rg   r^   r   r   r?   r2   objectr   r   r,   )
r5   r   r   r   r   nrecr   r   l_xs
             r8   test_fromarraysz"TestMRecordsImport.test_fromarrays  s    XXiis;XXoIUCXX-IUK))tQ/BB<8 	:FQq)//9	: XXoIVDZ$**=tAwGr:   c                 2   | j                   \  }}}g d}t        |d      }t        |d      }t        ||       t        |      }t	        |j
                  |j
                         |j
                  j                  D ],  }t	        t        ||      t        |j                  |             . t        |j                         d      }t	        |j
                  dt        fdt        fdg       t        dd	      D ]/  \  }	}
t	        t        ||	      t        |j                  |
             1 t        |      }t	        |j
                  |j
                         t        |j                  |j                                t        |j                  |j                         y )
N))r   abcg   @r   )r   xyg   @r   )r    g   ?r   zc1, c2, c3, c4)r   zc1,c2,c3c1c2)c3z|S5)r   r   r   r.   )r^   recfromrecordsr   r   r   r,   r   r?   r4   r@   r\   rg   r   r   r2   )r5   r   r   r   palistpampa_mrecr7   r   ns              r8   test_fromrecordsz#TestMRecordsImport.test_fromrecords  s@   #yytV4 F*:;&(89R%D!U[[$**-[[&& 	LE.

E0JK	L DKKM<U[[D#;u}"MN,o> 	DFQ*GDJJ,BC	D D!U[[$**-U[[$++-8U[[$**5r:   c                    | j                   \  }}}t        |j                         |g d      }t        |j                  |j                         t        |j                  j                         g d       t        |j                         |d      }t        |j                  |j                         t        |j                  j                         g d       t        |j                         ||j                        }t        |j                  |j                         t        |j                  j                         |j                  j                                t        |j                         ||j                  j                               }t        |j                  |j                         t        |j                  j                         |j                  j                                y )Nrq   )r,   r+   )rJ   rk   rJ   T)rk   rk   rk   )r^   r   r@   r   r4   r   r2   )r5   r   r   r   r   s        r8   test_fromrecords_wmaskz)TestMRecordsImport.test_fromrecords_wmask  s6   #yytVDKKMjIU[[$**5U[['')+LMDKKMdCU[[$**5U[['')+LMDKKMdjjIU[[$**5U[['')4::+<+<+>?DKKM!%!2!2!46U[[$**5U[['')4::+<+<+>?r:   c                    d}t               5 }t        |d      5 }|j                  |       d d d        t        |dd      }d d d        t	        t        t                     t        |j                  g d       t        |j                  j                  g d       t        |j                  g d       y # 1 sw Y   xY w# 1 sw Y   xY w)Nz#
'One (S)','Two (I)','Three (F)','Four (M)','Five (-)','Six (C)'
'strings',1,1.0,'mixed column',,1
'with embedded "double quotes"',2,2.0,1.0,,1
'strings',3,3.0E5,3,,1
'strings',4,-1e-10,,,1
w,ABCDEFG)	delimitervarnames)r   r   r   r   )r   r   g    OAg|۽)r   openwriter   r   r3   r	   r   FEr2   C)r5   fcontentpathr   mrectxts        r8   test_fromtextfilez$TestMRecordsImport.test_fromtextfile  s     	 Z 	L4dC "A!""43KG	L 	
7M23WYY-WYY__l3WYY 56" "	L 	Ls!   CB6C6B?	;CCc                     | j                   \  }}}g dg d}}t        |t        j                  ||            }t	        |j
                  |       t	        |j
                  j                  |       y )N)d      i,  rU   rV   )r^   r   rX   rC   r   f3r2   )r5   r   r   r   dms         r8   test_addfieldz TestMRecordsImport.test_addfield  sR    #yytV!9Abhhqq12TWWa TWW]]A&r:   N)r   r   r   rX   rC   r\   r   rg   r   r   r   r   r   recfromarraysr4   r   r^   r   r   r   r   r   r   r:   r8   r   r     s    	))3	7B	/		?B	, 
/BCj3,5Fr2rl&"*+D "((BHHbhh7vFD$D	H64@*7&'r:   r   c                  b    t        j                  ddgddgdt        fdt        fg      } | d    y )	N)r   2)r   4)r   r   )r   r   r$   r%   r*   r   )rX   masked_arrayr\   r   )ys    r8   #test_record_array_with_object_fieldr    s9    
	8fSzC=)	+A
 aDr:   )__doc__r   numpyrB   numpy.marX   r   r   numpy.testingr   numpy._core.recordsr   r   r   r   r  numpy.ma.mrecordsr	   r
   r   r   numpy.ma.testutilsr   r   r   r   r   r   r  r   r:   r8   <module>r     sc       # "   9 9D
"* "*L`' `'F	r:   