Skip to content

Commit 69e71a4

Browse files
authored
Merge pull request #328 from NatLabRockies/f3/walk-pydict-rename
3.1.0 deprecations
2 parents 3d123cd + 93640e5 commit 69e71a4

53 files changed

Lines changed: 415 additions & 592 deletions

Some content is hidden

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

benchmarks/f3-save-int-1.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def build_and_run_sim_drive():
88
veh.set_save_interval(1)
99
cyc = fsim.Cycle.from_resource("udds.csv")
1010
sd = fsim.SimDrive(veh, cyc)
11-
sd.walk()
11+
sd.run()
1212

1313
if __name__ == "__main__":
1414
build_and_run_sim_drive()
@@ -26,4 +26,4 @@ def build_and_run_sim_drive():
2626
# 11 62.125 MiB 0.000 MiB 1 veh.save_interval = 1
2727
# 12 62.312 MiB 0.188 MiB 1 cyc = fsim.Cycle.from_resource("udds.csv")
2828
# 13 62.406 MiB 0.094 MiB 1 sd = fsim.SimDrive(veh, cyc)
29-
# 14 62.953 MiB 0.547 MiB 1 sd.walk()
29+
# 14 62.953 MiB 0.547 MiB 1 sd.run()

benchmarks/f3-save-int-none.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def build_and_run_sim_drive():
88
veh.set_save_interval(None)
99
cyc = fsim.Cycle.from_resource("udds.csv")
1010
sd = fsim.SimDrive(veh, cyc)
11-
sd.walk()
11+
sd.run()
1212

1313
if __name__ == "__main__":
1414
build_and_run_sim_drive()
@@ -26,4 +26,4 @@ def build_and_run_sim_drive():
2626
# 11 61.766 MiB 0.000 MiB 1 veh.save_interval = None
2727
# 12 61.938 MiB 0.172 MiB 1 cyc = fsim.Cycle.from_resource("udds.csv")
2828
# 13 62.031 MiB 0.094 MiB 1 sd = fsim.SimDrive(veh, cyc)
29-
# 14 62.031 MiB 0.000 MiB 1 sd.walk()
29+
# 14 62.031 MiB 0.000 MiB 1 sd.run()

cal_and_val/f2-validation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@
4040
# %%
4141
# Simulate FASTSim 3
4242
for sd in f3_all_sds:
43-
# sd_dict = sd.to_pydict(flatten=False)
43+
# sd_dict = sd.to_dict(flatten=False)
4444
# sd_dict["sim_params"]["trace_miss_opts"] = "Allow"
45-
# sd = fastsim.SimDrive.from_pydict(sd_dict)
45+
# sd = fastsim.SimDrive.from_dict(sd_dict)
4646

4747
try:
48-
sd.walk()
48+
sd.run()
4949
except Exception as e:
5050
print("FAILURE:", sd.veh.name, e)
5151

cal_and_val/tests/test_f2_to_f3.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ def test_f2_to_f3() -> None:
1616
if f2file.suffix != ".yaml":
1717
continue
1818
f3veh = fsim.Vehicle.from_file(f2file)
19-
f3veh_dict = f3veh.to_pydict()
19+
f3veh_dict = f3veh.to_dict()
2020
if f3veh_dict["doc"] is not None:
2121
f3veh_dict["doc"] += "Generated by cal_and_val.tests.test_f2_to_f3.test_f2_to_f3"
2222
else:
2323
f3veh_dict["doc"] = "Generated by cal_and_val.tests.test_f2_to_f3.test_f2_to_f3"
24-
fsim.Vehicle.from_pydict(f3veh_dict).to_file(target_dir / f2file.name)
24+
fsim.Vehicle.from_dict(f3veh_dict).to_file(target_dir / f2file.name)

cal_and_val/thermal/cal_bev.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
celsius_to_kelvin_offset = 273.15
2020

2121
veh = fsim.Vehicle.from_file(Path(__file__).parent / "f3-vehicles/2020 Chevrolet Bolt EV.yaml")
22-
veh_dict = veh.to_pydict()
22+
veh_dict = veh.to_dict()
2323

24-
sim_params_dict = fsim.SimParams.default().to_pydict()
24+
sim_params_dict = fsim.SimParams.default().to_dict()
2525
sim_params_dict["trace_miss_opts"] = "AllowChecked"
26-
sim_params = fsim.SimParams.from_pydict(sim_params_dict, skip_init=False)
26+
sim_params = fsim.SimParams.from_dict(sim_params_dict, skip_init=False)
2727

2828

2929
# Obtain the data from
@@ -128,7 +128,7 @@ def df_to_cyc(df: pd.DataFrame) -> fsim.Cycle:
128128
# TODO: pipe solar load from `Cycle` into cabin thermal model
129129
# "pwr_solar_load_watts": df[],
130130
}
131-
return fsim.Cycle.from_pydict(cyc_dict, skip_init=False)
131+
return fsim.Cycle.from_dict(cyc_dict, skip_init=False)
132132

133133

134134
pt_type_var = "BatteryElectricVehicle"
@@ -173,7 +173,7 @@ def veh_init(cyc_file_stem: str, dfs: dict[str, pd.DataFrame]) -> fsim.Vehicle:
173173
te_set + celsius_to_kelvin_offset if te_set is not None else None
174174
)
175175

176-
return fsim.Vehicle.from_pydict(vd, skip_init=False)
176+
return fsim.Vehicle.from_dict(vd, skip_init=False)
177177

178178

179179
def resample_df(df: pd.DataFrame) -> pd.DataFrame:
@@ -213,7 +213,7 @@ def resample_df(df: pd.DataFrame) -> pd.DataFrame:
213213
cyc: fsim.Cycle
214214
# NOTE: maybe change `save_interval` to 5
215215
veh = veh_init(cyc_file_stem, dfs_for_cal)
216-
sds_for_cal[cyc_file_stem] = fsim.SimDrive(veh, cyc, sim_params).to_pydict()
216+
sds_for_cal[cyc_file_stem] = fsim.SimDrive(veh, cyc, sim_params).to_dict()
217217

218218
cyc_files_for_val: list[Path] = list(set(cyc_files) - set(cyc_files_for_cal))
219219
assert len(cyc_files_for_val) > 0
@@ -242,7 +242,7 @@ def resample_df(df: pd.DataFrame) -> pd.DataFrame:
242242
cyc_file_stem: str
243243
cyc: fsim.Cycle
244244
veh = veh_init(cyc_file_stem, dfs_for_val)
245-
sds_for_val[cyc_file_stem] = fsim.SimDrive(veh, cyc, sim_params).to_pydict()
245+
sds_for_val[cyc_file_stem] = fsim.SimDrive(veh, cyc, sim_params).to_dict()
246246

247247

248248
# Setup model objectives
@@ -252,19 +252,19 @@ def new_em_eff_max(sd_dict: dict, new_eff_max: float) -> dict:
252252
"""
253253
Set `new_eff_max` in `ElectricMachine`
254254
"""
255-
em = fsim.ElectricMachine.from_pydict(sd_dict["veh"]["pt_type"][pt_type_var]["em"])
255+
em = fsim.ElectricMachine.from_dict(sd_dict["veh"]["pt_type"][pt_type_var]["em"])
256256
em.__eff_fwd_max = new_eff_max
257-
sd_dict["veh"]["pt_type"][pt_type_var]["em"] = em.to_pydict()
257+
sd_dict["veh"]["pt_type"][pt_type_var]["em"] = em.to_dict()
258258
return sd_dict
259259

260260

261261
def new_em_eff_range(sd_dict, new_eff_range) -> dict:
262262
"""
263263
Set `new_eff_range` in `ElectricMachine`
264264
"""
265-
em = fsim.ElectricMachine.from_pydict(sd_dict["veh"]["pt_type"][pt_type_var]["em"])
265+
em = fsim.ElectricMachine.from_dict(sd_dict["veh"]["pt_type"][pt_type_var]["em"])
266266
em.__eff_fwd_range = new_eff_range
267-
sd_dict["veh"]["pt_type"][pt_type_var]["em"] = em.to_pydict()
267+
sd_dict["veh"]["pt_type"][pt_type_var]["em"] = em.to_dict()
268268
return sd_dict
269269

270270

@@ -477,7 +477,7 @@ def perturb_params(pos_perturb_dec: float = 0.05, neg_perturb_dec: float = 0.1):
477477
# - `pos_perturb_doc`: perturbation percentage added to all params. Can be overridden invididually
478478
# - `neg_perturb_doc`: perturbation percentage subtracted from all params. Can be overridden invididually
479479
"""
480-
em = fsim.ElectricMachine.from_pydict(veh_dict["pt_type"][pt_type_var]["em"], skip_init=False)
480+
em = fsim.ElectricMachine.from_dict(veh_dict["pt_type"][pt_type_var]["em"], skip_init=False)
481481
baseline_params_and_bounds = [
482482
(em.eff_fwd_max, None),
483483
(em.eff_fwd_range, None),

cal_and_val/thermal/cal_hev.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
veh = fsim.Vehicle.from_file(
2525
Path(__file__).parent / "f3-vehicles/2021_Hyundai_Sonata_Hybrid_Blue.yaml"
2626
)
27-
veh_dict = veh.to_pydict()
27+
veh_dict = veh.to_dict()
2828

29-
sim_params_dict = fsim.SimParams.default().to_pydict()
29+
sim_params_dict = fsim.SimParams.default().to_dict()
3030
sim_params_dict["trace_miss_opts"] = "AllowChecked"
31-
sim_params = fsim.SimParams.from_pydict(sim_params_dict, skip_init=False)
31+
sim_params = fsim.SimParams.from_dict(sim_params_dict, skip_init=False)
3232

3333
# Obtain the data from
3434
# https://www.anl.gov/taps/d3-2021-hyundai-sonata-hybrid
@@ -130,7 +130,7 @@ def df_to_cyc(df: pd.DataFrame) -> fsim.Cycle:
130130
# TODO: pipe solar load from `Cycle` into cabin thermal model
131131
# "pwr_solar_load_watts": df[],
132132
}
133-
return fsim.Cycle.from_pydict(cyc_dict, skip_init=False)
133+
return fsim.Cycle.from_dict(cyc_dict, skip_init=False)
134134

135135

136136
pt_type_var = "HybridElectricVehicle"
@@ -177,7 +177,7 @@ def veh_init(cyc_file_stem: str, dfs: Dict[str, pd.DataFrame]) -> fsim.Vehicle:
177177
te_set + celsius_to_kelvin_offset if te_set is not None else None
178178
)
179179

180-
return fsim.Vehicle.from_pydict(vd, skip_init=False)
180+
return fsim.Vehicle.from_dict(vd, skip_init=False)
181181

182182

183183
def resample_df(df: pd.DataFrame) -> pd.DataFrame:
@@ -220,7 +220,7 @@ def resample_df(df: pd.DataFrame) -> pd.DataFrame:
220220
cyc: fsim.Cycle
221221
# NOTE: maybe change `save_interval` to 5
222222
veh = veh_init(cyc_file_stem, dfs_for_cal)
223-
sds_for_cal[cyc_file_stem] = fsim.SimDrive(veh, cyc, sim_params).to_pydict()
223+
sds_for_cal[cyc_file_stem] = fsim.SimDrive(veh, cyc, sim_params).to_dict()
224224

225225
cyc_files_for_val: List[Path] = list(set(cyc_files) - set(cyc_files_for_cal))
226226
assert len(cyc_files_for_val) > 0
@@ -245,7 +245,7 @@ def resample_df(df: pd.DataFrame) -> pd.DataFrame:
245245
cyc_file_stem: str
246246
cyc: fsim.Cycle
247247
veh = veh_init(cyc_file_stem, dfs_for_val)
248-
sds_for_val[cyc_file_stem] = fsim.SimDrive(veh, cyc, sim_params).to_pydict()
248+
sds_for_val[cyc_file_stem] = fsim.SimDrive(veh, cyc, sim_params).to_dict()
249249

250250

251251
# Setup model parameters and objectives
@@ -254,41 +254,41 @@ def new_em_eff_max(sd_dict, new_eff_max) -> Dict:
254254
"""
255255
Set `new_eff_max` in `ElectricMachine`
256256
"""
257-
em = fsim.ElectricMachine.from_pydict(sd_dict["veh"]["pt_type"][pt_type_var]["em"])
257+
em = fsim.ElectricMachine.from_dict(sd_dict["veh"]["pt_type"][pt_type_var]["em"])
258258
em.__eff_fwd_max = new_eff_max
259-
sd_dict["veh"]["pt_type"][pt_type_var]["em"] = em.to_pydict()
259+
sd_dict["veh"]["pt_type"][pt_type_var]["em"] = em.to_dict()
260260
return sd_dict
261261

262262

263263
def new_em_eff_range(sd_dict, new_eff_range) -> Dict:
264264
"""
265265
Set `new_eff_range` in `ElectricMachine`
266266
"""
267-
em = fsim.ElectricMachine.from_pydict(sd_dict["veh"]["pt_type"][pt_type_var]["em"])
267+
em = fsim.ElectricMachine.from_dict(sd_dict["veh"]["pt_type"][pt_type_var]["em"])
268268
em.__eff_fwd_range = new_eff_range
269-
sd_dict["veh"]["pt_type"][pt_type_var]["em"] = em.to_pydict()
269+
sd_dict["veh"]["pt_type"][pt_type_var]["em"] = em.to_dict()
270270
return sd_dict
271271

272272

273273
def new_fc_eff_max(sd_dict, new_eff_max) -> Dict:
274274
"""
275275
Set `new_eff_max` in `FuelConverter`
276276
"""
277-
fc = fsim.FuelConverter.from_pydict(sd_dict["veh"]["pt_type"][pt_type_var]["fc"])
277+
fc = fsim.FuelConverter.from_dict(sd_dict["veh"]["pt_type"][pt_type_var]["fc"])
278278
fc.__eff_max = new_eff_max
279-
sd_dict["veh"]["pt_type"][pt_type_var]["fc"] = fc.to_pydict()
279+
sd_dict["veh"]["pt_type"][pt_type_var]["fc"] = fc.to_dict()
280280
return sd_dict
281281

282282

283283
def new_fc_eff_range(sd_dict, new_eff_range) -> Dict:
284284
"""
285285
Set `new_eff_range` in `FuelConverter`
286286
"""
287-
fc = fsim.FuelConverter.from_pydict(sd_dict["veh"]["pt_type"][pt_type_var]["fc"])
287+
fc = fsim.FuelConverter.from_dict(sd_dict["veh"]["pt_type"][pt_type_var]["fc"])
288288
fc_eff_max = fc.eff_max
289289
# TODO: this is a quick and dirty apprach, change to using constraints in PyMOO
290290
fc.__eff_range = min(new_eff_range, fc_eff_max * 0.95)
291-
sd_dict["veh"]["pt_type"][pt_type_var]["fc"] = fc.to_pydict()
291+
sd_dict["veh"]["pt_type"][pt_type_var]["fc"] = fc.to_dict()
292292
return sd_dict
293293

294294

@@ -654,8 +654,8 @@ def perturb_params(pos_perturb_dec: float = 0.05, neg_perturb_dec: float = 0.1):
654654
# - `pos_perturb_doc`: perturbation percentage added to all params. Can be overridden invididually
655655
# - `neg_perturb_doc`: perturbation percentage subtracted from all params. Can be overridden invididually
656656
"""
657-
em = fsim.ElectricMachine.from_pydict(veh_dict["pt_type"][pt_type_var]["em"], skip_init=False)
658-
fc = fsim.FuelConverter.from_pydict(veh_dict["pt_type"][pt_type_var]["fc"], skip_init=False)
657+
em = fsim.ElectricMachine.from_dict(veh_dict["pt_type"][pt_type_var]["em"], skip_init=False)
658+
fc = fsim.FuelConverter.from_dict(veh_dict["pt_type"][pt_type_var]["fc"], skip_init=False)
659659
baseline_params_and_bounds = [
660660
(em.eff_fwd_max, None),
661661
(em.eff_fwd_range, None),

cal_and_val/thermal/val_bev.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -298,18 +298,18 @@ def get_soc_exp_mod_cal_no_thrml() -> tuple[list[float], list[float]]:
298298
sd_cal_no_thrml["veh"]["hvac"] = "None"
299299
sd_cal_no_thrml["veh"]["cabin"] = "None"
300300
sd_cal_no_thrml["veh"]["pt_type"][pt_type_var]["res"]["thrml"] = "None"
301-
res = fsim.ReversibleEnergyStorage.from_pydict(
301+
res = fsim.ReversibleEnergyStorage.from_dict(
302302
sd_cal_no_thrml["veh"]["pt_type"][pt_type_var]["res"], skip_init=False
303303
)
304304
res.set_default_pwr_interp()
305-
sd_cal_no_thrml["veh"]["pt_type"][pt_type_var]["res"] = res.to_pydict()
305+
sd_cal_no_thrml["veh"]["pt_type"][pt_type_var]["res"] = res.to_dict()
306306

307-
sd_cal_no_thrml = fsim.SimDrive.from_pydict(sd_cal_no_thrml, skip_init=False)
307+
sd_cal_no_thrml = fsim.SimDrive.from_dict(sd_cal_no_thrml, skip_init=False)
308308
try:
309-
sd_cal_no_thrml.walk_once()
309+
sd_cal_no_thrml.run_once()
310310
except Exception:
311311
pass
312-
sd_cal_no_thrml = sd_cal_no_thrml.to_pydict()
312+
sd_cal_no_thrml = sd_cal_no_thrml.to_dict()
313313

314314
df_cal = df_cal[: len(sd_cal_no_thrml["veh"]["history"]["time_seconds"])]
315315

@@ -339,18 +339,18 @@ def get_soc_exp_mod_val_no_thrml() -> tuple[list[float], list[float]]:
339339
sd_val_no_thrml["veh"]["hvac"] = "None"
340340
sd_val_no_thrml["veh"]["cabin"] = "None"
341341
sd_val_no_thrml["veh"]["pt_type"][pt_type_var]["res"]["thrml"] = "None"
342-
res = fsim.ReversibleEnergyStorage.from_pydict(
342+
res = fsim.ReversibleEnergyStorage.from_dict(
343343
sd_val_no_thrml["veh"]["pt_type"][pt_type_var]["res"], skip_init=False
344344
)
345345
res.set_default_pwr_interp()
346-
sd_val_no_thrml["veh"]["pt_type"][pt_type_var]["res"] = res.to_pydict()
346+
sd_val_no_thrml["veh"]["pt_type"][pt_type_var]["res"] = res.to_dict()
347347

348-
sd_val_no_thrml = fsim.SimDrive.from_pydict(sd_val_no_thrml, skip_init=False)
348+
sd_val_no_thrml = fsim.SimDrive.from_dict(sd_val_no_thrml, skip_init=False)
349349
try:
350-
sd_val_no_thrml.walk_once()
350+
sd_val_no_thrml.run_once()
351351
except Exception:
352352
pass
353-
sd_val_no_thrml = sd_val_no_thrml.to_pydict()
353+
sd_val_no_thrml = sd_val_no_thrml.to_dict()
354354

355355
df_val = df_val[: len(sd_val_no_thrml["veh"]["history"]["time_seconds"])]
356356

@@ -388,7 +388,7 @@ def get_soc_exp_mod_val_no_thrml() -> tuple[list[float], list[float]]:
388388
veh_dict_new = deepcopy(sd_cal["veh"])
389389
veh_dict_new["hvac"]["LumpedCabinAndRES"]["te_set_cab_kelvin"] = 22 + celsius_to_kelvin_offset
390390
veh_dict_new["hvac"]["LumpedCabinAndRES"]["te_set_res_kelvin"] = 22 + celsius_to_kelvin_offset
391-
veh_new = fsim.Vehicle.from_pydict(veh_dict_new)
391+
veh_new = fsim.Vehicle.from_dict(veh_dict_new)
392392
veh_new.clear()
393393
if OVERWRITE_VEH:
394394
veh_new.to_file("./f3-vehicles/2020 Chevrolet Bolt EV thrml.yaml")

cal_and_val/thermal/val_hev.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -242,20 +242,20 @@ def draw_error_zones(ax):
242242
sd_cal_no_thrml['veh']['cabin'] = 'None'
243243
sd_cal_no_thrml['veh']['pt_type']['HybridElectricVehicle']['fc']['thrml'] = 'None'
244244
sd_cal_no_thrml['veh']['pt_type']['HybridElectricVehicle']['res']['thrml'] = 'None'
245-
res = fsim.ReversibleEnergyStorage.from_pydict(
245+
res = fsim.ReversibleEnergyStorage.from_dict(
246246
sd_cal_no_thrml['veh']['pt_type']['HybridElectricVehicle']['res'], skip_init=False)
247247
res.set_default_pwr_interp()
248-
sd_cal_no_thrml['veh']['pt_type']['HybridElectricVehicle']['res'] = res.to_pydict()
248+
sd_cal_no_thrml['veh']['pt_type']['HybridElectricVehicle']['res'] = res.to_dict()
249249
sd_cal_no_thrml['veh']['pt_type']['HybridElectricVehicle']['pt_cntrl']['RGWDB']['temp_fc_allowed_off_kelvin'] = None
250250
sd_cal_no_thrml['veh']['pt_type']['HybridElectricVehicle']['pt_cntrl']['RGWDB']['temp_fc_forced_on_kelvin'] = None
251251

252-
sd_cal_no_thrml = fsim.SimDrive.from_pydict(
252+
sd_cal_no_thrml = fsim.SimDrive.from_dict(
253253
sd_cal_no_thrml, skip_init=False)
254254
try:
255-
sd_cal_no_thrml.walk_once()
255+
sd_cal_no_thrml.run_once()
256256
except Exception:
257257
pass
258-
sd_cal_no_thrml = sd_cal_no_thrml.to_pydict()
258+
sd_cal_no_thrml = sd_cal_no_thrml.to_dict()
259259

260260
df_cal = df_cal[:len(sd_cal_no_thrml['veh']['history']['time_seconds'])]
261261

@@ -284,19 +284,19 @@ def draw_error_zones(ax):
284284
sd_val_no_thrml['veh']['cabin'] = 'None'
285285
sd_val_no_thrml['veh']['pt_type']['HybridElectricVehicle']['fc']['thrml'] = 'None'
286286
sd_val_no_thrml['veh']['pt_type']['HybridElectricVehicle']['res']['thrml'] = 'None'
287-
res = fsim.ReversibleEnergyStorage.from_pydict(
287+
res = fsim.ReversibleEnergyStorage.from_dict(
288288
sd_val_no_thrml['veh']['pt_type']['HybridElectricVehicle']['res'], skip_init=False)
289289
res.set_default_pwr_interp()
290-
sd_val_no_thrml['veh']['pt_type']['HybridElectricVehicle']['res'] = res.to_pydict()
290+
sd_val_no_thrml['veh']['pt_type']['HybridElectricVehicle']['res'] = res.to_dict()
291291
sd_val_no_thrml['veh']['pt_type']['HybridElectricVehicle']['pt_cntrl']['RGWDB']['temp_fc_allowed_off_kelvin'] = None
292292
sd_val_no_thrml['veh']['pt_type']['HybridElectricVehicle']['pt_cntrl']['RGWDB']['temp_fc_forced_on_kelvin'] = None
293-
sd_val_no_thrml = fsim.SimDrive.from_pydict(
293+
sd_val_no_thrml = fsim.SimDrive.from_dict(
294294
sd_val_no_thrml, skip_init=False)
295295
try:
296-
sd_val_no_thrml.walk_once()
296+
sd_val_no_thrml.run_once()
297297
except Exception:
298298
pass
299-
sd_val_no_thrml = sd_val_no_thrml.to_pydict()
299+
sd_val_no_thrml = sd_val_no_thrml.to_dict()
300300

301301
df_val = df_val[:len(sd_val_no_thrml['veh']['history']['time_seconds'])]
302302

docs/content/developers/vehicle-databases.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
## Structure
44

55
FASTSim vehicle databases,
6-
such as the public database available at https://github.com/NatLabRockies/fastsim-vehicles,
6+
such as the public database available at https://github.com/NatLabRockies/fastsim-vehicles
7+
(browsable at https://natlabrockies.github.io/fastsim-vehicles/),
78
enforce a strict organizational structure.
89

910
### Database Organizational Schema (v1)

0 commit comments

Comments
 (0)