in svinfer/processor/matrix.py [0:0]
def get_result(tags, query_runner=None):
result = {}
sample_size = None
sql_columns = [sqlalchemy.func.count(1)]
sql_parts = []
for k, v in tags.items():
if k == "sample_size":
raise ValueError("'sample_size' is reserved")
if isinstance(v, SqlMatrix):
start = len(sql_columns)
for j in range(v.ncol):
sql_columns.append(sqlalchemy.func.avg(v.value[j]))
stop = len(sql_columns)
sql_parts.append({
"key": k,
"start": start,
"stop": stop,
"dim": v.dim
})
elif isinstance(v, NumpyMatrix):
if sample_size is None:
sample_size = v.value.shape[0]
else:
assert sample_size == v.value.shape[0]
result[k] = np.array(v.value.mean(axis=0)).reshape(v.dim)
else:
raise TypeError("Unknown value type with key = " + k)
if len(sql_columns) > 1:
if query_runner is None:
raise ValueError("'query_runner' is required")
query_text = str(
sqlalchemy.select(sql_columns).compile(
compile_kwargs={"literal_binds": True}
)
)
raw = query_runner(query_text)
if sample_size is None:
sample_size = raw[0]
else:
assert sample_size == raw[0]
for part in sql_parts:
result[part["key"]] = np.array(
raw[part["start"]:part["stop"]]
).reshape(part["dim"])
result["sample_size"] = sample_size
return result