#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""test_kt.
- pytest code of shipmmg/kt.py
"""
import os
import numpy as np
import pytest
from shipmmg.kt import KTParams, simulate_kt, zigzag_test_kt
from shipmmg.ship_obj_3dof import ShipObj3dof
[docs]@pytest.fixture
def sim_result():
"""Just check shimmg.kt.simulate()."""
K = 0.155
T = 80.5
kt_params = KTParams(K=K, T=T)
duration = 50
num_of_sampling = 1000
time_list = np.linspace(0.00, duration, num_of_sampling)
Ts = 50.0
δ_list = 10 * np.pi / 180 * np.sin(2.0 * np.pi / Ts * time_list)
result = simulate_kt(kt_params, time_list, δ_list, 0.0)
return time_list, result
[docs]@pytest.fixture
def ship_kt(sim_result):
"""Fixture for testing in this file."""
time_list, sol = sim_result
simulation_result = sol.sol(time_list)
u_list = np.full(len(time_list), 20 * (1852.0 / 3600))
v_list = np.zeros(len(time_list))
r_list = simulation_result[0]
ship = ShipObj3dof(L=100, B=10)
ship.load_simulation_result(time_list, u_list, v_list, r_list)
return ship
[docs]def test_Ship3DOF_drawing_function(ship_kt, tmpdir):
"""Check drawing functions of Ship3DOF class by using KT simulation results."""
# Ship3DOF.draw_xy_trajectory()
save_fig_path = os.path.join(str(tmpdir), "test.png")
ship_kt.draw_xy_trajectory(dimensionless=True, fmt="ro")
ship_kt.draw_xy_trajectory(save_fig_path=save_fig_path)
# Ship3DOF.draw_chart()
save_fig_path = os.path.join(str(tmpdir), "test.png")
ship_kt.draw_chart(
"time",
"u",
xlabel="time [sec]",
ylabel=r"$u$" + " [m/s]",
save_fig_path=save_fig_path,
)
ship_kt.draw_chart(
"time",
"u",
xlabel="time [sec]",
ylabel=r"$u$" + " [m/s]",
fmt="ro",
save_fig_path=save_fig_path,
)
x_index_list = ["time", "u", "v", "r", "x", "y", "psi"]
y_index_list = ["time", "u", "v", "r", "x", "y", "psi"]
for x_index in x_index_list:
for y_index in y_index_list:
ship_kt.draw_chart(x_index, y_index)
with pytest.raises(Exception):
ship_kt.draw_chart("time", "hogehoge")
with pytest.raises(Exception):
ship_kt.draw_chart("hogehoge", "y")
# Ship3DOF.draw_gif()
ship_kt.draw_gif(fmt=None, save_fig_path=save_fig_path)
ship_kt.draw_gif(dimensionless=True, save_fig_path=save_fig_path)
[docs]def test_zigzag_test_kt(tmpdir):
"""Just check shimmg.kt.zigzag_test_kt()."""
K = 0.155
T = 80.5
kt_params = KTParams(K=K, T=T)
target_δ_rad = 20.0 * np.pi / 180.0
target_ψ_rad_deviation = 20.0 * np.pi / 180.0
duration = 500
num_of_sampling = 50000
time_list = np.linspace(0.00, duration, num_of_sampling)
δ_list, r_list = zigzag_test_kt(
kt_params,
target_δ_rad,
target_ψ_rad_deviation,
time_list,
δ_rad_rate=10.0 * np.pi / 180,
)
u_list = np.full(len(time_list), 20 * (1852.0 / 3600))
v_list = np.zeros(len(time_list))
ship = ShipObj3dof(L=100, B=10)
ship.load_simulation_result(time_list, u_list, v_list, r_list)
ship.δ = δ_list
save_fig_path = os.path.join(str(tmpdir), "test.png")
ship.draw_xy_trajectory(save_fig_path=save_fig_path)
ship.draw_chart(
"time",
"psi",
xlabel="time [sec]",
ylabel=r"$\psi$" + " [rad]",
save_fig_path=save_fig_path,
)
ship.draw_chart(
"time",
"r",
xlabel="time [sec]",
ylabel=r"$r$" + " [rad/s]",
save_fig_path=save_fig_path,
)
ship.draw_chart(
"time",
"delta",
xlabel="time [sec]",
ylabel=r"$\delta$" + " [rad]",
save_fig_path=save_fig_path,
)
save_fig_path = os.path.join(str(tmpdir), "test_delta_psi.png")
ship.draw_multi_y_chart(
"time",
["delta", "psi"],
xlabel="time [sec]",
ylabel="[rad]",
save_fig_path=save_fig_path,
)