40 lines
1.7 KiB
Python
40 lines
1.7 KiB
Python
"""The retired numerical backend must not become a hidden runtime dependency."""
|
|
import os
|
|
from pathlib import Path
|
|
import subprocess
|
|
import sys
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from app.simulation.backends import numeric_engine_name
|
|
|
|
|
|
class NativeOnlyBackendTests(unittest.TestCase):
|
|
def test_python_backend_is_rejected_explicitly(self):
|
|
with patch.dict(os.environ, {'SIMULATION_NUMERIC_ENGINE': 'python'}):
|
|
with self.assertRaisesRegex(ValueError, 'removed'):
|
|
numeric_engine_name()
|
|
self.assertEqual(numeric_engine_name('native-c'), 'native')
|
|
|
|
def test_api_and_compiler_import_without_numpy_or_scipy(self):
|
|
code = '''
|
|
import importlib.abc
|
|
import sys
|
|
from pathlib import Path
|
|
class NoNumericalPython(importlib.abc.MetaPathFinder):
|
|
def find_spec(self, fullname, path=None, target=None):
|
|
if fullname.split('.')[0] in ('numpy', 'scipy'):
|
|
raise AssertionError('Retired numerical dependency imported: '+fullname)
|
|
sys.meta_path.insert(0, NoNumericalPython())
|
|
from app.main import compile_system_xml_network
|
|
from app.simulation.native_codegen.compiler import compile_native_program
|
|
from app.system_xml import validate_system_xml_document
|
|
doc = validate_system_xml_document(Path('tests/fixtures/native-skill-test.xml').read_bytes()).document
|
|
program = compile_native_program(compile_system_xml_network(doc))
|
|
assert len(program.state_keys) == 12
|
|
assert len(program.variables) == 175
|
|
assert not any(name.startswith('app.simulation.solvers.') for name in sys.modules)
|
|
'''
|
|
subprocess.run([sys.executable, '-c', code], cwd=Path(__file__).resolve().parents[1],
|
|
capture_output=True, text=True, check=True, timeout=30)
|