diff --git a/src/scgenerator/cache.py b/src/scgenerator/cache.py deleted file mode 100644 index e367eab..0000000 --- a/src/scgenerator/cache.py +++ /dev/null @@ -1,77 +0,0 @@ -from collections import namedtuple -from copy import copy -from functools import wraps - -import numpy as np - -CacheInfo = namedtuple("CacheInfo", "hits misses size") - - -def make_arg_hashable(arg): - if isinstance(arg, np.ndarray): - return arg.tobytes() - elif isinstance(arg, list): - return tuple(make_arg_hashable(a) for a in arg) - return arg - - -def np_cache(func): - def new_cached_func(): - cache = {} - hits = misses = 0 - - @wraps(func) - def wrapped(*args, **kwargs): - nonlocal cache, hits, misses - hashable_args = tuple(make_arg_hashable(a) for a in args) - hashable_kwargs = tuple({k: make_arg_hashable(a) for k, a in kwargs.items()}.items()) - key = hash((hashable_args, hashable_kwargs)) - if key not in cache: - misses += 1 - cache[key] = func(*args, **kwargs) - else: - hits += 1 - return copy(cache[key]) - - def reset(): - nonlocal cache, hits, misses - cache = {} - hits = misses = 0 - - wrapped.cache_info = lambda: CacheInfo(hits, misses, len(cache)) - wrapped.reset = reset - - return wrapped - - return new_cached_func() - - -if __name__ == "__main__": - import random - import time - - @np_cache - def lol(a): - time.sleep(random.random() * 4) - return a / 2 - - @np_cache - def ggg(b): - time.sleep(random.random() * 4) - return b * 2 - - x = np.arange(6) - for i in range(5): - print(lol.cache_info()) - print(lol(x)) - - print(f"{ggg.cache_info()=}") - print(f"{lol.cache_info()=}") - lol.reset() - - print(ggg(np.arange(3))) - print(ggg(np.arange(8))) - print(ggg(np.arange(3))) - - print(f"{ggg.cache_info()=}") - print(f"{lol.cache_info()=}") diff --git a/src/scgenerator/physics/__init__.py b/src/scgenerator/physics/__init__.py index c3d825e..1953c67 100644 --- a/src/scgenerator/physics/__init__.py +++ b/src/scgenerator/physics/__init__.py @@ -9,7 +9,6 @@ import numpy as np from scipy.optimize import minimize_scalar from scgenerator import math -from scgenerator.cache import np_cache from scgenerator.physics import fiber, materials, pulse, units T = TypeVar("T") @@ -21,7 +20,6 @@ def group_delay_to_gdd(wavelength: np.ndarray, group_delay: np.ndarray) -> np.nd return gdd -@np_cache def material_dispersion( wavelengths: np.ndarray, material: str, diff --git a/src/scgenerator/physics/fiber.py b/src/scgenerator/physics/fiber.py index dbe5405..274e85d 100644 --- a/src/scgenerator/physics/fiber.py +++ b/src/scgenerator/physics/fiber.py @@ -7,7 +7,6 @@ from numpy.polynomial.chebyshev import Chebyshev, cheb2poly from scipy.interpolate import interp1d from scgenerator import utils -from scgenerator.cache import np_cache from scgenerator.math import argclosest, u_nm from scgenerator.physics import materials as mat from scgenerator.physics import units @@ -284,7 +283,6 @@ def capillary_resonance_strengths( ] -@np_cache def n_eff_hasan( wl_for_disp: np.ndarray, n_gas_2: np.ndarray, @@ -548,7 +546,6 @@ def constant_effective_area_arr(l: np.ndarray, effective_area: float) -> np.ndar return np.ones_like(l) * effective_area -@np_cache def n_eff_pcf(wl_for_disp: np.ndarray, pcf_pitch: float, pcf_pitch_ratio: float) -> np.ndarray: """ semi-analytical computation of the dispersion profile of a triangular Index-guiding PCF @@ -685,7 +682,6 @@ def load_custom_loss(l: np.ndarray, loss_file: str) -> np.ndarray: return interp1d(wl, loss, fill_value=0, bounds_error=False)(l) -@np_cache def dispersion_coefficients( w_for_disp: np.ndarray, beta2_arr: np.ndarray, diff --git a/src/scgenerator/physics/materials.py b/src/scgenerator/physics/materials.py index 61afbef..2b16de8 100644 --- a/src/scgenerator/physics/materials.py +++ b/src/scgenerator/physics/materials.py @@ -8,7 +8,6 @@ import numpy as np import scgenerator.math as math from scgenerator import utils -from scgenerator.cache import np_cache from scgenerator.logger import get_logger from scgenerator.physics import units from scgenerator.physics.units import NA, c, epsilon0, kB @@ -318,7 +317,6 @@ class Gas: return f"{self.__class__.__name__}({self.name!r})" -@np_cache def n_gas_2(wl_for_disp: np.ndarray, gas_name: str, pressure: float, temperature: float): """Returns the sqare of the index of refraction of the specified gas""" return Sellmeier.load(gas_name).n_gas_2(wl_for_disp, temperature, pressure)