s3dgraphy 1.6.0.dev16__tar.gz → 1.6.0.dev17__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.
- {s3dgraphy-1.6.0.dev16/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev17}/PKG-INFO +2 -2
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/README.md +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/datamodel_translations.json +16 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/em_visual_rules.json +39 -6
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/node_registry.generated.json +11 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +55 -2
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +52 -2
- s3dgraphy-1.6.0.dev17/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +8 -0
- s3dgraphy-1.6.0.dev17/src/s3dgraphy/JSON_config/src/2D/graph.svg +6 -0
- s3dgraphy-1.6.0.dev17/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +6 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/api.py +112 -7
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/container.py +2 -2
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/contract/connector.py +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/contract/consumer.py +10 -10
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/crdt.py +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/dtc/__init__.py +15 -0
- s3dgraphy-1.6.0.dev17/src/s3dgraphy/dtc/neighbourhood.py +253 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/geometry/store_backed.py +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/base_importer.py +67 -13
- s3dgraphy-1.6.0.dev17/src/s3dgraphy/importer/csv_importer.py +138 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/authoring.py +176 -33
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/__init__.py +8 -0
- s3dgraphy-1.6.0.dev17/src/s3dgraphy/nodes/georeferencing_node.py +233 -0
- s3dgraphy-1.6.0.dev17/src/s3dgraphy/photogrammetry/__init__.py +23 -0
- s3dgraphy-1.6.0.dev17/src/s3dgraphy/photogrammetry/delta.py +301 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/publication.py +2 -2
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/rights.py +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/study.py +2 -2
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17/src/s3dgraphy.egg-info}/PKG-INFO +2 -2
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy.egg-info/SOURCES.txt +13 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_api_surface.py +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_asset_dtc_protocol.py +1 -1
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_contract_consumer.py +3 -3
- s3dgraphy-1.6.0.dev17/tests/test_dtc_neighbourhood.py +327 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_mapping_authoring.py +14 -6
- s3dgraphy-1.6.0.dev17/tests/test_mapping_csv_and_relations.py +320 -0
- s3dgraphy-1.6.0.dev17/tests/test_photogrammetry_delta.py +291 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_promotion.py +1 -1
- s3dgraphy-1.6.0.dev17/tests/test_semantic_purity.py +185 -0
- s3dgraphy-1.6.0.dev17/tests/test_visual_assets.py +104 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/em.ttl +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/resources/minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/tests/test_xlsx_importer_graph_init.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: s3dgraphy
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev17
|
|
4
4
|
Summary: 3D Stratigraphic Graph Management Library for archaeological and heritage applications
|
|
5
5
|
Author-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
|
|
6
6
|
Maintainer-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
|
|
@@ -274,7 +274,7 @@ The rule the other repos inherit, in one line: *if an endpoint needs to compute
|
|
|
274
274
|
something about a graph, that something belongs here.* This library has no web
|
|
275
275
|
framework and no socket on purpose — what it does can be proved on a table.
|
|
276
276
|
|
|
277
|
-
**The whole map:** [`ARCHITECTURE-SYSTEM.md`](../
|
|
277
|
+
**The whole map:** [`ARCHITECTURE-SYSTEM.md`](../stratigraph-server/docs/ARCHITECTURE-SYSTEM.md).
|
|
278
278
|
|
|
279
279
|
---
|
|
280
280
|
|
|
@@ -198,7 +198,7 @@ The rule the other repos inherit, in one line: *if an endpoint needs to compute
|
|
|
198
198
|
something about a graph, that something belongs here.* This library has no web
|
|
199
199
|
framework and no socket on purpose — what it does can be proved on a table.
|
|
200
200
|
|
|
201
|
-
**The whole map:** [`ARCHITECTURE-SYSTEM.md`](../
|
|
201
|
+
**The whole map:** [`ARCHITECTURE-SYSTEM.md`](../stratigraph-server/docs/ARCHITECTURE-SYSTEM.md).
|
|
202
202
|
|
|
203
203
|
---
|
|
204
204
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "s3dgraphy"
|
|
7
|
-
version = "1.6.0.
|
|
7
|
+
version = "1.6.0.dev17"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -1081,6 +1081,22 @@
|
|
|
1081
1081
|
"label": {
|
|
1082
1082
|
"en": "Annotation Region"
|
|
1083
1083
|
}
|
|
1084
|
+
},
|
|
1085
|
+
"GCPSetNode": {
|
|
1086
|
+
"description": {
|
|
1087
|
+
"en": "The set of ground control points a registration was (or will be) solved from. data.points is a list of {id, world:[x,y,z], observations:[{image, pixel:[x,y]}], uncertainty?}; data.crs names the frame the world coordinates are in (null = a site-local grid, which is a different statement from absent). Minimum 3 observed non-collinear points for a similarity to be determined — reported by `solvable`, enforced by the runner, never at construction (a set being assembled in the field is legitimately incomplete)."
|
|
1088
|
+
},
|
|
1089
|
+
"label": {
|
|
1090
|
+
"en": "Ground control points"
|
|
1091
|
+
}
|
|
1092
|
+
},
|
|
1093
|
+
"RegistrationTransformNode": {
|
|
1094
|
+
"description": {
|
|
1095
|
+
"en": "The 7-parameter similarity (rotation 3x3 row-major, translation [x,y,z], positive scale) that places a produced model, with data.rms and data.residuals — the error bar, stored beside the claim rather than in a log nobody keeps. data.crs is the frame the model lands IN; null means a site-local frame (mode 'local'), which is NOT the same sentence as an absent transform. Re-registration is a NEW node produced by a NEW crmdig:D7; the superseded one is never edited."
|
|
1096
|
+
},
|
|
1097
|
+
"label": {
|
|
1098
|
+
"en": "Registration transform"
|
|
1099
|
+
}
|
|
1084
1100
|
}
|
|
1085
1101
|
}
|
|
1086
1102
|
}
|
{s3dgraphy-1.6.0.dev16 → s3dgraphy-1.6.0.dev17}/src/s3dgraphy/JSON_config/em_visual_rules.json
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"formal_language": "EM",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.16",
|
|
4
4
|
"_note_material_vs_qualia_color": [
|
|
5
5
|
"DUE COSE DIVERSE CHE SI CHIAMANO ENTRAMBE color. Non confonderle: e gia successo.",
|
|
6
6
|
"1) QUI, in node_styles.<tipo>.style.material.rgba_color — il COLORE DEL MATERIALE BLENDER del proxy 3D, in float LINEARI. UNA sola chiave: `rgba_color`. Fino a S8 il file ne usava due (`color` sui 13 tipi stratigrafici, `rgba_color` sugli altri) e get_material_color() ne leggeva una sola, restituendo None per 21 tipi su 38; ora sono unificate e la vecchia `color` e letta solo come tolleranza verso file scritti prima. Un tipo che non diventa mai una mesh NON ha material affatto (i contenitori di gruppo, e da S7 i dieci nodi che rendono per icona): per loro get_material_color() torna None, ed e corretto.",
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
"In breve: qui si decide di che colore DISEGNARE una US; li si registra di che colore ERA."
|
|
10
10
|
],
|
|
11
11
|
"_changelog": {
|
|
12
|
+
"1.6.16": "Asset declarations made TRUE. Four styles named a 2D file that is not there — SE.png, TSU.svg, serUSD.svg and unknown.png (which never existed) — and GRAPH named two, so it drew no icon at all. icons.ts returns null for a missing file and the canvas quietly draws the shape, so all five failed silently. Now: graph.svg authored (neutral gray, three nodes and their edges, the meta-container), unknown points at the generic_node.svg that exists, the three stale halves name the file that is there. Enforced by tests/test_visual_assets.py; the 16 unmodelled .glb are REPORTED (there and in sync-datamodels.sh), not asserted \u2014 a placeholder that looks official is harder to notice than an absence.",
|
|
13
|
+
"1.6.15": "Georeferencing gets its symbol on the canvas: node_styles GCP (GCPSetNode, crosshair) and RGT (RegistrationTransformNode, axes + rotation arc), in the same #FF6600 reference family as GEO/SS/LINK, each with its own 2D icon. ADDITIVE. Also 1.6.14-era: dtc_kinds.process.photogrammetry. Note the limit of a per-TYPE rule: whether a transform is georeferenced or a site-local frame is an INSTANCE fact (data.crs) and is read from the has_gcp_set edge, not from the style.",
|
|
12
14
|
"1.6.14": "BUGFIX-GLYPH follow-up (2026-08-05, E.D.): SE now renders its GLYPH in the scene (the new SE.svg, a stratigraphic-section box with a writable middle band) instead of a bare triangle, so a name can be written inside it. Added SE to 2d_render_glyph_types (aspect 1.331 from the SVG viewBox) and switched SE 2d_icon_prefer to vector (the raster SE.png is the stale stipple; the new symbol is the SVG). Dropped the interim shape_bbox=square. The shape:triangle stays declared for other consumers but the 2D scene draws the glyph. NOTE: verify the SVG carries a light background for dark-canvas legibility (like combiner.svg).",
|
|
13
15
|
"1.6.13": "BUGFIX-GLYPH (2026-08-05): SE (StratigraphicEvent) gains shape_bbox=\"square\" on its style, like BR. Its triangle was drawn in the wide default 90x32 box, leaving the connect handle far from the glyph; a square bbox (side = min(w,h)) makes the triangle sit in a ~32x32 box with the handle adjacent, matching BR (diamond, square) and the glyph types. No shape_scale: unlike BR (a 0.7 marker) the SE triangle stays full-size. The SCENE representation of SE remains the triangle shape, not the raster icon (S10/POL5 decision unchanged).",
|
|
14
16
|
"1.6.12": "EM3 - `2d_render_glyph_types` guadagna una tabella `aspect`: la larghezza del box di un nodo-glifo e la sua ALTEZZA per l'aspect del disegno, quindi tutti i glifi hanno la stessa altezza e differiscono solo in larghezza (regola E.D.). Default 1.0 = quadrato, che e cio che sono gli undici glifi DTC dopo l'autocrop di POL4 ed extractor/combiner per costruzione; l'unico davvero non quadrato oggi e `author` (0.875 = 448/512). I numeri sono STATICI e misurati una volta dai file: un aspect letto da naturalWidth a runtime farebbe dipendere il layout da quando un bitmap finisce di decodificare (box che salta, due run diversi sullo stesso documento). Il prezzo di un numero statico e che puo diventare stantio se un asset viene ridisegnato: da questa versione sync-datamodels.sh ri-misura ogni file vendorato e AVVISA se una dichiarazione sbaglia di oltre il 2%.",
|
|
@@ -224,7 +226,7 @@
|
|
|
224
226
|
"serUSD": {
|
|
225
227
|
"3d_file": "src/3D/serUSD.glb",
|
|
226
228
|
"2d_file_rast": "src/2D/serUSD.png",
|
|
227
|
-
"2d_file_vect": "src/2D/serUSD.
|
|
229
|
+
"2d_file_vect": "src/2D/serUSD.png",
|
|
228
230
|
"style": {
|
|
229
231
|
"material": {
|
|
230
232
|
"rgba_color": {
|
|
@@ -287,7 +289,7 @@
|
|
|
287
289
|
"TSU": {
|
|
288
290
|
"3d_file": "src/3D/TSU.glb",
|
|
289
291
|
"2d_file_rast": "src/2D/TSU.png",
|
|
290
|
-
"2d_file_vect": "src/2D/TSU.
|
|
292
|
+
"2d_file_vect": "src/2D/TSU.png",
|
|
291
293
|
"style": {
|
|
292
294
|
"material": {
|
|
293
295
|
"rgba_color": {
|
|
@@ -332,7 +334,7 @@
|
|
|
332
334
|
"SE": {
|
|
333
335
|
"_comment": "Stratigraphic Event: l'ATTO che crea, modifica o distrugge un'unita — un terremoto che fa cadere l'intonaco, una demolizione, l'inizio di un cantiere. Non e materia, e un processo, e per questo non appartiene a nessuna delle famiglie cromatiche della materia (rosso reale, verde/blu virtuale, arancio documentario, giallo special find, grigio negativo). Prende il TEAL della famiglia attivita: un ActivityNodeGroup e un fascio di atti e porta gia la linguetta ciano #CCFFFF, quindi il ciano e l'unico colore del linguaggio che dice gia 'e successo qualcosa' invece di 'qualcosa c'e'. Curato in S10 (2026-08-02): fino ad allora SE portava il segnaposto #BC0000 mai scelto, che per giunta contraddiceva il proprio bordo nero, e il node datamodel dichiarava il simbolo 'to be defined'. Il nero di BR e stato scartato di proposito: un material nero rende un proxy illeggibile in viewport, e i proxy SE si vedono (Heriverse li disegna fra i suoi stratigraphicTypes). POL5 (2026-08-04): l'ICONA e il raster (`2d_icon_prefer: raster`), come per NARR e per la stessa ragione — SE.svg e un tratteggio vettorializzato da 284 KB per un glifo che nessun renderer disegna oltre i 30 px. Il vettore resta dichiarato perche esiste; il flag dice quale dei due DISEGNARE. Il PNG a 256 px e reso DA quell'SVG, quindi i due non possono divergere. Nel grafo SE resta comunque un TRIANGOLO disegnato (shape), non l'icona: il raster serve a palette ed elenchi.",
|
|
334
336
|
"3d_file": "src/3D/SE.glb",
|
|
335
|
-
"2d_file_rast": "src/2D/SE.
|
|
337
|
+
"2d_file_rast": "src/2D/SE.svg",
|
|
336
338
|
"2d_file_vect": "src/2D/SE.svg",
|
|
337
339
|
"2d_icon_prefer": "vector",
|
|
338
340
|
"style": {
|
|
@@ -490,7 +492,7 @@
|
|
|
490
492
|
"GRAPH": {
|
|
491
493
|
"_comment": "Top-level container node representing the EM graph itself. Anchor for graph-wide metadata propagation (default author, license, embargo, epoch). Rendered as a dashed rounded rectangle to read as a meta-container, neutral gray to stay visually distinct from stratigraphic and paradata nodes. Graphml palette prefix: 'G.'.",
|
|
492
494
|
"file_3d": "src/3D/graph.glb",
|
|
493
|
-
"2d_file_rast": "src/2D/graph.
|
|
495
|
+
"2d_file_rast": "src/2D/graph.svg",
|
|
494
496
|
"2d_file_vect": "src/2D/graph.svg",
|
|
495
497
|
"style": {
|
|
496
498
|
"material": {
|
|
@@ -542,6 +544,32 @@
|
|
|
542
544
|
},
|
|
543
545
|
"label_position": "over"
|
|
544
546
|
},
|
|
547
|
+
"GCP": {
|
|
548
|
+
"_comment": "Ground control points — the EVIDENCE behind a registration: which point was seen on which photograph at which pixel, and where it is in the world. The NODE IS THE SET, never the single GCP (data.points), which is why the icon shows one target among several marks. Same orange as the other reference/georeferencing nodes (GEO, SS, LINK) because it is that family; the crosshair shape distinguishes measurement-of-a-place from position-of-a-site. Graphml palette prefix: 'GC.'.",
|
|
549
|
+
"file_3d": "src/3D/gcp_set.glb",
|
|
550
|
+
"2d_file_rast": "src/2D/gcp_set.svg",
|
|
551
|
+
"2d_file_vect": "src/2D/gcp_set.svg",
|
|
552
|
+
"style": {
|
|
553
|
+
"border_color": "#FF6600",
|
|
554
|
+
"fill_color": "#FFFFFF",
|
|
555
|
+
"border_style": "solid",
|
|
556
|
+
"shape": "crosshair"
|
|
557
|
+
},
|
|
558
|
+
"label_position": "over"
|
|
559
|
+
},
|
|
560
|
+
"RGT": {
|
|
561
|
+
"_comment": "Registration transform — the SOLUTION: the 7-parameter similarity that places a produced model, with its RMS. Drawn as axes plus a rotation arc. NOTE, and it is a limit of a per-TYPE rule: whether a given transform is georeferenced (data.crs set) or a site-local frame (crs null) is an INSTANCE fact and cannot be encoded here — a reader tells the two modes apart by the presence of the has_gcp_set edge, which is why that edge exists. Graphml palette prefix: 'RG.'.",
|
|
562
|
+
"file_3d": "src/3D/registration_transform.glb",
|
|
563
|
+
"2d_file_rast": "src/2D/registration_transform.svg",
|
|
564
|
+
"2d_file_vect": "src/2D/registration_transform.svg",
|
|
565
|
+
"style": {
|
|
566
|
+
"border_color": "#FF6600",
|
|
567
|
+
"fill_color": "#FFFFFF",
|
|
568
|
+
"border_style": "solid",
|
|
569
|
+
"shape": "axes"
|
|
570
|
+
},
|
|
571
|
+
"label_position": "over"
|
|
572
|
+
},
|
|
545
573
|
"GEO": {
|
|
546
574
|
"file_3d": "src/3D/geo.glb",
|
|
547
575
|
"2d_file_rast": "src/2D/geo_position.svg",
|
|
@@ -628,7 +656,7 @@
|
|
|
628
656
|
},
|
|
629
657
|
"unknown": {
|
|
630
658
|
"file_3d": "src/3D/unknown.glb",
|
|
631
|
-
"file_2d": "src/2D/
|
|
659
|
+
"file_2d": "src/2D/generic_node.svg",
|
|
632
660
|
"style": {
|
|
633
661
|
"border_color": "#FF0000",
|
|
634
662
|
"fill_color": "#FFFFFF",
|
|
@@ -835,6 +863,11 @@
|
|
|
835
863
|
"topographic": { "label": "Topographic survey", "glyph": "01_topographicnetwork", "description": "Total-station / topographic-network acquisition." }
|
|
836
864
|
},
|
|
837
865
|
"process": {
|
|
866
|
+
"photogrammetry": {
|
|
867
|
+
"label": "Photogrammetry",
|
|
868
|
+
"glyph": "03_mesh",
|
|
869
|
+
"description": "Structure-from-motion reconstruction: a cluster of photographs becomes a 3D model. A specific kind of transformation, named because what a reader needs to know about a mesh is which family of process made it \u2014 and because the placement (RegistrationTransform) only means something for this one."
|
|
870
|
+
},
|
|
838
871
|
"transformation": { "label": "Transformation", "glyph": "00_transformation", "description": "A processing/transformation step turning inputs into produced digital objects." }
|
|
839
872
|
},
|
|
840
873
|
"acquisition": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "by `python -m s3dgraphy.tools.sync_node_datamodel` — DO NOT hand-edit. The flat class hierarchy (parent/node_type/description) is derived from the Python Node subclasses; hand-authored semantics and CIDOC mappings live in s3Dgraphy_node_datamodel.json.",
|
|
3
|
-
"s3Dgraphy_data_model_version": "1.6.
|
|
3
|
+
"s3Dgraphy_data_model_version": "1.6.4",
|
|
4
4
|
"node_types": {
|
|
5
5
|
"ActivityNodeGroup": {
|
|
6
6
|
"parent": "GroupNode",
|
|
@@ -77,6 +77,11 @@
|
|
|
77
77
|
"node_type": "FunctionalUnitNodeGroup",
|
|
78
78
|
"description": "Typed aggregation of the stratigraphic units that make up one"
|
|
79
79
|
},
|
|
80
|
+
"GCPSetNode": {
|
|
81
|
+
"parent": "Node",
|
|
82
|
+
"node_type": "gcp_set",
|
|
83
|
+
"description": "The ground control points a registration was (or will be) solved from."
|
|
84
|
+
},
|
|
80
85
|
"GeoPositionNode": {
|
|
81
86
|
"parent": "Node",
|
|
82
87
|
"node_type": "geo_position",
|
|
@@ -157,6 +162,11 @@
|
|
|
157
162
|
"node_type": "property",
|
|
158
163
|
"description": "Nodo che rappresenta una proprietà associata a un altro nodo."
|
|
159
164
|
},
|
|
165
|
+
"RegistrationTransformNode": {
|
|
166
|
+
"parent": "Node",
|
|
167
|
+
"node_type": "registration_transform",
|
|
168
|
+
"description": "The similarity that places a model — 7 parameters and what they cost."
|
|
169
|
+
},
|
|
160
170
|
"RepresentationModelDocNode": {
|
|
161
171
|
"parent": "RepresentationNode",
|
|
162
172
|
"node_type": "representation_model_doc",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"s3Dgraphy_connections_model_version": "1.6.
|
|
2
|
+
"s3Dgraphy_connections_model_version": "1.6.13",
|
|
3
3
|
"description": "s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.11 (batch ingestion, 2026-08-17): two widenings for bulk assets. has_author.source DTCProcessNode -> DTCNode, so an ACQUISITION event (D12) can carry the author of a whole lot; dtc_had_input.target += DTCNode, so a DECLARED derivation can name a whole acquisition as its input (one input, not 500 edges) — that case projects as prov:wasInformedBy, not prov:used/L10, which range over digital objects and would be wrong for an event. v1.6.8 (MIG1-A): graph-scope rights metadata become first-class nodes (DP-65). is_in_paradata_nodegroup.source += AuthorNode/LicenseNode/EmbargoNode and has_paradata_nodegroup.source += GraphNode, so the graph-self node (GraphNode) owns a graph-scope ParadataNodeGroup whose members are the AuthorNode/LicenseNode/EmbargoNode (+ the DP-65 GeoPositionNode shift), replacing the legacy graph.data['author_name'/'license'/'embargo'] fields. The Data Funnel canvas tier now reads these member nodes (one reader per scope); a one-shot load-time migration materialises the legacy fields into nodes. v1.6.7 (BUGFIX-CONN3): closes the two silent follow-ups of CONN2. has_documentation.source gains PropertyNode (judicious widening): the honest reading of a legacy yEd dashed PropertyNode→Document connector is P70i_is_documented_in ('the property is documented in this source'), NOT has_visual_reference (which CONN2 moved to PropertyNode→ResourceNode). The import heuristic (import_graphml.enhance_edge_type) now routes PropertyNode→Document to has_documentation and the rarer CombinerNode/ParadataNode→Document to generic_connection+warning (a combiner aggregates extractors and cites no document; the DTC chain is NOT synthesised at import). Shelf: hat_as_document no longer offers has_visual_reference (a Document attaches via has_documentation/extracted_from); a new hat_as_visual_resource attaches a ResourceNode image via has_visual_reference from a PropertyNode — the correct home after CONN2. No illegal edge is produced or expected. v1.6.6 (BUGFIX-CONN2): closes the two open domain questions on has_visual_reference (E.D. 2026-08-05). SOURCE narrowed to exactly [PropertyNode]: only a property (an asserted quale) is what a visual reference illustrates; the generic ParadataNode entry is dropped, which — because ExtractorNode, CombinerNode and DocumentNode are all subclasses of ParadataNode — now excludes them by class hierarchy (a PropertyNode is neither a sibling nor a parent of the others). The extractor/combiner denied_edges from v1.6.5 are therefore REDUNDANT for this edge but are KEPT as a defensive guard (they still bite if the source is ever broadened back to ParadataNode). TARGET changed from [DocumentNode] to [ResourceNode]: the oddity was that a visual reference pointed at a source-document (E31) rather than at a visual resource. It now points at the resource-layer image node (ResourceNode = E73 Information Object / ExternalResourceReference — the same P67 hinge RM/RMDoc use via has_linked_resource), keeping DocumentNode = fonte. CIDOC stays P138i_has_representation with the target co-typed E36 Visual Item: E36 is a subclass of E73, so co-typing a ResourceNode as E36 is range-consistent (it was NOT, strictly, for an E31 Document). FOLLOW-UPS flagged for E.D. (see end-of report): (a) import_graphml.enhance_edge_type still hardcodes PropertyNode/Combiner/Paradata→DocumentNode ⇒ has_visual_reference (legacy yEd heuristic, now produces an edge this datamodel refuses) — needs a domain decision on what legacy paradata→document edges become; (b) shelf.hat_as_document lists has_visual_reference among the Document-attach edges — it can no longer validate (target is ResourceNode), so a paradata attach silently no longer attaches; a hat_as_visual_resource(ResourceNode)+has_visual_reference path is the proper home. v1.6.5 (BUGFIX-CONN): has_visual_reference is no longer offered FROM an ExtractorNode or a CombinerNode. An extractor toward a document expresses ONLY extracted_from (its relation to the source is the extraction, not an illustration); a combiner aggregates extractors and illustrates nothing. Because ExtractorNode, CombinerNode and PropertyNode are all subclasses of ParadataNode, and has_visual_reference.source lists ParadataNode, simply dropping the two subtypes from the source list would not exclude them (they still match via the parent class). So this is expressed with node_type_restrictions (keyed by RUNTIME node_type, like USNt) using a new denied_edges blacklist (the mirror of allowed_edges): extractor/combiner deny has_visual_reference. PropertyNode and any other legitimate ParadataNode source keep it unchanged. OPEN domain question for E.D.: which paradata node-types may legitimately have a visual reference (today source = PropertyNode/ExtractorNode/CombinerNode/ParadataNode) — extractor/combiner removed; the rest left as-is, not invented. v1.6.1: has_paradata_nodegroup source extended to include EpochNode — an epoch can now own a ParadataNodeGroup holding its temporal-definition properties (e.g. absolute_time_start/end as PropertyNodes with paradata provenance), mirroring how a StratigraphicNode carries its paradata group. v1.6.0 (paired with node datamodel v1.6.0) introduces: bug fix on is_in_paradata_nodegroup (typo 'ProperrtyNOde' → 'PropertyNode'); semantic fix on has_documentation (P104_is_subject_to → P70i_is_documented_in — P104 means 'subject to a legal right', not 'has documentation'); deprecation of has_timebranch as duplicate of is_in_timebranch (the latter is the canonical one — used by import_graphml.py and graphml_patcher.py; the former exists only in config JSON); component list aligned with node datamodel (HDT-O, PROV-O added). HDT-O containment properties (hdto:contains_HDT, hdto:contains_SU, hdto:isPrimary) and physical-relation discriminator subproperties (em:abuts, em:cuts, em:fills, em:overlies, em:bonded_to, em:equals as rdfs:subPropertyOf crmarchaeo:AP11_has_physical_relation) to be added in v1.6.1. v1.5.3 introduced canonical/reverse directionality with verb-based labels for clear socket identification in node editors. v1.5.4 added 'has_visual_reference' edge type. v1.5.5 added 'is_in_location' edge type with context-sensitive CIDOC mapping (P53 for node→location, P89 for the recursive location→location hierarchy) and an optional 'is_primary' boolean attribute (s3d:isPrimary, proposed). v1.6.3: added node_type_restrictions — a per-node-type narrowing of the class-level edge rules (POL5): USN (the NEUTRAL stratigraphic unit, a risparmio) takes is_after/is_before and nothing else, because a void cannot cut, fill, abut or bond. v1.6.4 (POL6): the same restriction, moved to USNt — the tokens went back to their conventional meanings, USN = US negativa (all relations, it is a unit of the sequence) and USNt = US neutra (sequence only).",
|
|
4
4
|
"components": [
|
|
5
5
|
"CIDOC-CRM",
|
|
@@ -1311,6 +1311,7 @@
|
|
|
1311
1311
|
},
|
|
1312
1312
|
"dtc_had_input": {
|
|
1313
1313
|
"name": "dtc_had_input",
|
|
1314
|
+
"dtc_role": "chain",
|
|
1314
1315
|
"label": "DTC process had input",
|
|
1315
1316
|
"description": "DTC chain: a processing step (DTCProcess) consumed an input RESOURCE — a raw acquisition (photo/laser scan/…) = the ResourceNode (E73/D1). ECHOES DTC substrate profile. Dual projection CRMdig + PROV-O.",
|
|
1316
1317
|
"reverse": {
|
|
@@ -1337,6 +1338,7 @@
|
|
|
1337
1338
|
},
|
|
1338
1339
|
"dtc_had_output": {
|
|
1339
1340
|
"name": "dtc_had_output",
|
|
1341
|
+
"dtc_role": "chain",
|
|
1340
1342
|
"label": "DTC process had output",
|
|
1341
1343
|
"description": "DTC chain: a processing step (DTCProcess) produced a RESOURCE (a file: mesh/orthophoto/table…) — the ResourceNode (E73/D1), which is the SHARED HINGE that a RepresentationModel and/or a Document may reference. The produced ResourceNode carries data.dtc_kind + resource_type. ECHOES DTC substrate profile. Dual projection CRMdig + PROV-O.",
|
|
1342
1344
|
"reverse": {
|
|
@@ -1362,6 +1364,7 @@
|
|
|
1362
1364
|
},
|
|
1363
1365
|
"dtc_derived_from": {
|
|
1364
1366
|
"name": "dtc_derived_from",
|
|
1367
|
+
"dtc_role": "chain",
|
|
1365
1368
|
"label": "DTC output derived from input",
|
|
1366
1369
|
"description": "DTC chain: the produced RESOURCE (ResourceNode) was derived from an acquisition (DTCInput) — the direct provenance shortcut alongside the process. ECHOES DTC substrate profile. Dual projection CRMdig + PROV-O.",
|
|
1367
1370
|
"reverse": {
|
|
@@ -1384,6 +1387,55 @@
|
|
|
1384
1387
|
]
|
|
1385
1388
|
}
|
|
1386
1389
|
},
|
|
1390
|
+
"has_registration_transform": {
|
|
1391
|
+
"name": "has_registration_transform",
|
|
1392
|
+
"label": "Placed by",
|
|
1393
|
+
"description": "A produced RESOURCE (a reconstructed model) is placed in space by a RegistrationTransform — the 7-parameter similarity solved for it. The absence of this edge is a statement too: a model nobody placed. Re-registration adds a NEW transform node and a new edge; the superseded one stays, because moving a model is provenance, not an edit.",
|
|
1394
|
+
"reverse": {
|
|
1395
|
+
"name": "places",
|
|
1396
|
+
"label": "Places the model"
|
|
1397
|
+
},
|
|
1398
|
+
"mapping": {
|
|
1399
|
+
"cidoc": "P67i_is_referred_to_by",
|
|
1400
|
+
"cidoc_extension": "CIDOC-CRM",
|
|
1401
|
+
"extension_mapping": null,
|
|
1402
|
+
"extension_name": null,
|
|
1403
|
+
"rationale": "The transform is an information object ABOUT the model, so the CRM property runs transform -P67_refers_to-> model. The EM-native edge reads from the model (the direction every consumer traverses: 'where do I put this file?'), so the projection is the inverse P67i. No PROV-O dual: PROV has nothing to say about spatial placement, and inventing one would be noise."
|
|
1404
|
+
},
|
|
1405
|
+
"allowed_connections": {
|
|
1406
|
+
"_note": "Source is the ResourceNode (E73/D1), the shared hinge a RepresentationModel or a Document may reference — the same target the DTC output edge uses, so the model that was produced and the model that was placed are one node.",
|
|
1407
|
+
"source": [
|
|
1408
|
+
"ResourceNode"
|
|
1409
|
+
],
|
|
1410
|
+
"target": [
|
|
1411
|
+
"RegistrationTransformNode"
|
|
1412
|
+
]
|
|
1413
|
+
}
|
|
1414
|
+
},
|
|
1415
|
+
"has_gcp_set": {
|
|
1416
|
+
"name": "has_gcp_set",
|
|
1417
|
+
"label": "Solved from control points",
|
|
1418
|
+
"description": "A RegistrationTransform was solved from a GCPSet — the evidence behind the placement. Present ONLY in absolute mode: a transform with no such edge is a site-local frame, and the missing edge is what tells a reader so without having to trust a flag.",
|
|
1419
|
+
"reverse": {
|
|
1420
|
+
"name": "controlled_registration",
|
|
1421
|
+
"label": "Controlled this registration"
|
|
1422
|
+
},
|
|
1423
|
+
"mapping": {
|
|
1424
|
+
"cidoc": "L21_used_as_derivation_source",
|
|
1425
|
+
"cidoc_extension": "CRMdig",
|
|
1426
|
+
"extension_mapping": "prov:wasDerivedFrom",
|
|
1427
|
+
"extension_name": "PROV-O",
|
|
1428
|
+
"rationale": "The same argument dtc_derived_from already makes, applied one layer up: CRM routes derivation through the event, and the event (crmdig:D7) IS in the graph — this edge is the direct shortcut between the derived object (the transform) and its source (the control set), in the same direction, so it can be read without naming the process."
|
|
1429
|
+
},
|
|
1430
|
+
"allowed_connections": {
|
|
1431
|
+
"source": [
|
|
1432
|
+
"RegistrationTransformNode"
|
|
1433
|
+
],
|
|
1434
|
+
"target": [
|
|
1435
|
+
"GCPSetNode"
|
|
1436
|
+
]
|
|
1437
|
+
}
|
|
1438
|
+
},
|
|
1387
1439
|
"generic_connection": {
|
|
1388
1440
|
"name": "generic_connection",
|
|
1389
1441
|
"label": "Generic connection",
|
|
@@ -1404,5 +1456,6 @@
|
|
|
1404
1456
|
]
|
|
1405
1457
|
}
|
|
1406
1458
|
}
|
|
1407
|
-
}
|
|
1459
|
+
},
|
|
1460
|
+
"_dtc_role_note": "dtc_role marks an edge as part of the DTC CHAIN — the three edges a provenance walk may traverse. It exists because the classification used to be written twice: by name on the node (s3dgraphy.dtc) and by PREFIX in the client (startsWith('dtc_')). The prefix presumed every future dtc_* edge would be chain, so a dtc_* edge that is CONTEXT — a dtc_annotated_by, say — would have been a corridor on the client and not on the node: two rules with one name. Now the datamodel says it once and both sides read it. An edge WITHOUT dtc_role is context by construction: adding one is a JSON entry, and it is born non-traversable."
|
|
1408
1461
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"s3Dgraphy_data_model_version": "1.6.
|
|
3
|
-
"description": "s3Dgraphy nodes datamodel including node types with CIDOC-CRM mappings. v1.6.3 re-reads SemanticShapeNode as a PAYLOAD carrier: the proxy of a unit is now a PropertyNode of qualia type 'geometry' that points at the shape (has_semantic_shape), so the proxy inherits the paradata chain it never had. Breaking for consumers that read the proxy as a standalone SemanticShape. v1.6.2 adds AnnotationRegionNode (em:AnnotationRegion, subclass of crm:E36_Visual_Item): the geometry of a 2D annotation in NORMALISED image space, distinct from SemanticShapeNode (3D scene geometry, crmgeo:SP5) - the semantics of the 2D annotator, defined before any canvas exists. v1.6.0 inaugurates a systematic CIDOC-CRM mapping revision: complete audit of all node types against CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMsci, CRMgeo; replacement of legacy 'cidoc_s3d' pseudo-class names (invented strings without IRI or superclass declaration) with formal em:/s3d: IRIs declared as proper subclasses of CRM classes; introduction of CRMinf as primary (not alternative) for the paradata chain (ParadataNode, PropertyNode interpretive case, ExtractorNode, CombinerNode); introduction of PROV-O for AuthorNode to cover both human and AI agents; alignment with the Heritage Digital Twin Ontology (HDT-O) for containment / granularity properties; LocationNodeGroup (v1.5.3) adopted as the reference pattern (CIDOC-native composition via P2_has_type → E55 Type instances, with explicit extension_status and rationale). Companion deliverables: em.ttl (formal EM extension ontology, dereferenceable via w3id.org/em/) and hdto_extension.ttl (HDT-O granularity properties: contains_HDT, contains_SU, isPrimary). v1.5.4 added RSF (Reused Special Find — spolia) as a stratigraphic subtype, octagon with red border, family=real, is_series=false. Originating DP: DP-26 (spolia project, last DP before the EM 1.5 cut). v1.5.3 added LocationNodeGroup (E53 Place + E55 Type) for spatial / locational membership orthogonal to ActivityNodeGroup (intention) and EpochNode (time). v1.5.2 added family + is_series classification metadata on stratigraphic subtypes.",
|
|
2
|
+
"s3Dgraphy_data_model_version": "1.6.4",
|
|
3
|
+
"description": "s3Dgraphy nodes datamodel including node types with CIDOC-CRM mappings. v1.6.4 adds the ADDITIVE georeferencing_nodes section (GCPSetNode = em:GCPSet, RegistrationTransformNode = em:RegistrationTransform, both subclasses of crm:E73_Information_Object with their own extension URIs so the RDF projection stays bijective): the CONTROL and the SOLUTION that place a produced model in the world, introduced with the photogrammetry processing connector. The two modes of that connector are the SHAPE of the graph (a transform with a CRS that has_gcp_set points at = absolute; a transform with crs=null and no control set = a site-local frame; no transform at all = nobody placed it), never a flag. No existing family changed. v1.6.3 re-reads SemanticShapeNode as a PAYLOAD carrier: the proxy of a unit is now a PropertyNode of qualia type 'geometry' that points at the shape (has_semantic_shape), so the proxy inherits the paradata chain it never had. Breaking for consumers that read the proxy as a standalone SemanticShape. v1.6.2 adds AnnotationRegionNode (em:AnnotationRegion, subclass of crm:E36_Visual_Item): the geometry of a 2D annotation in NORMALISED image space, distinct from SemanticShapeNode (3D scene geometry, crmgeo:SP5) - the semantics of the 2D annotator, defined before any canvas exists. v1.6.0 inaugurates a systematic CIDOC-CRM mapping revision: complete audit of all node types against CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMsci, CRMgeo; replacement of legacy 'cidoc_s3d' pseudo-class names (invented strings without IRI or superclass declaration) with formal em:/s3d: IRIs declared as proper subclasses of CRM classes; introduction of CRMinf as primary (not alternative) for the paradata chain (ParadataNode, PropertyNode interpretive case, ExtractorNode, CombinerNode); introduction of PROV-O for AuthorNode to cover both human and AI agents; alignment with the Heritage Digital Twin Ontology (HDT-O) for containment / granularity properties; LocationNodeGroup (v1.5.3) adopted as the reference pattern (CIDOC-native composition via P2_has_type → E55 Type instances, with explicit extension_status and rationale). Companion deliverables: em.ttl (formal EM extension ontology, dereferenceable via w3id.org/em/) and hdto_extension.ttl (HDT-O granularity properties: contains_HDT, contains_SU, isPrimary). v1.5.4 added RSF (Reused Special Find — spolia) as a stratigraphic subtype, octagon with red border, family=real, is_series=false. Originating DP: DP-26 (spolia project, last DP before the EM 1.5 cut). v1.5.3 added LocationNodeGroup (E53 Place + E55 Type) for spatial / locational membership orthogonal to ActivityNodeGroup (intention) and EpochNode (time). v1.5.2 added family + is_series classification metadata on stratigraphic subtypes.",
|
|
4
4
|
"components": [
|
|
5
5
|
"CIDOC-CRM",
|
|
6
6
|
"CRMarchaeo",
|
|
@@ -1572,6 +1572,56 @@
|
|
|
1572
1572
|
}
|
|
1573
1573
|
}
|
|
1574
1574
|
},
|
|
1575
|
+
"georeferencing_nodes": {
|
|
1576
|
+
"_section_note": "GEOREFERENCING — how a produced model got INTO the world, as two distinct things that fail differently: GCPSetNode = the CONTROL (evidence: which point was seen on which photograph at which pixel, and where it is in the world, in which CRS, with what uncertainty) — it can exist before any model and survives being reused by a second reconstruction; RegistrationTransformNode = the SOLUTION (the 7-parameter similarity the bundle adjustment settled on, with its RMS/residuals) — it is what the model is placed by and what gets REPLACED when better coordinates arrive, the old one staying in the graph because moving a model is provenance. The TWO MODES of the photogrammetry design are the SHAPE of the graph, not a flag: absolute = a transform with a crs that has_gcp_set points at; local = a transform with a scale and crs=null (scaled and oriented in a site frame, honestly NOT georeferenced); no transform at all = nobody placed it. Distinct from GeoPositionNode (where a STUDY/site is) and from SemanticShapeNode (3D geometry of a unit): this section is about the REGISTRATION ACT's evidence and result. Attached to the produced Resource, so the DTC genesis (crmdig:D7, dtc_had_input/dtc_had_output) is not duplicated here. Gated OUT of the stratigrapher palette, like dtc_nodes and hdto_nodes. Added 2026-08-29 with the photogrammetry processing connector; ADDITIVE — no existing family changed.",
|
|
1577
|
+
"GCPSetNode": {
|
|
1578
|
+
"class": "GCPSetNode",
|
|
1579
|
+
"parent": "Node",
|
|
1580
|
+
"abbreviation": "GCP",
|
|
1581
|
+
"label": "Ground control points",
|
|
1582
|
+
"description": "The set of ground control points a registration was (or will be) solved from. data.points is a list of {id, world:[x,y,z], observations:[{image, pixel:[x,y]}], uncertainty?}; data.crs names the frame the world coordinates are in (null = a site-local grid, which is a different statement from absent). Minimum 3 observed non-collinear points for a similarity to be determined — reported by `solvable`, enforced by the runner, never at construction (a set being assembled in the field is legitimately incomplete).",
|
|
1583
|
+
"s3Dgraphy_file": "georeferencing_node.py",
|
|
1584
|
+
"mapping": {
|
|
1585
|
+
"cidoc": "crm:E73_Information_Object",
|
|
1586
|
+
"cidoc_s3d": null,
|
|
1587
|
+
"alternative": "prov:Entity",
|
|
1588
|
+
"rationale": "A control set is an INFORMATION OBJECT: a documented list of measured places and where each was observed. It is not itself a Place (crm:E53) nor a Measurement (crmsci:S21) — it CARRIES both. The individual observations stay payload literals in v1 and the explicit refinement is declared, not implied: each point would explode into an crmsci:S21_Measurement of an crm:E53_Place observed on a crmdig:D1 photograph. Doing that now would create three nodes per control point in a graph nobody yet reads that way."
|
|
1589
|
+
},
|
|
1590
|
+
"em_extension": {
|
|
1591
|
+
"uri": "em:GCPSet",
|
|
1592
|
+
"rdf_type": "owl:Class",
|
|
1593
|
+
"subclass_of": [
|
|
1594
|
+
"crm:E73_Information_Object"
|
|
1595
|
+
],
|
|
1596
|
+
"extension_status": "proposed",
|
|
1597
|
+
"rationale": "Named in the EM extension because 'the set of control points behind this registration' is the unit archaeologists actually hand each other, and CIDOC has no class for it above E73."
|
|
1598
|
+
}
|
|
1599
|
+
},
|
|
1600
|
+
"RegistrationTransformNode": {
|
|
1601
|
+
"class": "RegistrationTransformNode",
|
|
1602
|
+
"parent": "Node",
|
|
1603
|
+
"abbreviation": "RGT",
|
|
1604
|
+
"label": "Registration transform",
|
|
1605
|
+
"description": "The 7-parameter similarity (rotation 3x3 row-major, translation [x,y,z], positive scale) that places a produced model, with data.rms and data.residuals — the error bar, stored beside the claim rather than in a log nobody keeps. data.crs is the frame the model lands IN; null means a site-local frame (mode 'local'), which is NOT the same sentence as an absent transform. Re-registration is a NEW node produced by a NEW crmdig:D7; the superseded one is never edited.",
|
|
1606
|
+
"s3Dgraphy_file": "georeferencing_node.py",
|
|
1607
|
+
"mapping": {
|
|
1608
|
+
"cidoc": "crm:E73_Information_Object",
|
|
1609
|
+
"cidoc_s3d": null,
|
|
1610
|
+
"alternative": "prov:Entity",
|
|
1611
|
+
"rationale": "The transform is an information object that DESCRIBES a mapping between two spatial reference systems (crmgeo:SP4_Spatial_Coordinate_Reference_System). CIDOC/CRMgeo models coordinate systems and geometric expressions but has no class for the parameterised map between two of them, so E73 is the honest superclass and the specificity lives in em:RegistrationTransform. It is deliberately NOT an event: the ACT of registering is the crmdig:D7 that produced this object."
|
|
1612
|
+
},
|
|
1613
|
+
"em_extension": {
|
|
1614
|
+
"uri": "em:RegistrationTransform",
|
|
1615
|
+
"rdf_type": "owl:Class",
|
|
1616
|
+
"subclass_of": [
|
|
1617
|
+
"crm:E73_Information_Object"
|
|
1618
|
+
],
|
|
1619
|
+
"extension_status": "proposed",
|
|
1620
|
+
"relates": "two crmgeo:SP4_Spatial_Coordinate_Reference_System",
|
|
1621
|
+
"rationale": "Proposed rather than asserted: the natural CRM-native alternative is to leave the parameters as literals on the D7 event, which loses the ability to point at 'the placement' as a thing that gets superseded — and superseding it is the whole reason mode (b) exists."
|
|
1622
|
+
}
|
|
1623
|
+
}
|
|
1624
|
+
},
|
|
1575
1625
|
"narrative_nodes": {
|
|
1576
1626
|
"_section_note": "EM Narrative (DP-79, draft). A narrative is the story told OVER a graph: chapters anchored to the graph's lanes (epochs, activities), each carrying prose and embeds. It is a first-class node so it can be queried ('which narratives cite this US', 'which rest on a withdrawn source'), versioned and carried through the DTC. Chapters and blocks are NOT nodes: they are ordered structures inside node.data — EM has no ordered-edge primitive, and a chapter has no existence apart from its narrative. An embed holds only the stable id of the resource it shows, never a copy of it, so a narrative always says what the graph currently says.",
|
|
1577
1627
|
"NarrativeNode": {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- EM · GCPSetNode. A survey target seen from above: the crosshair is one control point, the three small marks around it are the SET — the node is the set, never the single GCP. Drawn for Extended Matrix, same licence as the datamodel. -->
|
|
2
|
+
<circle cx="256" cy="248" r="96" fill="#FFFFFF" stroke="#FF6600" stroke-width="26"/>
|
|
3
|
+
<circle cx="256" cy="248" r="26" fill="#FF6600"/>
|
|
4
|
+
<path fill="#FF6600" d="M242 96h28v72h-28zM242 328h28v72h-28zM104 234h72v28h-72zM336 234h72v28h-72z"/>
|
|
5
|
+
<circle cx="72" cy="432" r="26" fill="#FF6600"/>
|
|
6
|
+
<circle cx="256" cy="464" r="26" fill="#FF6600"/>
|
|
7
|
+
<circle cx="440" cy="432" r="26" fill="#FF6600"/>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- EM · GraphNode. The graph itself, as a container: three nodes and the edges between them. Neutral gray (#333333, the GRAPH style's own colour) so it stays visually distinct from stratigraphic and paradata nodes — it is the meta-container, not a unit. Drawn for Extended Matrix, same licence as the datamodel. -->
|
|
2
|
+
<path fill="none" stroke="#333333" stroke-width="26" stroke-linecap="round" d="M256 132v120M256 252 148 372M256 252l108 120"/>
|
|
3
|
+
<circle cx="256" cy="108" r="60" fill="#FFFFFF" stroke="#333333" stroke-width="26"/>
|
|
4
|
+
<circle cx="124" cy="396" r="60" fill="#FFFFFF" stroke="#333333" stroke-width="26"/>
|
|
5
|
+
<circle cx="388" cy="396" r="60" fill="#FFFFFF" stroke="#333333" stroke-width="26"/>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- EM · RegistrationTransformNode. Three axes and the arc that turns them: the 7-parameter similarity that places a model. The arc is the rotation, the axes the frame it lands in. Drawn for Extended Matrix, same licence as the datamodel. -->
|
|
2
|
+
<path fill="none" stroke="#FF6600" stroke-width="28" stroke-linecap="round" d="M152 360V152M152 360h208"/>
|
|
3
|
+
<path fill="#FF6600" d="M152 92l40 72h-80zM420 360l-72 40v-80z"/>
|
|
4
|
+
<path fill="none" stroke="#FF6600" stroke-width="28" stroke-linecap="round" d="M152 360 262 250"/>
|
|
5
|
+
<path fill="none" stroke="#FF6600" stroke-width="22" stroke-linecap="round" stroke-dasharray="34 30" d="M340 168a136 136 0 0 1 44 100"/>
|
|
6
|
+
</svg>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
A single, documented set of **pure operations** over the Extended Matrix graph:
|
|
4
4
|
load/parse, validate, project → TTL/RDF, GraphML/XLSX interop, authority
|
|
5
5
|
resolution. This is the stable contract that the local **em-bridge** sidecar and
|
|
6
|
-
the future **
|
|
6
|
+
the future **StratiGraph Server** (HTTP) both drive — the library itself stays pure:
|
|
7
7
|
|
|
8
8
|
* NO web framework here (no FastAPI/uvicorn/HTTP). Transports wrap this surface.
|
|
9
9
|
* Heavy/optional deps (lxml for GraphML, pandas for XLSX, rdflib for RDF) are
|
|
@@ -349,7 +349,7 @@ def apply_op(section: Dict[str, Any], op: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
349
349
|
|
|
350
350
|
Returns a **dict** (`{applied, reason, node_id, fields}`), not the internal
|
|
351
351
|
dataclass: this is the api surface, which is what another PROCESS talks to
|
|
352
|
-
(
|
|
352
|
+
(StratiGraph Server puts the answer straight on a socket). Handing a caller across
|
|
353
353
|
that boundary an object it has to know the shape of is how a library leaks
|
|
354
354
|
into a transport.
|
|
355
355
|
"""
|
|
@@ -453,7 +453,7 @@ def promote_resource(graph: Graph, resource_id: str, *, url: str, sha256: str,
|
|
|
453
453
|
|
|
454
454
|
`residency` says which true sentence this is — `reference` (a store the study
|
|
455
455
|
points at, the default and the original DP-76 one) or `resident` (the ROOM's
|
|
456
|
-
store:
|
|
456
|
+
store: StratiGraph Server is in the bytes' path, so the gate and the licence travel
|
|
457
457
|
with them). `corpus` is the offline→online moment: hand it the container's
|
|
458
458
|
DOCUMENTATION member and the D7 event is recorded THERE, with the asset
|
|
459
459
|
mirrored into it under its own id — the shared leaf between the study and its
|
|
@@ -493,7 +493,7 @@ def dtc_corpus(container: Any, *, create: bool = True) -> Optional[Graph]:
|
|
|
493
493
|
def merge_corpus(resident: Any, incoming: Any) -> Dict[str, Any]:
|
|
494
494
|
"""Fold one DTC corpus into another, per UUID. Returns the report as a dict.
|
|
495
495
|
|
|
496
|
-
On the api surface because another PROCESS performs it:
|
|
496
|
+
On the api surface because another PROCESS performs it: StratiGraph Server merges a
|
|
497
497
|
project's **file** corpus into the instance's **resident** one when a study is
|
|
498
498
|
promoted or joins a room, and it must not invent a second answer to "who
|
|
499
499
|
wins". Same merge the container uses. See :mod:`s3dgraphy.dtc.corpus`.
|
|
@@ -535,7 +535,7 @@ def store_backed_geometry(graph: Graph) -> List[Dict[str, Any]]:
|
|
|
535
535
|
`has_linked_resource` would drift the day a facet is added.
|
|
536
536
|
|
|
537
537
|
`reference` resources are deliberately absent: their bytes are outside the
|
|
538
|
-
store (and outside
|
|
538
|
+
store (and outside StratiGraph Server's gate), so a digest cannot fetch them and a
|
|
539
539
|
path is meaningful on one machine only. See
|
|
540
540
|
:mod:`s3dgraphy.geometry.store_backed`.
|
|
541
541
|
"""
|
|
@@ -623,7 +623,7 @@ def study_metadata(container: Any, *, study_id: Optional[str] = None
|
|
|
623
623
|
"""The catalogue card of one study, derived from its em.json container.
|
|
624
624
|
|
|
625
625
|
On the api surface because it is what another PROCESS asks for: a catalogue
|
|
626
|
-
(
|
|
626
|
+
(StratiGraph Catalog, and 3DR's production one) turns containers into an index, and
|
|
627
627
|
the rule that makes the index safe is that it is a **projection** — every
|
|
628
628
|
field comes from the container, so re-reading the containers rebuilds it.
|
|
629
629
|
An indexer that had to know where a licence lives would be a second truth
|
|
@@ -645,7 +645,7 @@ def asset_rights(document: Any, digest: str, *, today: Any = None
|
|
|
645
645
|
|
|
646
646
|
On the api surface for the same reason `study_metadata` is: another PROCESS
|
|
647
647
|
asks it. An asset store must decide whether to serve bytes, and the decision
|
|
648
|
-
belongs to the graph —
|
|
648
|
+
belongs to the graph — StratiGraph Server CONSULTS this rather than keeping a second
|
|
649
649
|
copy of an embargo that lives in a document people edit.
|
|
650
650
|
|
|
651
651
|
See :mod:`s3dgraphy.rights` for how the walk works and why the rights are
|
|
@@ -774,6 +774,71 @@ def batch_summary(graph: Graph, acquisition_id: str) -> Dict[str, Any]:
|
|
|
774
774
|
return _summary(graph, acquisition_id)
|
|
775
775
|
|
|
776
776
|
|
|
777
|
+
# ── photogrammetry: what a reconstruction MEANS ──────────────────────────────
|
|
778
|
+
#
|
|
779
|
+
# The MEANING, not the machinery. Driving an engine (REST, a task queue, an
|
|
780
|
+
# archive) is node-side plumbing and lives in StratiGraph Server; what is on this
|
|
781
|
+
# surface is the semantic contract it calls with the result. A second engine —
|
|
782
|
+
# COLMAP, MicMac, Aïoli — is a second driver calling the same function.
|
|
783
|
+
|
|
784
|
+
def build_photogrammetry_delta(*, input_resources, output_model,
|
|
785
|
+
transform=None, gcp_set=None,
|
|
786
|
+
author: Optional[str] = None,
|
|
787
|
+
mode: str = "local", **kwargs) -> Dict[str, Any]:
|
|
788
|
+
"""The DTC provenance of one reconstruction, as a delta somebody applies.
|
|
789
|
+
|
|
790
|
+
`output_model` is a :class:`~s3dgraphy.photogrammetry.ProducedModel` (or
|
|
791
|
+
build one with :func:`produced_model`): the bytes are already published when
|
|
792
|
+
this is called, and their checksum is what the resource points at.
|
|
793
|
+
|
|
794
|
+
`mode` is `"local"` (scaled and oriented in a site frame — honestly NOT
|
|
795
|
+
georeferenced) or `"absolute"` (registered against ground control points).
|
|
796
|
+
The two are different SHAPES in the graph, not a flag, and the refusals that
|
|
797
|
+
keep them apart are in :mod:`s3dgraphy.photogrammetry.delta`.
|
|
798
|
+
|
|
799
|
+
Returns a dict — ids, the delta, the warnings — because the caller is on the
|
|
800
|
+
other side of an HTTP boundary.
|
|
801
|
+
"""
|
|
802
|
+
from .photogrammetry import build_photogrammetry_delta as _build
|
|
803
|
+
return _build(input_resources=input_resources, output_model=output_model,
|
|
804
|
+
transform=transform, gcp_set=gcp_set, author=author,
|
|
805
|
+
mode=mode, **kwargs).as_dict()
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
def produced_model(checksum: str, *, url: Optional[str] = None,
|
|
809
|
+
media_type: Optional[str] = None,
|
|
810
|
+
residency: str = "resident",
|
|
811
|
+
name: Optional[str] = None,
|
|
812
|
+
node_id: Optional[str] = None):
|
|
813
|
+
"""The output of a reconstruction, described. Built here so a caller does
|
|
814
|
+
not import the class to state four facts."""
|
|
815
|
+
from .photogrammetry import ProducedModel
|
|
816
|
+
return ProducedModel(checksum=checksum, url=url, media_type=media_type,
|
|
817
|
+
residency=residency, name=name, node_id=node_id)
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
def gcp_set(node_id: str, points, *, crs: Optional[str] = None,
|
|
821
|
+
name: str = "Ground control points"):
|
|
822
|
+
"""A control set, validated on construction. Raises on a point that
|
|
823
|
+
controls nothing (no id, no world coordinate, an observation with no image
|
|
824
|
+
or no pixel) — before an engine spends an hour on it."""
|
|
825
|
+
from .nodes.georeferencing_node import GCPSetNode
|
|
826
|
+
return GCPSetNode(node_id, name=name, points=list(points), crs=crs)
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
def registration_transform(node_id: str = "registration", *,
|
|
830
|
+
rotation=None, translation=None, scale: float = 1.0,
|
|
831
|
+
crs: Optional[str] = None, rms: Optional[float] = None,
|
|
832
|
+
residuals=None, name: str = "Registration"):
|
|
833
|
+
"""A placement, stated. Optional: `build_photogrammetry_delta` makes the
|
|
834
|
+
canonical one for the mode when none is given — pass one only when the
|
|
835
|
+
engine reported real parameters."""
|
|
836
|
+
from .nodes.georeferencing_node import RegistrationTransformNode
|
|
837
|
+
return RegistrationTransformNode(node_id, name=name, rotation=rotation,
|
|
838
|
+
translation=translation, scale=scale,
|
|
839
|
+
crs=crs, rms=rms, residuals=residuals)
|
|
840
|
+
|
|
841
|
+
|
|
777
842
|
# ── IIIF: the image layer, as a projection ────────────────────────────────────
|
|
778
843
|
def iiif_manifest(graph: Graph, target_id: str, *, image_base: str,
|
|
779
844
|
manifest_id: Optional[str] = None,
|
|
@@ -2427,6 +2492,46 @@ def mapping_apply(mapping: Dict[str, Any], source: str, *, graph: Any = None,
|
|
|
2427
2492
|
mapping_name=mapping_name)
|
|
2428
2493
|
|
|
2429
2494
|
|
|
2495
|
+
def mapping_target_groups(*, include_direct: bool = True
|
|
2496
|
+
) -> List[Dict[str, Any]]:
|
|
2497
|
+
"""The target catalog GROUPED BY ONTOLOGY — CIDOC-CRM · CRMarchaeo · CRMdig ·
|
|
2498
|
+
CRMgeo · CRMinf · HDT-O · PROV-O — each group with the version the datamodel
|
|
2499
|
+
declares for it.
|
|
2500
|
+
|
|
2501
|
+
A curated subset of CIDOC by construction: exactly what the datamodel
|
|
2502
|
+
declares and not one class more. No OWL is parsed and no checkout of the
|
|
2503
|
+
ontologies is read — so when E.D. refines the CIDOC/HDT-O mapping, the picker
|
|
2504
|
+
follows on its own."""
|
|
2505
|
+
from .mappings.authoring import target_groups
|
|
2506
|
+
return target_groups(include_direct=include_direct)
|
|
2507
|
+
|
|
2508
|
+
|
|
2509
|
+
def mapping_edge_groups(source_type: Optional[str] = None,
|
|
2510
|
+
target_type: Optional[str] = None
|
|
2511
|
+
) -> List[Dict[str, Any]]:
|
|
2512
|
+
"""The same grouping for the edges: the CIDOC property beside each EM edge,
|
|
2513
|
+
under the ontology that defines it. `unmapped` holds the edges the datamodel
|
|
2514
|
+
maps only through an extension property."""
|
|
2515
|
+
from .mappings.authoring import edge_groups
|
|
2516
|
+
return edge_groups(source_type, target_type)
|
|
2517
|
+
|
|
2518
|
+
|
|
2519
|
+
def mapping_ontologies() -> Dict[str, Dict[str, Any]]:
|
|
2520
|
+
"""The ontologies this datamodel speaks, with versions and sources — the same
|
|
2521
|
+
`referenced_ontology_versions` block EMStudio's Reference-ontologies panel
|
|
2522
|
+
prints."""
|
|
2523
|
+
from .mappings.authoring import ontologies
|
|
2524
|
+
return ontologies()
|
|
2525
|
+
|
|
2526
|
+
|
|
2527
|
+
def mapping_source_extensions() -> Dict[str, str]:
|
|
2528
|
+
"""`{extension: format}` for the sources a mapping can describe — so a file
|
|
2529
|
+
picker's filter and a file browser's greying come from the library instead of
|
|
2530
|
+
a list written beside them."""
|
|
2531
|
+
from .mappings.authoring import source_extensions
|
|
2532
|
+
return source_extensions()
|
|
2533
|
+
|
|
2534
|
+
|
|
2430
2535
|
def mapping_property_node_type() -> str:
|
|
2431
2536
|
"""The node type a PROPERTY column produces, read from the datamodel — so an
|
|
2432
2537
|
editor says "this field is a property" without typing a class name."""
|
|
@@ -43,7 +43,7 @@ limit. Only a field they both wrote is a decision, and it is reported per field.
|
|
|
43
43
|
|
|
44
44
|
What this module deliberately does NOT do:
|
|
45
45
|
|
|
46
|
-
* **real-time transport.** The relay (
|
|
46
|
+
* **real-time transport.** The relay (StratiGraph Server: fan-out + op-log + presence) is
|
|
47
47
|
P4.2, and the client is P4.3. The algebra converges without a coordinator,
|
|
48
48
|
which is exactly why it can be built and proved first, on a table.
|
|
49
49
|
* **tombstone GC.** Deletions stay as marks; compacting them belongs to the
|
|
@@ -348,7 +348,7 @@ def build_container(container: Container) -> Dict[str, Any]:
|
|
|
348
348
|
#
|
|
349
349
|
# The builder owns the keys that describe the FORMAT and nothing more. What a
|
|
350
350
|
# header also carries is the caller's: `visibility` (which decides whether a
|
|
351
|
-
# study is served without a token —
|
|
351
|
+
# study is served without a token — StratiGraph Server reads it for rooms, StratiGraph Catalog
|
|
352
352
|
# for studies), `title`, `description`. Rebuilding the header from scratch
|
|
353
353
|
# DROPPED them, so a container that said "public" came back from its own file
|
|
354
354
|
# saying nothing, and the default is restricted — a study quietly
|