Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346############################################################################# ## ## ToolsForHomalg package ## ## Copyright 2013-2014, Sebastian Gutsche, TU Kaiserslautern ## Sebastian Posur, RWTH Aachen ## #! @Chapter Caches ## ############################################################################# DeclareCategory( "IsCachingObject", IsObject ); DeclareGlobalFunction( "CATEGORIES_FOR_HOMALG_SET_ALL_CACHES_CRISP" ); DeclareGlobalFunction( "CATEGORIES_FOR_HOMALG_PREPARE_CACHING_RECORD" ); DeclareGlobalFunction( "SEARCH_WPLIST_FOR_OBJECT" ); DeclareGlobalFunction( "CACHINGOBJECT_HIT" ); DeclareGlobalFunction( "CACHINGOBJECT_MISS" ); DeclareGlobalFunction( "CreateWeakCachingObject" ); DeclareGlobalFunction( "CreateCrispCachingObject" ); DeclareGlobalFunction( "TOOLS_FOR_HOMALG_CACHE_CLEAN_UP" ); DeclareGlobalFunction( "TOOLS_FOR_HOMALG_SET_CACHE_PROPERTY" ); #! @Section Object constructors #! Caches are objects which store for a fixed number of keys #! a value, so they are a map Obj^k -> Obj, while the k is #! fixed. A cache ususally stores the result in a weak pointer #! list, which means that if the value which the cache should store #! is not referenced in the system anymore, it will not be remembered #! by the cache. However, caches can be set to store the value permanently (crisp), #! or not to store any new value at all (inaktive). In that case, already stored values #! are still in the cache and can be accessed once the cache is set active again. #! @BeginGroup #! @Returns a cache #! @Arguments [k],[is_crisp] #! @Description #! If no argument is given, the function returns a weak cache with key length one, #! if an integer k is given, a weak cache with key length k, and if the bool is_crisp #! is true, a crisp cache with the corresponding length. DeclareOperation( "CachingObject", [ ] ); #! DeclareOperation( "CachingObject", [ IsObject ] ); #! DeclareOperation( "CachingObject", [ IsObject, IsObject ] ); #! @EndGroup #! @BeginGroup #! @Arguments object, cache_name, length, [is_crisp] #! @Description #! This methods are not installed, they serve as an interface #! for InstallMethodWithCacheFromObject. DeclareOperation( "CachingObject", [ IsObject, IsObject, IsInt ] ); #! DeclareOperation( "CachingObject", [ IsObject, IsObject, IsInt, IsBool ] ); #! @EndGroup DeclareOperation( "Add", [ IsCachingObject, IsInt, IsObject ] ); DeclareOperation( "GetObject", [ IsCachingObject, IsInt, IsInt ] ); #! @Section Setters, getters #! @Returns stored value #! @Arguments cache, key #! @Description #! If there is a value stored in the cache for key, which can be a single key for #! caches with key length one or a list of keys depending on the key length of the cache, #! this method returns a list only contraining the value, otherwise an empty list. DeclareOperation( "CacheValue", [ IsCachingObject, IsObject ] ); #! @Arguments cache, key, value #! @Description #! Sets the value of key of the cache to value. DeclareOperation( "SetCacheValue", [ IsCachingObject, IsObject, IsObject ] ); #! @Arguments obj1, obj2 #! @Returns true or false #! @Description #! This function is used to compare objects for the caches. #! The standard way is IsIdenticalObj, and lists are compared recursive #! with this function. It is possible and recommended to overload this function as needed. DeclareOperation( "IsEqualForCache", [ IsObject, IsObject ] ); #! @Section Managing functions #! @Arguments cache #! @Returns nothing #! @Description #! Sets the caching to crisp, weak, or deativates the cache completely. DeclareGlobalFunction( "SetCachingObjectCrisp" ); #! DeclareGlobalFunction( "SetCachingObjectWeak" ); #! DeclareGlobalFunction( "DeactivateCachingObject" ); #! @Section Install functions #! @Arguments Like InstallMethod #! @Description #! Installs a method like InstallMethod, but additionally puts a cache layer around it #! so that the result is cached. It is possible to give the cache as the option Cache, #! to use the same cache for more than one method or store it somewhere to have access to #! the cache. DeclareGlobalFunction( "InstallMethodWithCache" ); DeclareSynonym( "InstallMethodWithWeakCache", InstallMethodWithCache ); #! @Description #! Like InstallMethodWithCache, but with a crisp cache. DeclareGlobalFunction( "InstallMethodWithCrispCache" ); #! @Arguments Like InstallMethod #! @Description #! This works just like InstallMethodWithCache, but it extracts #! the cache via the CachingObject method from one of its arguments. #! The CachingObject must then be implemented for one of the arguments, #! and the option ArgumentNumber can specify which option to be used. #! As second argument for CachingObject a string is used, which can identify #! the cache. Standard is the name of the operation, for which the method is #! installed, but it can be specified using the CacheName option. DeclareGlobalFunction( "InstallMethodWithCacheFromObject" ); ## Installed for CachingObject, Int, String DeclareOperation( "InstallHas", [ IsObject, IsString, IsList ] ); DeclareOperation( "InstallSet", [ IsObject, IsString, IsList ] ); DeclareOperation( "DeclareHasAndSet", [ IsString, IsList ] ); DeclareOperation( "DeclareOperationWithCache", [ IsString, IsList ] ); DeclareGlobalFunction( "CacheFromObjectWrapper" ); #! @Description #! Creates a cached function out of a given function <A>func</A>. #! If the option Cache is a cache, this cache is used. If the option #! Cache is the string crisp, a crisp cache is used. All other values for this option #! lead to a single weak cache. #! @Arguments func #! @Returns a function DeclareGlobalFunction( "FunctionWithCache" ); ################################ ## ## Debug functions ## ################################ DeclareGlobalVariable( "TOOLS_FOR_HOMALG_SAVED_CACHES_FROM_INSTALL_METHOD_WITH_CACHE" ); DeclareGlobalFunction( "TOOLS_FOR_HOMALG_STORE_CACHES" );