a :dg@s:ddlZddlZddlmZddlmZddlmZmZejZ gdZ ej ej ej ejejejejejejejejejejejdZdd Zd d Zd d ZdddddZdddddZddZd'ddZ ddZ!ddZ"ddZ#dZ$iZ%e&Z'Gdd d e(Z)Gd!d"d"e)Z*Gd#d$d$e)Z+Gd%d&d&e+Z,dS)(N)heap) get_context) reductionassert_spawning)RawValueRawArrayValueArraycopy synchronized)cubBhHiIlLqQfdcCs t|}t|}t||dSN)ctypessizeofr BufferWrapper rebuild_ctype)type_sizewrapperr#8/usr/local/lib/python3.9/multiprocessing/sharedctypes.py _new_value's  r%cGs<t||}t|}tt|dt||j||SNr)typecode_to_typegetr%rmemset addressofr__init__)typecode_or_typeargsr objr#r#r$r,s   rcCsjt||}t|trD||}t|}tt|dt||S|t |}t|}|j ||SdSr&) r'r( isinstanceintr%rr)r*rlenr+)r,size_or_initializerr r.resultr#r#r$r6s    rT)lockctxcGsZt|g|R}|dur|S|dvr6|p,t}|}t|dsLtd|t|||dSNF)TNacquirez%r has no method 'acquire')r5)rrRLockhasattrAttributeErrorr )r,r4r5r-r.r#r#r$r Fs   r cCsTt||}|dur|S|dvr0|p&t}|}t|dsFtd|t|||dSr6)rrr8r9r:r )r,r2r4r5r.r#r#r$r Ts    r cCstt|}|t|d<|Sr&)r%typerZpointer)r.Znew_objr#r#r$r bs r cCs|pt}t|tjr"t|||St|tjrR|jtjurFt|||St |||St |}z t |}WnPt ydd|j D}dd|D}d|j}t |tf|}t |<Yn0||||SdS)NcSsg|] }|dqS)rr#).0Zfieldr#r#r$ vz synchronized..cSsi|]}|t|qSr#) make_property)r<namer#r#r$ wr>z synchronized.. Synchronized)rr/rZ _SimpleCDatarBr _type_c_charSynchronizedStringSynchronizedArrayr; class_cacheKeyErrorZ_fields___name__SynchronizedBase)r.r4r5clsZsclsnamesrZ classnamer#r#r$r gs           r cCs@t|t|tjr(t|j|j|jffStt||jdffSdSr) rr/rr rrC_wrapperZ_length_r;)r.r#r#r$ reduce_ctypes rNcCs8|dur||}t|t|}||}||_|Sr)_ForkingPicklerregisterrNcreate_memoryviewZ from_bufferrM)r r"lengthbufr.r#r#r$rs  rcCsNz t|WStyHi}tt|fd|||t|<||YS0dS)N) prop_cacherHexectemplate)r@rr#r#r$r?s   r?z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)rJNcCsB||_|r||_n|ptdd}||_|jj|_|jj|_dS)NT)force)_obj_lockrr8r7release)selfr.r4r5r#r#r$r+s  zSynchronizedBase.__init__cCs |jSr)rZ __enter__r\r#r#r$r]szSynchronizedBase.__enter__cGs |jj|Sr)rZ__exit__)r\r-r#r#r$r_szSynchronizedBase.__exit__cCst|t|j|jffSr)rr rYrZr^r#r#r$ __reduce__szSynchronizedBase.__reduce__cCs|jSrrYr^r#r#r$get_objszSynchronizedBase.get_objcCs|jSr)rZr^r#r#r$get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r;rIrYr^r#r#r$__repr__szSynchronizedBase.__repr__)NN) rI __module__ __qualname__r+r]r_r`rbrcrdr#r#r#r$rJs rJc@seZdZedZdS)rBvalueN)rIrerfr?rgr#r#r#r$rBsrBc@s4eZdZddZddZddZddZd d Zd S) rFcCs t|jSr)r1rYr^r#r#r$__len__szSynchronizedArray.__len__cCs2||j|WdS1s$0YdSrra)r\rr#r#r$ __getitem__szSynchronizedArray.__getitem__cCs2|||j|<Wdn1s$0YdSrra)r\rrgr#r#r$ __setitem__szSynchronizedArray.__setitem__cCs6||j||WdS1s(0YdSrra)r\startstopr#r#r$ __getslice__szSynchronizedArray.__getslice__cCs6|||j||<Wdn1s(0YdSrra)r\rkrlvaluesr#r#r$ __setslice__szSynchronizedArray.__setslice__N)rIrerfrhrirjrmror#r#r#r$rFs rFc@seZdZedZedZdS)rErgrawN)rIrerfr?rgrpr#r#r#r$rEsrE)NN)-rweakrefrrcontextrrForkingPicklerrO__all__rDZc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZ c_longlongZ c_ulonglongZc_floatZc_doubler'r%rrr r r r rNrr?rWrUWeakKeyDictionaryrGobjectrJrBrFrEr#r#r#r$ s>