s3dgraphy 1.6.0.dev81__tar.gz → 1.6.0.dev83__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.dev81/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev83}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/api.py +11 -0
- s3dgraphy-1.6.0.dev83/src/s3dgraphy/resources/asset_list.py +442 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy.egg-info/SOURCES.txt +2 -0
- s3dgraphy-1.6.0.dev83/tests/test_asset_list.py +100 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/README.md +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/alternative_cases.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em.ttl +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/bozze/site.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/hdto/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/hdto/hdt.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/hdto/heritage_entity.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/hdto/project.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/hdto/study.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/__main__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/container.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/frame.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/registration.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/transform.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/gis/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/gis/crs.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/gis/layer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/gis/shapefile.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/gis/site.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/graph_removal.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/hdto.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/sheet_header.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/labels.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/language.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/links.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/periodization_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/nodes/translation_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/paradata_view.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/periodization.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/project_tree.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/property_source.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/addresses.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/alignment.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/alternatives.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/blend_folder.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/blend_room.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/consolidate.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/detail.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/graph_compose.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/locate.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/moved.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/object_store.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/use_profiles.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/resources/versions.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/room_import/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/room_import/access.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/room_import/engine.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/room_import/errors.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/room_import/inventory.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/room_import/node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/room_import/pack.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/room_import/trust.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/spatiotemporal.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/temporal/relative_chronology.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/translation.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_alternative_labels.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_alternative_sets.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_alternatives_hat.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_anastylosis_document_type.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_asset_versions.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_blend_folder.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_blend_room.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_bucket_alignment.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_consolida_2.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_consolidate_compose.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_container_layouts.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_contemporaneity.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_cycle_message_is_cheap.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_datamodel_fingerprint.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_detail.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dev29_em_sourcelist.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dev29_file_set_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dev29_graphml_without_a_database.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dev29_image_set_texturing.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dev29_not_georeferenced.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dev29_one_act_n_outputs.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dev29_ttl_round_trip.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dev30_decisions.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dove_sta_il_testo.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_edge_outside_graph.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_emjson_conformance.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_emjson_no_drawing_keys.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_end_of_unit.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_epoch_instances.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_file_frame.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_gis_site.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_graph_header_code.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_graph_helpers_indexed.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_graph_indices_alive.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_graph_removal.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_hdto_glyphs.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_hdto_study.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_i_generi_dei_passi.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_il_modo_d_accesso.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_il_modo_dal_relay.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_il_riallineamento.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_import_without_residues.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_iri_extendedmatrix.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_issue27_small_points.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_la_lingua_alla_nascita.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_la_lingua_dei_dati.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_la_lingua_nell_op.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_la_riga_d_intestazione.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_lab_orizzonti.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_le_traduzioni.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_lod_levels.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_one_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_op_vocabulary.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_part_twins.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_piu_indirizzi.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_promote_keeps_proxy_type.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_property_as_source.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_psx_locator.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_qualia_dai_d7_d8.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_rdf_sub_epoch_direction.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_registration.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_release.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_resource_revision.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_rm_container_node_group.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_room_import.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_room_import_access.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_room_import_inventory.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_room_import_trust.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_series_vsf.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_spatiotemporal_entities.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_special_find_definitions.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_stable_study_code.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_threed_instances.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_transform_form.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_use_profiles.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_valore_proprieta_doppio.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_verifica_provenance.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_version_for.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/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.dev83
|
|
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.dev83"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -1672,6 +1672,17 @@ def consolidate(graph: Graph, platform: str = "heriverse", *, models=None, state
|
|
|
1672
1672
|
measure=measure, changed=changed)
|
|
1673
1673
|
|
|
1674
1674
|
|
|
1675
|
+
def asset_list(graph: Graph, *, models=None, states=None, in_room: bool = False,
|
|
1676
|
+
measure=None, changed=None) -> Dict[str, Any]:
|
|
1677
|
+
"""Archive › Asset: each asset with its versions and their textures, the
|
|
1678
|
+
state and the proposal per target (mobile webXR, Heriverse / web, desktop
|
|
1679
|
+
realtime, archive), the study's textures once with where they are used,
|
|
1680
|
+
the totals against the bands. Consolida 2's rules, laid out per asset.
|
|
1681
|
+
Writes nothing. See :mod:`s3dgraphy.resources.asset_list`."""
|
|
1682
|
+
from .resources.asset_list import asset_list as _a
|
|
1683
|
+
return _a(graph, models=models, states=states, in_room=in_room, measure=measure, changed=changed)
|
|
1684
|
+
|
|
1685
|
+
|
|
1675
1686
|
def compose_from_graph(graph: Graph, profile: str, *, em_folder: str, **kw) -> Dict[str, Any]:
|
|
1676
1687
|
"""The plan of a working .blend composed from the graph (no .blend to
|
|
1677
1688
|
start from), from the disk or the room, each object with the graph's
|
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
"""Archive › Asset — the list of a study's assets, with their versions and
|
|
2
|
+
textures, for one target or several (MICRO-ARCHIVE-ASSET, E.D. 31 Oct 2026).
|
|
3
|
+
|
|
4
|
+
E.D.: the dialog «Consolida per…» was unusable; what is wanted is a list in
|
|
5
|
+
the manner of Unreal's content browser — each asset with its fingerprint, its
|
|
6
|
+
versions and their textures nested and declared, a sheet with actions in bulk
|
|
7
|
+
for one target or more, the tools. It serves as an AUDIT too (are the files
|
|
8
|
+
there, are they stamped, is the tileset's master declared), not only as
|
|
9
|
+
optimisation. EMStudio shows it in Archive (the second view «File | Asset»);
|
|
10
|
+
EM Tools points to it.
|
|
11
|
+
|
|
12
|
+
Nothing new is decided here: the rules are :mod:`.consolidate`'s (the floor
|
|
13
|
+
mobile webXR, lightness by default for the web, «troppo pesante», the radar
|
|
14
|
+
«modificata dopo il timbro», the tileset's master) and the bands are
|
|
15
|
+
:mod:`.use_profiles`' (``LIGHT_WEB``, ``LIGHT_MOBILE``, desktop realtime).
|
|
16
|
+
This module only LAYS THEM OUT per asset and per target:
|
|
17
|
+
|
|
18
|
+
* the targets (:data:`TARGETS`): **mobile** webXR (the base, always),
|
|
19
|
+
**web** (Heriverse / ATON: :func:`.consolidate.web_choice`), **desk**
|
|
20
|
+
(desktop realtime: the version with the use ``realtime``) and **arch**
|
|
21
|
+
(the archive: the master, stamped and present);
|
|
22
|
+
* for each asset and target: the version loaded, a state (``ok`` / ``todo`` /
|
|
23
|
+
``missing`` / ``na``), why, and a PROPOSAL (:func:`proposal`): a tool among
|
|
24
|
+
:data:`TOOLS` with its triangles, texture side and KTX2 — the page lets the
|
|
25
|
+
person change it before it goes in the queue;
|
|
26
|
+
* every version with its measures (from its file when the caller can read it:
|
|
27
|
+
``measure``, else the graph's estimate, and it says which), its stamp (who
|
|
28
|
+
and when, :func:`.graph_compose.made_by`), the state of its file, «modificata
|
|
29
|
+
dopo il timbro», and its textures (name, side, format, KB, GPU, the sha256 that
|
|
30
|
+
says «condivisa ×N»);
|
|
31
|
+
* the textures of the whole study, each once, with where it is used;
|
|
32
|
+
* the totals per target against the target's band (the GPU counts a texture
|
|
33
|
+
shared by several files once).
|
|
34
|
+
|
|
35
|
+
Pure: a graph, the resolver's states, a ``measure`` callable (the one impure
|
|
36
|
+
helper, :func:`.consolidate.measure_from_disk`, stays with the caller), the
|
|
37
|
+
files ``changed`` since their stamp. Nothing is written.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
from __future__ import annotations
|
|
41
|
+
|
|
42
|
+
import re
|
|
43
|
+
from typing import Any, Dict, Iterable, List, Optional, Sequence
|
|
44
|
+
|
|
45
|
+
from . import consolidate as C
|
|
46
|
+
from .files import _data, _node
|
|
47
|
+
|
|
48
|
+
#: The targets of the list, in the order of the page's selector. ``profile``:
|
|
49
|
+
#: the band (:mod:`.use_profiles`); ``uses``: what a version must declare to
|
|
50
|
+
#: serve it (the web's rule is :func:`.consolidate.web_choice`).
|
|
51
|
+
TARGETS: Dict[str, Dict[str, Any]] = {
|
|
52
|
+
"mobile": {"label": "mobile webXR", "label_it": "mobile webXR", "profile": "mobile_webxr",
|
|
53
|
+
"uses": tuple(C.FLOOR["uses"])},
|
|
54
|
+
"web": {"label": "Heriverse / web", "label_it": "Heriverse / web", "profile": "webxr",
|
|
55
|
+
"uses": tuple(C.PLATFORMS["heriverse"]["uses"])},
|
|
56
|
+
"desk": {"label": "desktop realtime", "label_it": "desktop realtime", "profile": "desktop_realtime",
|
|
57
|
+
"uses": ("realtime",)},
|
|
58
|
+
"arch": {"label": "archive", "label_it": "archivio", "profile": "archive", "uses": ()},
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
#: The tools a proposal (or the person) can put in the queue, in the order of
|
|
62
|
+
#: the page's menu.
|
|
63
|
+
TOOLS = ("decimate_bake", "gltfpack", "ktx2", "tileset", "instance", "keep")
|
|
64
|
+
|
|
65
|
+
#: The states of an asset for a target.
|
|
66
|
+
STATES = ("ok", "todo", "missing", "na")
|
|
67
|
+
|
|
68
|
+
#: A file this many triangles or more is a tileset's job, not a decimation's.
|
|
69
|
+
TILESET_FROM = 2_000_000
|
|
70
|
+
|
|
71
|
+
MB = 1024 * 1024
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def bands(target: str) -> Dict[str, Any]:
|
|
75
|
+
"""The band of a target: per object (triangles, texture side) and for the
|
|
76
|
+
scene (triangles, download MB, GPU MB); None where the target has none."""
|
|
77
|
+
prof = C._profile(TARGETS[target]["profile"])
|
|
78
|
+
return {"profile": prof["id"], "label_it": prof.get("label_it") or TARGETS[target]["label_it"],
|
|
79
|
+
"object_triangles": prof.get("max_triangles_object"),
|
|
80
|
+
"object_texture_side": prof.get("max_texture_side"),
|
|
81
|
+
"scene_triangles": prof.get("max_triangles"),
|
|
82
|
+
"scene_download_mb": prof.get("max_download_mb"),
|
|
83
|
+
"scene_gpu_mb": prof.get("max_gpu_mb")}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# ── facts of an asset ────────────────────────────────────────────────────────
|
|
87
|
+
|
|
88
|
+
def branch_of(url: str) -> str:
|
|
89
|
+
"""The branch of a file — the first folder of its path that is not ``..``
|
|
90
|
+
or ``.`` (``../SB/x.blend#…`` → ``SB``), "" when it has none."""
|
|
91
|
+
u = str(url or "").split("://", 1)[-1].split("#", 1)[0].replace("\\", "/")
|
|
92
|
+
for part in u.split("/")[:-1]:
|
|
93
|
+
if part and part not in ("..", "."):
|
|
94
|
+
return part
|
|
95
|
+
return ""
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def family_of(name: str) -> str:
|
|
99
|
+
"""The family of a name: the name without its numbers and its working
|
|
100
|
+
suffixes (``Column_entrance1_BAKE`` → ``Column_entrance``)."""
|
|
101
|
+
n = str(name or "")
|
|
102
|
+
f = re.sub(r"[_ .-]?\d+.*$", "", n)
|
|
103
|
+
f = re.sub(r"_(BAKE|SM|MESH|LOD\d*).*$", "", f, flags=re.I)
|
|
104
|
+
return f or n
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _texture_rows(raw: Optional[Dict[str, Any]]) -> List[Dict[str, Any]]:
|
|
108
|
+
"""The textures of a measured file (:func:`~.use_profiles.measure_gltf`):
|
|
109
|
+
name, side, format, bytes, GPU (KTX2 1 B a pixel, else 4; mipmaps a third
|
|
110
|
+
more) and the image's sha256."""
|
|
111
|
+
if not raw or not isinstance(raw, dict):
|
|
112
|
+
return []
|
|
113
|
+
from .use_profiles import GPU_BYTES_PER_PIXEL, MIPMAPS
|
|
114
|
+
out = []
|
|
115
|
+
for key, t in (raw.get("textures") or {}).items():
|
|
116
|
+
parts = str(key).split(":", 2)
|
|
117
|
+
name = parts[2] if len(parts) == 3 and parts[2] else (f"image {parts[1]}" if len(parts) > 1 else str(key))
|
|
118
|
+
w, h = int(t.get("width") or 0), int(t.get("height") or 0)
|
|
119
|
+
fmt = str(t.get("format") or "").lower()
|
|
120
|
+
out.append({"key": str(key), "name": name.rsplit("/", 1)[-1], "sha256": t.get("sha256") or "",
|
|
121
|
+
"width": w, "height": h, "format": fmt,
|
|
122
|
+
"bytes": t.get("bytes") if isinstance(t.get("bytes"), int) else None,
|
|
123
|
+
"gpu_bytes": int(w * h * GPU_BYTES_PER_PIXEL.get(fmt, 4.0) * MIPMAPS)})
|
|
124
|
+
return out
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _state_of(graph, entry: Dict[str, Any], states: Dict[str, str]) -> str:
|
|
128
|
+
ids = [entry.get("id")] + [f["id"] for f in C._files(graph, entry) if f.get("id") != entry.get("id")]
|
|
129
|
+
known = [states[i] for i in ids if i in states]
|
|
130
|
+
if not known:
|
|
131
|
+
return ""
|
|
132
|
+
for worst in ("missing", "empty_copy", "reference_only"):
|
|
133
|
+
if worst in known:
|
|
134
|
+
return worst
|
|
135
|
+
return known[0]
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _version(graph, entry: Dict[str, Any], summary: Dict[str, Any], *, states, measure,
|
|
139
|
+
changed) -> Dict[str, Any]:
|
|
140
|
+
from .graph_compose import level_say, made_by, made_by_say
|
|
141
|
+
raw = None
|
|
142
|
+
if measure is not None and not summary.get("tileset"):
|
|
143
|
+
try:
|
|
144
|
+
raw = measure(entry)
|
|
145
|
+
except Exception: # noqa: BLE001 — unreadable: the graph's estimate
|
|
146
|
+
raw = None
|
|
147
|
+
made = made_by(graph, entry["id"])
|
|
148
|
+
ids = [entry["id"]] + [f["id"] for f in C._files(graph, entry) if f.get("id") != entry["id"]]
|
|
149
|
+
now = next((changed[i] for i in ids if changed and i in changed), "")
|
|
150
|
+
return {"id": entry["id"], "name": summary.get("name") or entry.get("name") or "",
|
|
151
|
+
"asset_id": entry.get("asset_id"), "master": bool(entry.get("master")),
|
|
152
|
+
"level": summary.get("level") or "", "lod_level": summary.get("lod_level") or "",
|
|
153
|
+
"level_say": level_say(entry), "use": list(entry.get("use") or []),
|
|
154
|
+
"url": summary.get("url") or "", "checksum": summary.get("checksum") or "",
|
|
155
|
+
"stamped": bool(summary.get("checksum")),
|
|
156
|
+
"size_bytes": summary.get("size_bytes"), "triangles": summary.get("triangles"),
|
|
157
|
+
"gpu_bytes": summary.get("gpu_bytes"), "measured": bool(summary.get("measured")),
|
|
158
|
+
"texture_side": summary.get("texture_side"), "ktx2": summary.get("ktx2"),
|
|
159
|
+
"tileset": bool(summary.get("tileset")),
|
|
160
|
+
"textures": _texture_rows(raw),
|
|
161
|
+
"texture_count": len(raw.get("textures") or {}) if isinstance(raw, dict) else
|
|
162
|
+
_data(_node(graph, entry["id"])).get("texture_count"),
|
|
163
|
+
"state": _state_of(graph, entry, states),
|
|
164
|
+
"made": made, "made_say": made_by_say(made),
|
|
165
|
+
"modified_after_stamp": bool(now) and not entry.get("master"), "sha256_now": now or "",
|
|
166
|
+
"loaded_by": []}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
# ── a target's state and proposal ───────────────────────────────────────────
|
|
170
|
+
|
|
171
|
+
def proposal(target: str, state: str, why: str, *, source: Optional[Dict[str, Any]],
|
|
172
|
+
kind: str = "rm", over: Sequence[str] = ()) -> Dict[str, Any]:
|
|
173
|
+
"""What the page proposes for an asset and a target (the rule of Consolida
|
|
174
|
+
2: the base mobile always, lightness by default, 50 k a object for the
|
|
175
|
+
web) → ``{tool, triangles, texture, ktx2, why}``. ``source``: the version a
|
|
176
|
+
new one is made from (the heaviest version, else the master); ``over``:
|
|
177
|
+
what is over the band (``triangles``, ``texture``, ``ktx2``). ``ok`` and
|
|
178
|
+
``na`` → ``keep``."""
|
|
179
|
+
if state in ("ok", "na") or target == "arch":
|
|
180
|
+
return {"tool": "keep", "triangles": None, "texture": None, "ktx2": False, "why": why}
|
|
181
|
+
b = bands(target)
|
|
182
|
+
obj, side = b["object_triangles"], b["object_texture_side"]
|
|
183
|
+
tris = (source or {}).get("triangles")
|
|
184
|
+
ktx2 = target != "desk"
|
|
185
|
+
if kind == "container" or (tris is not None and tris >= TILESET_FROM):
|
|
186
|
+
return {"tool": "tileset", "triangles": None, "texture": side, "ktx2": ktx2,
|
|
187
|
+
"why": "un intero o un modello enorme: un tileset (Obj2Tiles)"}
|
|
188
|
+
if tris is not None and obj and tris <= obj and set(over) <= {"texture", "ktx2"}:
|
|
189
|
+
return {"tool": "ktx2" if ktx2 else "gltfpack", "triangles": None, "texture": side, "ktx2": ktx2,
|
|
190
|
+
"why": "la geometria va già: solo le texture"}
|
|
191
|
+
if target == "desk":
|
|
192
|
+
return {"tool": "gltfpack", "triangles": min(int(tris), obj) if tris and obj else obj,
|
|
193
|
+
"texture": side, "ktx2": False, "why": "una versione per il realtime da computer"}
|
|
194
|
+
return {"tool": "decimate_bake", "triangles": obj, "texture": side, "ktx2": ktx2,
|
|
195
|
+
"why": f"decima a {obj:,} triangoli e cuoci le normali".replace(",", ".")}
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def _target_cell(target: str, *, state: str, loads: Optional[str], why: str, source, kind,
|
|
199
|
+
over: Sequence[str] = ()) -> Dict[str, Any]:
|
|
200
|
+
return {"state": state, "loads": loads or "", "why": why,
|
|
201
|
+
"proposal": proposal(target, state, why, source=source, kind=kind, over=over)}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _heaviest(versions: Sequence[Dict[str, Any]]) -> Optional[Dict[str, Any]]:
|
|
205
|
+
vs = [v for v in versions if not v["master"] and not v["tileset"]]
|
|
206
|
+
if not vs:
|
|
207
|
+
return next((v for v in versions if v["master"]), None)
|
|
208
|
+
return sorted(vs, key=lambda v: (-(v["triangles"] or 0), v["id"]))[0]
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def _within(v: Dict[str, Any], b: Dict[str, Any]) -> List[str]:
|
|
212
|
+
"""What of a version is over a band: ``triangles``, ``texture``."""
|
|
213
|
+
out = []
|
|
214
|
+
if b["object_triangles"] and v.get("triangles") is not None and v["triangles"] > b["object_triangles"]:
|
|
215
|
+
out.append("triangles")
|
|
216
|
+
if b["object_texture_side"] and v.get("texture_side") and v["texture_side"] > b["object_texture_side"]:
|
|
217
|
+
out.append("texture")
|
|
218
|
+
return out
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def _targets(graph, row: Dict[str, Any], cand: Dict[str, Any], versions: List[Dict[str, Any]],
|
|
222
|
+
entries: List[Dict[str, Any]]) -> Dict[str, Dict[str, Any]]:
|
|
223
|
+
by = {v["id"]: v for v in versions}
|
|
224
|
+
kind = row["kind"]
|
|
225
|
+
src = _heaviest(versions)
|
|
226
|
+
codes = {f["code"] for f in row["findings"]}
|
|
227
|
+
out: Dict[str, Dict[str, Any]] = {}
|
|
228
|
+
tileset = bool(row.get("loaded") and row["loaded"].get("tileset"))
|
|
229
|
+
|
|
230
|
+
# mobile webXR: the base (a tileset is its own lowest level)
|
|
231
|
+
base = row.get("base")
|
|
232
|
+
if base:
|
|
233
|
+
over = _within(by.get(base["id"], base), bands("mobile"))
|
|
234
|
+
if not tileset and C.textures_compressed(graph, cand["base_e"]) is False:
|
|
235
|
+
over.append("ktx2")
|
|
236
|
+
out["mobile"] = _target_cell("mobile", state="todo" if over and not tileset else "ok", loads=base["id"],
|
|
237
|
+
why=(base.get("note") or ("oltre la banda: " + ", ".join(over) if over and not tileset
|
|
238
|
+
else "la base mobile webXR")),
|
|
239
|
+
source=src, kind=kind, over=over)
|
|
240
|
+
elif kind == "container" and not tileset:
|
|
241
|
+
out["mobile"] = _target_cell("mobile", state="na", loads=None,
|
|
242
|
+
why="un contenitore intero non si carica sul telefono: i suoi modelli sì",
|
|
243
|
+
source=src, kind=kind)
|
|
244
|
+
else:
|
|
245
|
+
out["mobile"] = _target_cell("mobile", state="missing", loads=None,
|
|
246
|
+
why="manca la base mobile webXR (necessaria)", source=src, kind=kind)
|
|
247
|
+
|
|
248
|
+
# web: lightness by default (consolidate's row)
|
|
249
|
+
lo = row.get("loaded")
|
|
250
|
+
over_w = [k for c, k in (("over_band", "triangles"), ("texture_over_band", "texture")) if c in codes]
|
|
251
|
+
if not lo:
|
|
252
|
+
st_w, why_w = "missing", "niente da caricare"
|
|
253
|
+
elif row.get("loaded_is") == "master":
|
|
254
|
+
st_w, why_w = "missing", "si caricherebbe il master"
|
|
255
|
+
elif over_w:
|
|
256
|
+
st_w, why_w = "todo", "troppo pesante: " + "; ".join(f["say_it"] for f in row["findings"]
|
|
257
|
+
if f["code"] in ("over_band", "texture_over_band"))
|
|
258
|
+
else:
|
|
259
|
+
st_w, why_w = "ok", row.get("loaded_say") or ""
|
|
260
|
+
out["web"] = _target_cell("web", state=st_w, loads=lo["id"] if lo else None, why=why_w,
|
|
261
|
+
source=src, kind=kind, over=over_w)
|
|
262
|
+
out["web"]["loaded_why"] = row.get("loaded_why") or ""
|
|
263
|
+
|
|
264
|
+
# desktop realtime: a version with the use «realtime», inside its band
|
|
265
|
+
ch = C.choose_version(entries, list(TARGETS["desk"]["uses"])) if entries else None
|
|
266
|
+
de = ch["entry"] if ch and ch["reason"] in ("use", "level") else None
|
|
267
|
+
if tileset:
|
|
268
|
+
out["desk"] = _target_cell("desk", state="ok", loads=lo["id"], why="il tileset, in streaming",
|
|
269
|
+
source=src, kind=kind)
|
|
270
|
+
elif de is None:
|
|
271
|
+
if kind == "container":
|
|
272
|
+
out["desk"] = _target_cell("desk", state="na", loads=None,
|
|
273
|
+
why="un contenitore intero: i suoi modelli", source=src, kind=kind)
|
|
274
|
+
else:
|
|
275
|
+
out["desk"] = _target_cell("desk", state="missing", loads=None,
|
|
276
|
+
why="nessuna versione per il realtime da computer", source=src, kind=kind)
|
|
277
|
+
else:
|
|
278
|
+
over_d = _within(by.get(de["id"], {}), bands("desk"))
|
|
279
|
+
out["desk"] = _target_cell("desk", state="todo" if over_d else "ok", loads=de["id"],
|
|
280
|
+
why=("oltre la banda: " + ", ".join(over_d)) if over_d else "la versione per il realtime",
|
|
281
|
+
source=src, kind=kind, over=over_d)
|
|
282
|
+
|
|
283
|
+
# archive: the master, stamped, its file found; a tileset's master declared
|
|
284
|
+
m = next((v for v in versions if v["master"]), None)
|
|
285
|
+
if m is None:
|
|
286
|
+
st_a, why_a = "missing", "nessun master"
|
|
287
|
+
elif not m["stamped"]:
|
|
288
|
+
st_a, why_a = "todo", "master senza sha256: timbralo"
|
|
289
|
+
elif m["state"] in ("missing", "empty_copy", "reference_only"):
|
|
290
|
+
st_a, why_a = "todo", f"il file del master non c'è ({m['state'].replace('_', ' ')})"
|
|
291
|
+
elif "tileset_master" in codes:
|
|
292
|
+
st_a, why_a = "todo", "dichiara il master del tileset (le mesh da cui viene)"
|
|
293
|
+
elif not m["state"]:
|
|
294
|
+
st_a, why_a = "ok", "master timbrato (file non controllato)"
|
|
295
|
+
else:
|
|
296
|
+
st_a, why_a = "ok", "master timbrato e presente"
|
|
297
|
+
out["arch"] = _target_cell("arch", state=st_a, loads=m["id"] if m else None, why=why_a,
|
|
298
|
+
source=src, kind=kind)
|
|
299
|
+
return out
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
# ── the list ─────────────────────────────────────────────────────────────────
|
|
303
|
+
|
|
304
|
+
def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
|
|
305
|
+
changed: Optional[Dict[str, str]] = None, in_room: bool = False,
|
|
306
|
+
models: Optional[Iterable[str]] = None, platform: str = "heriverse") -> Dict[str, Any]:
|
|
307
|
+
"""The assets of the study (``models``, default the published ones —
|
|
308
|
+
representation models and the containers with a whole of their own),
|
|
309
|
+
each with its versions (master first), their textures, its state and
|
|
310
|
+
proposal per target (:data:`TARGETS`), the groups it belongs to
|
|
311
|
+
(container, branch, epochs, family); the textures of the whole study once;
|
|
312
|
+
the totals per target against the bands. → ``{targets, tools, assets,
|
|
313
|
+
textures, totals, counts, measured, estimated, say_it}``."""
|
|
314
|
+
from .alternatives import containers_of
|
|
315
|
+
from .graph_compose import epochs_of
|
|
316
|
+
states = dict(states or {})
|
|
317
|
+
cons = C.consolidate(graph, platform, models=models, states=states, in_room=in_room,
|
|
318
|
+
measure=measure, changed=changed)
|
|
319
|
+
plat = C.platform(platform)
|
|
320
|
+
assets: List[Dict[str, Any]] = []
|
|
321
|
+
tex_index: Dict[str, Dict[str, Any]] = {}
|
|
322
|
+
n_meas = n_est = 0
|
|
323
|
+
for row in cons["rows"]:
|
|
324
|
+
cand = C._candidates(graph, row["id"], plat, measure)
|
|
325
|
+
entries = cand["entries"]
|
|
326
|
+
cache: Dict[str, Dict[str, Any]] = {}
|
|
327
|
+
versions = []
|
|
328
|
+
for e in entries:
|
|
329
|
+
s = C._summary(graph, e, measure)
|
|
330
|
+
v = _version(graph, e, s, states=states, measure=measure, changed=changed)
|
|
331
|
+
cache[e["id"]] = v
|
|
332
|
+
versions.append(v)
|
|
333
|
+
if not v["master"] and not v["tileset"]:
|
|
334
|
+
if v["measured"]:
|
|
335
|
+
n_meas += 1
|
|
336
|
+
else:
|
|
337
|
+
n_est += 1
|
|
338
|
+
tg = _targets(graph, row, cand, versions, entries)
|
|
339
|
+
for k, cell in tg.items():
|
|
340
|
+
if cell["loads"] and cell["loads"] in cache:
|
|
341
|
+
cache[cell["loads"]]["loaded_by"].append(k)
|
|
342
|
+
node = _node(graph, row["id"])
|
|
343
|
+
conts = [{"id": c, "name": str(getattr(_node(graph, c), "name", "") or c)}
|
|
344
|
+
for c in containers_of(graph, row["id"])]
|
|
345
|
+
if row["kind"] == "container":
|
|
346
|
+
conts = [{"id": row["id"], "name": row["name"]}] + conts
|
|
347
|
+
master = next((v for v in versions if v["master"]), None)
|
|
348
|
+
br = branch_of(master["url"] if master else (versions[0]["url"] if versions else ""))
|
|
349
|
+
modified = [v["id"] for v in versions if v["modified_after_stamp"]]
|
|
350
|
+
missing_files = [v["id"] for v in versions if v["state"] in ("missing", "empty_copy")]
|
|
351
|
+
a = {"id": row["id"], "name": row["name"], "kind": row["kind"],
|
|
352
|
+
"description": str(getattr(node, "description", "") or ""),
|
|
353
|
+
"containers": conts, "branch": br, "epochs": [x["name"] for x in epochs_of(graph, row["id"])],
|
|
354
|
+
"family": family_of(row["name"]), "status": row["status"],
|
|
355
|
+
"versions": versions, "targets": tg, "findings": row["findings"],
|
|
356
|
+
"loaded_why": row.get("loaded_why") or "", "loaded_say": row.get("loaded_say") or "",
|
|
357
|
+
"tileset_master": row.get("tileset_master"),
|
|
358
|
+
"audit": {"versions": len(versions), "stamped": sum(1 for v in versions if v["stamped"]),
|
|
359
|
+
"files_missing": missing_files, "unchecked": sum(1 for v in versions if not v["state"]),
|
|
360
|
+
"modified_after_stamp": modified,
|
|
361
|
+
"master_declared": (row.get("tileset_master") or {}).get("declared")}}
|
|
362
|
+
assets.append(a)
|
|
363
|
+
for v in versions:
|
|
364
|
+
for t in v["textures"]:
|
|
365
|
+
key = t["sha256"] or f"{v['id']}:{t['key']}"
|
|
366
|
+
ti = tex_index.setdefault(key, {"sha256": t["sha256"], "name": t["name"], "width": t["width"],
|
|
367
|
+
"height": t["height"], "format": t["format"], "bytes": t["bytes"],
|
|
368
|
+
"gpu_bytes": t["gpu_bytes"], "uses": [], "names": []})
|
|
369
|
+
ti["uses"].append({"asset_id": a["id"], "asset": a["name"], "version_id": v["id"],
|
|
370
|
+
"level": v["level"] or ("master" if v["master"] else "")})
|
|
371
|
+
if t["name"] not in ti["names"]:
|
|
372
|
+
ti["names"].append(t["name"])
|
|
373
|
+
textures = sorted(tex_index.values(), key=lambda t: (-len(t["uses"]), -t["gpu_bytes"], t["name"]))
|
|
374
|
+
for t in textures:
|
|
375
|
+
t["count"] = len(t["uses"])
|
|
376
|
+
t["assets"] = len({u["asset_id"] for u in t["uses"]})
|
|
377
|
+
totals = {k: scene_totals(assets, k) for k in TARGETS}
|
|
378
|
+
counts = {"assets": len(assets), "rms": sum(1 for a in assets if a["kind"] == "rm"),
|
|
379
|
+
"containers": sum(1 for a in assets if a["kind"] == "container"),
|
|
380
|
+
"versions": sum(len(a["versions"]) for a in assets),
|
|
381
|
+
"textures": len(textures), "shared_textures": sum(1 for t in textures if t["count"] > 1),
|
|
382
|
+
"measured": n_meas, "estimated": n_est,
|
|
383
|
+
"by_target": {k: {s: sum(1 for a in assets if a["targets"][k]["state"] == s) for s in STATES}
|
|
384
|
+
for k in TARGETS}}
|
|
385
|
+
say = (f"{counts['assets']} asset ({counts['rms']} modelli, {counts['containers']} contenitori), "
|
|
386
|
+
f"{counts['versions']} versioni, {counts['textures']} texture "
|
|
387
|
+
f"({counts['shared_textures']} condivise)")
|
|
388
|
+
say += (f"; {n_meas} versioni misurate dai file, {n_est} stimate dal grafo" if n_est
|
|
389
|
+
else f"; {n_meas} versioni misurate dai file")
|
|
390
|
+
return {"targets": {k: {**{x: v for x, v in TARGETS[k].items() if x != "uses"},
|
|
391
|
+
"uses": list(TARGETS[k]["uses"]), "bands": bands(k)} for k in TARGETS},
|
|
392
|
+
"tools": list(TOOLS), "assets": assets, "textures": textures, "totals": totals,
|
|
393
|
+
"counts": counts, "consolidate": {"say_it": cons["say_it"], "scene_light": cons["scene_light"],
|
|
394
|
+
"totals": cons["totals"]},
|
|
395
|
+
"say_it": say}
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
def scene_totals(assets: Sequence[Dict[str, Any]], target: str) -> Dict[str, Any]:
|
|
399
|
+
"""The scene a target loads (each asset's version for it): triangles,
|
|
400
|
+
download, GPU — a file (sha256) once, a texture (sha256 of the image)
|
|
401
|
+
once when measured — against the target's band. A tileset streams: out
|
|
402
|
+
of the count, said."""
|
|
403
|
+
b = bands(target)
|
|
404
|
+
tris = dl = gpu = 0
|
|
405
|
+
seen, seen_tex = set(), set()
|
|
406
|
+
streamed = estimated = 0
|
|
407
|
+
for a in assets:
|
|
408
|
+
cell = a["targets"].get(target) or {}
|
|
409
|
+
v = next((x for x in a["versions"] if x["id"] == cell.get("loads")), None)
|
|
410
|
+
if v is None:
|
|
411
|
+
continue
|
|
412
|
+
if v["tileset"]:
|
|
413
|
+
streamed += 1
|
|
414
|
+
continue
|
|
415
|
+
if v["checksum"] and v["checksum"] in seen:
|
|
416
|
+
continue
|
|
417
|
+
if v["checksum"]:
|
|
418
|
+
seen.add(v["checksum"])
|
|
419
|
+
tris += v["triangles"] or 0
|
|
420
|
+
dl += v["size_bytes"] or 0
|
|
421
|
+
if v["measured"] and v["textures"]:
|
|
422
|
+
geo = (v["gpu_bytes"] or 0) - sum(t["gpu_bytes"] for t in v["textures"])
|
|
423
|
+
gpu += max(0, geo)
|
|
424
|
+
for t in v["textures"]:
|
|
425
|
+
if t["sha256"] and t["sha256"] in seen_tex:
|
|
426
|
+
continue
|
|
427
|
+
if t["sha256"]:
|
|
428
|
+
seen_tex.add(t["sha256"])
|
|
429
|
+
gpu += t["gpu_bytes"]
|
|
430
|
+
else:
|
|
431
|
+
if not v["measured"]:
|
|
432
|
+
estimated += 1
|
|
433
|
+
gpu += v["gpu_bytes"] or 0
|
|
434
|
+
over = []
|
|
435
|
+
if b["scene_triangles"] and tris > b["scene_triangles"]:
|
|
436
|
+
over.append("triangles")
|
|
437
|
+
if b["scene_download_mb"] and dl > b["scene_download_mb"] * MB:
|
|
438
|
+
over.append("download")
|
|
439
|
+
if b["scene_gpu_mb"] and gpu > b["scene_gpu_mb"] * MB:
|
|
440
|
+
over.append("gpu")
|
|
441
|
+
return {"target": target, "triangles": tris, "download_bytes": dl, "gpu_bytes": gpu,
|
|
442
|
+
"streamed": streamed, "estimated": estimated, "bands": b, "ok": not over, "over": over}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: s3dgraphy
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev83
|
|
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>
|
|
@@ -331,6 +331,7 @@ src/s3dgraphy/resources/__init__.py
|
|
|
331
331
|
src/s3dgraphy/resources/addresses.py
|
|
332
332
|
src/s3dgraphy/resources/alignment.py
|
|
333
333
|
src/s3dgraphy/resources/alternatives.py
|
|
334
|
+
src/s3dgraphy/resources/asset_list.py
|
|
334
335
|
src/s3dgraphy/resources/blend_folder.py
|
|
335
336
|
src/s3dgraphy/resources/blend_room.py
|
|
336
337
|
src/s3dgraphy/resources/consolidate.py
|
|
@@ -418,6 +419,7 @@ tests/test_alternatives_hat.py
|
|
|
418
419
|
tests/test_anastylosis_document_type.py
|
|
419
420
|
tests/test_api_surface.py
|
|
420
421
|
tests/test_asset_dtc_protocol.py
|
|
422
|
+
tests/test_asset_list.py
|
|
421
423
|
tests/test_asset_versions.py
|
|
422
424
|
tests/test_aton_shapes.py
|
|
423
425
|
tests/test_attach_only.py
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""MICRO-ARCHIVE-ASSET (E.D. 31 Oct 2026) · Archive › Asset: the list of the
|
|
2
|
+
study's assets with their versions and textures nested, the state and the
|
|
3
|
+
proposal per target (mobile webXR, Heriverse / web, desktop realtime,
|
|
4
|
+
archive), the textures of the study once with where they are used, the
|
|
5
|
+
totals against the bands. The rules are Consolida 2's: this only lays them
|
|
6
|
+
out."""
|
|
7
|
+
|
|
8
|
+
from s3dgraphy import api
|
|
9
|
+
from s3dgraphy.graph import Graph
|
|
10
|
+
from s3dgraphy.nodes.group_node import RepresentationModelNodeGroup
|
|
11
|
+
from s3dgraphy.resources import asset_list as AL
|
|
12
|
+
from s3dgraphy.resources import consolidate as C
|
|
13
|
+
|
|
14
|
+
from tests.test_consolida_2 import SHA, _glb, _model, _png
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_branch_and_family():
|
|
18
|
+
assert AL.branch_of("blend://../SB/GreatTemple.blend#Mesh/Arch") == "SB"
|
|
19
|
+
assert AL.branch_of("../RB/cesium/T/tileset.json") == "RB"
|
|
20
|
+
assert AL.branch_of("x.glb") == ""
|
|
21
|
+
assert AL.family_of("Column_entrance1_BAKE") == "Column_entrance"
|
|
22
|
+
assert AL.family_of("Architrave_1_BAKE_SM_Architrave_1_BAKE") == "Architrave"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_the_proposal_follows_consolida_2():
|
|
26
|
+
p = AL.proposal("mobile", "missing", "", source={"triangles": 120_000})
|
|
27
|
+
assert (p["tool"], p["triangles"], p["texture"], p["ktx2"]) == ("decimate_bake", 10_000, 512, True)
|
|
28
|
+
p = AL.proposal("web", "todo", "", source={"triangles": 120_000}, over=["triangles"])
|
|
29
|
+
assert (p["tool"], p["triangles"], p["texture"]) == ("decimate_bake", 50_000, 2048)
|
|
30
|
+
# the geometry is fine: only the textures
|
|
31
|
+
assert AL.proposal("web", "todo", "", source={"triangles": 3000}, over=["texture"])["tool"] == "ktx2"
|
|
32
|
+
# an enormous model or a whole container: a tileset
|
|
33
|
+
assert AL.proposal("web", "todo", "", source={"triangles": 5_000_000})["tool"] == "tileset"
|
|
34
|
+
assert AL.proposal("mobile", "missing", "", source=None, kind="container")["tool"] == "tileset"
|
|
35
|
+
# desktop realtime: no KTX2; ok and the archive: nothing to do
|
|
36
|
+
d = AL.proposal("desk", "missing", "", source={"triangles": 800_000})
|
|
37
|
+
assert (d["tool"], d["triangles"], d["ktx2"]) == ("gltfpack", 500_000, False)
|
|
38
|
+
assert AL.proposal("web", "ok", "", source={"triangles": 1})["tool"] == "keep"
|
|
39
|
+
assert AL.proposal("arch", "todo", "", source=None)["tool"] == "keep"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_the_list_nests_versions_and_textures_and_counts_a_shared_one_once(tmp_path):
|
|
43
|
+
g = Graph("lista")
|
|
44
|
+
shared = _png(4096, b"same")
|
|
45
|
+
paths = {}
|
|
46
|
+
for i, c in enumerate("012"):
|
|
47
|
+
v0, _ = _model(g, f"col{i}", c, tris=60_000 if i == 0 else 1, side=4096)
|
|
48
|
+
p = tmp_path / f"col{i}.glb"
|
|
49
|
+
_glb(p, [shared, _png(1024, bytes([i]))])
|
|
50
|
+
paths[v0["version_id"]] = str(p)
|
|
51
|
+
g.add_node(RepresentationModelNodeGroup(node_id="grp", name="Colonnato"))
|
|
52
|
+
for i in range(3):
|
|
53
|
+
g.add_edge(f"m{i}", f"rm_col{i}", "grp", "is_in_representation_model_group")
|
|
54
|
+
measure = C.measure_from_disk([{"id": k, "path": v} for k, v in paths.items()])
|
|
55
|
+
out = AL.asset_list(g, measure=measure, states={k: "on_disk" for k in paths})
|
|
56
|
+
assert out["counts"]["assets"] == 3 and set(out["targets"]) == {"mobile", "web", "desk", "arch"}
|
|
57
|
+
a = {x["name"]: x for x in out["assets"]}
|
|
58
|
+
col0 = a["rm_col0"]
|
|
59
|
+
assert col0["containers"][0]["name"] == "Colonnato" and col0["branch"] == "SB"
|
|
60
|
+
# versions nested: the master first, then lod0 with its textures measured
|
|
61
|
+
assert col0["versions"][0]["master"] and col0["versions"][1]["level"] == "lod0"
|
|
62
|
+
v = col0["versions"][1]
|
|
63
|
+
assert v["measured"] and len(v["textures"]) == 2 and v["texture_side"] == 4096
|
|
64
|
+
assert v["loaded_by"] == ["web"] and v["state"] == "on_disk" and "2026-10-05" in v["made_say"]
|
|
65
|
+
# per target: the base is missing (necessary), the web loads a too-heavy lod0
|
|
66
|
+
assert col0["targets"]["mobile"]["state"] == "missing"
|
|
67
|
+
assert col0["targets"]["mobile"]["proposal"]["tool"] == "decimate_bake"
|
|
68
|
+
assert col0["targets"]["web"]["state"] == "todo" and "troppo pesante" in col0["targets"]["web"]["why"]
|
|
69
|
+
assert col0["targets"]["web"]["proposal"]["triangles"] == 50_000
|
|
70
|
+
assert col0["targets"]["arch"]["state"] == "ok"
|
|
71
|
+
# the textures of the study, each once: the shared 4096 used three times
|
|
72
|
+
t = out["textures"][0]
|
|
73
|
+
assert t["count"] == 3 and t["assets"] == 3 and t["width"] == 4096
|
|
74
|
+
assert out["counts"]["shared_textures"] == 1 and out["counts"]["textures"] == 4
|
|
75
|
+
# the totals: the shared texture once in the scene
|
|
76
|
+
big, small = int(4096 * 4096 * 4 * 4 / 3), int(1024 * 1024 * 4 * 4 / 3)
|
|
77
|
+
web = out["totals"]["web"]
|
|
78
|
+
assert big + 3 * small <= web["gpu_bytes"] < big + 3 * small + 3000
|
|
79
|
+
assert web["triangles"] == 60_002 and web["bands"]["scene_triangles"] == 1_000_000
|
|
80
|
+
# without the files: estimated from the graph, and said
|
|
81
|
+
est = AL.asset_list(g)
|
|
82
|
+
assert est["counts"]["estimated"] == 3 and "stimate dal grafo" in est["say_it"]
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_the_audit_says_an_unstamped_master_and_a_file_modified_after_its_stamp():
|
|
86
|
+
g = Graph("audit")
|
|
87
|
+
v0, _ = _model(g, "muro", "3", tris=1000, side=1024)
|
|
88
|
+
api.add_resource(g, name="lastra", kind="3d_model", tier="master",
|
|
89
|
+
files=[{"path": "../RB/lastra.glb"}], resource_id="lastra")
|
|
90
|
+
from s3dgraphy.nodes.representation_node import RepresentationModelNode
|
|
91
|
+
g.add_node(RepresentationModelNode(node_id="rm_lastra", name="rm_lastra"))
|
|
92
|
+
g.add_edge("rm_l2", "rm_lastra", "lastra", "has_linked_resource")
|
|
93
|
+
out = AL.asset_list(g, changed={v0["version_id"]: SHA("9")},
|
|
94
|
+
states={"muro": "missing"})
|
|
95
|
+
a = {x["name"]: x for x in out["assets"]}
|
|
96
|
+
assert a["rm_muro"]["audit"]["modified_after_stamp"] == [v0["version_id"]]
|
|
97
|
+
assert a["rm_muro"]["targets"]["arch"]["state"] == "todo" and "non c'è" in a["rm_muro"]["targets"]["arch"]["why"]
|
|
98
|
+
assert a["rm_lastra"]["targets"]["arch"]["why"].startswith("master senza sha256")
|
|
99
|
+
assert a["rm_lastra"]["targets"]["web"]["state"] == "missing"
|
|
100
|
+
assert api.asset_list(g)["counts"]["assets"] == 2
|
|
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.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/alternative_cases.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{s3dgraphy-1.6.0.dev81 → s3dgraphy-1.6.0.dev83}/src/s3dgraphy/JSON_config/em_document_types.json
RENAMED
|
File without changes
|