forked from scikit-hep/awkward
-
Notifications
You must be signed in to change notification settings - Fork 0
/
virtual_array_caching.py
51 lines (41 loc) · 1.47 KB
/
virtual_array_caching.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from collections.abc import MutableMapping
import collections
counter = [0]
def generate():
counter[0] += 1
dict_generate = {1: 'Ferrari', 2: 'Mercedes', 3: 'Red Bull', 4: 'McLaren'}
return dict_generate[counter[0]]
class Cache():
def __init__(self, )
class VirtualArray():
def __init__(self, generator, cache=None, cache_key=None):
assert callable(generator)
if cache is not None:
assert isinstance(cache, collections.abc.MutableMapping)
if cache_key is not None:
assert isinstance(cache_key, str)
self.generator = generator
self.cache = cache
self.cache_key = cache_key
@staticmethod
def random(minlen, choices):
raise NotImplementedError("FIXME!")
def __len__(self):
return len(self.cache)
def __getitem__(self, where):
return self.cache[where]
def __repr__(self):
return '{}, D({})'.format(super(VirtualArray, self).__repr__(),
self.__dict__)
def xml(self, indent="", pre="", post=""):
raise NotImplementedError("FIXME!")
def array(self):
if(self.cache != None):
array = self.cache[self.cache_key]
else:
array = self.generator()
if(self.cache != None):
self.cache_key = str(counter[0])
return array
va = VirtualArray(generate, {"ak0": 'Ferrari', "ak1": 'Mercedes', "ak2": 'Red Bull', "ak3": 'McLaren'}, "ak2")
print(va.array())