o 6aY@snddlZddlZddlZddlZddlZddlZddlmZm Z ddl m Z ddl m Z daddZdd Zd d ZGd d d ZeZgdZddgiZeddged<eddged<dged<dged<edddged<edddged<edddged<edddged<eddged<eddged<eddged<eddged<edddged<edgded<eddged<ejjdksejjdkrejd kreefd!kregd"edgd#ed$<ed$gd%ed&<eddd'ged'<Gd(d)d)ZGd*d+d+ZGd,d-d-Z Gd.d/d/Z!dS)0N)assert_ assert_equal)typeinfo)utilcCstts tdtdur8d}tjt}tj |dddtj |dddtj |ddd g}t ||d adSdS) z6 Build the required testing extension module zNo C compiler availableNz config.add_extension('test_array_from_pyobj_ext', sources=['wrapmodule.c', 'fortranobject.c'], define_macros=[]) srcarray_from_pyobjz wrapmodule.cz..zfortranobject.czfortranobject.htest_array_from_pyobj_ext) rhas_c_compilerpytestskipwrapospathdirname__file__joinbuild_module_distutils) config_codedrrH/usr/lib/python3/dist-packages/numpy/f2py/tests/test_array_from_pyobj.py setup_modules  rcCst|d}t|S)N)r array_attrs flags2names)arrflagsrrr flags_info)srcCs0g}dD]}t|tt|d@r||q|S)N) CONTIGUOUSFORTRANOWNDATA ENSURECOPY ENSUREARRAYALIGNED NOTSWAPPED WRITEABLEWRITEBACKIFCOPY UPDATEIFCOPYBEHAVED BEHAVED_ROCARRAYFARRAYr)absgetattrr append)rinfoflagnamerrrr.s  rc@s@eZdZgfddZddZddZddZd d Zd d Zd S)IntentcCsP|dd|_d}|D]}|dkr|tjO}q |ttd|O}q ||_dS)Nroptional F2PY_INTENT_) intent_listr F2PY_OPTIONALr.upperr)selfr5rirrr__init__<s  zIntent.__init__cCs&|}|dkr d}||j|gS)Nin_in)lower __class__r5)r8namerrr __getattr__FszIntent.__getattr__cCsdd|jS)Nz intent(%s),)rr5r8rrr__str__LszIntent.__str__cCs d|jS)Nz Intent(%r)r5rBrrr__repr__O zIntent.__repr__cGs|D] }||jvr dSqdS)NFTrD)r8namesr?rrr is_intentRs  zIntent.is_intentcGst|jt|ko |j|SN)lenr5rH)r8rGrrris_intent_exactXszIntent.is_intent_exactN) __name__ __module__ __qualname__r:r@rCrErHrKrrrrr2:s   r2)BOOLBYTEUBYTESHORTUSHORTINTUINTLONGULONGLONGLONG ULONGLONGFLOATDOUBLECFLOATrOrPrQrRrSrTrUrVrWrXrYrZ)rUrZr[r[r\win32)Darwinarm) LONGDOUBLECDOUBLE CLONGDOUBLE)rWrZr[rbrb)r\rcrdrdrcc@sHeZdZiZddZddZddZddZd d Zd d Z d dZ dS)TypecCst|tjr"|}d}tD]\}}t|ts!|j|jur!|}nq|j|d}|dur1|St |}| |||j|<|SrI) isinstancenpdtyperitemstype _type_cachegetr7object__new___init)clsr?dtype0nr9objrrrrns   z Type.__new__cCsb||_t|j}ttd|j|_t|j|jt |j |_ |j |_ |j d|_ |j |_dS)NNPY_r^)r7NAMErr.r type_numrnumrgrhrjbitselsizechar dtypechar)r8r?r0rrrros    z Type._initcsfddtjDS)Ncg|]}|qSrr>.0_mrBrr z#Type.cast_types..) _cast_dictrurBrrBr cast_typesszType.cast_typescsfddtDS)Ncr|rr}r~rBrrrrz"Type.all_types..) _type_namesrBrrBr all_typesszType.all_typescCs:t|jj}g}tD]}t|j|kr|t|q |SrIrru alignmentrr/rer8rxtypesr?rrr smaller_types zType.smaller_typescCsFt|jj}g}tD]}||jkrq t|j|kr |t|q |SrIrrrrr equal_typess  zType.equal_typescCs:t|jj}g}tD]}t|j|kr|t|q |SrIrrrrr larger_typesrzType.larger_typesN) rLrMrNrkrnrorrrrrrrrrres  rec@s,eZdZddZddZddZddZd S) Arrayc Cs||_||_||_t||_||_t|j ||j ||_ t t |j tjtt|j t|j |_t|dkr|jdrot |j tj@t |j j d t|j j t|ddft |j j dt |jdtj@ n$t |j tj@ t |j j dt |j j d t |jdtj@|durd|_d|_dS|drt t |tjtt|t|j||_n(tjtj||jdj||jdrd pd d |_t |jj|kt|jj|f|jj|j j d d t |jj d||ft|j|_t|dkrH|jdr-t |jj d t |jj dt |jdtj@ nt |jj dt |jj d t |jdtj@t |jd|jdkt |jd|jdk|jddkrt |jd|jdkt|jd|jd|j |jft |jddd|jdddkt|jd|jdft |jd|jdkt|jd|jdt d|jd|jdt |jd|f|drt |jdd|jj!kt|jdd|jj!fnt |jdd|jj!kt|jdd|jj!ft |"|j|j t |jtjr<|j!t#|jj!kr>|ds@|jddkrBt |$dSdSdSdSdS)Nrcr rrrcacherhCF)orderr&writer!rcopy)%rjdimsintentrdeepcopyobj_copyrsr callrvrrrrfrgndarrayreprrarr_attrrJrH F2PY_INTENT_Cr.r pyarr pyarr_attrarrayreshaper{rhsetflagstobytesrry arr_equalrehas_shared_memory)r8typrrrsrrrr:s     $ zArray.__init__cCs|j|jkrdS||kS)NF)shapeall)r8arr1arr2rrrrs  zArray.arr_equalcCs t|jSrI)strrrBrrrrCrFz Array.__str__cCs@|j|jurdSt|jtjsdSt|j}|d|jdkS)z?Check that created array shares data with input array. TFr)rsrrfrgrr rr)r8obj_attrrrrr s  zArray.has_shared_memoryN)rLrMrNr:rrCrrrrrrs Q rc@seZdZddZdS) TestIntentcCsvtttjjdttjjdttjjd ttjjddttjjddttjd dS)Nzintent(in,out)rr<) rrrr;outrrrHrKrBrrr test_in_out-s zTestIntent.test_in_outN)rLrMrNrrrrrr+s rc@s"eZdZddgZgdgdgZejddeddd Zd d Z d d Z ej dddgej dddgej dddgddZ ddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Zd=d>Z d?S)@TestSharedMemoryrr)rrr)r]rrTclass)autousescopeparamscs"tjj_fddj_dS)Ncsttj|||SrI)rreparam)r8rrrsrequestrr=sz-TestSharedMemory.setup_type..)rerrprjr)r8rrrr setup_type:szTestSharedMemory.setup_typecCs&|dgtj|j}t| dS)Nr)rrr;num2seqrrr8arrrtest_in_from_2seq@sz"TestSharedMemory.test_in_from_2seqcCs|jD]8}tj|j|jd}|t|jgtj|}|j |jj kr2t | t |jj|jfqt | t |jqdSNr) rjrrgrrrhrJrr;ryrrrr8trsrrrrtest_in_from_2casttypeDsz'TestSharedMemory.test_in_from_2casttyperwrorrrinp2seq23seqcCsdt|d|}tj||jj|d}|j|dkd||j|dkr%tjj p'tj|}| s0JdS)z>Test if intent(in) array can be passed without copies rwrhrrrrN) r.rgrrjrhrrrr;rr)r8rrrseqrsrrrrtest_in_nocopyNs "zTestSharedMemory.test_in_nocopyc Cstj|j|jjd}|t|jgtj|}t| z|dgtj j|j}Wtdt yG}zt | ds<WYd}~dSd}~ww)Nrrz6failed to initialize intent(inout|inplace|cache) arrayz,intent(inout) should have failed on sequence)rgrrrjrhrJrinoutrrr; TypeErrorr startswith SystemError)r8rsrmsgrrrtest_inout_2seqZs z TestSharedMemory.test_inout_2seqc Cstj|j|jjdd}t|jt|jdf}||tjj|}t | tj|j|jjdd}t|jt|jdf}z||tjj|}Wtdt yf}zt | ds[WYd}~dSd}~ww)Nrrrrz(failed to initialize intent(inout) arrayz2intent(inout) should have failed on improper array)rgrnum23seqrjrhrJrr;rrr ValueErrorrrr)r8rsrrrrrrtest_f_inout_23seqhs" z#TestSharedMemory.test_f_inout_23seqcCsPtj|j|jjd}t|jt|jdf}||tjjj |}t | dSNrr) rgrrrjrhrJrr;rrrrr8rsrrrrrtest_c_inout_23seqzsz#TestSharedMemory.test_c_inout_23seqcCsV|jD]#}tj|j|jd}|t|jgtjj |}t | t |jqdSr) rjrrgrrrhrJrr;rrrrrrrrtest_in_copy_from_2casttypes z,TestSharedMemory.test_in_copy_from_2casttypecCs8|t|jt|jdgtj|j}t| dSNr)rrJrrr;rrrrrrtest_c_in_from_23seqsz%TestSharedMemory.test_c_in_from_23seqcCs`|jD](}tj|j|jd}|t|jt|jdgtj|}t | t |jqdSr) rjrrgrrrhrJrr;rrrrrrrtest_in_from_23casttypesz(TestSharedMemory.test_in_from_23casttypecCs|jD];}tj|j|jdd}|t|jt|jdgtj|}|j |jj kr5t | t |jqt | t |jqdSNrrr) rjrrgrrrhrJrr;ryrrrrrrrtest_f_in_from_23casttypesz*TestSharedMemory.test_f_in_from_23casttypecCs|jD];}tj|j|jd}|t|jt|jdgtjj |}|j |jj kr5t | t |jqt | t |jqdSr)rjrrgrrrhrJrr;rryrrrrrrrtest_c_in_from_23casttypesz*TestSharedMemory.test_c_in_from_23casttypecCsd|jD]*}tj|j|jdd}|t|jt|jdgtjj |}t | t |jqdSr) rjrrgrrrhrJrr;rrrrrrrrtest_f_copy_in_from_23casttypesz/TestSharedMemory.test_f_copy_in_from_23casttypecCsd|jD]*}tj|j|jd}|t|jt|jdgtjj j |}t | t |jqdSr)rjrrgrrrhrJrr;rrrrrrrrrtest_c_copy_in_from_23casttypes z/TestSharedMemory.test_c_copy_in_from_23casttypec CsL|jD]}|j|jjkrqtj|j|jd}t|jf}||tj j j |}t | t|j||tj j |}t | t|jtj|j|jdd}||tj j j |}t | t|j||tj j |}t | t|jz||tj j |ddd}Wtdty}zt|dsWYd}~qd}~wwdS)Nrrr(failed to initialize intent(cache) arrayz8intent(cache) should have failed on multisegmented array)rjrryrgrrrhrJrr;rrrrrrrrr)r8rrsrrrrrrtest_in_cache_from_2casttypes4  z-TestSharedMemory.test_in_cache_from_2casttypec Cs|jD]A}|j|jjkrqtj|j|jd}t|jf}z||tj j |Wtdt yF}zt | ds<WYd}~qd}~wwdS)Nrrz1intent(cache) should have failed on smaller array)rjrryrgrrrhrJrr;rrrrr)r8rrsrrrrr$test_in_cache_from_2casttype_failures"  z5TestSharedMemory.test_in_cache_from_2casttype_failurec Csd}||tjjd}t|jj|kd}||tjjd}t|jj|kd}z||tjjd}Wt dtyQ}zt| dsFWYd}~dSd}~ww)Nrrrrr2failed to create intent(cache|hide)|optional arrayz8intent(cache) should have failed on undefined dimensions) rrrhiderrrrrrrr8rrrrrrtest_cache_hiddens$z"TestSharedMemory.test_cache_hiddenc Cs`d}||tjd}t|jj|kt||jtj||j j dd}||tjd}t|jj|kt||jtj||j j dt|jj doQ|jj d d}||tj jd}t|jj|kt||jtj||j j dt|jj d o|jj dd}z ||tjd}Wtdt y}zt|dsWYd}~dSd}~ww) Nrrrr rrrz7intent(hide) should have failed on undefined dimensions)rrrrrrrrgzerosrjrhrrrrrrrrrr test_hiddens0   zTestSharedMemory.test_hiddencCsd}||tjd}t|jj|kt||jtj||j j dd}||tjd}t|jj|kt||jtj||j j dt|jj doQ|jj d d}||tj jd}t|jj|kt||jtj||j j dt|jj d o|jj ddS)Nrrrr r) rrr3rrrrrgrrjrhrr)r8rrrrrtest_optional_nones   "z#TestSharedMemory.test_optional_nonecCsB|j}t|f}||tj|}t|jj|kt| dSrI) rrJrrr3rrrrrrrrtest_optional_from_2seq$s  z(TestSharedMemory.test_optional_from_2seqcCs||j}t|t|df}||tj|}t|jj|kt| ||tjj |}t|jj|kt| dSr) rrJrrr3rrrrrrrrrtest_optional_from_23seq+sz)TestSharedMemory.test_optional_from_23seqcCstj|j|jjd}t|jd o|jd|j}||tj |}t|dd|j ddkt ||j fd|j dd<t|dd|j ddkoXtjd|jjdknt ||j ft|j |ut|jdt|jd dSNrr rrr6) rgrrrjrhrrrrinplacerrrrrr test_inplace6s*  zTestSharedMemory.test_inplacecCsH|jD]}||jur qtj|j|jd}t|jj|jkt|jj|jjut|jd o4|jd|j}||t j |}t|dd|j ddkt ||j fd|j dd<t|dd|j ddkowtjd|jjdknt ||j ft|j |ut|jdt|jd t|jj|jjuqdSr) rjrrgrrrhrrrrrrr)r8rrsrrrrrtest_inplace_from_casttypeCs* *  z+TestSharedMemory.test_inplace_from_casttypeN)!rLrMrNrrr fixturerrrrmark parametrizerrrrrrrrrrrrrrrrrrrrrrrrr6s<      r)"rsysrplatformr numpyrg numpy.testingrrnumpy.core.multiarrayrrr rrrr2rrrintprhitemsize clongdoublersystem processorextendrerrrrrrrs^   !   " >f