chore: adopt remaining local development state

Catch-all for the intermixed residue of the unpushed otko-development
work ported into this tree: combinations/console-dock/quick-guide wiring
across commands, core, services, views and tests; repo-wide ruff-format
normalization; README/CONTRIBUTING updates; and the toolbar default
(both toolbars now open in the top area, quick guide text updated).

Splitting this further would require hunk-level surgery with low
confidence; the preceding commits in this branch isolate the
self-contained features.
This commit is contained in:
smillmorel 2026-09-16 12:03:22 -04:00
commit ba783718d4
152 changed files with 3394 additions and 1651 deletions

View file

@ -26,6 +26,8 @@ from otko.core import ( # noqa: E402
)
from otko.services import OpenSeesRunner # noqa: E402
pytestmark = pytest.mark.slow
def test_sdof_pole_first_frequency_matches_kspring_over_m() -> None:
"""Vertical pole, mass at top, fixed base. ω₁ = √(3EI/(mL³))."""
@ -36,11 +38,11 @@ def test_sdof_pole_first_frequency_matches_kspring_over_m() -> None:
m_tip = 1000.0
project = Project(
ndm=2, ndf=3,
ndm=2,
ndf=3,
nodes=[
Node(id=1, coords=(0.0, 0.0, 0.0), restraint=(True, True, False, False, False, True)),
Node(id=2, coords=(0.0, L, 0.0),
mass=(m_tip, m_tip, 0.0, 0.0, 0.0, 0.0)),
Node(id=2, coords=(0.0, L, 0.0), mass=(m_tip, m_tip, 0.0, 0.0, 0.0, 0.0)),
],
sections=[ElasticSection(id=1, E=E, A=A, Iz=I)],
elements=[ElasticBeamColumn(id=1, nodes=(1, 2), section_id=1)],
@ -54,9 +56,9 @@ def test_sdof_pole_first_frequency_matches_kspring_over_m() -> None:
omega_expected = math.sqrt(k / m_tip)
omega_actual = float(results.angular_frequencies[0])
assert math.isclose(omega_actual, omega_expected, rel_tol=5e-3), (
f"ω₁ mismatch: expected {omega_expected:.4f} rad/s, got {omega_actual:.4f} rad/s"
)
assert math.isclose(
omega_actual, omega_expected, rel_tol=5e-3
), f"ω₁ mismatch: expected {omega_expected:.4f} rad/s, got {omega_actual:.4f} rad/s"
def test_runner_falls_back_to_lapack_for_small_models() -> None:
@ -64,11 +66,11 @@ def test_runner_falls_back_to_lapack_for_small_models() -> None:
from unittest.mock import MagicMock
project = Project(
ndm=2, ndf=3,
ndm=2,
ndf=3,
nodes=[
Node(id=1, coords=(0.0, 0.0, 0.0), restraint=(True, True, False, False, False, True)),
Node(id=2, coords=(0.0, 3.0, 0.0),
mass=(1000.0, 1000.0, 0.0, 0.0, 0.0, 0.0)),
Node(id=2, coords=(0.0, 3.0, 0.0), mass=(1000.0, 1000.0, 0.0, 0.0, 0.0, 0.0)),
],
sections=[ElasticSection(id=1, E=200e9, A=0.01, Iz=8.333e-6)],
elements=[ElasticBeamColumn(id=1, nodes=(1, 2), section_id=1)],