s3dgraphy 1.6.0.dev83__tar.gz → 1.6.0.dev85__tar.gz

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