Example #1
0
def weakmemoize(f):
    """Memoize ``f`` with a ``WeakKeyDictionary`` to allow the arguments
    to be garbage collected.

    Parameters
    ----------
    f : callable
        The function to memoize.

    Returns
    -------
    g : callable
        ``f`` with weak memoiza
    """
    return memoize(f, cache=WeakKeyDictionary())
Example #2
0
def weakmemoize(f):
    """Memoize ``f`` with a ``WeakKeyDictionary`` to allow the arguments
    to be garbage collected.

    Parameters
    ----------
    f : callable
        The function to memoize.

    Returns
    -------
    g : callable
        ``f`` with weak memoiza
    """
    return memoize(f, cache=WeakKeyDictionary())
Example #3
0
def __init_halfsummed_pn():
    n = symbols('n', integer=True, positive=True)
    expr = (legendre(n-1, 0)-legendre(n+1, 0))/(2*n+1)
    f = memoize(lambdify(n, expr, ('math', 'mpmath', 'numpy')))

    @vectorize
    def summed(n, region='top'):
        if n < 0:
            raise ValueError("Par 'n' is invalid!")
        elif n == 0:
            return 1.0
        elif n % 2 == 0:
            return 0.0
        if region == 'top':
            return f(n)
        elif region == 'btm':
            return -f(n)
        else:
            raise ValueError("Par 'region' have to be 'top' or 'btm'!")
    return summed
Example #4
0
            return self[key + '.each_event']
        k, w = key[:i], key[i + 1:]
        if w == 'each_file':
            return (f[self.map(k)].value for f in self.files)
        elif w == 'each_event':
            return concat(f[self.map(k)] for f in self.files)
        else:
            raise ValueError("Key '{}' is invalid!".format(key))


try:
    from dbpy import (read_hightagnumber as __read_hightagnumber,
                      read_taglist_byrun as __read_taglist_byrun,
                      read_syncdatalist_float)
    from stpy import StorageReader, StorageBuffer
    read_hightagnumber = curry(memoize(__read_hightagnumber))
    read_taglist_byrun = curry(memoize(__read_taglist_byrun))

    class _ReadonlyBuffer:
        def __init__(self, buffer):
            self.__buffer = buffer

        @property
        def data(self):
            return self.__buffer.read_det_data(0)

        @property
        def info(self):
            return self.__buffer.read_det_info(0)

    class StorageWrapper:
Example #5
0
def hightag(*args, **kwargs):
    global hightag
    from dbpy import read_hightagnumber
    hightag = memoize(read_hightagnumber)
    return hightag(*args, **kwargs)
Example #6
0
def taglist(*args, **kwargs):
    global taglist
    from dbpy import read_taglist_byrun
    taglist = memoize(read_taglist_byrun)
    return taglist(*args, **kwargs)
Example #7
0
def make_odd(number):
    if number % 2 == 0:
        return number - 1
    else:
        return number


def make_hashable(obj):
    if isinstance(obj, np.ndarray):
        return hash(obj.tobytes())
    else:
        return toolz.sandbox.EqualityHashKey(None, obj)


def hash_key(args, kwargs):
    # return (args, hash(frozenset(kwargs.items())))
    # return (map(make_hashable, args), frozenset(kwargs.items()))
    args = tuple(map(make_hashable, args))
    kwargs = frozenset(
        map(compose(tuple, partial(map, make_hashable)), kwargs.items()))
    # print('args', args)
    # print('kwargs', kwargs)
    return (args, kwargs)
    # return (tuple(map(make_hashable, args)), frozenset(map(map(make_hashable), kwargs.items())))
    # return (map(make_hashable, args), frozenset(itemmap(map(make_hashable), kwargs)))


# memoize = lambda func: cachetools.cached({}, key=hashkey)(func)
memoize = lambda func: cytoolz.memoize(key=hash_key)(func)