Source code for pankus.taurus.analysis
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'Maciej Kamiński Politechnika Wrocławska'
#from ipy_progressbar import ProgressBar
import numpy as np
from .importer import Importer
from .data_journal import DataJournal
from .utils import init_kwargs_as_parameters
[docs]class Analysis(DataJournal):
def __init__(self,**kwargs):
super().__init__(**kwargs)
@init_kwargs_as_parameters
@DataJournal.log_and_stash("model_parameters")
def solve_for_origins(self,**kwargs):
'''
Let A*S=D where D - destination satisfied vector A - motion exchange matrix and S - origins vector.
This function solves S=A\D.
Stores output in parameters table.
'''
assert self.one('route/test_point_id_range')[0]
featured_points=self.do('route/select_od_point').fetchall()
# get mx matrix
motion_exchange=[[0.0 for j in featured_points] for i in featured_points]
for s,e,f, in self.do('intopp/select_motion_exchange_fraction'):
motion_exchange[s][e]=f
# get destinations
destinations_list=[0.0 for i in featured_points]
for od_id,_,destinations,_,_,_,_, in self.do('intopp/select_model_parameters').fetchall():
destinations_list[od_id]=destinations
#create matrix and solve
matrix=np.array(motion_exchange)
origins_list_=np.linalg.solve(matrix.transpose(),destinations_list)
#solution accuracy
accuracy = (np.linalg.cond(matrix)*np.finfo(float).eps)
# save solutions
new_origins_value=[{
"od_id":i,
"origins":origins
} for i,origins in enumerate(origins_list_)]
self.transaction("analysis/update_origins",new_origins_value)
return accuracy
@init_kwargs_as_parameters
@DataJournal.log_and_stash()
def get_no_ring_pairs(self,**kwargs):
for a,b in self.do('intopp/select_od_id_with_no_ring_assigned').fetchall():
print("Origin: ", a, " and destination: ", b , " - no ring assigned!")