B t1`v2@sddlmZddlZddlZddlZddlZddlZddlZddl m Z m Z m Z ddl mZddlmZmZddlm Z dd gZejd krd nd Zd dZGddde ZGdddeZGdddeZGdddeZGdddeZGdddeZddZdd ZdS))absolute_importN) BaseHandlerregister unregister) numeric_types) b64decode b64encode)compatregister_handlersunregister_handlerslittle<>cCs|jj}|dkrtS|S)z%translate equals sign to native order=)dtype byteordernative_byteorder)arrrr8/tmp/pip-unpacked-wheel-wy5q9vwy/jsonpickle/ext/numpy.py get_byteordersrc@seZdZddZddZdS)NumpyBaseHandlercCsLt|dr||d<n0t|}d}||r@|t|d}||d<dS)Ntostringrz(numpy.record, )hasattrrr Zustr startswithlen)selfrdataprefixrrr flatten_dtypes   zNumpyBaseHandler.flatten_dtypecCs&|d}|drt|}t|S)Nr){[)rast literal_evalnpr)rrrrrr restore_dtype&s  zNumpyBaseHandler.restore_dtypeN)__name__ __module__ __qualname__r!r'rrrrrs rc@seZdZddZddZdS)NumpyDTypeHandlercCs||||S)N)r!)robjrrrrflatten.s zNumpyDTypeHandler.flattencCs ||S)N)r')rrrrrrestore2szNumpyDTypeHandler.restoreN)r(r)r*r-r.rrrrr+-sr+c@seZdZddZddZdS)NumpyGenericHandlercCs0||jd||jj|dd|d<|S)NNF)resetvalue)r!r newbyteordercontextr-tolist)rr,rrrrr-7szNumpyGenericHandler.flattencCs$|jj|ddd}|||S)Nr2F)r1)r4r.r'type)rrr2rrrr.<szNumpyGenericHandler.restoreN)r(r)r*r-r.rrrrr/6sr/c@s0eZdZdZddZddZddZdd Zd S) NumpyNDArrayHandlerz>Stores arrays as text representation, without regard for viewscCs|jjdkrd|d<dS)NF writeable)flagsr8)rr,rrrr flatten_flagsDs z!NumpyNDArrayHandler.flatten_flagscCs|ddsd|j_dS)Nr8TF)getr9r8)rrrrrr restore_flagsHs z!NumpyNDArrayHandler.restore_flagscCsP||jd|||||jj|dd|d<d|jkrL|j|d<|S)Nr0F)r1valuesrshape)r!rr3r:r4r-r5r>)rr,rrrrr-Ls    zNumpyNDArrayHandler.flattencCs`|jj|ddd}tj||||ddd}|dd}|dk rP||}||||S)Nr=F)r1orderC)rr?r>)r4r.r&arrayr'r;reshaper<)rrr=rr>rrrr.Vs   zNumpyNDArrayHandler.restoreN)r(r)r*__doc__r:r<r-r.rrrrr7As  r7csJeZdZdZdefddZddZddZfd d Zfd d Z Z S) NumpyNDArrayHandlerBinaryzstores arrays with size greater than 'size_threshold' as (optionally) compressed base64 Notes ----- This would be easier to implement using np.save/np.load, but that would be less language-agnostic cCs||_||_dS)a :param size_threshold: nonnegative int or None valid values for 'size_threshold' are all nonnegative integers and None if size_threshold is None, values are always stored as nested lists :param compression: a compression module or None valid values for 'compression' are {zlib, bz2, None} if compresion is None, no compression is applied N)size_threshold compression)rrFrGrrr__init__ms z"NumpyNDArrayHandlerBinary.__init__cCs |jj}|dkrt||d<dS)N|r)rrr)rr,rrrrrflatten_byteorderzsz+NumpyNDArrayHandlerBinary.flatten_byteordercCs"|dd}|r|j||_dS)Nr)r;rr3)rrrrrrrrestore_byteorders z+NumpyNDArrayHandlerBinary.restore_byteordercs|jdks|j|jkr*tt|||}n|jtjkrJt |  }n$t |drb|j dd}n |jdd}|jr|j|}t||d<|j|d<||jd||||||||jjsd|d <|S) zencode numpy to jsonNtobytesa)r?r=r>r0Fr?)rFsizesuperrDr-rr&objectjsondumpsr5encoderrLrrGcompressr r>r!r3rJr:r9 c_contiguous)rr,rbuf) __class__rrr-s"        z!NumpyNDArrayHandlerBinary.flattencs|d}t|tr$tt||}nt|trFtj|g||d}n||}t |}|j rj|j |}|tj krt |}tj|||ddd}|dd}|dk r||}n0tj|||d|ddd}|||||||S) zdecode numpy from jsonr=)rr?r@)rr?r>N)bufferrr>r?) isinstancelistrPrDr.rr&rAr'rrG decompressrQrRloadsdecoder;rBndarraycopyrKr<)rrr=rrrWr>)rXrrr.s.         z!NumpyNDArrayHandlerBinary.restore) r(r)r*rCzlibrHrJrKr-r. __classcell__rr)rXrrDcs   *rDcs@eZdZdZddeffdd ZfddZfdd ZZS) NumpyNDArrayHandlerViewaPickles references inside ndarrays, or array-views Notes ----- The current implementation has some restrictions. 'base' arrays, or arrays which are viewed by other arrays, must be f-or-c-contiguous. This is not such a large restriction in practice, because all numpy array creation is c-contiguous by default. Relaxing this restriction would be nice though; especially if it can be done without bloating the design too much. Furthermore, ndarrays which are views of array-like objects implementing __array_interface__, but which are not themselves nd-arrays, are deepcopied with a warning (by default), as we cannot guarantee whatever custom logic such classes implement is correctly reproduced. warnrEcstt|||||_dS)aM :param mode: {'warn', 'raise', 'ignore'} How to react when encountering array-like objects whos references we cannot safely serialize :param size_threshold: nonnegative int or None valid values for 'size_threshold' are all nonnegative integers and None if size_threshold is None, values are always stored as nested lists :param compression: a compression module or None valid values for 'compression' are {zlib, bz2, None} if compresion is None, no compression is applied N)rPrcrHmode)rrerFrG)rXrrrHs z NumpyNDArrayHandlerView.__init__csl|j}|dkr<|jjrr0rISrrdzndarray is defined by reference to an object we do not know how to serialize. A deep copy is serialized instead, breaking memory aliasing.raisezMndarray is defined by reference to an object we do not know how to serialize.)rfr9forcrPrcr-rVrZr&r_r4ctypesrrhr>r!rr3r:rrFrOrDrewarningsrd ValueErrorr`)rr,rrfrgrmsg)rXrrr-s:        zNumpyNDArrayHandlerView.flattenc s|dd}|dkr&tt||}nl|jj|dd}|jjsFtdtj |j | | |dd|d|d d |d dd }| |||S) zdecode numpy from jsonrfNF)r1z8Current implementation assumes base is C or F contiguousrrIr>rgrrh)rYrr>rgrh)r;rPrcr.r4r9rkAssertionErrorr&r_rr'r3r<)rrrfr)rXrrr..s    zNumpyNDArrayHandlerView.restore) r(r)r*rCrarHr-r.rbrr)rXrrcs 6rccCsttjtddttjtddttjtddtttjj tddtttj j tddtttj j tddtttj j tdddS)NT)rf) rr&rr+genericr/r_rcvoidrXfloat32int32 datetime64rrrrr HscCsjttjttjttjtttjjtttjjtttjjtttj jdS)N) rr&rrqr_rrrXrsrtrurrrrr Ss   ) __future__rr$sysrarmrRZnumpyr&handlersrrrr rutilrr __all__rrrrr+r/r7rDrcr r rrrrs*     "ov