s3dgraphy 1.6.0.dev33__tar.gz → 1.6.0.dev34__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 (511) hide show
  1. {s3dgraphy-1.6.0.dev33/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev34}/PKG-INFO +1 -1
  2. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/pyproject.toml +1 -1
  3. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/__init__.py +1 -1
  4. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/api.py +39 -0
  5. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/geometry/store_backed.py +28 -0
  6. s3dgraphy-1.6.0.dev34/src/s3dgraphy/resources/versions.py +305 -0
  7. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
  8. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy.egg-info/SOURCES.txt +2 -0
  9. s3dgraphy-1.6.0.dev34/tests/test_asset_versions.py +164 -0
  10. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/LICENSE +0 -0
  11. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/MANIFEST.in +0 -0
  12. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/README.md +0 -0
  13. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/setup.cfg +0 -0
  14. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
  15. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
  16. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
  17. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
  18. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
  19. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/em.ttl +0 -0
  20. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  21. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  22. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
  23. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
  24. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  25. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
  26. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
  27. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  28. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
  29. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  30. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  31. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
  32. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
  33. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
  34. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
  35. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
  36. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
  37. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
  38. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
  39. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  40. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  41. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
  42. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
  43. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
  44. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  45. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
  46. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  47. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  48. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
  49. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  50. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
  51. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  52. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
  53. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  54. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
  55. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
  56. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  57. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
  58. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
  59. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
  60. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
  61. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
  62. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  63. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
  64. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  65. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
  66. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  67. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
  68. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
  69. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
  70. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
  71. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
  72. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
  73. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
  74. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
  75. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
  76. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
  77. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
  78. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
  79. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
  80. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
  81. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
  82. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
  83. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
  84. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
  85. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
  86. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
  87. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
  88. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
  89. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
  90. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
  91. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
  92. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
  93. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
  94. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
  95. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
  96. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
  97. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  98. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
  99. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
  100. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
  101. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
  102. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
  103. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
  104. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
  105. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
  106. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
  107. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
  108. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
  109. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  110. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
  111. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
  112. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
  113. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
  114. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
  115. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
  116. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
  117. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  118. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
  119. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  120. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  121. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
  122. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
  123. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  124. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  125. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  126. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  127. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  128. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  129. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  130. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  131. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  132. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  133. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  134. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  135. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  136. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  137. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  138. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  139. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/acquisition/__init__.py +0 -0
  140. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/acquisition/acquire.py +0 -0
  141. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/acquisition/descriptor.py +0 -0
  142. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/acquisition/mapping.py +0 -0
  143. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/ai_validation.py +0 -0
  144. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/annotation/__init__.py +0 -0
  145. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
  146. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/annotation/paradata.py +0 -0
  147. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/annotation/reading.py +0 -0
  148. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/authorities/__init__.py +0 -0
  149. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/authorities/resolver.py +0 -0
  150. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
  151. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
  152. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
  153. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
  154. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
  155. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
  156. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/classification.py +0 -0
  157. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/container.py +0 -0
  158. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/contract/__init__.py +0 -0
  159. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/contract/connector.py +0 -0
  160. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/contract/consumer.py +0 -0
  161. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/contract/core.py +0 -0
  162. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/contract/reference.py +0 -0
  163. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/crdt.py +0 -0
  164. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  165. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/datamodel.py +0 -0
  166. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/diagnostics.py +0 -0
  167. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/dissemination.py +0 -0
  168. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/dtc/__init__.py +0 -0
  169. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/dtc/capture.py +0 -0
  170. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/dtc/corpus.py +0 -0
  171. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/dtc/devices.py +0 -0
  172. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/dtc/ingest.py +0 -0
  173. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
  174. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/dtc/residency.py +0 -0
  175. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/edges/__init__.py +0 -0
  176. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/edges/connection_resolver.py +0 -0
  177. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/edges/connections_loader.py +0 -0
  178. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/edges/edge.py +0 -0
  179. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/editorial.py +0 -0
  180. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/__init__.py +0 -0
  181. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
  182. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
  183. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  184. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
  185. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  186. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  187. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
  188. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  189. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  190. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  191. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  192. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  193. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  194. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  195. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  196. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  197. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  198. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/html_exporter.py +0 -0
  199. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
  200. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/json_exporter.py +0 -0
  201. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
  202. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
  203. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  204. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/geometry/__init__.py +0 -0
  205. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/geometry/aton.py +0 -0
  206. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/geometry/gltf.py +0 -0
  207. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/geometry/migrate.py +0 -0
  208. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/geometry/proxy.py +0 -0
  209. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/geometry/reading_glb.py +0 -0
  210. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/geometry/wkt.py +0 -0
  211. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/graph.py +0 -0
  212. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/iiif.py +0 -0
  213. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/__init__.py +0 -0
  214. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/base_importer.py +0 -0
  215. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/csv_importer.py +0 -0
  216. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/emjson_importer.py +0 -0
  217. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
  218. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/import_graphml.py +0 -0
  219. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
  220. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/metashape_project.py +0 -0
  221. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
  222. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/qualia_importer.py +0 -0
  223. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/rdf_importer.py +0 -0
  224. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/sheet_header.py +0 -0
  225. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/source_text.py +0 -0
  226. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
  227. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
  228. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/importer/xml_importer.py +0 -0
  229. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/indices.py +0 -0
  230. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/language.py +0 -0
  231. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/__init__.py +0 -0
  232. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/authoring.py +0 -0
  233. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
  234. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
  235. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
  236. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
  237. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
  238. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/registry.py +0 -0
  239. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
  240. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
  241. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
  242. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
  243. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/merge/__init__.py +0 -0
  244. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/merge/graph_merger.py +0 -0
  245. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/multigraph/__init__.py +0 -0
  246. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  247. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/narrative/__init__.py +0 -0
  248. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/narrative/bake.py +0 -0
  249. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/narrative/generation.py +0 -0
  250. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/narrative/query.py +0 -0
  251. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/narrative/registry.py +0 -0
  252. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/narrative/site_story.py +0 -0
  253. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/__init__.py +0 -0
  254. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
  255. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/author_node.py +0 -0
  256. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/base_node.py +0 -0
  257. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  258. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/document_node.py +0 -0
  259. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
  260. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
  261. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/dtc_node.py +0 -0
  262. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
  263. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  264. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  265. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  266. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
  267. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
  268. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/graph_node.py +0 -0
  269. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/group_node.py +0 -0
  270. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/hdt_node.py +0 -0
  271. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
  272. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/license_node.py +0 -0
  273. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/narrative_node.py +0 -0
  274. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  275. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/project_node.py +0 -0
  276. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/property_node.py +0 -0
  277. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/representation_node.py +0 -0
  278. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
  279. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/resource_node.py +0 -0
  280. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  281. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  282. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/study_node.py +0 -0
  283. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/nodes/translation_node.py +0 -0
  284. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/ownership.py +0 -0
  285. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
  286. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/photogrammetry/delta.py +0 -0
  287. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/publication.py +0 -0
  288. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/rapporti.py +0 -0
  289. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resolvers/__init__.py +0 -0
  290. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  291. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  292. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resources/__init__.py +0 -0
  293. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resources/addresses.py +0 -0
  294. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resources/files.py +0 -0
  295. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resources/fs_backend.py +0 -0
  296. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resources/minio_backend.py +0 -0
  297. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resources/resolver.py +0 -0
  298. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/resources/tiles3tz.py +0 -0
  299. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/rights.py +0 -0
  300. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/shelf/__init__.py +0 -0
  301. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/shelf/core.py +0 -0
  302. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/stamp/__init__.py +0 -0
  303. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/stamp/absorb.py +0 -0
  304. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/stamp/emit.py +0 -0
  305. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/stamp/hints.py +0 -0
  306. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/stamp/identity.py +0 -0
  307. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/study.py +0 -0
  308. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/__init__.py +0 -0
  309. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/_db_handle.py +0 -0
  310. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
  311. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/_workspace.py +0 -0
  312. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
  313. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/edge_registry.py +0 -0
  314. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
  315. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/graph_projector.py +0 -0
  316. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/graphml_writer.py +0 -0
  317. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/group_projector.py +0 -0
  318. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/group_store.py +0 -0
  319. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/ingest_result.py +0 -0
  320. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/paradata_store.py +0 -0
  321. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
  322. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/rapporti.py +0 -0
  323. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/uuid7.py +0 -0
  324. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
  325. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/vocab_types.py +0 -0
  326. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/yed_classifier.py +0 -0
  327. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/yed_detector.py +0 -0
  328. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
  329. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
  330. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
  331. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
  332. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  333. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  334. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/temporal/__init__.py +0 -0
  335. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/temporal/inference_engine.py +0 -0
  336. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/tools/__init__.py +0 -0
  337. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/tools/consumer_drift.py +0 -0
  338. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
  339. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/tools/deliverable_report.py +0 -0
  340. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
  341. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
  342. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
  343. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/tools/wheel_drift.py +0 -0
  344. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/transforms/__init__.py +0 -0
  345. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  346. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/transforms/compact.py +0 -0
  347. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  348. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/translation.py +0 -0
  349. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/utils/__init__.py +0 -0
  350. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/utils/utils.py +0 -0
  351. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/utils/visual_layout.py +0 -0
  352. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy/zero_hour.py +0 -0
  353. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  354. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy.egg-info/requires.txt +0 -0
  355. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/src/s3dgraphy.egg-info/top_level.txt +0 -0
  356. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_acquisition.py +0 -0
  357. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_acquisition_fs.py +0 -0
  358. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_add_resource.py +0 -0
  359. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_ai_validation_nodes.py +0 -0
  360. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_api_surface.py +0 -0
  361. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_asset_dtc_protocol.py +0 -0
  362. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_aton_shapes.py +0 -0
  363. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_attach_only.py +0 -0
  364. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_authority_projection.py +0 -0
  365. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_authority_resolver.py +0 -0
  366. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_blend_locator.py +0 -0
  367. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_canonical_document_rename.py +0 -0
  368. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_canvas_metadata_import.py +0 -0
  369. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_capture_acquisition.py +0 -0
  370. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_capture_rdf_class.py +0 -0
  371. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_chronology_on_request.py +0 -0
  372. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_coating_unit.py +0 -0
  373. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_composite_node_name.py +0 -0
  374. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_connection_resolver.py +0 -0
  375. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_consumer_drift.py +0 -0
  376. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_container.py +0 -0
  377. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_container_layouts.py +0 -0
  378. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_containment_tpq.py +0 -0
  379. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_contract.py +0 -0
  380. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_contract_consumer.py +0 -0
  381. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_convert_command.py +0 -0
  382. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_crdt.py +0 -0
  383. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_datamodel_fingerprint.py +0 -0
  384. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_datamodel_i18n.py +0 -0
  385. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_deterministic_ids.py +0 -0
  386. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dev29_em_sourcelist.py +0 -0
  387. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dev29_file_set_stamp.py +0 -0
  388. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dev29_graphml_without_a_database.py +0 -0
  389. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dev29_image_set_texturing.py +0 -0
  390. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dev29_not_georeferenced.py +0 -0
  391. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dev29_one_act_n_outputs.py +0 -0
  392. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dev29_ttl_round_trip.py +0 -0
  393. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dev30_decisions.py +0 -0
  394. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_devices.py +0 -0
  395. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dissemination_tombstones.py +0 -0
  396. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dove_sta_il_testo.py +0 -0
  397. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dtc_corpus.py +0 -0
  398. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dtc_ingest.py +0 -0
  399. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dtc_neighbourhood.py +0 -0
  400. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dtc_projection.py +0 -0
  401. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_dtc_residency.py +0 -0
  402. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_edge_ui_phrases.py +0 -0
  403. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_editorial.py +0 -0
  404. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
  405. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_emjson_roundtrip.py +0 -0
  406. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_emjson_schema_version.py +0 -0
  407. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
  408. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_epoch_undated_import.py +0 -0
  409. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_explicit_node_type_marker.py +0 -0
  410. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_extracted_from_unit.py +0 -0
  411. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_filtered_import.py +0 -0
  412. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_fmpxml_importer.py +0 -0
  413. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_fs_backend.py +0 -0
  414. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_functional_units.py +0 -0
  415. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_georeference_scene.py +0 -0
  416. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_gltf_stitch.py +0 -0
  417. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_glyph_paths.py +0 -0
  418. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_graph_indices_edges.py +0 -0
  419. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_graph_scope_migration.py +0 -0
  420. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_hdto_projection.py +0 -0
  421. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_header_key_aliases.py +0 -0
  422. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_i_generi_dei_passi.py +0 -0
  423. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_iiif.py +0 -0
  424. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_il_modo_d_accesso.py +0 -0
  425. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_il_modo_dal_relay.py +0 -0
  426. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_il_proprietario_si_legge.py +0 -0
  427. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_il_riallineamento.py +0 -0
  428. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_importer_edge_hygiene.py +0 -0
  429. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_ipynb_exporter.py +0 -0
  430. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_la_lingua_alla_nascita.py +0 -0
  431. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_la_lingua_dei_dati.py +0 -0
  432. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_la_lingua_nell_op.py +0 -0
  433. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_la_riga_d_intestazione.py +0 -0
  434. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_latex_exporter.py +0 -0
  435. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_le_traduzioni.py +0 -0
  436. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_lossless_roundtrip.py +0 -0
  437. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_mapping_authoring.py +0 -0
  438. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_mapping_csv_and_relations.py +0 -0
  439. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_masonry_unit.py +0 -0
  440. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_material_color.py +0 -0
  441. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_merge_conflicts.py +0 -0
  442. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_metashape_project.py +0 -0
  443. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_migrate_legacy_proxy.py +0 -0
  444. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_minio_backend.py +0 -0
  445. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_authorship.py +0 -0
  446. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_bake_docx.py +0 -0
  447. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_figures.py +0 -0
  448. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_generation.py +0 -0
  449. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_mentions.py +0 -0
  450. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_node.py +0 -0
  451. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_query.py +0 -0
  452. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_scaffolder.py +0 -0
  453. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_site_place.py +0 -0
  454. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_narrative_unvalidated_export.py +0 -0
  455. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_node_datamodel_registry.py +0 -0
  456. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_node_type_map_integrity.py +0 -0
  457. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_one_spelling_writers.py +0 -0
  458. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_pg_importer.py +0 -0
  459. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_photogrammetry_delta.py +0 -0
  460. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_physical_relation_spellings.py +0 -0
  461. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_piu_indirizzi.py +0 -0
  462. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_promotion.py +0 -0
  463. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_property_owners.py +0 -0
  464. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_proxy_resource.py +0 -0
  465. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_proxy_retype.py +0 -0
  466. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_psx_locator.py +0 -0
  467. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_pyarchinit_tier2.py +0 -0
  468. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_qualia_dai_d7_d8.py +0 -0
  469. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_rdf_embedding.py +0 -0
  470. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_rdf_reverse_edges.py +0 -0
  471. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_rdf_roundtrip.py +0 -0
  472. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_reading_coords.py +0 -0
  473. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_reading_glb.py +0 -0
  474. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_reading_migration.py +0 -0
  475. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_reading_place.py +0 -0
  476. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_reading_rdf.py +0 -0
  477. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_recompute_warnings.py +0 -0
  478. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_release.py +0 -0
  479. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_reproject.py +0 -0
  480. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_resource_file_node.py +0 -0
  481. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_resource_files_implicit.py +0 -0
  482. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_resource_layer.py +0 -0
  483. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_resource_representations.py +0 -0
  484. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_resource_revision.py +0 -0
  485. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_resource_tier.py +0 -0
  486. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_reverse_edges.py +0 -0
  487. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_rm_container_node_group.py +0 -0
  488. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_semantic_purity.py +0 -0
  489. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_shelf.py +0 -0
  490. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_shelf_facets.py +0 -0
  491. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_shelf_hatting.py +0 -0
  492. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_shelf_role_uri_table.py +0 -0
  493. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_shipped_mappings.py +0 -0
  494. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_source_list_mapping.py +0 -0
  495. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_source_text.py +0 -0
  496. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_stamp.py +0 -0
  497. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_stamp_hints.py +0 -0
  498. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_stamp_title_description.py +0 -0
  499. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_store_backed_geometry.py +0 -0
  500. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_stratiminer_api.py +0 -0
  501. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_study_metadata.py +0 -0
  502. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_tileset_resource.py +0 -0
  503. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_ttl_roundtrip.py +0 -0
  504. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_unit_definition.py +0 -0
  505. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_verifica_provenance.py +0 -0
  506. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_visual_assets.py +0 -0
  507. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_wheel_drift.py +0 -0
  508. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
  509. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_xlsx_importer_graph_init.py +0 -0
  510. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/tests/test_xlsx_source_column.py +0 -0
  511. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev34}/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.dev33
3
+ Version: 1.6.0.dev34
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.dev33"
7
+ version = "1.6.0.dev34"
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.dev33"
1
+ __version__ = "1.6.0.dev34"
2
2
  __datamodel_version__ = "1.5.5" # s3Dgraphy connections datamodel version
3
3
 
4
4
  # s3Dgraphy/__init__.py
@@ -2704,6 +2704,45 @@ def pick_representation(graph: Graph, res_id: str, can_open) -> Dict[str, Any]:
2704
2704
  return _pick(graph, res_id, can_open)
2705
2705
 
2706
2706
 
2707
+ # ── an asset and its versions (E.D. 30 Sep / 3 Oct 2026) ──────────────────────
2708
+ # The asset is the master resource; each version (LOD1, LOD2…) is a child made
2709
+ # by a `lod_generation` step, with its level and purpose in the step's
2710
+ # parameters. The semantic link stays on the asset and the versions inherit it.
2711
+ # See :mod:`s3dgraphy.resources.versions`.
2712
+ def add_version(graph: Graph, master_id: str, *, level: str, purpose: str = "",
2713
+ **kwargs) -> Dict[str, Any]:
2714
+ """A version of the asset ``master_id`` at ``level`` for ``purpose``: a child
2715
+ resource ``dtc_derived_from`` the master through a ``lod_generation`` step.
2716
+ Idempotent per (asset, level); other bytes at a level are refused (revise
2717
+ the version instead). Returns ``{version_id, process_id, created, asset_id,
2718
+ level, purpose, warnings}``."""
2719
+ from .resources.versions import add_version as _add
2720
+ before = _ids(graph)
2721
+ out = _add(graph, master_id, level=level, purpose=purpose, **kwargs)
2722
+ _born(graph, before)
2723
+ return out
2724
+
2725
+
2726
+ def versions_of(graph: Graph, res_id: str) -> List[Dict[str, Any]]:
2727
+ """The asset of ``res_id`` and its versions, master first then by level,
2728
+ each the CURRENT revision: ``[{id, level, purpose, master, checksum, …}]``."""
2729
+ from .resources.versions import versions_of as _versions
2730
+ return _versions(graph, res_id)
2731
+
2732
+
2733
+ def asset_of(graph: Graph, res_id: str) -> str:
2734
+ """The asset (master) ``res_id`` is a version of; itself if it is none."""
2735
+ from .resources.versions import asset_of as _asset
2736
+ return _asset(graph, res_id)
2737
+
2738
+
2739
+ def inherited_links(graph: Graph, res_id: str) -> Dict[str, Any]:
2740
+ """What hats the asset of ``res_id`` (RM/proxy facets and their epochs and
2741
+ units): the semantic link a version inherits, never copied onto it."""
2742
+ from .resources.versions import inherited_links as _links
2743
+ return _links(graph, res_id)
2744
+
2745
+
2707
2746
  # ── the 3D Tiles Archive (.3tz), recognised and read, never written here ──────
2708
2747
  # The writers are 3DSC and EMStudio (E.D. 2026-09-30); the canonical form and
2709
2748
  # the content digest belong to dtcstamp. See :mod:`s3dgraphy.resources.tiles3tz`.
@@ -206,6 +206,17 @@ def _binds(graph: Any, node_id: str, by_id: Dict[str, Any]) -> List[Dict[str, st
206
206
  return out
207
207
 
208
208
 
209
+ def _version_of(graph: Any, res_id: str) -> Optional[Dict[str, Any]]:
210
+ """The version entry of this resource, or None (also for a graph whose
211
+ shape the versions reader cannot walk: listing geometry must not fail on
212
+ that)."""
213
+ try:
214
+ from ..resources.versions import version_info
215
+ return version_info(graph, res_id)
216
+ except Exception: # noqa: BLE001 — a fork in the revisions is not ours here
217
+ return None
218
+
219
+
209
220
  def store_backed_geometry(graph: Any) -> List[Dict[str, Any]]:
210
221
  """The geometry this graph describes that lives in the store, as records.
211
222
 
@@ -226,6 +237,9 @@ def store_backed_geometry(graph: Any) -> List[Dict[str, Any]]:
226
237
  ``bind`` ``[{id, node_type, name, via}]`` — epochs, units, documents
227
238
  ``residency`` always ``resident`` in this list (see the module docstring)
228
239
  ``name`` / ``media_type`` / ``url`` — for the message a consumer shows
240
+ ``asset_id`` / ``level`` / ``purpose`` — only for an asset with versions
241
+ and its versions (a version is listed under its asset's
242
+ facets: it inherits them)
229
243
 
230
244
  Sorted by (kind, name, node_id): two runs read the same, which is what makes
231
245
  "materialise" idempotent from the caller's side as well.
@@ -246,10 +260,24 @@ def store_backed_geometry(graph: Any) -> List[Dict[str, Any]]:
246
260
  and str(getattr(by_id[str(getattr(e, "edge_source", ""))],
247
261
  "node_type", "")) in _FACET_TYPES
248
262
  ]
263
+ #: a VERSION of an asset (LOD1, LOD2…) is hatted by nothing itself: it
264
+ #: inherits the facets of its asset (s3dgraphy.resources.versions), so
265
+ #: it is listed where the asset goes, with its level beside it
266
+ version = _version_of(graph, resource.node_id)
267
+ if not facets and version and version.get("asset_id") != resource.node_id:
268
+ facets = [by_id[str(e.edge_source)] for e in _alive_edges(graph)
269
+ if str(getattr(e, "edge_type", "")) == EDGE_HAS_LINKED
270
+ and str(getattr(e, "edge_target", "")) == version["asset_id"]
271
+ and str(getattr(e, "edge_source", "")) in by_id
272
+ and str(getattr(by_id[str(e.edge_source)], "node_type", ""))
273
+ in _FACET_TYPES]
249
274
  carriers: List[Any] = facets or [resource]
250
275
  for carrier in carriers:
251
276
  node_type = str(getattr(carrier, "node_type", "") or "")
277
+ extra = ({"asset_id": version["asset_id"], "level": version["level"],
278
+ "purpose": version["purpose"]} if version else {})
252
279
  records.append({
280
+ **extra,
253
281
  "node_id": carrier.node_id,
254
282
  "resource_id": resource.node_id,
255
283
  "checksum": str(data.get("checksum") or ""),
@@ -0,0 +1,305 @@
1
+ """An asset and its versions — one survey object, several levels of detail.
2
+
3
+ Decided by E.D. (30 Sep 2026, confirmed 3 Oct 2026, «asset padre con le versioni
4
+ come risorse figlie»): the ASSET is the master resource (the podium as surveyed,
5
+ LOD0), and each VERSION (LOD1, LOD2, a decimated or retopologised mesh) is a
6
+ child ``ResourceNode`` made from it:
7
+
8
+ * ``version ──dtc_derived_from──▶ master``, and a ``DTCProcessNode`` of kind
9
+ ``lod_generation`` with ``dtc_had_input`` the master and ``dtc_had_output`` the
10
+ version — the shape :func:`s3dgraphy.dtc.ingest.declare_derivation` writes;
11
+ * the version's LEVEL and PURPOSE go in the process ``parameters`` (``level``,
12
+ ``purpose``), where the ``lod_generation`` kind of the visual rules says the
13
+ level goes; the master's own level, when somebody states it, is the
14
+ ``source_level`` of the same parameters — the level of the input as whoever
15
+ made the version saw it. No new field on the resource, so nothing new to map:
16
+ the parameters of a step already travel in em.json and in RDF;
17
+ * the SEMANTIC LINK (the RM or proxy that hats the object, its epochs, its unit)
18
+ is declared ONCE, on the asset. A version inherits it: :func:`inherited_links`
19
+ reads it from the asset, and nothing is copied onto the version — a copy
20
+ would be a second statement that can disagree with the first.
21
+
22
+ A version whose bytes change is REVISED like any resource (``replace_file``,
23
+ ``was_revision_of``): the revision keeps the level and purpose of the version it
24
+ revises, and :func:`versions_of` answers with the CURRENT revision of each level.
25
+
26
+ The level is a word somebody gives («LOD1»), not an enumeration fixed here: the
27
+ earlier refusal of a ``lod0/1/2`` vocabulary (the measures of ``ResourceNode``)
28
+ still holds for what a CONSUMER compares — weight and primitives — while the
29
+ level is the name a person uses to pick one.
30
+ """
31
+
32
+ from __future__ import annotations
33
+
34
+ import re
35
+ import uuid
36
+ from typing import Any, Dict, List, Optional, Sequence
37
+
38
+ from .files import (_data, _is_resource, _node, add_resource, resource_files,
39
+ revisions_of)
40
+
41
+ DTC_KIND = "lod_generation"
42
+ EDGE_HAD_INPUT = "dtc_had_input"
43
+ EDGE_HAD_OUTPUT = "dtc_had_output"
44
+ EDGE_HAS_LINKED = "has_linked_resource"
45
+
46
+ _NS = uuid.uuid5(uuid.NAMESPACE_URL, "https://extendedmatrix.org/s3dgraphy/asset-version")
47
+
48
+
49
+ def version_id_for(asset_id: str, level: str) -> str:
50
+ """The id of the version of ``asset_id`` at ``level``: derived, so adding
51
+ the same level twice lands on the same node."""
52
+ return str(uuid.uuid5(_NS, f"version|{asset_id}|{_level(level)}"))
53
+
54
+
55
+ def _level(level: Any) -> str:
56
+ text = str(level or "").strip()
57
+ if not text:
58
+ raise ValueError("a version needs a level (for instance «LOD1»)")
59
+ return text
60
+
61
+
62
+ def _level_key(level: Optional[str]):
63
+ """Natural order: LOD2 before LOD10, a level without a number last."""
64
+ text = str(level or "")
65
+ m = re.search(r"(\d+)", text)
66
+ return (0 if m else 1, int(m.group(1)) if m else 0, text)
67
+
68
+
69
+ def _lod_process_of(graph, res_id: str):
70
+ """The ``lod_generation`` step that made ``res_id``, with its input, or
71
+ ``(None, None)``."""
72
+ for e in graph.edges:
73
+ if e.edge_type != EDGE_HAD_OUTPUT or e.edge_target != res_id:
74
+ continue
75
+ proc = _node(graph, e.edge_source)
76
+ if proc is None or _data(proc).get("dtc_kind") != DTC_KIND:
77
+ continue
78
+ inputs = [x.edge_target for x in graph.edges
79
+ if x.edge_type == EDGE_HAD_INPUT and x.edge_source == proc.node_id]
80
+ res_inputs = [i for i in inputs
81
+ if _node(graph, i) is not None and _is_resource(_node(graph, i))]
82
+ return proc, (sorted(res_inputs)[0] if res_inputs else None)
83
+ return None, None
84
+
85
+
86
+ def _origin(graph, res_id: str) -> str:
87
+ """The first resource of the revision chain ``res_id`` is in: the one the
88
+ ``lod_generation`` step was declared on."""
89
+ try:
90
+ return revisions_of(graph, res_id)[0]
91
+ except ValueError:
92
+ return res_id
93
+
94
+
95
+ def asset_of(graph, res_id: str) -> str:
96
+ """The asset (the master) ``res_id`` is a version of — ``res_id`` itself
97
+ when it is not a version. Walks a version of a version up to the master."""
98
+ node = _node(graph, res_id)
99
+ if node is None or not _is_resource(node):
100
+ raise ValueError(f"{res_id!r} is not a resource of this graph")
101
+ seen = set()
102
+ cur = res_id
103
+ while cur not in seen:
104
+ seen.add(cur)
105
+ _proc, source = _lod_process_of(graph, _origin(graph, cur))
106
+ if source is None:
107
+ return _origin(graph, cur)
108
+ cur = source
109
+ raise ValueError(f"the versions of {res_id!r} loop at {cur!r}")
110
+
111
+
112
+ def _entry(graph, res_id: str, *, level, purpose, process_id, master: bool,
113
+ origin: str) -> Dict[str, Any]:
114
+ node = _node(graph, res_id)
115
+ d = _data(node)
116
+ try:
117
+ chain = revisions_of(graph, origin)
118
+ except ValueError:
119
+ chain = [origin]
120
+ checksum, url, media = d.get("checksum"), d.get("url"), d.get("media_type")
121
+ if not checksum:
122
+ #: a revision writes its files as nodes: one file (or the entry point)
123
+ #: carries the bytes the version is
124
+ files = resource_files(graph, res_id)
125
+ one = files[0] if len(files) == 1 else next(
126
+ (f for f in files if f["role"] == "entry_point"), None)
127
+ if one is not None:
128
+ fd = _data(one["node"])
129
+ checksum = fd.get("checksum") if len(files) == 1 else checksum
130
+ url = url or fd.get("url")
131
+ media = media or fd.get("media_type")
132
+ return {"id": res_id, "name": getattr(node, "name", ""),
133
+ "level": level, "purpose": purpose, "master": master,
134
+ "process_id": process_id, "checksum": checksum or "",
135
+ "url": url or "", "residency": d.get("residency") or "",
136
+ "media_type": media or "",
137
+ "revisions": chain}
138
+
139
+
140
+ def _current(graph, res_id: str) -> str:
141
+ try:
142
+ return revisions_of(graph, res_id)[-1]
143
+ except ValueError:
144
+ return res_id
145
+
146
+
147
+ def versions_of(graph, asset_id: str) -> List[Dict[str, Any]]:
148
+ """The asset and its versions, master first, then by level.
149
+
150
+ Each entry: ``{id, name, level, purpose, master, process_id, checksum, url,
151
+ residency, media_type, revisions}``. ``id`` is the CURRENT revision of the
152
+ version; ``revisions`` its chain, oldest first. The master's ``level`` is
153
+ the ``source_level`` its versions declared, or None when nobody said it.
154
+ """
155
+ asset = asset_of(graph, asset_id)
156
+ kids: List[Dict[str, Any]] = []
157
+ master_levels = set()
158
+ for e in graph.edges:
159
+ if e.edge_type != EDGE_HAD_INPUT or e.edge_target != asset:
160
+ continue
161
+ proc = _node(graph, e.edge_source)
162
+ if proc is None or _data(proc).get("dtc_kind") != DTC_KIND:
163
+ continue
164
+ params = _data(proc).get("parameters") or {}
165
+ if params.get("source_level"):
166
+ master_levels.add(str(params["source_level"]))
167
+ for o in graph.edges:
168
+ if o.edge_type != EDGE_HAD_OUTPUT or o.edge_source != proc.node_id:
169
+ continue
170
+ out = _node(graph, o.edge_target)
171
+ if out is None or not _is_resource(out):
172
+ continue
173
+ kids.append(_entry(graph, _current(graph, out.node_id),
174
+ level=params.get("level"),
175
+ purpose=params.get("purpose") or "",
176
+ process_id=proc.node_id, master=False,
177
+ origin=out.node_id))
178
+ master_level = sorted(master_levels)[0] if len(master_levels) == 1 else None
179
+ out = [_entry(graph, _current(graph, asset), level=master_level, purpose="",
180
+ process_id=None, master=True, origin=asset)]
181
+ out += sorted(kids, key=lambda k: (_level_key(k["level"]), k["id"]))
182
+ return out
183
+
184
+
185
+ def version_info(graph, res_id: str) -> Optional[Dict[str, Any]]:
186
+ """The entry of :func:`versions_of` ``res_id`` belongs to (any revision of
187
+ it), with ``asset_id``; None when ``res_id`` is neither an asset with
188
+ versions nor a version."""
189
+ asset = asset_of(graph, res_id)
190
+ entries = versions_of(graph, asset)
191
+ if len(entries) == 1:
192
+ return None
193
+ for entry in entries:
194
+ if res_id == entry["id"] or res_id in entry["revisions"]:
195
+ return {**entry, "asset_id": asset}
196
+ return None
197
+
198
+
199
+ def inherited_links(graph, res_id: str) -> Dict[str, Any]:
200
+ """The semantic link of ``res_id``: what hats its ASSET.
201
+
202
+ ``{asset_id, inherited, facets: [{id, node_type, name}], binds: [{id,
203
+ node_type, name, via}]}`` — ``facets`` are the nodes that reach the asset
204
+ with ``has_linked_resource`` (the RM, the proxy's shape), ``binds`` what
205
+ those facets are for (epochs, units), read the way
206
+ :func:`s3dgraphy.geometry.store_backed.store_backed_geometry` reads them.
207
+ ``inherited`` is True when ``res_id`` is a version and the link was read on
208
+ its asset."""
209
+ from ..geometry.store_backed import _binds
210
+
211
+ asset = asset_of(graph, res_id)
212
+ by_id = {n.node_id: n for n in graph.nodes}
213
+ facets, binds, seen = [], [], set()
214
+ for e in graph.edges:
215
+ if e.edge_type != EDGE_HAS_LINKED or e.edge_target != asset:
216
+ continue
217
+ facet = by_id.get(e.edge_source)
218
+ if facet is None or facet.node_id in seen:
219
+ continue
220
+ seen.add(facet.node_id)
221
+ facets.append({"id": facet.node_id, "name": getattr(facet, "name", ""),
222
+ "node_type": str(getattr(facet, "node_type", "") or "")})
223
+ for b in _binds(graph, facet.node_id, by_id):
224
+ if b["id"] not in {x["id"] for x in binds}:
225
+ binds.append(b)
226
+ return {"asset_id": asset, "inherited": asset != _origin(graph, res_id),
227
+ "facets": facets, "binds": binds}
228
+
229
+
230
+ def add_version(graph, master_id: str, *, level: str, purpose: str = "",
231
+ files: Sequence[Dict[str, Any]] = (), name: Optional[str] = None,
232
+ master_level: Optional[str] = None,
233
+ technique: Optional[str] = None,
234
+ parameters: Optional[Dict[str, Any]] = None,
235
+ tool: Optional[str] = None,
236
+ software: Optional[Sequence[Dict[str, Any]]] = None,
237
+ residency: Optional[str] = None,
238
+ packaging: Optional[str] = None,
239
+ size_bytes: Optional[int] = None,
240
+ primitives: Optional[Dict[str, int]] = None,
241
+ version_id: Optional[str] = None,
242
+ author: Optional[str] = None,
243
+ at: Optional[str] = None) -> Dict[str, Any]:
244
+ """A new version of the asset ``master_id`` at ``level``, for ``purpose``.
245
+
246
+ Writes the version resource (kind of the master, ``tier: distribution``,
247
+ ``files`` as :func:`add_resource` takes them) and the ``lod_generation``
248
+ step from the master to it. Idempotent: the id is derived from (asset,
249
+ level), and adding the same level again with the same bytes changes
250
+ nothing. The same level with OTHER bytes is refused — that is a revision of
251
+ the version (``replace_file``), and the error says so.
252
+
253
+ ``master_id`` may itself be a version: a LOD2 decimated from LOD1 is a
254
+ different claim from a LOD2 made from the master, and it is written as it
255
+ is said; :func:`asset_of` walks up to the master either way.
256
+
257
+ Returns ``{version_id, process_id, created, asset_id, level, purpose,
258
+ warnings}``.
259
+ """
260
+ from ..dtc.ingest import declare_derivation
261
+
262
+ master = _node(graph, master_id)
263
+ if master is None or not _is_resource(master):
264
+ raise ValueError(f"{master_id!r} is not a resource of this graph")
265
+ lvl = _level(level)
266
+ asset = asset_of(graph, master_id)
267
+ vid = version_id or version_id_for(master_id, lvl)
268
+ for entry in versions_of(graph, asset):
269
+ if entry["level"] == lvl and not entry["master"] \
270
+ and vid not in entry["revisions"]:
271
+ raise ValueError(f"{asset!r} already has a version at {lvl!r} "
272
+ f"({entry['id']}): replace its file to revise it")
273
+ specs = [dict(f) for f in files or ()]
274
+ node = _node(graph, vid)
275
+ created = node is None
276
+ if node is None:
277
+ add_resource(graph, name=name or f"{master.name} {lvl}",
278
+ kind=_data(master).get("url_type") or "", files=specs,
279
+ tier="distribution", residency=residency,
280
+ packaging=packaging, size_bytes=size_bytes,
281
+ primitives=primitives, resource_id=vid)
282
+ else:
283
+ if not _is_resource(node):
284
+ raise ValueError(f"{vid!r} is a {getattr(node, 'node_type', '?')}, "
285
+ f"not a resource")
286
+ new_sum = next((s.get("checksum") for s in specs if s.get("checksum")), None)
287
+ old_sum = _data(node).get("checksum")
288
+ if new_sum and old_sum and new_sum != old_sum:
289
+ raise ValueError(f"the version {lvl!r} of {asset!r} holds other bytes "
290
+ f"({old_sum}): replace its file to revise it")
291
+ params = dict(parameters or {})
292
+ params["level"] = lvl
293
+ if purpose:
294
+ params["purpose"] = str(purpose)
295
+ if master_level:
296
+ params["source_level"] = str(master_level).strip()
297
+ step = declare_derivation(
298
+ graph, output=vid, inputs=[master_id], dtc_kind=DTC_KIND,
299
+ process_id=str(uuid.uuid5(_NS, f"lod_generation|{vid}")),
300
+ name=f"LOD generation {lvl} of {master.name}",
301
+ technique=technique, parameters=params, tool=tool,
302
+ software=list(software) if software else None, author=author, at=at)
303
+ return {"version_id": vid, "process_id": step["process_id"],
304
+ "created": created, "asset_id": asset, "level": lvl,
305
+ "purpose": str(purpose or ""), "warnings": step["warnings"]}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: s3dgraphy
3
- Version: 1.6.0.dev33
3
+ Version: 1.6.0.dev34
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>
@@ -299,6 +299,7 @@ src/s3dgraphy/resources/fs_backend.py
299
299
  src/s3dgraphy/resources/minio_backend.py
300
300
  src/s3dgraphy/resources/resolver.py
301
301
  src/s3dgraphy/resources/tiles3tz.py
302
+ src/s3dgraphy/resources/versions.py
302
303
  src/s3dgraphy/shelf/__init__.py
303
304
  src/s3dgraphy/shelf/core.py
304
305
  src/s3dgraphy/stamp/__init__.py
@@ -355,6 +356,7 @@ tests/test_add_resource.py
355
356
  tests/test_ai_validation_nodes.py
356
357
  tests/test_api_surface.py
357
358
  tests/test_asset_dtc_protocol.py
359
+ tests/test_asset_versions.py
358
360
  tests/test_aton_shapes.py
359
361
  tests/test_attach_only.py
360
362
  tests/test_authority_projection.py
@@ -0,0 +1,164 @@
1
+ """MICRO-ASSET-VERSIONI, A1 — an asset and its versions.
2
+
3
+ E.D., 30 Sep / 3 Oct 2026: the asset is the master resource, each version
4
+ (LOD1, LOD2…) a child resource made by a ``lod_generation`` step with
5
+ ``dtc_derived_from`` the master, a level and a purpose. The semantic link (RM,
6
+ epoch, unit) is on the asset and the versions inherit it.
7
+ """
8
+
9
+ from pathlib import Path
10
+
11
+ import pytest
12
+
13
+ from s3dgraphy import api
14
+ from s3dgraphy.graph import Graph
15
+ from s3dgraphy.nodes.epoch_node import EpochNode
16
+ from s3dgraphy.nodes.representation_node import RepresentationModelNode
17
+
18
+ SHA = {k: "sha256:" + c * 64 for k, c in (("lod0", "0"), ("lod1", "1"),
19
+ ("lod2", "2"), ("lod2b", "b"))}
20
+
21
+
22
+ def _podio():
23
+ """OB_PODIO: the master LOD0 (resident obj), hatted by an RM in an epoch."""
24
+ g = Graph("templu")
25
+ api.add_resource(g, resource_id="podio", name="OB_PODIO", kind="3d_model",
26
+ tier="master", residency="resident",
27
+ files=[{"path": "LOD0/OB_PODIO_LOD0.obj", "checksum": SHA["lod0"],
28
+ "media_type": "model/obj"}])
29
+ g.add_node(RepresentationModelNode("rm", name="OB_PODIO"))
30
+ g.add_edge("rm~podio", "rm", "podio", "has_linked_resource")
31
+ g.add_node(EpochNode("ep1", name="Phase I", start_time=-100, end_time=100))
32
+ g.add_edge("rm~ep1", "rm", "ep1", "has_first_epoch")
33
+ return g
34
+
35
+
36
+ def _three(g):
37
+ one = api.add_version(g, "podio", level="LOD1", purpose="web",
38
+ master_level="LOD0", residency="resident",
39
+ files=[{"path": "LOD1/OB_PODIO_LOD1.obj",
40
+ "checksum": SHA["lod1"], "media_type": "model/obj"}])
41
+ two = api.add_version(g, "podio", level="LOD2", purpose="preview",
42
+ master_level="LOD0", residency="resident",
43
+ files=[{"path": "LOD2/OB_PODIO_LOD2.obj",
44
+ "checksum": SHA["lod2"], "media_type": "model/obj"}])
45
+ return one, two
46
+
47
+
48
+ def test_a_version_is_a_child_resource_made_by_lod_generation():
49
+ g = _podio()
50
+ one, _ = _three(g)
51
+ v = g.find_node_by_id(one["version_id"])
52
+ assert v.node_type == "resource" and v.data["url_type"] == "3d_model"
53
+ assert v.data["tier"] == "distribution"
54
+ edges = {(e.edge_source, e.edge_target, e.edge_type) for e in g.edges}
55
+ assert (one["version_id"], "podio", "dtc_derived_from") in edges
56
+ proc = g.find_node_by_id(one["process_id"])
57
+ assert proc.node_type == "dtc_process"
58
+ assert proc.data["dtc_kind"] == "lod_generation"
59
+ assert proc.data["parameters"] == {"level": "LOD1", "purpose": "web",
60
+ "source_level": "LOD0"}
61
+ assert (one["process_id"], "podio", "dtc_had_input") in edges
62
+ assert (one["process_id"], one["version_id"], "dtc_had_output") in edges
63
+ assert one["asset_id"] == "podio" and one["created"]
64
+
65
+
66
+ def test_versions_of_lists_master_then_levels():
67
+ g = _podio()
68
+ _three(g)
69
+ rows = api.versions_of(g, "podio")
70
+ assert [(r["level"], r["master"], r["purpose"]) for r in rows] == \
71
+ [("LOD0", True, ""), ("LOD1", False, "web"), ("LOD2", False, "preview")]
72
+ assert [r["checksum"] for r in rows] == [SHA["lod0"], SHA["lod1"], SHA["lod2"]]
73
+ # the same answer from any of them
74
+ assert api.versions_of(g, rows[2]["id"]) == rows
75
+
76
+
77
+ def test_adding_the_same_level_twice_changes_nothing():
78
+ g = _podio()
79
+ one, _ = _three(g)
80
+ n, e = len(g.nodes), len(g.edges)
81
+ again = api.add_version(g, "podio", level="LOD1", purpose="web",
82
+ files=[{"path": "LOD1/OB_PODIO_LOD1.obj",
83
+ "checksum": SHA["lod1"]}])
84
+ assert again["version_id"] == one["version_id"] and not again["created"]
85
+ assert (len(g.nodes), len(g.edges)) == (n, e)
86
+
87
+
88
+ def test_other_bytes_at_a_level_are_a_revision_not_a_second_version():
89
+ g = _podio()
90
+ _three(g)
91
+ with pytest.raises(ValueError, match="replace its file"):
92
+ api.add_version(g, "podio", level="LOD2",
93
+ files=[{"path": "x.obj", "checksum": SHA["lod2b"]}])
94
+
95
+
96
+ def test_a_revised_version_keeps_its_level_and_versions_of_gives_the_current():
97
+ g = _podio()
98
+ _, two = _three(g)
99
+ out = api.replace_file(g, two["version_id"], None, checksum=SHA["lod2b"],
100
+ media_type="model/obj")
101
+ rows = api.versions_of(g, "podio")
102
+ lod2 = rows[-1]
103
+ assert lod2["level"] == "LOD2" and lod2["id"] == out["new_resource_id"]
104
+ assert lod2["checksum"] == SHA["lod2b"]
105
+ assert lod2["revisions"] == [two["version_id"], out["new_resource_id"]]
106
+ assert api.asset_of(g, out["new_resource_id"]) == "podio"
107
+
108
+
109
+ def test_versions_inherit_the_semantic_link_of_the_asset():
110
+ g = _podio()
111
+ one, _ = _three(g)
112
+ links = api.inherited_links(g, one["version_id"])
113
+ assert links["asset_id"] == "podio" and links["inherited"]
114
+ assert [f["id"] for f in links["facets"]] == ["rm"]
115
+ assert [b["id"] for b in links["binds"]] == ["ep1"]
116
+ # nothing copied onto the version: no edge reaches it but its genesis
117
+ touching = {e.edge_type for e in g.edges if one["version_id"] in
118
+ (e.edge_source, e.edge_target)}
119
+ assert touching == {"dtc_derived_from", "dtc_had_output"}
120
+ assert not api.inherited_links(g, "podio")["inherited"]
121
+
122
+
123
+ def test_store_backed_lists_the_versions_where_the_asset_goes():
124
+ g = _podio()
125
+ _three(g)
126
+ rows = api.store_backed_geometry(g)
127
+ assert len(rows) == 3
128
+ assert {r["node_id"] for r in rows} == {"rm"}
129
+ assert sorted(r.get("level") for r in rows) == ["LOD0", "LOD1", "LOD2"]
130
+ assert all(r["asset_id"] == "podio" for r in rows)
131
+ assert all([b["id"] for b in r["bind"]] == ["ep1"] for r in rows)
132
+
133
+
134
+ def test_a_resource_without_versions_reads_as_before():
135
+ g = _podio()
136
+ rows = api.store_backed_geometry(g)
137
+ assert len(rows) == 1 and "level" not in rows[0] and "asset_id" not in rows[0]
138
+ assert api.versions_of(g, "podio")[0]["level"] is None
139
+
140
+
141
+ def test_versions_survive_the_emjson_round_trip():
142
+ g = _podio()
143
+ _three(g)
144
+ g2, _ = api.load_emjson(api.graph_to_emjson(g))
145
+ assert [(r["level"], r["purpose"], r["checksum"]) for r in api.versions_of(g2, "podio")] == \
146
+ [(r["level"], r["purpose"], r["checksum"]) for r in api.versions_of(g, "podio")]
147
+
148
+
149
+ def test_versions_survive_rdf(tmp_path):
150
+ pytest.importorskip("rdflib")
151
+ from s3dgraphy.exporter.rdf_exporter import RDFExporter
152
+ from s3dgraphy.importer.rdf_importer import RDFImporter
153
+ g = _podio()
154
+ _three(g)
155
+ ttl = RDFExporter(str(tmp_path / "g.ttl"), format="turtle").export_single_graph(g)
156
+ back = RDFImporter().parse(ttl)[0]
157
+ assert [(r["level"], r["purpose"]) for r in api.versions_of(back, "podio")] == \
158
+ [("LOD0", ""), ("LOD1", "web"), ("LOD2", "preview")]
159
+
160
+
161
+ def test_a_level_is_required():
162
+ g = _podio()
163
+ with pytest.raises(ValueError, match="level"):
164
+ api.add_version(g, "podio", level=" ")
File without changes