U â€C^D ã@sDddlmZddlmZddlmZddlmZGdd„deƒZdS) é)Úunicode_literals)Úprodé)Úcheck)Úis_shapec@s|eZdZddd„Zedd„ƒZedd„ƒZdd „Zd d „Zdd d„Z dd„Z e   de ¡dd„ƒZdd„Zdd„Zdd„Zd S)ÚMemoryé€cCsB|dkrtd|ƒ‚||_|j d|f¡|_i|_i|_d|_dS)NrzTODO error re negative size %dr)Ú ValueErrorÚopsÚallocateÚ_memÚ_offsetsÚ_sizesÚ_i)Úselfr Úsize©rú3/tmp/pip-install-6_kvzl1k/thinc/thinc/neural/mem.pyÚ__init__ s zMemory.__init__cCs|jdd|j…fS©Nr©r r©rrrrÚweightsszMemory.weightscCs|jdd|j…fS)NérrrrrÚgradientszMemory.gradientcCs ||jkS©N©r )rÚnamerrrÚ __contains__szMemory.__contains__cCs6|j|\}}}|j|}|j||||…f |¡Sr)r rr Úreshape)rrÚoffsetÚcolÚshaperrrrÚ __getitem__s zMemory.__getitem__NcCs||jkr||S|Srr)rrÚdefaultrrrÚget$sz Memory.getcCs||jdd|j…f<dSrr)rÚvaluerrrÚset'sz Memory.setrcCsN||jkstdƒ‚|jd|f|j|<t|ƒ}||j|<| |¡}|d |¡S)Nú TODO errorr)r ÚAssertionErrorrrrÚ _get_blobr)rrr"rÚblobrrrÚadd*s   z Memory.addcCsb||jkstdƒ‚|j|\}}}|j|}|d|f|j|<||j|<|jd|||…f |¡S)Nr(r)r r)rr r)rZ grad_nameÚ param_namer Ú_r"rrrrÚ add_gradient3s   zMemory.add_gradientcCsj|jjd|jd}||kr:| t|jjd|ƒd¡|jdd…|j|j|…f}|j|7_|S)Nrr)r r"rÚ_reallocÚmax)rZnr_reqZnr_availr+rrrr*;s zMemory._get_blobcCsT|j |jjd|f¡}|jdd…d|jd…f|dd…d|jd…f<||_dS)Nrr)r r r r"r)rZnew_sizeZnew_memrrrr0Cs2zMemory._realloc)r)N)Ú__name__Ú __module__Ú __qualname__rÚpropertyrrrr#r%r'rÚargrr,r/r*r0rrrrr s      rN) Ú __future__rZnumpyrÚrrÚobjectrrrrrÚs