Skip to content

Other platforms bindings and renaming - #5

Closed
GeraultTr wants to merge 65 commits into
mainfrom
other_platforms_bindings
Closed

GeraultTr wants to merge 65 commits into
mainfrom
other_platforms_bindings

Conversation

@GeraultTr

Copy link
Copy Markdown
Contributor

No description provided.

…conf.py on the guidelines' template reading the package metadata, the full extension list, a notebook (doc/notebooks, run by nbmake in CI and by nbsphinx), the doc extra, conda/environment.yml, CONTRIBUTING.md, CODE_OF_CONDUCT.md and CHANGELOG.md
…, the data model, reading and writing frames and sequences, the conformance dump (every conformance file read as expected; what it writes passes fspm-tf validate and glTF-Validator with no warning); a MultiScaleTreeGraph.jl package extension (from_mtg, to_mtg: MTG.jl's test files rebuilt exactly, another platform's graph read as an MTG); its CI (Julia 1.10 and latest, the conformance action); doc/julia.md, implementations
…ng to 8 bytes (glTF-Validator warned of more than 3 bytes beyond it); the conformance files are unchanged
…mbered 1, 2, ... in id order (MTG.jl sizes its attribute store by the largest id: CPlantBox's 2^32 offsets saturated memory), each id kept in fspm_tf_id; a parent in another complex (a lateral's first segment) kept in fspm_tf_parent and fspm_tf_edge_type, the node under its own complex; from_mtg writes both back (the conformance root system and CPlantBox's plants: MTG and back, the same graph)
…ing and writing frames and sequences, the conformance dump and tool (every conformance file read as expected; what it writes passes both validators with no warning), a CMake package; CPlantBox's adapter (bindings/cpp/cplantbox): organisms as Plant, Organ and SubOrgan with CPlantBox's variables declared and its parameters in extras, PlantVisualiser geometry, the soil grid and segment-to-cell mapping, static root systems from CPlantBox's frames and from other platforms' (by segment ends and complexes); CI on Linux, macOS and Windows, conformance, the adapter on a pinned CPlantBox; doc/cpp.md
…antGraphs (from_graph, to_graph: one entity set, the nodes' types as labels and their fields as variables, the graph's data as scalars, the turtle's movements left out, edge types guessed; nodes rebuilt from their rows) and PlantGeomTurtle (add_geometry!: feed! replayed, each triangle with its node, the mesh equal to PlantGeomPrimitives.Mesh(graph)); their tests in their own project (PlantGraphs needs Julia 1.12) and CI job; the attribute-to-column conversion shared by the adapters (src/values.jl)
…ainer, the data model, reading and writing frames and sequences, the conformance dump and tool (every conformance file read as expected; what it writes passes both validators with no warning); GroIMP's adapter (bindings/java/groimp, on GroIMP's Graph module): one entity set per refinement depth (names and ranks given), complex and parent from each node's incoming edges, other edge bits as relations, managed fields as variables, and graphs (GroIMP's or another platform's) back into the model's node classes; CI on Linux, macOS and Windows, conformance, the adapter on a pinned GroIMP; doc/java.md
…ntBox), bindings/java GPL-3.0-or-later (GroIMP); the rest of fspm-TF stays CeCILL-C
@GeraultTr GeraultTr self-assigned this Nov 2, 2026
@GeraultTr GeraultTr changed the title Other platforms bindings Other platforms bindings and renaming Nov 2, 2026
… user decided them: missing values in integer, text and boolean columns (UINT8 0/1 with noData 255); an entity set's scale (a base scale or mixed) and ranks as base scale positions; reading by content (standard names, the complex chain); position columns in their declared length unit; a data structure's labels map; the extras key, the platform's name in lower case; unique relation names, bearer relations' names and labels; edge_type unknown; the order column; parents in another complex; date formats; sparse ids; conformance/ as part of the agreement and the sources' precedence. Vocabulary 0.2 (Seed, mtg_index, the new enumerations); the reference codec, validator (each new rule) and ParaView reader; the conformance files regenerated with a new scene, missing_values
…oolean columns, an entity set's scale, a data structure's labels, a variable's format, edge_type unknown, the order column; its adapters on 0.2 instead of their extras: MTG.jl's missing attributes as missing, dates with their format, the children's order as order, mtg_index's standard name, ranks and labels given, its extras under virtualplantlab (model, scales, metadata, scene); PlantGraphs' edges unknown and children's order, missing fields; reading another platform's frame unchanged
… with a free noData, text with a free noData string, booleans as UINT8 0/1/255 with FSPM_boolean), an entity set's scale, a data structure's labels, a variable's format, edge_type unknown, the order column; CPlantBox's adapter on 0.2: its Organ set mixed, Plant and SubOrgan with their scales, segment ends in cm as declared (a rebuilt root system bit for bit), its order as branching_order (order is reserved)
… not written, with a warning, rather than overwriting it
…s with a free noData, text with a free noData string, booleans as UINT8 0/1/255 with FSPM_boolean), an entity set's scale, a data structure's labels, a variable's format, edge_type unknown, the order column; GroIMP's adapter on 0.2: missing fields as missing rather than in extras, each scale's base scale (scaleScales) and the classes' vocabulary labels (labels) given
…ec/ holds and how each file is checked, which source prevails, a reading path, the three layers of a file with conformance/root_system.glb annotated, a glossary, how a codec proves itself, the standards it builds on; the conformance files' README in the built docs
…, reordered to the cells' C order) and CPlantBox's hydraulics per segment and per node (add_segment_values, add_node_values: a segment takes its distal node's value), declared with their units and standard names; tests place each value where it belongs; doc/cpp.md
…sually means the branching order, which platforms name order (CPlantBox's organs, OpenAlea MTGs); every codec, the validator, the adapters, the conformance files and the docs; CPlantBox's organs keep their own order
…): File > Export of the 3D view to .glb, or the CLI's export3d, writes the project as an fspm-TF frame: the graph by GroImp.toDataStructure, the scene's geometry as one mesh meshed by GroIMP's glTF plugin, each triangle with its node's and its complexes' rows (an instance's geometry: the node instantiating it); test/run_in_groimp.sh grows simpleRapeseed headless in GroIMP 3.0.0, exports it and checks the frame (456,900 vertices, all with their node; both validators clean); CI job groimp-plugin; GroIMP's modules from its package registry
…frames (FSPM_scene.update: the sender, removed entities) in the schema, the Python and Julia codecs and the validator; the session's messages (spec/schema/coupling.schema.json: declarations with entity sets' rights owns/refines/follows and outputs/inputs, links with units, factors and changes of scale, turns, updates, stop); openalea.fspm_tf.coupling: resolution, stages, a coordinator holding the shared structure (id ranges, rights, removals down the scales), launching participants and recording the session, ZeroMQ and folder transports, replay of a recorded sequence (hold, linear), the participant's side; fspm-tf couple; ucum.conversion_factor; FspmTF.jl's participant (folder; ZeroMQ by FspmTFZMQExt), tested against the coordinator over both transports, in CI too; enum columns with missing values refused by the Python codec; the Coupling platforms page
…0.1 and 0.2 files stay valid, conformance files regenerated, expected values unchanged); links between two data structures through a mapping a participant provides (sum: amounts shared by weight, kept; mean: weighted mean), replays providing their mappings and declaring every set and variable of their frames; coupling conformance sessions (conformance/coupling: two_scales, two_data_structures; generate.py; fspm-tf couple-conformance) passed by the Python, Julia, C++ and Java participants over ZeroMQ and a folder; partial frames (update) in every codec and dump; the C++ participant (fspm_tf/coupling.hpp, libzmq) and the Java one (org.openalea.fspmtf.coupling, JeroMQ optional); CPlantBox's growing log and GroIMP's log (four runs) replayed as participants; the frame tools skip conformance/coupling; the coordinator's lookups vectorized and the Python codec's enum and text columns encoded without per-row loops (a 100,000-segment step: 99 ms instead of 230 ms); CI jobs for all of it
…nal companion of a sequence (spec/schema/views.schema.json), named configurations of layers; openalea.fspm_tf.views (reading, writing, checking against a frame, the selection, display options); the ParaView reader's Views and Configuration, one block per layer holding its entities only (frame_to_vtk(frame, views=, configuration=)); the macros apply_fspm_tf_views.py and save_fspm_tf_views.py; tests
…JSON parsed, each column and mesh decoded on first access (LazyColumns, LazyList; decoded columns are copies), frame.close() or a with block; the ParaView reader and replays use it (a replay decodes only the columns links use); the folder transport deletes each message once read unless the session keeps them (keepMessages in the welcome, Coordinator(keep_messages=), --keep-messages), in the Python, Julia, C++ and Java participants, the conformance sessions checking the folder is left empty; tests
…he reading guide's example at 0.3, the coupling schema and §11 in its path; the README (coupling sessions, schemas, conformance sessions, what each binding holds); the index page; the design note's status, §4.6 and §5.2 updated to what was decided (GLB partial frames over ZeroMQ or a folder, not Arrow; codecs in this repository); P4 and P5 done; 'draft for 0.3' wording removed; the API page lists LazyColumns, LazyList and the conformance module
…DE: isolate in the view or a new panel with its own camera) and clear_fspm_tf_selection, the picked cells grown to their entity at the scale with what it contains across layers, hidden layers shown for the selection only; the reader gives each cell its containing entities' ids and each block its data structure and scales; views checked in ParaView 6.2 (pvbatch, check_in_paraview.py --design, manual): no jsonschema needed, block names, cell data, colour map presets, ColorBy without an array, the representation saved, configurations switched; tests
…): ParaView's current selection taken at creation (a Selection input, Copy Active Selection), its Scale a drop-down of the frames' scales, the picked cells grown in every layer, following time steps; show_fspm_tf_selection the one macro left (isolate or a split panel, run again to go back); select_at_scale and clear_fspm_tf_selection removed; checked in ParaView 6.2 (pvbatch); tests
…ar-limited root growth and VirtualPlantLab's carbon model splitting the segments into layers by a PlantGraphs rule, a coupling session over ZeroMQ, the coordinator converting units, copying and averaging between scales, its record read back), by hand
…'s shoot (structural, owning their entity sets), metafspm's root water uptake (functional, its data structure built from CPlantBox's roots by RemoteComponent.join) and VirtualPlantLab's light and photosynthesis (functional, on a PlantGraphs graph rebuilt by to_graph); the coordinator linking them by standard name, name, a sum and a copy between scales, three stages, the plant recorded with its views; each side in its own process, run by hand
…ry (the GroIMP application's shape nodes do, which the plugin meshes), so each organ keeps its two ends (x1 ... z2, the vocabulary's segment ends), the internodes stacked, the leaves leaning out to alternate sides; drawn by ParaView's reader
…form, owner, own variables, vectors), linear derived fields (sum_k w_k (A_k v + b_k), operators dense, csr, or a sparse system solved when evaluated), shared parts (GLB files of their own keyed by the SHA-256 of their bytes, at parts/<key>.glb or embedded, listed in the index), sequences packed into a .fspm.zip archive; Python: Template, Operator, InstanceSet, DerivedField, Ragged, evaluate, placed_meshes, write(embed_parts=), write_parts, prune_parts, pack, unpack, reading archives like folders, the validator's reference checks, encoding3d pack/unpack/prune; the conformance case instances/ (other codecs skip it); tests
… own variables, their owners' and the ids containing them, their templates' constants), views' instances layers, a .fspm.zip opened as its folder, the derived fields of the instances a Select at scale holds rebuilt (rebuild_derived; Isolate, Show In Panel and Put Back as for any selection), the reader's Evaluate Derived Fields; check_in_paraview --instances by hand; README; tests
…e, ParaView, packing and the measured compressions, how a platform writes instances, derived fields and parts: a reduced network's eliminated nodes, a coarse cell's linear recovery), the API reference, the platforms' page, viewing and checking; tutorial 1's sections 5 (sections as instances of one shape, their cells' water potential a derived field) and 6 (the sequence packed into one file); README, governance, CHANGELOG
…ck on a platform's run (its last frame with derived fields, a few instances selected at their owners' scale, the rebuilt field compared with evaluate, isolated, put back)
…quence packed stored, deflate, lzma, and with every ZIP64 record; rewritten only when their members change); compare-all checks the instances' dumps (frames, evaluated derived fields within 1e-12 relative, embedded, parts, each archive's frames; --skip-instances for a 0.3 reader); the Python run dumps them and writes the instances as a sequence and an archive; the action validates written archives
…s), shared parts (Template, Operator; SHA-256 keys; embedded or parts/<key>.glb; add_part, frame_part), evaluate (dense, csr, solve by LU), .fspm.zip archives read and packed (minizip-ng: ZIP64, deflate, lzma; found or fetched), the index's parts; its conformance run dumps the instances and archives and writes the instances with its own parts; tests
…ds), shared parts (Template, Operator; SHA-256 keys; embedded or parts/<key>.glb; Parts.add, Parts.part), Instances.evaluate (dense, csr, solve by LU), .fspm.zip archives (ZIP64 central directory read here, deflate by java.util.zip, lzma by xz-java; packed stored or deflate by ZipOutputStream), the index's parts; its conformance run dumps the instances and archives and writes the instances with its own parts; InstancesTest
…lds), shared parts (Template, Operator; SHA-256 keys; embedded or parts/<key>.glb; add_part!, frame_part), evaluate (dense, csr, solve by sparse LU), .fspm.zip archives (ZipArchives.jl: ZIP64, stored, deflate, packing; lzma members by liblzma's raw decoder through XZ_jll), the index's parts; its conformance run dumps the instances and archives and writes the instances with its own parts; tests
…what each packs), the specification's §9 (archives/, the dumps compare-all compares), platforms, instances, README, CHANGELOG; compare's docstring for Sphinx
…ock, its instances placed by Select at scale for the entities it selects only (grow_entities, instance_rows_at; Expand Hidden Instances draws them all); instances blocks with the ids, rows and colour variables only (All Instance Arrays for every variable), arrays handed to VTK without copies; one frame read shared by the reader and the filter (open_frame, last two) and derived fields rebuilt once per open frame; Select at scale: default Scale 'picked' (views.picked_scale), the <Visibility replace_input="0"/> hint, Show In Panel hiding the selection Apply drew (Put Back shows it), missing_instances said once per time step with the plants that have some, rebuild errors raised; colouring among the arrays present (block_displays main_array) and redrawn when they change; placed_meshes' mesh an index; tests; check_in_paraview --large
…ance Arrays, Expand Hidden Instances, the picked Scale, choose a Scale and Apply then the buttons, Show In Panel, the no-sections message, --large), using.md, python.md (frame_period="1 d", the reader's frames), implementations.md (metafspm writes 0.4; its extras read by metafspm alone, absent_rows/none_rows), CHANGELOG
…es the archive aside, checks it (check_archive: every file of the sequence a member and nothing else, its size and CRC-32 read back, the archive valid with 0 errors), moves it into place, then removes the folder; a failed check keeps the folder and raises ArchiveCheckError; a folder holding other files refused before writing; encoding3d pack --keep-folder. validate_sequence takes a .fspm.zip (its parts were reported missing). Specification §8: an adaptive grid's cell refined again is the same entity and may have its id again, with the same level and index; the validator checks that (use case 1's soil: 3 errors -> 0). Tests, conformance run and ParaView check keep their folders, tutorial 1, docs, CHANGELOG
…write through set_values and read with values_at and column (g.property() is a read-only mapping), the plant models are CompositeModels with parts (tutorial 3's joining its session after super().__init__), the plants planted with planting([Planting(depth=0.01)]), time_step="6 h" and frame_period="step" (a number is seconds), scene.simulate with pack_at_finish=True (the frames read from frames.fspm.zip, the folder removed); 2a run (0 errors), 3 run with a Python stand-in for carbon.jl (no Julia here); READMEs (frames.fspm.zip, encoding3d's clone on other_platforms_bindings)
…(glb.write: the header, the JSON chunk, each buffer view from its array's memory and its padding); BufferBuilder keeps byte views of the arrays, glb.pack joins the same pieces once (to_bytes, part_bytes). Files byte-identical (conformance files, tests; metafspm use case 1's frames); 8 plants at day 12 (39 MB): the write's peak +0.19 -> +0.06 GB, with sections +0.24 -> +0.12 GB; tests
…s ignored by the packaging template's parts/ line (.gitignore now excepts it), so a checkout had the 0.4 instance scenes without their five parts and every codec's instance tests and conformance failed in CI (a clean clone: Python 30 failed -> 241 passed)
…CSR and solve operators), conformance_run.py among the recipe's test source files (test_compare), the evaluated.json files compared within the protocol's relative 1e-12 (their last digits follow the platform's BLAS: CI's OpenBLAS gave -0.1209000343524562 for -0.12090003435245619), every other committed file still byte for byte
…ata structure) leaves out its empty children in every codec (glTF-Validator: one error per operator part, failing the codecs' conformance and the validate job); operator parts' keys change, conformance instances, expected values and archives regenerated; CI: the coupling generator's JSON with LF line endings on Windows, the chosen instances' evaluation within 1e-12 (MKL), the validator steps printing each failing file's errors; CHANGELOG
…and the Python codec's conformance (the instances' CSR operators), numpy for the Julia coupling job (pip's dependencies are empty, numpy and jsonschema being conda's)
…ues (their last digits follow the platform's BLAS: CI's -0.11220714531088972 for -0.11220714531088974), which test_conformance compares within the protocol's 1e-12; every other file still byte for byte
@GeraultTr GeraultTr closed this Nov 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Propose binders to each platforms to begin collaborations Rename it

1 participant