Skip to content

History / R

Revisions

  • Spell operators and value types the way the engine registers them (#1161) The token table is case folded, so a page that writes UInt32, AsList or NrOfRows teaches a spelling that costs the reader a case mix-up warning on the first run. This rewrites those spellings across 142 pages to the names the engine actually registers, taken from the running engine rather than from memory: the 2342 operator group names that DocData()/OperatorGroups/name reports, plus the property names in TicPropDefConst.h. Four kinds of change, all case only: * value types in configuration examples -- String, Float64, SPoint, UInt32, Bool, Void and the *Seq variants -> lower case, which is what ValueWrap.cpp has registered (AsLowerCase of the C++ type name) since 20.9. * the boolean literals True/TRUE/False/FALSE in expressions and data lists. Property VALUES keep their spelling: StorageReadOnly = "False" is data. * operator names, in examples and in the syntax/definition lines of the operator pages: asList, asItemList, expand, currentDir, makeDir, get_x, get_y, pointrow, pointcol, id, range, subset, replace, quote, dquote, isNegative, isPositive, isZero, the *seq conversions -- and the other way for the ones the engine capitalises: BaseUnit, IsDefined, LowerBound, UpperBound, Round, RoundUp, RoundDown, RoundToZero, LowerCase, AsHex, SubItem, SubItem_PropValues, GeoDmsVersion, EXEC_EC. * nrofrows, both as the operator and as the unit property. Five examples named an item after the operator it called, which folds onto the operator's own token: MakeDir, GeoDMSVersion, Quote. Those items are renamed (newFolder, versionString, Quoted). DocData's sub-item is name, not Name. IntegrityCheck and expr property values are parsed as expressions, so the operator inside the string counts too. Value-type gains a "spelling" section and Naming-conventions a bullet saying that operator names must be written as registered -- most lower case, but not all -- both linking to the case mix-up section of Tree-item-name. NOT touched, and left as one decision rather than half-made here: the mixed-case PROPERTY names. The engine registers Label, Expr, Descr, Metric, Format, Source, Using, Projection, ValueType, IsHidden, and the pages (like nearly every real configuration) write label, expr, descr, source, using. Whether the wiki follows the engine or the engine follows the corpus is the same question #1161 deferred for the ~57 property names; it should be settled once, in one place. Also left: SQL keywords inside SqlString values, Python API names, and example item names that merely collide with an engine name (Name, District, Area, Union, Left). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

    @MaartenHilferink MaartenHilferink committed Aug 28, 2026
  • #659: document the Julia relation, and Arrow as the second typed exchange format Julia.md (new) - Documents the NetworkModel_EU pipeline (branch ServiceAccess) as the reference implementation of the write -> solve -> read round trip: OD/client/facility tables exported to Arrow, solved by lp.jl / greedy.jl / lambda_sweep_simplex.jl, results read back for mapping. Neither Julia nor Arrow was mentioned anywhere on the wiki so far. - The three things in its batch file that are easy to get wrong and worth copying: each item path a separately quoted argument (semicolon-joining makes GeoDmsRun see one unresolvable path), the study area passed through %env:STUDY_AREA% instead of an edited config file, and /L<logfile> plus an errorlevel check after every call so that a later step cannot consume the output of a step that failed. - Records that the solver is deliberately NOT started with exec_ec: the batch owns the sequence, which is the only arrangement that orders a GeoDMS write correctly. It is therefore the production confirmation of the rule now stated on Exec_ec.md. - Reading results back via a Template parameterised over solver variant, and joining on the exported id with rjoin rather than trusting row order. Parquet.md - New Arrow section: same GDAL drivers, same typed columns, uncompressed and therefore faster for a file written and read again immediately; set GDAL_DRIVER = 'Arrow' explicitly on read. When to pick which. R.md - Arrow named as the equally good alternative (arrow::read_ipc_file), with the advice to export an id column and join on it rather than relying on row order. Exec_ec.md, Parquet.md, R.md all cross-link Julia.md.

    @MaartenHilferink MaartenHilferink committed Aug 19, 2026
  • #659: document running R (and Python) models over exec_ec, and correct the ordering rules Exec_ec.md - exec_ec returns a UInt32 ExitCode; one example declared it as Int32. - New in 20.16.0: the child's stdout+stderr are copied into the message log as "exec: <line>" under the commands category (1 MB cap), and a child that runs long reports "exec: still waiting for <program> after <n> seconds" every ten seconds. Also states what did not change: a redirection inside the command still wins, and exec_ec still occupies the main thread while the child runs. - Corrects a wrong claim: the page told readers that PropValue(input, 'StorageName') forces the input storage to be written before the exec_ec. It does not - PropValue only reads the property text and its first argument carries the calc_never argument policy, so the item is never calculated. A configuration relying on it runs the child against a missing or stale input file. - Adds the actual rule behind it: exec_ec carries calc_requires_metainfo, so the child starts at meta-information time, before any data is calculated. That is what makes the ExitCode-in-StorageName construction order exec -> read correctly, and it is equally why a GeoDMS *write* cannot be ordered before an exec_ec inside one run. ExplicitSuppliers (on the write unit or its attribute) and a data dependency such as sum(input/id) were each tried and do not force the write either; ExplicitSuppliers is the right tool only for the opposite order, as the 2UP RevisionInfo example shows. - Replaces the broken three-step example with a batch file that calls GeoDmsRun once per step, which is what actually works. R.md (new) - Applying a model saved with saveRDS to a GeoDMS data matrix: exchange format, the R script, the configuration, and the batch file that drives it. - Records why Rcpp was rejected (R's C API needs the MinGW-w64 toolchain R was built with, not MSVC; plus a single-threaded non-reentrant interpreter inside a worker-threaded engine), so the route is not re-explored a third time. Parquet.md - Same ordering correction in the Python data-exchange section, plus links to R.

    @MaartenHilferink MaartenHilferink committed Aug 19, 2026