Skip to content

Commit 5814302

Browse files
authored
Merge pull request #108 from NREL/ndr/90-mypy-errors
mypy errors
2 parents 453dd60 + 229ff01 commit 5814302

File tree

158 files changed

+1364
-2352
lines changed

Some content is hidden

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

158 files changed

+1364
-2352
lines changed

.github/workflows/tests.yaml

+5-2
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,20 @@ jobs:
1818
PYTHON: ${{ matrix.python-version }}
1919

2020
steps:
21-
- uses: actions/checkout@v2
21+
- uses: actions/checkout@v3
2222

2323
- name: set up python ${{ matrix.python-version }}
24-
uses: actions/setup-python@v1
24+
uses: actions/setup-python@v4
2525
with:
2626
python-version: ${{ matrix.python-version }}
2727

2828
- name: Install package
2929
run: |
3030
pip install ".[dev]"
3131
32+
- name: Run mypy
33+
run: mypy . --ignore-missing-imports
34+
3235
- name: Run black
3336
run: |
3437
black nrel tests --check

examples/cosim_custom_dispatcher.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@
77

88
from nrel.hive import package_root
99
from nrel.hive.dispatcher.instruction.instructions import IdleInstruction
10-
from nrel.hive.dispatcher.instruction_generator.instruction_generator import (
11-
InstructionGenerator,
12-
)
10+
from nrel.hive.dispatcher.instruction_generator.instruction_generator import InstructionGenerator
1311
from nrel.hive.runner.runner_payload_ops import (
1412
get_instruction_generator,
1513
update_instruction_generator,
@@ -59,9 +57,7 @@ def run():
5957
crank_result = hc.crank(rp, 10)
6058

6159
# get dispatcher to update it
62-
dispatcher: CustomDispatcher = get_instruction_generator(
63-
crank_result.runner_payload, CustomDispatcher
64-
)
60+
dispatcher = get_instruction_generator(crank_result.runner_payload, CustomDispatcher)
6561

6662
# apply some change to the state of the dispatcher
6763
updated_dispatcher = dispatcher.new_random_state()

mypy.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ exclude = (?x)(
66
docs/
77
| build/
88
| dist/
9-
)
9+
)

nrel/hive/__init__.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@
2929
from nrel.hive.config import HiveConfig
3030
from nrel.hive.dispatcher import *
3131
from nrel.hive.state.simulation_state.update.update import Update
32-
from nrel.hive.state.simulation_state.update.step_simulation import (
33-
StepSimulation,
34-
)
32+
from nrel.hive.state.simulation_state.update.step_simulation import StepSimulation
3533

3634

3735
def package_root() -> Path:

nrel/hive/app/hive_cosim.py

+9-13
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,29 @@
11
import functools as ft
22
from pathlib import Path
3-
from typing import Tuple, NamedTuple, Optional
3+
from typing import Tuple, NamedTuple, Optional, TypeVar
44

55
import pandas as pd
66
from pandas import DataFrame
77
from tqdm import tqdm
88

99
from nrel.hive import Update
10-
from nrel.hive.dispatcher.instruction_generator.instruction_generator import (
11-
InstructionGenerator,
12-
)
13-
from nrel.hive.dispatcher.instruction_generator.charging_fleet_manager import (
14-
ChargingFleetManager,
15-
)
10+
from nrel.hive.dispatcher.instruction_generator.instruction_generator import InstructionGenerator
11+
from nrel.hive.dispatcher.instruction_generator.charging_fleet_manager import ChargingFleetManager
1612
from nrel.hive.dispatcher.instruction_generator.dispatcher import Dispatcher
1713
from nrel.hive.initialization.load import load_simulation
1814
from nrel.hive.model.sim_time import SimTime
1915
from nrel.hive.reporting import reporter_ops
20-
from nrel.hive.reporting.handler.vehicle_charge_events_handler import (
21-
VehicleChargeEventsHandler,
22-
)
16+
from nrel.hive.reporting.handler.vehicle_charge_events_handler import VehicleChargeEventsHandler
2317
from nrel.hive.runner import RunnerPayload
2418
from nrel.hive.util import SimulationStateError
2519
from nrel.hive.util.fp import throw_on_failure
2620

21+
T = TypeVar("T", bound=InstructionGenerator)
22+
2723

2824
def load_scenario(
2925
scenario_file: Path,
30-
custom_instruction_generators: Optional[Tuple[InstructionGenerator, ...]] = None,
26+
custom_instruction_generators: Optional[Tuple[T, ...]] = None,
3127
) -> RunnerPayload:
3228
"""
3329
load a HIVE scenario from file and return the initial simulation state
@@ -49,13 +45,13 @@ def load_scenario(
4945
ChargingFleetManager(env.config.dispatcher),
5046
Dispatcher(env.config.dispatcher),
5147
)
48+
update = Update.build(env.config, instruction_generators)
5249
else:
53-
instruction_generators = custom_instruction_generators
50+
update = Update.build(env.config, custom_instruction_generators)
5451

5552
# add a specialized Reporter handler that catches vehicle charge events
5653
env.reporter.add_handler(VehicleChargeEventsHandler())
5754

58-
update = Update.build(env.config, instruction_generators)
5955
initial_payload = RunnerPayload(sim, env, update)
6056

6157
return initial_payload

nrel/hive/app/run.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
import pkg_resources
1111
import yaml
1212

13-
from nrel.hive.dispatcher.instruction_generator.charging_fleet_manager import (
14-
ChargingFleetManager,
15-
)
13+
from nrel.hive.dispatcher.instruction_generator.charging_fleet_manager import ChargingFleetManager
1614
from nrel.hive.dispatcher.instruction_generator.dispatcher import Dispatcher
1715
from nrel.hive.initialization.load import load_simulation
1816
from nrel.hive.reporting import reporter_ops

nrel/hive/app/run_batch.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,12 @@ def run() -> int:
7272
sim_args = [SimArgs(f, i) for i, f in enumerate(config.scenario_files)]
7373

7474
# check to make sure we don't exceed system CPU
75-
max_cpu = os.cpu_count()
75+
os_cpu = os.cpu_count()
76+
77+
if os_cpu is None:
78+
max_cpu = 1
79+
else:
80+
max_cpu = os_cpu
7681

7782
if len(config.scenario_files) > max_cpu:
7883
cpu = max_cpu

nrel/hive/app/run_tune.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@
77
import ray
88
from ray import tune
99

10-
from nrel.hive.dispatcher.instruction_generator.charging_fleet_manager import (
11-
ChargingFleetManager,
12-
)
10+
from nrel.hive.dispatcher.instruction_generator.charging_fleet_manager import ChargingFleetManager
1311
from nrel.hive.dispatcher.instruction_generator.dispatcher import Dispatcher
1412
from nrel.hive.initialization.load import load_simulation
1513
from nrel.hive.reporting.reporter import Reporter
@@ -54,7 +52,7 @@ def _scoring_function(payload: RunnerPayload) -> float:
5452
print("VEHICLES ", payload.s.vehicles.values())
5553
return score
5654

57-
def _setup(self, config: Dict[str:int]):
55+
def _setup(self, config: Dict[str, int]):
5856
scenarios = {
5957
1: "denver_demo.yaml",
6058
2: "denver_demo_constrained_charging.yaml",

nrel/hive/config/config_builder.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ def build(
1212
cls,
1313
default_config: Dict,
1414
required_config: Tuple[str, ...],
15-
config_constructor: Callable[[Dict], Union[Exception, T]],
16-
config: Dict = None,
15+
config_constructor: Callable[[Dict], T],
16+
config: Optional[Dict] = None,
1717
) -> T:
1818
"""
1919
constructs a Config from a configuration Dict

nrel/hive/config/dispatcher_config.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
from typing import NamedTuple, Dict, Union, Tuple, Optional
44

55
from nrel.hive.config.config_builder import ConfigBuilder
6-
from nrel.hive.dispatcher.instruction_generator.charging_search_type import (
7-
ChargingSearchType,
8-
)
6+
from nrel.hive.dispatcher.instruction_generator.charging_search_type import ChargingSearchType
97
from nrel.hive.util.units import Ratio, Seconds, Kilometers
108

119

@@ -41,12 +39,12 @@ def build(cls, config: Optional[Dict] = None) -> DispatcherConfig:
4139
)
4240

4341
@classmethod
44-
def from_dict(cls, d: Dict) -> Union[IOError, DispatcherConfig]:
42+
def from_dict(cls, d: Dict) -> DispatcherConfig:
4543
try:
4644
d["valid_dispatch_states"] = tuple(s.lower() for s in d["valid_dispatch_states"])
4745
d["charging_search_type"] = ChargingSearchType.from_string(d["charging_search_type"])
4846
except ValueError:
49-
return IOError("valid_dispatch_states and active_states must be in a list format")
47+
raise IOError("valid_dispatch_states and active_states must be in a list format")
5048

5149
return DispatcherConfig(**d)
5250

nrel/hive/config/hive_config.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class HiveConfig(NamedTuple):
3434
def build(
3535
cls,
3636
scenario_file_path: Path,
37-
config: Dict = None,
37+
config: Optional[Dict] = None,
3838
output_suffix: Optional[str] = datetime.now().strftime("%Y-%m-%d_%H-%M-%S"),
3939
) -> Union[Exception, HiveConfig]:
4040
"""
@@ -55,7 +55,7 @@ def build(
5555
@classmethod
5656
def from_dict(
5757
cls, d: Dict, scenario_file_path: Path, output_suffix: Optional[str]
58-
) -> Union[Exception, HiveConfig]:
58+
) -> HiveConfig:
5959
# collect the global hive configuration
6060
global_config = fs.global_hive_config_search()
6161

@@ -142,7 +142,7 @@ def asdict(self) -> Dict:
142142
out_dict["cache"] = cache
143143

144144
for name, config in self._asdict().items():
145-
if issubclass(config.__class__, Tuple):
145+
if issubclass(config.__class__, tuple):
146146
out_dict[name] = config.asdict()
147147
else:
148148
out_dict[name] = config

nrel/hive/config/input.py

+28-12
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import hashlib
44
import logging
55
from pathlib import Path
6-
from typing import NamedTuple, Tuple, Dict, Optional
6+
from typing import NamedTuple, Tuple, Dict, Optional, Union
77

88
from nrel.hive.config.config_builder import ConfigBuilder
99
from nrel.hive.util import fs
@@ -19,14 +19,14 @@ class Input(NamedTuple):
1919
bases_file: str
2020
stations_file: str
2121
mechatronics_file: str
22-
schedules_file: Optional[str]
23-
chargers_file: Optional[str]
24-
road_network_file: Optional[str]
25-
geofence_file: Optional[str]
26-
rate_structure_file: Optional[str]
27-
charging_price_file: Optional[str]
28-
demand_forecast_file: Optional[str]
29-
fleets_file: Optional[str]
22+
chargers_file: str
23+
schedules_file: Optional[str] = None
24+
road_network_file: Optional[str] = None
25+
geofence_file: Optional[str] = None
26+
rate_structure_file: Optional[str] = None
27+
charging_price_file: Optional[str] = None
28+
demand_forecast_file: Optional[str] = None
29+
fleets_file: Optional[str] = None
3030

3131
@classmethod
3232
def default_config(cls) -> Dict:
@@ -124,7 +124,7 @@ def from_dict(cls, d: Dict, scenario_file_path: Path, cache: Optional[Dict]) ->
124124
else None
125125
)
126126

127-
input = {
127+
input_config = {
128128
"scenario_directory": str(scenario_directory),
129129
"scenario_file": scenario_file,
130130
"vehicles_file": vehicles_file,
@@ -147,11 +147,27 @@ def from_dict(cls, d: Dict, scenario_file_path: Path, cache: Optional[Dict]) ->
147147
for (
148148
name,
149149
path,
150-
) in input.items(): # input_config.asdict(absolute_paths=True).items():
150+
) in input_config.items(): # input_config.asdict(absolute_paths=True).items():
151151
if path:
152152
cls._check_md5_checksum(path, cache[name])
153153

154-
return Input(**input)
154+
return Input(
155+
scenario_directory=str(scenario_directory),
156+
scenario_file=scenario_file,
157+
vehicles_file=vehicles_file,
158+
requests_file=requests_file,
159+
bases_file=bases_file,
160+
stations_file=stations_file,
161+
schedules_file=schedules_file,
162+
chargers_file=chargers_file,
163+
mechatronics_file=mechatronics_file,
164+
road_network_file=road_network_file,
165+
geofence_file=geofence_file,
166+
rate_structure_file=rate_structure_file,
167+
charging_price_file=charging_price_file,
168+
demand_forecast_file=demand_forecast_file,
169+
fleets_file=fleets_file,
170+
)
155171

156172
@staticmethod
157173
def _check_md5_checksum(filepath: str, existing_md5_sum: str):

nrel/hive/config/network.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import NamedTuple, Dict, Union, Tuple
3+
from typing import NamedTuple, Dict, Optional, Tuple
44

55
from nrel.hive.config.config_builder import ConfigBuilder
66

@@ -18,7 +18,7 @@ def required_config(cls) -> Tuple[str, ...]:
1818
return ()
1919

2020
@classmethod
21-
def build(cls, config: Dict = None) -> Union[Exception, Network]:
21+
def build(cls, config: Optional[Dict] = None) -> Network:
2222
return ConfigBuilder.build(
2323
default_config=cls.default_config(),
2424
required_config=cls.required_config(),

nrel/hive/config/sim.py

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import NamedTuple, Dict, Union, Tuple
3+
from typing import NamedTuple, Dict, Optional, Union, Tuple
44

55
from nrel.hive.config.config_builder import ConfigBuilder
66
from nrel.hive.model.vehicle.schedules.schedule_type import ScheduleType
@@ -31,7 +31,7 @@ def required_config(cls) -> Tuple[str, ...]:
3131
)
3232

3333
@classmethod
34-
def build(cls, config: Dict = None) -> Union[IOError, Sim]:
34+
def build(cls, config: Optional[Dict] = None) -> Sim:
3535
return ConfigBuilder.build(
3636
default_config=cls.default_config(),
3737
required_config=cls.required_config(),
@@ -40,14 +40,10 @@ def build(cls, config: Dict = None) -> Union[IOError, Sim]:
4040
)
4141

4242
@classmethod
43-
def from_dict(cls, d: Dict) -> Union[IOError, Sim]:
43+
def from_dict(cls, d: Dict) -> Sim:
4444
start_time = SimTime.build(d["start_time"])
45-
if isinstance(start_time, IOError):
46-
return start_time
4745

4846
end_time = SimTime.build(d["end_time"])
49-
if isinstance(end_time, IOError):
50-
return end_time
5147

5248
schedule_type = ScheduleType.from_string(d["schedule_type"])
5349

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
from nrel.hive.dispatcher.forecaster.basic_forecaster import BasicForecaster
22
from nrel.hive.dispatcher.forecaster.forecast import Forecast, ForecastType
3-
from nrel.hive.dispatcher.forecaster.forecaster_interface import (
4-
ForecasterInterface,
5-
)
3+
from nrel.hive.dispatcher.forecaster.forecaster_interface import ForecasterInterface

nrel/hive/dispatcher/forecaster/basic_forecaster.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22
from dataclasses import dataclass
33

44
from pathlib import Path
5-
from typing import Tuple, NamedTuple
5+
from typing import Tuple, NamedTuple, TYPE_CHECKING
66

77
from nrel.hive.model.sim_time import SimTime
88
from nrel.hive.dispatcher.forecaster.forecast import Forecast, ForecastType
9-
from nrel.hive.dispatcher.forecaster.forecaster_interface import (
10-
ForecasterInterface,
11-
)
9+
from nrel.hive.dispatcher.forecaster.forecaster_interface import ForecasterInterface
1210
from nrel.hive.util.iterators import DictReaderStepper
1311

12+
if TYPE_CHECKING:
13+
from hive.state.simulation_state.simulation_state import SimulationState
14+
1415

1516
@dataclass(frozen=True)
1617
class BasicForecaster(ForecasterInterface):
@@ -38,10 +39,13 @@ def build(cls, demand_forecast_file: str) -> BasicForecaster:
3839
if error:
3940
raise error
4041
else:
42+
if reader is None:
43+
raise Exception("No reader supplied by the DictReaderStepper")
44+
4145
return BasicForecaster(reader)
4246

4347
def generate_forecast(
44-
self, simulation_state: "SimulationState"
48+
self, simulation_state: SimulationState
4549
) -> Tuple[BasicForecaster, Forecast]:
4650
"""
4751
Generate fleet targets to be consumed by the dispatcher.

0 commit comments

Comments
 (0)