s3dgraphy 1.6.0.dev30__tar.gz → 1.6.0.dev31__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 (509) hide show
  1. {s3dgraphy-1.6.0.dev30/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev31}/PKG-INFO +1 -1
  2. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/pyproject.toml +1 -1
  3. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/__init__.py +1 -1
  4. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/container.py +116 -7
  5. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
  6. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy.egg-info/SOURCES.txt +1 -0
  7. s3dgraphy-1.6.0.dev31/tests/test_container_layouts.py +63 -0
  8. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/LICENSE +0 -0
  9. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/MANIFEST.in +0 -0
  10. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/README.md +0 -0
  11. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/setup.cfg +0 -0
  12. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
  13. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
  14. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
  15. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
  16. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
  17. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/em.ttl +0 -0
  18. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  19. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  20. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
  21. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
  22. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  23. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
  24. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
  25. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  26. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
  27. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  28. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  29. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
  30. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
  31. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
  32. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
  33. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
  34. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
  35. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
  36. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
  37. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  38. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  39. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
  40. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
  41. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
  42. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  43. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
  44. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  45. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  46. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
  47. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  48. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
  49. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  50. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
  51. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  52. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
  53. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
  54. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  55. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
  56. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
  57. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
  58. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
  59. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
  60. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  61. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
  62. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  63. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
  64. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  65. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
  66. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
  67. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
  68. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
  69. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
  70. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
  71. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
  72. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
  73. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
  74. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
  75. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
  76. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
  77. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
  78. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
  79. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
  80. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
  81. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
  82. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
  83. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
  84. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
  85. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
  86. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
  87. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
  88. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
  89. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
  90. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
  91. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
  92. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
  93. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
  94. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
  95. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  96. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
  97. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
  98. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
  99. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
  100. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
  101. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
  102. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
  103. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
  104. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
  105. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
  106. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
  107. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  108. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
  109. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
  110. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
  111. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
  112. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
  113. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
  114. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
  115. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  116. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
  117. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  118. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  119. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
  120. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
  121. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  122. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  123. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  124. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  125. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  126. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  127. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  128. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  129. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  130. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  131. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  132. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  133. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  134. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  135. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  136. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  137. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/acquisition/__init__.py +0 -0
  138. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/acquisition/acquire.py +0 -0
  139. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/acquisition/descriptor.py +0 -0
  140. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/acquisition/mapping.py +0 -0
  141. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/ai_validation.py +0 -0
  142. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/annotation/__init__.py +0 -0
  143. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
  144. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/annotation/paradata.py +0 -0
  145. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/annotation/reading.py +0 -0
  146. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/api.py +0 -0
  147. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/authorities/__init__.py +0 -0
  148. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/authorities/resolver.py +0 -0
  149. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
  150. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
  151. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
  152. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
  153. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
  154. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
  155. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/classification.py +0 -0
  156. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/contract/__init__.py +0 -0
  157. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/contract/connector.py +0 -0
  158. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/contract/consumer.py +0 -0
  159. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/contract/core.py +0 -0
  160. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/contract/reference.py +0 -0
  161. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/crdt.py +0 -0
  162. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  163. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/datamodel.py +0 -0
  164. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/diagnostics.py +0 -0
  165. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/dissemination.py +0 -0
  166. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/dtc/__init__.py +0 -0
  167. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/dtc/capture.py +0 -0
  168. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/dtc/corpus.py +0 -0
  169. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/dtc/devices.py +0 -0
  170. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/dtc/ingest.py +0 -0
  171. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
  172. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/dtc/residency.py +0 -0
  173. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/edges/__init__.py +0 -0
  174. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/edges/connection_resolver.py +0 -0
  175. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/edges/connections_loader.py +0 -0
  176. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/edges/edge.py +0 -0
  177. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/editorial.py +0 -0
  178. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/__init__.py +0 -0
  179. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
  180. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
  181. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  182. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
  183. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  184. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  185. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
  186. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  187. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  188. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  189. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  190. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  191. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  192. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  193. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  194. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  195. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  196. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/html_exporter.py +0 -0
  197. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
  198. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/json_exporter.py +0 -0
  199. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
  200. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
  201. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  202. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/geometry/__init__.py +0 -0
  203. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/geometry/aton.py +0 -0
  204. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/geometry/gltf.py +0 -0
  205. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/geometry/migrate.py +0 -0
  206. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/geometry/proxy.py +0 -0
  207. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/geometry/reading_glb.py +0 -0
  208. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/geometry/store_backed.py +0 -0
  209. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/geometry/wkt.py +0 -0
  210. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/graph.py +0 -0
  211. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/iiif.py +0 -0
  212. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/__init__.py +0 -0
  213. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/base_importer.py +0 -0
  214. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/csv_importer.py +0 -0
  215. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/emjson_importer.py +0 -0
  216. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
  217. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/import_graphml.py +0 -0
  218. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
  219. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/metashape_project.py +0 -0
  220. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
  221. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/qualia_importer.py +0 -0
  222. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/rdf_importer.py +0 -0
  223. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/sheet_header.py +0 -0
  224. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/source_text.py +0 -0
  225. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
  226. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
  227. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/importer/xml_importer.py +0 -0
  228. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/indices.py +0 -0
  229. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/language.py +0 -0
  230. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/__init__.py +0 -0
  231. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/authoring.py +0 -0
  232. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
  233. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
  234. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
  235. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
  236. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
  237. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/registry.py +0 -0
  238. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
  239. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
  240. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
  241. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
  242. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/merge/__init__.py +0 -0
  243. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/merge/graph_merger.py +0 -0
  244. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/multigraph/__init__.py +0 -0
  245. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  246. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/narrative/__init__.py +0 -0
  247. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/narrative/bake.py +0 -0
  248. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/narrative/generation.py +0 -0
  249. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/narrative/query.py +0 -0
  250. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/narrative/registry.py +0 -0
  251. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/narrative/site_story.py +0 -0
  252. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/__init__.py +0 -0
  253. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
  254. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/author_node.py +0 -0
  255. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/base_node.py +0 -0
  256. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  257. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/document_node.py +0 -0
  258. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
  259. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
  260. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/dtc_node.py +0 -0
  261. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
  262. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  263. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  264. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  265. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
  266. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
  267. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/graph_node.py +0 -0
  268. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/group_node.py +0 -0
  269. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/hdt_node.py +0 -0
  270. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
  271. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/license_node.py +0 -0
  272. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/narrative_node.py +0 -0
  273. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  274. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/project_node.py +0 -0
  275. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/property_node.py +0 -0
  276. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/representation_node.py +0 -0
  277. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
  278. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/resource_node.py +0 -0
  279. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  280. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  281. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/study_node.py +0 -0
  282. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/nodes/translation_node.py +0 -0
  283. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/ownership.py +0 -0
  284. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
  285. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/photogrammetry/delta.py +0 -0
  286. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/publication.py +0 -0
  287. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/rapporti.py +0 -0
  288. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resolvers/__init__.py +0 -0
  289. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  290. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  291. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resources/__init__.py +0 -0
  292. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resources/addresses.py +0 -0
  293. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resources/files.py +0 -0
  294. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resources/fs_backend.py +0 -0
  295. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resources/minio_backend.py +0 -0
  296. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resources/resolver.py +0 -0
  297. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/resources/tiles3tz.py +0 -0
  298. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/rights.py +0 -0
  299. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/shelf/__init__.py +0 -0
  300. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/shelf/core.py +0 -0
  301. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/stamp/__init__.py +0 -0
  302. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/stamp/absorb.py +0 -0
  303. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/stamp/emit.py +0 -0
  304. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/stamp/hints.py +0 -0
  305. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/stamp/identity.py +0 -0
  306. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/study.py +0 -0
  307. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/__init__.py +0 -0
  308. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/_db_handle.py +0 -0
  309. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
  310. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/_workspace.py +0 -0
  311. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
  312. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/edge_registry.py +0 -0
  313. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
  314. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/graph_projector.py +0 -0
  315. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/graphml_writer.py +0 -0
  316. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/group_projector.py +0 -0
  317. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/group_store.py +0 -0
  318. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/ingest_result.py +0 -0
  319. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/paradata_store.py +0 -0
  320. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
  321. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/rapporti.py +0 -0
  322. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/uuid7.py +0 -0
  323. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
  324. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/vocab_types.py +0 -0
  325. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/yed_classifier.py +0 -0
  326. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/yed_detector.py +0 -0
  327. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
  328. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
  329. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
  330. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
  331. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  332. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  333. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/temporal/__init__.py +0 -0
  334. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/temporal/inference_engine.py +0 -0
  335. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/tools/__init__.py +0 -0
  336. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/tools/consumer_drift.py +0 -0
  337. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
  338. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/tools/deliverable_report.py +0 -0
  339. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
  340. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
  341. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
  342. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/tools/wheel_drift.py +0 -0
  343. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/transforms/__init__.py +0 -0
  344. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  345. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/transforms/compact.py +0 -0
  346. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  347. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/translation.py +0 -0
  348. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/utils/__init__.py +0 -0
  349. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/utils/utils.py +0 -0
  350. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/utils/visual_layout.py +0 -0
  351. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy/zero_hour.py +0 -0
  352. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  353. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy.egg-info/requires.txt +0 -0
  354. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/src/s3dgraphy.egg-info/top_level.txt +0 -0
  355. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_acquisition.py +0 -0
  356. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_acquisition_fs.py +0 -0
  357. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_add_resource.py +0 -0
  358. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_ai_validation_nodes.py +0 -0
  359. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_api_surface.py +0 -0
  360. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_asset_dtc_protocol.py +0 -0
  361. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_aton_shapes.py +0 -0
  362. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_attach_only.py +0 -0
  363. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_authority_projection.py +0 -0
  364. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_authority_resolver.py +0 -0
  365. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_blend_locator.py +0 -0
  366. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_canonical_document_rename.py +0 -0
  367. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_canvas_metadata_import.py +0 -0
  368. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_capture_acquisition.py +0 -0
  369. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_capture_rdf_class.py +0 -0
  370. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_chronology_on_request.py +0 -0
  371. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_coating_unit.py +0 -0
  372. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_composite_node_name.py +0 -0
  373. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_connection_resolver.py +0 -0
  374. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_consumer_drift.py +0 -0
  375. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_container.py +0 -0
  376. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_containment_tpq.py +0 -0
  377. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_contract.py +0 -0
  378. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_contract_consumer.py +0 -0
  379. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_convert_command.py +0 -0
  380. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_crdt.py +0 -0
  381. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_datamodel_fingerprint.py +0 -0
  382. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_datamodel_i18n.py +0 -0
  383. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_deterministic_ids.py +0 -0
  384. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dev29_em_sourcelist.py +0 -0
  385. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dev29_file_set_stamp.py +0 -0
  386. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dev29_graphml_without_a_database.py +0 -0
  387. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dev29_image_set_texturing.py +0 -0
  388. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dev29_not_georeferenced.py +0 -0
  389. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dev29_one_act_n_outputs.py +0 -0
  390. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dev29_ttl_round_trip.py +0 -0
  391. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dev30_decisions.py +0 -0
  392. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_devices.py +0 -0
  393. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dissemination_tombstones.py +0 -0
  394. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dove_sta_il_testo.py +0 -0
  395. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dtc_corpus.py +0 -0
  396. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dtc_ingest.py +0 -0
  397. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dtc_neighbourhood.py +0 -0
  398. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dtc_projection.py +0 -0
  399. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_dtc_residency.py +0 -0
  400. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_edge_ui_phrases.py +0 -0
  401. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_editorial.py +0 -0
  402. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
  403. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_emjson_roundtrip.py +0 -0
  404. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_emjson_schema_version.py +0 -0
  405. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
  406. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_epoch_undated_import.py +0 -0
  407. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_explicit_node_type_marker.py +0 -0
  408. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_extracted_from_unit.py +0 -0
  409. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_filtered_import.py +0 -0
  410. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_fmpxml_importer.py +0 -0
  411. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_fs_backend.py +0 -0
  412. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_functional_units.py +0 -0
  413. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_georeference_scene.py +0 -0
  414. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_gltf_stitch.py +0 -0
  415. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_glyph_paths.py +0 -0
  416. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_graph_indices_edges.py +0 -0
  417. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_graph_scope_migration.py +0 -0
  418. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_hdto_projection.py +0 -0
  419. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_header_key_aliases.py +0 -0
  420. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_i_generi_dei_passi.py +0 -0
  421. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_iiif.py +0 -0
  422. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_il_modo_d_accesso.py +0 -0
  423. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_il_modo_dal_relay.py +0 -0
  424. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_il_proprietario_si_legge.py +0 -0
  425. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_il_riallineamento.py +0 -0
  426. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_importer_edge_hygiene.py +0 -0
  427. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_ipynb_exporter.py +0 -0
  428. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_la_lingua_alla_nascita.py +0 -0
  429. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_la_lingua_dei_dati.py +0 -0
  430. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_la_lingua_nell_op.py +0 -0
  431. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_la_riga_d_intestazione.py +0 -0
  432. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_latex_exporter.py +0 -0
  433. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_le_traduzioni.py +0 -0
  434. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_lossless_roundtrip.py +0 -0
  435. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_mapping_authoring.py +0 -0
  436. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_mapping_csv_and_relations.py +0 -0
  437. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_masonry_unit.py +0 -0
  438. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_material_color.py +0 -0
  439. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_merge_conflicts.py +0 -0
  440. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_metashape_project.py +0 -0
  441. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_migrate_legacy_proxy.py +0 -0
  442. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_minio_backend.py +0 -0
  443. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_authorship.py +0 -0
  444. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_bake_docx.py +0 -0
  445. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_figures.py +0 -0
  446. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_generation.py +0 -0
  447. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_mentions.py +0 -0
  448. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_node.py +0 -0
  449. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_query.py +0 -0
  450. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_scaffolder.py +0 -0
  451. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_site_place.py +0 -0
  452. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_narrative_unvalidated_export.py +0 -0
  453. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_node_datamodel_registry.py +0 -0
  454. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_node_type_map_integrity.py +0 -0
  455. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_one_spelling_writers.py +0 -0
  456. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_pg_importer.py +0 -0
  457. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_photogrammetry_delta.py +0 -0
  458. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_physical_relation_spellings.py +0 -0
  459. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_piu_indirizzi.py +0 -0
  460. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_promotion.py +0 -0
  461. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_property_owners.py +0 -0
  462. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_proxy_resource.py +0 -0
  463. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_proxy_retype.py +0 -0
  464. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_psx_locator.py +0 -0
  465. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_pyarchinit_tier2.py +0 -0
  466. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_qualia_dai_d7_d8.py +0 -0
  467. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_rdf_embedding.py +0 -0
  468. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_rdf_reverse_edges.py +0 -0
  469. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_rdf_roundtrip.py +0 -0
  470. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_reading_coords.py +0 -0
  471. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_reading_glb.py +0 -0
  472. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_reading_migration.py +0 -0
  473. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_reading_place.py +0 -0
  474. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_reading_rdf.py +0 -0
  475. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_recompute_warnings.py +0 -0
  476. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_release.py +0 -0
  477. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_reproject.py +0 -0
  478. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_resource_file_node.py +0 -0
  479. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_resource_files_implicit.py +0 -0
  480. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_resource_layer.py +0 -0
  481. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_resource_representations.py +0 -0
  482. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_resource_revision.py +0 -0
  483. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_resource_tier.py +0 -0
  484. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_reverse_edges.py +0 -0
  485. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_rm_container_node_group.py +0 -0
  486. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_semantic_purity.py +0 -0
  487. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_shelf.py +0 -0
  488. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_shelf_facets.py +0 -0
  489. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_shelf_hatting.py +0 -0
  490. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_shelf_role_uri_table.py +0 -0
  491. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_shipped_mappings.py +0 -0
  492. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_source_list_mapping.py +0 -0
  493. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_source_text.py +0 -0
  494. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_stamp.py +0 -0
  495. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_stamp_hints.py +0 -0
  496. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_stamp_title_description.py +0 -0
  497. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_store_backed_geometry.py +0 -0
  498. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_stratiminer_api.py +0 -0
  499. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_study_metadata.py +0 -0
  500. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_tileset_resource.py +0 -0
  501. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_ttl_roundtrip.py +0 -0
  502. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_unit_definition.py +0 -0
  503. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_verifica_provenance.py +0 -0
  504. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_visual_assets.py +0 -0
  505. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_wheel_drift.py +0 -0
  506. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
  507. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_xlsx_importer_graph_init.py +0 -0
  508. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/tests/test_xlsx_source_column.py +0 -0
  509. {s3dgraphy-1.6.0.dev30 → s3dgraphy-1.6.0.dev31}/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.dev30
3
+ Version: 1.6.0.dev31
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.dev30"
7
+ version = "1.6.0.dev31"
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.dev30"
1
+ __version__ = "1.6.0.dev31"
2
2
  __datamodel_version__ = "1.5.5" # s3Dgraphy connections datamodel version
3
3
 
4
4
  # s3Dgraphy/__init__.py
@@ -9,9 +9,24 @@ The decision (E.D., 2026-08-13): **an em.json/emj is always a container**::
9
9
  "shelf": { ... em_collection: "ShelfGraph" },
10
10
  "dtc": { ... em_collection: "DTCCorpus" }
11
11
  },
12
- "active_graph_id": "<graph id>"
12
+ "active_graph_id": "<graph id>",
13
+ "layout": { ...the active graph's layout, a copy... }
13
14
  }
14
15
 
16
+ **One layout per graph (2026-10-02).** Each member carries its own arrangement
17
+ INSIDE its section, ``graphs.<id>.layout`` (positions, lanes, canvas, folded
18
+ groups — the single-graph ``layout`` object, unchanged). The file-level
19
+ ``layout`` stays, written as a COPY of the active graph's, for whoever reads only
20
+ that (Heriverse, the files written before today). Reading:
21
+ ``graphs.<id>.layout`` when the member has one; otherwise the file-level
22
+ ``layout`` goes to the ACTIVE graph only (or to the only one); the other graphs
23
+ of an old file have no arrangement and are laid out afresh, which the reader
24
+ says once. Until today the file had ONE layout for every graph, and whichever
25
+ graph was saved first gave it away: measured on San Pietro, the layout in the
26
+ file was an empty seed's and the real graph had lost every position.
27
+ ``EMStudio/frontend/src/container.ts`` applies the same rule, and the shared
28
+ fixture ``tests/fixtures/container-layout-parity.json`` keeps the two equal.
29
+
15
30
  A study is one or more graphs plus its shelf and its **documentation** (the DTC
16
31
  corpus, 2026-08-17: acquisitions, transformations and the resources they are
17
32
  about — a forest that shares its leaves, and ontologically not a matrix); a
@@ -70,6 +85,9 @@ from .graph import Graph
70
85
  #: The key that makes a document a container.
71
86
  GRAPHS_KEY = "graphs"
72
87
 
88
+ #: Where a member keeps its own arrangement: ``graphs.<id>.layout``.
89
+ LAYOUT_KEY = "layout"
90
+
73
91
  #: The conventional member id of the project shelf. Any id works — the marker
74
92
  #: (`graph.data["em_collection"] == "ShelfGraph"`) is what identifies it — but
75
93
  #: this is the one Heriverse uses, so writing it keeps the two aligned.
@@ -154,8 +172,15 @@ def content_digest(doc: Dict[str, Any]) -> str:
154
172
  """
155
173
  import hashlib
156
174
 
175
+ # a member's own layout is arrangement, not content: moving a box inside
176
+ # one graph of a project is no more a revision than it was at file level
177
+ graphs = {
178
+ gid: ({k: v for k, v in section.items() if k != LAYOUT_KEY}
179
+ if isinstance(section, dict) else section)
180
+ for gid, section in (doc.get(GRAPHS_KEY) or {}).items()
181
+ }
157
182
  payload = {
158
- GRAPHS_KEY: doc.get(GRAPHS_KEY) or {},
183
+ GRAPHS_KEY: graphs,
159
184
  "active_graph_id": doc.get("active_graph_id"),
160
185
  }
161
186
  blob = json.dumps(payload, sort_keys=True, ensure_ascii=False,
@@ -185,7 +210,13 @@ class Container:
185
210
  corpus: Optional[Graph] = None
186
211
  active_graph_id: Optional[str] = None
187
212
  header: Dict[str, Any] = field(default_factory=dict)
213
+ #: The ACTIVE graph's layout, for a caller that has one graph and one
214
+ #: arrangement (``export_emjson``). Used only for the active graph, and only
215
+ #: when ``layouts`` has no entry for it — it is never given to another graph.
188
216
  layout: Dict[str, Any] = field(default_factory=dict)
217
+ #: One layout per graph id (``graphs.<id>.layout`` in the file). A graph with
218
+ #: no entry has no arrangement and is laid out afresh by whoever draws it.
219
+ layouts: Dict[str, Dict[str, Any]] = field(default_factory=dict)
189
220
  #: P3 · which revision of the work this is (None = never versioned; the
190
221
  #: first write gives it a v1 rather than pretending it always had one)
191
222
  version: Optional[ProjectVersion] = None
@@ -202,6 +233,21 @@ class Container:
202
233
  """A container-of-one — the shape a legacy file opens as."""
203
234
  return len(self.graphs) == 1
204
235
 
236
+ def layout_of(self, graph_id: Optional[str]) -> Optional[Dict[str, Any]]:
237
+ """The layout of ONE graph, or None when it has none.
238
+
239
+ `layouts` first; the convenience `layout` only for the active graph. A
240
+ graph is never handed another graph's arrangement — that was the bug.
241
+ """
242
+ if graph_id is None:
243
+ return None
244
+ if graph_id in self.layouts:
245
+ return self.layouts[graph_id]
246
+ active = self.active_graph_id or next(iter(self.graphs), None)
247
+ if graph_id == active and self.layout:
248
+ return self.layout
249
+ return None
250
+
205
251
 
206
252
  def is_container(doc: Any) -> bool:
207
253
  """True when the document carries the `graphs` map.
@@ -231,6 +277,49 @@ def is_dtc_corpus_member(graph_section: Any) -> bool:
231
277
  return is_dtc_corpus(graph_section)
232
278
 
233
279
 
280
+ def resolve_layouts(graph_ids: List[str],
281
+ own: Dict[str, Dict[str, Any]],
282
+ file_layout: Dict[str, Any],
283
+ active_graph_id: Optional[str],
284
+ ) -> Tuple[Dict[str, Dict[str, Any]], List[str]]:
285
+ """Which layout each graph of a file gets, and which ones get none.
286
+
287
+ THE reading rule, the same as ``container.ts::resolveLayouts``:
288
+
289
+ 1. a member that carries ``graphs.<id>.layout`` keeps its own;
290
+ 2. otherwise the file-level ``layout`` goes to the ACTIVE graph — or to the
291
+ only one — and to no other: in a file written before per-graph layouts it
292
+ was the arrangement of one graph, and giving it to the rest was the bug;
293
+ 3. the remaining graphs get nothing and are laid out afresh. They are
294
+ returned as ``fresh`` only for an OLD file — one with a layout to give and
295
+ no member carrying its own: there, a graph's positions may have been lost
296
+ to another's, and that is worth saying once. In a file written with
297
+ per-graph layouts a graph without one simply has none (never laid out),
298
+ and saying so at every open would be noise.
299
+ """
300
+ layouts: Dict[str, Dict[str, Any]] = {}
301
+ fresh: List[str] = []
302
+ heir = active_graph_id if active_graph_id in graph_ids else (
303
+ graph_ids[0] if graph_ids else None)
304
+ if len(graph_ids) == 1:
305
+ heir = graph_ids[0]
306
+ for gid in graph_ids:
307
+ if gid in own:
308
+ layouts[gid] = own[gid]
309
+ elif gid == heir and file_layout:
310
+ layouts[gid] = file_layout
311
+ elif file_layout and not own:
312
+ fresh.append(gid)
313
+ return layouts, fresh
314
+
315
+
316
+ def layout_fresh_warning(fresh: List[str]) -> str:
317
+ """The one sentence about the graphs of an old file that had no layout."""
318
+ return (f"{len(fresh)} graph(s) of this file carry no layout of their own "
319
+ f"(written before per-graph layouts): laid out afresh — "
320
+ f"{', '.join(fresh)}")
321
+
322
+
234
323
  def parse_container(doc: Dict[str, Any], *,
235
324
  project_root: Optional[str] = None) -> Tuple[Container, List[str]]:
236
325
  """Read a container OR a legacy single-graph document.
@@ -249,7 +338,8 @@ def parse_container(doc: Dict[str, Any], *,
249
338
  raise EmJsonImportError("not an em.json document")
250
339
 
251
340
  header = dict(doc.get("header") or {})
252
- layout = dict(doc.get("layout") or {})
341
+ file_layout = doc.get(LAYOUT_KEY)
342
+ file_layout = dict(file_layout) if isinstance(file_layout, dict) else {}
253
343
 
254
344
  if not is_container(doc):
255
345
  # LEGACY single-graph: read it with the reader that has always read it,
@@ -259,18 +349,21 @@ def parse_container(doc: Dict[str, Any], *,
259
349
  graphs={graph.graph_id: graph},
260
350
  active_graph_id=graph.graph_id,
261
351
  header=header,
262
- layout=layout,
352
+ layouts={graph.graph_id: file_layout} if file_layout else {},
263
353
  version=ProjectVersion.from_dict(doc.get(VERSION_KEY)),
264
354
  )
265
355
  return container, list(graph_warnings)
266
356
 
267
- container = Container(header=header, layout=layout,
357
+ container = Container(header=header,
268
358
  version=ProjectVersion.from_dict(doc.get(VERSION_KEY)))
359
+ own_layouts: Dict[str, Dict[str, Any]] = {}
269
360
  members = doc[GRAPHS_KEY]
270
361
  for member_id, section in members.items():
271
362
  if not isinstance(section, dict):
272
363
  warnings.append(f"container member '{member_id}' is not a graph; skipped")
273
364
  continue
365
+ own = section.get(LAYOUT_KEY)
366
+ section = {k: v for k, v in section.items() if k != LAYOUT_KEY}
274
367
  # Each member is parsed by the SAME single-graph reader, by handing it a
275
368
  # one-graph document. The alternative — a second parser for members —
276
369
  # would be a second place for the em.json semantics to live.
@@ -295,6 +388,8 @@ def parse_container(doc: Dict[str, Any], *,
295
388
  container.corpus = graph
296
389
  else:
297
390
  container.graphs[graph.graph_id] = graph
391
+ if isinstance(own, dict):
392
+ own_layouts[graph.graph_id] = dict(own)
298
393
 
299
394
  active = doc.get("active_graph_id")
300
395
  if isinstance(active, str) and active in container.graphs:
@@ -306,6 +401,11 @@ def parse_container(doc: Dict[str, Any], *,
306
401
  f"falling back to the first graph")
307
402
  container.active_graph_id = next(iter(container.graphs), None)
308
403
 
404
+ container.layouts, fresh = resolve_layouts(
405
+ list(container.graphs), own_layouts, file_layout, container.active_graph_id)
406
+ if fresh:
407
+ warnings.append(layout_fresh_warning(fresh))
408
+
309
409
  if not container.graphs and (container.shelf is not None
310
410
  or container.corpus is not None):
311
411
  held = " and ".join(
@@ -337,6 +437,9 @@ def build_container(container: Container) -> Dict[str, Any]:
337
437
  graphs: Dict[str, Any] = {}
338
438
  for graph_id, graph in container.graphs.items():
339
439
  graphs[graph_id] = _member_section(graph)
440
+ own = container.layout_of(graph_id)
441
+ if own:
442
+ graphs[graph_id][LAYOUT_KEY] = own
340
443
  if container.shelf is not None:
341
444
  shelf_id = container.shelf.graph_id or SHELF_MEMBER_ID
342
445
  graphs[shelf_id] = _member_section(container.shelf)
@@ -369,8 +472,10 @@ def build_container(container: Container) -> Dict[str, Any]:
369
472
  active = container.active_graph_id or next(iter(container.graphs), None)
370
473
  if active:
371
474
  doc["active_graph_id"] = active
372
- if container.layout:
373
- doc["layout"] = container.layout
475
+ # the file-level copy, for whoever reads only that: the ACTIVE graph's
476
+ active_layout = container.layout_of(active)
477
+ if active_layout:
478
+ doc[LAYOUT_KEY] = active_layout
374
479
  if container.version is not None:
375
480
  doc[VERSION_KEY] = container.version.as_dict()
376
481
  return doc
@@ -855,6 +960,10 @@ def merge_into_container(container: Container, other: Container) -> MergeReport:
855
960
  report.merged_graphs.append(graph_id)
856
961
  else:
857
962
  container.graphs[graph_id] = incoming
963
+ # …with its own arrangement: a graph that arrives whole arrives laid out
964
+ theirs = other.layout_of(graph_id)
965
+ if theirs:
966
+ container.layouts[graph_id] = theirs
858
967
  report.added_graphs.append(graph_id)
859
968
  report.added_nodes += len(list(incoming.nodes))
860
969
  report.added_edges += len(list(incoming.edges))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: s3dgraphy
3
- Version: 1.6.0.dev30
3
+ Version: 1.6.0.dev31
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>
@@ -370,6 +370,7 @@ tests/test_composite_node_name.py
370
370
  tests/test_connection_resolver.py
371
371
  tests/test_consumer_drift.py
372
372
  tests/test_container.py
373
+ tests/test_container_layouts.py
373
374
  tests/test_containment_tpq.py
374
375
  tests/test_contract.py
375
376
  tests/test_contract_consumer.py
@@ -0,0 +1,63 @@
1
+ """One layout per graph in the em.json container (MICRO-OGNI-FILE-I-SUOI-GRAFI, F4).
2
+
3
+ The cases live in `tests/fixtures/container-layout-parity.json`, and EMStudio's
4
+ `check-container.mjs` reads a byte copy of the same file: the two readers and the
5
+ two writers of the container are held to ONE rule, case by case.
6
+ """
7
+
8
+ import json
9
+ import pathlib
10
+
11
+ import pytest
12
+
13
+ from s3dgraphy.container import (build_container, content_digest,
14
+ parse_container)
15
+
16
+ FIXTURE = pathlib.Path(__file__).parent / "fixtures" / "container-layout-parity.json"
17
+ CASES = json.loads(FIXTURE.read_text(encoding="utf-8"))["cases"]
18
+
19
+
20
+ @pytest.mark.parametrize("case", CASES, ids=[c["name"] for c in CASES])
21
+ def test_reading_gives_each_graph_its_own_layout(case):
22
+ container, warnings = parse_container(json.loads(json.dumps(case["doc"])))
23
+ assert container.layouts == case["expect"]["layouts"]
24
+ fresh = [w for w in warnings if "laid out afresh" in w]
25
+ if case["expect"]["fresh"]:
26
+ assert len(fresh) == 1, "said ONCE, not once per graph"
27
+ for gid in case["expect"]["fresh"]:
28
+ assert gid in fresh[0]
29
+ else:
30
+ assert fresh == []
31
+
32
+
33
+ @pytest.mark.parametrize("case", CASES, ids=[c["name"] for c in CASES])
34
+ def test_writing_puts_each_layout_in_its_section(case):
35
+ container, _ = parse_container(json.loads(json.dumps(case["doc"])))
36
+ doc = build_container(container)
37
+ for gid, want in case["built"]["members"].items():
38
+ assert doc["graphs"][gid].get("layout") == want, gid
39
+ assert doc.get("layout") == case["built"]["layout"]
40
+ # …and the round trip reads back what it wrote, with nothing left to say
41
+ again, warnings = parse_container(json.loads(json.dumps(doc)))
42
+ want_layouts = {g: l for g, l in case["built"]["members"].items() if l}
43
+ assert again.layouts == want_layouts
44
+ assert not [w for w in warnings if "laid out afresh" in w]
45
+
46
+
47
+ def test_moving_a_box_in_one_graph_is_not_a_new_version():
48
+ case = next(c for c in CASES if c["name"].startswith("new container"))
49
+ container, _ = parse_container(json.loads(json.dumps(case["doc"])))
50
+ first = content_digest(build_container(container))
51
+ container.layouts["a"] = {"positions": {"US1": {"x": 500, "y": 9, "w": 90, "h": 30}}}
52
+ assert content_digest(build_container(container)) == first
53
+
54
+
55
+ def test_the_convenience_layout_never_reaches_another_graph():
56
+ """`Container.layout` (what `export_emjson` sets) is the ACTIVE graph's."""
57
+ case = next(c for c in CASES if c["name"].startswith("no layout anywhere"))
58
+ container, _ = parse_container(json.loads(json.dumps(case["doc"])))
59
+ container.layout = {"positions": {"US1": {"x": 1, "y": 1, "w": 90, "h": 30}}}
60
+ doc = build_container(container)
61
+ assert doc["graphs"]["a"]["layout"] == container.layout
62
+ assert "layout" not in doc["graphs"]["b"]
63
+ assert doc["layout"] == container.layout
File without changes