Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions WeatherRoutingTool/routeparams.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,10 @@ def __eq__(self, route2):
raise ValueError('Route finsh not matching')
if not (np.array_equal(self.time, route2.time)):
raise ValueError('Route time not matching: self=' + str(self.time) + ' other=' + str(route2.time))
if not (np.array_equal(self.fuel, route2.fuel)):
raise ValueError('Route fuel not matching: self=' + str(self.fuel) + ' other=' + str(route2.fuel))
if not (np.array_equal(self.rpm, route2.rpm)):
if not (np.array_equal(self.ship_params_per_step.fuel_rate, route2.ship_params_per_step.fuel_rate)):
raise ValueError('Route fuel not matching: self=' + str(self.ship_params_per_step.fuel_rate) +
' other=' + str(route2.ship_params_per_step.fuel_rate))
if not (np.array_equal(self.ship_params_per_step.rpm, route2.ship_params_per_step.rpm)):
raise ValueError('Route rpm not matching')
if not (np.array_equal(self.lats_per_step, route2.lats_per_step)):
raise ValueError('Route lats_per_step not matching')
Expand Down Expand Up @@ -343,6 +344,8 @@ def from_file(cls, filename):
air_temperature = air_temperature[:-1] * u.deg_C
salinity = salinity[:-1] * u.dimensionless_unscaled
water_temperature = water_temperature[:-1] * u.deg_C
status = status[:-1]
message = message[:-1]

start = (lats_per_step[0], lons_per_step[0])
finish = (lats_per_step[count - 1], lons_per_step[count - 1])
Expand All @@ -352,7 +355,7 @@ def from_file(cls, filename):
dists_per_step = cls.get_dist_from_coords(cls, lats_per_step, lons_per_step)
dists_per_step = dists_per_step[:-1]

count = count - 1
count = count - 2

ship_params_per_step = ShipParams(
fuel_rate=fuel_rate,
Expand Down Expand Up @@ -741,10 +744,10 @@ def get_fuel_per_dist(self):
:rtype: astropy.units.Quantity
"""
fuel_per_second = self.ship_params_per_step.fuel_rate
delta_time = np.full(self.count, timedelta(seconds=0))
delta_time = np.full(self.count + 1, timedelta(seconds=0))
fuel = np.array([]) * u.kg

for i in range(0, self.count):
for i in range(0, self.count + 1):
delta_time[i] = self.starttime_per_step[i + 1] - self.starttime_per_step[i]
delta_time[i] = delta_time[i].total_seconds() * u.second
fuel = np.append(fuel, fuel_per_second[i] * delta_time[i])
Expand Down Expand Up @@ -842,7 +845,7 @@ def get_full_fuel(self):
:rtype: astropy.units.Quantity
"""
full_fuel = 0 * u.kg
for ipoint in range(0, self.count):
for ipoint in range(0, self.count + 1):
time_passed = (self.starttime_per_step[ipoint + 1] - self.starttime_per_step[ipoint]).total_seconds()
fuel_per_step = self.ship_params_per_step.fuel_rate[ipoint] * time_passed * u.second
full_fuel = full_fuel + fuel_per_step
Expand All @@ -858,7 +861,7 @@ def get_mean_power(self):
"""
power_sum = 0
count = 0
for ipoint in range(0, self.count):
for ipoint in range(0, self.count + 1):
power_per_step = self.ship_params_per_step.power[ipoint]
power_sum = power_sum + power_per_step
count += 1
Expand Down
11 changes: 6 additions & 5 deletions tests/test_graphics.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,16 @@
def test_plot_power_vs_dist():
count = 3
dummy_scalar = 0
dummy_list = np.full(3, -99)
dummy_list_coords = np.full(4, -99)
fuel_consumed = np.array([1, 2, 1]) * u.kg/u.second
dist_per_step = np.array([1, 4, 5])
dummy_list = np.full(4, -99)
dummy_list_coords = np.full(5, -99)
fuel_consumed = np.array([1, 2, 1, 1]) * u.kg / u.second
dist_per_step = np.array([1, 4, 5, 1])
time_per_step = np.array(
[datetime.datetime(2022, 12, 19),
datetime.datetime(2022, 12, 19) + datetime.timedelta(days=180),
datetime.datetime(2022, 12, 19) + datetime.timedelta(days=360),
datetime.datetime(2022, 12, 19) + datetime.timedelta(days=400)])
datetime.datetime(2022, 12, 19) + datetime.timedelta(days=400),
datetime.datetime(2022, 12, 19) + datetime.timedelta(days=450)])

sp = ShipParams(fuel_consumed, dummy_list, dummy_list, dummy_list, dummy_list, dummy_list, dummy_list, dummy_list,
dummy_list, dummy_list, dummy_list, dummy_list, dummy_list, dummy_list, dummy_list, dummy_list,
Expand Down
16 changes: 16 additions & 0 deletions tests/test_routeparams.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,22 @@ def test_get_acc_variables():
assert np.allclose(test_dist, rp_test.get_full_dist())
assert test_time == rp_test.get_full_travel_time()

# regression for Issue #219: round-trip must preserve count and array lengths
assert rp_test.count == 2
assert len(rp_test.lats_per_step) == 4
assert len(rp_test.ship_params_per_step.speed) == 3
assert len(rp_test.ship_params_per_step.status) == 3
assert len(rp_test.dists_per_step) == 3


def test_routeparams_eq():
# regression for Issue #221: __eq__ must not raise AttributeError
dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, 'data/min_fuel_route_test.json')
rp1 = RouteParams.from_file(filename)
rp2 = RouteParams.from_file(filename)
assert rp1 == rp2


'''
Test whether parameters in `RouteParams.get_per_waypoint_coords` are calculated correctly.
Expand Down