B eð]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-b8evvk6i/thinc/thinc/neural/mem.pyÚ__init__ s zMemory.__init__cCs|jdd|j…fS)Nr)r r)rrrrÚweightsszMemory.weightscCs|jdd|j…fS)Né)r r)rrrrÚgradientszMemory.gradientcCs ||jkS)N)r )rÚnamerrrÚ __contains__szMemory.__contains__cCs6|j|\}}}|j|}|j||||…f |¡S)N)r rr Úreshape)rrÚoffsetÚcolÚshaperrrrÚ __getitem__s zMemory.__getitem__NcCs||jkr||S|S)N)r )rrÚdefaultrrrÚget$sz Memory.getcCs||jdd|j…f<dS)Nr)r r)rÚvaluerrrÚset'sz Memory.setrcCsN||jkstdƒ‚|jd|f|j|<t|ƒ}||j|<| |¡}|d |¡S)Nz TODO errorr)r ÚAssertionErrorrrrÚ _get_blobr)rrrrÚblobrrrÚadd*s   z Memory.addcCsb||jkstdƒ‚|j|\}}}|j|}|d|f|j|<||j|<|jd|||…f |¡S)Nz TODO errorr)r r#rr r)rZ grad_nameÚ param_namerÚ_rrrrrÚ add_gradient3s   zMemory.add_gradientcCsj|jjd|jd}||kr:| t|jjd|ƒd¡|jdd…|j|j|…f}|j|7_|S)Nrr)r rrÚ_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 rr)rZnew_sizeZnew_memrrrr*Cs2zMemory._realloc)r)N)Ú__name__Ú __module__Ú __qualname__rÚpropertyrrrrr r"rÚargrr&r)r$r*rrrrr s    rN) Ú __future__rZnumpyrÚrrÚobjectrrrrrÚs