New formats have been added and validated. The importers for every format other than
Vensim have been tested against bigger real model files with their verified edgelists.
Validated here against public corpora: 123 XMILE/STMX files from the system dynamics community's own test suite (SDXorg/test-models), real AnyLogic projects, 30 Stella causal loop diagrams, and Powersim and Stella models whose correct edge lists were known.
Powersim Studio .sip / .sim now import WITH THEIR LINKS.
powersim\_links() returns 52 edges with correct names and positions from a
model whose verified edge list has 52; 47 of the 47 match it exactly. Three
undocumented things had to be worked out:
"ZLNK"/"XLNK" are not chunk tags. The Z and X are the last byte of the
preceding big-endian LENGTH field; the real form type is "LNK ".CON chunk holds the arrow's POLYLINE, not endpoint ids, so
endpoints are resolved GEOMETRICALLY -- the first and last points fall
inside the source and target variable boxes.Names needed one more step: the string table's order does not follow the
diagram's. The module's NAME records carry each variable's string index as
(index * 16), and those indices are not contiguous.
Legacy Stella .STM / .ITM binaries are detected and read
fully. Variable names and equations decode cleanly; the mapping
between them does not, so the result carries a warning saying some edges are
likely attributed to the wrong variable.
Vensim .vmfx -- Vensim's own XML schema, NOT XMILE, so the XMILE
reader found nothing in it. parse\_vmfx() matches on local element names
and accepts the usual equation spellings.
AnyLogic .alpx -- the same project, zipped. parse\_alpx() unwraps the
archive and parses the .alp inside.
GoldSim native .sim is identified and explained rather than failing
with an XML parse error. Powersim and GoldSim both use .sim, so the two
are told apart by CONTENT: Powersim writes an OLE2 compound document and
GoldSim does not.
<views> section as a <connector>.
Reading only equations extracted nothing from exactly the kind of file this
package exists to convert. Across 30 real Stella CLDs, all 30 now convert.Polarity column of + and - just
like a Vensim import, with <alias> ghosts resolved to their targets.<views> section
repeats every variable with no <eqn>; those empty placeholders were
overwriting the real equations. Since every real model has a diagram, this
cost nearly every file most of its links.name attribute but writes identifiers with underscores.false\_input AND true\_input matched as one token and resolved to nothing."Depression\\nTreatments" became "Depression nTreatments", splitting one
variable across three nodes.Edge lists were compared against an independent Python implementation across all 30 Stella CLDs and the Powersim model: identical on every file, including a 570-node, 844-edge model and the 47-edge Powersim diagram.