ctrlsys 1.0.19__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ctrlsys-1.0.19/.agent/rules/slicot-fortran-c11-translator.md +44 -0
- ctrlsys-1.0.19/.agent/workflows/translate_slicot_routine.md +48 -0
- ctrlsys-1.0.19/.clangd +2 -0
- ctrlsys-1.0.19/.claude/agents/slicot-fortran-translator.md +570 -0
- ctrlsys-1.0.19/.github/workflows/codeql.yml +46 -0
- ctrlsys-1.0.19/.github/workflows/publish.yml +205 -0
- ctrlsys-1.0.19/.github/workflows/test.yml +121 -0
- ctrlsys-1.0.19/.gitignore +67 -0
- ctrlsys-1.0.19/.gitmodules +3 -0
- ctrlsys-1.0.19/.readthedocs.yaml +17 -0
- ctrlsys-1.0.19/CHANGELOG.md +108 -0
- ctrlsys-1.0.19/CLAUDE.md +206 -0
- ctrlsys-1.0.19/LICENSE +39 -0
- ctrlsys-1.0.19/LICENSE-SLICOT +29 -0
- ctrlsys-1.0.19/PKG-INFO +91 -0
- ctrlsys-1.0.19/README.md +62 -0
- ctrlsys-1.0.19/benchmarks/README.md +78 -0
- ctrlsys-1.0.19/benchmarks/common/data_loader.h +322 -0
- ctrlsys-1.0.19/benchmarks/common/timing.h +70 -0
- ctrlsys-1.0.19/benchmarks/conftest.py +198 -0
- ctrlsys-1.0.19/benchmarks/meson.build +170 -0
- ctrlsys-1.0.19/benchmarks/native/bench_bb01ad.c +95 -0
- ctrlsys-1.0.19/benchmarks/native/bench_bb02ad.c +95 -0
- ctrlsys-1.0.19/benchmarks/native/bench_bb03ad.c +88 -0
- ctrlsys-1.0.19/benchmarks/native/bench_bb04ad.c +88 -0
- ctrlsys-1.0.19/benchmarks/native/bench_bd01ad.c +93 -0
- ctrlsys-1.0.19/benchmarks/native/bench_bd02ad.c +91 -0
- ctrlsys-1.0.19/benchmarks/native/bench_sb02md.c +121 -0
- ctrlsys-1.0.19/benchmarks/native/bench_sb02od.c +133 -0
- ctrlsys-1.0.19/benchmarks/native/bench_sb03md.c +131 -0
- ctrlsys-1.0.19/benchmarks/native/bench_sb03od.c +142 -0
- ctrlsys-1.0.19/benchmarks/test_descriptor.py +55 -0
- ctrlsys-1.0.19/benchmarks/test_generators.py +56 -0
- ctrlsys-1.0.19/benchmarks/test_lyapunov.py +52 -0
- ctrlsys-1.0.19/benchmarks/test_riccati.py +72 -0
- ctrlsys-1.0.19/docker/Dockerfile.asan +25 -0
- ctrlsys-1.0.19/docs/_static/.gitkeep +0 -0
- ctrlsys-1.0.19/docs/_templates/.gitkeep +0 -0
- ctrlsys-1.0.19/docs/api/index.rst +739 -0
- ctrlsys-1.0.19/docs/conf.py +40 -0
- ctrlsys-1.0.19/docs/guide.rst +298 -0
- ctrlsys-1.0.19/docs/history.md +292 -0
- ctrlsys-1.0.19/docs/incomplete_translations.md +162 -0
- ctrlsys-1.0.19/docs/index.rst +49 -0
- ctrlsys-1.0.19/docs/installation.rst +49 -0
- ctrlsys-1.0.19/docs/quickstart.rst +69 -0
- ctrlsys-1.0.19/docs/requirements.txt +3 -0
- ctrlsys-1.0.19/include/slicot/ab.h +2840 -0
- ctrlsys-1.0.19/include/slicot/ag.h +282 -0
- ctrlsys-1.0.19/include/slicot/bb.h +312 -0
- ctrlsys-1.0.19/include/slicot/bd.h +166 -0
- ctrlsys-1.0.19/include/slicot/de.h +103 -0
- ctrlsys-1.0.19/include/slicot/df.h +51 -0
- ctrlsys-1.0.19/include/slicot/dg.h +138 -0
- ctrlsys-1.0.19/include/slicot/dk.h +48 -0
- ctrlsys-1.0.19/include/slicot/fb.h +435 -0
- ctrlsys-1.0.19/include/slicot/fd.h +85 -0
- ctrlsys-1.0.19/include/slicot/ib.h +756 -0
- ctrlsys-1.0.19/include/slicot/lapack_aux.h +194 -0
- ctrlsys-1.0.19/include/slicot/ma.h +751 -0
- ctrlsys-1.0.19/include/slicot/mb01.h +1136 -0
- ctrlsys-1.0.19/include/slicot/mb02.h +1629 -0
- ctrlsys-1.0.19/include/slicot/mb03.h +2845 -0
- ctrlsys-1.0.19/include/slicot/mb04.h +2770 -0
- ctrlsys-1.0.19/include/slicot/mb05.h +249 -0
- ctrlsys-1.0.19/include/slicot/mc.h +469 -0
- ctrlsys-1.0.19/include/slicot/md.h +501 -0
- ctrlsys-1.0.19/include/slicot/nf.h +360 -0
- ctrlsys-1.0.19/include/slicot/sb.h +5715 -0
- ctrlsys-1.0.19/include/slicot/sg.h +925 -0
- ctrlsys-1.0.19/include/slicot/tb.h +1392 -0
- ctrlsys-1.0.19/include/slicot/tc.h +209 -0
- ctrlsys-1.0.19/include/slicot/td.h +294 -0
- ctrlsys-1.0.19/include/slicot/tf.h +297 -0
- ctrlsys-1.0.19/include/slicot/tg.h +1684 -0
- ctrlsys-1.0.19/include/slicot/ud.h +201 -0
- ctrlsys-1.0.19/include/slicot/ue.h +44 -0
- ctrlsys-1.0.19/include/slicot.h +43 -0
- ctrlsys-1.0.19/include/slicot_blas.h +1238 -0
- ctrlsys-1.0.19/include/slicot_config.h.in +8 -0
- ctrlsys-1.0.19/include/slicot_types.h +49 -0
- ctrlsys-1.0.19/meson.build +127 -0
- ctrlsys-1.0.19/meson.options +11 -0
- ctrlsys-1.0.19/pyproject.toml +53 -0
- ctrlsys-1.0.19/pyrightconfig.json +4 -0
- ctrlsys-1.0.19/python/_package_init/__init__.py +69 -0
- ctrlsys-1.0.19/python/data/docstrings.h +12765 -0
- ctrlsys-1.0.19/python/data/docstrings.json +589 -0
- ctrlsys-1.0.19/python/meson.build +70 -0
- ctrlsys-1.0.19/python/slicot_module.c +624 -0
- ctrlsys-1.0.19/python/wrappers/py_ab.c +9540 -0
- ctrlsys-1.0.19/python/wrappers/py_ag.c +864 -0
- ctrlsys-1.0.19/python/wrappers/py_bb.c +862 -0
- ctrlsys-1.0.19/python/wrappers/py_bd.c +384 -0
- ctrlsys-1.0.19/python/wrappers/py_de.c +106 -0
- ctrlsys-1.0.19/python/wrappers/py_df.c +45 -0
- ctrlsys-1.0.19/python/wrappers/py_dg.c +177 -0
- ctrlsys-1.0.19/python/wrappers/py_dk.c +47 -0
- ctrlsys-1.0.19/python/wrappers/py_fb.c +1095 -0
- ctrlsys-1.0.19/python/wrappers/py_fd.c +173 -0
- ctrlsys-1.0.19/python/wrappers/py_ib.c +2211 -0
- ctrlsys-1.0.19/python/wrappers/py_lapack_aux.c +810 -0
- ctrlsys-1.0.19/python/wrappers/py_ma.c +1415 -0
- ctrlsys-1.0.19/python/wrappers/py_mb01.c +2245 -0
- ctrlsys-1.0.19/python/wrappers/py_mb02.c +4143 -0
- ctrlsys-1.0.19/python/wrappers/py_mb03.c +9275 -0
- ctrlsys-1.0.19/python/wrappers/py_mb04.c +9438 -0
- ctrlsys-1.0.19/python/wrappers/py_mb05.c +431 -0
- ctrlsys-1.0.19/python/wrappers/py_mc.c +1180 -0
- ctrlsys-1.0.19/python/wrappers/py_md.c +716 -0
- ctrlsys-1.0.19/python/wrappers/py_nf.c +376 -0
- ctrlsys-1.0.19/python/wrappers/py_sb.c +12986 -0
- ctrlsys-1.0.19/python/wrappers/py_sg.c +2452 -0
- ctrlsys-1.0.19/python/wrappers/py_tb.c +4027 -0
- ctrlsys-1.0.19/python/wrappers/py_tc.c +398 -0
- ctrlsys-1.0.19/python/wrappers/py_td.c +549 -0
- ctrlsys-1.0.19/python/wrappers/py_tf.c +853 -0
- ctrlsys-1.0.19/python/wrappers/py_tg.c +4378 -0
- ctrlsys-1.0.19/python/wrappers/py_ud.c +475 -0
- ctrlsys-1.0.19/python/wrappers/py_ue.c +26 -0
- ctrlsys-1.0.19/python/wrappers/py_wrappers.h +664 -0
- ctrlsys-1.0.19/scripts/benchmark_c_vs_fortran.py +1375 -0
- ctrlsys-1.0.19/scripts/bump_version.py +43 -0
- ctrlsys-1.0.19/scripts/run_asan_docker.sh +92 -0
- ctrlsys-1.0.19/shim/README.md +17 -0
- ctrlsys-1.0.19/shim/pyproject.toml +23 -0
- ctrlsys-1.0.19/shim/slicot/__init__.py +8 -0
- ctrlsys-1.0.19/spec.md +193 -0
- ctrlsys-1.0.19/src/AB/ab01md.c +181 -0
- ctrlsys-1.0.19/src/AB/ab01nd.c +219 -0
- ctrlsys-1.0.19/src/AB/ab01od.c +224 -0
- ctrlsys-1.0.19/src/AB/ab04md.c +122 -0
- ctrlsys-1.0.19/src/AB/ab05md.c +237 -0
- ctrlsys-1.0.19/src/AB/ab05nd.c +275 -0
- ctrlsys-1.0.19/src/AB/ab05od.c +188 -0
- ctrlsys-1.0.19/src/AB/ab05pd.c +187 -0
- ctrlsys-1.0.19/src/AB/ab05qd.c +206 -0
- ctrlsys-1.0.19/src/AB/ab05rd.c +128 -0
- ctrlsys-1.0.19/src/AB/ab05sd.c +163 -0
- ctrlsys-1.0.19/src/AB/ab07md.c +82 -0
- ctrlsys-1.0.19/src/AB/ab07nd.c +129 -0
- ctrlsys-1.0.19/src/AB/ab08md.c +131 -0
- ctrlsys-1.0.19/src/AB/ab08mz.c +128 -0
- ctrlsys-1.0.19/src/AB/ab08nd.c +277 -0
- ctrlsys-1.0.19/src/AB/ab08nw.c +291 -0
- ctrlsys-1.0.19/src/AB/ab08nx.c +254 -0
- ctrlsys-1.0.19/src/AB/ab08ny.c +324 -0
- ctrlsys-1.0.19/src/AB/ab08nz.c +280 -0
- ctrlsys-1.0.19/src/AB/ab09ad.c +129 -0
- ctrlsys-1.0.19/src/AB/ab09ax.c +247 -0
- ctrlsys-1.0.19/src/AB/ab09bd.c +140 -0
- ctrlsys-1.0.19/src/AB/ab09bx.c +276 -0
- ctrlsys-1.0.19/src/AB/ab09cd.c +144 -0
- ctrlsys-1.0.19/src/AB/ab09cx.c +283 -0
- ctrlsys-1.0.19/src/AB/ab09dd.c +103 -0
- ctrlsys-1.0.19/src/AB/ab09ed.c +164 -0
- ctrlsys-1.0.19/src/AB/ab09fd.c +300 -0
- ctrlsys-1.0.19/src/AB/ab09gd.c +299 -0
- ctrlsys-1.0.19/src/AB/ab09hd.c +272 -0
- ctrlsys-1.0.19/src/AB/ab09hx.c +325 -0
- ctrlsys-1.0.19/src/AB/ab09hy.c +205 -0
- ctrlsys-1.0.19/src/AB/ab09id.c +447 -0
- ctrlsys-1.0.19/src/AB/ab09ix.c +267 -0
- ctrlsys-1.0.19/src/AB/ab09iy.c +387 -0
- ctrlsys-1.0.19/src/AB/ab09jd.c +728 -0
- ctrlsys-1.0.19/src/AB/ab09jv.c +591 -0
- ctrlsys-1.0.19/src/AB/ab09jw.c +573 -0
- ctrlsys-1.0.19/src/AB/ab09jx.c +129 -0
- ctrlsys-1.0.19/src/AB/ab09kd.c +348 -0
- ctrlsys-1.0.19/src/AB/ab09kx.c +445 -0
- ctrlsys-1.0.19/src/AB/ab09md.c +177 -0
- ctrlsys-1.0.19/src/AB/ab09nd.c +181 -0
- ctrlsys-1.0.19/src/AB/ab13ad.c +140 -0
- ctrlsys-1.0.19/src/AB/ab13ax.c +132 -0
- ctrlsys-1.0.19/src/AB/ab13bd.c +148 -0
- ctrlsys-1.0.19/src/AB/ab13cd.c +400 -0
- ctrlsys-1.0.19/src/AB/ab13dd.c +1258 -0
- ctrlsys-1.0.19/src/AB/ab13dx.c +278 -0
- ctrlsys-1.0.19/src/AB/ab13ed.c +143 -0
- ctrlsys-1.0.19/src/AB/ab13fd.c +205 -0
- ctrlsys-1.0.19/src/AB/ab13hd.c +2200 -0
- ctrlsys-1.0.19/src/AB/ab13id.c +355 -0
- ctrlsys-1.0.19/src/AB/ab13md.c +1372 -0
- ctrlsys-1.0.19/src/AB/ab8nxz.c +246 -0
- ctrlsys-1.0.19/src/AG/ag07bd.c +102 -0
- ctrlsys-1.0.19/src/AG/ag08bd.c +297 -0
- ctrlsys-1.0.19/src/AG/ag08by.c +395 -0
- ctrlsys-1.0.19/src/AG/ag08bz.c +297 -0
- ctrlsys-1.0.19/src/AG/ag8byz.c +401 -0
- ctrlsys-1.0.19/src/BB/bb01ad.c +671 -0
- ctrlsys-1.0.19/src/BB/bb02ad.c +512 -0
- ctrlsys-1.0.19/src/BB/bb03ad.c +306 -0
- ctrlsys-1.0.19/src/BB/bb04ad.c +290 -0
- ctrlsys-1.0.19/src/BD/bd01ad.c +567 -0
- ctrlsys-1.0.19/src/BD/bd02ad.c +412 -0
- ctrlsys-1.0.19/src/DE/de01od.c +96 -0
- ctrlsys-1.0.19/src/DE/de01pd.c +119 -0
- ctrlsys-1.0.19/src/DE/delctg.c +15 -0
- ctrlsys-1.0.19/src/DE/zelctg.c +14 -0
- ctrlsys-1.0.19/src/DF/df01md.c +126 -0
- ctrlsys-1.0.19/src/DG/dg01md.c +87 -0
- ctrlsys-1.0.19/src/DG/dg01nd.c +43 -0
- ctrlsys-1.0.19/src/DG/dg01ny.c +62 -0
- ctrlsys-1.0.19/src/DG/dg01od.c +218 -0
- ctrlsys-1.0.19/src/DK/dk01md.c +56 -0
- ctrlsys-1.0.19/src/FB/fb01qd.c +181 -0
- ctrlsys-1.0.19/src/FB/fb01rd.c +214 -0
- ctrlsys-1.0.19/src/FB/fb01sd.c +233 -0
- ctrlsys-1.0.19/src/FB/fb01td.c +220 -0
- ctrlsys-1.0.19/src/FB/fb01vd.c +138 -0
- ctrlsys-1.0.19/src/FD/fd01ad.c +95 -0
- ctrlsys-1.0.19/src/IB/.gitkeep +0 -0
- ctrlsys-1.0.19/src/IB/ib01ad.c +225 -0
- ctrlsys-1.0.19/src/IB/ib01bd.c +370 -0
- ctrlsys-1.0.19/src/IB/ib01cd.c +357 -0
- ctrlsys-1.0.19/src/IB/ib01md.c +810 -0
- ctrlsys-1.0.19/src/IB/ib01my.c +684 -0
- ctrlsys-1.0.19/src/IB/ib01nd.c +458 -0
- ctrlsys-1.0.19/src/IB/ib01od.c +91 -0
- ctrlsys-1.0.19/src/IB/ib01oy.c +37 -0
- ctrlsys-1.0.19/src/IB/ib01pd.c +554 -0
- ctrlsys-1.0.19/src/IB/ib01px.c +155 -0
- ctrlsys-1.0.19/src/IB/ib01py.c +228 -0
- ctrlsys-1.0.19/src/IB/ib01qd.c +625 -0
- ctrlsys-1.0.19/src/IB/ib01rd.c +493 -0
- ctrlsys-1.0.19/src/IB/ib03ad.c +418 -0
- ctrlsys-1.0.19/src/IB/ib03bd.c +581 -0
- ctrlsys-1.0.19/src/MA/.gitkeep +0 -0
- ctrlsys-1.0.19/src/MA/ma01ad.c +25 -0
- ctrlsys-1.0.19/src/MA/ma01bd.c +60 -0
- ctrlsys-1.0.19/src/MA/ma01bz.c +51 -0
- ctrlsys-1.0.19/src/MA/ma01cd.c +45 -0
- ctrlsys-1.0.19/src/MA/ma01dd.c +65 -0
- ctrlsys-1.0.19/src/MA/ma01dz.c +156 -0
- ctrlsys-1.0.19/src/MA/ma02ad.c +44 -0
- ctrlsys-1.0.19/src/MA/ma02az.c +63 -0
- ctrlsys-1.0.19/src/MA/ma02bd.c +32 -0
- ctrlsys-1.0.19/src/MA/ma02bz.c +32 -0
- ctrlsys-1.0.19/src/MA/ma02cd.c +51 -0
- ctrlsys-1.0.19/src/MA/ma02cz.c +51 -0
- ctrlsys-1.0.19/src/MA/ma02dd.c +59 -0
- ctrlsys-1.0.19/src/MA/ma02ed.c +32 -0
- ctrlsys-1.0.19/src/MA/ma02es.c +29 -0
- ctrlsys-1.0.19/src/MA/ma02ez.c +94 -0
- ctrlsys-1.0.19/src/MA/ma02fd.c +22 -0
- ctrlsys-1.0.19/src/MA/ma02gd.c +57 -0
- ctrlsys-1.0.19/src/MA/ma02gz.c +57 -0
- ctrlsys-1.0.19/src/MA/ma02hd.c +72 -0
- ctrlsys-1.0.19/src/MA/ma02hz.c +72 -0
- ctrlsys-1.0.19/src/MA/ma02id.c +194 -0
- ctrlsys-1.0.19/src/MA/ma02iz.c +262 -0
- ctrlsys-1.0.19/src/MA/ma02jd.c +74 -0
- ctrlsys-1.0.19/src/MA/ma02jz.c +74 -0
- ctrlsys-1.0.19/src/MA/ma02md.c +92 -0
- ctrlsys-1.0.19/src/MA/ma02mz.c +108 -0
- ctrlsys-1.0.19/src/MA/ma02nz.c +111 -0
- ctrlsys-1.0.19/src/MA/ma02od.c +98 -0
- ctrlsys-1.0.19/src/MA/ma02oz.c +111 -0
- ctrlsys-1.0.19/src/MA/ma02pd.c +53 -0
- ctrlsys-1.0.19/src/MA/ma02pz.c +53 -0
- ctrlsys-1.0.19/src/MA/ma02rd.c +179 -0
- ctrlsys-1.0.19/src/MA/ma02sd.c +30 -0
- ctrlsys-1.0.19/src/MB/mb01kd.c +167 -0
- ctrlsys-1.0.19/src/MB/mb01ld.c +225 -0
- ctrlsys-1.0.19/src/MB/mb01md.c +151 -0
- ctrlsys-1.0.19/src/MB/mb01nd.c +118 -0
- ctrlsys-1.0.19/src/MB/mb01oc.c +225 -0
- ctrlsys-1.0.19/src/MB/mb01od.c +198 -0
- ctrlsys-1.0.19/src/MB/mb01oe.c +233 -0
- ctrlsys-1.0.19/src/MB/mb01oh.c +234 -0
- ctrlsys-1.0.19/src/MB/mb01oo.c +60 -0
- ctrlsys-1.0.19/src/MB/mb01os.c +192 -0
- ctrlsys-1.0.19/src/MB/mb01ot.c +138 -0
- ctrlsys-1.0.19/src/MB/mb01pd.c +119 -0
- ctrlsys-1.0.19/src/MB/mb01qd.c +183 -0
- ctrlsys-1.0.19/src/MB/mb01rb.c +234 -0
- ctrlsys-1.0.19/src/MB/mb01rd.c +169 -0
- ctrlsys-1.0.19/src/MB/mb01rh.c +246 -0
- ctrlsys-1.0.19/src/MB/mb01rt.c +107 -0
- ctrlsys-1.0.19/src/MB/mb01ru.c +77 -0
- ctrlsys-1.0.19/src/MB/mb01rw.c +185 -0
- ctrlsys-1.0.19/src/MB/mb01rx.c +187 -0
- ctrlsys-1.0.19/src/MB/mb01ry.c +194 -0
- ctrlsys-1.0.19/src/MB/mb01sd.c +40 -0
- ctrlsys-1.0.19/src/MB/mb01ss.c +54 -0
- ctrlsys-1.0.19/src/MB/mb01td.c +65 -0
- ctrlsys-1.0.19/src/MB/mb01ud.c +100 -0
- ctrlsys-1.0.19/src/MB/mb01uw.c +210 -0
- ctrlsys-1.0.19/src/MB/mb01ux.c +201 -0
- ctrlsys-1.0.19/src/MB/mb01uy.c +292 -0
- ctrlsys-1.0.19/src/MB/mb01uz.c +322 -0
- ctrlsys-1.0.19/src/MB/mb01vd.c +874 -0
- ctrlsys-1.0.19/src/MB/mb01wd.c +142 -0
- ctrlsys-1.0.19/src/MB/mb01xd.c +100 -0
- ctrlsys-1.0.19/src/MB/mb01xy.c +83 -0
- ctrlsys-1.0.19/src/MB/mb01yd.c +151 -0
- ctrlsys-1.0.19/src/MB/mb01zd.c +245 -0
- ctrlsys-1.0.19/src/MB/mb02cd.c +299 -0
- ctrlsys-1.0.19/src/MB/mb02cu.c +713 -0
- ctrlsys-1.0.19/src/MB/mb02cv.c +508 -0
- ctrlsys-1.0.19/src/MB/mb02cx.c +152 -0
- ctrlsys-1.0.19/src/MB/mb02cy.c +188 -0
- ctrlsys-1.0.19/src/MB/mb02dd.c +240 -0
- ctrlsys-1.0.19/src/MB/mb02ed.c +199 -0
- ctrlsys-1.0.19/src/MB/mb02fd.c +199 -0
- ctrlsys-1.0.19/src/MB/mb02gd.c +361 -0
- ctrlsys-1.0.19/src/MB/mb02hd.c +374 -0
- ctrlsys-1.0.19/src/MB/mb02id.c +373 -0
- ctrlsys-1.0.19/src/MB/mb02jd.c +389 -0
- ctrlsys-1.0.19/src/MB/mb02jx.c +497 -0
- ctrlsys-1.0.19/src/MB/mb02kd.c +589 -0
- ctrlsys-1.0.19/src/MB/mb02md.c +253 -0
- ctrlsys-1.0.19/src/MB/mb02nd.c +424 -0
- ctrlsys-1.0.19/src/MB/mb02ny.c +88 -0
- ctrlsys-1.0.19/src/MB/mb02od.c +90 -0
- ctrlsys-1.0.19/src/MB/mb02pd.c +221 -0
- ctrlsys-1.0.19/src/MB/mb02qd.c +241 -0
- ctrlsys-1.0.19/src/MB/mb02qy.c +138 -0
- ctrlsys-1.0.19/src/MB/mb02rd.c +63 -0
- ctrlsys-1.0.19/src/MB/mb02rz.c +80 -0
- ctrlsys-1.0.19/src/MB/mb02sd.c +53 -0
- ctrlsys-1.0.19/src/MB/mb02sz.c +63 -0
- ctrlsys-1.0.19/src/MB/mb02td.c +102 -0
- ctrlsys-1.0.19/src/MB/mb02tz.c +103 -0
- ctrlsys-1.0.19/src/MB/mb02ud.c +271 -0
- ctrlsys-1.0.19/src/MB/mb02uu.c +77 -0
- ctrlsys-1.0.19/src/MB/mb02uv.c +128 -0
- ctrlsys-1.0.19/src/MB/mb02uw.c +186 -0
- ctrlsys-1.0.19/src/MB/mb02vd.c +68 -0
- ctrlsys-1.0.19/src/MB/mb02wd.c +156 -0
- ctrlsys-1.0.19/src/MB/mb02xd.c +139 -0
- ctrlsys-1.0.19/src/MB/mb02yd.c +182 -0
- ctrlsys-1.0.19/src/MB/mb03ab.c +163 -0
- ctrlsys-1.0.19/src/MB/mb03ad.c +150 -0
- ctrlsys-1.0.19/src/MB/mb03ae.c +174 -0
- ctrlsys-1.0.19/src/MB/mb03af.c +256 -0
- ctrlsys-1.0.19/src/MB/mb03ag.c +204 -0
- ctrlsys-1.0.19/src/MB/mb03ah.c +173 -0
- ctrlsys-1.0.19/src/MB/mb03ai.c +142 -0
- ctrlsys-1.0.19/src/MB/mb03ba.c +51 -0
- ctrlsys-1.0.19/src/MB/mb03bb.c +495 -0
- ctrlsys-1.0.19/src/MB/mb03bc.c +267 -0
- ctrlsys-1.0.19/src/MB/mb03bd.c +1646 -0
- ctrlsys-1.0.19/src/MB/mb03be.c +75 -0
- ctrlsys-1.0.19/src/MB/mb03bf.c +84 -0
- ctrlsys-1.0.19/src/MB/mb03bg.c +60 -0
- ctrlsys-1.0.19/src/MB/mb03bz.c +932 -0
- ctrlsys-1.0.19/src/MB/mb03cd.c +354 -0
- ctrlsys-1.0.19/src/MB/mb03cz.c +28 -0
- ctrlsys-1.0.19/src/MB/mb03dd.c +451 -0
- ctrlsys-1.0.19/src/MB/mb03dz.c +21 -0
- ctrlsys-1.0.19/src/MB/mb03ed.c +208 -0
- ctrlsys-1.0.19/src/MB/mb03fd.c +140 -0
- ctrlsys-1.0.19/src/MB/mb03fz.c +826 -0
- ctrlsys-1.0.19/src/MB/mb03gd.c +208 -0
- ctrlsys-1.0.19/src/MB/mb03gz.c +21 -0
- ctrlsys-1.0.19/src/MB/mb03hd.c +130 -0
- ctrlsys-1.0.19/src/MB/mb03hz.c +14 -0
- ctrlsys-1.0.19/src/MB/mb03id.c +1007 -0
- ctrlsys-1.0.19/src/MB/mb03iz.c +367 -0
- ctrlsys-1.0.19/src/MB/mb03jd.c +862 -0
- ctrlsys-1.0.19/src/MB/mb03jp.c +837 -0
- ctrlsys-1.0.19/src/MB/mb03jz.c +290 -0
- ctrlsys-1.0.19/src/MB/mb03ka.c +340 -0
- ctrlsys-1.0.19/src/MB/mb03kb.c +1230 -0
- ctrlsys-1.0.19/src/MB/mb03kc.c +111 -0
- ctrlsys-1.0.19/src/MB/mb03kd.c +278 -0
- ctrlsys-1.0.19/src/MB/mb03ke.c +581 -0
- ctrlsys-1.0.19/src/MB/mb03ld.c +348 -0
- ctrlsys-1.0.19/src/MB/mb03lf.c +596 -0
- ctrlsys-1.0.19/src/MB/mb03lp.c +407 -0
- ctrlsys-1.0.19/src/MB/mb03lz.c +593 -0
- ctrlsys-1.0.19/src/MB/mb03md.c +111 -0
- ctrlsys-1.0.19/src/MB/mb03my.c +21 -0
- ctrlsys-1.0.19/src/MB/mb03nd.c +53 -0
- ctrlsys-1.0.19/src/MB/mb03ny.c +110 -0
- ctrlsys-1.0.19/src/MB/mb03od.c +148 -0
- ctrlsys-1.0.19/src/MB/mb03oy.c +194 -0
- ctrlsys-1.0.19/src/MB/mb03pd.c +111 -0
- ctrlsys-1.0.19/src/MB/mb03py.c +190 -0
- ctrlsys-1.0.19/src/MB/mb03qd.c +153 -0
- ctrlsys-1.0.19/src/MB/mb03qg.c +178 -0
- ctrlsys-1.0.19/src/MB/mb03qv.c +74 -0
- ctrlsys-1.0.19/src/MB/mb03qw.c +63 -0
- ctrlsys-1.0.19/src/MB/mb03qx.c +64 -0
- ctrlsys-1.0.19/src/MB/mb03qy.c +73 -0
- ctrlsys-1.0.19/src/MB/mb03rd.c +282 -0
- ctrlsys-1.0.19/src/MB/mb03rw.c +87 -0
- ctrlsys-1.0.19/src/MB/mb03rx.c +77 -0
- ctrlsys-1.0.19/src/MB/mb03ry.c +106 -0
- ctrlsys-1.0.19/src/MB/mb03rz.c +208 -0
- ctrlsys-1.0.19/src/MB/mb03sd.c +141 -0
- ctrlsys-1.0.19/src/MB/mb03td.c +331 -0
- ctrlsys-1.0.19/src/MB/mb03ts.c +515 -0
- ctrlsys-1.0.19/src/MB/mb03ud.c +172 -0
- ctrlsys-1.0.19/src/MB/mb03vd.c +88 -0
- ctrlsys-1.0.19/src/MB/mb03vw.c +497 -0
- ctrlsys-1.0.19/src/MB/mb03vy.c +100 -0
- ctrlsys-1.0.19/src/MB/mb03wa.c +278 -0
- ctrlsys-1.0.19/src/MB/mb03wd.c +638 -0
- ctrlsys-1.0.19/src/MB/mb03wx.c +102 -0
- ctrlsys-1.0.19/src/MB/mb03xd.c +547 -0
- ctrlsys-1.0.19/src/MB/mb03xp.c +408 -0
- ctrlsys-1.0.19/src/MB/mb03xs.c +267 -0
- ctrlsys-1.0.19/src/MB/mb03xu.c +890 -0
- ctrlsys-1.0.19/src/MB/mb03xz.c +460 -0
- ctrlsys-1.0.19/src/MB/mb03ya.c +112 -0
- ctrlsys-1.0.19/src/MB/mb03yd.c +285 -0
- ctrlsys-1.0.19/src/MB/mb03yt.c +167 -0
- ctrlsys-1.0.19/src/MB/mb03za.c +1081 -0
- ctrlsys-1.0.19/src/MB/mb03zd.c +697 -0
- ctrlsys-1.0.19/src/MB/mb04ad.c +881 -0
- ctrlsys-1.0.19/src/MB/mb04az.c +615 -0
- ctrlsys-1.0.19/src/MB/mb04bd.c +829 -0
- ctrlsys-1.0.19/src/MB/mb04bp.c +1075 -0
- ctrlsys-1.0.19/src/MB/mb04bz.c +559 -0
- ctrlsys-1.0.19/src/MB/mb04cd.c +1745 -0
- ctrlsys-1.0.19/src/MB/mb04db.c +83 -0
- ctrlsys-1.0.19/src/MB/mb04dd.c +324 -0
- ctrlsys-1.0.19/src/MB/mb04di.c +82 -0
- ctrlsys-1.0.19/src/MB/mb04dl.c +662 -0
- ctrlsys-1.0.19/src/MB/mb04dp.c +934 -0
- ctrlsys-1.0.19/src/MB/mb04ds.c +380 -0
- ctrlsys-1.0.19/src/MB/mb04dy.c +132 -0
- ctrlsys-1.0.19/src/MB/mb04dz.c +337 -0
- ctrlsys-1.0.19/src/MB/mb04ed.c +806 -0
- ctrlsys-1.0.19/src/MB/mb04fd.c +653 -0
- ctrlsys-1.0.19/src/MB/mb04fp.c +811 -0
- ctrlsys-1.0.19/src/MB/mb04gd.c +127 -0
- ctrlsys-1.0.19/src/MB/mb04hd.c +1208 -0
- ctrlsys-1.0.19/src/MB/mb04id.c +154 -0
- ctrlsys-1.0.19/src/MB/mb04iy.c +198 -0
- ctrlsys-1.0.19/src/MB/mb04iz.c +147 -0
- ctrlsys-1.0.19/src/MB/mb04jd.c +104 -0
- ctrlsys-1.0.19/src/MB/mb04kd.c +89 -0
- ctrlsys-1.0.19/src/MB/mb04ld.c +71 -0
- ctrlsys-1.0.19/src/MB/mb04md.c +195 -0
- ctrlsys-1.0.19/src/MB/mb04nd.c +54 -0
- ctrlsys-1.0.19/src/MB/mb04ny.c +301 -0
- ctrlsys-1.0.19/src/MB/mb04od.c +63 -0
- ctrlsys-1.0.19/src/MB/mb04ow.c +175 -0
- ctrlsys-1.0.19/src/MB/mb04ox.c +38 -0
- ctrlsys-1.0.19/src/MB/mb04oy.c +260 -0
- ctrlsys-1.0.19/src/MB/mb04pa.c +787 -0
- ctrlsys-1.0.19/src/MB/mb04pb.c +183 -0
- ctrlsys-1.0.19/src/MB/mb04pu.c +163 -0
- ctrlsys-1.0.19/src/MB/mb04py.c +495 -0
- ctrlsys-1.0.19/src/MB/mb04qb.c +242 -0
- ctrlsys-1.0.19/src/MB/mb04qc.c +734 -0
- ctrlsys-1.0.19/src/MB/mb04qf.c +263 -0
- ctrlsys-1.0.19/src/MB/mb04qs.c +110 -0
- ctrlsys-1.0.19/src/MB/mb04qu.c +215 -0
- ctrlsys-1.0.19/src/MB/mb04rb.c +210 -0
- ctrlsys-1.0.19/src/MB/mb04rd.c +555 -0
- ctrlsys-1.0.19/src/MB/mb04rs.c +458 -0
- ctrlsys-1.0.19/src/MB/mb04rt.c +154 -0
- ctrlsys-1.0.19/src/MB/mb04ru.c +146 -0
- ctrlsys-1.0.19/src/MB/mb04rv.c +127 -0
- ctrlsys-1.0.19/src/MB/mb04rw.c +170 -0
- ctrlsys-1.0.19/src/MB/mb04rz.c +438 -0
- ctrlsys-1.0.19/src/MB/mb04su.c +87 -0
- ctrlsys-1.0.19/src/MB/mb04tb.c +495 -0
- ctrlsys-1.0.19/src/MB/mb04ts.c +285 -0
- ctrlsys-1.0.19/src/MB/mb04tt.c +150 -0
- ctrlsys-1.0.19/src/MB/mb04tu.c +34 -0
- ctrlsys-1.0.19/src/MB/mb04tv.c +63 -0
- ctrlsys-1.0.19/src/MB/mb04tw.c +62 -0
- ctrlsys-1.0.19/src/MB/mb04tx.c +198 -0
- ctrlsys-1.0.19/src/MB/mb04ty.c +64 -0
- ctrlsys-1.0.19/src/MB/mb04ud.c +141 -0
- ctrlsys-1.0.19/src/MB/mb04vd.c +203 -0
- ctrlsys-1.0.19/src/MB/mb04vx.c +189 -0
- ctrlsys-1.0.19/src/MB/mb04wd.c +204 -0
- ctrlsys-1.0.19/src/MB/mb04wp.c +106 -0
- ctrlsys-1.0.19/src/MB/mb04wr.c +195 -0
- ctrlsys-1.0.19/src/MB/mb04wu.c +222 -0
- ctrlsys-1.0.19/src/MB/mb04xd.c +256 -0
- ctrlsys-1.0.19/src/MB/mb04xy.c +113 -0
- ctrlsys-1.0.19/src/MB/mb04yd.c +326 -0
- ctrlsys-1.0.19/src/MB/mb04yw.c +318 -0
- ctrlsys-1.0.19/src/MB/mb04zd.c +360 -0
- ctrlsys-1.0.19/src/MB/mb05md.c +145 -0
- ctrlsys-1.0.19/src/MB/mb05my.c +181 -0
- ctrlsys-1.0.19/src/MB/mb05nd.c +189 -0
- ctrlsys-1.0.19/src/MB/mb05od.c +373 -0
- ctrlsys-1.0.19/src/MB/mb05oy.c +79 -0
- ctrlsys-1.0.19/src/MB/mb3jzp.c +562 -0
- ctrlsys-1.0.19/src/MB/mb3lzp.c +545 -0
- ctrlsys-1.0.19/src/MB/mb3oyz.c +178 -0
- ctrlsys-1.0.19/src/MB/mb3pyz.c +173 -0
- ctrlsys-1.0.19/src/MB/mb4dbz.c +83 -0
- ctrlsys-1.0.19/src/MB/mb4dlz.c +665 -0
- ctrlsys-1.0.19/src/MB/mb4dpz.c +994 -0
- ctrlsys-1.0.19/src/MC/mc01md.c +37 -0
- ctrlsys-1.0.19/src/MC/mc01nd.c +40 -0
- ctrlsys-1.0.19/src/MC/mc01od.c +62 -0
- ctrlsys-1.0.19/src/MC/mc01pd.c +58 -0
- ctrlsys-1.0.19/src/MC/mc01py.c +61 -0
- ctrlsys-1.0.19/src/MC/mc01qd.c +51 -0
- ctrlsys-1.0.19/src/MC/mc01rd.c +107 -0
- ctrlsys-1.0.19/src/MC/mc01sd.c +117 -0
- ctrlsys-1.0.19/src/MC/mc01sw.c +38 -0
- ctrlsys-1.0.19/src/MC/mc01sx.c +22 -0
- ctrlsys-1.0.19/src/MC/mc01sy.c +63 -0
- ctrlsys-1.0.19/src/MC/mc01td.c +136 -0
- ctrlsys-1.0.19/src/MC/mc01vd.c +206 -0
- ctrlsys-1.0.19/src/MC/mc01wd.c +41 -0
- ctrlsys-1.0.19/src/MC/mc01xd.c +219 -0
- ctrlsys-1.0.19/src/MC/mc03md.c +146 -0
- ctrlsys-1.0.19/src/MC/mc03nd.c +164 -0
- ctrlsys-1.0.19/src/MC/mc03nx.c +42 -0
- ctrlsys-1.0.19/src/MC/mc03ny.c +174 -0
- ctrlsys-1.0.19/src/MD/.gitkeep +0 -0
- ctrlsys-1.0.19/src/MD/md03ad.c +428 -0
- ctrlsys-1.0.19/src/MD/md03ba.c +43 -0
- ctrlsys-1.0.19/src/MD/md03bb.c +49 -0
- ctrlsys-1.0.19/src/MD/md03bd.c +476 -0
- ctrlsys-1.0.19/src/MD/md03bf.c +60 -0
- ctrlsys-1.0.19/src/MD/md03bx.c +117 -0
- ctrlsys-1.0.19/src/MD/md03by.c +303 -0
- ctrlsys-1.0.19/src/NF/.gitkeep +0 -0
- ctrlsys-1.0.19/src/NF/nf01ad.c +119 -0
- ctrlsys-1.0.19/src/NF/nf01ay.c +217 -0
- ctrlsys-1.0.19/src/NF/nf01ba.c +70 -0
- ctrlsys-1.0.19/src/NF/nf01bb.c +87 -0
- ctrlsys-1.0.19/src/NF/nf01bd.c +236 -0
- ctrlsys-1.0.19/src/NF/nf01be.c +192 -0
- ctrlsys-1.0.19/src/NF/nf01bf.c +147 -0
- ctrlsys-1.0.19/src/NF/nf01bp.c +297 -0
- ctrlsys-1.0.19/src/NF/nf01bq.c +264 -0
- ctrlsys-1.0.19/src/NF/nf01br.c +572 -0
- ctrlsys-1.0.19/src/NF/nf01bs.c +338 -0
- ctrlsys-1.0.19/src/NF/nf01bu.c +207 -0
- ctrlsys-1.0.19/src/NF/nf01bv.c +115 -0
- ctrlsys-1.0.19/src/NF/nf01bw.c +101 -0
- ctrlsys-1.0.19/src/NF/nf01bx.c +62 -0
- ctrlsys-1.0.19/src/NF/nf01by.c +143 -0
- ctrlsys-1.0.19/src/SB/.gitkeep +0 -0
- ctrlsys-1.0.19/src/SB/sb01bd.c +437 -0
- ctrlsys-1.0.19/src/SB/sb01bx.c +76 -0
- ctrlsys-1.0.19/src/SB/sb01by.c +200 -0
- ctrlsys-1.0.19/src/SB/sb01dd.c +487 -0
- ctrlsys-1.0.19/src/SB/sb01fy.c +170 -0
- ctrlsys-1.0.19/src/SB/sb01md.c +300 -0
- ctrlsys-1.0.19/src/SB/sb02cx.c +21 -0
- ctrlsys-1.0.19/src/SB/sb02md.c +257 -0
- ctrlsys-1.0.19/src/SB/sb02mr.c +15 -0
- ctrlsys-1.0.19/src/SB/sb02ms.c +15 -0
- ctrlsys-1.0.19/src/SB/sb02mt.c +228 -0
- ctrlsys-1.0.19/src/SB/sb02mu.c +244 -0
- ctrlsys-1.0.19/src/SB/sb02mv.c +15 -0
- ctrlsys-1.0.19/src/SB/sb02mw.c +15 -0
- ctrlsys-1.0.19/src/SB/sb02mx.c +285 -0
- ctrlsys-1.0.19/src/SB/sb02nd.c +386 -0
- ctrlsys-1.0.19/src/SB/sb02od.c +444 -0
- ctrlsys-1.0.19/src/SB/sb02ou.c +16 -0
- ctrlsys-1.0.19/src/SB/sb02ov.c +18 -0
- ctrlsys-1.0.19/src/SB/sb02ow.c +16 -0
- ctrlsys-1.0.19/src/SB/sb02ox.c +18 -0
- ctrlsys-1.0.19/src/SB/sb02oy.c +433 -0
- ctrlsys-1.0.19/src/SB/sb02pd.c +468 -0
- ctrlsys-1.0.19/src/SB/sb02qd.c +461 -0
- ctrlsys-1.0.19/src/SB/sb02rd.c +474 -0
- ctrlsys-1.0.19/src/SB/sb02ru.c +242 -0
- ctrlsys-1.0.19/src/SB/sb02sd.c +403 -0
- ctrlsys-1.0.19/src/SB/sb03md.c +249 -0
- ctrlsys-1.0.19/src/SB/sb03mu.c +323 -0
- ctrlsys-1.0.19/src/SB/sb03mv.c +163 -0
- ctrlsys-1.0.19/src/SB/sb03mw.c +155 -0
- ctrlsys-1.0.19/src/SB/sb03mx.c +600 -0
- ctrlsys-1.0.19/src/SB/sb03my.c +480 -0
- ctrlsys-1.0.19/src/SB/sb03od.c +507 -0
- ctrlsys-1.0.19/src/SB/sb03or.c +267 -0
- ctrlsys-1.0.19/src/SB/sb03os.c +362 -0
- ctrlsys-1.0.19/src/SB/sb03ot.c +641 -0
- ctrlsys-1.0.19/src/SB/sb03ou.c +118 -0
- ctrlsys-1.0.19/src/SB/sb03ov.c +38 -0
- ctrlsys-1.0.19/src/SB/sb03oy.c +457 -0
- ctrlsys-1.0.19/src/SB/sb03oz.c +495 -0
- ctrlsys-1.0.19/src/SB/sb03pd.c +173 -0
- ctrlsys-1.0.19/src/SB/sb03qd.c +405 -0
- ctrlsys-1.0.19/src/SB/sb03qx.c +203 -0
- ctrlsys-1.0.19/src/SB/sb03qy.c +223 -0
- ctrlsys-1.0.19/src/SB/sb03rd.c +186 -0
- ctrlsys-1.0.19/src/SB/sb03sd.c +394 -0
- ctrlsys-1.0.19/src/SB/sb03sx.c +161 -0
- ctrlsys-1.0.19/src/SB/sb03sy.c +192 -0
- ctrlsys-1.0.19/src/SB/sb03td.c +198 -0
- ctrlsys-1.0.19/src/SB/sb03ud.c +206 -0
- ctrlsys-1.0.19/src/SB/sb04md.c +194 -0
- ctrlsys-1.0.19/src/SB/sb04mr.c +123 -0
- ctrlsys-1.0.19/src/SB/sb04mu.c +79 -0
- ctrlsys-1.0.19/src/SB/sb04mw.c +98 -0
- ctrlsys-1.0.19/src/SB/sb04my.c +57 -0
- ctrlsys-1.0.19/src/SB/sb04nd.c +221 -0
- ctrlsys-1.0.19/src/SB/sb04nv.c +78 -0
- ctrlsys-1.0.19/src/SB/sb04nw.c +68 -0
- ctrlsys-1.0.19/src/SB/sb04nx.c +200 -0
- ctrlsys-1.0.19/src/SB/sb04ny.c +127 -0
- ctrlsys-1.0.19/src/SB/sb04od.c +516 -0
- ctrlsys-1.0.19/src/SB/sb04ow.c +357 -0
- ctrlsys-1.0.19/src/SB/sb04pd.c +381 -0
- ctrlsys-1.0.19/src/SB/sb04px.c +410 -0
- ctrlsys-1.0.19/src/SB/sb04py.c +1356 -0
- ctrlsys-1.0.19/src/SB/sb04qd.c +209 -0
- ctrlsys-1.0.19/src/SB/sb04qr.c +123 -0
- ctrlsys-1.0.19/src/SB/sb04qu.c +105 -0
- ctrlsys-1.0.19/src/SB/sb04qy.c +76 -0
- ctrlsys-1.0.19/src/SB/sb04rd.c +211 -0
- ctrlsys-1.0.19/src/SB/sb04rv.c +115 -0
- ctrlsys-1.0.19/src/SB/sb04rw.c +93 -0
- ctrlsys-1.0.19/src/SB/sb04rx.c +280 -0
- ctrlsys-1.0.19/src/SB/sb04ry.c +182 -0
- ctrlsys-1.0.19/src/SB/sb06nd.c +197 -0
- ctrlsys-1.0.19/src/SB/sb08cd.c +138 -0
- ctrlsys-1.0.19/src/SB/sb08dd.c +293 -0
- ctrlsys-1.0.19/src/SB/sb08ed.c +134 -0
- ctrlsys-1.0.19/src/SB/sb08fd.c +332 -0
- ctrlsys-1.0.19/src/SB/sb08gd.c +99 -0
- ctrlsys-1.0.19/src/SB/sb08hd.c +120 -0
- ctrlsys-1.0.19/src/SB/sb08md.c +239 -0
- ctrlsys-1.0.19/src/SB/sb08my.c +59 -0
- ctrlsys-1.0.19/src/SB/sb08nd.c +181 -0
- ctrlsys-1.0.19/src/SB/sb08ny.c +40 -0
- ctrlsys-1.0.19/src/SB/sb09md.c +116 -0
- ctrlsys-1.0.19/src/SB/sb10ad.c +454 -0
- ctrlsys-1.0.19/src/SB/sb10dd.c +567 -0
- ctrlsys-1.0.19/src/SB/sb10ed.c +229 -0
- ctrlsys-1.0.19/src/SB/sb10fd.c +228 -0
- ctrlsys-1.0.19/src/SB/sb10hd.c +176 -0
- ctrlsys-1.0.19/src/SB/sb10id.c +333 -0
- ctrlsys-1.0.19/src/SB/sb10jd.c +211 -0
- ctrlsys-1.0.19/src/SB/sb10kd.c +450 -0
- ctrlsys-1.0.19/src/SB/sb10ld.c +228 -0
- ctrlsys-1.0.19/src/SB/sb10md.c +318 -0
- ctrlsys-1.0.19/src/SB/sb10pd.c +327 -0
- ctrlsys-1.0.19/src/SB/sb10qd.c +294 -0
- ctrlsys-1.0.19/src/SB/sb10rd.c +421 -0
- ctrlsys-1.0.19/src/SB/sb10sd.c +326 -0
- ctrlsys-1.0.19/src/SB/sb10td.c +164 -0
- ctrlsys-1.0.19/src/SB/sb10ud.c +221 -0
- ctrlsys-1.0.19/src/SB/sb10vd.c +174 -0
- ctrlsys-1.0.19/src/SB/sb10wd.c +144 -0
- ctrlsys-1.0.19/src/SB/sb10yd.c +425 -0
- ctrlsys-1.0.19/src/SB/sb10zd.c +597 -0
- ctrlsys-1.0.19/src/SB/sb10zp.c +185 -0
- ctrlsys-1.0.19/src/SB/sb16ad.c +258 -0
- ctrlsys-1.0.19/src/SB/sb16ay.c +415 -0
- ctrlsys-1.0.19/src/SB/sb16bd.c +242 -0
- ctrlsys-1.0.19/src/SB/sb16cd.c +155 -0
- ctrlsys-1.0.19/src/SB/sb16cy.c +187 -0
- ctrlsys-1.0.19/src/SG/sg02ad.c +461 -0
- ctrlsys-1.0.19/src/SG/sg02cv.c +225 -0
- ctrlsys-1.0.19/src/SG/sg02cw.c +1642 -0
- ctrlsys-1.0.19/src/SG/sg02cx.c +385 -0
- ctrlsys-1.0.19/src/SG/sg02nd.c +583 -0
- ctrlsys-1.0.19/src/SG/sg03ad.c +305 -0
- ctrlsys-1.0.19/src/SG/sg03ax.c +505 -0
- ctrlsys-1.0.19/src/SG/sg03ay.c +544 -0
- ctrlsys-1.0.19/src/SG/sg03bd.c +537 -0
- ctrlsys-1.0.19/src/SG/sg03br.c +127 -0
- ctrlsys-1.0.19/src/SG/sg03bs.c +301 -0
- ctrlsys-1.0.19/src/SG/sg03bt.c +253 -0
- ctrlsys-1.0.19/src/SG/sg03bu.c +376 -0
- ctrlsys-1.0.19/src/SG/sg03bv.c +325 -0
- ctrlsys-1.0.19/src/SG/sg03bw.c +215 -0
- ctrlsys-1.0.19/src/SG/sg03bx.c +652 -0
- ctrlsys-1.0.19/src/SG/sg03by.c +40 -0
- ctrlsys-1.0.19/src/SG/sg03bz.c +453 -0
- ctrlsys-1.0.19/src/TB/.gitkeep +0 -0
- ctrlsys-1.0.19/src/TB/tb01id.c +228 -0
- ctrlsys-1.0.19/src/TB/tb01iz.c +205 -0
- ctrlsys-1.0.19/src/TB/tb01kd.c +127 -0
- ctrlsys-1.0.19/src/TB/tb01kx.c +114 -0
- ctrlsys-1.0.19/src/TB/tb01ld.c +143 -0
- ctrlsys-1.0.19/src/TB/tb01md.c +138 -0
- ctrlsys-1.0.19/src/TB/tb01nd.c +184 -0
- ctrlsys-1.0.19/src/TB/tb01pd.c +135 -0
- ctrlsys-1.0.19/src/TB/tb01px.c +229 -0
- ctrlsys-1.0.19/src/TB/tb01td.c +128 -0
- ctrlsys-1.0.19/src/TB/tb01ty.c +83 -0
- ctrlsys-1.0.19/src/TB/tb01ud.c +206 -0
- ctrlsys-1.0.19/src/TB/tb01ux.c +88 -0
- ctrlsys-1.0.19/src/TB/tb01uy.c +330 -0
- ctrlsys-1.0.19/src/TB/tb01vd.c +250 -0
- ctrlsys-1.0.19/src/TB/tb01vy.c +140 -0
- ctrlsys-1.0.19/src/TB/tb01wd.c +136 -0
- ctrlsys-1.0.19/src/TB/tb01wx.c +179 -0
- ctrlsys-1.0.19/src/TB/tb01xd.c +121 -0
- ctrlsys-1.0.19/src/TB/tb01xz.c +119 -0
- ctrlsys-1.0.19/src/TB/tb01yd.c +62 -0
- ctrlsys-1.0.19/src/TB/tb01zd.c +187 -0
- ctrlsys-1.0.19/src/TB/tb03ad.c +365 -0
- ctrlsys-1.0.19/src/TB/tb03ay.c +101 -0
- ctrlsys-1.0.19/src/TB/tb04ad.c +127 -0
- ctrlsys-1.0.19/src/TB/tb04ay.c +152 -0
- ctrlsys-1.0.19/src/TB/tb04bd.c +267 -0
- ctrlsys-1.0.19/src/TB/tb04bv.c +170 -0
- ctrlsys-1.0.19/src/TB/tb04bw.c +127 -0
- ctrlsys-1.0.19/src/TB/tb04bx.c +84 -0
- ctrlsys-1.0.19/src/TB/tb04cd.c +246 -0
- ctrlsys-1.0.19/src/TB/tb05ad.c +271 -0
- ctrlsys-1.0.19/src/TC/tc01od.c +100 -0
- ctrlsys-1.0.19/src/TC/tc04ad.c +225 -0
- ctrlsys-1.0.19/src/TC/tc05ad.c +169 -0
- ctrlsys-1.0.19/src/TD/td03ad.c +258 -0
- ctrlsys-1.0.19/src/TD/td03ay.c +117 -0
- ctrlsys-1.0.19/src/TD/td04ad.c +178 -0
- ctrlsys-1.0.19/src/TD/td05ad.c +168 -0
- ctrlsys-1.0.19/src/TF/tf01md.c +84 -0
- ctrlsys-1.0.19/src/TF/tf01mx.c +236 -0
- ctrlsys-1.0.19/src/TF/tf01my.c +195 -0
- ctrlsys-1.0.19/src/TF/tf01nd.c +102 -0
- ctrlsys-1.0.19/src/TF/tf01od.c +61 -0
- ctrlsys-1.0.19/src/TF/tf01pd.c +61 -0
- ctrlsys-1.0.19/src/TF/tf01qd.c +73 -0
- ctrlsys-1.0.19/src/TF/tf01rd.c +73 -0
- ctrlsys-1.0.19/src/TG/tg01ad.c +430 -0
- ctrlsys-1.0.19/src/TG/tg01az.c +374 -0
- ctrlsys-1.0.19/src/TG/tg01bd.c +193 -0
- ctrlsys-1.0.19/src/TG/tg01cd.c +102 -0
- ctrlsys-1.0.19/src/TG/tg01dd.c +117 -0
- ctrlsys-1.0.19/src/TG/tg01ed.c +401 -0
- ctrlsys-1.0.19/src/TG/tg01fd.c +338 -0
- ctrlsys-1.0.19/src/TG/tg01fz.c +342 -0
- ctrlsys-1.0.19/src/TG/tg01gd.c +179 -0
- ctrlsys-1.0.19/src/TG/tg01hd.c +149 -0
- ctrlsys-1.0.19/src/TG/tg01hu.c +484 -0
- ctrlsys-1.0.19/src/TG/tg01hx.c +347 -0
- ctrlsys-1.0.19/src/TG/tg01hy.c +551 -0
- ctrlsys-1.0.19/src/TG/tg01id.c +244 -0
- ctrlsys-1.0.19/src/TG/tg01jd.c +299 -0
- ctrlsys-1.0.19/src/TG/tg01jy.c +610 -0
- ctrlsys-1.0.19/src/TG/tg01kd.c +155 -0
- ctrlsys-1.0.19/src/TG/tg01kz.c +156 -0
- ctrlsys-1.0.19/src/TG/tg01ld.c +269 -0
- ctrlsys-1.0.19/src/TG/tg01ly.c +441 -0
- ctrlsys-1.0.19/src/TG/tg01md.c +165 -0
- ctrlsys-1.0.19/src/TG/tg01nd.c +175 -0
- ctrlsys-1.0.19/src/TG/tg01nx.c +124 -0
- ctrlsys-1.0.19/src/TG/tg01oa.c +85 -0
- ctrlsys-1.0.19/src/TG/tg01ob.c +83 -0
- ctrlsys-1.0.19/src/TG/tg01od.c +205 -0
- ctrlsys-1.0.19/src/TG/tg01oz.c +206 -0
- ctrlsys-1.0.19/src/TG/tg01pd.c +195 -0
- ctrlsys-1.0.19/src/TG/tg01qd.c +218 -0
- ctrlsys-1.0.19/src/TG/tg01wd.c +134 -0
- ctrlsys-1.0.19/src/UD/ud01bd.c +45 -0
- ctrlsys-1.0.19/src/UD/ud01cd.c +64 -0
- ctrlsys-1.0.19/src/UD/ud01dd.c +51 -0
- ctrlsys-1.0.19/src/UD/ud01md.c +117 -0
- ctrlsys-1.0.19/src/UD/ud01mz.c +138 -0
- ctrlsys-1.0.19/src/UD/ud01nd.c +130 -0
- ctrlsys-1.0.19/src/UE/ue01md.c +131 -0
- ctrlsys-1.0.19/src/lapack_aux/dgegv.c +408 -0
- ctrlsys-1.0.19/src/lapack_aux/dlatzm.c +35 -0
- ctrlsys-1.0.19/src/lapack_aux/zgegs.c +290 -0
- ctrlsys-1.0.19/src/lapack_aux/zgegv.c +368 -0
- ctrlsys-1.0.19/src/meson.build +640 -0
- ctrlsys-1.0.19/tests/python/conftest.py +49 -0
- ctrlsys-1.0.19/tests/python/data/ib01_html_example_data.npz +0 -0
- ctrlsys-1.0.19/tests/python/data/ib03bd_test_data.npz +0 -0
- ctrlsys-1.0.19/tests/python/debug_mb03lf.py +72 -0
- ctrlsys-1.0.19/tests/python/test_ab01md.py +384 -0
- ctrlsys-1.0.19/tests/python/test_ab01nd.py +555 -0
- ctrlsys-1.0.19/tests/python/test_ab01od.py +501 -0
- ctrlsys-1.0.19/tests/python/test_ab04md.py +381 -0
- ctrlsys-1.0.19/tests/python/test_ab05md.py +440 -0
- ctrlsys-1.0.19/tests/python/test_ab05nd.py +590 -0
- ctrlsys-1.0.19/tests/python/test_ab05od.py +580 -0
- ctrlsys-1.0.19/tests/python/test_ab05pd.py +416 -0
- ctrlsys-1.0.19/tests/python/test_ab05qd.py +406 -0
- ctrlsys-1.0.19/tests/python/test_ab05rd.py +712 -0
- ctrlsys-1.0.19/tests/python/test_ab05sd.py +408 -0
- ctrlsys-1.0.19/tests/python/test_ab07md.py +388 -0
- ctrlsys-1.0.19/tests/python/test_ab07nd.py +375 -0
- ctrlsys-1.0.19/tests/python/test_ab08md.py +411 -0
- ctrlsys-1.0.19/tests/python/test_ab08mz.py +525 -0
- ctrlsys-1.0.19/tests/python/test_ab08nd.py +455 -0
- ctrlsys-1.0.19/tests/python/test_ab08nw.py +488 -0
- ctrlsys-1.0.19/tests/python/test_ab08nx.py +662 -0
- ctrlsys-1.0.19/tests/python/test_ab08ny.py +697 -0
- ctrlsys-1.0.19/tests/python/test_ab08nz.py +536 -0
- ctrlsys-1.0.19/tests/python/test_ab09ad.py +346 -0
- ctrlsys-1.0.19/tests/python/test_ab09ax.py +446 -0
- ctrlsys-1.0.19/tests/python/test_ab09bd.py +427 -0
- ctrlsys-1.0.19/tests/python/test_ab09bx.py +481 -0
- ctrlsys-1.0.19/tests/python/test_ab09cd.py +524 -0
- ctrlsys-1.0.19/tests/python/test_ab09cx.py +451 -0
- ctrlsys-1.0.19/tests/python/test_ab09dd.py +392 -0
- ctrlsys-1.0.19/tests/python/test_ab09ed.py +392 -0
- ctrlsys-1.0.19/tests/python/test_ab09fd.py +355 -0
- ctrlsys-1.0.19/tests/python/test_ab09gd.py +559 -0
- ctrlsys-1.0.19/tests/python/test_ab09hd.py +562 -0
- ctrlsys-1.0.19/tests/python/test_ab09hx.py +806 -0
- ctrlsys-1.0.19/tests/python/test_ab09hy.py +490 -0
- ctrlsys-1.0.19/tests/python/test_ab09id.py +722 -0
- ctrlsys-1.0.19/tests/python/test_ab09ix.py +570 -0
- ctrlsys-1.0.19/tests/python/test_ab09iy.py +783 -0
- ctrlsys-1.0.19/tests/python/test_ab09jd.py +911 -0
- ctrlsys-1.0.19/tests/python/test_ab09jv.py +857 -0
- ctrlsys-1.0.19/tests/python/test_ab09jw.py +799 -0
- ctrlsys-1.0.19/tests/python/test_ab09jx.py +485 -0
- ctrlsys-1.0.19/tests/python/test_ab09kd.py +911 -0
- ctrlsys-1.0.19/tests/python/test_ab09kx.py +874 -0
- ctrlsys-1.0.19/tests/python/test_ab09md.py +515 -0
- ctrlsys-1.0.19/tests/python/test_ab09nd.py +402 -0
- ctrlsys-1.0.19/tests/python/test_ab13ad.py +648 -0
- ctrlsys-1.0.19/tests/python/test_ab13bd.py +212 -0
- ctrlsys-1.0.19/tests/python/test_ab13cd.py +312 -0
- ctrlsys-1.0.19/tests/python/test_ab13dd.py +268 -0
- ctrlsys-1.0.19/tests/python/test_ab13dd_n1.py +73 -0
- ctrlsys-1.0.19/tests/python/test_ab13dx.py +178 -0
- ctrlsys-1.0.19/tests/python/test_ab13ed.py +77 -0
- ctrlsys-1.0.19/tests/python/test_ab13fd.py +245 -0
- ctrlsys-1.0.19/tests/python/test_ab13hd.py +527 -0
- ctrlsys-1.0.19/tests/python/test_ab13id.py +247 -0
- ctrlsys-1.0.19/tests/python/test_ab13md.py +330 -0
- ctrlsys-1.0.19/tests/python/test_ab8nxz.py +338 -0
- ctrlsys-1.0.19/tests/python/test_ag07bd.py +413 -0
- ctrlsys-1.0.19/tests/python/test_ag08bd.py +557 -0
- ctrlsys-1.0.19/tests/python/test_ag08by.py +490 -0
- ctrlsys-1.0.19/tests/python/test_ag08bz.py +382 -0
- ctrlsys-1.0.19/tests/python/test_ag8byz.py +545 -0
- ctrlsys-1.0.19/tests/python/test_bb01ad.py +326 -0
- ctrlsys-1.0.19/tests/python/test_bb02ad.py +426 -0
- ctrlsys-1.0.19/tests/python/test_bb03ad.py +394 -0
- ctrlsys-1.0.19/tests/python/test_bb04ad.py +394 -0
- ctrlsys-1.0.19/tests/python/test_bd01ad.py +616 -0
- ctrlsys-1.0.19/tests/python/test_bd02ad.py +565 -0
- ctrlsys-1.0.19/tests/python/test_de01od.py +273 -0
- ctrlsys-1.0.19/tests/python/test_de01pd.py +341 -0
- ctrlsys-1.0.19/tests/python/test_df01md.py +313 -0
- ctrlsys-1.0.19/tests/python/test_dg01md.py +306 -0
- ctrlsys-1.0.19/tests/python/test_dg01nd.py +316 -0
- ctrlsys-1.0.19/tests/python/test_dg01od.py +416 -0
- ctrlsys-1.0.19/tests/python/test_dgegv.py +298 -0
- ctrlsys-1.0.19/tests/python/test_dk01md.py +249 -0
- ctrlsys-1.0.19/tests/python/test_dlatzm.py +187 -0
- ctrlsys-1.0.19/tests/python/test_fb01qd.py +310 -0
- ctrlsys-1.0.19/tests/python/test_fb01rd.py +484 -0
- ctrlsys-1.0.19/tests/python/test_fb01sd.py +519 -0
- ctrlsys-1.0.19/tests/python/test_fb01td.py +409 -0
- ctrlsys-1.0.19/tests/python/test_fb01vd.py +335 -0
- ctrlsys-1.0.19/tests/python/test_fd01ad.py +408 -0
- ctrlsys-1.0.19/tests/python/test_ib01ad.py +485 -0
- ctrlsys-1.0.19/tests/python/test_ib01bd.py +481 -0
- ctrlsys-1.0.19/tests/python/test_ib01cd.py +498 -0
- ctrlsys-1.0.19/tests/python/test_ib01md.py +557 -0
- ctrlsys-1.0.19/tests/python/test_ib01nd.py +434 -0
- ctrlsys-1.0.19/tests/python/test_ib01od.py +273 -0
- ctrlsys-1.0.19/tests/python/test_ib01oy.py +195 -0
- ctrlsys-1.0.19/tests/python/test_ib01pd.py +442 -0
- ctrlsys-1.0.19/tests/python/test_ib01qd.py +456 -0
- ctrlsys-1.0.19/tests/python/test_ib01rd.py +310 -0
- ctrlsys-1.0.19/tests/python/test_ib03ad.py +449 -0
- ctrlsys-1.0.19/tests/python/test_ib03bd.py +397 -0
- ctrlsys-1.0.19/tests/python/test_ma01ad.py +185 -0
- ctrlsys-1.0.19/tests/python/test_ma01bd.py +327 -0
- ctrlsys-1.0.19/tests/python/test_ma01bz.py +303 -0
- ctrlsys-1.0.19/tests/python/test_ma01cd.py +266 -0
- ctrlsys-1.0.19/tests/python/test_ma01dd.py +311 -0
- ctrlsys-1.0.19/tests/python/test_ma01dz.py +393 -0
- ctrlsys-1.0.19/tests/python/test_ma02ad.py +265 -0
- ctrlsys-1.0.19/tests/python/test_ma02az.py +382 -0
- ctrlsys-1.0.19/tests/python/test_ma02bd.py +209 -0
- ctrlsys-1.0.19/tests/python/test_ma02bz.py +220 -0
- ctrlsys-1.0.19/tests/python/test_ma02cd.py +301 -0
- ctrlsys-1.0.19/tests/python/test_ma02cz.py +372 -0
- ctrlsys-1.0.19/tests/python/test_ma02dd.py +210 -0
- ctrlsys-1.0.19/tests/python/test_ma02ed.py +173 -0
- ctrlsys-1.0.19/tests/python/test_ma02es.py +220 -0
- ctrlsys-1.0.19/tests/python/test_ma02ez.py +541 -0
- ctrlsys-1.0.19/tests/python/test_ma02gd.py +227 -0
- ctrlsys-1.0.19/tests/python/test_ma02gz.py +268 -0
- ctrlsys-1.0.19/tests/python/test_ma02hd.py +328 -0
- ctrlsys-1.0.19/tests/python/test_ma02hz.py +401 -0
- ctrlsys-1.0.19/tests/python/test_ma02iz.py +294 -0
- ctrlsys-1.0.19/tests/python/test_ma02jd.py +239 -0
- ctrlsys-1.0.19/tests/python/test_ma02jz.py +289 -0
- ctrlsys-1.0.19/tests/python/test_ma02md.py +251 -0
- ctrlsys-1.0.19/tests/python/test_ma02mz.py +293 -0
- ctrlsys-1.0.19/tests/python/test_ma02nz.py +441 -0
- ctrlsys-1.0.19/tests/python/test_ma02od.py +202 -0
- ctrlsys-1.0.19/tests/python/test_ma02oz.py +299 -0
- ctrlsys-1.0.19/tests/python/test_ma02pd.py +375 -0
- ctrlsys-1.0.19/tests/python/test_ma02pz.py +428 -0
- ctrlsys-1.0.19/tests/python/test_ma02rd.py +263 -0
- ctrlsys-1.0.19/tests/python/test_ma02sd.py +199 -0
- ctrlsys-1.0.19/tests/python/test_mb01.py +1032 -0
- ctrlsys-1.0.19/tests/python/test_mb01oc.py +449 -0
- ctrlsys-1.0.19/tests/python/test_mb01od.py +504 -0
- ctrlsys-1.0.19/tests/python/test_mb01oe.py +489 -0
- ctrlsys-1.0.19/tests/python/test_mb01oh.py +479 -0
- ctrlsys-1.0.19/tests/python/test_mb01oo.py +324 -0
- ctrlsys-1.0.19/tests/python/test_mb01os.py +297 -0
- ctrlsys-1.0.19/tests/python/test_mb01ot.py +547 -0
- ctrlsys-1.0.19/tests/python/test_mb01pd.py +455 -0
- ctrlsys-1.0.19/tests/python/test_mb01qd.py +162 -0
- ctrlsys-1.0.19/tests/python/test_mb01rb.py +275 -0
- ctrlsys-1.0.19/tests/python/test_mb01rd.py +396 -0
- ctrlsys-1.0.19/tests/python/test_mb01rh.py +521 -0
- ctrlsys-1.0.19/tests/python/test_mb01rt.py +575 -0
- ctrlsys-1.0.19/tests/python/test_mb01ru.py +295 -0
- ctrlsys-1.0.19/tests/python/test_mb01rw.py +293 -0
- ctrlsys-1.0.19/tests/python/test_mb01rx.py +461 -0
- ctrlsys-1.0.19/tests/python/test_mb01ry.py +312 -0
- ctrlsys-1.0.19/tests/python/test_mb01sd.py +245 -0
- ctrlsys-1.0.19/tests/python/test_mb01ss.py +289 -0
- ctrlsys-1.0.19/tests/python/test_mb01td.py +203 -0
- ctrlsys-1.0.19/tests/python/test_mb01ud.py +219 -0
- ctrlsys-1.0.19/tests/python/test_mb01uw.py +372 -0
- ctrlsys-1.0.19/tests/python/test_mb01ux.py +398 -0
- ctrlsys-1.0.19/tests/python/test_mb01uy.py +162 -0
- ctrlsys-1.0.19/tests/python/test_mb01uz.py +359 -0
- ctrlsys-1.0.19/tests/python/test_mb01wd.py +466 -0
- ctrlsys-1.0.19/tests/python/test_mb01xd.py +307 -0
- ctrlsys-1.0.19/tests/python/test_mb01xy.py +262 -0
- ctrlsys-1.0.19/tests/python/test_mb01yd.py +419 -0
- ctrlsys-1.0.19/tests/python/test_mb01zd.py +613 -0
- ctrlsys-1.0.19/tests/python/test_mb02cd.py +356 -0
- ctrlsys-1.0.19/tests/python/test_mb02cu.py +316 -0
- ctrlsys-1.0.19/tests/python/test_mb02cv.py +628 -0
- ctrlsys-1.0.19/tests/python/test_mb02cx.py +226 -0
- ctrlsys-1.0.19/tests/python/test_mb02cy.py +235 -0
- ctrlsys-1.0.19/tests/python/test_mb02dd.py +456 -0
- ctrlsys-1.0.19/tests/python/test_mb02ed.py +247 -0
- ctrlsys-1.0.19/tests/python/test_mb02fd.py +260 -0
- ctrlsys-1.0.19/tests/python/test_mb02gd.py +391 -0
- ctrlsys-1.0.19/tests/python/test_mb02hd.py +361 -0
- ctrlsys-1.0.19/tests/python/test_mb02id.py +385 -0
- ctrlsys-1.0.19/tests/python/test_mb02jd.py +242 -0
- ctrlsys-1.0.19/tests/python/test_mb02jx.py +258 -0
- ctrlsys-1.0.19/tests/python/test_mb02kd.py +386 -0
- ctrlsys-1.0.19/tests/python/test_mb02md.py +251 -0
- ctrlsys-1.0.19/tests/python/test_mb02nd.py +258 -0
- ctrlsys-1.0.19/tests/python/test_mb02ny.py +395 -0
- ctrlsys-1.0.19/tests/python/test_mb02od.py +269 -0
- ctrlsys-1.0.19/tests/python/test_mb02pd.py +335 -0
- ctrlsys-1.0.19/tests/python/test_mb02qd.py +395 -0
- ctrlsys-1.0.19/tests/python/test_mb02rd.py +123 -0
- ctrlsys-1.0.19/tests/python/test_mb02rz.py +291 -0
- ctrlsys-1.0.19/tests/python/test_mb02sd.py +119 -0
- ctrlsys-1.0.19/tests/python/test_mb02sz.py +241 -0
- ctrlsys-1.0.19/tests/python/test_mb02td.py +237 -0
- ctrlsys-1.0.19/tests/python/test_mb02tz.py +283 -0
- ctrlsys-1.0.19/tests/python/test_mb02ud.py +320 -0
- ctrlsys-1.0.19/tests/python/test_mb02uu.py +246 -0
- ctrlsys-1.0.19/tests/python/test_mb02uv.py +241 -0
- ctrlsys-1.0.19/tests/python/test_mb02uw.py +262 -0
- ctrlsys-1.0.19/tests/python/test_mb02vd.py +180 -0
- ctrlsys-1.0.19/tests/python/test_mb02wd.py +94 -0
- ctrlsys-1.0.19/tests/python/test_mb02xd.py +189 -0
- ctrlsys-1.0.19/tests/python/test_mb02yd.py +210 -0
- ctrlsys-1.0.19/tests/python/test_mb03ab.py +345 -0
- ctrlsys-1.0.19/tests/python/test_mb03ad.py +382 -0
- ctrlsys-1.0.19/tests/python/test_mb03ae.py +306 -0
- ctrlsys-1.0.19/tests/python/test_mb03ag.py +387 -0
- ctrlsys-1.0.19/tests/python/test_mb03ah.py +358 -0
- ctrlsys-1.0.19/tests/python/test_mb03ai.py +386 -0
- ctrlsys-1.0.19/tests/python/test_mb03ba.py +230 -0
- ctrlsys-1.0.19/tests/python/test_mb03bc.py +257 -0
- ctrlsys-1.0.19/tests/python/test_mb03bd.py +385 -0
- ctrlsys-1.0.19/tests/python/test_mb03be.py +278 -0
- ctrlsys-1.0.19/tests/python/test_mb03bf.py +324 -0
- ctrlsys-1.0.19/tests/python/test_mb03bg.py +293 -0
- ctrlsys-1.0.19/tests/python/test_mb03bz.py +301 -0
- ctrlsys-1.0.19/tests/python/test_mb03cd.py +461 -0
- ctrlsys-1.0.19/tests/python/test_mb03cz.py +221 -0
- ctrlsys-1.0.19/tests/python/test_mb03dd.py +367 -0
- ctrlsys-1.0.19/tests/python/test_mb03dz.py +237 -0
- ctrlsys-1.0.19/tests/python/test_mb03ed.py +265 -0
- ctrlsys-1.0.19/tests/python/test_mb03fd.py +501 -0
- ctrlsys-1.0.19/tests/python/test_mb03fz.py +346 -0
- ctrlsys-1.0.19/tests/python/test_mb03gd.py +298 -0
- ctrlsys-1.0.19/tests/python/test_mb03gz.py +193 -0
- ctrlsys-1.0.19/tests/python/test_mb03hd.py +236 -0
- ctrlsys-1.0.19/tests/python/test_mb03hz.py +150 -0
- ctrlsys-1.0.19/tests/python/test_mb03id.py +482 -0
- ctrlsys-1.0.19/tests/python/test_mb03iz.py +359 -0
- ctrlsys-1.0.19/tests/python/test_mb03jd.py +320 -0
- ctrlsys-1.0.19/tests/python/test_mb03jp.py +294 -0
- ctrlsys-1.0.19/tests/python/test_mb03jz.py +375 -0
- ctrlsys-1.0.19/tests/python/test_mb03ka.py +483 -0
- ctrlsys-1.0.19/tests/python/test_mb03kb.py +558 -0
- ctrlsys-1.0.19/tests/python/test_mb03kc.py +295 -0
- ctrlsys-1.0.19/tests/python/test_mb03kd.py +542 -0
- ctrlsys-1.0.19/tests/python/test_mb03ke.py +302 -0
- ctrlsys-1.0.19/tests/python/test_mb03ld.py +455 -0
- ctrlsys-1.0.19/tests/python/test_mb03lf.py +375 -0
- ctrlsys-1.0.19/tests/python/test_mb03lp.py +350 -0
- ctrlsys-1.0.19/tests/python/test_mb03lz.py +345 -0
- ctrlsys-1.0.19/tests/python/test_mb03md.py +271 -0
- ctrlsys-1.0.19/tests/python/test_mb03od.py +138 -0
- ctrlsys-1.0.19/tests/python/test_mb03oy.py +202 -0
- ctrlsys-1.0.19/tests/python/test_mb03pd.py +326 -0
- ctrlsys-1.0.19/tests/python/test_mb03py.py +356 -0
- ctrlsys-1.0.19/tests/python/test_mb03qd.py +204 -0
- ctrlsys-1.0.19/tests/python/test_mb03qg.py +286 -0
- ctrlsys-1.0.19/tests/python/test_mb03qv.py +316 -0
- ctrlsys-1.0.19/tests/python/test_mb03qw.py +218 -0
- ctrlsys-1.0.19/tests/python/test_mb03qx.py +216 -0
- ctrlsys-1.0.19/tests/python/test_mb03qy.py +218 -0
- ctrlsys-1.0.19/tests/python/test_mb03rd.py +302 -0
- ctrlsys-1.0.19/tests/python/test_mb03rw.py +260 -0
- ctrlsys-1.0.19/tests/python/test_mb03rx.py +296 -0
- ctrlsys-1.0.19/tests/python/test_mb03ry.py +250 -0
- ctrlsys-1.0.19/tests/python/test_mb03rz.py +406 -0
- ctrlsys-1.0.19/tests/python/test_mb03sd.py +259 -0
- ctrlsys-1.0.19/tests/python/test_mb03td.py +470 -0
- ctrlsys-1.0.19/tests/python/test_mb03ts.py +411 -0
- ctrlsys-1.0.19/tests/python/test_mb03ud.py +277 -0
- ctrlsys-1.0.19/tests/python/test_mb03vd.py +346 -0
- ctrlsys-1.0.19/tests/python/test_mb03vw.py +343 -0
- ctrlsys-1.0.19/tests/python/test_mb03vy.py +323 -0
- ctrlsys-1.0.19/tests/python/test_mb03wa.py +309 -0
- ctrlsys-1.0.19/tests/python/test_mb03wd.py +437 -0
- ctrlsys-1.0.19/tests/python/test_mb03wx.py +391 -0
- ctrlsys-1.0.19/tests/python/test_mb03xd.py +223 -0
- ctrlsys-1.0.19/tests/python/test_mb03xp.py +307 -0
- ctrlsys-1.0.19/tests/python/test_mb03xs.py +467 -0
- ctrlsys-1.0.19/tests/python/test_mb03xu.py +307 -0
- ctrlsys-1.0.19/tests/python/test_mb03xz.py +330 -0
- ctrlsys-1.0.19/tests/python/test_mb03ya.py +220 -0
- ctrlsys-1.0.19/tests/python/test_mb03yd.py +362 -0
- ctrlsys-1.0.19/tests/python/test_mb03yt.py +145 -0
- ctrlsys-1.0.19/tests/python/test_mb03za.py +336 -0
- ctrlsys-1.0.19/tests/python/test_mb03zd.py +417 -0
- ctrlsys-1.0.19/tests/python/test_mb04ad.py +255 -0
- ctrlsys-1.0.19/tests/python/test_mb04az.py +220 -0
- ctrlsys-1.0.19/tests/python/test_mb04bd.py +251 -0
- ctrlsys-1.0.19/tests/python/test_mb04bp.py +244 -0
- ctrlsys-1.0.19/tests/python/test_mb04bz.py +201 -0
- ctrlsys-1.0.19/tests/python/test_mb04cd.py +276 -0
- ctrlsys-1.0.19/tests/python/test_mb04db.py +274 -0
- ctrlsys-1.0.19/tests/python/test_mb04dd.py +134 -0
- ctrlsys-1.0.19/tests/python/test_mb04di.py +268 -0
- ctrlsys-1.0.19/tests/python/test_mb04dl.py +355 -0
- ctrlsys-1.0.19/tests/python/test_mb04dp.py +417 -0
- ctrlsys-1.0.19/tests/python/test_mb04ds.py +305 -0
- ctrlsys-1.0.19/tests/python/test_mb04dy.py +316 -0
- ctrlsys-1.0.19/tests/python/test_mb04dz.py +247 -0
- ctrlsys-1.0.19/tests/python/test_mb04ed.py +307 -0
- ctrlsys-1.0.19/tests/python/test_mb04fd.py +367 -0
- ctrlsys-1.0.19/tests/python/test_mb04fp.py +329 -0
- ctrlsys-1.0.19/tests/python/test_mb04gd.py +287 -0
- ctrlsys-1.0.19/tests/python/test_mb04hd.py +309 -0
- ctrlsys-1.0.19/tests/python/test_mb04id.py +228 -0
- ctrlsys-1.0.19/tests/python/test_mb04iy.py +329 -0
- ctrlsys-1.0.19/tests/python/test_mb04iz.py +331 -0
- ctrlsys-1.0.19/tests/python/test_mb04jd.py +278 -0
- ctrlsys-1.0.19/tests/python/test_mb04kd.py +274 -0
- ctrlsys-1.0.19/tests/python/test_mb04ld.py +255 -0
- ctrlsys-1.0.19/tests/python/test_mb04md.py +256 -0
- ctrlsys-1.0.19/tests/python/test_mb04nd.py +321 -0
- ctrlsys-1.0.19/tests/python/test_mb04ny.py +379 -0
- ctrlsys-1.0.19/tests/python/test_mb04od.py +297 -0
- ctrlsys-1.0.19/tests/python/test_mb04ow.py +258 -0
- ctrlsys-1.0.19/tests/python/test_mb04ox.py +193 -0
- ctrlsys-1.0.19/tests/python/test_mb04oy.py +299 -0
- ctrlsys-1.0.19/tests/python/test_mb04pa.py +268 -0
- ctrlsys-1.0.19/tests/python/test_mb04pb.py +496 -0
- ctrlsys-1.0.19/tests/python/test_mb04pu.py +288 -0
- ctrlsys-1.0.19/tests/python/test_mb04py.py +526 -0
- ctrlsys-1.0.19/tests/python/test_mb04qb.py +193 -0
- ctrlsys-1.0.19/tests/python/test_mb04qc.py +304 -0
- ctrlsys-1.0.19/tests/python/test_mb04qf.py +244 -0
- ctrlsys-1.0.19/tests/python/test_mb04qs.py +266 -0
- ctrlsys-1.0.19/tests/python/test_mb04qu.py +312 -0
- ctrlsys-1.0.19/tests/python/test_mb04rb.py +449 -0
- ctrlsys-1.0.19/tests/python/test_mb04rd.py +406 -0
- ctrlsys-1.0.19/tests/python/test_mb04rs.py +359 -0
- ctrlsys-1.0.19/tests/python/test_mb04rt.py +437 -0
- ctrlsys-1.0.19/tests/python/test_mb04ru.py +325 -0
- ctrlsys-1.0.19/tests/python/test_mb04rv.py +345 -0
- ctrlsys-1.0.19/tests/python/test_mb04rw.py +379 -0
- ctrlsys-1.0.19/tests/python/test_mb04rz.py +451 -0
- ctrlsys-1.0.19/tests/python/test_mb04su.py +280 -0
- ctrlsys-1.0.19/tests/python/test_mb04tb.py +341 -0
- ctrlsys-1.0.19/tests/python/test_mb04ts.py +292 -0
- ctrlsys-1.0.19/tests/python/test_mb04tt.py +417 -0
- ctrlsys-1.0.19/tests/python/test_mb04tu.py +247 -0
- ctrlsys-1.0.19/tests/python/test_mb04tv.py +371 -0
- ctrlsys-1.0.19/tests/python/test_mb04tw.py +473 -0
- ctrlsys-1.0.19/tests/python/test_mb04tx.py +240 -0
- ctrlsys-1.0.19/tests/python/test_mb04ty.py +511 -0
- ctrlsys-1.0.19/tests/python/test_mb04ud.py +336 -0
- ctrlsys-1.0.19/tests/python/test_mb04vd.py +594 -0
- ctrlsys-1.0.19/tests/python/test_mb04vx.py +255 -0
- ctrlsys-1.0.19/tests/python/test_mb04wd.py +396 -0
- ctrlsys-1.0.19/tests/python/test_mb04wp.py +352 -0
- ctrlsys-1.0.19/tests/python/test_mb04wr.py +406 -0
- ctrlsys-1.0.19/tests/python/test_mb04wu.py +312 -0
- ctrlsys-1.0.19/tests/python/test_mb04xd.py +393 -0
- ctrlsys-1.0.19/tests/python/test_mb04xy.py +362 -0
- ctrlsys-1.0.19/tests/python/test_mb04yd.py +455 -0
- ctrlsys-1.0.19/tests/python/test_mb04yw.py +441 -0
- ctrlsys-1.0.19/tests/python/test_mb04zd.py +333 -0
- ctrlsys-1.0.19/tests/python/test_mb05md.py +424 -0
- ctrlsys-1.0.19/tests/python/test_mb05my.py +306 -0
- ctrlsys-1.0.19/tests/python/test_mb05nd.py +260 -0
- ctrlsys-1.0.19/tests/python/test_mb05od.py +294 -0
- ctrlsys-1.0.19/tests/python/test_mb05oy.py +335 -0
- ctrlsys-1.0.19/tests/python/test_mb3jzp.py +419 -0
- ctrlsys-1.0.19/tests/python/test_mb3lzp.py +444 -0
- ctrlsys-1.0.19/tests/python/test_mb3oyz.py +206 -0
- ctrlsys-1.0.19/tests/python/test_mb3pyz.py +227 -0
- ctrlsys-1.0.19/tests/python/test_mb4dbz.py +389 -0
- ctrlsys-1.0.19/tests/python/test_mb4dlz.py +288 -0
- ctrlsys-1.0.19/tests/python/test_mb4dpz.py +278 -0
- ctrlsys-1.0.19/tests/python/test_mc01md.py +334 -0
- ctrlsys-1.0.19/tests/python/test_mc01nd.py +387 -0
- ctrlsys-1.0.19/tests/python/test_mc01od.py +328 -0
- ctrlsys-1.0.19/tests/python/test_mc01pd.py +245 -0
- ctrlsys-1.0.19/tests/python/test_mc01py.py +239 -0
- ctrlsys-1.0.19/tests/python/test_mc01qd.py +238 -0
- ctrlsys-1.0.19/tests/python/test_mc01rd.py +393 -0
- ctrlsys-1.0.19/tests/python/test_mc01sd.py +192 -0
- ctrlsys-1.0.19/tests/python/test_mc01sw.py +114 -0
- ctrlsys-1.0.19/tests/python/test_mc01sx.py +142 -0
- ctrlsys-1.0.19/tests/python/test_mc01sy.py +113 -0
- ctrlsys-1.0.19/tests/python/test_mc01td.py +387 -0
- ctrlsys-1.0.19/tests/python/test_mc01vd.py +240 -0
- ctrlsys-1.0.19/tests/python/test_mc01wd.py +143 -0
- ctrlsys-1.0.19/tests/python/test_mc01xd.py +312 -0
- ctrlsys-1.0.19/tests/python/test_mc03md.py +372 -0
- ctrlsys-1.0.19/tests/python/test_mc03nd.py +263 -0
- ctrlsys-1.0.19/tests/python/test_mc03nx.py +193 -0
- ctrlsys-1.0.19/tests/python/test_mc03ny.py +243 -0
- ctrlsys-1.0.19/tests/python/test_md03ba.py +158 -0
- ctrlsys-1.0.19/tests/python/test_md03bb.py +201 -0
- ctrlsys-1.0.19/tests/python/test_md03bd.py +135 -0
- ctrlsys-1.0.19/tests/python/test_md03bf.py +179 -0
- ctrlsys-1.0.19/tests/python/test_md03by.py +282 -0
- ctrlsys-1.0.19/tests/python/test_nf01ay.py +166 -0
- ctrlsys-1.0.19/tests/python/test_nf01br.py +288 -0
- ctrlsys-1.0.19/tests/python/test_nf01bs.py +254 -0
- ctrlsys-1.0.19/tests/python/test_nf01by.py +253 -0
- ctrlsys-1.0.19/tests/python/test_sb01bd.py +467 -0
- ctrlsys-1.0.19/tests/python/test_sb01bx.py +194 -0
- ctrlsys-1.0.19/tests/python/test_sb01by.py +281 -0
- ctrlsys-1.0.19/tests/python/test_sb01dd.py +241 -0
- ctrlsys-1.0.19/tests/python/test_sb01fy.py +224 -0
- ctrlsys-1.0.19/tests/python/test_sb01md.py +414 -0
- ctrlsys-1.0.19/tests/python/test_sb02cx.py +166 -0
- ctrlsys-1.0.19/tests/python/test_sb02md.py +578 -0
- ctrlsys-1.0.19/tests/python/test_sb02mr.py +141 -0
- ctrlsys-1.0.19/tests/python/test_sb02ms.py +188 -0
- ctrlsys-1.0.19/tests/python/test_sb02mt.py +371 -0
- ctrlsys-1.0.19/tests/python/test_sb02mu.py +388 -0
- ctrlsys-1.0.19/tests/python/test_sb02mv.py +141 -0
- ctrlsys-1.0.19/tests/python/test_sb02mw.py +188 -0
- ctrlsys-1.0.19/tests/python/test_sb02mx.py +455 -0
- ctrlsys-1.0.19/tests/python/test_sb02nd.py +507 -0
- ctrlsys-1.0.19/tests/python/test_sb02od.py +653 -0
- ctrlsys-1.0.19/tests/python/test_sb02ou.py +134 -0
- ctrlsys-1.0.19/tests/python/test_sb02ov.py +156 -0
- ctrlsys-1.0.19/tests/python/test_sb02ow.py +161 -0
- ctrlsys-1.0.19/tests/python/test_sb02ox.py +208 -0
- ctrlsys-1.0.19/tests/python/test_sb02oy.py +593 -0
- ctrlsys-1.0.19/tests/python/test_sb02pd.py +297 -0
- ctrlsys-1.0.19/tests/python/test_sb02qd.py +361 -0
- ctrlsys-1.0.19/tests/python/test_sb02rd.py +844 -0
- ctrlsys-1.0.19/tests/python/test_sb02ru.py +328 -0
- ctrlsys-1.0.19/tests/python/test_sb02sd.py +293 -0
- ctrlsys-1.0.19/tests/python/test_sb03md.py +611 -0
- ctrlsys-1.0.19/tests/python/test_sb03mu.py +327 -0
- ctrlsys-1.0.19/tests/python/test_sb03mv.py +236 -0
- ctrlsys-1.0.19/tests/python/test_sb03mw.py +109 -0
- ctrlsys-1.0.19/tests/python/test_sb03mx.py +194 -0
- ctrlsys-1.0.19/tests/python/test_sb03my.py +217 -0
- ctrlsys-1.0.19/tests/python/test_sb03od.py +360 -0
- ctrlsys-1.0.19/tests/python/test_sb03or.py +294 -0
- ctrlsys-1.0.19/tests/python/test_sb03os.py +416 -0
- ctrlsys-1.0.19/tests/python/test_sb03ot.py +494 -0
- ctrlsys-1.0.19/tests/python/test_sb03ou.py +199 -0
- ctrlsys-1.0.19/tests/python/test_sb03ov.py +186 -0
- ctrlsys-1.0.19/tests/python/test_sb03oy.py +270 -0
- ctrlsys-1.0.19/tests/python/test_sb03oz.py +449 -0
- ctrlsys-1.0.19/tests/python/test_sb03pd.py +291 -0
- ctrlsys-1.0.19/tests/python/test_sb03qd.py +380 -0
- ctrlsys-1.0.19/tests/python/test_sb03qx.py +322 -0
- ctrlsys-1.0.19/tests/python/test_sb03qy.py +293 -0
- ctrlsys-1.0.19/tests/python/test_sb03rd.py +379 -0
- ctrlsys-1.0.19/tests/python/test_sb03sd.py +376 -0
- ctrlsys-1.0.19/tests/python/test_sb03sx.py +200 -0
- ctrlsys-1.0.19/tests/python/test_sb03sy.py +231 -0
- ctrlsys-1.0.19/tests/python/test_sb03td.py +348 -0
- ctrlsys-1.0.19/tests/python/test_sb03ud.py +291 -0
- ctrlsys-1.0.19/tests/python/test_sb04md.py +224 -0
- ctrlsys-1.0.19/tests/python/test_sb04mr.py +145 -0
- ctrlsys-1.0.19/tests/python/test_sb04mw.py +117 -0
- ctrlsys-1.0.19/tests/python/test_sb04nd.py +279 -0
- ctrlsys-1.0.19/tests/python/test_sb04nv.py +237 -0
- ctrlsys-1.0.19/tests/python/test_sb04nw.py +261 -0
- ctrlsys-1.0.19/tests/python/test_sb04nx.py +361 -0
- ctrlsys-1.0.19/tests/python/test_sb04ny.py +395 -0
- ctrlsys-1.0.19/tests/python/test_sb04od.py +428 -0
- ctrlsys-1.0.19/tests/python/test_sb04ow.py +376 -0
- ctrlsys-1.0.19/tests/python/test_sb04pd.py +359 -0
- ctrlsys-1.0.19/tests/python/test_sb04px.py +256 -0
- ctrlsys-1.0.19/tests/python/test_sb04py.py +482 -0
- ctrlsys-1.0.19/tests/python/test_sb04qd.py +224 -0
- ctrlsys-1.0.19/tests/python/test_sb04qr.py +123 -0
- ctrlsys-1.0.19/tests/python/test_sb04rd.py +307 -0
- ctrlsys-1.0.19/tests/python/test_sb04rv.py +308 -0
- ctrlsys-1.0.19/tests/python/test_sb04rw.py +264 -0
- ctrlsys-1.0.19/tests/python/test_sb04rx.py +367 -0
- ctrlsys-1.0.19/tests/python/test_sb04ry.py +297 -0
- ctrlsys-1.0.19/tests/python/test_sb06nd.py +244 -0
- ctrlsys-1.0.19/tests/python/test_sb08cd.py +200 -0
- ctrlsys-1.0.19/tests/python/test_sb08dd.py +186 -0
- ctrlsys-1.0.19/tests/python/test_sb08ed.py +369 -0
- ctrlsys-1.0.19/tests/python/test_sb08fd.py +277 -0
- ctrlsys-1.0.19/tests/python/test_sb08gd.py +338 -0
- ctrlsys-1.0.19/tests/python/test_sb08hd.py +287 -0
- ctrlsys-1.0.19/tests/python/test_sb08md.py +190 -0
- ctrlsys-1.0.19/tests/python/test_sb08my.py +186 -0
- ctrlsys-1.0.19/tests/python/test_sb08nd.py +208 -0
- ctrlsys-1.0.19/tests/python/test_sb08ny.py +206 -0
- ctrlsys-1.0.19/tests/python/test_sb09md.py +308 -0
- ctrlsys-1.0.19/tests/python/test_sb10ad.py +325 -0
- ctrlsys-1.0.19/tests/python/test_sb10dd.py +507 -0
- ctrlsys-1.0.19/tests/python/test_sb10ed.py +505 -0
- ctrlsys-1.0.19/tests/python/test_sb10fd.py +386 -0
- ctrlsys-1.0.19/tests/python/test_sb10hd.py +358 -0
- ctrlsys-1.0.19/tests/python/test_sb10id.py +326 -0
- ctrlsys-1.0.19/tests/python/test_sb10jd.py +449 -0
- ctrlsys-1.0.19/tests/python/test_sb10kd.py +295 -0
- ctrlsys-1.0.19/tests/python/test_sb10ld.py +209 -0
- ctrlsys-1.0.19/tests/python/test_sb10md.py +326 -0
- ctrlsys-1.0.19/tests/python/test_sb10pd.py +533 -0
- ctrlsys-1.0.19/tests/python/test_sb10rd.py +217 -0
- ctrlsys-1.0.19/tests/python/test_sb10sd.py +539 -0
- ctrlsys-1.0.19/tests/python/test_sb10td.py +335 -0
- ctrlsys-1.0.19/tests/python/test_sb10ud.py +372 -0
- ctrlsys-1.0.19/tests/python/test_sb10vd.py +241 -0
- ctrlsys-1.0.19/tests/python/test_sb10wd.py +410 -0
- ctrlsys-1.0.19/tests/python/test_sb10yd.py +248 -0
- ctrlsys-1.0.19/tests/python/test_sb10zd.py +322 -0
- ctrlsys-1.0.19/tests/python/test_sb10zp.py +149 -0
- ctrlsys-1.0.19/tests/python/test_sb16ad.py +509 -0
- ctrlsys-1.0.19/tests/python/test_sb16ay.py +280 -0
- ctrlsys-1.0.19/tests/python/test_sb16bd.py +449 -0
- ctrlsys-1.0.19/tests/python/test_sb16cd.py +612 -0
- ctrlsys-1.0.19/tests/python/test_sb16cy.py +354 -0
- ctrlsys-1.0.19/tests/python/test_sg02ad.py +428 -0
- ctrlsys-1.0.19/tests/python/test_sg02cv.py +387 -0
- ctrlsys-1.0.19/tests/python/test_sg02cw.py +761 -0
- ctrlsys-1.0.19/tests/python/test_sg02cx.py +592 -0
- ctrlsys-1.0.19/tests/python/test_sg02nd.py +337 -0
- ctrlsys-1.0.19/tests/python/test_sg03ad.py +625 -0
- ctrlsys-1.0.19/tests/python/test_sg03ax.py +255 -0
- ctrlsys-1.0.19/tests/python/test_sg03ay.py +200 -0
- ctrlsys-1.0.19/tests/python/test_sg03bd.py +218 -0
- ctrlsys-1.0.19/tests/python/test_sg03br.py +120 -0
- ctrlsys-1.0.19/tests/python/test_sg03bs.py +303 -0
- ctrlsys-1.0.19/tests/python/test_sg03bt.py +298 -0
- ctrlsys-1.0.19/tests/python/test_sg03bu.py +273 -0
- ctrlsys-1.0.19/tests/python/test_sg03bv.py +306 -0
- ctrlsys-1.0.19/tests/python/test_sg03bw.py +268 -0
- ctrlsys-1.0.19/tests/python/test_sg03bx.py +275 -0
- ctrlsys-1.0.19/tests/python/test_sg03by.py +252 -0
- ctrlsys-1.0.19/tests/python/test_sg03bz.py +662 -0
- ctrlsys-1.0.19/tests/python/test_tb01id.py +471 -0
- ctrlsys-1.0.19/tests/python/test_tb01iz.py +409 -0
- ctrlsys-1.0.19/tests/python/test_tb01kd.py +377 -0
- ctrlsys-1.0.19/tests/python/test_tb01kx.py +385 -0
- ctrlsys-1.0.19/tests/python/test_tb01ld.py +282 -0
- ctrlsys-1.0.19/tests/python/test_tb01md.py +280 -0
- ctrlsys-1.0.19/tests/python/test_tb01nd.py +328 -0
- ctrlsys-1.0.19/tests/python/test_tb01pd.py +485 -0
- ctrlsys-1.0.19/tests/python/test_tb01px.py +517 -0
- ctrlsys-1.0.19/tests/python/test_tb01td.py +276 -0
- ctrlsys-1.0.19/tests/python/test_tb01ty.py +410 -0
- ctrlsys-1.0.19/tests/python/test_tb01ud.py +414 -0
- ctrlsys-1.0.19/tests/python/test_tb01ux.py +333 -0
- ctrlsys-1.0.19/tests/python/test_tb01uy.py +445 -0
- ctrlsys-1.0.19/tests/python/test_tb01vd.py +415 -0
- ctrlsys-1.0.19/tests/python/test_tb01vy.py +359 -0
- ctrlsys-1.0.19/tests/python/test_tb01wd.py +201 -0
- ctrlsys-1.0.19/tests/python/test_tb01wx.py +465 -0
- ctrlsys-1.0.19/tests/python/test_tb01xd.py +508 -0
- ctrlsys-1.0.19/tests/python/test_tb01xz.py +591 -0
- ctrlsys-1.0.19/tests/python/test_tb01zd.py +291 -0
- ctrlsys-1.0.19/tests/python/test_tb03ad.py +455 -0
- ctrlsys-1.0.19/tests/python/test_tb03ay.py +446 -0
- ctrlsys-1.0.19/tests/python/test_tb04ad.py +372 -0
- ctrlsys-1.0.19/tests/python/test_tb04bd.py +365 -0
- ctrlsys-1.0.19/tests/python/test_tb04bv.py +374 -0
- ctrlsys-1.0.19/tests/python/test_tb04bw.py +374 -0
- ctrlsys-1.0.19/tests/python/test_tb04bx.py +320 -0
- ctrlsys-1.0.19/tests/python/test_tb04cd.py +314 -0
- ctrlsys-1.0.19/tests/python/test_tb05ad.py +366 -0
- ctrlsys-1.0.19/tests/python/test_tc01od.py +257 -0
- ctrlsys-1.0.19/tests/python/test_tc04ad.py +318 -0
- ctrlsys-1.0.19/tests/python/test_tc05ad.py +407 -0
- ctrlsys-1.0.19/tests/python/test_td03ad.py +475 -0
- ctrlsys-1.0.19/tests/python/test_td03ay.py +315 -0
- ctrlsys-1.0.19/tests/python/test_td04ad.py +450 -0
- ctrlsys-1.0.19/tests/python/test_td05ad.py +416 -0
- ctrlsys-1.0.19/tests/python/test_tf01md.py +235 -0
- ctrlsys-1.0.19/tests/python/test_tf01mx.py +417 -0
- ctrlsys-1.0.19/tests/python/test_tf01my.py +384 -0
- ctrlsys-1.0.19/tests/python/test_tf01nd.py +317 -0
- ctrlsys-1.0.19/tests/python/test_tf01od.py +196 -0
- ctrlsys-1.0.19/tests/python/test_tf01pd.py +257 -0
- ctrlsys-1.0.19/tests/python/test_tf01qd.py +343 -0
- ctrlsys-1.0.19/tests/python/test_tf01rd.py +343 -0
- ctrlsys-1.0.19/tests/python/test_tg01ad.py +401 -0
- ctrlsys-1.0.19/tests/python/test_tg01az.py +450 -0
- ctrlsys-1.0.19/tests/python/test_tg01bd.py +244 -0
- ctrlsys-1.0.19/tests/python/test_tg01cd.py +316 -0
- ctrlsys-1.0.19/tests/python/test_tg01dd.py +339 -0
- ctrlsys-1.0.19/tests/python/test_tg01ed.py +525 -0
- ctrlsys-1.0.19/tests/python/test_tg01fd.py +264 -0
- ctrlsys-1.0.19/tests/python/test_tg01fz.py +298 -0
- ctrlsys-1.0.19/tests/python/test_tg01gd.py +383 -0
- ctrlsys-1.0.19/tests/python/test_tg01hd.py +407 -0
- ctrlsys-1.0.19/tests/python/test_tg01hu.py +458 -0
- ctrlsys-1.0.19/tests/python/test_tg01hx.py +406 -0
- ctrlsys-1.0.19/tests/python/test_tg01hy.py +481 -0
- ctrlsys-1.0.19/tests/python/test_tg01id.py +434 -0
- ctrlsys-1.0.19/tests/python/test_tg01jd.py +416 -0
- ctrlsys-1.0.19/tests/python/test_tg01jy.py +538 -0
- ctrlsys-1.0.19/tests/python/test_tg01kd.py +340 -0
- ctrlsys-1.0.19/tests/python/test_tg01kz.py +428 -0
- ctrlsys-1.0.19/tests/python/test_tg01ld.py +338 -0
- ctrlsys-1.0.19/tests/python/test_tg01ly.py +364 -0
- ctrlsys-1.0.19/tests/python/test_tg01md.py +275 -0
- ctrlsys-1.0.19/tests/python/test_tg01nd.py +421 -0
- ctrlsys-1.0.19/tests/python/test_tg01nx.py +484 -0
- ctrlsys-1.0.19/tests/python/test_tg01oa.py +228 -0
- ctrlsys-1.0.19/tests/python/test_tg01ob.py +359 -0
- ctrlsys-1.0.19/tests/python/test_tg01od.py +355 -0
- ctrlsys-1.0.19/tests/python/test_tg01oz.py +398 -0
- ctrlsys-1.0.19/tests/python/test_tg01pd.py +462 -0
- ctrlsys-1.0.19/tests/python/test_tg01qd.py +458 -0
- ctrlsys-1.0.19/tests/python/test_tg01wd.py +395 -0
- ctrlsys-1.0.19/tests/python/test_ud01bd.py +213 -0
- ctrlsys-1.0.19/tests/python/test_ud01cd.py +288 -0
- ctrlsys-1.0.19/tests/python/test_ud01dd.py +269 -0
- ctrlsys-1.0.19/tests/python/test_ud01md.py +279 -0
- ctrlsys-1.0.19/tests/python/test_ud01mz.py +279 -0
- ctrlsys-1.0.19/tests/python/test_ud01nd.py +354 -0
- ctrlsys-1.0.19/tests/python/test_ue01md.py +273 -0
- ctrlsys-1.0.19/tests/python/test_zgegs.py +267 -0
- ctrlsys-1.0.19/tests/python/test_zgegv.py +290 -0
- ctrlsys-1.0.19/tools/extract_examples.py +323 -0
- ctrlsys-1.0.19/tools/generate_docstrings.py +102 -0
- ctrlsys-1.0.19/uv.lock +715 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: always_on
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
C11 translation of SLICOT (Subroutine Library In Control Theory) from Fortran77.
|
|
6
|
+
|
|
7
|
+
**Source of truth:** See `/CLAUDE.md` for complete instructions.
|
|
8
|
+
|
|
9
|
+
**Reference:** `SLICOT-Reference/src/` (Fortran77), `SLICOT-Reference/doc/` (HTML docs)
|
|
10
|
+
|
|
11
|
+
## Quick Commands (macOS)
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Setup
|
|
15
|
+
uv venv && uv pip install ".[test]"
|
|
16
|
+
|
|
17
|
+
# Build & test
|
|
18
|
+
cmake --preset macos-arm64-debug
|
|
19
|
+
cmake --build --preset macos-arm64-debug-build
|
|
20
|
+
uv pip install .
|
|
21
|
+
.venv/bin/pytest tests/python/ -v
|
|
22
|
+
|
|
23
|
+
# Clean rebuild
|
|
24
|
+
rm -rf build/macos-arm64-debug && cmake --preset macos-arm64-debug && cmake --build --preset macos-arm64-debug-build && uv pip install .
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Memory Debugging
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# ASAN via Docker (required before PR)
|
|
31
|
+
./scripts/run_asan_docker.sh # full suite
|
|
32
|
+
./scripts/run_asan_docker.sh tests/python/test_x.py -v # single file
|
|
33
|
+
|
|
34
|
+
# macOS quick checks (assumes venv active)
|
|
35
|
+
MallocScribble=1 pytest tests/python/ -v # use-after-free
|
|
36
|
+
DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib pytest tests/python/test_x.py -v # overflow
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Translation Workflow
|
|
40
|
+
|
|
41
|
+
> [!NOTE]
|
|
42
|
+
> See `/.agent/workflows/translate_slicot_routine.md` for the step-by-step TDD process.
|
|
43
|
+
|
|
44
|
+
**Check deps:** `python3 tools/extract_dependencies.py SLICOT-Reference/src/ ROUTINE_NAME`
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Translate a SLICOT Fortran routine to C following strict TDD and memory safety guidelines.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
1. **Parse Documentation**
|
|
6
|
+
- Follow the workflow: `.agent/workflows/parse_slicot_documentation.md`
|
|
7
|
+
- **Goal**: Understand the routine's purpose, inputs, outputs, and algorithm.
|
|
8
|
+
|
|
9
|
+
2. **Analyze Dependencies**
|
|
10
|
+
- Follow the workflow: `.agent/workflows/analyze_slicot_dependencies.md`
|
|
11
|
+
- **Goal**: Ensure the routine is ready for translation (Level 0 or all dependencies met).
|
|
12
|
+
|
|
13
|
+
3. **Extract Test Data (RED Phase)**
|
|
14
|
+
- Follow the workflow: `.agent/workflows/extract_slicot_test_data.md`
|
|
15
|
+
- **Goal**: Create accurate test data (NPZ or inline) with correct column/row-major parsing.
|
|
16
|
+
|
|
17
|
+
4. **Write Tests (RED Phase)**
|
|
18
|
+
- Create `tests/python/test_[routine].py`.
|
|
19
|
+
- **Requirements**:
|
|
20
|
+
- `np.random.seed(N)` for ANY random data.
|
|
21
|
+
- Validate actual numerical values (not just shapes).
|
|
22
|
+
- Mathematical property tests (e.g. eigenvalue preservation, residual checks).
|
|
23
|
+
- Minimum 3 tests: Basic, Edge Case, Error Handling.
|
|
24
|
+
- Run `pytest tests/python/test_[routine].py` and confirm it FAILS.
|
|
25
|
+
|
|
26
|
+
5. **Implement C Code (GREEN Phase)**
|
|
27
|
+
- Create `src/[XX]/[routine].c` (lowercase).
|
|
28
|
+
- **Checklist**:
|
|
29
|
+
- [ ] Includes: `slicot.h` and `slicot_blas.h`.
|
|
30
|
+
- [ ] Use `SLC_*` macros for BLAS/LAPACK.
|
|
31
|
+
- [ ] Verify **Critical Patterns** (Types, Indexing, Memory) in `.agent/rules/slicot-fortran-c11-translator.md`.
|
|
32
|
+
- [ ] Bounds check ALL array accesses.
|
|
33
|
+
- [ ] Validate 1-based to 0-based index conversions.
|
|
34
|
+
- Update `src/CMakeLists.txt` to include the new file.
|
|
35
|
+
- Update `include/slicot.h` with the function declaration and Doxygen comments.
|
|
36
|
+
- Update `python/slicot_module.c` to wrap the function.
|
|
37
|
+
- Update `python/slicot/__init__.py` to export it.
|
|
38
|
+
|
|
39
|
+
6. **Build and Verify (GREEN Phase)**
|
|
40
|
+
- Run `cmake --build --preset linux-x64-debug-build`.
|
|
41
|
+
- Run `uv pip install .`.
|
|
42
|
+
- Run `.venv/bin/pytest tests/python/test_[routine].py`.
|
|
43
|
+
- Ensure all tests PASS.
|
|
44
|
+
|
|
45
|
+
7. **Refactor and Finalize**
|
|
46
|
+
- Clean up code, remove debug prints.
|
|
47
|
+
- Ensure no double-free issues in Python wrappers.
|
|
48
|
+
- Run full test suite: `pytest tests/python/`.
|
ctrlsys-1.0.19/.clangd
ADDED
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slicot-fortran-translator
|
|
3
|
+
description: Use this agent when the user needs to translate SLICOT Fortran77 routines to C11, implement new SLICOT functions, or work with SLICOT test cases. Examples:\n\n<example>\nContext: User wants to translate the AB01MD routine from Fortran to C.\nuser: "I need to implement AB01MD from the SLICOT library"\nassistant: "I'll use the slicot-fortran-translator agent to handle this translation following the TDD workflow."\n<commentary>The user is requesting SLICOT routine implementation, which requires the specialized translation workflow including parsing Fortran source, extracting test data, and following RED-GREEN-REFACTOR-VERIFY pattern.</commentary>\n</example>\n\n<example>\nContext: User has just completed some work and mentions SLICOT routine translation.\nuser: "Can you help translate MB03OY to C?"\nassistant: "I'm going to use the slicot-fortran-translator agent to translate MB03OY following the strict TDD workflow."\n<commentary>SLICOT translation request requires the specialized agent to ensure proper test-first development, dependency analysis, and memory-safe C11 implementation.</commentary>\n</example>\n\n<example>\nContext: User is working on SLICOT codebase and needs dependency analysis.\nuser: "What are the dependencies for implementing SB04MD?"\nassistant: "Let me use the slicot-fortran-translator agent to analyze SB04MD dependencies and plan the implementation."\n<commentary>Dependency analysis is part of the RED phase in SLICOT translation workflow, requiring the specialized agent's knowledge of dependency extraction tools.</commentary>\n</example>
|
|
4
|
+
model: opus
|
|
5
|
+
color: green
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are an elite Fortran-to-C translation specialist with deep expertise in numerical computing, memory safety, and the SLICOT control theory library. Your mission is to produce production-grade C11 implementations that are memory-safe, performant, and fully tested.
|
|
9
|
+
|
|
10
|
+
## Operating Principles
|
|
11
|
+
|
|
12
|
+
1. **TDD is Non-Negotiable**: Always follow RED → GREEN → REFACTOR → VERIFY. Never write implementation code before tests exist and fail.
|
|
13
|
+
|
|
14
|
+
2. **Complete Implementation**: Handle entire TDD cycle yourself - write tests, implement code, iterate until passing.
|
|
15
|
+
|
|
16
|
+
3. **Numerical Library Standards (NO TOLERANCE FOR ERRORS)**:
|
|
17
|
+
- **NEVER test only shapes** - always validate actual numerical values
|
|
18
|
+
- **ALL random data must use `np.random.seed(N)`** with documented seed for cross-platform reproducibility
|
|
19
|
+
- **Mathematical property tests are REQUIRED** - validate invariants (eigenvalue preservation, state equations, etc.)
|
|
20
|
+
- **Appropriate tolerances**: `rtol=1e-14` for exact math, algorithm-specific for iterative methods
|
|
21
|
+
- Tests must be deterministic and reproducible across all platforms
|
|
22
|
+
|
|
23
|
+
4. **Memory Safety First**: Every array access must be bounds-checked. Every allocation must have corresponding cleanup. Index conversions from 1-based (Fortran) to 0-based (C) must be validated.
|
|
24
|
+
|
|
25
|
+
5. **Performance Matters**: Use column-major storage. Never copy data unnecessarily. Leverage BLAS/LAPACK directly via `SLC_*` wrappers.
|
|
26
|
+
|
|
27
|
+
6. **Documentation is Code**: Extract precise requirements from HTML docs using `/skill slicot-knowledge`. Test data must come from authoritative sources in priority order: HTML docs, examples, benchmark data, then synthetic (with approval).
|
|
28
|
+
|
|
29
|
+
7. **Large File Awareness**: Never read entire files > 500 lines. Use targeted strategies:
|
|
30
|
+
- Wrapper files (`py_*.c`, up to 8000+ lines): `tail -30` to see end, then append
|
|
31
|
+
- Header files (`*.h`, up to 1400+ lines): `tail -40` to see end, insert before `#endif`
|
|
32
|
+
- Use `grep -n` to find insertion points
|
|
33
|
+
- Files < 400 lines (module.c, wrappers.h, docstrings.json, __init__.py, CMakeLists.txt): OK to read fully
|
|
34
|
+
|
|
35
|
+
## Workflow Execution
|
|
36
|
+
|
|
37
|
+
### Issue Tracking Integration
|
|
38
|
+
|
|
39
|
+
Use `bd` (beads) for ALL tracking - **NEVER use TodoWrite for future work**.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Before starting - check for existing issue or create one
|
|
43
|
+
bd ready --json # Check ready work queue
|
|
44
|
+
bd create --title="[ROUTINE] to C" --type=task --priority=2 --json
|
|
45
|
+
|
|
46
|
+
# When starting work
|
|
47
|
+
bd update <id> --status in_progress --json
|
|
48
|
+
|
|
49
|
+
# When complete (after VERIFY phase passes)
|
|
50
|
+
bd close <id> --reason "[ROUTINE] translated with N passing tests" --json
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Discovered Work During Translation** - Create beads issues immediately:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Technical debt found (e.g., missing bounds check in dependency)
|
|
57
|
+
bd create --title="[ROUTINE] missing bounds check on IPIV" --type=bug --priority=2 --json
|
|
58
|
+
|
|
59
|
+
# Future enhancement opportunity
|
|
60
|
+
bd create --title="Optimize [ROUTINE] BLAS calls" --type=task --priority=3 --json
|
|
61
|
+
|
|
62
|
+
# Dependency needed
|
|
63
|
+
bd create --title="[DEP_ROUTINE] to C (blocks [ROUTINE])" --type=task --priority=2 --json
|
|
64
|
+
bd dep add <new-id> <current-id> # Mark dependency relationship
|
|
65
|
+
|
|
66
|
+
# Update existing issue with findings
|
|
67
|
+
bd update <existing-id> --description="Additional context: found X during Y translation" --json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**When to Create Issues:**
|
|
71
|
+
- Bug: Memory safety issue, incorrect output, missing validation
|
|
72
|
+
- Task: Missing dependency, refactoring opportunity, optimization candidate
|
|
73
|
+
- Feature: New capability needed, API improvement
|
|
74
|
+
|
|
75
|
+
**Do NOT:**
|
|
76
|
+
- Use TodoWrite for anything beyond current session execution
|
|
77
|
+
- Create todos for future work - use `bd create` instead
|
|
78
|
+
- Leave discovered issues undocumented - capture in beads immediately
|
|
79
|
+
|
|
80
|
+
**Do NOT commit after each TDD phase.** Complete entire RED→GREEN→REFACTOR→VERIFY cycle, then make a single commit with the completed work.
|
|
81
|
+
|
|
82
|
+
### Platform Detection (run once at start)
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Detect platform and set preset
|
|
86
|
+
uname -s # Darwin = macOS, Linux = Linux
|
|
87
|
+
# Use: macos-arm64-debug-build (macOS) or linux-x64-debug-build (Linux)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Phase 1: RED (Test First)
|
|
91
|
+
|
|
92
|
+
1. **Parse Documentation**: Use `/skill slicot-knowledge` to extract routine specifications, parameters, and example data from `SLICOT-Reference/doc/[ROUTINE].html`
|
|
93
|
+
|
|
94
|
+
2. **Analyze Dependencies**: Run `python3 tools/extract_dependencies.py SLICOT-Reference/src/ [ROUTINE]` to identify dependency level and required subroutines
|
|
95
|
+
|
|
96
|
+
3. **Extract Test Data** (priority order):
|
|
97
|
+
- HTML doc examples (parse with skill)
|
|
98
|
+
- `SLICOT-Reference/examples/T[ROUTINE].f` + data files
|
|
99
|
+
- `SLICOT-Reference/benchmark_data/` files
|
|
100
|
+
- Python control/scipy packages (generate valid test data, then extract to hardcoded values)
|
|
101
|
+
- Synthetic NumPy data (only with explicit approval)
|
|
102
|
+
|
|
103
|
+
**CRITICAL - Test Dependencies**: Tests must NOT depend on control, scipy, or other external packages (except NumPy).
|
|
104
|
+
|
|
105
|
+
**Test Data Storage Strategy** (threshold: ≥50 values or >10 lines):
|
|
106
|
+
| Data Size | Storage | Example |
|
|
107
|
+
|-----------|---------|---------|
|
|
108
|
+
| Small (<50 values) | Inline `np.array([...])` | 3x3 matrix |
|
|
109
|
+
| Large (≥50 values) | NPZ file `tests/python/data/` | 1000-sample time series |
|
|
110
|
+
| Shared between tests | ALWAYS NPZ | IB01AD/IB01BD share I/O data |
|
|
111
|
+
|
|
112
|
+
**Goal**: Test files <400 lines. If embedded data makes file >500 lines, extract to NPZ:
|
|
113
|
+
```python
|
|
114
|
+
# Save (one-time): np.savez('tests/python/data/routine_test_data.npz', u=u, y=y)
|
|
115
|
+
# Load: data = np.load(os.path.join(os.path.dirname(__file__), 'data', 'routine_test_data.npz'))
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Using Python Control/SciPy for Data Generation**: When authoritative examples unavailable, use temporary Python script to generate test data, then hardcode values in tests:
|
|
119
|
+
|
|
120
|
+
**Step 1 - Create temporary generation script** (e.g., `temp_gen_[routine]_data.py`):
|
|
121
|
+
```python
|
|
122
|
+
import control as ct
|
|
123
|
+
import scipy.linalg
|
|
124
|
+
import numpy as np
|
|
125
|
+
|
|
126
|
+
# Generate stable random system
|
|
127
|
+
sys = ct.rss(states=4, outputs=2, inputs=1)
|
|
128
|
+
A, B, C, D = sys.A, sys.B, sys.C, sys.D
|
|
129
|
+
|
|
130
|
+
# Or create specific state-space system
|
|
131
|
+
A = np.array([[...]], order='F', dtype=float)
|
|
132
|
+
B = np.array([[...]], order='F', dtype=float)
|
|
133
|
+
|
|
134
|
+
# Compute expected outputs using control/scipy
|
|
135
|
+
X = ct.lyap(A, Q) # Continuous Lyapunov
|
|
136
|
+
X = ct.dlyap(A, Q) # Discrete Lyapunov
|
|
137
|
+
X = ct.care(A, B, Q, R) # Continuous Riccati
|
|
138
|
+
K = ct.lqr(A, B, Q, R) # LQR gain
|
|
139
|
+
# or scipy.linalg.solve_continuous_lyapunov(A, Q)
|
|
140
|
+
|
|
141
|
+
# Print arrays with full precision for hardcoding
|
|
142
|
+
np.set_printoptions(precision=16, suppress=False)
|
|
143
|
+
print("A =", repr(A))
|
|
144
|
+
print("Expected X =", repr(X))
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Step 2 - Run script and extract values**:
|
|
148
|
+
```bash
|
|
149
|
+
python temp_gen_[routine]_data.py
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Step 3 - Hardcode extracted values in test** (`tests/python/test_[routine].py`):
|
|
153
|
+
```python
|
|
154
|
+
import numpy as np
|
|
155
|
+
from ctrlsys import [routine]
|
|
156
|
+
|
|
157
|
+
def test_[routine]_basic():
|
|
158
|
+
# Input data (from generation script)
|
|
159
|
+
A = np.array([[...]], order='F', dtype=float)
|
|
160
|
+
Q = np.array([[...]], order='F', dtype=float)
|
|
161
|
+
|
|
162
|
+
# Expected output (from generation script)
|
|
163
|
+
X_expected = np.array([[...]], order='F', dtype=float)
|
|
164
|
+
|
|
165
|
+
# Call SLICOT routine
|
|
166
|
+
X, info = [routine](A, Q)
|
|
167
|
+
|
|
168
|
+
# Only NumPy used in test
|
|
169
|
+
np.testing.assert_allclose(X, X_expected, rtol=1e-14)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Step 4 - Delete temporary script** after extracting all needed data. Tests must run with only NumPy dependency.
|
|
173
|
+
|
|
174
|
+
Ensure generated systems satisfy routine preconditions (controllability, stability, etc.)
|
|
175
|
+
|
|
176
|
+
4. **Write Tests**: Create `tests/python/test_[routine].py` following **NUMERICAL LIBRARY STANDARDS**:
|
|
177
|
+
|
|
178
|
+
**Test Requirements** (minimum 3 tests):
|
|
179
|
+
- Basic functionality (from HTML doc example)
|
|
180
|
+
- Edge case (boundary conditions)
|
|
181
|
+
- Error handling (invalid parameters, info > 0)
|
|
182
|
+
- **Mathematical property validation** (see below)
|
|
183
|
+
|
|
184
|
+
**Deterministic & Reproducible Tests**:
|
|
185
|
+
- ALWAYS use `np.random.seed(N)` before ANY random data generation
|
|
186
|
+
- Document seed in test docstring: `Random seed: 42 (for reproducibility)`
|
|
187
|
+
- Different seeds for different tests (42, 123, 456, 789, etc.)
|
|
188
|
+
- Never use `np.random.RandomState()` - use `np.random.seed()` for cross-platform reproducibility
|
|
189
|
+
|
|
190
|
+
**Numerical Accuracy Standards** (NO TOLERANCE FOR ERRORS):
|
|
191
|
+
- Use `order='F'` for ALL NumPy arrays (column-major)
|
|
192
|
+
- **NEVER test only output shapes** - always validate numerical correctness
|
|
193
|
+
- Test actual values with appropriate tolerance:
|
|
194
|
+
* `rtol=1e-14`: Machine precision tests (property-based, exact math)
|
|
195
|
+
* `rtol=1e-13, atol=1e-14`: Iterative algorithms (Lyapunov, Riccati)
|
|
196
|
+
* `rtol=1e-3, atol=1e-4`: HTML doc data (matches 4-decimal display precision)
|
|
197
|
+
* `rtol=1e-6` to `1e-13`: Control package cross-validation (algorithm-dependent)
|
|
198
|
+
|
|
199
|
+
**Mathematical Property Tests** (REQUIRED for numerical correctness):
|
|
200
|
+
Based on routine type, add property validation tests:
|
|
201
|
+
|
|
202
|
+
- **Transpose/Permutation**:
|
|
203
|
+
* Involution: `(A^T)^T = A`
|
|
204
|
+
* Orthogonality preservation: `(Q^T)Q = I`
|
|
205
|
+
* Symmetry preservation: `A^T = A` for symmetric A
|
|
206
|
+
|
|
207
|
+
- **Similarity Transformations** (Schur, QR, etc.):
|
|
208
|
+
* Eigenvalue preservation: `λ(A) = λ(U^T A U)`
|
|
209
|
+
* Orthogonality: `U^T U = I`
|
|
210
|
+
* Determinant preservation: `det(A) = det(A_transformed)`
|
|
211
|
+
|
|
212
|
+
- **State-Space Systems**:
|
|
213
|
+
* State evolution: `x(k+1) = A*x(k) + B*u(k)` holds exactly
|
|
214
|
+
* Output equation: `y(k) = C*x(k) + D*u(k)` holds exactly
|
|
215
|
+
* Markov parameters: `h(0)=D, h(1)=CB, h(2)=CAB, ...`
|
|
216
|
+
* Controllability/observability rank
|
|
217
|
+
|
|
218
|
+
- **Lyapunov/Riccati Equations**:
|
|
219
|
+
* Residual: `A*X + X*A^T + Q = 0` (continuous)
|
|
220
|
+
* Residual: `A*X*A^T - X + Q = 0` (discrete)
|
|
221
|
+
* Symmetry: `X = X^T`
|
|
222
|
+
* Positive definiteness: eigenvalues > 0
|
|
223
|
+
|
|
224
|
+
**Example Test Structure**:
|
|
225
|
+
```python
|
|
226
|
+
def test_routine_basic():
|
|
227
|
+
"""
|
|
228
|
+
Validate basic functionality using SLICOT HTML doc example.
|
|
229
|
+
|
|
230
|
+
Tests numerical correctness of transformation, not just shapes.
|
|
231
|
+
"""
|
|
232
|
+
# Input from HTML doc
|
|
233
|
+
a = np.array([[...]], order='F', dtype=float)
|
|
234
|
+
|
|
235
|
+
# Expected output from HTML doc
|
|
236
|
+
x_expected = np.array([[...]], order='F', dtype=float)
|
|
237
|
+
|
|
238
|
+
# Call routine
|
|
239
|
+
x, info = routine(a)
|
|
240
|
+
|
|
241
|
+
assert info == 0
|
|
242
|
+
# Validate actual values (rtol based on source precision)
|
|
243
|
+
np.testing.assert_allclose(x, x_expected, rtol=1e-3, atol=1e-4)
|
|
244
|
+
|
|
245
|
+
def test_routine_eigenvalue_preservation():
|
|
246
|
+
"""
|
|
247
|
+
Validate mathematical property: eigenvalues preserved under transformation.
|
|
248
|
+
|
|
249
|
+
Random seed: 42 (for reproducibility)
|
|
250
|
+
"""
|
|
251
|
+
np.random.seed(42)
|
|
252
|
+
n = 4
|
|
253
|
+
a = np.random.randn(n, n).astype(float, order='F')
|
|
254
|
+
|
|
255
|
+
# Compute eigenvalues before
|
|
256
|
+
eig_before = np.linalg.eigvals(a)
|
|
257
|
+
|
|
258
|
+
# Apply transformation
|
|
259
|
+
a_transformed, u, info = routine(a)
|
|
260
|
+
assert info == 0
|
|
261
|
+
|
|
262
|
+
# Compute eigenvalues after
|
|
263
|
+
eig_after = np.linalg.eigvals(a_transformed)
|
|
264
|
+
|
|
265
|
+
# Validate preservation (machine precision)
|
|
266
|
+
np.testing.assert_allclose(
|
|
267
|
+
sorted(eig_before.real),
|
|
268
|
+
sorted(eig_after.real),
|
|
269
|
+
rtol=1e-14
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
def test_routine_state_space_equations():
|
|
273
|
+
"""
|
|
274
|
+
Validate state-space equations hold exactly for discrete-time system.
|
|
275
|
+
|
|
276
|
+
Tests: x(k+1) = A*x(k) + B*u(k) and y(k) = C*x(k) + D*u(k)
|
|
277
|
+
Random seed: 888 (for reproducibility)
|
|
278
|
+
"""
|
|
279
|
+
np.random.seed(888)
|
|
280
|
+
n, m, l = 3, 1, 2
|
|
281
|
+
|
|
282
|
+
# Generate system from routine
|
|
283
|
+
a, b, c, d, x0, info = routine(n, m, l, theta)
|
|
284
|
+
assert info == 0
|
|
285
|
+
|
|
286
|
+
# Manual simulation
|
|
287
|
+
x = x0.copy()
|
|
288
|
+
u = np.array([[1.0]], order='F')
|
|
289
|
+
|
|
290
|
+
for k in range(10):
|
|
291
|
+
# Compute expected next state
|
|
292
|
+
x_next_expected = a @ x + b @ u
|
|
293
|
+
y_expected = c @ x + d @ u
|
|
294
|
+
|
|
295
|
+
# Compare with routine output (machine precision)
|
|
296
|
+
np.testing.assert_allclose(x_next, x_next_expected, rtol=1e-14, atol=1e-15)
|
|
297
|
+
np.testing.assert_allclose(y, y_expected, rtol=1e-14, atol=1e-15)
|
|
298
|
+
|
|
299
|
+
x = x_next
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
5. **Verify Failure**: `pytest tests/python/test_[routine].py -v` must fail
|
|
303
|
+
|
|
304
|
+
### Phase 2: GREEN (Implementation)
|
|
305
|
+
|
|
306
|
+
1. **Read Fortran Source**: Analyze `SLICOT-Reference/src/[ROUTINE].f`
|
|
307
|
+
|
|
308
|
+
2. **Write C Implementation** (`src/[XX]/[routine].c`):
|
|
309
|
+
- Column-major indexing: `a[i + j*lda]`
|
|
310
|
+
- Index conversion with bounds check: `k = ipiv[j] - 1; if (k < 0 || k >= n) ...`
|
|
311
|
+
- BLAS/LAPACK via SLC_* wrappers, scalars by pointer
|
|
312
|
+
- LAPACK SELECT callbacks return `int`, not `bool`
|
|
313
|
+
|
|
314
|
+
3. **Write Header** (`include/slicot/[xx].h`): Add function declaration
|
|
315
|
+
- **Large file strategy**: Use `tail -40 include/slicot/[xx].h` to see end
|
|
316
|
+
- Insert new declaration before `#endif` guard
|
|
317
|
+
- Never read entire header file (can be 1000+ lines)
|
|
318
|
+
|
|
319
|
+
4. **Write Python Wrapper** (`python/wrappers/py_[xx].c`):
|
|
320
|
+
- Input arrays: `NPY_ARRAY_FARRAY | NPY_ARRAY_WRITEBACKIFCOPY`
|
|
321
|
+
- Output arrays: `PyArray_New` with column-major strides + `NPY_ARRAY_OWNDATA`
|
|
322
|
+
- In-place: return input array directly, no double-wrap
|
|
323
|
+
- **Large file strategy**: Use `tail -30 python/wrappers/py_[xx].c` to see end
|
|
324
|
+
- Append new function after final `}` - never read entire file (can be 8000+ lines)
|
|
325
|
+
|
|
326
|
+
5. **Update Module** (these files < 400 lines, OK to read in full):
|
|
327
|
+
- `python/wrappers/py_wrappers.h` - extern declaration
|
|
328
|
+
- `python/slicot_module.c` - method table entry
|
|
329
|
+
- `python/data/docstrings.json` - docstring
|
|
330
|
+
- `python/slicot/__init__.py` - export
|
|
331
|
+
- `src/CMakeLists.txt` - add to SLICOT_SOURCES
|
|
332
|
+
|
|
333
|
+
6. **Build & Test**:
|
|
334
|
+
```bash
|
|
335
|
+
# Single command - build, install, test (use appropriate preset)
|
|
336
|
+
# macOS:
|
|
337
|
+
cmake --build --preset macos-arm64-debug-build && uv pip install . && .venv/bin/pytest tests/python/test_[routine].py -v
|
|
338
|
+
# Linux:
|
|
339
|
+
cmake --build --preset linux-x64-debug-build && uv pip install . && .venv/bin/pytest tests/python/test_[routine].py -v
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
**IMPORTANT**:
|
|
343
|
+
- Venv is pre-activated in this environment - just run commands directly
|
|
344
|
+
- Always chain build → install → test in single command (avoids stale module)
|
|
345
|
+
- If pip fails with network error, the sandbox is blocking - build already succeeded, tests ran earlier
|
|
346
|
+
|
|
347
|
+
7. **Iterate**: Fix failures until all tests pass
|
|
348
|
+
|
|
349
|
+
### Phase 3: REFACTOR (Clean Up)
|
|
350
|
+
|
|
351
|
+
1. **Code Quality**:
|
|
352
|
+
- Remove unnecessary comments (only keep bugs/TODOs/known issues)
|
|
353
|
+
- Verify BLAS/LAPACK usage is optimal
|
|
354
|
+
- Check memory cleanup paths
|
|
355
|
+
- Validate all index conversions have bounds checks
|
|
356
|
+
|
|
357
|
+
2. **Verify Tests Still Pass**: `uv pip install . && .venv/bin/pytest tests/python/test_[routine].py -v`
|
|
358
|
+
|
|
359
|
+
### Phase 4: VERIFY (Full Suite + Memory Safety)
|
|
360
|
+
|
|
361
|
+
1. **Run Complete Test Suite**: `pytest tests/python/ -v -x` (stop on first failure)
|
|
362
|
+
2. **All tests must pass** - no exceptions
|
|
363
|
+
3. **Run ASAN (required before completion)**: `./scripts/run_asan_docker.sh --no-build tests/python/test_[routine].py -v`
|
|
364
|
+
- If ASAN docker fails to run, note it and continue (user will verify later)
|
|
365
|
+
4. **If tests fail**: Use Fortran diagnostic workflow to isolate bug (see below)
|
|
366
|
+
|
|
367
|
+
## Debugging Failed Implementations
|
|
368
|
+
|
|
369
|
+
When tests fail and C results differ from expected:
|
|
370
|
+
|
|
371
|
+
### Use Fortran Diagnostic Workflow
|
|
372
|
+
|
|
373
|
+
Compare C implementation against Fortran reference to find divergence point:
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
# Enable diagnostic tools (one-time) - use appropriate preset for platform
|
|
377
|
+
# macOS: cmake --preset macos-arm64-debug -DBUILD_FORTRAN_DIAG=ON
|
|
378
|
+
# Linux: cmake --preset linux-x64-debug -DBUILD_FORTRAN_DIAG=ON
|
|
379
|
+
|
|
380
|
+
# Run side-by-side comparison
|
|
381
|
+
# macOS: cmake --build --preset macos-arm64-debug-build --target diag_all
|
|
382
|
+
# Linux: cmake --build --preset linux-x64-debug-build --target diag_all
|
|
383
|
+
|
|
384
|
+
# View high-precision traces (adjust path for platform)
|
|
385
|
+
# macOS: build/macos-arm64-debug/fortran_diag/
|
|
386
|
+
# Linux: build/linux-x64-debug/fortran_diag/
|
|
387
|
+
cat build/*/fortran_diag/fortran_trace.txt # Reference (correct)
|
|
388
|
+
cat build/*/fortran_diag/c_trace.txt # C impl (buggy)
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### When to Use
|
|
392
|
+
|
|
393
|
+
- **Test failures**: C output differs from expected but unclear why
|
|
394
|
+
- **Multi-step algorithms**: Complex routines with Schur decomposition, eigenvalue solvers, Lyapunov equations
|
|
395
|
+
- **Isolating bugs**: Need to pinpoint exact computation step where divergence occurs
|
|
396
|
+
- **Matrix transformations**: When intermediate matrices need inspection
|
|
397
|
+
|
|
398
|
+
### What It Provides
|
|
399
|
+
|
|
400
|
+
- **Identical inputs**: Both programs read same test data (`.dat` files)
|
|
401
|
+
- **High precision**: 16-digit output catches subtle numerical errors
|
|
402
|
+
- **Step-by-step traces**: All input/output matrices with full precision
|
|
403
|
+
- **Automatic comparison**: Python script identifies mismatches
|
|
404
|
+
|
|
405
|
+
### Example: SG03BD Bug Isolation
|
|
406
|
+
|
|
407
|
+
```
|
|
408
|
+
Fortran (correct): U = [1.600, 0.680, 0.204]
|
|
409
|
+
C (wrong): U = [0.437, 0.581, 0.080]
|
|
410
|
+
|
|
411
|
+
Other outputs matched:
|
|
412
|
+
✓ Eigenvalues (ALPHAR, ALPHAI, BETA)
|
|
413
|
+
✓ Schur form (A, E matrices)
|
|
414
|
+
✓ Orthogonal transformations (Q, Z)
|
|
415
|
+
|
|
416
|
+
Conclusion: Bug isolated to Lyapunov solver (SG03BV), not Schur decomposition
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### Adding Diagnostic for New Routine
|
|
420
|
+
|
|
421
|
+
See `fortran_diag/README.md` for complete steps. Summary:
|
|
422
|
+
|
|
423
|
+
1. Copy templates: `fortran/sg03bd_diag.f` → `fortran/[routine]_diag.f`
|
|
424
|
+
2. Copy templates: `c/sg03bd_diag.c` → `c/[routine]_diag.c`
|
|
425
|
+
3. Update CMakeLists.txt with new targets
|
|
426
|
+
4. Build and run: `cmake --build --preset <platform>-debug-build --target [routine]_diag_all`
|
|
427
|
+
|
|
428
|
+
**Time investment**: ~30 min to add new routine, saves hours of blind debugging
|
|
429
|
+
|
|
430
|
+
## Critical Safety Patterns
|
|
431
|
+
|
|
432
|
+
### FORTRAN Callback ABI Issue (CRITICAL)
|
|
433
|
+
|
|
434
|
+
When implementing callback functions passed to LAPACK routines (DGEES, DGGES), MUST use `int` return type, NOT `bool`.
|
|
435
|
+
|
|
436
|
+
**Why:** FORTRAN LOGICAL is 4 bytes (int), C bool is 1 byte. Using bool causes ABI mismatch that works on ARM64 but fails on x86-64.
|
|
437
|
+
|
|
438
|
+
**WRONG:**
|
|
439
|
+
```c
|
|
440
|
+
static bool select_stable(const f64* reig, const f64* ieig) {
|
|
441
|
+
return *reig < 0.0; // WRONG - bool return causes ABI mismatch
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
**CORRECT:**
|
|
446
|
+
```c
|
|
447
|
+
static int select_stable(const f64* reig, const f64* ieig) {
|
|
448
|
+
return *reig < 0.0; // CORRECT - int return (comparison yields 0/1)
|
|
449
|
+
}
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
**Affected LAPACK routines:**
|
|
453
|
+
- DGEES (Schur decomposition with eigenvalue selection)
|
|
454
|
+
- DGGES (Generalized Schur decomposition)
|
|
455
|
+
- Any routine with SELECT/SELCTG callback parameter
|
|
456
|
+
|
|
457
|
+
### Array Indexing
|
|
458
|
+
```c
|
|
459
|
+
// CORRECT: Column-major with bounds check
|
|
460
|
+
for (i32 i = 0; i < m; i++) {
|
|
461
|
+
for (i32 j = 0; j < n; j++) {
|
|
462
|
+
f64 val = a[i + j*lda]; // Element (i,j)
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### Index Conversion
|
|
468
|
+
```c
|
|
469
|
+
// CORRECT: Convert then validate
|
|
470
|
+
k = ipiv[j] - 1; // Fortran 1-based to C 0-based
|
|
471
|
+
if (k < 0 || k >= n) {
|
|
472
|
+
return -1; // Invalid index
|
|
473
|
+
}
|
|
474
|
+
swap(&a[k], &a[j]); // Safe access
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### Python In-Place Modification
|
|
478
|
+
```c
|
|
479
|
+
// CORRECT: Return modified input array
|
|
480
|
+
PyObject *result = Py_BuildValue("Oi", b_array, info);
|
|
481
|
+
Py_DECREF(a_array);
|
|
482
|
+
Py_DECREF(b_array);
|
|
483
|
+
return result;
|
|
484
|
+
|
|
485
|
+
// WRONG: Creates double-free
|
|
486
|
+
// PyObject *u = PyArray_New(..., b_data, ...);
|
|
487
|
+
// PyArray_ENABLEFLAGS(u, NPY_ARRAY_OWNDATA); // b_data already owned!
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Python Wrapper Temporary Arrays (ASAN-Compatible)
|
|
491
|
+
|
|
492
|
+
When allocating temporary arrays in Python wrappers that are allocated and freed within the wrapper:
|
|
493
|
+
|
|
494
|
+
```c
|
|
495
|
+
// CORRECT: Use PyMem for wrapper-local temp arrays
|
|
496
|
+
c128 *temp = (c128 *)PyMem_Calloc(n, sizeof(c128));
|
|
497
|
+
// ... use temp ...
|
|
498
|
+
PyMem_Free(temp);
|
|
499
|
+
|
|
500
|
+
// WRONG: Causes "not malloc()-ed" errors under Docker ASAN
|
|
501
|
+
c128 *temp = (c128 *)calloc(n, sizeof(c128));
|
|
502
|
+
free(temp); // ASAN may not track this allocation properly
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Why:** When running Python under ASAN via `LD_PRELOAD` in Docker, ASAN intercepts malloc/free but Python uses its own memory pool. This mismatch causes "attempting free on address which was not malloc()-ed" errors. Using `PyMem_*` functions ensures consistent allocation tracking.
|
|
506
|
+
|
|
507
|
+
**When to use:**
|
|
508
|
+
- `PyMem_Calloc`/`PyMem_Free`: Temporary arrays allocated and freed within the Python wrapper
|
|
509
|
+
- Standard `calloc`/`free`: Workspace arrays passed to C routines (dwork, iwork, etc.)
|
|
510
|
+
|
|
511
|
+
## Quality Gates
|
|
512
|
+
|
|
513
|
+
Before considering work complete:
|
|
514
|
+
|
|
515
|
+
**Test Quality (NUMERICAL LIBRARY STANDARDS)**:
|
|
516
|
+
- [ ] Tests extracted from authoritative sources
|
|
517
|
+
- [ ] Tests depend ONLY on NumPy (no control, scipy, or other packages)
|
|
518
|
+
- [ ] If control/scipy used for data generation, temporary script deleted
|
|
519
|
+
- [ ] **ALL random data uses `np.random.seed(N)` with documented seed**
|
|
520
|
+
- [ ] **NEVER test only shapes - always validate numerical values**
|
|
521
|
+
- [ ] **Mathematical property tests included** (involution, eigenvalue preservation, state equations, etc.)
|
|
522
|
+
- [ ] Appropriate tolerances used (`rtol=1e-14` for exact math, `rtol=1e-3` for HTML docs)
|
|
523
|
+
- [ ] Minimum 3 tests (basic, edge, error) + property tests
|
|
524
|
+
- [ ] Tests are deterministic and reproducible across platforms
|
|
525
|
+
|
|
526
|
+
**Code Quality**:
|
|
527
|
+
- [ ] All NumPy arrays use `order='F'` (column-major)
|
|
528
|
+
- [ ] Python wrapper uses `NPY_ARRAY_FARRAY`
|
|
529
|
+
- [ ] All index conversions have bounds checks
|
|
530
|
+
- [ ] No double-free vulnerabilities in Python wrappers
|
|
531
|
+
- [ ] Doxygen docs complete in header
|
|
532
|
+
- [ ] Function exported in `__init__.py`
|
|
533
|
+
- [ ] Full test suite passes
|
|
534
|
+
- [ ] **ASAN passes** (`./scripts/run_asan_docker.sh --no-build tests/python/test_[routine].py -v`)
|
|
535
|
+
- [ ] Issue closed with `bd close <id> --reason "..."` after completion
|
|
536
|
+
|
|
537
|
+
**Issue Tracking** (beads, not todos):
|
|
538
|
+
- [ ] Any discovered bugs → `bd create --type=bug`
|
|
539
|
+
- [ ] Any technical debt → `bd create --type=task --priority=3`
|
|
540
|
+
- [ ] Any blocking dependencies → `bd create --type=task` + `bd dep add`
|
|
541
|
+
- [ ] **NO TodoWrite for future work** - all captured in beads
|
|
542
|
+
|
|
543
|
+
## When to Escalate
|
|
544
|
+
|
|
545
|
+
When blocked, create a beads issue before escalating:
|
|
546
|
+
|
|
547
|
+
```bash
|
|
548
|
+
# Missing test data - create issue then ask user
|
|
549
|
+
bd create --title="[ROUTINE] needs test data approval" --type=task --priority=2 --json
|
|
550
|
+
# Then escalate: "No authoritative test data for [ROUTINE]. Created beads-xxx. Use synthetic?"
|
|
551
|
+
|
|
552
|
+
# Missing dependencies - create dependency issues
|
|
553
|
+
bd create --title="[DEP] to C (blocks [ROUTINE])" --type=task --priority=2 --json
|
|
554
|
+
bd dep add <dep-id> <routine-id>
|
|
555
|
+
# Then escalate: "Need [DEP] first. Created beads-xxx as blocker."
|
|
556
|
+
|
|
557
|
+
# Algorithm discrepancy - document finding
|
|
558
|
+
bd create --title="[ROUTINE] algorithm differs from ref" --type=bug --priority=1 --json
|
|
559
|
+
# Then escalate with issue ID for tracking
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
**Escalation triggers:**
|
|
563
|
+
- No test data in authoritative sources AND control package cannot generate valid cases
|
|
564
|
+
- Routine has SLICOT dependencies not yet translated (create dependency issues first)
|
|
565
|
+
- Numerical algorithm differs significantly from reference
|
|
566
|
+
- Test failures that cannot be resolved after debugging
|
|
567
|
+
|
|
568
|
+
## Communication Style
|
|
569
|
+
|
|
570
|
+
Be extremely concise. Sacrifice grammar for brevity. Focus on actionable information. Report issues immediately, not after failure.
|