Source code for test_numericVectorBindings

# Copyright (c) 2026, Autonomous Vehicle Systems Lab, University of Colorado at Boulder
# Distributed under the ISC license; see LICENSE.

"""Exercise numeric vectors shared by payload and module SWIG bindings."""

import itertools
import os
from pathlib import Path
import subprocess
import sys

import Basilisk
import pytest


[docs] @pytest.mark.parametrize("import_order", list(itertools.permutations( ["simpleInstrument", "zeroWindModel", "linkBudget"] ))) def test_storage_vectors_survive_module_imports(import_order): """Message reads and lookup-table vectors work after each module import.""" script = r''' import importlib import sys from Basilisk.architecture import messaging payload = messaging.DataStorageStatusMsgPayload() payload.storedData = messaging.DoubleVector([400.0, 1200.0]) # [bit] message = messaging.DataStorageStatusMsg().write(payload) reader = messaging.DataStorageStatusMsgReader() reader.subscribeTo(message) for module_name in sys.argv[1:]: module = importlib.import_module("Basilisk.simulation." + module_name) # Each read must use the current shared payload registration, not a proxy # created before the import that happens to keep a working Python class. for result in (message.read(), reader()): values = result.storedData assert values[0] == 400.0 # [bit] assert values[-1] == 1200.0 # [bit] assert list(values[:]) == [400.0, 1200.0] # [bit] values[0] = 500.0 # [bit] assert result.storedData[0] == 500.0 # [bit] values[0] = 400.0 # [bit] if module_name == "zeroWindModel": values = module.VectorDouble([1.0, 2.0]) # [-] assert values[0] == 1.0 values[1] = 3.0 # [-] assert list(values[:]) == [1.0, 3.0] if module_name == "linkBudget": table = module.LookupTable() table.f_l = messaging.DoubleVector([2.2, 8.4]) # [GHz] assert table.f_l[0] == 2.2 # [GHz] table.f_l[1] = 8.5 # [GHz] assert list(table.f_l[:]) == [2.2, 8.5] # [GHz] print("Numeric-vector checks passed") ''' environment = os.environ.copy() package_parent = str(Path(Basilisk.__file__).resolve().parent.parent) environment["PYTHONPATH"] = os.pathsep.join(filter(None, [package_parent, environment.get("PYTHONPATH")])) environment["PYTHONMALLOC"] = "debug" result = subprocess.run( [sys.executable, "-X", "faulthandler", "-c", script, *import_order], env=environment, capture_output=True, text=True, timeout=120, # [s] ) assert result.returncode == 0, result.stdout + result.stderr assert "Numeric-vector checks passed" in result.stdout