s3dgraphy 1.6.0.dev30__tar.gz → 1.6.0.dev32__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.dev30/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev32}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/container.py +136 -8
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy.egg-info/SOURCES.txt +1 -0
- s3dgraphy-1.6.0.dev32/tests/test_container_layouts.py +63 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_release.py +110 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/README.md +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em.ttl +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/api.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/sheet_header.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/language.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/nodes/translation_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resources/addresses.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resources/minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/translation.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_datamodel_fingerprint.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dev29_em_sourcelist.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dev29_file_set_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dev29_graphml_without_a_database.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dev29_image_set_texturing.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dev29_not_georeferenced.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dev29_one_act_n_outputs.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dev29_ttl_round_trip.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dev30_decisions.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dove_sta_il_testo.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_i_generi_dei_passi.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_il_modo_d_accesso.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_il_modo_dal_relay.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_il_riallineamento.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_la_lingua_alla_nascita.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_la_lingua_dei_dati.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_la_lingua_nell_op.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_la_riga_d_intestazione.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_le_traduzioni.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_piu_indirizzi.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_psx_locator.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_qualia_dai_d7_d8.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_resource_revision.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_rm_container_node_group.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_verifica_provenance.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/tests/test_zero_hour.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.dev32
|
|
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>
|
|
@@ -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.dev32"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -9,9 +9,24 @@ The decision (E.D., 2026-08-13): **an em.json/emj is always a container**::
|
|
|
9
9
|
"shelf": { ... em_collection: "ShelfGraph" },
|
|
10
10
|
"dtc": { ... em_collection: "DTCCorpus" }
|
|
11
11
|
},
|
|
12
|
-
"active_graph_id": "<graph id>"
|
|
12
|
+
"active_graph_id": "<graph id>",
|
|
13
|
+
"layout": { ...the active graph's layout, a copy... }
|
|
13
14
|
}
|
|
14
15
|
|
|
16
|
+
**One layout per graph (2026-10-02).** Each member carries its own arrangement
|
|
17
|
+
INSIDE its section, ``graphs.<id>.layout`` (positions, lanes, canvas, folded
|
|
18
|
+
groups — the single-graph ``layout`` object, unchanged). The file-level
|
|
19
|
+
``layout`` stays, written as a COPY of the active graph's, for whoever reads only
|
|
20
|
+
that (Heriverse, the files written before today). Reading:
|
|
21
|
+
``graphs.<id>.layout`` when the member has one; otherwise the file-level
|
|
22
|
+
``layout`` goes to ONE graph — the one whose nodes it positions, else the
|
|
23
|
+
active one (or the only one); the other graphs of an old file have no arrangement and are laid out afresh, which the reader
|
|
24
|
+
says once. Until today the file had ONE layout for every graph, and whichever
|
|
25
|
+
graph was saved first gave it away: measured on San Pietro, the layout in the
|
|
26
|
+
file was an empty seed's and the real graph had lost every position.
|
|
27
|
+
``EMStudio/frontend/src/container.ts`` applies the same rule, and the shared
|
|
28
|
+
fixture ``tests/fixtures/container-layout-parity.json`` keeps the two equal.
|
|
29
|
+
|
|
15
30
|
A study is one or more graphs plus its shelf and its **documentation** (the DTC
|
|
16
31
|
corpus, 2026-08-17: acquisitions, transformations and the resources they are
|
|
17
32
|
about — a forest that shares its leaves, and ontologically not a matrix); a
|
|
@@ -62,7 +77,7 @@ import json
|
|
|
62
77
|
import os
|
|
63
78
|
from dataclasses import dataclass, field
|
|
64
79
|
from pathlib import Path
|
|
65
|
-
from typing import Any, Dict, List, Optional, Tuple
|
|
80
|
+
from typing import Any, Dict, Iterable, List, Optional, Tuple
|
|
66
81
|
|
|
67
82
|
from . import crdt
|
|
68
83
|
from .graph import Graph
|
|
@@ -70,6 +85,9 @@ from .graph import Graph
|
|
|
70
85
|
#: The key that makes a document a container.
|
|
71
86
|
GRAPHS_KEY = "graphs"
|
|
72
87
|
|
|
88
|
+
#: Where a member keeps its own arrangement: ``graphs.<id>.layout``.
|
|
89
|
+
LAYOUT_KEY = "layout"
|
|
90
|
+
|
|
73
91
|
#: The conventional member id of the project shelf. Any id works — the marker
|
|
74
92
|
#: (`graph.data["em_collection"] == "ShelfGraph"`) is what identifies it — but
|
|
75
93
|
#: this is the one Heriverse uses, so writing it keeps the two aligned.
|
|
@@ -154,8 +172,15 @@ def content_digest(doc: Dict[str, Any]) -> str:
|
|
|
154
172
|
"""
|
|
155
173
|
import hashlib
|
|
156
174
|
|
|
175
|
+
# a member's own layout is arrangement, not content: moving a box inside
|
|
176
|
+
# one graph of a project is no more a revision than it was at file level
|
|
177
|
+
graphs = {
|
|
178
|
+
gid: ({k: v for k, v in section.items() if k != LAYOUT_KEY}
|
|
179
|
+
if isinstance(section, dict) else section)
|
|
180
|
+
for gid, section in (doc.get(GRAPHS_KEY) or {}).items()
|
|
181
|
+
}
|
|
157
182
|
payload = {
|
|
158
|
-
GRAPHS_KEY:
|
|
183
|
+
GRAPHS_KEY: graphs,
|
|
159
184
|
"active_graph_id": doc.get("active_graph_id"),
|
|
160
185
|
}
|
|
161
186
|
blob = json.dumps(payload, sort_keys=True, ensure_ascii=False,
|
|
@@ -185,7 +210,13 @@ class Container:
|
|
|
185
210
|
corpus: Optional[Graph] = None
|
|
186
211
|
active_graph_id: Optional[str] = None
|
|
187
212
|
header: Dict[str, Any] = field(default_factory=dict)
|
|
213
|
+
#: The ACTIVE graph's layout, for a caller that has one graph and one
|
|
214
|
+
#: arrangement (``export_emjson``). Used only for the active graph, and only
|
|
215
|
+
#: when ``layouts`` has no entry for it — it is never given to another graph.
|
|
188
216
|
layout: Dict[str, Any] = field(default_factory=dict)
|
|
217
|
+
#: One layout per graph id (``graphs.<id>.layout`` in the file). A graph with
|
|
218
|
+
#: no entry has no arrangement and is laid out afresh by whoever draws it.
|
|
219
|
+
layouts: Dict[str, Dict[str, Any]] = field(default_factory=dict)
|
|
189
220
|
#: P3 · which revision of the work this is (None = never versioned; the
|
|
190
221
|
#: first write gives it a v1 rather than pretending it always had one)
|
|
191
222
|
version: Optional[ProjectVersion] = None
|
|
@@ -202,6 +233,21 @@ class Container:
|
|
|
202
233
|
"""A container-of-one — the shape a legacy file opens as."""
|
|
203
234
|
return len(self.graphs) == 1
|
|
204
235
|
|
|
236
|
+
def layout_of(self, graph_id: Optional[str]) -> Optional[Dict[str, Any]]:
|
|
237
|
+
"""The layout of ONE graph, or None when it has none.
|
|
238
|
+
|
|
239
|
+
`layouts` first; the convenience `layout` only for the active graph. A
|
|
240
|
+
graph is never handed another graph's arrangement — that was the bug.
|
|
241
|
+
"""
|
|
242
|
+
if graph_id is None:
|
|
243
|
+
return None
|
|
244
|
+
if graph_id in self.layouts:
|
|
245
|
+
return self.layouts[graph_id]
|
|
246
|
+
active = self.active_graph_id or next(iter(self.graphs), None)
|
|
247
|
+
if graph_id == active and self.layout:
|
|
248
|
+
return self.layout
|
|
249
|
+
return None
|
|
250
|
+
|
|
205
251
|
|
|
206
252
|
def is_container(doc: Any) -> bool:
|
|
207
253
|
"""True when the document carries the `graphs` map.
|
|
@@ -231,6 +277,63 @@ def is_dtc_corpus_member(graph_section: Any) -> bool:
|
|
|
231
277
|
return is_dtc_corpus(graph_section)
|
|
232
278
|
|
|
233
279
|
|
|
280
|
+
def resolve_layouts(graph_ids: List[str],
|
|
281
|
+
own: Dict[str, Dict[str, Any]],
|
|
282
|
+
file_layout: Dict[str, Any],
|
|
283
|
+
active_graph_id: Optional[str],
|
|
284
|
+
node_ids: Optional[Dict[str, Iterable[str]]] = None,
|
|
285
|
+
) -> Tuple[Dict[str, Dict[str, Any]], List[str]]:
|
|
286
|
+
"""Which layout each graph of a file gets, and which ones get none.
|
|
287
|
+
|
|
288
|
+
THE reading rule, the same as ``container.ts::resolveLayouts``:
|
|
289
|
+
|
|
290
|
+
1. a member that carries ``graphs.<id>.layout`` keeps its own;
|
|
291
|
+
2. otherwise the file-level ``layout`` goes to ONE graph and to no other: in a
|
|
292
|
+
file written before per-graph layouts it was the arrangement of one graph,
|
|
293
|
+
and giving it to the rest was the bug. That graph is the one whose nodes
|
|
294
|
+
the layout positions (``node_ids``, most positions wins) — NOT simply the
|
|
295
|
+
active one: an old file kept the layout of the graph laid out LAST, which
|
|
296
|
+
may be a seed that is not the active graph (San Pietro, dev.17: the seed's
|
|
297
|
+
three positions went to the real graph, which then saved them as its own
|
|
298
|
+
and was never laid out). Ties, a layout with no positions, or no
|
|
299
|
+
``node_ids`` → the ACTIVE graph, or the only one;
|
|
300
|
+
3. the remaining graphs get nothing and are laid out afresh. They are
|
|
301
|
+
returned as ``fresh`` only for an OLD file — one with a layout to give and
|
|
302
|
+
no member carrying its own: there, a graph's positions may have been lost
|
|
303
|
+
to another's, and that is worth saying once. In a file written with
|
|
304
|
+
per-graph layouts a graph without one simply has none (never laid out),
|
|
305
|
+
and saying so at every open would be noise.
|
|
306
|
+
"""
|
|
307
|
+
layouts: Dict[str, Dict[str, Any]] = {}
|
|
308
|
+
fresh: List[str] = []
|
|
309
|
+
heir = active_graph_id if active_graph_id in graph_ids else (
|
|
310
|
+
graph_ids[0] if graph_ids else None)
|
|
311
|
+
if len(graph_ids) == 1:
|
|
312
|
+
heir = graph_ids[0]
|
|
313
|
+
elif file_layout and node_ids:
|
|
314
|
+
placed = set((file_layout.get("positions") or {}).keys())
|
|
315
|
+
counts = {gid: len(placed & set(node_ids.get(gid) or ()))
|
|
316
|
+
for gid in graph_ids if gid not in own}
|
|
317
|
+
best = max(counts.values(), default=0)
|
|
318
|
+
if best > 0 and counts.get(heir, 0) < best:
|
|
319
|
+
heir = next(gid for gid in graph_ids if counts.get(gid, 0) == best)
|
|
320
|
+
for gid in graph_ids:
|
|
321
|
+
if gid in own:
|
|
322
|
+
layouts[gid] = own[gid]
|
|
323
|
+
elif gid == heir and file_layout:
|
|
324
|
+
layouts[gid] = file_layout
|
|
325
|
+
elif file_layout and not own:
|
|
326
|
+
fresh.append(gid)
|
|
327
|
+
return layouts, fresh
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def layout_fresh_warning(fresh: List[str]) -> str:
|
|
331
|
+
"""The one sentence about the graphs of an old file that had no layout."""
|
|
332
|
+
return (f"{len(fresh)} graph(s) of this file carry no layout of their own "
|
|
333
|
+
f"(written before per-graph layouts): laid out afresh — "
|
|
334
|
+
f"{', '.join(fresh)}")
|
|
335
|
+
|
|
336
|
+
|
|
234
337
|
def parse_container(doc: Dict[str, Any], *,
|
|
235
338
|
project_root: Optional[str] = None) -> Tuple[Container, List[str]]:
|
|
236
339
|
"""Read a container OR a legacy single-graph document.
|
|
@@ -249,7 +352,8 @@ def parse_container(doc: Dict[str, Any], *,
|
|
|
249
352
|
raise EmJsonImportError("not an em.json document")
|
|
250
353
|
|
|
251
354
|
header = dict(doc.get("header") or {})
|
|
252
|
-
|
|
355
|
+
file_layout = doc.get(LAYOUT_KEY)
|
|
356
|
+
file_layout = dict(file_layout) if isinstance(file_layout, dict) else {}
|
|
253
357
|
|
|
254
358
|
if not is_container(doc):
|
|
255
359
|
# LEGACY single-graph: read it with the reader that has always read it,
|
|
@@ -259,18 +363,22 @@ def parse_container(doc: Dict[str, Any], *,
|
|
|
259
363
|
graphs={graph.graph_id: graph},
|
|
260
364
|
active_graph_id=graph.graph_id,
|
|
261
365
|
header=header,
|
|
262
|
-
|
|
366
|
+
layouts={graph.graph_id: file_layout} if file_layout else {},
|
|
263
367
|
version=ProjectVersion.from_dict(doc.get(VERSION_KEY)),
|
|
264
368
|
)
|
|
265
369
|
return container, list(graph_warnings)
|
|
266
370
|
|
|
267
|
-
container = Container(header=header,
|
|
371
|
+
container = Container(header=header,
|
|
268
372
|
version=ProjectVersion.from_dict(doc.get(VERSION_KEY)))
|
|
373
|
+
own_layouts: Dict[str, Dict[str, Any]] = {}
|
|
374
|
+
node_ids: Dict[str, List[str]] = {}
|
|
269
375
|
members = doc[GRAPHS_KEY]
|
|
270
376
|
for member_id, section in members.items():
|
|
271
377
|
if not isinstance(section, dict):
|
|
272
378
|
warnings.append(f"container member '{member_id}' is not a graph; skipped")
|
|
273
379
|
continue
|
|
380
|
+
own = section.get(LAYOUT_KEY)
|
|
381
|
+
section = {k: v for k, v in section.items() if k != LAYOUT_KEY}
|
|
274
382
|
# Each member is parsed by the SAME single-graph reader, by handing it a
|
|
275
383
|
# one-graph document. The alternative — a second parser for members —
|
|
276
384
|
# would be a second place for the em.json semantics to live.
|
|
@@ -295,6 +403,11 @@ def parse_container(doc: Dict[str, Any], *,
|
|
|
295
403
|
container.corpus = graph
|
|
296
404
|
else:
|
|
297
405
|
container.graphs[graph.graph_id] = graph
|
|
406
|
+
node_ids[graph.graph_id] = [
|
|
407
|
+
str(n.get("id")) for n in (section.get("nodes") or [])
|
|
408
|
+
if isinstance(n, dict) and n.get("id") is not None]
|
|
409
|
+
if isinstance(own, dict):
|
|
410
|
+
own_layouts[graph.graph_id] = dict(own)
|
|
298
411
|
|
|
299
412
|
active = doc.get("active_graph_id")
|
|
300
413
|
if isinstance(active, str) and active in container.graphs:
|
|
@@ -306,6 +419,12 @@ def parse_container(doc: Dict[str, Any], *,
|
|
|
306
419
|
f"falling back to the first graph")
|
|
307
420
|
container.active_graph_id = next(iter(container.graphs), None)
|
|
308
421
|
|
|
422
|
+
container.layouts, fresh = resolve_layouts(
|
|
423
|
+
list(container.graphs), own_layouts, file_layout, container.active_graph_id,
|
|
424
|
+
node_ids)
|
|
425
|
+
if fresh:
|
|
426
|
+
warnings.append(layout_fresh_warning(fresh))
|
|
427
|
+
|
|
309
428
|
if not container.graphs and (container.shelf is not None
|
|
310
429
|
or container.corpus is not None):
|
|
311
430
|
held = " and ".join(
|
|
@@ -337,6 +456,9 @@ def build_container(container: Container) -> Dict[str, Any]:
|
|
|
337
456
|
graphs: Dict[str, Any] = {}
|
|
338
457
|
for graph_id, graph in container.graphs.items():
|
|
339
458
|
graphs[graph_id] = _member_section(graph)
|
|
459
|
+
own = container.layout_of(graph_id)
|
|
460
|
+
if own:
|
|
461
|
+
graphs[graph_id][LAYOUT_KEY] = own
|
|
340
462
|
if container.shelf is not None:
|
|
341
463
|
shelf_id = container.shelf.graph_id or SHELF_MEMBER_ID
|
|
342
464
|
graphs[shelf_id] = _member_section(container.shelf)
|
|
@@ -369,8 +491,10 @@ def build_container(container: Container) -> Dict[str, Any]:
|
|
|
369
491
|
active = container.active_graph_id or next(iter(container.graphs), None)
|
|
370
492
|
if active:
|
|
371
493
|
doc["active_graph_id"] = active
|
|
372
|
-
|
|
373
|
-
|
|
494
|
+
# the file-level copy, for whoever reads only that: the ACTIVE graph's
|
|
495
|
+
active_layout = container.layout_of(active)
|
|
496
|
+
if active_layout:
|
|
497
|
+
doc[LAYOUT_KEY] = active_layout
|
|
374
498
|
if container.version is not None:
|
|
375
499
|
doc[VERSION_KEY] = container.version.as_dict()
|
|
376
500
|
return doc
|
|
@@ -855,6 +979,10 @@ def merge_into_container(container: Container, other: Container) -> MergeReport:
|
|
|
855
979
|
report.merged_graphs.append(graph_id)
|
|
856
980
|
else:
|
|
857
981
|
container.graphs[graph_id] = incoming
|
|
982
|
+
# …with its own arrangement: a graph that arrives whole arrives laid out
|
|
983
|
+
theirs = other.layout_of(graph_id)
|
|
984
|
+
if theirs:
|
|
985
|
+
container.layouts[graph_id] = theirs
|
|
858
986
|
report.added_graphs.append(graph_id)
|
|
859
987
|
report.added_nodes += len(list(incoming.nodes))
|
|
860
988
|
report.added_edges += len(list(incoming.edges))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: s3dgraphy
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev32
|
|
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>
|
|
@@ -370,6 +370,7 @@ tests/test_composite_node_name.py
|
|
|
370
370
|
tests/test_connection_resolver.py
|
|
371
371
|
tests/test_consumer_drift.py
|
|
372
372
|
tests/test_container.py
|
|
373
|
+
tests/test_container_layouts.py
|
|
373
374
|
tests/test_containment_tpq.py
|
|
374
375
|
tests/test_contract.py
|
|
375
376
|
tests/test_contract_consumer.py
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""One layout per graph in the em.json container (MICRO-OGNI-FILE-I-SUOI-GRAFI, F4).
|
|
2
|
+
|
|
3
|
+
The cases live in `tests/fixtures/container-layout-parity.json`, and EMStudio's
|
|
4
|
+
`check-container.mjs` reads a byte copy of the same file: the two readers and the
|
|
5
|
+
two writers of the container are held to ONE rule, case by case.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import pathlib
|
|
10
|
+
|
|
11
|
+
import pytest
|
|
12
|
+
|
|
13
|
+
from s3dgraphy.container import (build_container, content_digest,
|
|
14
|
+
parse_container)
|
|
15
|
+
|
|
16
|
+
FIXTURE = pathlib.Path(__file__).parent / "fixtures" / "container-layout-parity.json"
|
|
17
|
+
CASES = json.loads(FIXTURE.read_text(encoding="utf-8"))["cases"]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@pytest.mark.parametrize("case", CASES, ids=[c["name"] for c in CASES])
|
|
21
|
+
def test_reading_gives_each_graph_its_own_layout(case):
|
|
22
|
+
container, warnings = parse_container(json.loads(json.dumps(case["doc"])))
|
|
23
|
+
assert container.layouts == case["expect"]["layouts"]
|
|
24
|
+
fresh = [w for w in warnings if "laid out afresh" in w]
|
|
25
|
+
if case["expect"]["fresh"]:
|
|
26
|
+
assert len(fresh) == 1, "said ONCE, not once per graph"
|
|
27
|
+
for gid in case["expect"]["fresh"]:
|
|
28
|
+
assert gid in fresh[0]
|
|
29
|
+
else:
|
|
30
|
+
assert fresh == []
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@pytest.mark.parametrize("case", CASES, ids=[c["name"] for c in CASES])
|
|
34
|
+
def test_writing_puts_each_layout_in_its_section(case):
|
|
35
|
+
container, _ = parse_container(json.loads(json.dumps(case["doc"])))
|
|
36
|
+
doc = build_container(container)
|
|
37
|
+
for gid, want in case["built"]["members"].items():
|
|
38
|
+
assert doc["graphs"][gid].get("layout") == want, gid
|
|
39
|
+
assert doc.get("layout") == case["built"]["layout"]
|
|
40
|
+
# …and the round trip reads back what it wrote, with nothing left to say
|
|
41
|
+
again, warnings = parse_container(json.loads(json.dumps(doc)))
|
|
42
|
+
want_layouts = {g: l for g, l in case["built"]["members"].items() if l}
|
|
43
|
+
assert again.layouts == want_layouts
|
|
44
|
+
assert not [w for w in warnings if "laid out afresh" in w]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_moving_a_box_in_one_graph_is_not_a_new_version():
|
|
48
|
+
case = next(c for c in CASES if c["name"].startswith("new container"))
|
|
49
|
+
container, _ = parse_container(json.loads(json.dumps(case["doc"])))
|
|
50
|
+
first = content_digest(build_container(container))
|
|
51
|
+
container.layouts["a"] = {"positions": {"US1": {"x": 500, "y": 9, "w": 90, "h": 30}}}
|
|
52
|
+
assert content_digest(build_container(container)) == first
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def test_the_convenience_layout_never_reaches_another_graph():
|
|
56
|
+
"""`Container.layout` (what `export_emjson` sets) is the ACTIVE graph's."""
|
|
57
|
+
case = next(c for c in CASES if c["name"].startswith("no layout anywhere"))
|
|
58
|
+
container, _ = parse_container(json.loads(json.dumps(case["doc"])))
|
|
59
|
+
container.layout = {"positions": {"US1": {"x": 1, "y": 1, "w": 90, "h": 30}}}
|
|
60
|
+
doc = build_container(container)
|
|
61
|
+
assert doc["graphs"]["a"]["layout"] == container.layout
|
|
62
|
+
assert "layout" not in doc["graphs"]["b"]
|
|
63
|
+
assert doc["layout"] == container.layout
|
|
@@ -627,3 +627,113 @@ def test_a_long_wait_says_the_jobs_and_their_step(world):
|
|
|
627
627
|
assert "linux done ✓" in out
|
|
628
628
|
# not a terminal: a new line per change of state, not one per look
|
|
629
629
|
assert out.count(f"▸ 2 · publish.yml for v{D}") <= 3
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
# ── the confirmations count down (E.D., 3 Oct 2026) ──────────────────────────
|
|
633
|
+
#
|
|
634
|
+
# On a FAKE TERMINAL (a pty: `isatty()` is true and keys arrive one at a time,
|
|
635
|
+
# as from a person): no key → yes at zero; «n» → stop; Enter → yes at once.
|
|
636
|
+
|
|
637
|
+
def _release_module():
|
|
638
|
+
import importlib.util
|
|
639
|
+
spec = importlib.util.spec_from_file_location("em_release", RELEASE)
|
|
640
|
+
mod = importlib.util.module_from_spec(spec)
|
|
641
|
+
spec.loader.exec_module(mod)
|
|
642
|
+
return mod
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
@pytest.fixture
|
|
646
|
+
def terminal():
|
|
647
|
+
pty = pytest.importorskip("pty") # noqa: F841 — POSIX only, like the countdown
|
|
648
|
+
import io
|
|
649
|
+
master, slave = os.openpty()
|
|
650
|
+
stdin = os.fdopen(slave, "rb", buffering=0)
|
|
651
|
+
out = io.StringIO()
|
|
652
|
+
yield master, stdin, out
|
|
653
|
+
stdin.close()
|
|
654
|
+
os.close(master)
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
def test_the_countdown_says_yes_at_zero(terminal):
|
|
658
|
+
import time
|
|
659
|
+
master, stdin, out = terminal
|
|
660
|
+
R = _release_module()
|
|
661
|
+
t0 = time.monotonic()
|
|
662
|
+
assert R.countdown_confirm("Push these 3 repositories?", 1, stdin=stdin, stdout=out) is True
|
|
663
|
+
assert time.monotonic() - t0 >= 0.9
|
|
664
|
+
said = out.getvalue()
|
|
665
|
+
assert "Push these 3 repositories? [Y/n] — yes in 1 s (n to stop)" in said
|
|
666
|
+
assert "yes (no answer in 1 s)" in said
|
|
667
|
+
assert "\r" in said # the same line, rewritten
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
def _press(master, key, after=0.3):
|
|
671
|
+
"""a key, pressed while the question is counting (not before: those are thrown away)"""
|
|
672
|
+
import threading
|
|
673
|
+
threading.Timer(after, lambda: os.write(master, key)).start()
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
def test_the_countdown_stops_on_n(terminal):
|
|
677
|
+
master, stdin, out = terminal
|
|
678
|
+
R = _release_module()
|
|
679
|
+
_press(master, b"n")
|
|
680
|
+
assert R.countdown_confirm("Commit EMStudio?", 10, stdin=stdin, stdout=out) is False
|
|
681
|
+
assert out.getvalue().rstrip().endswith("— no\033[K")
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
def test_the_countdown_goes_at_once_on_enter(terminal):
|
|
685
|
+
import time
|
|
686
|
+
master, stdin, out = terminal
|
|
687
|
+
R = _release_module()
|
|
688
|
+
_press(master, b"\n")
|
|
689
|
+
t0 = time.monotonic()
|
|
690
|
+
assert R.countdown_confirm("Commit EMStudio?", 10, stdin=stdin, stdout=out) is True
|
|
691
|
+
assert time.monotonic() - t0 < 1.5
|
|
692
|
+
assert "— yes\033[K" in out.getvalue()
|
|
693
|
+
|
|
694
|
+
|
|
695
|
+
def test_the_countdown_gives_the_terminal_back(terminal):
|
|
696
|
+
import termios
|
|
697
|
+
master, stdin, out = terminal
|
|
698
|
+
R = _release_module()
|
|
699
|
+
before = termios.tcgetattr(stdin.fileno())
|
|
700
|
+
_press(master, b"y")
|
|
701
|
+
R.countdown_confirm("Go on?", 10, stdin=stdin, stdout=out)
|
|
702
|
+
after = termios.tcgetattr(stdin.fileno())
|
|
703
|
+
# PENDIN is the KERNEL's («input to reprint»), set by itself after a mode change
|
|
704
|
+
pendin = getattr(termios, "PENDIN", 0)
|
|
705
|
+
before[3] &= ~pendin
|
|
706
|
+
after[3] &= ~pendin
|
|
707
|
+
assert after == before
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
def test_a_key_pressed_before_the_question_is_not_an_answer(terminal):
|
|
711
|
+
master, stdin, out = terminal
|
|
712
|
+
R = _release_module()
|
|
713
|
+
os.write(master, b"n") # typed ahead, before anything was asked
|
|
714
|
+
assert R.countdown_confirm("Go on?", 1, stdin=stdin, stdout=out) is True
|
|
715
|
+
assert "yes (no answer in 1 s)" in out.getvalue()
|
|
716
|
+
|
|
717
|
+
|
|
718
|
+
def test_the_seconds_come_from_the_environment(monkeypatch):
|
|
719
|
+
R = _release_module()
|
|
720
|
+
monkeypatch.delenv("EM_RELEASE_CONFIRM_SECONDS", raising=False)
|
|
721
|
+
assert R.confirm_seconds() == 10
|
|
722
|
+
monkeypatch.setenv("EM_RELEASE_CONFIRM_SECONDS", "3")
|
|
723
|
+
assert R.confirm_seconds() == 3
|
|
724
|
+
monkeypatch.setenv("EM_RELEASE_CONFIRM_SECONDS", "0")
|
|
725
|
+
assert R.confirm_seconds() == 0
|
|
726
|
+
monkeypatch.setenv("EM_RELEASE_CONFIRM_SECONDS", "dieci")
|
|
727
|
+
assert R.confirm_seconds() == 10
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
def test_without_a_terminal_and_without_yes_nobody_says_yes(monkeypatch, capsys):
|
|
731
|
+
import io
|
|
732
|
+
R = _release_module()
|
|
733
|
+
c = R.Ctx(V, None, False, False, False)
|
|
734
|
+
monkeypatch.setattr(sys, "stdin", io.StringIO("")) # not a tty, nothing on it
|
|
735
|
+
assert c.ask("Push these 3 repositories?") is False
|
|
736
|
+
assert "stdin is not a terminal" in capsys.readouterr().out
|
|
737
|
+
monkeypatch.setattr(sys, "stdin", io.StringIO("y\n")) # a pipe that answers: as before
|
|
738
|
+
assert c.ask("Push these 3 repositories?") is True
|
|
739
|
+
assert R.Ctx(V, None, False, False, True).ask("anything?") is True # --yes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_document_types.json
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_extractor_types.json
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_palette_icons.json
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_qualia_types.json
RENAMED
|
File without changes
|
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/em_visual_rules.json
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/hdto_extension.ttl
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/new_qualia_template.json
RENAMED
|
File without changes
|
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/author_ai.png
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/combiner.png
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/combiner.svg
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/continuity.png
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/continuity.svg
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/document.png
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/document.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg
RENAMED
|
File without changes
|
{s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev32}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg
RENAMED
|
File without changes
|