|
|
import traceback
|
|
|
from SciQLopBindings import PyDataProvider, Product, VectorTimeSerie, ScalarTimeSerie, DataSeriesType
|
|
|
import numpy as np
|
|
|
import math
|
|
|
from spwc.cache import _cache
|
|
|
from spwc.common.datetime_range import DateTimeRange
|
|
|
from functools import partial
|
|
|
from datetime import datetime, timedelta, timezone
|
|
|
from spwc.common.variable import SpwcVariable
|
|
|
|
|
|
|
|
|
def make_scalar(x):
|
|
|
y = np.cos(x/10.)
|
|
|
return SpwcVariable(time=x, data=y)
|
|
|
|
|
|
def make_vector(x):
|
|
|
v=np.ones((len(x),3))
|
|
|
for i in range(3):
|
|
|
v.transpose()[:][i] = np.cos(x/10. + float(i)) + (100. * np.cos(x/10000. + float(i)))
|
|
|
return SpwcVariable(time=x, data=v)
|
|
|
|
|
|
|
|
|
def make_multicomponent(x):
|
|
|
v=np.ones((len(x),4))
|
|
|
for i in range(4):
|
|
|
v.transpose()[:][i] = float(i+1) * np.cos(x/10. + float(i))
|
|
|
return SpwcVariable(time=x, data=v)
|
|
|
|
|
|
def make_spectrogram(x):
|
|
|
v=np.ones((len(x),32))
|
|
|
for i in range(32):
|
|
|
v.transpose()[:][i] = 100.*(2.+ float(i+1) * np.cos(x/1024. + float(i)))
|
|
|
return SpwcVariable(time=x, data=v)
|
|
|
|
|
|
|
|
|
def _get_data(p_type, start, stop):
|
|
|
if type(start) is datetime:
|
|
|
start = start.timestamp()
|
|
|
stop = stop.timestamp()
|
|
|
x = np.arange(math.ceil(start), math.floor(stop))*1.
|
|
|
if p_type == 'scalar':
|
|
|
return make_scalar(x)
|
|
|
if p_type == 'vector':
|
|
|
return make_vector(x)
|
|
|
if p_type == 'multicomponent':
|
|
|
return make_multicomponent(x)
|
|
|
if p_type == 'spectrogram':
|
|
|
return make_spectrogram(np.arange(math.ceil(start), math.floor(stop),15.))
|
|
|
return None
|
|
|
|
|
|
class MyProvider(PyDataProvider):
|
|
|
def __init__(self):
|
|
|
super(MyProvider,self).__init__()
|
|
|
self.register_products([Product("/tests/without_cache/scalar",[],{"type":"scalar"}),
|
|
|
Product("/tests/without_cache/vector",[],{"type":"vector"}),
|
|
|
Product("/tests/without_cache/multicomponent",[],{"type":"multicomponent",'size':'4'}),
|
|
|
Product("/tests/without_cache/spectrogram",[],{"type":"spectrogram",'size':'32'}),
|
|
|
Product("/tests/with_cache/scalar",[],{"type":"scalar", "cache":"true"}),
|
|
|
Product("/tests/with_cache/vector",[],{"type":"vector", "cache":"true"}),
|
|
|
Product("/tests/with_cache/multicomponent",[],{"type":"multicomponent",'size':'4', "cache":"true"})
|
|
|
])
|
|
|
|
|
|
def get_data(self,metadata,start,stop):
|
|
|
ts_type = DataSeriesType.SCALAR
|
|
|
default_ctor_args = 1
|
|
|
use_cache = False
|
|
|
p_type = 'scalar'
|
|
|
try:
|
|
|
for key,value in metadata.items():
|
|
|
if key == 'type':
|
|
|
p_type = value
|
|
|
if value == 'vector':
|
|
|
ts_type = DataSeriesType.VECTOR
|
|
|
elif value == 'multicomponent':
|
|
|
ts_type = DataSeriesType.MULTICOMPONENT
|
|
|
elif value == 'spectrogram':
|
|
|
ts_type = DataSeriesType.SPECTROGRAM
|
|
|
if key == 'cache' and value == 'true':
|
|
|
use_cache = True
|
|
|
if use_cache:
|
|
|
cache_product = f"tests/{p_type}"
|
|
|
var = _cache.get_data(cache_product, DateTimeRange(datetime.fromtimestamp(start, tz=timezone.utc), datetime.fromtimestamp(stop, tz=timezone.utc)), partial(_get_data, p_type), fragment_hours=24)
|
|
|
else:
|
|
|
var = _get_data(p_type, start, stop)
|
|
|
return ((var.time,var.data), ts_type)
|
|
|
except Exception as e:
|
|
|
print(traceback.format_exc())
|
|
|
print("Error in test.py ",str(e))
|
|
|
return ((np.array(), np.array()), ts_type)
|
|
|
|
|
|
|
|
|
t=MyProvider()
|
|
|
|
|
|
|