s3dgraphy 1.6.0.dev83__tar.gz → 1.6.0.dev85__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.dev83/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev85}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em_state_symbols.json +12 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/api.py +6 -3
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/asset_list.py +163 -9
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/consolidate.py +1 -1
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/locate.py +40 -8
- s3dgraphy-1.6.0.dev85/src/s3dgraphy/resources/tileset_fit.py +144 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/use_profiles.py +14 -5
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy.egg-info/SOURCES.txt +3 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_asset_list.py +12 -0
- s3dgraphy-1.6.0.dev85/tests/test_cloud_placeholders.py +86 -0
- s3dgraphy-1.6.0.dev85/tests/test_tileset_fit.py +142 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/README.md +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/alternative_cases.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em.ttl +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/bozze/site.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/hdto/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/hdto/hdt.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/hdto/heritage_entity.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/hdto/project.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/hdto/study.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/__main__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/container.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/frame.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/registration.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/transform.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/gis/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/gis/crs.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/gis/layer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/gis/shapefile.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/gis/site.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/graph_removal.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/hdto.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/sheet_header.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/labels.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/language.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/links.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/periodization_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/nodes/translation_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/paradata_view.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/periodization.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/project_tree.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/property_source.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/addresses.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/alignment.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/alternatives.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/blend_folder.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/blend_room.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/detail.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/graph_compose.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/moved.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/object_store.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/resources/versions.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/room_import/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/room_import/access.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/room_import/engine.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/room_import/errors.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/room_import/inventory.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/room_import/node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/room_import/pack.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/room_import/trust.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/spatiotemporal.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/temporal/relative_chronology.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/translation.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_alternative_labels.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_alternative_sets.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_alternatives_hat.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_anastylosis_document_type.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_asset_versions.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_blend_folder.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_blend_room.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_bucket_alignment.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_consolida_2.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_consolidate_compose.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_container_layouts.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_contemporaneity.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_cycle_message_is_cheap.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_datamodel_fingerprint.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_detail.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dev29_em_sourcelist.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dev29_file_set_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dev29_graphml_without_a_database.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dev29_image_set_texturing.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dev29_not_georeferenced.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dev29_one_act_n_outputs.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dev29_ttl_round_trip.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dev30_decisions.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dove_sta_il_testo.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_edge_outside_graph.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_emjson_conformance.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_emjson_no_drawing_keys.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_end_of_unit.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_epoch_instances.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_file_frame.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_gis_site.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_graph_header_code.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_graph_helpers_indexed.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_graph_indices_alive.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_graph_removal.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_hdto_glyphs.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_hdto_study.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_i_generi_dei_passi.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_il_modo_d_accesso.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_il_modo_dal_relay.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_il_riallineamento.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_import_without_residues.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_iri_extendedmatrix.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_issue27_small_points.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_la_lingua_alla_nascita.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_la_lingua_dei_dati.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_la_lingua_nell_op.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_la_riga_d_intestazione.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_lab_orizzonti.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_le_traduzioni.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_lod_levels.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_one_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_op_vocabulary.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_part_twins.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_piu_indirizzi.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_promote_keeps_proxy_type.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_property_as_source.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_psx_locator.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_qualia_dai_d7_d8.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_rdf_sub_epoch_direction.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_registration.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_release.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_resource_revision.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_rm_container_node_group.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_room_import.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_room_import_access.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_room_import_inventory.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_room_import_trust.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_series_vsf.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_spatiotemporal_entities.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_special_find_definitions.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_stable_study_code.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_threed_instances.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_transform_form.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_use_profiles.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_valore_proprieta_doppio.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_verifica_provenance.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_version_for.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/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.dev85
|
|
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.dev85"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
{s3dgraphy-1.6.0.dev83 → s3dgraphy-1.6.0.dev85}/src/s3dgraphy/JSON_config/em_state_symbols.json
RENAMED
|
@@ -82,6 +82,18 @@
|
|
|
82
82
|
"en": "A file is here but its bytes are zeros: an incomplete copy, to be made again."
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
|
+
"file.in_cloud": {
|
|
86
|
+
"family": "file",
|
|
87
|
+
"glyph": "⤓",
|
|
88
|
+
"label": {
|
|
89
|
+
"it": "nel cloud",
|
|
90
|
+
"en": "in the cloud"
|
|
91
|
+
},
|
|
92
|
+
"meaning": {
|
|
93
|
+
"it": "Il file è qui come segnaposto: i suoi byte sono nel cloud (OneDrive, iCloud, Dropbox «solo online»). Non si legge finché non lo scarichi.",
|
|
94
|
+
"en": "The file is here as a placeholder: its bytes are in the cloud (OneDrive, iCloud, Dropbox «online only»). It is not read until you download it."
|
|
95
|
+
}
|
|
96
|
+
},
|
|
85
97
|
"node.reachable": {
|
|
86
98
|
"family": "node",
|
|
87
99
|
"glyph": "⬢",
|
|
@@ -3246,9 +3246,11 @@ def resolve_files(graph: Graph, *, project_root: Optional[str] = None,
|
|
|
3246
3246
|
base_dirs: Sequence[str] = (), cache_dirs: Sequence[str] = (),
|
|
3247
3247
|
on_node: Optional[Callable[[str], bool]] = None,
|
|
3248
3248
|
hasher: Optional[Callable[[str], str]] = None,
|
|
3249
|
-
verify: bool = False
|
|
3249
|
+
verify: bool = False,
|
|
3250
|
+
cloud: Optional[Callable[[str], bool]] = None) -> List[Dict[str, Any]]:
|
|
3250
3251
|
"""The STATE of every resource of ``graph`` — ``on_disk``, ``on_node``,
|
|
3251
|
-
``both``, ``reference_only``, ``missing``, ``empty_copy``
|
|
3252
|
+
``both``, ``reference_only``, ``missing``, ``empty_copy``, ``in_cloud``
|
|
3253
|
+
(``cloud(path)``: bytes only in a cloud, never read) — trying cache →
|
|
3252
3254
|
known paths (the EM standard tree of ``project_root`` first) → node
|
|
3253
3255
|
(``on_node(hex)``) → reference. The one resolver every tool calls.
|
|
3254
3256
|
``verify`` (with a ``hasher``): a file here whose bytes are not the
|
|
@@ -3256,7 +3258,8 @@ def resolve_files(graph: Graph, *, project_root: Optional[str] = None,
|
|
|
3256
3258
|
:mod:`s3dgraphy.resources.locate`."""
|
|
3257
3259
|
from .resources.locate import resolve_graph
|
|
3258
3260
|
return resolve_graph(graph, project_root=project_root, base_dirs=base_dirs,
|
|
3259
|
-
cache_dirs=cache_dirs, on_node=on_node, hasher=hasher, verify=verify
|
|
3261
|
+
cache_dirs=cache_dirs, on_node=on_node, hasher=hasher, verify=verify,
|
|
3262
|
+
cloud=cloud)
|
|
3260
3263
|
|
|
3261
3264
|
|
|
3262
3265
|
def resolve_file(entry: Dict[str, Any], **kwargs) -> Dict[str, Any]:
|
|
@@ -65,6 +65,12 @@ TOOLS = ("decimate_bake", "gltfpack", "ktx2", "tileset", "instance", "keep")
|
|
|
65
65
|
#: The states of an asset for a target.
|
|
66
66
|
STATES = ("ok", "todo", "missing", "na")
|
|
67
67
|
|
|
68
|
+
#: What a tileset's row says in the place of its level (MICRO-ARCHIVE-ASSET-3).
|
|
69
|
+
TILESET_SAY = "tileset · in streaming"
|
|
70
|
+
|
|
71
|
+
#: The targets a tileset streams to (the archive keeps its master).
|
|
72
|
+
STREAMED = ("mobile", "web", "desk")
|
|
73
|
+
|
|
68
74
|
#: A file this many triangles or more is a tileset's job, not a decimation's.
|
|
69
75
|
TILESET_FROM = 2_000_000
|
|
70
76
|
|
|
@@ -124,19 +130,30 @@ def _texture_rows(raw: Optional[Dict[str, Any]]) -> List[Dict[str, Any]]:
|
|
|
124
130
|
return out
|
|
125
131
|
|
|
126
132
|
|
|
133
|
+
def geometry_keys(raw: Optional[Dict[str, Any]]) -> List[str]:
|
|
134
|
+
"""The ``geometry_key`` of each mesh of a measured file
|
|
135
|
+
(:func:`~.use_profiles.measure_gltf`), sorted, each once: two files with
|
|
136
|
+
the same keys hold the same geometry (the same topology and UVs), placed
|
|
137
|
+
anywhere. Empty when the file was not measured."""
|
|
138
|
+
if not raw or not isinstance(raw, dict):
|
|
139
|
+
return []
|
|
140
|
+
return sorted({str(o.get("geometry_key")) for o in raw.get("objects") or []
|
|
141
|
+
if isinstance(o, dict) and o.get("geometry_key") and int(o.get("triangles") or 0) > 0})
|
|
142
|
+
|
|
143
|
+
|
|
127
144
|
def _state_of(graph, entry: Dict[str, Any], states: Dict[str, str]) -> str:
|
|
128
145
|
ids = [entry.get("id")] + [f["id"] for f in C._files(graph, entry) if f.get("id") != entry.get("id")]
|
|
129
146
|
known = [states[i] for i in ids if i in states]
|
|
130
147
|
if not known:
|
|
131
148
|
return ""
|
|
132
|
-
for worst in ("missing", "empty_copy", "reference_only"):
|
|
149
|
+
for worst in ("missing", "empty_copy", "reference_only", "in_cloud"):
|
|
133
150
|
if worst in known:
|
|
134
151
|
return worst
|
|
135
152
|
return known[0]
|
|
136
153
|
|
|
137
154
|
|
|
138
155
|
def _version(graph, entry: Dict[str, Any], summary: Dict[str, Any], *, states, measure,
|
|
139
|
-
changed) -> Dict[str, Any]:
|
|
156
|
+
changed, tiles=None) -> Dict[str, Any]:
|
|
140
157
|
from .graph_compose import level_say, made_by, made_by_say
|
|
141
158
|
raw = None
|
|
142
159
|
if measure is not None and not summary.get("tileset"):
|
|
@@ -147,10 +164,20 @@ def _version(graph, entry: Dict[str, Any], summary: Dict[str, Any], *, states, m
|
|
|
147
164
|
made = made_by(graph, entry["id"])
|
|
148
165
|
ids = [entry["id"]] + [f["id"] for f in C._files(graph, entry) if f.get("id") != entry["id"]]
|
|
149
166
|
now = next((changed[i] for i in ids if changed and i in changed), "")
|
|
167
|
+
state = _state_of(graph, entry, states)
|
|
168
|
+
# MICRO-ARCHIVE-ASSET-3 · a tileset's tiles, each by its head (the caller
|
|
169
|
+
# reads them: ``tiles(entry)``); its row says «tileset · in streaming»
|
|
170
|
+
tstats = None
|
|
171
|
+
if summary.get("tileset") and tiles is not None and state != "in_cloud":
|
|
172
|
+
try:
|
|
173
|
+
tstats = tiles(entry)
|
|
174
|
+
except Exception: # noqa: BLE001 — unreadable: not known
|
|
175
|
+
tstats = None
|
|
150
176
|
return {"id": entry["id"], "name": summary.get("name") or entry.get("name") or "",
|
|
151
177
|
"asset_id": entry.get("asset_id"), "master": bool(entry.get("master")),
|
|
152
178
|
"level": summary.get("level") or "", "lod_level": summary.get("lod_level") or "",
|
|
153
|
-
"level_say":
|
|
179
|
+
"level_say": TILESET_SAY if summary.get("tileset") else level_say(entry),
|
|
180
|
+
"use": list(entry.get("use") or []),
|
|
154
181
|
"url": summary.get("url") or "", "checksum": summary.get("checksum") or "",
|
|
155
182
|
"stamped": bool(summary.get("checksum")),
|
|
156
183
|
"size_bytes": summary.get("size_bytes"), "triangles": summary.get("triangles"),
|
|
@@ -158,12 +185,22 @@ def _version(graph, entry: Dict[str, Any], summary: Dict[str, Any], *, states, m
|
|
|
158
185
|
"texture_side": summary.get("texture_side"), "ktx2": summary.get("ktx2"),
|
|
159
186
|
"tileset": bool(summary.get("tileset")),
|
|
160
187
|
"textures": _texture_rows(raw),
|
|
188
|
+
# MICRO-ARCHIVE-ASSET-2 · the shape of the file: its meshes' geometry
|
|
189
|
+
# keys (indices and UVs, wherever placed — Draco/meshopt bytes when
|
|
190
|
+
# compressed) and its compression, for the forms repeated
|
|
191
|
+
"geometry_keys": geometry_keys(raw),
|
|
192
|
+
"compression": (raw.get("compression") or "") if isinstance(raw, dict) else "",
|
|
161
193
|
"texture_count": len(raw.get("textures") or {}) if isinstance(raw, dict) else
|
|
162
194
|
_data(_node(graph, entry["id"])).get("texture_count"),
|
|
163
|
-
"state":
|
|
195
|
+
"state": state,
|
|
196
|
+
# MICRO-TESTATA-CLOUD · its bytes only in a cloud (not downloaded):
|
|
197
|
+
# never measured here, its numbers are the graph's estimate
|
|
198
|
+
"in_cloud": state == "in_cloud",
|
|
164
199
|
"made": made, "made_say": made_by_say(made),
|
|
165
200
|
"modified_after_stamp": bool(now) and not entry.get("master"), "sha256_now": now or "",
|
|
166
|
-
"loaded_by": []
|
|
201
|
+
"loaded_by": [],
|
|
202
|
+
**({"tiles": {k: tstats.get(k) for k in ("tiles", "read", "max_triangles", "max_texture_side")},
|
|
203
|
+
"_tile_stats": tstats} if tstats else {})}
|
|
167
204
|
|
|
168
205
|
|
|
169
206
|
# ── a target's state and proposal ───────────────────────────────────────────
|
|
@@ -288,6 +325,8 @@ def _targets(graph, row: Dict[str, Any], cand: Dict[str, Any], versions: List[Di
|
|
|
288
325
|
st_a, why_a = "todo", "master senza sha256: timbralo"
|
|
289
326
|
elif m["state"] in ("missing", "empty_copy", "reference_only"):
|
|
290
327
|
st_a, why_a = "todo", f"il file del master non c'è ({m['state'].replace('_', ' ')})"
|
|
328
|
+
elif m["state"] == "in_cloud" and "tileset_master" not in codes:
|
|
329
|
+
st_a, why_a = "ok", "master timbrato, il file è nel cloud (non scaricato: non verificato)"
|
|
291
330
|
elif "tileset_master" in codes:
|
|
292
331
|
st_a, why_a = "todo", "dichiara il master del tileset (le mesh da cui viene)"
|
|
293
332
|
elif not m["state"]:
|
|
@@ -296,21 +335,125 @@ def _targets(graph, row: Dict[str, Any], cand: Dict[str, Any], versions: List[Di
|
|
|
296
335
|
st_a, why_a = "ok", "master timbrato e presente"
|
|
297
336
|
out["arch"] = _target_cell("arch", state=st_a, loads=m["id"] if m else None, why=why_a,
|
|
298
337
|
source=src, kind=kind)
|
|
338
|
+
|
|
339
|
+
# MICRO-ARCHIVE-ASSET-3 · a tileset is «ok» for a target only if its
|
|
340
|
+
# tiles respect the target's band (per tile: triangles, texture side)
|
|
341
|
+
if tileset and lo:
|
|
342
|
+
from .tileset_fit import fit
|
|
343
|
+
tv = by.get(lo["id"]) or {}
|
|
344
|
+
for k in STREAMED:
|
|
345
|
+
f = fit(tv.get("_tile_stats"), bands(k))
|
|
346
|
+
if f["ok"]:
|
|
347
|
+
cell = _target_cell(k, state="ok", loads=lo["id"], why=f"in streaming: {f['why']}",
|
|
348
|
+
source=src, kind=kind)
|
|
349
|
+
elif f["known"]:
|
|
350
|
+
b = bands(k)
|
|
351
|
+
cell = _target_cell(k, state="todo", loads=lo["id"], why=f"le tile non rispettano la fascia: {f['why']}",
|
|
352
|
+
source=src, kind=kind)
|
|
353
|
+
cell["proposal"] = {"tool": "tileset", "triangles": b["object_triangles"],
|
|
354
|
+
"texture": b["object_texture_side"], "ktx2": k != "desk",
|
|
355
|
+
"why": (f"rifai le tile nella fascia ({b['object_triangles']:,} triangoli, "
|
|
356
|
+
f"{b['object_texture_side']} px per tile)").replace(",", ".")}
|
|
357
|
+
else:
|
|
358
|
+
cell = _target_cell(k, state="todo", loads=lo["id"], why=f["why"], source=src, kind=kind)
|
|
359
|
+
cell["proposal"] = {"tool": "keep", "triangles": None, "texture": None, "ktx2": False,
|
|
360
|
+
"why": "leggi le tile prima (il file del tileset su questo computer)"}
|
|
361
|
+
cell["tiles"] = {x: f[x] for x in ("ok", "known", "tiles", "read", "over_triangles", "over_texture",
|
|
362
|
+
"max_triangles", "max_texture_side")}
|
|
363
|
+
out[k] = cell
|
|
364
|
+
return out
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
# ── MICRO-ARCHIVE-ASSET-3 · the tileset covers its meshes ───────────────────
|
|
368
|
+
|
|
369
|
+
def _cited_alone(graph) -> Dict[str, str]:
|
|
370
|
+
"""The nodes a narrative cites (an embed or a mention) → the narrative's
|
|
371
|
+
name: a mesh shown alone in a narrative is wanted one by one."""
|
|
372
|
+
try:
|
|
373
|
+
from ..narrative.query import citations
|
|
374
|
+
rows = citations(graph)
|
|
375
|
+
except Exception: # noqa: BLE001 — no narrative layer: none cited
|
|
376
|
+
return {}
|
|
377
|
+
out: Dict[str, str] = {}
|
|
378
|
+
for r in rows:
|
|
379
|
+
out.setdefault(str(r.get("ref") or ""), str(r.get("narrative_name") or r.get("narrative_id") or ""))
|
|
299
380
|
return out
|
|
300
381
|
|
|
301
382
|
|
|
383
|
+
def cover_by_tilesets(graph, assets: List[Dict[str, Any]]) -> Dict[str, int]:
|
|
384
|
+
"""A container whose tileset fits a target covers its meshes for it: each
|
|
385
|
+
says «coperta dal tileset di <contenitore>», has no proposal and is out
|
|
386
|
+
of the count (state ``na``, ``covered_by``). The exceptions, said and
|
|
387
|
+
left with their proposal: the container's meshes are of different epochs
|
|
388
|
+
(«serve per epoca: il tileset non si divide»), or a mesh is cited alone in
|
|
389
|
+
a narrative. Where the tileset does not fit, the meshes keep their
|
|
390
|
+
proposal and say why the tileset does not cover them yet. → the meshes
|
|
391
|
+
covered per target."""
|
|
392
|
+
cited = None
|
|
393
|
+
n = {k: 0 for k in STREAMED}
|
|
394
|
+
for c in assets:
|
|
395
|
+
if c["kind"] != "container":
|
|
396
|
+
continue
|
|
397
|
+
tv = next((v for v in c["versions"] if v["tileset"] and v["id"] in
|
|
398
|
+
{c["targets"][k]["loads"] for k in STREAMED}), None)
|
|
399
|
+
if tv is None:
|
|
400
|
+
continue
|
|
401
|
+
members = [a for a in assets if a is not c and a["kind"] == "rm"
|
|
402
|
+
and any(x["id"] == c["id"] for x in a["containers"])]
|
|
403
|
+
if not members:
|
|
404
|
+
continue
|
|
405
|
+
if cited is None:
|
|
406
|
+
cited = _cited_alone(graph)
|
|
407
|
+
epochs = {tuple(sorted(a["epochs"])) for a in members}
|
|
408
|
+
by_epoch = len(epochs) > 1
|
|
409
|
+
for a in members:
|
|
410
|
+
alone = ("serve per epoca: il tileset non si divide" if by_epoch else
|
|
411
|
+
f"usata da sola nella narrazione «{cited[a['id']]}»: il tileset non si divide"
|
|
412
|
+
if a["id"] in cited else "")
|
|
413
|
+
for k in STREAMED:
|
|
414
|
+
tc, cell = c["targets"][k], a["targets"][k]
|
|
415
|
+
if cell["state"] == "na":
|
|
416
|
+
continue
|
|
417
|
+
cell["tileset_of"] = {"id": c["id"], "name": c["name"], "state": tc["state"]}
|
|
418
|
+
if tc["state"] != "ok":
|
|
419
|
+
cell["why"] = f"{cell['why']} (il tileset di {c['name']} non la copre: {tc['why']})"
|
|
420
|
+
continue
|
|
421
|
+
if alone:
|
|
422
|
+
cell["single"] = alone
|
|
423
|
+
cell["why"] = f"{alone} — {cell['why']}"
|
|
424
|
+
cell["proposal"] = {**cell["proposal"], "why": f"{alone} — {cell['proposal']['why']}"}
|
|
425
|
+
continue
|
|
426
|
+
say = f"coperta dal tileset di {c['name']}"
|
|
427
|
+
for v in a["versions"]:
|
|
428
|
+
if k in v["loaded_by"]:
|
|
429
|
+
v["loaded_by"].remove(k)
|
|
430
|
+
a["targets"][k] = {"state": "na", "loads": cell["loads"], "why": say,
|
|
431
|
+
"covered_by": {"id": c["id"], "name": c["name"], "version": tv["id"]},
|
|
432
|
+
"tileset_of": cell["tileset_of"],
|
|
433
|
+
"proposal": {"tool": "keep", "triangles": None, "texture": None, "ktx2": False,
|
|
434
|
+
"why": say}}
|
|
435
|
+
n[k] += 1
|
|
436
|
+
return n
|
|
437
|
+
|
|
438
|
+
|
|
302
439
|
# ── the list ─────────────────────────────────────────────────────────────────
|
|
303
440
|
|
|
304
441
|
def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
|
|
305
442
|
changed: Optional[Dict[str, str]] = None, in_room: bool = False,
|
|
306
|
-
models: Optional[Iterable[str]] = None, platform: str = "heriverse"
|
|
443
|
+
models: Optional[Iterable[str]] = None, platform: str = "heriverse",
|
|
444
|
+
tiles=None) -> Dict[str, Any]:
|
|
307
445
|
"""The assets of the study (``models``, default the published ones —
|
|
308
446
|
representation models and the containers with a whole of their own),
|
|
309
447
|
each with its versions (master first), their textures, its state and
|
|
310
448
|
proposal per target (:data:`TARGETS`), the groups it belongs to
|
|
311
449
|
(container, branch, epochs, family); the textures of the whole study once;
|
|
312
450
|
the totals per target against the bands. → ``{targets, tools, assets,
|
|
313
|
-
textures, totals, counts, measured, estimated, say_it}``.
|
|
451
|
+
textures, totals, counts, measured, estimated, say_it}``.
|
|
452
|
+
|
|
453
|
+
``tiles(entry)`` (MICRO-ARCHIVE-ASSET-3, the caller's reader): a
|
|
454
|
+
tileset's tiles measured by their heads (:func:`.tileset_fit.measure_tiles`)
|
|
455
|
+
— the tileset is «ok» for a target only if they fit its band, and then it
|
|
456
|
+
covers its container's meshes (:func:`cover_by_tilesets`)."""
|
|
314
457
|
from .alternatives import containers_of
|
|
315
458
|
from .graph_compose import epochs_of
|
|
316
459
|
states = dict(states or {})
|
|
@@ -327,7 +470,7 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
|
|
|
327
470
|
versions = []
|
|
328
471
|
for e in entries:
|
|
329
472
|
s = C._summary(graph, e, measure)
|
|
330
|
-
v = _version(graph, e, s, states=states, measure=measure, changed=changed)
|
|
473
|
+
v = _version(graph, e, s, states=states, measure=measure, changed=changed, tiles=tiles)
|
|
331
474
|
cache[e["id"]] = v
|
|
332
475
|
versions.append(v)
|
|
333
476
|
if not v["master"] and not v["tileset"]:
|
|
@@ -348,6 +491,7 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
|
|
|
348
491
|
br = branch_of(master["url"] if master else (versions[0]["url"] if versions else ""))
|
|
349
492
|
modified = [v["id"] for v in versions if v["modified_after_stamp"]]
|
|
350
493
|
missing_files = [v["id"] for v in versions if v["state"] in ("missing", "empty_copy")]
|
|
494
|
+
cloud_files = [v["id"] for v in versions if v["state"] == "in_cloud"]
|
|
351
495
|
a = {"id": row["id"], "name": row["name"], "kind": row["kind"],
|
|
352
496
|
"description": str(getattr(node, "description", "") or ""),
|
|
353
497
|
"containers": conts, "branch": br, "epochs": [x["name"] for x in epochs_of(graph, row["id"])],
|
|
@@ -356,7 +500,7 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
|
|
|
356
500
|
"loaded_why": row.get("loaded_why") or "", "loaded_say": row.get("loaded_say") or "",
|
|
357
501
|
"tileset_master": row.get("tileset_master"),
|
|
358
502
|
"audit": {"versions": len(versions), "stamped": sum(1 for v in versions if v["stamped"]),
|
|
359
|
-
"files_missing": missing_files, "unchecked": sum(1 for v in versions if not v["state"]),
|
|
503
|
+
"files_missing": missing_files, "files_in_cloud": cloud_files, "unchecked": sum(1 for v in versions if not v["state"]),
|
|
360
504
|
"modified_after_stamp": modified,
|
|
361
505
|
"master_declared": (row.get("tileset_master") or {}).get("declared")}}
|
|
362
506
|
assets.append(a)
|
|
@@ -370,6 +514,10 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
|
|
|
370
514
|
"level": v["level"] or ("master" if v["master"] else "")})
|
|
371
515
|
if t["name"] not in ti["names"]:
|
|
372
516
|
ti["names"].append(t["name"])
|
|
517
|
+
covered = cover_by_tilesets(graph, assets)
|
|
518
|
+
for a in assets:
|
|
519
|
+
for v in a["versions"]:
|
|
520
|
+
v.pop("_tile_stats", None)
|
|
373
521
|
textures = sorted(tex_index.values(), key=lambda t: (-len(t["uses"]), -t["gpu_bytes"], t["name"]))
|
|
374
522
|
for t in textures:
|
|
375
523
|
t["count"] = len(t["uses"])
|
|
@@ -380,6 +528,8 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
|
|
|
380
528
|
"versions": sum(len(a["versions"]) for a in assets),
|
|
381
529
|
"textures": len(textures), "shared_textures": sum(1 for t in textures if t["count"] > 1),
|
|
382
530
|
"measured": n_meas, "estimated": n_est,
|
|
531
|
+
"in_cloud": sum(1 for a in assets for v in a["versions"] if v["in_cloud"]),
|
|
532
|
+
"covered_by_tileset": covered,
|
|
383
533
|
"by_target": {k: {s: sum(1 for a in assets if a["targets"][k]["state"] == s) for s in STATES}
|
|
384
534
|
for k in TARGETS}}
|
|
385
535
|
say = (f"{counts['assets']} asset ({counts['rms']} modelli, {counts['containers']} contenitori), "
|
|
@@ -387,6 +537,8 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
|
|
|
387
537
|
f"({counts['shared_textures']} condivise)")
|
|
388
538
|
say += (f"; {n_meas} versioni misurate dai file, {n_est} stimate dal grafo" if n_est
|
|
389
539
|
else f"; {n_meas} versioni misurate dai file")
|
|
540
|
+
if counts["in_cloud"]:
|
|
541
|
+
say += f"; {counts['in_cloud']} nel cloud (non scaricate: stimate dal grafo)"
|
|
390
542
|
return {"targets": {k: {**{x: v for x, v in TARGETS[k].items() if x != "uses"},
|
|
391
543
|
"uses": list(TARGETS[k]["uses"]), "bands": bands(k)} for k in TARGETS},
|
|
392
544
|
"tools": list(TOOLS), "assets": assets, "textures": textures, "totals": totals,
|
|
@@ -406,6 +558,8 @@ def scene_totals(assets: Sequence[Dict[str, Any]], target: str) -> Dict[str, Any
|
|
|
406
558
|
streamed = estimated = 0
|
|
407
559
|
for a in assets:
|
|
408
560
|
cell = a["targets"].get(target) or {}
|
|
561
|
+
if cell.get("covered_by"):
|
|
562
|
+
continue
|
|
409
563
|
v = next((x for x in a["versions"] if x["id"] == cell.get("loads")), None)
|
|
410
564
|
if v is None:
|
|
411
565
|
continue
|
|
@@ -357,7 +357,7 @@ def presence(graph, entry: Dict[str, Any], *, states: Optional[Dict[str, str]] =
|
|
|
357
357
|
known = [states[i] for i in ids if i in states]
|
|
358
358
|
state = known[0] if known else ""
|
|
359
359
|
if len(known) > 1:
|
|
360
|
-
worst = next((s for s in ("missing", "empty_copy", "reference_only", "on_disk", "on_node")
|
|
360
|
+
worst = next((s for s in ("missing", "empty_copy", "reference_only", "in_cloud", "on_disk", "on_node")
|
|
361
361
|
if s in known), known[0])
|
|
362
362
|
state = worst if not all(k == "both" for k in known) else "both"
|
|
363
363
|
if not state:
|
|
@@ -35,7 +35,7 @@ import re
|
|
|
35
35
|
import urllib.parse
|
|
36
36
|
from typing import Any, Callable, Dict, Iterable, List, Optional
|
|
37
37
|
|
|
38
|
-
STATES = ("on_disk", "on_node", "both", "reference_only", "missing", "empty_copy")
|
|
38
|
+
STATES = ("on_disk", "on_node", "both", "reference_only", "missing", "empty_copy", "in_cloud")
|
|
39
39
|
|
|
40
40
|
#: the order the positions are tried in
|
|
41
41
|
ORDER = ("cache", "path", "node", "reference")
|
|
@@ -136,7 +136,8 @@ def resolve(entry: Dict[str, Any], *, project_root: Optional[str] = None,
|
|
|
136
136
|
base_dirs: Iterable[str] = (), cache_dirs: Iterable[str] = (),
|
|
137
137
|
on_node: Optional[Callable[[str], bool]] = None,
|
|
138
138
|
hasher: Optional[Callable[[str], str]] = None,
|
|
139
|
-
verify: bool = False
|
|
139
|
+
verify: bool = False,
|
|
140
|
+
cloud: Optional[Callable[[str], bool]] = None) -> Dict[str, Any]:
|
|
140
141
|
"""The state of ONE resource. ``entry`` is ``{id, locator, checksum}`` (what
|
|
141
142
|
:func:`entries_of` gives for a graph). The project's standard tree is tried
|
|
142
143
|
before ``base_dirs`` (C1). ``hasher(path) -> hex`` lets a file found on the
|
|
@@ -146,7 +147,16 @@ def resolve(entry: Dict[str, Any], *, project_root: Optional[str] = None,
|
|
|
146
147
|
the file was modified after its stamp (MICRO-CONSOLIDA-2) — the state
|
|
147
148
|
stays where the bytes are.
|
|
148
149
|
|
|
149
|
-
|
|
150
|
+
``cloud(path) -> bool`` (MICRO-TESTATA-CLOUD): a file whose bytes are
|
|
151
|
+
only in a cloud (OneDrive, iCloud, Dropbox «online only»: the caller
|
|
152
|
+
asks the system, by metadata). Such a file is NEVER read here — not
|
|
153
|
+
hashed, not probed for zeros — since reading it would download it: it is
|
|
154
|
+
said ``in_cloud`` with its place in ``cloud_path``, and ``path`` stays
|
|
155
|
+
empty, so nothing downstream measures it by accident. Another candidate
|
|
156
|
+
that is here wins over it.
|
|
157
|
+
|
|
158
|
+
→ ``{id, sha256, state, path, positions: [{kind, where, ok}], note,
|
|
159
|
+
cloud_path?}``."""
|
|
150
160
|
from ..project_tree import search_bases
|
|
151
161
|
|
|
152
162
|
rid = str(entry.get("id") or "")
|
|
@@ -158,10 +168,20 @@ def resolve(entry: Dict[str, Any], *, project_root: Optional[str] = None,
|
|
|
158
168
|
bases = (search_bases(project_root) if project_root else []) + \
|
|
159
169
|
[b for b in (base_dirs or ()) if b]
|
|
160
170
|
positions: List[Dict[str, Any]] = []
|
|
161
|
-
path, empty = None, None
|
|
171
|
+
path, empty, cloud_at = None, None, None
|
|
172
|
+
|
|
173
|
+
def in_cloud(p: str) -> bool:
|
|
174
|
+
if cloud is None:
|
|
175
|
+
return False
|
|
176
|
+
try:
|
|
177
|
+
return bool(cloud(p))
|
|
178
|
+
except Exception: # noqa: BLE001 — a system that cannot say: not in the cloud
|
|
179
|
+
return False
|
|
162
180
|
|
|
163
181
|
# 1 · cache
|
|
164
182
|
hit = in_cache(cache_dirs, hexd)
|
|
183
|
+
if hit and in_cloud(hit):
|
|
184
|
+
cloud_at, hit = hit, None
|
|
165
185
|
positions.append({"kind": "cache", "where": hit or "", "ok": bool(hit)})
|
|
166
186
|
if hit:
|
|
167
187
|
path = hit
|
|
@@ -188,13 +208,17 @@ def resolve(entry: Dict[str, Any], *, project_root: Optional[str] = None,
|
|
|
188
208
|
if not path and cand_look and not cand_look.startswith(("blend://", "psx://")):
|
|
189
209
|
for cand in local_candidates(cand_look, bases):
|
|
190
210
|
if os.path.isfile(cand) or os.path.isdir(cand):
|
|
211
|
+
# in the cloud: never opened (a read would download it)
|
|
212
|
+
if os.path.isfile(cand) and in_cloud(cand):
|
|
213
|
+
cloud_at = cloud_at or cand
|
|
214
|
+
continue
|
|
191
215
|
if os.path.isfile(cand) and is_empty_copy(cand):
|
|
192
216
|
empty = empty or cand
|
|
193
217
|
continue
|
|
194
218
|
path = cand
|
|
195
219
|
break
|
|
196
|
-
positions.append({"kind": "path", "where": path or empty or cand_look,
|
|
197
|
-
"ok": bool(path)})
|
|
220
|
+
positions.append({"kind": "path", "where": path or cloud_at or empty or cand_look,
|
|
221
|
+
"ok": bool(path), **({"cloud": True} if cloud_at and not path else {})})
|
|
198
222
|
elif locator.startswith(("blend://", "psx://")) and not look:
|
|
199
223
|
positions.append({"kind": "path", "where": locator, "ok": None})
|
|
200
224
|
changed, now = False, ""
|
|
@@ -229,8 +253,14 @@ def resolve(entry: Dict[str, Any], *, project_root: Optional[str] = None,
|
|
|
229
253
|
state = "on_disk"
|
|
230
254
|
elif node_has:
|
|
231
255
|
state = "on_node"
|
|
232
|
-
if
|
|
256
|
+
if cloud_at:
|
|
257
|
+
note = f"the copy here is in the cloud, not downloaded: {cloud_at}"
|
|
258
|
+
elif empty:
|
|
233
259
|
note = f"the copy here is empty: {empty}"
|
|
260
|
+
elif cloud_at:
|
|
261
|
+
state = "in_cloud"
|
|
262
|
+
note = (f"in the cloud, not downloaded: {os.path.basename(cloud_at)} — "
|
|
263
|
+
f"download it to measure or verify it")
|
|
234
264
|
elif empty:
|
|
235
265
|
state = "empty_copy"
|
|
236
266
|
note = (f"the bytes of {os.path.basename(empty)} are zeros: an incomplete copy "
|
|
@@ -243,6 +273,8 @@ def resolve(entry: Dict[str, Any], *, project_root: Optional[str] = None,
|
|
|
243
273
|
else "the graph does not say where the file is")
|
|
244
274
|
out = {"id": rid, "sha256": f"sha256:{hexd}" if hexd else "", "state": state,
|
|
245
275
|
"path": path or "", "positions": positions, "note": note}
|
|
276
|
+
if cloud_at and not path:
|
|
277
|
+
out["cloud_path"] = cloud_at
|
|
246
278
|
if changed:
|
|
247
279
|
out["changed"] = True
|
|
248
280
|
out["sha256_now"] = f"sha256:{now}"
|
|
@@ -322,7 +354,7 @@ def resolve_graph(graph: Any, **kwargs) -> List[Dict[str, Any]]:
|
|
|
322
354
|
if not states:
|
|
323
355
|
continue
|
|
324
356
|
rank = {s: i for i, s in enumerate(("missing", "empty_copy", "reference_only",
|
|
325
|
-
"on_node", "both", "on_disk"))}
|
|
357
|
+
"in_cloud", "on_node", "both", "on_disk"))}
|
|
326
358
|
worst = min(states, key=lambda s: rank.get(s, 0))
|
|
327
359
|
if all(s in ("on_disk", "both") for s in states):
|
|
328
360
|
worst = "both" if all(s == "both" for s in states) else "on_disk"
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"""Does a tileset fit a target? Its tiles measured one by one, from their
|
|
2
|
+
heads only (MICRO-ARCHIVE-ASSET-3, E.D. 1 Nov 2026).
|
|
3
|
+
|
|
4
|
+
E.D.: the tileset's row said «ok» for every target because «a tileset is its
|
|
5
|
+
own lowest level»; it is «ok» for a target only if its TILES respect the
|
|
6
|
+
target's band — texture and triangles per tile, read from the tileset.json or
|
|
7
|
+
the .3tz without downloading all of it.
|
|
8
|
+
|
|
9
|
+
A viewer streams a tileset tile by tile: what must fit the band per object is
|
|
10
|
+
one tile (the triangles of its glb, the side of its largest texture), not the
|
|
11
|
+
whole. Here each tile is read by its head: the b3dm / i3dm wrapper, the glb's
|
|
12
|
+
JSON chunk (its accessors say the counts, a Draco primitive's too) and the
|
|
13
|
+
first bytes of each image (its side) — never the geometry, never the pixels.
|
|
14
|
+
|
|
15
|
+
Pure: the caller gives ``read_at(path, offset, length) -> bytes`` (a range of
|
|
16
|
+
a file inside the tileset: a folder or a stored member of a .3tz) and the tree
|
|
17
|
+
(:func:`.detail.read_tileset`). Nothing is written.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import json
|
|
23
|
+
import struct
|
|
24
|
+
from typing import Any, Callable, Dict, Iterable, List, Optional
|
|
25
|
+
|
|
26
|
+
#: read_at(path inside the tileset, offset, length) -> the bytes (fewer at the end)
|
|
27
|
+
ReadAt = Callable[[str, int, int], bytes]
|
|
28
|
+
|
|
29
|
+
#: the bytes read of an image to know its side (a JPEG's SOF may follow EXIF)
|
|
30
|
+
IMAGE_HEAD = 65536
|
|
31
|
+
|
|
32
|
+
#: the tiles a model can carry (a .json is an external tileset, spliced)
|
|
33
|
+
TILE_EXT = (".b3dm", ".i3dm", ".glb", ".gltf")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def tile_head(read_at: ReadAt, path: str) -> Optional[Dict[str, Any]]:
|
|
37
|
+
"""Triangles and texture side of ONE tile from its head → ``{triangles,
|
|
38
|
+
texture_side, texture_px, images}``; None when it is not a glb tile (a
|
|
39
|
+
point cloud, a composite) or cannot be read."""
|
|
40
|
+
from .use_profiles import image_size
|
|
41
|
+
try:
|
|
42
|
+
head = read_at(path, 0, 32)
|
|
43
|
+
if len(head) < 12:
|
|
44
|
+
return None
|
|
45
|
+
off = 0
|
|
46
|
+
if head[:4] == b"b3dm":
|
|
47
|
+
_m, _v, _len, ftj, ftb, btj, btb = struct.unpack("<4sIIIIII", head[:28])
|
|
48
|
+
off = 28 + ftj + ftb + btj + btb
|
|
49
|
+
elif head[:4] == b"i3dm":
|
|
50
|
+
hdr = struct.unpack("<4sIIIIIII", head[:32])
|
|
51
|
+
if hdr[7] != 1: # a uri, not an embedded glb
|
|
52
|
+
return None
|
|
53
|
+
off = 32 + hdr[3] + hdr[4] + hdr[5] + hdr[6]
|
|
54
|
+
elif head[:4] != b"glTF":
|
|
55
|
+
return None
|
|
56
|
+
gh = read_at(path, off, 20)
|
|
57
|
+
if gh[:4] != b"glTF" or len(gh) < 20:
|
|
58
|
+
return None
|
|
59
|
+
jlen, jtyp = struct.unpack("<II", gh[12:20])
|
|
60
|
+
if jtyp != 0x4E4F534A:
|
|
61
|
+
return None
|
|
62
|
+
js = json.loads(read_at(path, off + 20, jlen).decode("utf-8"))
|
|
63
|
+
bin_at = off + 20 + jlen + 8 # the BIN chunk's data
|
|
64
|
+
except (ValueError, struct.error, OSError, UnicodeDecodeError):
|
|
65
|
+
return None
|
|
66
|
+
acc = js.get("accessors") or []
|
|
67
|
+
tris = 0
|
|
68
|
+
for mesh in js.get("meshes") or []:
|
|
69
|
+
for p in mesh.get("primitives") or []:
|
|
70
|
+
if p.get("mode", 4) != 4:
|
|
71
|
+
continue
|
|
72
|
+
pos = (p.get("attributes") or {}).get("POSITION")
|
|
73
|
+
nv = int(acc[pos]["count"]) if pos is not None and pos < len(acc) else 0
|
|
74
|
+
idx = p.get("indices")
|
|
75
|
+
tris += (int(acc[idx]["count"]) if idx is not None and idx < len(acc) else nv) // 3
|
|
76
|
+
side = px = 0
|
|
77
|
+
views = js.get("bufferViews") or []
|
|
78
|
+
for im in js.get("images") or []:
|
|
79
|
+
bv = im.get("bufferView")
|
|
80
|
+
if bv is None or bv >= len(views):
|
|
81
|
+
continue
|
|
82
|
+
v = views[bv]
|
|
83
|
+
try:
|
|
84
|
+
w, h, _f = image_size(read_at(path, bin_at + int(v.get("byteOffset") or 0),
|
|
85
|
+
min(int(v.get("byteLength") or 0), IMAGE_HEAD)))
|
|
86
|
+
except (OSError, struct.error):
|
|
87
|
+
w = h = 0
|
|
88
|
+
side = max(side, w, h)
|
|
89
|
+
px += w * h
|
|
90
|
+
return {"triangles": tris, "texture_side": side, "texture_px": px, "images": len(js.get("images") or [])}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def tiles_of(tree: Dict[str, Any]) -> List[str]:
|
|
94
|
+
"""The tiles of a tileset's tree (:func:`.detail.read_tileset`) that carry
|
|
95
|
+
a model, in the tree's order."""
|
|
96
|
+
return [n["uri"] for n in tree["nodes"].values()
|
|
97
|
+
if n.get("uri") and str(n["uri"]).lower().endswith(TILE_EXT)]
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def measure_tiles(tree: Dict[str, Any], read_at: ReadAt) -> Dict[str, Any]:
|
|
101
|
+
"""Every tile of a tileset read by its head → ``{tiles, read, per_tile:
|
|
102
|
+
[[triangles, texture_side], …], max_triangles, max_texture_side}``
|
|
103
|
+
(``per_tile`` in the order of :func:`tiles_of`; a tile unread is left
|
|
104
|
+
out and counted in ``tiles - read``)."""
|
|
105
|
+
per: List[List[int]] = []
|
|
106
|
+
names = tiles_of(tree)
|
|
107
|
+
for p in names:
|
|
108
|
+
h = tile_head(read_at, p)
|
|
109
|
+
if h is not None:
|
|
110
|
+
per.append([int(h["triangles"]), int(h["texture_side"])])
|
|
111
|
+
return {"tiles": len(names), "read": len(per), "per_tile": per,
|
|
112
|
+
"max_triangles": max((x[0] for x in per), default=0),
|
|
113
|
+
"max_texture_side": max((x[1] for x in per), default=0)}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def fit(stats: Optional[Dict[str, Any]], band: Dict[str, Any]) -> Dict[str, Any]:
|
|
117
|
+
"""Do the tiles fit a band per object? → ``{ok, known, tiles, read,
|
|
118
|
+
over_triangles, over_texture, max_triangles, max_texture_side, why}``.
|
|
119
|
+
Unknown (``stats`` None, nothing read) is not ok: it is not known."""
|
|
120
|
+
obj, side = band.get("object_triangles"), band.get("object_texture_side")
|
|
121
|
+
if not stats or not stats.get("read"):
|
|
122
|
+
return {"ok": False, "known": False, "tiles": (stats or {}).get("tiles", 0), "read": 0,
|
|
123
|
+
"over_triangles": 0, "over_texture": 0, "max_triangles": None, "max_texture_side": None,
|
|
124
|
+
"why": "le tile non sono state lette: non si sa se rispettano la fascia"}
|
|
125
|
+
per: Iterable[List[int]] = stats.get("per_tile") or []
|
|
126
|
+
ot = sum(1 for t, _s in per if obj and t > obj)
|
|
127
|
+
ox = sum(1 for _t, s in per if side and s > side)
|
|
128
|
+
mt, ms = stats.get("max_triangles") or 0, stats.get("max_texture_side") or 0
|
|
129
|
+
n, r = int(stats.get("tiles") or 0), int(stats.get("read") or 0)
|
|
130
|
+
if not ot and not ox:
|
|
131
|
+
why = (f"le {r} tile rispettano la fascia (al più {mt:,} triangoli e {ms} px per tile)"
|
|
132
|
+
.replace(",", "."))
|
|
133
|
+
if r < n:
|
|
134
|
+
why += f"; {n - r} non lette"
|
|
135
|
+
return {"ok": True, "known": True, "tiles": n, "read": r, "over_triangles": 0, "over_texture": 0,
|
|
136
|
+
"max_triangles": mt, "max_texture_side": ms, "why": why}
|
|
137
|
+
parts = []
|
|
138
|
+
if ot:
|
|
139
|
+
parts.append(f"{ot} tile oltre {obj:,} triangoli (al più {mt:,})".replace(",", "."))
|
|
140
|
+
if ox:
|
|
141
|
+
parts.append(f"{ox} tile con texture oltre {side} px (al più {ms})")
|
|
142
|
+
return {"ok": False, "known": True, "tiles": n, "read": r, "over_triangles": ot, "over_texture": ox,
|
|
143
|
+
"max_triangles": mt, "max_texture_side": ms,
|
|
144
|
+
"why": f"su {r} tile: " + "; ".join(parts)}
|