s3dgraphy 1.6.0.dev36__tar.gz → 1.6.0.dev38__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.dev36/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev38}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/datamodel_translations.json +21 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em_qualia_types.json +26 -3
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/api.py +35 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/rdf_exporter.py +36 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/import_graphml.py +9 -0
- s3dgraphy-1.6.0.dev38/src/s3dgraphy/labels.py +253 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/merge/graph_merger.py +24 -12
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy.egg-info/SOURCES.txt +2 -0
- s3dgraphy-1.6.0.dev38/tests/test_alternative_labels.py +138 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_importer_edge_hygiene.py +14 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_qualia_dai_d7_d8.py +3 -3
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_release.py +60 -5
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/README.md +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em.ttl +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/container.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/sheet_header.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/language.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/nodes/translation_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/project_tree.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/addresses.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/locate.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/resources/versions.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/translation.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_asset_versions.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_container_layouts.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_datamodel_fingerprint.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dev29_em_sourcelist.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dev29_file_set_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dev29_graphml_without_a_database.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dev29_image_set_texturing.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dev29_not_georeferenced.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dev29_one_act_n_outputs.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dev29_ttl_round_trip.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dev30_decisions.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dove_sta_il_testo.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_i_generi_dei_passi.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_il_modo_d_accesso.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_il_modo_dal_relay.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_il_riallineamento.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_la_lingua_alla_nascita.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_la_lingua_dei_dati.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_la_lingua_nell_op.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_la_riga_d_intestazione.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_le_traduzioni.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_lod_levels.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_one_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_op_vocabulary.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_piu_indirizzi.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_psx_locator.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_resource_revision.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_rm_container_node_group.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_verifica_provenance.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/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.dev38
|
|
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.dev38"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -2324,6 +2324,27 @@
|
|
|
2324
2324
|
"de": "Ästhetischer Wert"
|
|
2325
2325
|
}
|
|
2326
2326
|
},
|
|
2327
|
+
"alternative_label": {
|
|
2328
|
+
"label": {
|
|
2329
|
+
"en": "Alternative Label",
|
|
2330
|
+
"validated_it": false,
|
|
2331
|
+
"validated_el": false,
|
|
2332
|
+
"validated_he": false,
|
|
2333
|
+
"validated_es": false,
|
|
2334
|
+
"validated_pl": false,
|
|
2335
|
+
"validated_ro": false,
|
|
2336
|
+
"validated_fr": false,
|
|
2337
|
+
"validated_de": false,
|
|
2338
|
+
"it": "Etichetta alternativa",
|
|
2339
|
+
"el": "Εναλλακτική ετικέτα",
|
|
2340
|
+
"he": "תווית חלופית",
|
|
2341
|
+
"es": "Etiqueta alternativa",
|
|
2342
|
+
"pl": "Etykieta alternatywna",
|
|
2343
|
+
"ro": "Etichetă alternativă",
|
|
2344
|
+
"fr": "Libellé alternatif",
|
|
2345
|
+
"de": "Alternative Bezeichnung"
|
|
2346
|
+
}
|
|
2347
|
+
},
|
|
2327
2348
|
"area": {
|
|
2328
2349
|
"label": {
|
|
2329
2350
|
"en": "Area",
|
{s3dgraphy-1.6.0.dev36 → s3dgraphy-1.6.0.dev38}/src/s3dgraphy/JSON_config/em_qualia_types.json
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"metadata": {
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"last_updated": "2026-10-
|
|
3
|
+
"version": "1.6.7",
|
|
4
|
+
"last_updated": "2026-10-05",
|
|
5
5
|
"maintainers": ["Emanuel Demetrescu"],
|
|
6
6
|
"license": "CC-BY-SA-4.0",
|
|
7
7
|
"license_note": "Share-alike per allinearsi agli strumenti terminologici da cui questo datamodel prende gli ancoraggi (ICCD CC BY-SA 3.0 IT) e perche' una derivazione resti aperta. Gli identificatori AAT/CIDOC citati nei `mappings` sono RIFERIMENTI, non contenuto incorporato: lo share-alike non si propaga ai vocabolari altrui, che mantengono i propri termini.",
|
|
8
|
-
"changelog": "v1.6.6 (dev27, 2026-10-31, decided by E.D. 2026-10-01): cultural_interpretive.semantic.attribution gains an optional `note` in its schema and `natural_language_fields: [\"note\"]` — the object is not text, its note is, and only the note carries a language tag (rdf_exporter._Datamodel.natural_language_fields). v1.6.5 (MICRO le traduzioni, 2026-10-29, decided by E.D. 2026-10-01, domanda 3): the doubtful qualia, MEASURED. contextual.administrative.intervention_history is prose (a history of conservation interventions) and gains `natural_language: true`. provenance_history, exhibition_history, publication_history and contextual.ownership.ownership_chain are `object_chain` WITHOUT a schema: no field of theirs is declared and no code reads a structure, so what a PropertyNode stores is ONE string (the chain as written) — the whole string is marked. cultural_interpretive.semantic.attribution is an `object` WITH separate fields (attributed_to: an E39 Actor reference, attribution_type: a closed list, confidence: a float): none of them is a note, so nothing is marked — the rule is to mark only the note, and this object has none. Its value today travels as one string (\"attributed to Phidias\") and leaves untagged; marking it would need a `note` field in its schema, which is E.D.'s to add. inventory_number stays a code. v1.6.4 (MICRO la lingua dei dati, 2026-10-27, decided by E.D. 2026-09-28): cultural_interpretive.iconographic.narrative_content gains `natural_language: true` — its value is prose and leaves in RDF with its language tag (crm:P90_has_value \"la guerra di Troia\"@it), the language coming from the property node's data.lang, else the study's working language. data_type alone does not say it: inventory_number is a string too, and it is a CODE, so it is not marked and never tagged. No other quale marked: the ones whose value may be prose (intervention_history, attribution, the *_history and ownership_chain object chains) are waiting for E.D. v1.6.3 (MICRO em.ttl nel datamodel, 2026-10-26, decided by E.D. 2026-10-01 — every em: term of em.ttl is cited by a datamodel): epistemic.confidence.confidence_level.mappings gains specialised_alternative 'em:confidenceLevel', the em.ttl literal form of the same scalar, declared and NOT emitted (the exporter keeps crminf:I6_Belief_Value via J5). Mapping text only, no quale changed. v1.6.2: added two descriptive qualia of the stratigraphic unit asked for by the DAI record (iDAI.field Layer, D7/D8) — proposte da Cowork per E.D., 28 set 2026, dalla scheda DAI: `feature_shape` (spatial; the shape in plan or section named with a term, AAT 300056273, E55_Type) and `boundary_distinctness` (material; how sharp the limits are: abrupt / clear / gradual / diffuse, E55_Type, no AAT evident). Both controlled vocabularies with indicative seed values; templates declare their own. v1.6.1: added the spatial qualia `geometry` — the PROXY as a quale. The geometry-without-material of a unit becomes a PropertyNode whose payload is a SemanticShapeNode (has_semantic_shape), so the proxy inherits the paradata chain a lone node could not have, and one proxy can be synthesised from several sources. CIDOC default crmgeo:SP5_Geometric_Place_Expression, flagged `confirm_with: Felicetti` (E36 is the alternative, to be decided together with em:AnnotationRegion). v1.6.0: version realigned to the EM language version (EM 1.6) — supersedes the standalone 4.x line (last was 4.2), so all EM JSON config files now share the 1.6.x scheme. Added optional `rationale` + `example` fields to qualia entries (a plain-language why + a concrete case), shown by the EMStudio vocabulary picker when creating a PropertyNode. Seeded for the temporal qualia (absolute_time_start / absolute_time_end / dating_method); to be filled in for the rest incrementally. Prior (4.x) history: v4.2 added rationale/example scaffolding; v4.1: expanded spatial elevation qualia for pyArchInit us_table quote (all E54_Dimension): elevation_relative, elevation_min_absolute, elevation_max_absolute, elevation_min_relative, elevation_max_relative, elevation_min_usm, elevation_max_usm (the generic 'elevation' = absolute MASL, used by quota_abs). Each pyArchInit quota column maps to its own qualia id so they don't collide on the single-PropertyNode-per-property_name rule. v4.0: verified all v3.0 CIDOC-CRM mappings (correct). Expanded with: volume, area, circumference in dimensional; color, texture, finish, patina, hardness, porosity in material; damage_type, fragility, completeness in state; tool_marks, joining_technique in technical; bounding_box, footprint_area in spatial; duration, terminus_post_quem, terminus_ante_quem, relative_chronology in temporal; ceremonial_function, ritual_function, defensive_function, domestic_function, symbolic_function in telic; school, workshop, period_attribution in stylistic. NEW subcategories: iconographic + semantic under cultural_interpretive (iconographic_subject, narrative_content, iconographic_program, aesthetic_value, religious_significance, monumental_status, attribution). Added provenance_history, exhibition_history, publication_history under administrative; NEW ownership subcategory (current_custodian, ownership_chain). NEW CATEGORY epistemic — meta-qualia central to EM paradata model (confidence_level, certainty_level, uncertainty_factors, methodology_used, validation_method, source_quality, primary_contributor, review_status, last_modified)."
|
|
8
|
+
"changelog": "v1.6.7 (MICRO le decisioni della sera, 2026-10-05, asked by E.D. 2026-10-04): contextual.administrative gains `alternative_label` — another label of the element in a source (a numbering of another excavation, of a thesis), analogous to skos:altLabel, projected as crm:P1_is_identified_by → E41_Appellation. The first quale declared `repeatable: true`: one PropertyNode per label, never a list in one value, and the merger keys it with its value (two labels are two claims). Its source is the ordinary paradata chain (property has_data_provenance → extractor extracted_from → document); an optional data.scheme names the numbering. The element's own label (area.settore.tipoNumero) is unchanged. s3dgraphy.labels writes and reads them. v1.6.6 (dev27, 2026-10-31, decided by E.D. 2026-10-01): cultural_interpretive.semantic.attribution gains an optional `note` in its schema and `natural_language_fields: [\"note\"]` — the object is not text, its note is, and only the note carries a language tag (rdf_exporter._Datamodel.natural_language_fields). v1.6.5 (MICRO le traduzioni, 2026-10-29, decided by E.D. 2026-10-01, domanda 3): the doubtful qualia, MEASURED. contextual.administrative.intervention_history is prose (a history of conservation interventions) and gains `natural_language: true`. provenance_history, exhibition_history, publication_history and contextual.ownership.ownership_chain are `object_chain` WITHOUT a schema: no field of theirs is declared and no code reads a structure, so what a PropertyNode stores is ONE string (the chain as written) — the whole string is marked. cultural_interpretive.semantic.attribution is an `object` WITH separate fields (attributed_to: an E39 Actor reference, attribution_type: a closed list, confidence: a float): none of them is a note, so nothing is marked — the rule is to mark only the note, and this object has none. Its value today travels as one string (\"attributed to Phidias\") and leaves untagged; marking it would need a `note` field in its schema, which is E.D.'s to add. inventory_number stays a code. v1.6.4 (MICRO la lingua dei dati, 2026-10-27, decided by E.D. 2026-09-28): cultural_interpretive.iconographic.narrative_content gains `natural_language: true` — its value is prose and leaves in RDF with its language tag (crm:P90_has_value \"la guerra di Troia\"@it), the language coming from the property node's data.lang, else the study's working language. data_type alone does not say it: inventory_number is a string too, and it is a CODE, so it is not marked and never tagged. No other quale marked: the ones whose value may be prose (intervention_history, attribution, the *_history and ownership_chain object chains) are waiting for E.D. v1.6.3 (MICRO em.ttl nel datamodel, 2026-10-26, decided by E.D. 2026-10-01 — every em: term of em.ttl is cited by a datamodel): epistemic.confidence.confidence_level.mappings gains specialised_alternative 'em:confidenceLevel', the em.ttl literal form of the same scalar, declared and NOT emitted (the exporter keeps crminf:I6_Belief_Value via J5). Mapping text only, no quale changed. v1.6.2: added two descriptive qualia of the stratigraphic unit asked for by the DAI record (iDAI.field Layer, D7/D8) — proposte da Cowork per E.D., 28 set 2026, dalla scheda DAI: `feature_shape` (spatial; the shape in plan or section named with a term, AAT 300056273, E55_Type) and `boundary_distinctness` (material; how sharp the limits are: abrupt / clear / gradual / diffuse, E55_Type, no AAT evident). Both controlled vocabularies with indicative seed values; templates declare their own. v1.6.1: added the spatial qualia `geometry` — the PROXY as a quale. The geometry-without-material of a unit becomes a PropertyNode whose payload is a SemanticShapeNode (has_semantic_shape), so the proxy inherits the paradata chain a lone node could not have, and one proxy can be synthesised from several sources. CIDOC default crmgeo:SP5_Geometric_Place_Expression, flagged `confirm_with: Felicetti` (E36 is the alternative, to be decided together with em:AnnotationRegion). v1.6.0: version realigned to the EM language version (EM 1.6) — supersedes the standalone 4.x line (last was 4.2), so all EM JSON config files now share the 1.6.x scheme. Added optional `rationale` + `example` fields to qualia entries (a plain-language why + a concrete case), shown by the EMStudio vocabulary picker when creating a PropertyNode. Seeded for the temporal qualia (absolute_time_start / absolute_time_end / dating_method); to be filled in for the rest incrementally. Prior (4.x) history: v4.2 added rationale/example scaffolding; v4.1: expanded spatial elevation qualia for pyArchInit us_table quote (all E54_Dimension): elevation_relative, elevation_min_absolute, elevation_max_absolute, elevation_min_relative, elevation_max_relative, elevation_min_usm, elevation_max_usm (the generic 'elevation' = absolute MASL, used by quota_abs). Each pyArchInit quota column maps to its own qualia id so they don't collide on the single-PropertyNode-per-property_name rule. v4.0: verified all v3.0 CIDOC-CRM mappings (correct). Expanded with: volume, area, circumference in dimensional; color, texture, finish, patina, hardness, porosity in material; damage_type, fragility, completeness in state; tool_marks, joining_technique in technical; bounding_box, footprint_area in spatial; duration, terminus_post_quem, terminus_ante_quem, relative_chronology in temporal; ceremonial_function, ritual_function, defensive_function, domestic_function, symbolic_function in telic; school, workshop, period_attribution in stylistic. NEW subcategories: iconographic + semantic under cultural_interpretive (iconographic_subject, narrative_content, iconographic_program, aesthetic_value, religious_significance, monumental_status, attribution). Added provenance_history, exhibition_history, publication_history under administrative; NEW ownership subcategory (current_custodian, ownership_chain). NEW CATEGORY epistemic — meta-qualia central to EM paradata model (confidence_level, certainty_level, uncertainty_factors, methodology_used, validation_method, source_quality, primary_contributor, review_status, last_modified)."
|
|
9
9
|
},
|
|
10
10
|
"qualia_categories": [
|
|
11
11
|
{
|
|
@@ -1071,6 +1071,29 @@
|
|
|
1071
1071
|
],
|
|
1072
1072
|
"_description_todo": "This subcategory shipped with no description, so its tooltip was empty in the EMStudio vocabulary picker (the only one of 17). The three proposals above match the register of the sibling subcategories — short noun phrase; the longer one mirrors `ownership`, which already defines itself AGAINST this one ('distinct from administrative qualia which cover legal/inventory aspects'). Pick one, move it into `description`, and delete these two keys.",
|
|
1073
1073
|
"qualia": [
|
|
1074
|
+
{
|
|
1075
|
+
"id": "alternative_label",
|
|
1076
|
+
"name": "Alternative Label",
|
|
1077
|
+
"description": "Another label by which the element is known in a source — a numbering of another excavation, of a thesis, of an archive — with that source as paradata. Repeatable: one property per label. The element's own label (the rule area.settore.tipoNumero) does not change.",
|
|
1078
|
+
"mappings": {
|
|
1079
|
+
"cidoc_crm": "E41_Appellation",
|
|
1080
|
+
"unit_predicate": "crm:P1_is_identified_by",
|
|
1081
|
+
"skos": "skos:altLabel",
|
|
1082
|
+
"mapping_note": "The label is an appellation of the unit (E41, reached with P1_is_identified_by), the same relation skos:altLabel states for a concept; its source is the ordinary paradata chain (has_data_provenance → extractor → extracted_from → the document that uses the label), so it is cited like every other assertion. A numbering it belongs to is data.scheme."
|
|
1083
|
+
},
|
|
1084
|
+
"data_type": "string",
|
|
1085
|
+
"repeatable": true,
|
|
1086
|
+
"schema": {
|
|
1087
|
+
"label": "string",
|
|
1088
|
+
"scheme": "string"
|
|
1089
|
+
},
|
|
1090
|
+
"rationale": "Units of one site are often named differently by the people who dug and studied it: the oldest excavation names them without numbers, a later one numbers them, a thesis numbers them again where the official numbering is missing (E.D., Templu Mare). Keeping every such label, each with the source that uses it, is what lets a reader of any of those publications find the unit — and the search finds them.",
|
|
1091
|
+
"example": "1.US10 is «US 1004» in the 2013 excavation report (scheme «scavo 2013») and «A.12» in Demetrescu's thesis (scheme «tesi Demetrescu»): two alternative_label properties, each with an extractor from its document.",
|
|
1092
|
+
"expected_extractors": [
|
|
1093
|
+
"archival_research",
|
|
1094
|
+
"bibliographic_research"
|
|
1095
|
+
]
|
|
1096
|
+
},
|
|
1074
1097
|
{
|
|
1075
1098
|
"id": "inventory_number",
|
|
1076
1099
|
"name": "Inventory Number",
|
|
@@ -284,6 +284,41 @@ def shared_properties(graph: Graph) -> List[Dict[str, Any]]:
|
|
|
284
284
|
return _shared(graph)
|
|
285
285
|
|
|
286
286
|
|
|
287
|
+
# ── A1 · the alternative labels of a unit, each with its source ─────────────
|
|
288
|
+
def add_alternative_label(graph: Graph, unit_id: str, label: str, *,
|
|
289
|
+
sources: Optional[Sequence[str]] = None,
|
|
290
|
+
scheme: Optional[str] = None,
|
|
291
|
+
author: Optional[str] = None) -> Dict[str, Any]:
|
|
292
|
+
"""Another label of ``unit_id`` (quale ``alternative_label``, like
|
|
293
|
+
skos:altLabel): ONE PropertyNode per label, its sources as paradata
|
|
294
|
+
(property → extractor → the document that uses the label), an optional
|
|
295
|
+
``scheme`` (the numbering it belongs to). The unit's own label does not
|
|
296
|
+
change. Same label, unit and scheme again → the same nodes.
|
|
297
|
+
See :mod:`s3dgraphy.labels`."""
|
|
298
|
+
from .labels import add_alternative_label as _add
|
|
299
|
+
return _add(graph, unit_id, label, sources=sources, scheme=scheme, author=author)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def alternative_labels(graph: Graph, unit_id: str) -> List[Dict[str, Any]]:
|
|
303
|
+
"""``[{property_id, label, scheme, sources: [{id, name, extractor_id}]}]``."""
|
|
304
|
+
from .labels import alternative_labels as _labels
|
|
305
|
+
return _labels(graph, unit_id)
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def remove_alternative_label(graph: Graph, unit_id: str, property_id: str) -> bool:
|
|
309
|
+
"""Take one alternative label off a unit (its extractors stay)."""
|
|
310
|
+
from .labels import remove_alternative_label as _remove
|
|
311
|
+
return _remove(graph, unit_id, property_id)
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def find_by_label(graph: Graph, text: str, *, exact: bool = False) -> List[Dict[str, Any]]:
|
|
315
|
+
"""The nodes whose label or one of whose alternative labels matches
|
|
316
|
+
``text`` (case-insensitive, substring unless ``exact``): ``[{node_id,
|
|
317
|
+
name, matched, scheme}]``."""
|
|
318
|
+
from .labels import find_by_label as _find
|
|
319
|
+
return _find(graph, text, exact=exact)
|
|
320
|
+
|
|
321
|
+
|
|
287
322
|
# ── human authorship with AI support, and its verification ──────────────────
|
|
288
323
|
def unvalidated_ai(graph: Graph) -> List[Dict[str, Any]]:
|
|
289
324
|
"""Every node made with AI (``data.ai_assisted``) that no person has
|
|
@@ -266,6 +266,7 @@ class _Datamodel:
|
|
|
266
266
|
#: quale id → the fields of an OBJECT value that are natural language
|
|
267
267
|
#: (dev27: attribution.note) — the object is not text, its note is
|
|
268
268
|
self._qualia_natural_language_fields: Dict[str, Tuple[str, ...]] = {}
|
|
269
|
+
self._qualia_unit_predicates: Dict[str, Tuple[str, str]] = {}
|
|
269
270
|
self._build_qualia_index(self.qualia_types)
|
|
270
271
|
|
|
271
272
|
#: reverse edge name → canonical edge name. The connections datamodel
|
|
@@ -312,6 +313,14 @@ class _Datamodel:
|
|
|
312
313
|
if qid and isinstance(fields, list):
|
|
313
314
|
self._qualia_natural_language_fields[qid] = tuple(
|
|
314
315
|
str(f) for f in fields)
|
|
316
|
+
# A1 · a quale that ALSO says something of its unit with a
|
|
317
|
+
# predicate of its own (alternative_label: the unit is
|
|
318
|
+
# identified by the label, P1, and the label is its
|
|
319
|
+
# skos:altLabel)
|
|
320
|
+
if qid and mappings.get("unit_predicate"):
|
|
321
|
+
self._qualia_unit_predicates[qid] = (
|
|
322
|
+
str(mappings["unit_predicate"]),
|
|
323
|
+
str(mappings.get("skos") or ""))
|
|
315
324
|
|
|
316
325
|
# ─── public lookups ─────────────────────────────────────────────────────
|
|
317
326
|
|
|
@@ -560,6 +569,13 @@ class _Datamodel:
|
|
|
560
569
|
return key
|
|
561
570
|
return None
|
|
562
571
|
|
|
572
|
+
def unit_predicate_for(self, property_type: Optional[str]):
|
|
573
|
+
"""``(unit_predicate, skos_predicate)`` of a quale that declares one
|
|
574
|
+
(``mappings.unit_predicate``), else None."""
|
|
575
|
+
if not property_type:
|
|
576
|
+
return None
|
|
577
|
+
return self._qualia_unit_predicates.get(property_type)
|
|
578
|
+
|
|
563
579
|
def get_qualia_crm_iri(self, property_type: Optional[str]) -> Optional[URIRef]:
|
|
564
580
|
"""Resolve a property_type string to its CIDOC class IRI.
|
|
565
581
|
|
|
@@ -1052,6 +1068,26 @@ class RDFExporter:
|
|
|
1052
1068
|
EM.inheritsQualia,
|
|
1053
1069
|
self._node_iri(g.graph_id, edge.edge_target)))
|
|
1054
1070
|
|
|
1071
|
+
# A1 · the qualia with a predicate of their own on the unit: an
|
|
1072
|
+
# alternative_label leaves as <unit> crm:P1_is_identified_by <label>
|
|
1073
|
+
# and <unit> skos:altLabel "the label" — beside em:hasQualia, so a
|
|
1074
|
+
# reader that knows only CIDOC or only SKOS finds it too
|
|
1075
|
+
for edge in g.edges:
|
|
1076
|
+
if edge.edge_type != "has_property":
|
|
1077
|
+
continue
|
|
1078
|
+
pn = g.find_node_by_id(edge.edge_target)
|
|
1079
|
+
ptype = getattr(pn, "property_type", None) or getattr(pn, "name", None)
|
|
1080
|
+
pred = self.datamodel.unit_predicate_for(ptype)
|
|
1081
|
+
if pn is None or pred is None:
|
|
1082
|
+
continue
|
|
1083
|
+
unit_iri = self._node_iri(g.graph_id, edge.edge_source)
|
|
1084
|
+
if pred[0]:
|
|
1085
|
+
ctx.add((unit_iri, _resolve_prefixed(pred[0]),
|
|
1086
|
+
self._node_iri(g.graph_id, pn.node_id)))
|
|
1087
|
+
value = str(getattr(pn, "value", "") or "").strip()
|
|
1088
|
+
if pred[1] and value:
|
|
1089
|
+
ctx.add((unit_iri, _resolve_prefixed(pred[1]), Literal(value)))
|
|
1090
|
+
|
|
1055
1091
|
# CRMinf belief propositions (J4 → I17) — needs the full edge
|
|
1056
1092
|
# topology, so it runs as a post-pass after nodes and edges.
|
|
1057
1093
|
self._emit_belief_propositions(g, ctx)
|
|
@@ -3442,6 +3442,15 @@ class GraphMLImporter:
|
|
|
3442
3442
|
edge_type = "combines"
|
|
3443
3443
|
# print(f"Enhanced to combines: CombinerNode -> ExtractorNode")
|
|
3444
3444
|
|
|
3445
|
+
# DocumentNode -> PropertyNode: the document's own property (its
|
|
3446
|
+
# dating, `absolute_time_start` drawn beside a master document),
|
|
3447
|
+
# the reading `_enrich_canonical_documents` already gives it.
|
|
3448
|
+
# Measured on Templu Mare (4 Oct 2026): five of these came out
|
|
3449
|
+
# generic_connection and reached the room that way.
|
|
3450
|
+
elif (isinstance(source_node, DocumentNode)
|
|
3451
|
+
and isinstance(target_node, PropertyNode)):
|
|
3452
|
+
edge_type = "has_property"
|
|
3453
|
+
|
|
3445
3454
|
# PropertyNode -> DocumentNode. BUGFIX-CONN3: this is read as
|
|
3446
3455
|
# has_documentation (P70i_is_documented_in) — the honest shortcut
|
|
3447
3456
|
# when a legacy yEd dashed connector links a property to a source
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"""A1 · the alternative labels of a unit, each with its source.
|
|
2
|
+
|
|
3
|
+
The case (E.D., Templu Mare): in the oldest excavation the units have a name
|
|
4
|
+
and no number, in the 2013 one they are numbered, and for his doctoral thesis
|
|
5
|
+
E.D. used a numbering of his own because the official one was missing. A unit
|
|
6
|
+
must be able to carry several alternative labels, each with where it comes
|
|
7
|
+
from.
|
|
8
|
+
|
|
9
|
+
**The main label does not change.** It is the one of the rule
|
|
10
|
+
``area.settore.tipoNumero`` (``1.US10``), unique in the graph — inside Blender
|
|
11
|
+
two objects cannot have the same name. An alternative label is a PROPERTY of
|
|
12
|
+
the unit, quale ``alternative_label`` (``em_qualia_types.json``, analogous to
|
|
13
|
+
``skos:altLabel``, projected as ``crm:P1_is_identified_by`` → ``E41_Appellation``):
|
|
14
|
+
|
|
15
|
+
* repeatable — ONE PropertyNode PER LABEL, never a list in one value;
|
|
16
|
+
* its source is PARADATA, the ordinary chain: property ``has_data_provenance``
|
|
17
|
+
→ extractor ``extracted_from`` → the document that uses that label (the 2013
|
|
18
|
+
excavation report, the thesis). So the source is citable like every other
|
|
19
|
+
assertion in EM, and a label read in two documents has two extractors and a
|
|
20
|
+
combiner, as any property does;
|
|
21
|
+
* an optional ``scheme`` (``"scavo 2013"``, ``"tesi Demetrescu"``) names the
|
|
22
|
+
numbering it belongs to, for filtering.
|
|
23
|
+
|
|
24
|
+
Ids are deterministic (``uuid5``), so writing the same label again for the same
|
|
25
|
+
unit and scheme lands on the same nodes instead of piling up copies — the same
|
|
26
|
+
discipline as ``geometry/proxy.py`` and ``annotation/paradata.py``.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
import uuid
|
|
32
|
+
from typing import Any, Dict, List, Optional, Sequence
|
|
33
|
+
|
|
34
|
+
from .graph import Graph
|
|
35
|
+
from .nodes.combiner_node import CombinerNode
|
|
36
|
+
from .nodes.extractor_node import ExtractorNode
|
|
37
|
+
from .nodes.property_node import PropertyNode
|
|
38
|
+
|
|
39
|
+
#: the quale, registered in em_qualia_types.json (contextual ▸ identification)
|
|
40
|
+
ALTERNATIVE_LABEL = "alternative_label"
|
|
41
|
+
|
|
42
|
+
_NS = uuid.uuid5(uuid.NAMESPACE_URL, "https://w3id.org/em/alternative-label")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _id(key: str) -> str:
|
|
46
|
+
return str(uuid.uuid5(_NS, key))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _norm(text: Any) -> str:
|
|
50
|
+
return " ".join(str(text or "").split())
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def property_id_for(unit_id: str, label: str, scheme: Optional[str] = None) -> str:
|
|
54
|
+
"""The id of the PropertyNode carrying ``label`` (in ``scheme``) for a unit."""
|
|
55
|
+
return _id(f"altlabel|{unit_id}|{_norm(scheme).casefold()}|{_norm(label)}")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _edge(graph: Graph, source_id: str, target_id: str, edge_type: str,
|
|
59
|
+
out: Dict[str, Any]) -> None:
|
|
60
|
+
"""One edge, or a warning — never a generic_connection."""
|
|
61
|
+
source = graph.find_node_by_id(source_id)
|
|
62
|
+
target = graph.find_node_by_id(target_id)
|
|
63
|
+
if source is None or target is None:
|
|
64
|
+
out["warnings"].append(f"alternative label: '{edge_type}' not created, an endpoint is missing")
|
|
65
|
+
return
|
|
66
|
+
if not graph.validate_connection(source.node_type, target.node_type, edge_type):
|
|
67
|
+
out["warnings"].append(
|
|
68
|
+
f"alternative label: '{edge_type}' is not allowed from "
|
|
69
|
+
f"{type(source).__name__} to {type(target).__name__}; NOT created")
|
|
70
|
+
return
|
|
71
|
+
edge_id = _id(f"edge|{source_id}|{edge_type}|{target_id}")
|
|
72
|
+
if graph.find_edge_by_id(edge_id) is None:
|
|
73
|
+
graph.add_edge(edge_id, source_id, target_id, edge_type)
|
|
74
|
+
out["created"] = True
|
|
75
|
+
out["edge_ids"].append(edge_id)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def add_alternative_label(graph: Graph, unit_id: str, label: str, *,
|
|
79
|
+
sources: Optional[Sequence[str]] = None,
|
|
80
|
+
scheme: Optional[str] = None,
|
|
81
|
+
author: Optional[str] = None) -> Dict[str, Any]:
|
|
82
|
+
"""Give a unit an alternative label, with its sources.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
unit_id: the node the label names (a stratigraphic unit, a document…:
|
|
86
|
+
whatever ``has_property`` admits as a source).
|
|
87
|
+
label: the label as the source writes it (``"US 1004"``, ``"Ambiente
|
|
88
|
+
B"``). Spaces are normalised; nothing else is changed.
|
|
89
|
+
sources: the ids of the documents (or annotation regions, or units)
|
|
90
|
+
that use this label. One source → one extractor; several → one
|
|
91
|
+
extractor each joined by a combiner.
|
|
92
|
+
scheme: the numbering the label belongs to (``"scavo 2013"``).
|
|
93
|
+
author: written as ``data.author`` on the created nodes.
|
|
94
|
+
|
|
95
|
+
Returns ``{property_id, extractor_ids, combiner_id, created, edge_ids,
|
|
96
|
+
warnings}``. Raises ValueError for an empty label.
|
|
97
|
+
"""
|
|
98
|
+
text = _norm(label)
|
|
99
|
+
if not text:
|
|
100
|
+
raise ValueError("an alternative label needs a text")
|
|
101
|
+
out: Dict[str, Any] = {"property_id": property_id_for(unit_id, text, scheme),
|
|
102
|
+
"extractor_ids": [], "combiner_id": None,
|
|
103
|
+
"created": False, "edge_ids": [], "warnings": []}
|
|
104
|
+
unit = graph.find_node_by_id(unit_id)
|
|
105
|
+
if unit is None:
|
|
106
|
+
raise ValueError(f"no node '{unit_id}' in the graph")
|
|
107
|
+
if _norm(getattr(unit, "name", "")) == text:
|
|
108
|
+
out["warnings"].append(
|
|
109
|
+
f"alternative label: '{text}' is the unit's own label; written anyway")
|
|
110
|
+
pid = out["property_id"]
|
|
111
|
+
if graph.find_node_by_id(pid) is None:
|
|
112
|
+
prop = PropertyNode(node_id=pid, name=ALTERNATIVE_LABEL, value=text,
|
|
113
|
+
property_type=ALTERNATIVE_LABEL)
|
|
114
|
+
if scheme:
|
|
115
|
+
prop.data["scheme"] = _norm(scheme)
|
|
116
|
+
if author:
|
|
117
|
+
prop.data["author"] = author
|
|
118
|
+
graph.add_node(prop)
|
|
119
|
+
out["created"] = True
|
|
120
|
+
_edge(graph, unit_id, pid, "has_property", out)
|
|
121
|
+
|
|
122
|
+
for source_id in [s for s in (sources or []) if s]:
|
|
123
|
+
src = graph.find_node_by_id(source_id)
|
|
124
|
+
if src is None:
|
|
125
|
+
out["warnings"].append(f"alternative label: source '{source_id}' is not in the graph")
|
|
126
|
+
continue
|
|
127
|
+
eid = _id(f"extractor|{pid}|{source_id}")
|
|
128
|
+
if graph.find_node_by_id(eid) is None:
|
|
129
|
+
ext = ExtractorNode(node_id=eid,
|
|
130
|
+
name=f"{text} in {getattr(src, 'name', source_id)}",
|
|
131
|
+
description=f"the label «{text}» as {getattr(src, 'name', source_id)} uses it")
|
|
132
|
+
if author:
|
|
133
|
+
ext.data["author"] = author
|
|
134
|
+
graph.add_node(ext)
|
|
135
|
+
out["created"] = True
|
|
136
|
+
_edge(graph, eid, source_id, "extracted_from", out)
|
|
137
|
+
out["extractor_ids"].append(eid)
|
|
138
|
+
|
|
139
|
+
if len(out["extractor_ids"]) > 1:
|
|
140
|
+
cid = _id(f"combiner|{pid}")
|
|
141
|
+
if graph.find_node_by_id(cid) is None:
|
|
142
|
+
comb = CombinerNode(node_id=cid, name=f"{text} · sources",
|
|
143
|
+
description="the same label in several sources")
|
|
144
|
+
if author:
|
|
145
|
+
comb.data["author"] = author
|
|
146
|
+
graph.add_node(comb)
|
|
147
|
+
out["created"] = True
|
|
148
|
+
out["combiner_id"] = cid
|
|
149
|
+
for eid in out["extractor_ids"]:
|
|
150
|
+
_edge(graph, cid, eid, "combines", out)
|
|
151
|
+
_edge(graph, pid, cid, "has_data_provenance", out)
|
|
152
|
+
elif out["extractor_ids"]:
|
|
153
|
+
_edge(graph, pid, out["extractor_ids"][0], "has_data_provenance", out)
|
|
154
|
+
return out
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _is_alt_label(node: Any) -> bool:
|
|
158
|
+
return (getattr(node, "node_type", "") == "property"
|
|
159
|
+
and (getattr(node, "property_type", None) == ALTERNATIVE_LABEL
|
|
160
|
+
or getattr(node, "name", None) == ALTERNATIVE_LABEL))
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def _sources_of(graph: Graph, prop_id: str) -> List[Dict[str, str]]:
|
|
164
|
+
"""The documents a property is read from, through its extractors (and a
|
|
165
|
+
combiner if there is one)."""
|
|
166
|
+
out: List[Dict[str, str]] = []
|
|
167
|
+
frontier = [e.edge_target for e in graph.edges
|
|
168
|
+
if e.edge_source == prop_id and e.edge_type == "has_data_provenance"]
|
|
169
|
+
seen = set()
|
|
170
|
+
while frontier:
|
|
171
|
+
nid = frontier.pop(0)
|
|
172
|
+
if nid in seen:
|
|
173
|
+
continue
|
|
174
|
+
seen.add(nid)
|
|
175
|
+
node = graph.find_node_by_id(nid)
|
|
176
|
+
nt = getattr(node, "node_type", "")
|
|
177
|
+
if nt == "combiner":
|
|
178
|
+
frontier += [e.edge_target for e in graph.edges
|
|
179
|
+
if e.edge_source == nid and e.edge_type == "combines"]
|
|
180
|
+
elif nt == "extractor":
|
|
181
|
+
for e in graph.edges:
|
|
182
|
+
if e.edge_source == nid and e.edge_type == "extracted_from":
|
|
183
|
+
doc = graph.find_node_by_id(e.edge_target)
|
|
184
|
+
out.append({"id": e.edge_target, "name": str(getattr(doc, "name", "") or e.edge_target),
|
|
185
|
+
"extractor_id": nid})
|
|
186
|
+
return out
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def alternative_labels(graph: Graph, unit_id: str) -> List[Dict[str, Any]]:
|
|
190
|
+
"""The alternative labels of a unit: ``[{property_id, label, scheme,
|
|
191
|
+
sources: [{id, name, extractor_id}]}]``, in the order of the graph."""
|
|
192
|
+
out = []
|
|
193
|
+
for e in graph.edges:
|
|
194
|
+
if e.edge_source != unit_id or e.edge_type != "has_property":
|
|
195
|
+
continue
|
|
196
|
+
prop = graph.find_node_by_id(e.edge_target)
|
|
197
|
+
if prop is None or not _is_alt_label(prop):
|
|
198
|
+
continue
|
|
199
|
+
data = getattr(prop, "data", None) or {}
|
|
200
|
+
out.append({"property_id": prop.node_id, "label": str(getattr(prop, "value", "") or ""),
|
|
201
|
+
"scheme": str(data.get("scheme") or ""),
|
|
202
|
+
"sources": _sources_of(graph, prop.node_id)})
|
|
203
|
+
return out
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def remove_alternative_label(graph: Graph, unit_id: str, property_id: str) -> bool:
|
|
207
|
+
"""Take a label off a unit: the edge goes, and the property with it when no
|
|
208
|
+
other node holds it (its extractors stay: they are readings of a source)."""
|
|
209
|
+
gone = [e for e in graph.edges if e.edge_source == unit_id
|
|
210
|
+
and e.edge_target == property_id and e.edge_type == "has_property"]
|
|
211
|
+
for e in gone:
|
|
212
|
+
graph.remove_edge(e.edge_id)
|
|
213
|
+
if gone and not any(e.edge_target == property_id and e.edge_type == "has_property"
|
|
214
|
+
for e in graph.edges):
|
|
215
|
+
graph.remove_node(property_id)
|
|
216
|
+
return bool(gone)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def find_by_label(graph: Graph, text: str, *, exact: bool = False) -> List[Dict[str, Any]]:
|
|
220
|
+
"""The nodes whose label OR one of whose alternative labels matches
|
|
221
|
+
``text`` (case-insensitive; a substring unless ``exact``):
|
|
222
|
+
``[{node_id, name, matched, scheme}]`` — ``matched`` is the label that
|
|
223
|
+
answered, ``scheme`` its numbering (empty for the main label)."""
|
|
224
|
+
q = _norm(text).casefold()
|
|
225
|
+
if not q:
|
|
226
|
+
return []
|
|
227
|
+
hit = (lambda s: s.casefold() == q) if exact else (lambda s: q in s.casefold())
|
|
228
|
+
out: List[Dict[str, Any]] = []
|
|
229
|
+
seen = set()
|
|
230
|
+
for n in graph.nodes:
|
|
231
|
+
name = _norm(getattr(n, "name", ""))
|
|
232
|
+
# the paradata that carry a label in their own name (the extractor «US
|
|
233
|
+
# 1004 in D.2013…») are readings OF a label, not nodes it names
|
|
234
|
+
if getattr(n, "node_type", "") in ("property", "extractor", "combiner"):
|
|
235
|
+
continue
|
|
236
|
+
if name and hit(name):
|
|
237
|
+
out.append({"node_id": n.node_id, "name": name, "matched": name, "scheme": ""})
|
|
238
|
+
seen.add(n.node_id)
|
|
239
|
+
by_id = {n.node_id: n for n in graph.nodes}
|
|
240
|
+
for e in graph.edges:
|
|
241
|
+
if e.edge_type != "has_property" or e.edge_source in seen:
|
|
242
|
+
continue
|
|
243
|
+
prop = by_id.get(e.edge_target)
|
|
244
|
+
if prop is None or not _is_alt_label(prop):
|
|
245
|
+
continue
|
|
246
|
+
label = _norm(getattr(prop, "value", ""))
|
|
247
|
+
if label and hit(label):
|
|
248
|
+
owner = by_id.get(e.edge_source)
|
|
249
|
+
out.append({"node_id": e.edge_source, "name": _norm(getattr(owner, "name", "")),
|
|
250
|
+
"matched": label,
|
|
251
|
+
"scheme": str((getattr(prop, "data", None) or {}).get("scheme") or "")})
|
|
252
|
+
seen.add(e.edge_source)
|
|
253
|
+
return out
|
|
@@ -38,6 +38,10 @@ from ..edges.edge import Edge
|
|
|
38
38
|
# spellings ``is_bonded_to`` / ``is_physically_equal_to`` (the datamodel's
|
|
39
39
|
# ``spelling_of``) are still recognised, and COMPARED under the canonical name
|
|
40
40
|
# (``_canonical_spelling``), so two spellings of one bond are not a conflict.
|
|
41
|
+
#: The qualia a unit may carry more than once, one PropertyNode each
|
|
42
|
+
#: (``repeatable: true`` in em_qualia_types.json).
|
|
43
|
+
REPEATABLE_QUALIA = frozenset({"alternative_label"})
|
|
44
|
+
|
|
41
45
|
STRATIGRAPHIC_EDGE_TYPES = {
|
|
42
46
|
'overlies', 'is_overlain_by',
|
|
43
47
|
'cuts', 'is_cut_by',
|
|
@@ -639,10 +643,7 @@ class GraphMerger:
|
|
|
639
643
|
cand = incoming.find_node_by_id(edge.edge_target)
|
|
640
644
|
if not isinstance(cand, PropertyNode):
|
|
641
645
|
continue
|
|
642
|
-
|
|
643
|
-
if not cand_type or cand_type == 'string':
|
|
644
|
-
cand_type = cand.name
|
|
645
|
-
if cand_type == prop_type:
|
|
646
|
+
if self._qualia_key(cand) == prop_type:
|
|
646
647
|
inc_pn = cand
|
|
647
648
|
break
|
|
648
649
|
if inc_pn is None:
|
|
@@ -784,10 +785,7 @@ class GraphMerger:
|
|
|
784
785
|
cand = graph.find_node_by_id(e.edge_target)
|
|
785
786
|
if not isinstance(cand, PropertyNode):
|
|
786
787
|
continue
|
|
787
|
-
|
|
788
|
-
if not cand_type or cand_type == 'string':
|
|
789
|
-
cand_type = cand.name
|
|
790
|
-
if cand_type == prop_type:
|
|
788
|
+
if self._qualia_key(cand) == prop_type:
|
|
791
789
|
pn_to_remove = cand
|
|
792
790
|
break
|
|
793
791
|
if pn_to_remove is None:
|
|
@@ -989,12 +987,26 @@ class GraphMerger:
|
|
|
989
987
|
pn = graph.find_node_by_id(edge.edge_target)
|
|
990
988
|
if not host_name or not isinstance(pn, PropertyNode):
|
|
991
989
|
continue
|
|
992
|
-
|
|
993
|
-
if not prop_type or prop_type == 'string':
|
|
994
|
-
prop_type = pn.name or 'definition'
|
|
995
|
-
out[(host_name, prop_type)] = pn
|
|
990
|
+
out[(host_name, self._qualia_key(pn))] = pn
|
|
996
991
|
return out
|
|
997
992
|
|
|
993
|
+
@staticmethod
|
|
994
|
+
def _qualia_key(pn: PropertyNode) -> str:
|
|
995
|
+
"""The quale a PropertyNode answers, as the maps key it: its
|
|
996
|
+
``property_type`` (its name when the type is missing or the legacy
|
|
997
|
+
``"string"``). A REPEATABLE quale (``alternative_label``: one
|
|
998
|
+
PropertyNode per label, A1 5 Oct 2026) is keyed with its value too —
|
|
999
|
+
two labels of one unit are two claims, so a label the table adds is
|
|
1000
|
+
``qualia_added`` and never a ``qualia_changed`` of the other one."""
|
|
1001
|
+
prop_type = pn.property_type
|
|
1002
|
+
if not prop_type or prop_type == 'string':
|
|
1003
|
+
prop_type = pn.name or 'definition'
|
|
1004
|
+
if prop_type in REPEATABLE_QUALIA:
|
|
1005
|
+
value = " ".join(str(getattr(pn, "value", "") or "").split())
|
|
1006
|
+
scheme = " ".join(str((getattr(pn, "data", None) or {}).get("scheme") or "").split())
|
|
1007
|
+
return f"{prop_type}={value}" + (f" [{scheme}]" if scheme else "")
|
|
1008
|
+
return prop_type
|
|
1009
|
+
|
|
998
1010
|
@staticmethod
|
|
999
1011
|
def _pn_display_value(pn: PropertyNode) -> str:
|
|
1000
1012
|
"""Display value for a PropertyNode — falls back to
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: s3dgraphy
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev38
|
|
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>
|
|
@@ -15,6 +15,7 @@ src/s3dgraphy/editorial.py
|
|
|
15
15
|
src/s3dgraphy/graph.py
|
|
16
16
|
src/s3dgraphy/iiif.py
|
|
17
17
|
src/s3dgraphy/indices.py
|
|
18
|
+
src/s3dgraphy/labels.py
|
|
18
19
|
src/s3dgraphy/language.py
|
|
19
20
|
src/s3dgraphy/ownership.py
|
|
20
21
|
src/s3dgraphy/project_tree.py
|
|
@@ -358,6 +359,7 @@ tests/test_acquisition.py
|
|
|
358
359
|
tests/test_acquisition_fs.py
|
|
359
360
|
tests/test_add_resource.py
|
|
360
361
|
tests/test_ai_validation_nodes.py
|
|
362
|
+
tests/test_alternative_labels.py
|
|
361
363
|
tests/test_api_surface.py
|
|
362
364
|
tests/test_asset_dtc_protocol.py
|
|
363
365
|
tests/test_asset_versions.py
|