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