s3dgraphy 1.6.0.dev89__tar.gz → 1.6.0.dev90__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.dev89/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev90}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/api.py +4 -2
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/project_tree.py +6 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/asset_list.py +6 -1
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/graph_compose.py +25 -2
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/use_profiles.py +135 -7
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/versions.py +115 -3
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_asset_versions.py +74 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_consolida_2.py +2 -1
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_use_profiles.py +54 -1
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/README.md +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/alternative_cases.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/em.ttl +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/bozze/site.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/hdto/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/hdto/hdt.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/hdto/heritage_entity.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/hdto/project.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/hdto/study.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/__main__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/container.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/frame.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/registration.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/transform.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/gis/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/gis/crs.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/gis/layer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/gis/shapefile.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/gis/site.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/graph_removal.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/hdto.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/sheet_header.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/labels.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/language.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/links.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/periodization_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/nodes/translation_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/paradata_view.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/periodization.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/property_source.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/addresses.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/alignment.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/alternatives.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/blend_folder.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/blend_room.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/consolidate.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/detail.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/locate.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/moved.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/object_store.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/resources/tileset_fit.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/room_import/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/room_import/access.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/room_import/engine.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/room_import/errors.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/room_import/inventory.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/room_import/node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/room_import/pack.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/room_import/trust.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/spatiotemporal.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/temporal/relative_chronology.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/translation.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy.egg-info/SOURCES.txt +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_alternative_labels.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_alternative_sets.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_alternatives_hat.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_anastylosis_document_type.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_asset_list.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_blend_folder.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_blend_room.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_bucket_alignment.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_cloud_placeholders.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_consolidate_compose.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_container_layouts.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_contemporaneity.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_cycle_message_is_cheap.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_datamodel_fingerprint.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_detail.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dev29_em_sourcelist.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dev29_file_set_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dev29_graphml_without_a_database.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dev29_image_set_texturing.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dev29_not_georeferenced.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dev29_one_act_n_outputs.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dev29_ttl_round_trip.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dev30_decisions.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dove_sta_il_testo.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_edge_outside_graph.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_emjson_conformance.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_emjson_no_drawing_keys.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_end_of_unit.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_epoch_instances.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_file_frame.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_gis_site.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_graph_header_code.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_graph_helpers_indexed.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_graph_indices_alive.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_graph_removal.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_hdto_glyphs.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_hdto_study.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_i_generi_dei_passi.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_il_modo_d_accesso.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_il_modo_dal_relay.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_il_riallineamento.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_import_without_residues.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_iri_extendedmatrix.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_issue27_small_points.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_la_lingua_alla_nascita.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_la_lingua_dei_dati.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_la_lingua_nell_op.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_la_riga_d_intestazione.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_lab_orizzonti.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_le_traduzioni.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_lod_levels.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_one_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_op_vocabulary.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_part_twins.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_piu_indirizzi.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_promote_keeps_proxy_type.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_property_as_source.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_psx_locator.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_qualia_dai_d7_d8.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_rdf_sub_epoch_direction.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_registration.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_release.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_resource_revision.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_rm_container_node_group.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_room_import.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_room_import_access.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_room_import_inventory.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_room_import_trust.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_series_vsf.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_spatiotemporal_entities.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_special_find_definitions.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_stable_study_code.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_threed_instances.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_tileset_fit.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_transform_form.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_valore_proprieta_doppio.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_verifica_provenance.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_version_for.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev89 → s3dgraphy-1.6.0.dev90}/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.dev90
|
|
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.dev90"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -3159,8 +3159,10 @@ def add_version(graph: Graph, master_id: str, *, level: Optional[str] = None,
|
|
|
3159
3159
|
from a ``lodK``); ``use`` a list of :data:`resources.versions.USES`;
|
|
3160
3160
|
``measures`` the numbers of :data:`resources.versions.LOD_MEASURES` (D1).
|
|
3161
3161
|
Idempotent per (asset, level); other bytes at a level are refused (revise
|
|
3162
|
-
the version instead).
|
|
3163
|
-
|
|
3162
|
+
the version instead). ``profile`` and ``use_params`` (MICRO-VERSIONI-PER-
|
|
3163
|
+
USO): a version made for a use, named by it (``mobile-webxr-2k``), never a
|
|
3164
|
+
level. Returns ``{version_id, process_id, created, asset_id, level,
|
|
3165
|
+
lod_level, use, measures, purpose, profile, use_params, warnings}``."""
|
|
3164
3166
|
from .resources.versions import add_version as _add
|
|
3165
3167
|
before = _ids(graph)
|
|
3166
3168
|
out = _add(graph, master_id, level=level, purpose=purpose, **kwargs)
|
|
@@ -240,6 +240,12 @@ def variant_name(model: str, lod: str, destination: str, ext: str = ".glb") -> s
|
|
|
240
240
|
stem = stem[: -len(known)]
|
|
241
241
|
break
|
|
242
242
|
lod = str(lod).strip().lower()
|
|
243
|
+
# MICRO-VERSIONI-PER-USO (E.D., 2 Nov 2026) · a variant made for a use is
|
|
244
|
+
# named by it: ``lod`` a use's name (``mobile-webxr-2k``) →
|
|
245
|
+
# ``<model>@mobile-webxr-2k.glb``, the destination already in it
|
|
246
|
+
from .resources.use_profiles import parse_use_tag
|
|
247
|
+
if parse_use_tag(lod):
|
|
248
|
+
return f"{stem}{VARIANT_SEP}{lod}{ext}"
|
|
243
249
|
if lod and not lod.startswith("lod"):
|
|
244
250
|
lod = f"lod{lod}"
|
|
245
251
|
dest = str(destination).strip().lower().replace(" ", "-")
|
|
@@ -176,8 +176,13 @@ def _version(graph, entry: Dict[str, Any], summary: Dict[str, Any], *, states, m
|
|
|
176
176
|
return {"id": entry["id"], "name": summary.get("name") or entry.get("name") or "",
|
|
177
177
|
"asset_id": entry.get("asset_id"), "master": bool(entry.get("master")),
|
|
178
178
|
"level": summary.get("level") or "", "lod_level": summary.get("lod_level") or "",
|
|
179
|
-
"level_say": TILESET_SAY if summary.get("tileset") else level_say(
|
|
179
|
+
"level_say": TILESET_SAY if summary.get("tileset") else level_say(
|
|
180
|
+
entry, summary.get("triangles"), summary.get("texture_side")),
|
|
180
181
|
"use": list(entry.get("use") or []),
|
|
182
|
+
# MICRO-VERSIONI-PER-USO · the profile it was made for («» for a
|
|
183
|
+
# rung of a LOD chain) and its numbers: the row says it by its use
|
|
184
|
+
"profile": str(entry.get("profile") or ""), "by_use": bool(entry.get("by_use")),
|
|
185
|
+
"use_params": dict(entry.get("use_params") or {}),
|
|
181
186
|
"url": summary.get("url") or "", "checksum": summary.get("checksum") or "",
|
|
182
187
|
"stamped": bool(summary.get("checksum")),
|
|
183
188
|
"size_bytes": summary.get("size_bytes"), "triangles": summary.get("triangles"),
|
|
@@ -448,6 +448,13 @@ def level_key(entry: Dict[str, Any]) -> tuple:
|
|
|
448
448
|
import re
|
|
449
449
|
if entry.get("master"):
|
|
450
450
|
return ("master", "")
|
|
451
|
+
# MICRO-VERSIONI-PER-USO · a version made for a use is the asset AND the
|
|
452
|
+
# use: another number of the same use (mobile 2k after mobile 10k, or the
|
|
453
|
+
# «lod1-mobile» of before) is the same version made again — the later wins
|
|
454
|
+
from .versions import entry_profile
|
|
455
|
+
pid = entry_profile(entry)
|
|
456
|
+
if pid:
|
|
457
|
+
return ("use", pid)
|
|
451
458
|
lvl = str(entry.get("level") or entry.get("lod_level") or "").strip().lower()
|
|
452
459
|
if re.match(r"^manual-\d{4}-\d{2}-\d{2}(?:-\d+)?$", lvl):
|
|
453
460
|
lvl = "manual"
|
|
@@ -459,11 +466,27 @@ def level_key(entry: Dict[str, Any]) -> tuple:
|
|
|
459
466
|
return (lvl, prof)
|
|
460
467
|
|
|
461
468
|
|
|
462
|
-
def level_say(entry: Dict[str, Any]
|
|
463
|
-
|
|
469
|
+
def level_say(entry: Dict[str, Any], triangles: Optional[float] = None,
|
|
470
|
+
texture_side: Optional[int] = None) -> str:
|
|
471
|
+
"""«mobile webXR · 10k tri · 512 px» (a version made for a use, also one
|
|
472
|
+
of before named ``lod1-mobile``: MICRO-VERSIONI-PER-USO, E.D. 2 Nov 2026),
|
|
473
|
+
«catena LOD 2» (a rung of a LOD chain), «master», «manual-2026-10-31 ·
|
|
474
|
+
desktop realtime». The numbers: ``triangles`` and ``texture_side`` when the
|
|
475
|
+
caller measured them, else the use's own (``use_params``) or its name's."""
|
|
464
476
|
if entry.get("master"):
|
|
465
477
|
return "master"
|
|
478
|
+
from .use_profiles import chain_say, is_chain_level, parse_use_tag, use_say
|
|
479
|
+
from .versions import entry_profile
|
|
480
|
+
pid = entry_profile(entry)
|
|
481
|
+
if pid:
|
|
482
|
+
up = entry.get("use_params") or {}
|
|
483
|
+
tag = parse_use_tag(entry.get("level")) or {}
|
|
484
|
+
tri = triangles if triangles is not None else up.get("triangles", tag.get("triangles"))
|
|
485
|
+
side = texture_side or up.get("texture_side_px") or up.get("texture_side")
|
|
486
|
+
return use_say(pid, tri, side)
|
|
466
487
|
lvl = str(entry.get("level") or entry.get("lod_level") or "") or "?"
|
|
488
|
+
if is_chain_level(lvl):
|
|
489
|
+
return chain_say(lvl)
|
|
467
490
|
prof = level_key(entry)[1]
|
|
468
491
|
if prof:
|
|
469
492
|
try:
|
|
@@ -1221,21 +1221,145 @@ DESTINATIONS = tuple(sorted({v["destination"] for v in PROFILES.values()}, key=l
|
|
|
1221
1221
|
reverse=True))
|
|
1222
1222
|
|
|
1223
1223
|
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1224
|
+
# ── MICRO-VERSIONI-PER-USO (E.D., 2 Nov 2026) ─────────────────────────────
|
|
1225
|
+
#
|
|
1226
|
+
# «lod0 / lod1» on a version made FOR A USE misleads: a LOD is a rung of a
|
|
1227
|
+
# chain made as such (3DSC's LOD generator, «catena LOD»). A version made for
|
|
1228
|
+
# a use is named BY ITS USE and its numbers — ``<model>@<use>[-<tri>k].glb``
|
|
1229
|
+
# (``Column_light1@mobile-webxr-2k.glb``) — and there may be several of one
|
|
1230
|
+
# use (one for the web on a desktop between the full one and the mobile one).
|
|
1231
|
+
# The names of before (``<model>@lod1-mobile.glb``) are still read, and said
|
|
1232
|
+
# by their use (:func:`parse_version_name` gives ``use`` for both).
|
|
1233
|
+
|
|
1234
|
+
#: The USE of a profile in a file name: its id with hyphens.
|
|
1235
|
+
USE_SLUGS: Dict[str, str] = {k.replace("_", "-"): k for k in PROFILES}
|
|
1236
|
+
_SLUG_ALT = "|".join(re.escape(s) for s in sorted(USE_SLUGS, key=len, reverse=True))
|
|
1237
|
+
#: ``<model>@<use>[-<n>k][-<k>]`` (+ ``-<hex8>`` for a glTF folder)
|
|
1238
|
+
USE_VERSION_NAME = re.compile(rf"^(?P<model>.+)@(?P<use>{_SLUG_ALT})(?:-(?P<kilo>\d+(?:\.\d+)?)k)?"
|
|
1239
|
+
r"(?:-(?P<n>\d{1,3}))?(?:-(?P<hex>[0-9a-f]{8}))?"
|
|
1240
|
+
r"(?P<ext>\.glb|\.gltf|\.stl)?$")
|
|
1241
|
+
#: What a row says of a profile (E.D.'s words: «webXR / Heriverse»).
|
|
1242
|
+
USE_SAY_IT = {"desktop_realtime": "desktop realtime", "webxr": "webXR / Heriverse",
|
|
1243
|
+
"mobile_webxr": "mobile webXR", "archive": "archivio",
|
|
1244
|
+
"preview": "anteprima", "render_offline": "rendering offline",
|
|
1245
|
+
"print_3d": "stampa 3D"}
|
|
1246
|
+
|
|
1247
|
+
|
|
1248
|
+
def use_slug(prof: Any) -> str:
|
|
1249
|
+
"""``mobile_webxr`` (or a use, a destination, a profile dict) → ``mobile-webxr``."""
|
|
1250
|
+
p = prof if isinstance(prof, dict) else profile(prof)
|
|
1251
|
+
return str(p["id"] if "id" in p else next(k for k, v in PROFILES.items() if v is p or v == p)
|
|
1252
|
+
).replace("_", "-")
|
|
1253
|
+
|
|
1254
|
+
|
|
1255
|
+
def kilo(triangles: Optional[float]) -> str:
|
|
1256
|
+
"""Triangles in a name: ``2000`` → ``2k``, ``53_412`` → ``53k``, ``1500`` →
|
|
1257
|
+
``1.5k`` (one decimal below 10 k), ``""`` when not given."""
|
|
1258
|
+
if triangles in (None, "") or float(triangles) <= 0:
|
|
1259
|
+
return ""
|
|
1260
|
+
k = float(triangles) / 1000.0
|
|
1261
|
+
if k < 10 and round(k, 1) != round(k):
|
|
1262
|
+
return f"{round(k, 1):g}k"
|
|
1263
|
+
return f"{max(1, int(round(k)))}k"
|
|
1264
|
+
|
|
1265
|
+
|
|
1266
|
+
def use_tag(prof: Any, triangles: Optional[float] = None, n: Optional[int] = None) -> str:
|
|
1267
|
+
"""The name of a version made for a use: ``mobile-webxr`` ``-2k`` (its
|
|
1268
|
+
triangles, when the use asks a number) ``-2`` (a second one beside the
|
|
1269
|
+
first with the same name: «Nuova accanto»). It is also its LEVEL in the
|
|
1270
|
+
graph (:func:`s3dgraphy.resources.versions.add_version`: the level is the
|
|
1271
|
+
version's name and the key of its id) — never ``lodN``."""
|
|
1272
|
+
out = use_slug(prof)
|
|
1273
|
+
k = kilo(triangles)
|
|
1274
|
+
if k:
|
|
1275
|
+
out += f"-{k}"
|
|
1276
|
+
if n and int(n) > 1:
|
|
1277
|
+
out += f"-{int(n)}"
|
|
1278
|
+
return out
|
|
1279
|
+
|
|
1280
|
+
|
|
1281
|
+
def parse_use_tag(tag: Any) -> Optional[Dict[str, Any]]:
|
|
1282
|
+
"""``mobile-webxr-2k`` → ``{use, profile, triangles, n}``; None when the
|
|
1283
|
+
text is not a use's name (``lod1``, ``manual-…``)."""
|
|
1284
|
+
m = re.match(rf"^(?P<use>{_SLUG_ALT})(?:-(?P<kilo>\d+(?:\.\d+)?)k)?(?:-(?P<n>\d{{1,3}}))?$",
|
|
1285
|
+
str(tag or "").strip().lower())
|
|
1286
|
+
if not m:
|
|
1287
|
+
return None
|
|
1288
|
+
return {"use": m.group("use"), "profile": USE_SLUGS[m.group("use")],
|
|
1289
|
+
"triangles": int(round(float(m.group("kilo")) * 1000)) if m.group("kilo") else None,
|
|
1290
|
+
"n": int(m.group("n")) if m.group("n") else 1}
|
|
1291
|
+
|
|
1292
|
+
|
|
1293
|
+
def is_chain_level(level: Any) -> bool:
|
|
1294
|
+
"""``lod0``… — a rung of a LOD chain (the only place «LOD n» is said)."""
|
|
1295
|
+
return bool(re.match(r"^lod\d+$", str(level or "").strip().lower()))
|
|
1296
|
+
|
|
1297
|
+
|
|
1298
|
+
def use_say(prof: Any, triangles: Optional[float] = None, texture_side: Optional[int] = None) -> str:
|
|
1299
|
+
"""«mobile webXR · 10k tri · 512 px», «webXR / Heriverse · 53k tri»."""
|
|
1300
|
+
try:
|
|
1301
|
+
p = profile(prof) if not isinstance(prof, dict) else prof
|
|
1302
|
+
pid = p.get("id") or ""
|
|
1303
|
+
out = USE_SAY_IT.get(pid) or p.get("label_it") or pid
|
|
1304
|
+
except ValueError:
|
|
1305
|
+
out = str(prof)
|
|
1306
|
+
if triangles and float(triangles) > 0:
|
|
1307
|
+
out += f" · {int(triangles) if float(triangles) < 1000 else kilo(triangles)} tri"
|
|
1308
|
+
if texture_side:
|
|
1309
|
+
out += f" · {int(texture_side)} px"
|
|
1310
|
+
return out
|
|
1311
|
+
|
|
1312
|
+
|
|
1313
|
+
def chain_say(level: Any) -> str:
|
|
1314
|
+
"""``lod3`` → «catena LOD 3»."""
|
|
1315
|
+
m = re.match(r"^lod(\d+)$", str(level or "").strip().lower())
|
|
1316
|
+
return f"catena LOD {m.group(1)}" if m else str(level or "")
|
|
1317
|
+
|
|
1318
|
+
|
|
1319
|
+
def use_version_name(model: str, prof: Any, triangles: Optional[float] = None,
|
|
1320
|
+
packaging: Optional[str] = None, n: Optional[int] = None) -> str:
|
|
1321
|
+
"""``<model>@<use>[-<tri>k][-<n>].glb`` (``.gltf``, ``.stl``)."""
|
|
1322
|
+
return version_file_name(model, use_tag(prof, triangles, n), prof, packaging)
|
|
1323
|
+
|
|
1324
|
+
|
|
1325
|
+
def version_file_name(model: str, level: Optional[str], prof: Any, packaging: Optional[str] = None,
|
|
1326
|
+
*, triangles: Optional[float] = None) -> str:
|
|
1327
|
+
"""The canonical name. A version for a use (``level`` empty, or a use's
|
|
1328
|
+
name from :func:`use_tag`): ``<model>@<use>[-<tri>k].glb``; a rung of a
|
|
1329
|
+
LOD chain (``lodN``) or a name given by hand: ``<model>@<level>-<destination>.glb``
|
|
1330
|
+
as before (or ``.gltf``, or ``.stl`` for a print)."""
|
|
1227
1331
|
p = prof if isinstance(prof, dict) else profile(prof)
|
|
1228
1332
|
pk = packaging or p.get("packaging") or "glb"
|
|
1229
1333
|
safe = re.sub(r"[^\w.\-]+", "_", str(model)).strip("_") or "model"
|
|
1230
1334
|
ext = {"gltf_separate": "gltf", "stl": "stl"}.get(pk, "glb")
|
|
1335
|
+
if not level:
|
|
1336
|
+
level = use_tag(p if "id" in p else prof, triangles)
|
|
1337
|
+
if parse_use_tag(level):
|
|
1338
|
+
return f"{safe}@{level}.{ext}"
|
|
1231
1339
|
return f"{safe}@{level}-{p['destination']}.{ext}"
|
|
1232
1340
|
|
|
1233
1341
|
|
|
1234
1342
|
def parse_version_name(name: str) -> Optional[Dict[str, str]]:
|
|
1235
|
-
"""``Column_light1@
|
|
1236
|
-
|
|
1237
|
-
|
|
1343
|
+
"""``Column_light1@mobile-webxr-2k.glb`` → ``{model, level: "mobile-webxr-2k",
|
|
1344
|
+
destination, profile: "mobile_webxr", ext, use: "mobile-webxr", triangles:
|
|
1345
|
+
2000, n: 1, by_use: True}``; a name of before, ``Column_light1@lod1-realtime-
|
|
1346
|
+
web.glb`` → the same keys, ``level`` ``lod1``, ``by_use`` False, ``use`` its
|
|
1347
|
+
profile's (``profile`` the first destination tag that names one, ``""``
|
|
1348
|
+
when none); None when the name is not a version's."""
|
|
1238
1349
|
base = os.path.basename(str(name))
|
|
1350
|
+
u = USE_VERSION_NAME.match(base) if not MANUAL_VERSION_NAME.match(base) else None
|
|
1351
|
+
if u and not (u.group("hex") and u.group("ext")):
|
|
1352
|
+
# MICRO-VERSIONI-PER-USO · named by its use
|
|
1353
|
+
pid = USE_SLUGS[u.group("use")]
|
|
1354
|
+
tag = base[len(u.group("model")) + 1:]
|
|
1355
|
+
if u.group("ext"):
|
|
1356
|
+
tag = tag[: -len(u.group("ext"))]
|
|
1357
|
+
if u.group("hex"):
|
|
1358
|
+
tag = tag[: -9]
|
|
1359
|
+
return {"model": u.group("model"), "level": tag, "destination": PROFILES[pid]["destination"],
|
|
1360
|
+
"profile": pid, "ext": (u.group("ext") or "").lstrip("."), "use": u.group("use"),
|
|
1361
|
+
"triangles": int(round(float(u.group("kilo")) * 1000)) if u.group("kilo") else None,
|
|
1362
|
+
"n": int(u.group("n")) if u.group("n") else 1, "by_use": True}
|
|
1239
1363
|
m = MANUAL_VERSION_NAME.match(base) or VERSION_NAME.match(base)
|
|
1240
1364
|
if not m:
|
|
1241
1365
|
return None
|
|
@@ -1251,8 +1375,12 @@ def parse_version_name(name: str) -> Optional[Dict[str, str]]:
|
|
|
1251
1375
|
for d in DESTINATIONS:
|
|
1252
1376
|
if rest == d or rest.startswith(d + "-") or rest.endswith("-" + d):
|
|
1253
1377
|
prof = prof or USE_TO_PROFILE.get(d, "")
|
|
1378
|
+
# a name of before (``lod1-mobile``) is said by its use too: ``use`` is
|
|
1379
|
+
# its profile's, ``by_use`` False (its level stays what the name says)
|
|
1254
1380
|
return {"model": m.group("model"), "level": m.group("level"), "destination": rest,
|
|
1255
|
-
"profile": prof, "ext": (m.group("ext") or "").lstrip(".")
|
|
1381
|
+
"profile": prof, "ext": (m.group("ext") or "").lstrip("."),
|
|
1382
|
+
"use": prof.replace("_", "-") if prof else "", "triangles": None, "n": 1,
|
|
1383
|
+
"by_use": False}
|
|
1256
1384
|
|
|
1257
1385
|
|
|
1258
1386
|
HINTS_SUFFIX = ".hints.json"
|
|
@@ -257,6 +257,18 @@ def _entry(graph, res_id: str, *, level, purpose, process_id, master: bool,
|
|
|
257
257
|
"revisions": chain}
|
|
258
258
|
|
|
259
259
|
|
|
260
|
+
def _use_fields(entry: Dict[str, Any], params: Dict[str, Any], pdata: Dict[str, Any]) -> None:
|
|
261
|
+
"""MICRO-VERSIONI-PER-USO · ``profile``, ``use_params``, ``by_use`` (made
|
|
262
|
+
for a use: said by its use, not by a level) and ``made_at`` (its step's
|
|
263
|
+
date) on an entry of :func:`versions_of`."""
|
|
264
|
+
entry["profile"] = str(params.get("profile") or "")
|
|
265
|
+
entry["use_params"] = dict(params.get("use_params") or {})
|
|
266
|
+
entry["profile"] = entry_profile(entry)
|
|
267
|
+
entry["by_use"] = bool(entry["profile"])
|
|
268
|
+
entry["made_at"] = str(pdata.get("modified_at") or pdata.get("created_at")
|
|
269
|
+
or pdata.get("at") or "")
|
|
270
|
+
|
|
271
|
+
|
|
260
272
|
def _current(graph, res_id: str) -> str:
|
|
261
273
|
try:
|
|
262
274
|
return revisions_of(graph, res_id)[-1]
|
|
@@ -269,7 +281,9 @@ def versions_of(graph, asset_id: str) -> List[Dict[str, Any]]:
|
|
|
269
281
|
|
|
270
282
|
Each entry: ``{id, name, level, lod_level, use, measures, primitives,
|
|
271
283
|
purpose, master, process_id, checksum, url, residency, media_type,
|
|
272
|
-
size_bytes, revisions
|
|
284
|
+
size_bytes, revisions, profile, use_params, by_use, made_at}`` (the last
|
|
285
|
+
four: MICRO-VERSIONI-PER-USO — the profile it was made for, ``""`` for a
|
|
286
|
+
rung of a LOD chain; :func:`use_versions` groups them by use). ``id`` is the CURRENT revision of the version; ``revisions``
|
|
273
287
|
its chain, oldest first. ``level`` is the name given; ``lod_level`` the
|
|
274
288
|
COMPUTED level (None for the master, D1). The versions of a version (a LOD1
|
|
275
289
|
made from LOD0) are listed too. The master's ``level`` is the
|
|
@@ -299,6 +313,7 @@ def versions_of(graph, asset_id: str) -> List[Dict[str, Any]]:
|
|
|
299
313
|
process_id=proc.node_id, master=False,
|
|
300
314
|
origin=out.node_id)
|
|
301
315
|
entry["use"] = _uses_of(params, _data(_node(graph, entry["id"])))
|
|
316
|
+
_use_fields(entry, params, _data(proc))
|
|
302
317
|
kids.append(entry)
|
|
303
318
|
# a version of a version: its own versions are the asset's too
|
|
304
319
|
kids.extend(_descendants(graph, out.node_id))
|
|
@@ -306,6 +321,7 @@ def versions_of(graph, asset_id: str) -> List[Dict[str, Any]]:
|
|
|
306
321
|
out = [_entry(graph, _current(graph, asset), level=master_level, purpose="",
|
|
307
322
|
process_id=None, master=True, origin=asset)]
|
|
308
323
|
out[0]["use"] = []
|
|
324
|
+
out[0].update(profile="", use_params={}, by_use=False, made_at="")
|
|
309
325
|
seen = set()
|
|
310
326
|
unique = []
|
|
311
327
|
for k in kids:
|
|
@@ -340,6 +356,7 @@ def _descendants(graph, res_id: str) -> List[Dict[str, Any]]:
|
|
|
340
356
|
process_id=proc.node_id, master=False,
|
|
341
357
|
origin=child.node_id)
|
|
342
358
|
entry["use"] = _uses_of(params, _data(_node(graph, entry["id"])))
|
|
359
|
+
_use_fields(entry, params, _data(proc))
|
|
343
360
|
out.append(entry)
|
|
344
361
|
out.extend(_descendants(graph, child.node_id))
|
|
345
362
|
return out
|
|
@@ -638,9 +655,24 @@ def add_version(graph, master_id: str, *, level: Optional[str] = None, purpose:
|
|
|
638
655
|
version_id: Optional[str] = None,
|
|
639
656
|
author: Optional[str] = None,
|
|
640
657
|
at: Optional[str] = None,
|
|
641
|
-
revise: bool = False
|
|
658
|
+
revise: bool = False,
|
|
659
|
+
profile: Optional[str] = None,
|
|
660
|
+
use_params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
|
|
642
661
|
"""A new version of the asset ``master_id`` at ``level``, for ``purpose``.
|
|
643
662
|
|
|
663
|
+
MICRO-VERSIONI-PER-USO (E.D., 2 Nov 2026) · a version made FOR A USE is
|
|
664
|
+
named by its use, not by a level: ``profile`` (a profile of
|
|
665
|
+
:mod:`.use_profiles`, or a use or destination that names one) and its
|
|
666
|
+
``use_params`` (``triangles``, ``texture_side_px``, ``texture_format``…).
|
|
667
|
+
Its ``level`` — the name and the key of its id — is then the use's name
|
|
668
|
+
(:func:`.use_profiles.use_tag`: ``mobile-webxr-2k``) unless one is given,
|
|
669
|
+
so a mobile version beside a web one is ANOTHER version, never a revision
|
|
670
|
+
of it; the same use with the same numbers and other bytes is revised as
|
|
671
|
+
before. Both go in the step's ``parameters`` (``profile``,
|
|
672
|
+
``use_params``), beside ``level`` and ``purpose``: nothing new on the
|
|
673
|
+
resource, its ``use`` list (what Heriverse reads) as before. ``lodN``
|
|
674
|
+
stays for the rungs of a LOD chain.
|
|
675
|
+
|
|
644
676
|
Writes the version resource (kind of the master, ``tier: distribution``,
|
|
645
677
|
``files`` as :func:`add_resource` takes them) and the ``lod_generation``
|
|
646
678
|
step from the master to it. Idempotent: the id is derived from (asset,
|
|
@@ -667,6 +699,10 @@ def add_version(graph, master_id: str, *, level: Optional[str] = None, purpose:
|
|
|
667
699
|
master = _node(graph, master_id)
|
|
668
700
|
if master is None or not _is_resource(master):
|
|
669
701
|
raise ValueError(f"{master_id!r} is not a resource of this graph")
|
|
702
|
+
prof_id, uparams = _use_of(profile, use_params)
|
|
703
|
+
if prof_id and not level:
|
|
704
|
+
from .use_profiles import use_tag
|
|
705
|
+
level = use_tag(prof_id, uparams.get("triangles"))
|
|
670
706
|
uses = check_use(use if use is not None else ([purpose] if purpose in USES else None))
|
|
671
707
|
measured = check_measures(measures)
|
|
672
708
|
# D1 · the level, when nobody names it, is the computed one: a version of
|
|
@@ -724,6 +760,10 @@ def add_version(graph, master_id: str, *, level: Optional[str] = None, purpose:
|
|
|
724
760
|
params["purpose"] = str(purpose)
|
|
725
761
|
if master_level:
|
|
726
762
|
params["source_level"] = str(master_level).strip()
|
|
763
|
+
if prof_id:
|
|
764
|
+
params["profile"] = prof_id
|
|
765
|
+
if uparams:
|
|
766
|
+
params["use_params"] = uparams
|
|
727
767
|
step = declare_derivation(
|
|
728
768
|
graph, output=vid, inputs=[master_id], dtc_kind=DTC_KIND,
|
|
729
769
|
process_id=str(uuid.uuid5(_NS, f"lod_generation|{vid}")),
|
|
@@ -734,7 +774,79 @@ def add_version(graph, master_id: str, *, level: Optional[str] = None, purpose:
|
|
|
734
774
|
"created": created, "asset_id": asset, "level": lvl,
|
|
735
775
|
"lod_level": lod_level_of(graph, vid), "use": uses,
|
|
736
776
|
"measures": measured, "revises": revises,
|
|
737
|
-
"purpose": str(purpose or ""), "
|
|
777
|
+
"purpose": str(purpose or ""), "profile": prof_id or "",
|
|
778
|
+
"use_params": uparams, "warnings": step["warnings"]}
|
|
779
|
+
|
|
780
|
+
|
|
781
|
+
def _use_of(profile: Optional[str], use_params: Optional[Dict[str, Any]]):
|
|
782
|
+
"""``(profile id, use_params)`` checked: the profile one of
|
|
783
|
+
:data:`.use_profiles.PROFILES` (a use or destination naming one is
|
|
784
|
+
taken), the numbers non-negative (``texture_format`` a word)."""
|
|
785
|
+
if not profile:
|
|
786
|
+
return "", dict(use_params or {})
|
|
787
|
+
from .use_profiles import profile as _profile
|
|
788
|
+
pid = _profile(str(profile))["id"]
|
|
789
|
+
out: Dict[str, Any] = {}
|
|
790
|
+
for k, v in (use_params or {}).items():
|
|
791
|
+
if v is None or v == "":
|
|
792
|
+
continue
|
|
793
|
+
if k in ("texture_format", "compression", "packaging"):
|
|
794
|
+
out[k] = str(v)
|
|
795
|
+
continue
|
|
796
|
+
if isinstance(v, bool) or not isinstance(v, (int, float)) or v < 0:
|
|
797
|
+
raise ValueError(f"use_params.{k} must be a non-negative number, got {v!r}")
|
|
798
|
+
out[k] = int(v) if float(v).is_integer() else v
|
|
799
|
+
return pid, out
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
def entry_profile(entry: Dict[str, Any]) -> str:
|
|
803
|
+
"""The profile a version was made for: its step's ``profile``, else the
|
|
804
|
+
one its level's name says (``mobile-webxr-2k``); for a version of before
|
|
805
|
+
(``lod1`` for ``mobile``, by EMStudio's «Ottimizza» or «Prepara per un
|
|
806
|
+
uso») the profile whose DESTINATION its ``purpose`` is (``mobile``,
|
|
807
|
+
``aton-heriverse``, ``realtime``…). ``""`` for the master and for a rung of
|
|
808
|
+
a LOD chain made as such (no profile; a purpose that is only a use, as
|
|
809
|
+
``web``, does not make one)."""
|
|
810
|
+
if entry.get("master"):
|
|
811
|
+
return ""
|
|
812
|
+
if entry.get("profile"):
|
|
813
|
+
return str(entry["profile"])
|
|
814
|
+
from .use_profiles import PROFILES, parse_use_tag
|
|
815
|
+
tag = parse_use_tag(entry.get("level"))
|
|
816
|
+
if tag:
|
|
817
|
+
return tag["profile"]
|
|
818
|
+
purpose = str(entry.get("purpose") or "")
|
|
819
|
+
pid = next((k for k, v in PROFILES.items() if purpose and v["destination"] == purpose), "")
|
|
820
|
+
if pid:
|
|
821
|
+
return pid
|
|
822
|
+
# its file named by EMStudio or EM Tools: ``podio@lod1-mobile.glb``
|
|
823
|
+
from .use_profiles import parse_version_name
|
|
824
|
+
url = str(entry.get("url") or "").replace("\\", "/").rstrip("/")
|
|
825
|
+
name = url.rsplit("/", 1)[-1]
|
|
826
|
+
parsed = parse_version_name(name) if "@" in name else None
|
|
827
|
+
if parsed is None and "@" in url:
|
|
828
|
+
# a glTF in a folder of its own: ``podio@lod0-aton-heriverse/podio.gltf``
|
|
829
|
+
parsed = parse_version_name(url.rsplit("/", 2)[-2]) if url.count("/") else None
|
|
830
|
+
return (parsed or {}).get("profile") or ""
|
|
831
|
+
|
|
832
|
+
|
|
833
|
+
def use_versions(entries: Sequence[Dict[str, Any]]) -> Dict[str, Dict[str, Any]]:
|
|
834
|
+
"""The versions of an asset BY USE (MICRO-VERSIONI-PER-USO): ``{profile:
|
|
835
|
+
{latest, others}}`` — for «Aggiorna», the coverage and «the last version»
|
|
836
|
+
the identity is the asset and the use; with several of one use (other
|
|
837
|
+
numbers) the most recent wins (its step's date, else the later in the
|
|
838
|
+
list) and the others stay listed."""
|
|
839
|
+
out: Dict[str, Dict[str, Any]] = {}
|
|
840
|
+
for i, e in enumerate(entries):
|
|
841
|
+
pid = entry_profile(e)
|
|
842
|
+
if not pid:
|
|
843
|
+
continue
|
|
844
|
+
out.setdefault(pid, {"all": []})["all"].append((str(e.get("made_at") or ""), i, e))
|
|
845
|
+
for pid, g in out.items():
|
|
846
|
+
ranked = sorted(g.pop("all"), key=lambda x: (x[0], x[1]))
|
|
847
|
+
g["latest"] = ranked[-1][2]
|
|
848
|
+
g["others"] = [x[2] for x in ranked[:-1]]
|
|
849
|
+
return out
|
|
738
850
|
|
|
739
851
|
|
|
740
852
|
def planned_version(graph, master_id: str, *, level: Optional[str] = None,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: s3dgraphy
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev90
|
|
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>
|
|
@@ -239,3 +239,77 @@ def test_a_version_made_again_with_another_recipe_is_its_revision():
|
|
|
239
239
|
again = api.add_version(g, "podio", use=["aton", "heriverse"], packaging="file_set",
|
|
240
240
|
files=_gltf_set(), revise=True)
|
|
241
241
|
assert again["version_id"] == out["version_id"] and len(g.nodes) == n
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
# ── MICRO-VERSIONI-PER-USO (E.D., 2 Nov 2026): a version for a use is the
|
|
245
|
+
# asset AND the use, never a level ──
|
|
246
|
+
|
|
247
|
+
def _glb(c):
|
|
248
|
+
return [{"path": f"versions/x{c}.glb", "checksum": "sha256:" + c * 64,
|
|
249
|
+
"media_type": "model/gltf-binary"}]
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def test_a_mobile_version_beside_a_web_one_is_another_version_not_a_revision():
|
|
253
|
+
"""Templu Mare, 1 Nov: Column_entrance1's lod1-mobile became a REVISION of
|
|
254
|
+
its lod1 for the web («manca la base mobile»). By use, it is a version."""
|
|
255
|
+
g = _podio()
|
|
256
|
+
web = api.add_version(g, "podio", level="lod1", purpose="aton-heriverse", use=["heriverse"],
|
|
257
|
+
files=_glb("a"))
|
|
258
|
+
mob = api.add_version(g, "podio", profile="mobile_webxr", use_params={"triangles": 10_000},
|
|
259
|
+
use=["mobile_ar"], purpose="mobile", files=_glb("b"))
|
|
260
|
+
assert mob["level"] == "mobile-webxr-10k" and mob["revises"] is None and mob["created"]
|
|
261
|
+
assert mob["version_id"] != web["version_id"] and mob["profile"] == "mobile_webxr"
|
|
262
|
+
proc = g.find_node_by_id(mob["process_id"])
|
|
263
|
+
assert proc.data["parameters"]["profile"] == "mobile_webxr"
|
|
264
|
+
assert proc.data["parameters"]["use_params"] == {"triangles": 10_000}
|
|
265
|
+
# Heriverse reads `use`, as before
|
|
266
|
+
assert g.find_node_by_id(mob["version_id"]).data["use"] == ["mobile_ar"]
|
|
267
|
+
rows = {r["id"]: r for r in api.versions_of(g, "podio")}
|
|
268
|
+
assert rows[mob["version_id"]]["by_use"] and rows[mob["version_id"]]["use_params"] == {"triangles": 10_000}
|
|
269
|
+
# the one of before (lod1 for aton-heriverse) is said by its use too
|
|
270
|
+
assert rows[web["version_id"]]["profile"] == "webxr" and rows[web["version_id"]]["by_use"]
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def test_several_of_one_use_the_latest_wins_the_others_stay_listed():
|
|
274
|
+
from s3dgraphy.resources.versions import use_versions
|
|
275
|
+
g = _podio()
|
|
276
|
+
ten = api.add_version(g, "podio", profile="mobile_webxr", use_params={"triangles": 10_000},
|
|
277
|
+
files=_glb("c"), at="2026-11-01T10:00:00Z")
|
|
278
|
+
two = api.add_version(g, "podio", profile="mobile_webxr", use_params={"triangles": 2_000},
|
|
279
|
+
files=_glb("d"), at="2026-11-02T07:00:00Z")
|
|
280
|
+
assert ten["version_id"] != two["version_id"]
|
|
281
|
+
by = use_versions(api.versions_of(g, "podio"))
|
|
282
|
+
assert by["mobile_webxr"]["latest"]["id"] == two["version_id"]
|
|
283
|
+
assert [e["id"] for e in by["mobile_webxr"]["others"]] == [ten["version_id"]]
|
|
284
|
+
# «Aggiorna»: the same asset and use is the same version made again
|
|
285
|
+
from s3dgraphy.resources.graph_compose import level_key, level_say
|
|
286
|
+
rows = {r["id"]: r for r in api.versions_of(g, "podio")}
|
|
287
|
+
assert level_key(rows[ten["version_id"]]) == level_key(rows[two["version_id"]]) == ("use", "mobile_webxr")
|
|
288
|
+
assert level_say(rows[two["version_id"]]) == "mobile webXR · 2k tri"
|
|
289
|
+
assert level_say(rows[two["version_id"]], 1980, 512) == "mobile webXR · 2k tri · 512 px"
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def test_the_same_use_and_numbers_with_other_bytes_is_revised():
|
|
293
|
+
g = _podio()
|
|
294
|
+
one = api.add_version(g, "podio", profile="mobile_webxr", use_params={"triangles": 2_000}, files=_glb("e"))
|
|
295
|
+
with pytest.raises(ValueError, match="replace its file"):
|
|
296
|
+
api.add_version(g, "podio", profile="mobile_webxr", use_params={"triangles": 2_000}, files=_glb("f"))
|
|
297
|
+
again = api.add_version(g, "podio", profile="mobile_webxr", use_params={"triangles": 2_000},
|
|
298
|
+
files=_glb("f"), revise=True)
|
|
299
|
+
assert again["revises"] == one["version_id"]
|
|
300
|
+
# «Nuova accanto»: a second one with the same numbers, named -2
|
|
301
|
+
beside = api.add_version(g, "podio", profile="mobile_webxr", level="mobile-webxr-2k-2", files=_glb("9"))
|
|
302
|
+
assert beside["revises"] is None and beside["level"] == "mobile-webxr-2k-2"
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def test_a_lod_chain_is_said_as_a_chain_and_a_bad_profile_refused():
|
|
306
|
+
from s3dgraphy.resources.graph_compose import level_say
|
|
307
|
+
g = _podio()
|
|
308
|
+
_three(g) # LOD1 for «web», LOD2 for «preview»: hand-made, no profile
|
|
309
|
+
rows = [r for r in api.versions_of(g, "podio") if not r["master"]]
|
|
310
|
+
assert rows[0]["profile"] == "" and not rows[0]["by_use"]
|
|
311
|
+
chain = api.add_version(g, "podio", level="lod3", files=_glb("7"))
|
|
312
|
+
r = next(x for x in api.versions_of(g, "podio") if x["id"] == chain["version_id"])
|
|
313
|
+
assert level_say(r) == "catena LOD 3"
|
|
314
|
+
with pytest.raises(ValueError, match="not a profile"):
|
|
315
|
+
api.add_version(g, "podio", profile="hologram", files=_glb("8"))
|
|
@@ -220,7 +220,8 @@ def test_the_mobile_base_is_another_level_not_an_update():
|
|
|
220
220
|
at="2026-10-30T10:00:00Z")
|
|
221
221
|
tags = G.graph_tags(g, "rm_podio", {**api.versions_of(g, "podio")[1], "asset_id": "podio"})
|
|
222
222
|
st = G.update_status(g, tags)
|
|
223
|
-
|
|
223
|
+
# MICRO-VERSIONI-PER-USO: a version for a use is said by its use, not by a level
|
|
224
|
+
assert st["state"] == "aligned" and st["others"][0]["level_say"] == "mobile webXR"
|
|
224
225
|
assert G.level_key({"level": "manual-2026-10-31-2", "use": ["realtime"]}) == ("manual", "desktop_realtime")
|
|
225
226
|
|
|
226
227
|
|
|
@@ -347,7 +347,9 @@ def test_names_of_the_versions():
|
|
|
347
347
|
assert UP.version_file_name("Col", "lod0", "print_3d") == "Col@lod0-print.stl"
|
|
348
348
|
p = UP.parse_version_name("Column_light1@lod1-realtime-web.glb")
|
|
349
349
|
assert p == {"model": "Column_light1", "level": "lod1", "destination": "realtime-web",
|
|
350
|
-
"profile": "desktop_realtime", "ext": "glb"
|
|
350
|
+
"profile": "desktop_realtime", "ext": "glb",
|
|
351
|
+
# MICRO-VERSIONI-PER-USO: a name of before is said by its use
|
|
352
|
+
"use": "desktop-realtime", "triangles": None, "n": 1, "by_use": False}
|
|
351
353
|
assert UP.parse_version_name("PODIO@lod0-heriverse-1a2b3c4d")["destination"] == "heriverse"
|
|
352
354
|
assert UP.parse_version_name("PODIO@lod0-aton-heriverse.glb")["profile"] == "webxr"
|
|
353
355
|
assert UP.parse_version_name("PODIO@lod1-web.glb")["profile"] == "webxr"
|
|
@@ -451,3 +453,54 @@ def test_measure_gltf_gives_each_node_its_box(tmp_path):
|
|
|
451
453
|
assert boxes[0] == [[0, 0, 0], [1, 0, 1]] and boxes[1][0][0] == 10
|
|
452
454
|
d = UP.diagnose(m["objects"], m["textures"], "webxr")
|
|
453
455
|
assert d["totals"]["extent_m"] == 11.0
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
# ── MICRO-VERSIONI-PER-USO (E.D., 2 Nov 2026): versions named by their use ──
|
|
459
|
+
|
|
460
|
+
def test_a_version_for_a_use_is_named_by_its_use():
|
|
461
|
+
assert UP.use_version_name("Column_light1", "mobile_webxr", 2000) == "Column_light1@mobile-webxr-2k.glb"
|
|
462
|
+
assert UP.use_version_name("Column_light1", "webxr", 53_412) == "Column_light1@webxr-53k.gltf"
|
|
463
|
+
assert UP.use_version_name("C", "mobile_webxr", 1500) == "C@mobile-webxr-1.5k.glb"
|
|
464
|
+
assert UP.use_version_name("C", "desktop_realtime") == "C@desktop-realtime.glb"
|
|
465
|
+
assert UP.use_version_name("C", "mobile", 2000, n=2) == "C@mobile-webxr-2k-2.glb"
|
|
466
|
+
# version_file_name: an empty level or a use's name → the use's form
|
|
467
|
+
assert UP.version_file_name("C", None, "mobile_webxr", triangles=10_000) == "C@mobile-webxr-10k.glb"
|
|
468
|
+
assert UP.version_file_name("C", "mobile-webxr-10k", "mobile_webxr") == "C@mobile-webxr-10k.glb"
|
|
469
|
+
# a rung of a LOD chain keeps its form
|
|
470
|
+
assert UP.version_file_name("C", "lod3", "webxr") == "C@lod3-aton-heriverse.gltf"
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
def test_names_by_use_are_read_back():
|
|
474
|
+
p = UP.parse_version_name("Column_light1@mobile-webxr-2k.glb")
|
|
475
|
+
assert p == {"model": "Column_light1", "level": "mobile-webxr-2k", "destination": "mobile",
|
|
476
|
+
"profile": "mobile_webxr", "ext": "glb", "use": "mobile-webxr",
|
|
477
|
+
"triangles": 2000, "n": 1, "by_use": True}
|
|
478
|
+
assert UP.parse_version_name("C@mobile-webxr-2k-2.glb")["n"] == 2
|
|
479
|
+
g = UP.parse_version_name("C@webxr-53k-0a1b2c3d")
|
|
480
|
+
assert (g["level"], g["profile"], g["ext"]) == ("webxr-53k", "webxr", "")
|
|
481
|
+
assert UP.parse_version_name("C@print-3d.stl")["profile"] == "print_3d"
|
|
482
|
+
# the names of before: said by their use, not by their level
|
|
483
|
+
old = UP.parse_version_name("Column_entrance1@lod1-mobile.glb")
|
|
484
|
+
assert (old["use"], old["profile"], old["by_use"], old["level"]) == ("mobile-webxr", "mobile_webxr", False, "lod1")
|
|
485
|
+
assert UP.parse_use_tag("lod1") is None and UP.parse_use_tag("mobile-webxr-2k")["triangles"] == 2000
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
def test_what_a_row_says():
|
|
489
|
+
assert UP.use_say("mobile_webxr", 10_000, 512) == "mobile webXR · 10k tri · 512 px"
|
|
490
|
+
assert UP.use_say("webxr", 53_000) == "webXR / Heriverse · 53k tri"
|
|
491
|
+
assert UP.chain_say("lod4") == "catena LOD 4"
|
|
492
|
+
assert UP.kilo(None) == "" and UP.kilo(999) == "1k" and UP.kilo(2400) == "2.4k" and UP.kilo(694_000) == "694k"
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
def test_versions_listed_by_use(tmp_path):
|
|
496
|
+
for n in ("A@mobile-webxr-2k.glb", "A@lod1-aton-heriverse.glb"):
|
|
497
|
+
(tmp_path / n).write_bytes(b"x")
|
|
498
|
+
rows = {r["name"]: r for r in UP.list_versions(str(tmp_path), measure=False)}
|
|
499
|
+
assert rows["A@mobile-webxr-2k.glb"]["by_use"] and rows["A@mobile-webxr-2k.glb"]["profile"] == "mobile_webxr"
|
|
500
|
+
assert rows["A@lod1-aton-heriverse.glb"]["use"] == "webxr"
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
def test_a_gltfpack_variant_for_a_use_is_named_by_it():
|
|
504
|
+
from s3dgraphy.project_tree import variant_name
|
|
505
|
+
assert variant_name("SM_X.glb", "mobile-webxr-2k", "mobile") == "SM_X@mobile-webxr-2k.glb"
|
|
506
|
+
assert variant_name("SM_X.glb", "lod4", "web") == "SM_X@lod4-web.glb" # a LOD chain's rung, as before
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|