s3dgraphy 1.6.0.dev84__tar.gz → 1.6.0.dev86__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.dev84/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev86}/PKG-INFO +1 -1
  2. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/pyproject.toml +1 -1
  3. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/__init__.py +1 -1
  4. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/asset_list.py +134 -6
  5. s3dgraphy-1.6.0.dev86/src/s3dgraphy/resources/tileset_fit.py +144 -0
  6. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
  7. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy.egg-info/SOURCES.txt +2 -0
  8. s3dgraphy-1.6.0.dev86/tests/test_tileset_fit.py +142 -0
  9. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/LICENSE +0 -0
  10. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/MANIFEST.in +0 -0
  11. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/README.md +0 -0
  12. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/setup.cfg +0 -0
  13. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
  14. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
  15. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
  16. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
  17. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/alternative_cases.json +0 -0
  18. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
  19. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/em.ttl +0 -0
  20. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  21. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  22. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
  23. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
  24. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  25. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
  26. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
  27. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
  28. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  29. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
  30. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  31. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  32. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
  33. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
  34. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
  35. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
  36. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
  37. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
  38. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
  39. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
  40. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  41. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  42. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
  43. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
  44. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
  45. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  46. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
  47. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  48. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  49. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
  50. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  51. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
  52. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  53. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
  54. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  55. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
  56. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
  57. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  58. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
  59. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
  60. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
  61. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
  62. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
  63. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/bozze/site.svg +0 -0
  64. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  65. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
  66. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
  67. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  68. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
  69. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  70. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
  71. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
  72. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
  73. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
  74. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
  75. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
  76. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
  77. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
  78. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
  79. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
  80. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
  81. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
  82. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
  83. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
  84. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
  85. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
  86. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
  87. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
  88. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
  89. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
  90. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
  91. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
  92. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
  93. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
  94. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
  95. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
  96. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
  97. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
  98. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
  99. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
  100. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  101. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
  102. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
  103. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
  104. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
  105. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
  106. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/hdto/graph.svg +0 -0
  107. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/hdto/hdt.svg +0 -0
  108. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/hdto/heritage_entity.svg +0 -0
  109. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/hdto/project.svg +0 -0
  110. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/hdto/study.svg +0 -0
  111. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
  112. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
  113. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
  114. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
  115. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
  116. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
  117. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  118. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
  119. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
  120. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
  121. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
  122. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
  123. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
  124. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
  125. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
  126. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  127. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
  128. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  129. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  130. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
  131. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
  132. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
  133. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
  134. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
  135. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
  136. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
  137. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  138. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  139. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  140. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  141. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  142. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  143. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  144. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  145. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  146. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  147. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  148. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  149. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  150. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  151. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  152. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  153. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
  154. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/__main__.py +0 -0
  155. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/acquisition/__init__.py +0 -0
  156. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/acquisition/acquire.py +0 -0
  157. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/acquisition/descriptor.py +0 -0
  158. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/acquisition/mapping.py +0 -0
  159. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/ai_validation.py +0 -0
  160. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/annotation/__init__.py +0 -0
  161. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
  162. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/annotation/paradata.py +0 -0
  163. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/annotation/reading.py +0 -0
  164. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/api.py +0 -0
  165. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/authorities/__init__.py +0 -0
  166. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/authorities/resolver.py +0 -0
  167. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
  168. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
  169. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
  170. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
  171. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
  172. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
  173. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/classification.py +0 -0
  174. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/container.py +0 -0
  175. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/contract/__init__.py +0 -0
  176. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/contract/connector.py +0 -0
  177. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/contract/consumer.py +0 -0
  178. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/contract/core.py +0 -0
  179. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/contract/reference.py +0 -0
  180. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/crdt.py +0 -0
  181. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  182. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/datamodel.py +0 -0
  183. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/diagnostics.py +0 -0
  184. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/dissemination.py +0 -0
  185. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/dtc/__init__.py +0 -0
  186. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/dtc/capture.py +0 -0
  187. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/dtc/corpus.py +0 -0
  188. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/dtc/devices.py +0 -0
  189. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/dtc/ingest.py +0 -0
  190. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
  191. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/dtc/residency.py +0 -0
  192. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/edges/__init__.py +0 -0
  193. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/edges/connection_resolver.py +0 -0
  194. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/edges/connections_loader.py +0 -0
  195. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/edges/edge.py +0 -0
  196. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/editorial.py +0 -0
  197. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/__init__.py +0 -0
  198. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
  199. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
  200. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  201. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
  202. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  203. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  204. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
  205. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  206. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  207. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  208. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  209. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  210. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  211. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  212. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  213. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  214. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  215. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/html_exporter.py +0 -0
  216. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
  217. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/json_exporter.py +0 -0
  218. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
  219. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
  220. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  221. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/__init__.py +0 -0
  222. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/aton.py +0 -0
  223. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/frame.py +0 -0
  224. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/gltf.py +0 -0
  225. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/migrate.py +0 -0
  226. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/proxy.py +0 -0
  227. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/reading_glb.py +0 -0
  228. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/registration.py +0 -0
  229. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/store_backed.py +0 -0
  230. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/transform.py +0 -0
  231. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/geometry/wkt.py +0 -0
  232. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/gis/__init__.py +0 -0
  233. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/gis/crs.py +0 -0
  234. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/gis/layer.py +0 -0
  235. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/gis/shapefile.py +0 -0
  236. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/gis/site.py +0 -0
  237. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/graph.py +0 -0
  238. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/graph_removal.py +0 -0
  239. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/hdto.py +0 -0
  240. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/iiif.py +0 -0
  241. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/__init__.py +0 -0
  242. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/base_importer.py +0 -0
  243. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/csv_importer.py +0 -0
  244. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/emjson_importer.py +0 -0
  245. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
  246. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/import_graphml.py +0 -0
  247. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
  248. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/metashape_project.py +0 -0
  249. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
  250. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/qualia_importer.py +0 -0
  251. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/rdf_importer.py +0 -0
  252. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/sheet_header.py +0 -0
  253. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/source_text.py +0 -0
  254. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
  255. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
  256. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/importer/xml_importer.py +0 -0
  257. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/indices.py +0 -0
  258. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/labels.py +0 -0
  259. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/language.py +0 -0
  260. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/links.py +0 -0
  261. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/__init__.py +0 -0
  262. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/authoring.py +0 -0
  263. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
  264. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
  265. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
  266. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
  267. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
  268. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/registry.py +0 -0
  269. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
  270. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
  271. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
  272. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
  273. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/merge/__init__.py +0 -0
  274. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/merge/graph_merger.py +0 -0
  275. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/multigraph/__init__.py +0 -0
  276. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  277. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/narrative/__init__.py +0 -0
  278. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/narrative/bake.py +0 -0
  279. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/narrative/generation.py +0 -0
  280. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/narrative/query.py +0 -0
  281. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/narrative/registry.py +0 -0
  282. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/narrative/site_story.py +0 -0
  283. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/__init__.py +0 -0
  284. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
  285. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/author_node.py +0 -0
  286. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/base_node.py +0 -0
  287. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  288. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/document_node.py +0 -0
  289. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
  290. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
  291. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/dtc_node.py +0 -0
  292. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
  293. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  294. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  295. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  296. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
  297. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
  298. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/graph_node.py +0 -0
  299. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/group_node.py +0 -0
  300. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/hdt_node.py +0 -0
  301. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
  302. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/license_node.py +0 -0
  303. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/narrative_node.py +0 -0
  304. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  305. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/periodization_node.py +0 -0
  306. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/project_node.py +0 -0
  307. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/property_node.py +0 -0
  308. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/representation_node.py +0 -0
  309. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
  310. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/resource_node.py +0 -0
  311. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  312. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  313. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/study_node.py +0 -0
  314. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/nodes/translation_node.py +0 -0
  315. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/ownership.py +0 -0
  316. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/paradata_view.py +0 -0
  317. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/periodization.py +0 -0
  318. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
  319. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/photogrammetry/delta.py +0 -0
  320. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/project_tree.py +0 -0
  321. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/property_source.py +0 -0
  322. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/publication.py +0 -0
  323. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/rapporti.py +0 -0
  324. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resolvers/__init__.py +0 -0
  325. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  326. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  327. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/__init__.py +0 -0
  328. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/addresses.py +0 -0
  329. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/alignment.py +0 -0
  330. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/alternatives.py +0 -0
  331. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/blend_folder.py +0 -0
  332. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/blend_room.py +0 -0
  333. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/consolidate.py +0 -0
  334. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/detail.py +0 -0
  335. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/files.py +0 -0
  336. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/fs_backend.py +0 -0
  337. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/graph_compose.py +0 -0
  338. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/locate.py +0 -0
  339. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/moved.py +0 -0
  340. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/object_store.py +0 -0
  341. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/resolver.py +0 -0
  342. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/s3_backend.py +0 -0
  343. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/storage_rows.py +0 -0
  344. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/tiles3tz.py +0 -0
  345. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/use_profiles.py +0 -0
  346. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/resources/versions.py +0 -0
  347. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/rights.py +0 -0
  348. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/room_import/__init__.py +0 -0
  349. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/room_import/access.py +0 -0
  350. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/room_import/engine.py +0 -0
  351. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/room_import/errors.py +0 -0
  352. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/room_import/inventory.py +0 -0
  353. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/room_import/node.py +0 -0
  354. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/room_import/pack.py +0 -0
  355. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/room_import/trust.py +0 -0
  356. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/shelf/__init__.py +0 -0
  357. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/shelf/core.py +0 -0
  358. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/spatiotemporal.py +0 -0
  359. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/stamp/__init__.py +0 -0
  360. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/stamp/absorb.py +0 -0
  361. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/stamp/emit.py +0 -0
  362. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/stamp/hints.py +0 -0
  363. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/stamp/identity.py +0 -0
  364. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/study.py +0 -0
  365. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/__init__.py +0 -0
  366. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/_db_handle.py +0 -0
  367. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
  368. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/_workspace.py +0 -0
  369. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
  370. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/edge_registry.py +0 -0
  371. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
  372. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/graph_projector.py +0 -0
  373. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/graphml_writer.py +0 -0
  374. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/group_projector.py +0 -0
  375. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/group_store.py +0 -0
  376. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/ingest_result.py +0 -0
  377. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/paradata_store.py +0 -0
  378. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
  379. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/rapporti.py +0 -0
  380. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/uuid7.py +0 -0
  381. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
  382. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/vocab_types.py +0 -0
  383. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/yed_classifier.py +0 -0
  384. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/yed_detector.py +0 -0
  385. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
  386. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
  387. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
  388. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
  389. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  390. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  391. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/temporal/__init__.py +0 -0
  392. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/temporal/inference_engine.py +0 -0
  393. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/temporal/relative_chronology.py +0 -0
  394. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/__init__.py +0 -0
  395. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/consumer_drift.py +0 -0
  396. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
  397. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/deliverable_report.py +0 -0
  398. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
  399. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
  400. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/node_finder.py +0 -0
  401. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/ontology_html.py +0 -0
  402. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
  403. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/tools/wheel_drift.py +0 -0
  404. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/transforms/__init__.py +0 -0
  405. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  406. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/transforms/compact.py +0 -0
  407. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  408. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/translation.py +0 -0
  409. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/utils/__init__.py +0 -0
  410. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/utils/utils.py +0 -0
  411. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/utils/visual_layout.py +0 -0
  412. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy/zero_hour.py +0 -0
  413. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  414. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy.egg-info/requires.txt +0 -0
  415. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/src/s3dgraphy.egg-info/top_level.txt +0 -0
  416. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_acquisition.py +0 -0
  417. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_acquisition_fs.py +0 -0
  418. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_add_resource.py +0 -0
  419. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_ai_validation_nodes.py +0 -0
  420. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_alternative_labels.py +0 -0
  421. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_alternative_sets.py +0 -0
  422. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_alternatives_hat.py +0 -0
  423. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_anastylosis_document_type.py +0 -0
  424. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_api_surface.py +0 -0
  425. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_asset_dtc_protocol.py +0 -0
  426. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_asset_list.py +0 -0
  427. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_asset_versions.py +0 -0
  428. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_aton_shapes.py +0 -0
  429. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_attach_only.py +0 -0
  430. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_authority_projection.py +0 -0
  431. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_authority_resolver.py +0 -0
  432. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_blend_folder.py +0 -0
  433. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_blend_locator.py +0 -0
  434. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_blend_room.py +0 -0
  435. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_bucket_alignment.py +0 -0
  436. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_canonical_document_rename.py +0 -0
  437. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_canvas_metadata_import.py +0 -0
  438. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_capture_acquisition.py +0 -0
  439. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_capture_rdf_class.py +0 -0
  440. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_chronology_on_request.py +0 -0
  441. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_cloud_placeholders.py +0 -0
  442. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_coating_unit.py +0 -0
  443. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_composite_node_name.py +0 -0
  444. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_connection_resolver.py +0 -0
  445. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_consolida_2.py +0 -0
  446. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_consolidate_compose.py +0 -0
  447. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_consumer_drift.py +0 -0
  448. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_container.py +0 -0
  449. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_container_layouts.py +0 -0
  450. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_containment_tpq.py +0 -0
  451. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_contemporaneity.py +0 -0
  452. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_contract.py +0 -0
  453. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_contract_consumer.py +0 -0
  454. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_convert_command.py +0 -0
  455. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_crdt.py +0 -0
  456. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_cycle_message_is_cheap.py +0 -0
  457. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_datamodel_fingerprint.py +0 -0
  458. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_datamodel_i18n.py +0 -0
  459. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_detail.py +0 -0
  460. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_deterministic_ids.py +0 -0
  461. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dev29_em_sourcelist.py +0 -0
  462. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dev29_file_set_stamp.py +0 -0
  463. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dev29_graphml_without_a_database.py +0 -0
  464. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dev29_image_set_texturing.py +0 -0
  465. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dev29_not_georeferenced.py +0 -0
  466. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dev29_one_act_n_outputs.py +0 -0
  467. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dev29_ttl_round_trip.py +0 -0
  468. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dev30_decisions.py +0 -0
  469. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_devices.py +0 -0
  470. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dissemination_tombstones.py +0 -0
  471. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dove_sta_il_testo.py +0 -0
  472. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dtc_corpus.py +0 -0
  473. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dtc_ingest.py +0 -0
  474. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dtc_neighbourhood.py +0 -0
  475. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dtc_projection.py +0 -0
  476. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_dtc_residency.py +0 -0
  477. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_edge_outside_graph.py +0 -0
  478. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_edge_ui_phrases.py +0 -0
  479. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_editorial.py +0 -0
  480. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
  481. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_emjson_conformance.py +0 -0
  482. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_emjson_no_drawing_keys.py +0 -0
  483. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_emjson_roundtrip.py +0 -0
  484. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_emjson_schema_version.py +0 -0
  485. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_end_of_unit.py +0 -0
  486. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_epoch_instances.py +0 -0
  487. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
  488. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_epoch_undated_import.py +0 -0
  489. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_explicit_node_type_marker.py +0 -0
  490. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_extracted_from_unit.py +0 -0
  491. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_file_frame.py +0 -0
  492. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_filtered_import.py +0 -0
  493. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_fmpxml_importer.py +0 -0
  494. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_fs_backend.py +0 -0
  495. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_functional_units.py +0 -0
  496. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_georeference_scene.py +0 -0
  497. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_gis_site.py +0 -0
  498. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_gltf_stitch.py +0 -0
  499. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_glyph_paths.py +0 -0
  500. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_graph_header_code.py +0 -0
  501. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_graph_helpers_indexed.py +0 -0
  502. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_graph_indices_alive.py +0 -0
  503. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_graph_indices_edges.py +0 -0
  504. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_graph_removal.py +0 -0
  505. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_graph_scope_migration.py +0 -0
  506. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_hdto_glyphs.py +0 -0
  507. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_hdto_projection.py +0 -0
  508. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_hdto_study.py +0 -0
  509. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_header_key_aliases.py +0 -0
  510. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_i_generi_dei_passi.py +0 -0
  511. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_iiif.py +0 -0
  512. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_il_modo_d_accesso.py +0 -0
  513. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_il_modo_dal_relay.py +0 -0
  514. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_il_proprietario_si_legge.py +0 -0
  515. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_il_riallineamento.py +0 -0
  516. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_import_without_residues.py +0 -0
  517. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_importer_edge_hygiene.py +0 -0
  518. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_ipynb_exporter.py +0 -0
  519. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_iri_extendedmatrix.py +0 -0
  520. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_issue27_small_points.py +0 -0
  521. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_la_lingua_alla_nascita.py +0 -0
  522. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_la_lingua_dei_dati.py +0 -0
  523. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_la_lingua_nell_op.py +0 -0
  524. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_la_riga_d_intestazione.py +0 -0
  525. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_lab_orizzonti.py +0 -0
  526. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_latex_exporter.py +0 -0
  527. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_le_traduzioni.py +0 -0
  528. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_lod_levels.py +0 -0
  529. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_lossless_roundtrip.py +0 -0
  530. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_mapping_authoring.py +0 -0
  531. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_mapping_csv_and_relations.py +0 -0
  532. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_masonry_unit.py +0 -0
  533. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_material_color.py +0 -0
  534. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_merge_conflicts.py +0 -0
  535. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_metashape_project.py +0 -0
  536. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_migrate_legacy_proxy.py +0 -0
  537. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_authorship.py +0 -0
  538. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_bake_docx.py +0 -0
  539. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_figures.py +0 -0
  540. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_generation.py +0 -0
  541. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_mentions.py +0 -0
  542. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_node.py +0 -0
  543. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_query.py +0 -0
  544. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_scaffolder.py +0 -0
  545. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_site_place.py +0 -0
  546. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_narrative_unvalidated_export.py +0 -0
  547. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_node_datamodel_registry.py +0 -0
  548. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_node_finder.py +0 -0
  549. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_node_type_map_integrity.py +0 -0
  550. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_one_resolver.py +0 -0
  551. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_one_spelling_writers.py +0 -0
  552. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_ontology_html.py +0 -0
  553. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_op_vocabulary.py +0 -0
  554. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_part_twins.py +0 -0
  555. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_pg_importer.py +0 -0
  556. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_photogrammetry_delta.py +0 -0
  557. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_physical_relation_spellings.py +0 -0
  558. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_piu_indirizzi.py +0 -0
  559. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_promote_keeps_proxy_type.py +0 -0
  560. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_promotion.py +0 -0
  561. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_property_as_source.py +0 -0
  562. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_property_owners.py +0 -0
  563. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_proxy_resource.py +0 -0
  564. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_proxy_retype.py +0 -0
  565. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_psx_locator.py +0 -0
  566. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_pyarchinit_tier2.py +0 -0
  567. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_qualia_dai_d7_d8.py +0 -0
  568. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_rdf_embedding.py +0 -0
  569. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_rdf_reverse_edges.py +0 -0
  570. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_rdf_roundtrip.py +0 -0
  571. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_rdf_sub_epoch_direction.py +0 -0
  572. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_reading_coords.py +0 -0
  573. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_reading_glb.py +0 -0
  574. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_reading_migration.py +0 -0
  575. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_reading_place.py +0 -0
  576. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_reading_rdf.py +0 -0
  577. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_recompute_warnings.py +0 -0
  578. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_registration.py +0 -0
  579. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_release.py +0 -0
  580. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_reproject.py +0 -0
  581. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_resource_file_node.py +0 -0
  582. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_resource_files_implicit.py +0 -0
  583. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_resource_layer.py +0 -0
  584. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_resource_representations.py +0 -0
  585. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_resource_revision.py +0 -0
  586. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_resource_tier.py +0 -0
  587. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_reverse_edges.py +0 -0
  588. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_rm_container_node_group.py +0 -0
  589. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_room_import.py +0 -0
  590. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_room_import_access.py +0 -0
  591. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_room_import_inventory.py +0 -0
  592. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_room_import_trust.py +0 -0
  593. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_s3_backend.py +0 -0
  594. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_semantic_purity.py +0 -0
  595. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_series_vsf.py +0 -0
  596. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_shelf.py +0 -0
  597. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_shelf_facets.py +0 -0
  598. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_shelf_hatting.py +0 -0
  599. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_shelf_role_uri_table.py +0 -0
  600. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_shipped_mappings.py +0 -0
  601. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_source_list_mapping.py +0 -0
  602. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_source_text.py +0 -0
  603. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_spatiotemporal_entities.py +0 -0
  604. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_special_find_definitions.py +0 -0
  605. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_stable_study_code.py +0 -0
  606. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_stamp.py +0 -0
  607. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_stamp_hints.py +0 -0
  608. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_stamp_title_description.py +0 -0
  609. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_storage_rows.py +0 -0
  610. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_store_backed_geometry.py +0 -0
  611. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_stratiminer_api.py +0 -0
  612. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_study_metadata.py +0 -0
  613. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_threed_instances.py +0 -0
  614. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_tileset_resource.py +0 -0
  615. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_transform_form.py +0 -0
  616. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_ttl_roundtrip.py +0 -0
  617. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_unit_definition.py +0 -0
  618. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_use_profiles.py +0 -0
  619. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_valore_proprieta_doppio.py +0 -0
  620. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_verifica_provenance.py +0 -0
  621. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_version_for.py +0 -0
  622. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_visual_assets.py +0 -0
  623. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_wheel_drift.py +0 -0
  624. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
  625. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_xlsx_importer_graph_init.py +0 -0
  626. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/tests/test_xlsx_source_column.py +0 -0
  627. {s3dgraphy-1.6.0.dev84 → s3dgraphy-1.6.0.dev86}/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.dev84
3
+ Version: 1.6.0.dev86
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.dev84"
7
+ version = "1.6.0.dev86"
8
8
  description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,4 +1,4 @@
1
- __version__ = "1.6.0.dev84"
1
+ __version__ = "1.6.0.dev86"
2
2
  __datamodel_version__ = "1.5.5" # s3Dgraphy connections datamodel version
3
3
 
4
4
  # s3Dgraphy/__init__.py
@@ -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
 
@@ -147,7 +153,7 @@ def _state_of(graph, entry: Dict[str, Any], states: Dict[str, str]) -> str:
147
153
 
148
154
 
149
155
  def _version(graph, entry: Dict[str, Any], summary: Dict[str, Any], *, states, measure,
150
- changed) -> Dict[str, Any]:
156
+ changed, tiles=None) -> Dict[str, Any]:
151
157
  from .graph_compose import level_say, made_by, made_by_say
152
158
  raw = None
153
159
  if measure is not None and not summary.get("tileset"):
@@ -159,10 +165,19 @@ def _version(graph, entry: Dict[str, Any], summary: Dict[str, Any], *, states, m
159
165
  ids = [entry["id"]] + [f["id"] for f in C._files(graph, entry) if f.get("id") != entry["id"]]
160
166
  now = next((changed[i] for i in ids if changed and i in changed), "")
161
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
162
176
  return {"id": entry["id"], "name": summary.get("name") or entry.get("name") or "",
163
177
  "asset_id": entry.get("asset_id"), "master": bool(entry.get("master")),
164
178
  "level": summary.get("level") or "", "lod_level": summary.get("lod_level") or "",
165
- "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 []),
166
181
  "url": summary.get("url") or "", "checksum": summary.get("checksum") or "",
167
182
  "stamped": bool(summary.get("checksum")),
168
183
  "size_bytes": summary.get("size_bytes"), "triangles": summary.get("triangles"),
@@ -183,7 +198,9 @@ def _version(graph, entry: Dict[str, Any], summary: Dict[str, Any], *, states, m
183
198
  "in_cloud": state == "in_cloud",
184
199
  "made": made, "made_say": made_by_say(made),
185
200
  "modified_after_stamp": bool(now) and not entry.get("master"), "sha256_now": now or "",
186
- "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 {})}
187
204
 
188
205
 
189
206
  # ── a target's state and proposal ───────────────────────────────────────────
@@ -318,21 +335,125 @@ def _targets(graph, row: Dict[str, Any], cand: Dict[str, Any], versions: List[Di
318
335
  st_a, why_a = "ok", "master timbrato e presente"
319
336
  out["arch"] = _target_cell("arch", state=st_a, loads=m["id"] if m else None, why=why_a,
320
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 ""))
321
380
  return out
322
381
 
323
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
+
324
439
  # ── the list ─────────────────────────────────────────────────────────────────
325
440
 
326
441
  def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
327
442
  changed: Optional[Dict[str, str]] = None, in_room: bool = False,
328
- 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]:
329
445
  """The assets of the study (``models``, default the published ones —
330
446
  representation models and the containers with a whole of their own),
331
447
  each with its versions (master first), their textures, its state and
332
448
  proposal per target (:data:`TARGETS`), the groups it belongs to
333
449
  (container, branch, epochs, family); the textures of the whole study once;
334
450
  the totals per target against the bands. → ``{targets, tools, assets,
335
- 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`)."""
336
457
  from .alternatives import containers_of
337
458
  from .graph_compose import epochs_of
338
459
  states = dict(states or {})
@@ -349,7 +470,7 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
349
470
  versions = []
350
471
  for e in entries:
351
472
  s = C._summary(graph, e, measure)
352
- 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)
353
474
  cache[e["id"]] = v
354
475
  versions.append(v)
355
476
  if not v["master"] and not v["tileset"]:
@@ -393,6 +514,10 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
393
514
  "level": v["level"] or ("master" if v["master"] else "")})
394
515
  if t["name"] not in ti["names"]:
395
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)
396
521
  textures = sorted(tex_index.values(), key=lambda t: (-len(t["uses"]), -t["gpu_bytes"], t["name"]))
397
522
  for t in textures:
398
523
  t["count"] = len(t["uses"])
@@ -404,6 +529,7 @@ def asset_list(graph, *, states: Optional[Dict[str, str]] = None, measure=None,
404
529
  "textures": len(textures), "shared_textures": sum(1 for t in textures if t["count"] > 1),
405
530
  "measured": n_meas, "estimated": n_est,
406
531
  "in_cloud": sum(1 for a in assets for v in a["versions"] if v["in_cloud"]),
532
+ "covered_by_tileset": covered,
407
533
  "by_target": {k: {s: sum(1 for a in assets if a["targets"][k]["state"] == s) for s in STATES}
408
534
  for k in TARGETS}}
409
535
  say = (f"{counts['assets']} asset ({counts['rms']} modelli, {counts['containers']} contenitori), "
@@ -432,6 +558,8 @@ def scene_totals(assets: Sequence[Dict[str, Any]], target: str) -> Dict[str, Any
432
558
  streamed = estimated = 0
433
559
  for a in assets:
434
560
  cell = a["targets"].get(target) or {}
561
+ if cell.get("covered_by"):
562
+ continue
435
563
  v = next((x for x in a["versions"] if x["id"] == cell.get("loads")), None)
436
564
  if v is None:
437
565
  continue
@@ -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)}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: s3dgraphy
3
- Version: 1.6.0.dev84
3
+ Version: 1.6.0.dev86
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>
@@ -346,6 +346,7 @@ src/s3dgraphy/resources/resolver.py
346
346
  src/s3dgraphy/resources/s3_backend.py
347
347
  src/s3dgraphy/resources/storage_rows.py
348
348
  src/s3dgraphy/resources/tiles3tz.py
349
+ src/s3dgraphy/resources/tileset_fit.py
349
350
  src/s3dgraphy/resources/use_profiles.py
350
351
  src/s3dgraphy/resources/versions.py
351
352
  src/s3dgraphy/room_import/__init__.py
@@ -607,6 +608,7 @@ tests/test_store_backed_geometry.py
607
608
  tests/test_stratiminer_api.py
608
609
  tests/test_study_metadata.py
609
610
  tests/test_threed_instances.py
611
+ tests/test_tileset_fit.py
610
612
  tests/test_tileset_resource.py
611
613
  tests/test_transform_form.py
612
614
  tests/test_ttl_roundtrip.py
@@ -0,0 +1,142 @@
1
+ """MICRO-ARCHIVE-ASSET-3 (E.D. 1 Nov 2026) · a tileset is «ok» for a target
2
+ only if its TILES fit the target's band (triangles and texture side per tile,
3
+ read from their heads, never the geometry); then it covers its container's
4
+ meshes — «coperte dal tileset di <contenitore>», no proposal, out of the
5
+ count — unless they are wanted one by one (different epochs, a narrative that
6
+ shows one alone). Its row says «tileset · in streaming»."""
7
+
8
+ import json
9
+ import struct
10
+
11
+ from s3dgraphy.nodes.group_node import RepresentationModelNodeGroup
12
+ from s3dgraphy.resources import asset_list as AL
13
+ from s3dgraphy.resources import detail as D
14
+ from s3dgraphy.resources import tileset_fit as F
15
+
16
+ from tests.test_consolida_2 import _model, _png, _tileset_study
17
+
18
+
19
+ def _glb(tris, sides):
20
+ """A glb with ``tris`` triangles (indices only: the accessors say the
21
+ count) and one PNG per side, in its BIN chunk."""
22
+ imgs = [_png(s, b"x") for s in sides]
23
+ views, binc = [], b""
24
+ for im in imgs:
25
+ views.append({"buffer": 0, "byteOffset": len(binc), "byteLength": len(im)})
26
+ binc += im + b"\0" * (-len(im) % 4)
27
+ js = {"asset": {"version": "2.0"}, "accessors": [{"count": 3, "type": "VEC3", "componentType": 5126},
28
+ {"count": tris * 3, "type": "SCALAR", "componentType": 5125}],
29
+ "meshes": [{"primitives": [{"attributes": {"POSITION": 0}, "indices": 1}]}],
30
+ "bufferViews": views, "images": [{"bufferView": i, "mimeType": "image/png"} for i in range(len(imgs))],
31
+ "buffers": [{"byteLength": len(binc)}]}
32
+ j = json.dumps(js).encode()
33
+ j += b" " * (-len(j) % 4)
34
+ body = struct.pack("<II", len(j), 0x4E4F534A) + j + struct.pack("<II", len(binc), 0x004E4942) + binc
35
+ return b"glTF" + struct.pack("<II", 2, 12 + len(body)) + body
36
+
37
+
38
+ def _b3dm(glb):
39
+ ft = b'{"BATCH_LENGTH":0} '
40
+ return b"b3dm" + struct.pack("<IIIIII", 1, 28 + len(ft) + len(glb), len(ft), 0, 0, 0) + ft + glb
41
+
42
+
43
+ def _tileset(tmp_path, tiles):
44
+ root = {"asset": {"version": "1.0"}, "geometricError": 10, "root": {
45
+ "boundingVolume": {"box": [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1]}, "geometricError": 5, "refine": "REPLACE",
46
+ "children": [{"boundingVolume": {"box": [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1]}, "geometricError": 0,
47
+ "content": {"uri": f"Data/t{i}.b3dm"}} for i in range(len(tiles))]}}
48
+ (tmp_path / "Data").mkdir()
49
+ (tmp_path / "tileset.json").write_text(json.dumps(root))
50
+ reads = []
51
+ for i, (tris, side) in enumerate(tiles):
52
+ (tmp_path / "Data" / f"t{i}.b3dm").write_bytes(_b3dm(_glb(tris, [side])))
53
+
54
+ def read_at(p, off, n):
55
+ reads.append(n)
56
+ with open(tmp_path / p, "rb") as fh:
57
+ fh.seek(off)
58
+ return fh.read(n)
59
+ lj, _sz, _rb = D.folder_loader(str(tmp_path))
60
+ return D.read_tileset(lj), read_at, reads
61
+
62
+
63
+ def test_the_tiles_are_read_by_their_heads(tmp_path):
64
+ tree, read_at, reads = _tileset(tmp_path, [(9000, 512), (12000, 768), (100, 256)])
65
+ st = F.measure_tiles(tree, read_at)
66
+ assert (st["tiles"], st["read"], st["max_triangles"], st["max_texture_side"]) == (3, 3, 12000, 768)
67
+ assert sorted(map(tuple, st["per_tile"])) == [(100, 256), (9000, 512), (12000, 768)]
68
+ # never the geometry: the reads are the heads, the JSON and the images' first bytes
69
+ assert max(reads) <= F.IMAGE_HEAD
70
+ mob = F.fit(st, AL.bands("mobile"))
71
+ assert not mob["ok"] and mob["known"] and (mob["over_triangles"], mob["over_texture"]) == (1, 1)
72
+ assert "1 tile oltre 10.000 triangoli" in mob["why"]
73
+ web = F.fit(st, AL.bands("web"))
74
+ assert web["ok"] and "rispettano la fascia" in web["why"]
75
+ # not read is not ok: not known
76
+ assert F.fit(None, AL.bands("web")) == {**F.fit(None, AL.bands("web")), "ok": False, "known": False}
77
+
78
+
79
+ def _study_with_members():
80
+ g, t = _tileset_study()
81
+ for rm in ("rm_rb1", "rm_rb2"):
82
+ g.add_edge(f"{rm}_in", rm, "grp", "is_in_representation_model_group")
83
+ return g, t
84
+
85
+
86
+ def test_a_tileset_that_fits_covers_its_meshes_and_says_it_streams():
87
+ g, t = _study_with_members()
88
+ st = {"tiles": 4, "read": 4, "per_tile": [[9000, 512]] * 4, "max_triangles": 9000, "max_texture_side": 512}
89
+ out = AL.asset_list(g, tiles=lambda e: st)
90
+ a = {x["name"]: x for x in out["assets"]}
91
+ c = a["Survey2015"]
92
+ tv = next(v for v in c["versions"] if v["tileset"])
93
+ assert tv["level_say"] == "tileset · in streaming" and tv["tiles"]["tiles"] == 4 and "_tile_stats" not in tv
94
+ assert all(c["targets"][k]["state"] == "ok" for k in ("mobile", "web", "desk"))
95
+ for m in ("rm_rb1", "rm_rb2"):
96
+ cell = a[m]["targets"]["mobile"]
97
+ assert cell["state"] == "na" and cell["covered_by"]["name"] == "Survey2015"
98
+ assert cell["why"] == "coperta dal tileset di Survey2015" and cell["proposal"]["tool"] == "keep"
99
+ assert out["counts"]["covered_by_tileset"] == {"mobile": 2, "web": 2, "desk": 2}
100
+ # out of the count: the scene is the tileset (streamed) only
101
+ assert out["totals"]["web"]["triangles"] == 0 and out["totals"]["web"]["streamed"] == 1
102
+
103
+
104
+ def test_a_tileset_over_the_band_or_unread_does_not_cover():
105
+ g, t = _study_with_members()
106
+ big = {"tiles": 2, "read": 2, "per_tile": [[9000, 1024], [9000, 512]], "max_triangles": 9000, "max_texture_side": 1024}
107
+ out = AL.asset_list(g, tiles=lambda e: big)
108
+ a = {x["name"]: x for x in out["assets"]}
109
+ mob = a["Survey2015"]["targets"]["mobile"]
110
+ assert mob["state"] == "todo" and mob["proposal"]["tool"] == "tileset" and mob["proposal"]["texture"] == 512
111
+ assert a["Survey2015"]["targets"]["web"]["state"] == "ok"
112
+ assert not a["rm_rb1"]["targets"]["mobile"].get("covered_by")
113
+ assert "il tileset di Survey2015 non la copre" in a["rm_rb1"]["targets"]["mobile"]["why"]
114
+ assert a["rm_rb1"]["targets"]["web"]["covered_by"]
115
+ # without a reader: not known — «da fare», nothing to queue until read
116
+ un = {x["name"]: x for x in AL.asset_list(g)["assets"]}["Survey2015"]["targets"]["web"]
117
+ assert un["state"] == "todo" and un["proposal"]["tool"] == "keep" and "non sono state lette" in un["why"]
118
+
119
+
120
+ def test_meshes_wanted_one_by_one_keep_their_proposal_with_why():
121
+ from s3dgraphy.nodes.epoch_node import EpochNode
122
+ g, t = _study_with_members()
123
+ st = {"tiles": 1, "read": 1, "per_tile": [[10, 64]], "max_triangles": 10, "max_texture_side": 64}
124
+ # a narrative shows rb1 alone
125
+ from s3dgraphy.nodes.narrative_node import NarrativeNode
126
+ g.add_node(NarrativeNode(node_id="nar", name="Il podio", chapters=[
127
+ {"title": "1", "blocks": [{"block_type": "embed", "ref": "rm_rb1", "view_type": "rm"}]}]))
128
+ a = {x["name"]: x for x in AL.asset_list(g, tiles=lambda e: st)["assets"]}
129
+ c1 = a["rm_rb1"]["targets"]["web"]
130
+ assert c1["single"].startswith("usata da sola nella narrazione «Il podio»") and c1["state"] != "na"
131
+ assert "il tileset non si divide" in c1["proposal"]["why"]
132
+ assert a["rm_rb2"]["targets"]["web"]["covered_by"]
133
+ # different epochs among the container's meshes: all wanted one by one
134
+ g.add_node(EpochNode(node_id="e1", name="I sec", start_time=0, end_time=100))
135
+ g.add_node(EpochNode(node_id="e2", name="II sec", start_time=100, end_time=200))
136
+ g.add_edge("x1", "e1", "rm_rb1", "has_representation_model")
137
+ g.add_edge("x2", "e2", "rm_rb2", "has_representation_model")
138
+ a = {x["name"]: x for x in AL.asset_list(g, tiles=lambda e: st)["assets"]}
139
+ assert a["rm_rb1"]["epochs"] == ["I sec"] and a["rm_rb2"]["epochs"] == ["II sec"]
140
+ for m in ("rm_rb1", "rm_rb2"):
141
+ cell = a[m]["targets"]["web"]
142
+ assert not cell.get("covered_by") and cell["single"] == "serve per epoca: il tileset non si divide"
File without changes