Skip to content

Commit dcbec6e

Browse files
committed
Format with black
1 parent 9dfe61c commit dcbec6e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+8790
-7855
lines changed

Diff for: src/smif/cli/__init__.py

+297-213
Large diffs are not rendered by default.

Diff for: src/smif/cli/log.py

+63-53
Original file line numberDiff line numberDiff line change
@@ -7,111 +7,121 @@
77
# Make profiling methods available through the logger
88
def profiling_start(self, operation, key):
99
time_placeholder = datetime.time(0, 0)
10-
level = sum(log[1]['stop'] == time_placeholder for log in logging.Logger._profile.items())
10+
level = sum(
11+
log[1]["stop"] == time_placeholder for log in logging.Logger._profile.items()
12+
)
1113
logging.Logger._profile[(operation, key)] = {
12-
'start': datetime.datetime.now(),
13-
'stop': time_placeholder,
14-
'level': level
14+
"start": datetime.datetime.now(),
15+
"stop": time_placeholder,
16+
"level": level,
1517
}
1618

1719

1820
def profiling_stop(self, operation, key):
19-
logging.Logger._profile[(operation, key)]['stop'] = datetime.datetime.now()
21+
logging.Logger._profile[(operation, key)]["stop"] = datetime.datetime.now()
2022

2123

2224
def summary(self, *args, **kws):
2325

2426
if self.isEnabledFor(logging.INFO):
2527
summary = []
2628
columns = [30, 80, 12]
27-
column = "{:" + str(columns[0]) + "s}" + \
28-
"{:" + str(columns[1]) + "s}" + \
29-
"{:" + str(columns[2]) + "s}"
30-
31-
level_width = max([profile['level'] for profile
32-
in logging.Logger._profile.values()]) * 2
29+
column = (
30+
"{:"
31+
+ str(columns[0])
32+
+ "s}"
33+
+ "{:"
34+
+ str(columns[1])
35+
+ "s}"
36+
+ "{:"
37+
+ str(columns[2])
38+
+ "s}"
39+
)
40+
41+
level_width = (
42+
max([profile["level"] for profile in logging.Logger._profile.values()]) * 2
43+
)
3344
total_width = sum(columns) + level_width
3445

3546
# header
36-
summary.append(("{:*^" + str(total_width) + "s}").format(" Modelrun time profile "))
37-
summary.append(column.format('Function', 'Operation', 'Duration [hh:mm:ss]'))
38-
summary.append("*"*total_width)
47+
summary.append(
48+
("{:*^" + str(total_width) + "s}").format(" Modelrun time profile ")
49+
)
50+
summary.append(column.format("Function", "Operation", "Duration [hh:mm:ss]"))
51+
summary.append("*" * total_width)
3952

4053
# body
4154
for profile in logging.Logger._profile.keys():
4255

4356
# calculate time diff
4457
profile_data = logging.Logger._profile[profile]
45-
diff = profile_data['stop'] - profile_data['start']
58+
diff = profile_data["stop"] - profile_data["start"]
4659
s = diff.total_seconds()
47-
time_spent = '{:02d}:{:02d}:{:05.2f}'.format(
48-
int(s // 3600), int(s % 3600 // 60), s % 60)
60+
time_spent = "{:02d}:{:02d}:{:05.2f}".format(
61+
int(s // 3600), int(s % 3600 // 60), s % 60
62+
)
4963

5064
# trunctuate long lines
51-
if len(profile[0]) > columns[0]-2:
52-
func = profile[0][:columns[0]-3] + '..'
65+
if len(profile[0]) > columns[0] - 2:
66+
func = profile[0][: columns[0] - 3] + ".."
5367
else:
5468
func = profile[0]
55-
if len(profile[1]) > columns[1]-2:
56-
op = profile[1][:columns[1]-3] + '..'
69+
if len(profile[1]) > columns[1] - 2:
70+
op = profile[1][: columns[1] - 3] + ".."
5771
else:
5872
op = profile[1]
5973

60-
summary.append(profile_data['level']*'| ' + column.format(
61-
func, op, time_spent))
74+
summary.append(
75+
profile_data["level"] * "| " + column.format(func, op, time_spent)
76+
)
6277

6378
# footer
64-
summary.append("*"*total_width)
79+
summary.append("*" * total_width)
6580

6681
for entry in summary:
6782
self._log(logging.INFO, entry, args)
6883

6984

7085
def setup_logging(loglevel):
7186
config = {
72-
'version': 1,
73-
'formatters': {
74-
'default': {
75-
'format': '%(asctime)s %(name)-12s: %(levelname)-8s %(message)s'
87+
"version": 1,
88+
"formatters": {
89+
"default": {
90+
"format": "%(asctime)s %(name)-12s: %(levelname)-8s %(message)s"
7691
},
77-
'message': {
78-
'format': '\033[1;34m%(levelname)-8s\033[0m %(message)s'
79-
}
92+
"message": {"format": "\033[1;34m%(levelname)-8s\033[0m %(message)s"},
8093
},
81-
'handlers': {
82-
'file': {
83-
'class': 'logging.FileHandler',
84-
'level': 'DEBUG',
85-
'formatter': 'default',
86-
'filename': 'smif.log',
87-
'mode': 'a',
88-
'encoding': 'utf-8'
94+
"handlers": {
95+
"file": {
96+
"class": "logging.FileHandler",
97+
"level": "DEBUG",
98+
"formatter": "default",
99+
"filename": "smif.log",
100+
"mode": "a",
101+
"encoding": "utf-8",
102+
},
103+
"stream": {
104+
"class": "logging.StreamHandler",
105+
"formatter": "message",
106+
"level": "DEBUG",
89107
},
90-
'stream': {
91-
'class': 'logging.StreamHandler',
92-
'formatter': 'message',
93-
'level': 'DEBUG'
94-
}
95-
},
96-
'root': {
97-
'handlers': ['file', 'stream'],
98-
'level': 'DEBUG'
99108
},
109+
"root": {"handlers": ["file", "stream"], "level": "DEBUG"},
100110
# disable_existing_loggers defaults to True, which causes problems with class/module
101111
# -specific loggers, especially in unit tests when this method might be called multiple
102112
# times
103-
'disable_existing_loggers': False
113+
"disable_existing_loggers": False,
104114
}
105115

106116
if loglevel is None:
107-
config['root']['level'] = logging.WARNING
117+
config["root"]["level"] = logging.WARNING
108118
elif loglevel == 1:
109-
config['root']['level'] = logging.INFO
119+
config["root"]["level"] = logging.INFO
110120
else:
111-
config['root']['level'] = logging.DEBUG
121+
config["root"]["level"] = logging.DEBUG
112122

113123
logging.config.dictConfig(config)
114-
logging.debug('Debug logging enabled.')
124+
logging.debug("Debug logging enabled.")
115125

116126

117127
logging.Logger.profiling_start = profiling_start

Diff for: src/smif/controller/__init__.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,21 @@
3737
# import classes for access like ::
3838
# from smif.controller import ModelRunner
3939
from smif.controller.execute_run import execute_model_run
40-
from smif.controller.execute_step import (execute_decision_step,
41-
execute_model_before_step,
42-
execute_model_step)
40+
from smif.controller.execute_step import (
41+
execute_decision_step,
42+
execute_model_before_step,
43+
execute_model_step,
44+
)
4345
from smif.controller.modelrun import ModelRunner
4446
from smif.controller.setup import copy_project_folder
4547

4648
# Define what should be imported as * ::
4749
# from smif.controller import *
48-
__all__ = ['ModelRunner', 'execute_decision_step', 'execute_model_before_step',
49-
'execute_model_run', 'execute_model_step', 'copy_project_folder']
50+
__all__ = [
51+
"ModelRunner",
52+
"execute_decision_step",
53+
"execute_model_before_step",
54+
"execute_model_run",
55+
"execute_model_step",
56+
"copy_project_folder",
57+
]

Diff for: src/smif/controller/build.py

+19-17
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,27 @@ def get_model_run_definition(store, modelrun):
2929
model_run_config = store.read_model_run(modelrun)
3030
except SmifDataNotFoundError:
3131
logging.error(
32-
"Model run %s not found. Run 'smif list' to see available model runs.", modelrun)
32+
"Model run %s not found. Run 'smif list' to see available model runs.",
33+
modelrun,
34+
)
3335
exit(-1)
3436

35-
logging.info("Running %s", model_run_config['name'])
37+
logging.info("Running %s", model_run_config["name"])
3638
logging.debug("Model Run: %s", model_run_config)
37-
sos_model_config = store.read_sos_model(model_run_config['sos_model'])
39+
sos_model_config = store.read_sos_model(model_run_config["sos_model"])
3840

39-
sector_models = get_sector_models(sos_model_config['sector_models'], store)
41+
sector_models = get_sector_models(sos_model_config["sector_models"], store)
4042
logging.debug("Sector models: %s", sector_models)
4143

42-
scenario_models = get_scenario_models(model_run_config['scenarios'], store)
44+
scenario_models = get_scenario_models(model_run_config["scenarios"], store)
4345
logging.debug("Scenario models: %s", [model.name for model in scenario_models])
4446

4547
sos_model = SosModel.from_dict(sos_model_config, sector_models + scenario_models)
46-
model_run_config['sos_model'] = sos_model
48+
model_run_config["sos_model"] = sos_model
4749
logging.debug("Model list: %s", list(model.name for model in sos_model.models))
4850

49-
model_run_config['strategies'] = store.read_strategies(model_run_config['name'])
50-
logging.debug("Strategies: %s", [s['type'] for s in model_run_config['strategies']])
51+
model_run_config["strategies"] = store.read_strategies(model_run_config["name"])
52+
logging.debug("Strategies: %s", [s["type"] for s in model_run_config["strategies"]])
5153

5254
return model_run_config
5355

@@ -69,11 +71,11 @@ def get_scenario_models(scenarios, handler):
6971
scenario_definition = handler.read_scenario(scenario_name)
7072

7173
# assign variant name to definition
72-
scenario_definition['scenario'] = variant_name
74+
scenario_definition["scenario"] = variant_name
7375

7476
# rename provides => outputs
75-
scenario_definition['outputs'] = scenario_definition['provides']
76-
del scenario_definition['provides']
77+
scenario_definition["outputs"] = scenario_definition["provides"]
78+
del scenario_definition["provides"]
7779

7880
logging.debug("Scenario definition: %s", scenario_name)
7981

@@ -99,8 +101,8 @@ def get_sector_models(sector_model_names, handler):
99101
sector_model_config = handler.read_model(sector_model_name)
100102

101103
# absolute path to be crystal clear for ModelLoader when loading python class
102-
sector_model_config['path'] = os.path.normpath(
103-
os.path.join(handler.model_base_folder, sector_model_config['path'])
104+
sector_model_config["path"] = os.path.normpath(
105+
os.path.join(handler.model_base_folder, sector_model_config["path"])
104106
)
105107
sector_model = SectorModel.from_dict(sector_model_config)
106108
sector_models.append(sector_model)
@@ -121,9 +123,9 @@ def build_model_run(model_run_config):
121123
"""
122124
logger = logging.getLogger()
123125
try:
124-
logger.profiling_start('build_model_run', model_run_config['name'])
126+
logger.profiling_start("build_model_run", model_run_config["name"])
125127
except AttributeError:
126-
logger.info('build_model_run %s', model_run_config['name'])
128+
logger.info("build_model_run %s", model_run_config["name"])
127129

128130
try:
129131
model_run = ModelRun.from_dict(model_run_config)
@@ -138,7 +140,7 @@ def build_model_run(model_run_config):
138140
exit(-1)
139141

140142
try:
141-
logger.profiling_stop('build_model_run', model_run_config['name'])
143+
logger.profiling_stop("build_model_run", model_run_config["name"])
142144
except AttributeError:
143-
logger.info('build_model_run %s', model_run_config['name'])
145+
logger.info("build_model_run %s", model_run_config["name"])
144146
return model_run

Diff for: src/smif/controller/execute_run.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,12 @@ def execute_model_run(model_run_ids, store, warm=False, dry=False):
3737

3838
try:
3939
if warm:
40-
modelrun.run(store, job_scheduler, store.prepare_warm_start(modelrun.name),
41-
dry_run=dry)
40+
modelrun.run(
41+
store,
42+
job_scheduler,
43+
store.prepare_warm_start(modelrun.name),
44+
dry_run=dry,
45+
)
4246
else:
4347
modelrun.run(store, job_scheduler, dry_run=dry)
4448
except SmifModelRunError as ex:

Diff for: src/smif/controller/execute_step.py

+28-21
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ def execute_model_before_step(model_run_id, model_name, store, dry_run=False):
2626
model.before_model_run(data_handle)
2727

2828

29-
def execute_model_step(model_run_id, model_name, timestep, decision, store, dry_run=False):
29+
def execute_model_step(
30+
model_run_id, model_name, timestep, decision, store, dry_run=False
31+
):
3032
"""Runs a single step of a model run
3133
3234
This method is designed to be the single place where smif actually calls wrapped models.
@@ -52,30 +54,36 @@ def execute_model_step(model_run_id, model_name, timestep, decision, store, dry_
5254
store: Store
5355
"""
5456
if dry_run:
55-
print(" smif step {} --model {} --timestep {} --decision {}".format(
56-
model_run_id, model_name, timestep, decision))
57+
print(
58+
" smif step {} --model {} --timestep {} --decision {}".format(
59+
model_run_id, model_name, timestep, decision
60+
)
61+
)
5762
else:
5863
model, data_handle = _get_model_and_handle(
59-
store, model_run_id, model_name, timestep, decision)
64+
store, model_run_id, model_name, timestep, decision
65+
)
6066
model.simulate(data_handle)
6167

6268

63-
def _get_model_and_handle(store, model_run_id, model_name, timestep=None, decision=None):
64-
"""Helper method to read model and set up appropriate data handle
65-
"""
69+
def _get_model_and_handle(
70+
store, model_run_id, model_name, timestep=None, decision=None
71+
):
72+
"""Helper method to read model and set up appropriate data handle"""
6673
try:
6774
model_run_config = store.read_model_run(model_run_id)
6875
except SmifDataNotFoundError:
6976
logging.error(
7077
"Model run %s not found. Run 'smif list' to see available model runs.",
71-
model_run_id)
78+
model_run_id,
79+
)
7280
sys.exit(1)
7381

7482
loader = ModelLoader()
7583
sector_model_config = store.read_model(model_name)
7684
# absolute path to be crystal clear for ModelLoader when loading python class
77-
sector_model_config['path'] = os.path.normpath(
78-
os.path.join(store.model_base_folder, sector_model_config['path'])
85+
sector_model_config["path"] = os.path.normpath(
86+
os.path.join(store.model_base_folder, sector_model_config["path"])
7987
)
8088
model = loader.load(sector_model_config)
8189

@@ -88,8 +96,8 @@ def _get_model_and_handle(store, model_run_id, model_name, timestep=None, decisi
8896
model=model,
8997
modelrun_name=model_run_id,
9098
current_timestep=timestep,
91-
timesteps=model_run_config['timesteps'],
92-
decision_iteration=decision
99+
timesteps=model_run_config["timesteps"],
100+
decision_iteration=decision,
93101
)
94102
return model, data_handle
95103

@@ -117,20 +125,19 @@ def execute_decision_step(model_run_id, decision, store):
117125

118126
# decision loop gets and saves decisions into "state" files
119127
decision_manager = DecisionManager(
120-
store,
121-
model_run['timesteps'],
122-
model_run_id,
123-
model_run['sos_model'],
124-
decision
128+
store, model_run["timesteps"], model_run_id, model_run["sos_model"], decision
125129
)
126130
bundle = next(decision_manager.decision_loop())
127131

128132
# print report
129133
print("Got decision bundle")
130-
print(" decision iterations", bundle['decision_iterations'])
131-
print(" timesteps", bundle['timesteps'])
134+
print(" decision iterations", bundle["decision_iterations"])
135+
print(" timesteps", bundle["timesteps"])
132136
print("Run each model in order with commands like:")
133-
print(" smif step {} --model <model> --decision <d> --timestep <t>".format(
134-
model_run_id))
137+
print(
138+
" smif step {} --model <model> --decision <d> --timestep <t>".format(
139+
model_run_id
140+
)
141+
)
135142
print("To see a viable order, dry-run the whole model:")
136143
print(" smif run {} --dry-run".format(model_run_id))

0 commit comments

Comments
 (0)