o 6am@sdZddlZddlmZddlmZddlZddlmZddl m Z ddl m Z m Z mZdd Zdd d Zd dZGdddZGdddZGdddZGdddZGdddZGdddZdS)z Tests for array coercion, mainly through testing `np.array` results directly. Note that other such tests exist e.g. in `test_api.py` and many corner-cases are tested (sometimes indirectly) elsewhere. N)param)product)rational)_discover_array_parameters)assert_array_equal assert_warnsIS_PYPYc#sdd}t|ddVGdddtjfdd}|VGd d d }Gd d d |}t|d dVttddVGddd|}t|ddVGddd|}t|ddVdS)z Generator for functions converting an array into various array-likes. If full is True (default) includes array-likes not capable of handling all dtypes cSs|SNar r F/usr/lib/python3/dist-packages/numpy/core/tests/test_array_coercion.pyndarrayzarraylikes..ndarrayridc@s eZdZdS)zarraylikes..MyArrN)__name__ __module__ __qualname__r r r r MyArr!srcs |Sr )viewr rr r subclass$ zarraylikes..subclassc@seZdZddZddZdS)z!arraylikes.._SequenceLikecStr  TypeErrorselfr r r __len__-rz)arraylikes.._SequenceLike.__len__cSrr rrr r r __getitem__0rz-arraylikes.._SequenceLike.__getitem__Nrrrrr r r r r _SequenceLike)s r"c@seZdZddZdddZdS)zarraylikes..ArrayDundercSs ||_dSr r rr r r r __init__5rz(arraylikes..ArrayDunder.__init__NcSs|jSr r )rdtyper r r __array__8sz)arraylikes..ArrayDunder.__array__r )rrrr$r&r r r r ArrayDunder4sr'r& memoryviewc@eZdZddZdS)z"arraylikes..ArrayInterfacecS||_|j|_dSr )r __array_interface__r#r r r r$B z+arraylikes..ArrayInterface.__init__Nrrrr$r r r r ArrayInterfaceA r.r+c@r))zarraylikes..ArrayStructcSr*r )r __array_struct__r#r r r r$Jr,z(arraylikes..ArrayStruct.__init__Nr-r r r r ArrayStructIr/r1r0N)rnprr()rrr"r'r.r1r rr arraylikess  r3TccsltttdddVtttdddVtttdddV|r7tttdddVtttdddVtttdd dV|r`ttt dd dVtt d d dVtt d d dVtt d ddVtt d ddVttd ddVttd ddVttd ddVttd ddV|rttdd ddVtdgdd}t|tjsJ|jtdksJt|ddV|rttd ddVttddddVttddddVttdd dVttd!d"d#dVttd$d%dVttd&d'dVttd(d)dVdS)*Nfloat16rfloat32float64 longdoubley@@ complex64 complex128 clongdoubleint8int16int32int64uint8uint16uint32uint64r)rEzi,ir structuredtimedelta64[generic]stimedelta64[s]NaTtimedelta64[s](NaT)datetime64[generic](NaT)z2020-06-07 12:43mszdatetime64[ms]s1234bytes2345unicodes4321unstructured_void)rr2sqrtr5r6r7r8r9r: longcomplexr=r>r?r@rArBrCrDrarray isinstancevoidr% timedelta64 datetime64bytes_unicode_)timesextended_precision user_dtyperGr r r scalar_instancesQsBr`cCs6|jdkrdSt|jtjtjfr|jdrdSdS)zpReturns True if the the dtype is a parametric legacy dtype (itemsize is 0, or a datetime without units) rT64F)itemsize issubclasstyper2rZrYnameendswithr%r r r is_parametric_dtypes  rhc@seZdZejjdedddddggddd d Zejjdedddddggddd d Zejd e ddZ dS)TestStringDiscoveryobj333333? +Nstring)objectz1.2z10**43Nonern)idscCstt|}td|}tj|ddj|ksJtj|gddj|ks'Jtj|dd}tj|ddj|ks:J|dj|ksDJdS)NSrgO)lenstrr2r%rVastyperrjlengthexpectedarrr r r test_basic_stringlengths z+TestStringDiscovery.test_basic_stringlengthcCsJtt|}td|}tj|dd}tj||gddj|ks#JdS)Nrrrsrg)rtrur2r%rVrwr r r test_nested_arrays_stringlengths  z3TestStringDiscovery.test_nested_arrays_stringlength arraylikecCsrtdg}td|d<tt|d}td|}||}tj|gdd}|jdks0J|j|ks7JdS)NrkrrrrgrErE)r2rVrtrur%shape)rr}rjrxryrzr r r test_unpack_first_levels z+TestStringDiscovery.test_unpack_first_level) rrrpytestmark parametrizeror{r|r3rr r r r ris   ric@seZdZddZddZddZddZej d e d d Z ej d d dZ ej d e ddZejjeddej dej de ddZej dejdddZej dejdddZdS) TestScalarDiscoverycCs>tjddd}|jdksJtjdgdd}|jdksJdS)N)rEr<rFzi,i,irgr rE)r2rVrrrzr r r test_void_special_casesz*TestScalarDiscovery.test_void_special_casecCs^tjddd}|jdksJ|jjdksJtjdgdd}|jdks%J|jjdks-JdS)Nrncrg)rEr)r2rVrr%charrr r r test_char_special_cases z*TestScalarDiscovery.test_char_special_casecCsdg}ttjdD]}|g}q tj|dd}|jdtjddks%Jtttj|gddWddS1s>wYdS)Nrnr<rrgrrEr)ranger2MAXDIMSrVrrraises ValueError)rnestedirzr r r test_char_special_case_deeps "z/TestScalarDiscovery.test_char_special_case_deepcCs2tt}|jdks J|jtdksJdS)Nr rs)r2rVrorr%rr r r test_unknown_objects z'TestScalarDiscovery.test_unknown_objectscalarcCsZt|}|jdks J|j|jksJt||gg}|jdks#J|j|jks+JdS)Nr rEr<)r2rVrr%)rrrzr r r test_scalars zTestScalarDiscovery.test_scalarz)ignore:Promotion of numbers:FutureWarningc CstttD]]\}}|jd|jd}}z t||g}Wn ttfy*Yqw|jdks2Jz|j|j}}t ||}|j|ksGJWqtyd}z|jtdksZJWYd}~qd}~wwdS)Nrr<rs) rr`valuesr2rVrrrr% promote_types)rsc1sc2rzdt1dt2expected_dtypeer r r test_scalar_promotions"  z)TestScalarDiscovery.test_scalar_promotioncCst|tjrt||dd}t|turtdtj|td |j }t| d}t|g}tj d|j d}||d<tj d|j d}|g|dd<t ||t ||t ||t ||dS)Nr<g?z/Rational to object cast is undefined currently.rgrEr)rWr2inexactrdrrxfailrVrorvr%reshapeemptyr)rrrzarr1arr2arr3arr4r r r test_scalar_coercions       z(TestScalarDiscovery.test_scalar_coercionz%`int(np.complex128(3))` fails on PyPyreasonzignore::numpy.ComplexWarningcast_toc Cs|j}tddD]}|jd}|jtjkrM|jjdurM|jdurMtt t | |Wdn1s8wYtj ||dtj |g|dqz t | |}Wnzt t t fytttj ||dWdn1sxwYt|trt|tjrYdStttj |g|dWdn1swYtjd|d}tt||d<WdYdS1swYYdSwtj ||d}t||tjd|d}||d<t||qdS)aP Test that in most cases: * `np.array(scalar, dtype=dtype)` * `np.empty((), dtype=dtype)[()] = scalar` * `np.array(scalar).astype(dtype)` should behave the same. The only exceptions are paramteric dtypes (mainly datetime/timedelta without unit) and void without fields. F)r]rNrgr )r%r`rrdr2rXfieldsrrrrVrvr RuntimeError ExceptionrWr issubdtype signedintegerzerosr)rrr%rcastresrzassr r r 0test_scalar_coercion_same_as_cast_and_assignmentsL             zDTestScalarDiscovery.test_scalar_coercion_same_as_cast_and_assignment dtype_charAllcCsh|dvr t|d}n|dkrtd}nt|}tgt|\}}||ks*J|j|jks2JdS)NSU1VV8)r2r%rrdrb)rrr%discovered_dtype_r r r test_default_dtype_instanceYs   z/TestScalarDiscovery.test_default_dtype_instancer%Integerc Cst|}td}ttj}||fD]P}tj||d}t||}t||t t t ftj|g|dWdn1sDwYt t t f ||d<Wdn1s_wYqdS)z Signed integers are currently different in that they do not cast other NumPy scalar, but instead use scalar.__int__(). The harcoded exception to this rule is `np.array(scalar, dtype=integer)`. rgNr ) r2r% ulonglongr7nanrVrvrrrr OverflowError)rr% invalid_int float_nanrcoercedrr r r 'test_scalar_to_int_coerce_does_not_castis      z;TestScalarDiscovery.test_scalar_to_int_coerce_does_not_castN)rrrrrrrrrrr`rfilterwarningsrrrrrr2 typecodesrrr r r r rs&     8 rc @sFeZdZejdejejgejde e dddde e dddde e dd d de e d d d dgddZ ejdejejgejde e dddde e dd ddgddZ ejdddgejddge dddde dd ddgddZejddge dddde dd ddgddZd S)!TestTimeScalarsr%rrLrJrMr{rKgenericrNrEDz datetime64[D]cCstj||d}t||}t||tjd|d}t|tjr=tt  ||d<WddS1s6wYdS||d<t||dSNrgr ) r2rVrvronesrcintegerrrrrr%rrzrrr r r test_coercion_basics     "z#TestTimeScalars.test_coercion_basicnsztimedelta64[ns] rHcCsLtj||d}t||}tjd|d}||d<t||t||dSr)r2rVrvrrrr r r )test_coercion_timedelta_convert_to_numbers  z9TestTimeScalars.test_coercion_timedelta_convert_to_numberS6U6valunitz[s]z[D]cCst||}t|}|t|dd}tj||d}|d|ks%Jtjd|d}||d<|d|ks8Jtt t| |WddS1sQwYdS)Nrrgr ) r2rZr%rdrurVrrrrrv)rrrr%r cut_stringrzrr r r !test_coercion_assignment_datetimes  "z1TestTimeScalars.test_coercion_assignment_datetimecCsvt||}tj|ddt|d}tjddd}||d<|ddd}|d|ks1J|d|ks9JdS)Nrrgr rrr)r2rYrVrvr)rrrrrrryr r r "test_coercion_assignment_timedeltas z2TestTimeScalars.test_coercion_assignment_timedeltaN)rrrrrrr2r@r6rrYrZrrrrr r r r rs4     rc@s\eZdZddZddZejdeddZ ejdedd Z d d Z d d Z dS) TestNestedcCsdg}|}ttjdD]}|g}q tj|dd}|jdtjks#Jtttj|gddWdn1s;wYttj t|g}Wdn1sVwY|j t dkseJ|jdtjksoJ| |uswJdS)NrkrEr7rgrrs) rr2rrVrrrrrVisibleDeprecationWarningr%item)rinitialrrrzr r r test_nested_simples  zTestNested.test_nested_simplecCsfg}||tj|||gtd}|jddtjdksJtj|dg|gtd}|jdks1JdS)NrgrFrrE)rFrE)appendr2rVrorr)rlrzr r r !test_pathological_self_containings  z,TestNested.test_pathological_self_containingr}cCs|td}|}ttjdD]}|g}qtttj|ddWdn1s-wYtj|td}|j dtjksCJ| t| ksPJdS)Nr~rEr7rgr) r2rrrrwarnsDeprecationWarningrVrorr)rr}rrrrzr r r test_nested_arraylikess  z!TestNested.test_nested_arraylikescCstdd}||}tj||ggtd}|jdksJ|d|us%Jt|dtus/Jt t tj|||ggtdWddS1sKwYdS)N)r<r<rgrrrE) r2arangerrVrorrdlistrrr)rr}rzoutr r r test_uneven_depth_ragged s "z#TestNested.test_uneven_depth_raggedcCsptjgdgdgggtd}|jdksJtttjgtdgtdWddS1s1wYdS)NrErgr)rrE)r2rVrorrrrrrr r r test_empty_sequences  "zTestNested.test_empty_sequencecCstd}td}td}t||gtdd\}}|dks"Jt||gtdd\}}|dks5Jtj||gtdd}|d|usIJ|d |usQJdS) N)rFr<r)rFrFrsrg)r<rFrrrE)r2rrr%asarray)rrzmismatch_first_dimmismatch_second_dimr%rrr r r test_array_of_different_depths$s     z)TestNested.test_array_of_different_depthsN) rrrrrrrrr3rrrrr r r r rs   rc@s$eZdZddZddZddZdS)TestBadSequencescsdgGfdddt}|ddgtttWddS1s+wYdS)NceZdZfddZZS)z2TestBadSequences.test_growing_list..mylistcsddgtS)NrEr<)rsuperrr __class__rjr r rDs z:TestBadSequences.test_growing_list..mylist.__len__rrrr __classcell__r rjrr mylistCrrEr<rrrrrr2rVrrr rr test_growing_list@s   "z"TestBadSequences.test_growing_listcsrgGfdddt}ddg|ddgtttWddS1s2wYdS)Ncr)z2TestBadSequences.test_mutated_list..mylistcsddgd<tS)Nr<rFr)rrrrr r rUs  z:TestBadSequences.test_mutated_list..mylist.__len__rr rrr rTrrr<rFrErrr rr test_mutated_listQs  "z"TestBadSequences.test_mutated_listcsfgGfddd}td|gtttWddS1s,wYdS)Nc eZdZfddZddZdS)z7TestBadSequences.test_replace_0d_array..baditemcsddd<td)Nr<rznot actually a sequence!)rrrr r rbs z?TestBadSequences.test_replace_0d_array..baditem.__len__cSdSr r rr r r r frzCTestBadSequences.test_replace_0d_array..baditem.__getitem__Nr!r rr r baditemas  rr<)rr2rVrrr)rrr rr test_replace_0d_array^s   "z&TestBadSequences.test_replace_0d_arrayN)rrrrrrr r r r r:s rc@seZdZejdeddZddZddZ ejj e e j jdkd d d d Zejd gdejdeegddZejdeegddZdS)TestArrayLikesr}cCsNtd}||}tj|td}t||tj|gtd}|d|us%JdS)Nrgr)r2rVror)rr}rzrjrr r r test_0d_object_special_caseqs  z*TestArrayLikes.test_0d_object_special_casecCsGdddtj}td}||}t|}t||ttt|gWdn1s3wYt|}t|}t||tt t|gWddS1s]wYdS)Nc@r))zBTestArrayLikes.test_0d_generic_special_case..ArraySubclasscSstd)Nze.g. quantities raise on thisrrr r r __float__szLTestArrayLikes.test_0d_generic_special_case..ArraySubclass.__float__N)rrrr r r r r ArraySubclass~r/r r ) r2rrVrrrrrr(r)rr rzrjrr r r test_0d_generic_special_case}s        "z+TestArrayLikes.test_0d_generic_special_casecCsttj}|dtjusJttjg}|dtjusJGddd}t|}|d|us3Jt|g}|d|usAJdS)Nr rc@s,eZdZeddZeddZddZdS)z8TestArrayLikes.test_arraylike_classes..ArrayLikecSrr r rr r r r+zLTestArrayLikes.test_arraylike_classes..ArrayLike.__array_interface__cSrr r rr r r r0rzITestArrayLikes.test_arraylike_classes..ArrayLike.__array_struct__cSrr r rr r r r&rzBTestArrayLikes.test_arraylike_classes..ArrayLike.__array__N)rrrpropertyr+r0r&r r r r ArrayLikes    r)r2rVr@)rrzrr r r test_arraylike_classess   z%TestArrayLikes.test_arraylike_classeszNeeds 64bit platformrc Cstjddd}t|d}tdD]7}tt t|Wdn1s(wYttt|gWdn1sCwYqdS)z0Test the error paths, including for memory leaksrrArglr4N)r2rV broadcast_torrr MemoryError)rrzrr r r test_too_large_array_error_pathss     z/TestArrayLikes.test_too_large_array_error_paths attribute)r+r&r0errorcsPGfddd}tt|WddS1s!wYdS)Ncs eZdZfddZZS)zCTestArrayLikes.test_bad_array_like_attributes..BadInterfacecs|krt|dSr )r __getattr__)rattr)rrrr r rszOTestArrayLikes.test_bad_array_like_attributes..BadInterface.__getattr__)rrrrrr rrrr BadInterfacesrrrr2rV)rrrrr rr test_bad_array_like_attributess "z-TestArrayLikes.test_bad_array_like_attributescsNGfddd}tt|WddS1s wYdS)Ncr)zBTestArrayLikes.test_bad_array_like_bad_length..BadSequencecsr r rrr r rrzJTestArrayLikes.test_bad_array_like_bad_length..BadSequence.__len__cSsdS)NrEr rr r r r rzNTestArrayLikes.test_bad_array_like_bad_length..BadSequence.__getitem__Nr!r rr r BadSequences  rr)rrrr rr test_bad_array_like_bad_lengths "z-TestArrayLikes.test_bad_array_like_bad_lengthN)rrrrrrr3r r rskipifr2r%intprbrRecursionErrorrrr r r r r rps      r)TTT)__doc__rr itertoolsrnumpyr2numpy.core._rational_testsrnumpy.core._multiarray_umathr numpy.testingrrrr3r`rhrirrrrrr r r r s$     =8 *CPh6