Skip to content
Snippets Groups Projects
Commit d5d90cd7 authored by abaucher's avatar abaucher
Browse files

Better compare plots, clip, and new table politic

parent d15912cb
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,7 @@
__version__ = "0.1"
from pydynamo.core.parse_system import new_cst_politic, new_system, system_from_lines, system_from_fun, system_from_file
from pydynamo.core.parse_system import new_cst_politic, new_table_politic, new_system, system_from_lines, system_from_fun, system_from_file
# import pydynamo.core.system
from pydynamo.core.plot_system import *
# import pydynamo.core.dynamo_converter
......
......@@ -122,7 +122,22 @@ def new_cst_politic(s, cst, year, val2):
system_from_lines([eq_clip, eq_year, eq_cst1, eq_cst2], s=s, prepare=True)
def new_table_politic(s, var, year, val2):
"""Add new equations to change table from year"""
assert f'tabhl' in s.eqs['update'][var]['args']['fun'], f"{var} hasn't tabhl function"
table_name = s.eqs['update'][var]['args']['fun']['tabhl']['table']
table_init_val = s.eqs['cst'][table_name]['line']
var_line = s.eqs['update'][var]['raw_line']
eq_table_1 = f"{table_name}1 = {table_init_val}"
eq_table_2 = f"{table_name}2 = {val2}"
eq_var_1 = var_line.replace(f'{var}.k', f'{var}1.k').replace(table_name, table_name + '1')
eq_var_2 = var_line.replace(f'{var}.k', f'{var}2.k').replace(table_name, table_name + '2')
eq_var = f"{var}.k = clip({var}2.k, {var}1.k, time.k, {year})"
system_from_lines([eq_table_1, eq_table_2, eq_var_1, eq_var_2, eq_var], s=s)
def change_cst_to_var(s, cst):
# TODO: FAIRE AVEC INIT
"""Change a constant for a variable"""
......@@ -135,7 +150,8 @@ def change_cst_to_var(s, cst):
new_raw_line = re.sub(f'(?<!\w){cst}(?!\w)', f'{cst}.k', args['raw_line'])
args['raw_line'] = new_raw_line
args['line'] = new_line
def change_var_to_cst(s, var):
"""Change a variable for a constant"""
pass
......@@ -150,11 +166,11 @@ def change_var_to_cst(s, var):
# args['raw_line'] = new_raw_line
# args['line'] = new_line
def new_system(raw):
def new_system(raw, s=None):
"""returns a new System object from the data included in raw"""
if callable(raw):
return system_from_fun(raw)
return system_from_fun(raw, s=s)
elif isinstance(raw, list):
return system_from_lines(raw)
return system_from_lines(raw, s=s)
elif isinstance(raw, str):
return system_from_file(raw)
return system_from_file(raw, s=s)
......@@ -61,10 +61,12 @@ def plot_tabhl(s, name):
plt.xlabel(xlabel)
plt.title(title)
def compare_systems(s1, s2, *args, **kwargs):
plot_system(s1, *args, **kwargs, linestyle='-')
def compare_systems(s1, s2, v_names, scales=None, rescale=False, *args, **kwargs):
if not scales and rescale:
scales = {v: max(max(getattr(s1, v)), max(getattr(s2, v))) for v in v_names}
plot_system(s1, v_names, *args, **kwargs, linestyle='-', scales=scales)
plt.gca().set_prop_cycle(None)
plot_system(s2,*args, **kwargs, linestyle='--')
plot_system(s2, v_names, *args, **kwargs, linestyle='--', scales=scales)
......@@ -47,13 +47,11 @@ def clip(func2, func1, t, t_switch):
func2 if t>t_switch, else func1.
"""
if np.isnan(func1) or np.isnan(func2):
return np.nan
if t <= t_switch:
return func1
else:
if t <= t_switch:
return func1
else:
return func2
return func2
class Sample:
"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment