s3dgraphy 1.6.0.dev55__tar.gz → 1.6.0.dev57__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 (567) hide show
  1. {s3dgraphy-1.6.0.dev55/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev57}/PKG-INFO +1 -1
  2. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/pyproject.toml +1 -1
  3. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/em_visual_rules.json +26 -1
  4. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/__init__.py +1 -1
  5. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/api.py +18 -0
  6. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/paradata_view.py +221 -0
  7. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
  8. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy.egg-info/SOURCES.txt +1 -0
  9. s3dgraphy-1.6.0.dev57/tests/test_threed_instances.py +150 -0
  10. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/LICENSE +0 -0
  11. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/MANIFEST.in +0 -0
  12. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/README.md +0 -0
  13. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/setup.cfg +0 -0
  14. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
  15. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
  16. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
  17. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
  18. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
  19. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/em.ttl +0 -0
  20. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  21. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  22. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
  23. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
  24. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  25. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
  26. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
  27. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  28. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
  29. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  30. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  31. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
  32. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
  33. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
  34. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
  35. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
  36. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
  37. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
  38. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
  39. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  40. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  41. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
  42. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
  43. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
  44. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  45. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
  46. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  47. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  48. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
  49. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  50. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
  51. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  52. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
  53. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  54. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
  55. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
  56. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  57. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
  58. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
  59. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
  60. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
  61. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
  62. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  63. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
  64. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
  65. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  66. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
  67. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  68. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
  69. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
  70. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
  71. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
  72. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
  73. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
  74. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
  75. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
  76. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
  77. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
  78. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
  79. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
  80. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
  81. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
  82. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
  83. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
  84. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
  85. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
  86. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
  87. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
  88. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
  89. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
  90. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
  91. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
  92. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
  93. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
  94. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
  95. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
  96. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
  97. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
  98. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  99. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
  100. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
  101. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
  102. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
  103. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
  104. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
  105. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
  106. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
  107. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
  108. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
  109. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
  110. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  111. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
  112. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
  113. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
  114. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
  115. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
  116. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
  117. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
  118. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
  119. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  120. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
  121. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  122. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  123. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
  124. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
  125. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
  126. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
  127. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
  128. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
  129. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
  130. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  131. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  132. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  133. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  134. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  135. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  136. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  137. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  138. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  139. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  140. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  141. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  142. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  143. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  144. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  145. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  146. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
  147. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/__main__.py +0 -0
  148. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/acquisition/__init__.py +0 -0
  149. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/acquisition/acquire.py +0 -0
  150. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/acquisition/descriptor.py +0 -0
  151. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/acquisition/mapping.py +0 -0
  152. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/ai_validation.py +0 -0
  153. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/annotation/__init__.py +0 -0
  154. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
  155. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/annotation/paradata.py +0 -0
  156. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/annotation/reading.py +0 -0
  157. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/authorities/__init__.py +0 -0
  158. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/authorities/resolver.py +0 -0
  159. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
  160. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
  161. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
  162. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
  163. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
  164. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
  165. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/classification.py +0 -0
  166. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/container.py +0 -0
  167. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/contract/__init__.py +0 -0
  168. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/contract/connector.py +0 -0
  169. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/contract/consumer.py +0 -0
  170. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/contract/core.py +0 -0
  171. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/contract/reference.py +0 -0
  172. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/crdt.py +0 -0
  173. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  174. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/datamodel.py +0 -0
  175. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/diagnostics.py +0 -0
  176. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/dissemination.py +0 -0
  177. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/dtc/__init__.py +0 -0
  178. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/dtc/capture.py +0 -0
  179. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/dtc/corpus.py +0 -0
  180. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/dtc/devices.py +0 -0
  181. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/dtc/ingest.py +0 -0
  182. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
  183. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/dtc/residency.py +0 -0
  184. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/edges/__init__.py +0 -0
  185. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/edges/connection_resolver.py +0 -0
  186. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/edges/connections_loader.py +0 -0
  187. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/edges/edge.py +0 -0
  188. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/editorial.py +0 -0
  189. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/__init__.py +0 -0
  190. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
  191. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
  192. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  193. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
  194. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  195. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  196. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
  197. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  198. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  199. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  200. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  201. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  202. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  203. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  204. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  205. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  206. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  207. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/html_exporter.py +0 -0
  208. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
  209. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/json_exporter.py +0 -0
  210. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
  211. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
  212. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  213. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/geometry/__init__.py +0 -0
  214. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/geometry/aton.py +0 -0
  215. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/geometry/gltf.py +0 -0
  216. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/geometry/migrate.py +0 -0
  217. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/geometry/proxy.py +0 -0
  218. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/geometry/reading_glb.py +0 -0
  219. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/geometry/store_backed.py +0 -0
  220. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/geometry/wkt.py +0 -0
  221. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/graph.py +0 -0
  222. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/hdto.py +0 -0
  223. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/iiif.py +0 -0
  224. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/__init__.py +0 -0
  225. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/base_importer.py +0 -0
  226. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/csv_importer.py +0 -0
  227. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/emjson_importer.py +0 -0
  228. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
  229. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/import_graphml.py +0 -0
  230. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
  231. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/metashape_project.py +0 -0
  232. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
  233. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/qualia_importer.py +0 -0
  234. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/rdf_importer.py +0 -0
  235. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/sheet_header.py +0 -0
  236. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/source_text.py +0 -0
  237. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
  238. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
  239. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/importer/xml_importer.py +0 -0
  240. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/indices.py +0 -0
  241. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/labels.py +0 -0
  242. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/language.py +0 -0
  243. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/links.py +0 -0
  244. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/__init__.py +0 -0
  245. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/authoring.py +0 -0
  246. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
  247. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
  248. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
  249. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
  250. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
  251. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/registry.py +0 -0
  252. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
  253. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
  254. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
  255. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
  256. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/merge/__init__.py +0 -0
  257. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/merge/graph_merger.py +0 -0
  258. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/multigraph/__init__.py +0 -0
  259. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  260. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/narrative/__init__.py +0 -0
  261. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/narrative/bake.py +0 -0
  262. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/narrative/generation.py +0 -0
  263. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/narrative/query.py +0 -0
  264. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/narrative/registry.py +0 -0
  265. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/narrative/site_story.py +0 -0
  266. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/__init__.py +0 -0
  267. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
  268. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/author_node.py +0 -0
  269. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/base_node.py +0 -0
  270. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  271. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/document_node.py +0 -0
  272. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
  273. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
  274. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/dtc_node.py +0 -0
  275. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
  276. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  277. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  278. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  279. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
  280. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
  281. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/graph_node.py +0 -0
  282. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/group_node.py +0 -0
  283. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/hdt_node.py +0 -0
  284. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
  285. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/license_node.py +0 -0
  286. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/narrative_node.py +0 -0
  287. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  288. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/project_node.py +0 -0
  289. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/property_node.py +0 -0
  290. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/representation_node.py +0 -0
  291. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
  292. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/resource_node.py +0 -0
  293. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  294. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  295. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/study_node.py +0 -0
  296. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/nodes/translation_node.py +0 -0
  297. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/ownership.py +0 -0
  298. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
  299. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/photogrammetry/delta.py +0 -0
  300. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/project_tree.py +0 -0
  301. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/property_source.py +0 -0
  302. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/publication.py +0 -0
  303. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/rapporti.py +0 -0
  304. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resolvers/__init__.py +0 -0
  305. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  306. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  307. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/__init__.py +0 -0
  308. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/addresses.py +0 -0
  309. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/alignment.py +0 -0
  310. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/files.py +0 -0
  311. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/fs_backend.py +0 -0
  312. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/locate.py +0 -0
  313. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/minio_backend.py +0 -0
  314. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/moved.py +0 -0
  315. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/object_store.py +0 -0
  316. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/resolver.py +0 -0
  317. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/storage_rows.py +0 -0
  318. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/tiles3tz.py +0 -0
  319. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/resources/versions.py +0 -0
  320. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/rights.py +0 -0
  321. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/room_import/__init__.py +0 -0
  322. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/room_import/access.py +0 -0
  323. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/room_import/engine.py +0 -0
  324. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/room_import/errors.py +0 -0
  325. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/room_import/inventory.py +0 -0
  326. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/room_import/node.py +0 -0
  327. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/room_import/pack.py +0 -0
  328. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/room_import/trust.py +0 -0
  329. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/shelf/__init__.py +0 -0
  330. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/shelf/core.py +0 -0
  331. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/spatiotemporal.py +0 -0
  332. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/stamp/__init__.py +0 -0
  333. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/stamp/absorb.py +0 -0
  334. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/stamp/emit.py +0 -0
  335. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/stamp/hints.py +0 -0
  336. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/stamp/identity.py +0 -0
  337. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/study.py +0 -0
  338. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/__init__.py +0 -0
  339. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/_db_handle.py +0 -0
  340. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
  341. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/_workspace.py +0 -0
  342. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
  343. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/edge_registry.py +0 -0
  344. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
  345. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/graph_projector.py +0 -0
  346. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/graphml_writer.py +0 -0
  347. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/group_projector.py +0 -0
  348. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/group_store.py +0 -0
  349. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/ingest_result.py +0 -0
  350. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/paradata_store.py +0 -0
  351. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
  352. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/rapporti.py +0 -0
  353. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/uuid7.py +0 -0
  354. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
  355. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/vocab_types.py +0 -0
  356. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/yed_classifier.py +0 -0
  357. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/yed_detector.py +0 -0
  358. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
  359. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
  360. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
  361. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
  362. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  363. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  364. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/temporal/__init__.py +0 -0
  365. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/temporal/inference_engine.py +0 -0
  366. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/__init__.py +0 -0
  367. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/consumer_drift.py +0 -0
  368. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
  369. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/deliverable_report.py +0 -0
  370. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
  371. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
  372. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/node_finder.py +0 -0
  373. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
  374. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/tools/wheel_drift.py +0 -0
  375. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/transforms/__init__.py +0 -0
  376. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  377. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/transforms/compact.py +0 -0
  378. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  379. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/translation.py +0 -0
  380. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/utils/__init__.py +0 -0
  381. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/utils/utils.py +0 -0
  382. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/utils/visual_layout.py +0 -0
  383. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy/zero_hour.py +0 -0
  384. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  385. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy.egg-info/requires.txt +0 -0
  386. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/src/s3dgraphy.egg-info/top_level.txt +0 -0
  387. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_acquisition.py +0 -0
  388. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_acquisition_fs.py +0 -0
  389. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_add_resource.py +0 -0
  390. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_ai_validation_nodes.py +0 -0
  391. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_alternative_labels.py +0 -0
  392. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_api_surface.py +0 -0
  393. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_asset_dtc_protocol.py +0 -0
  394. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_asset_versions.py +0 -0
  395. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_aton_shapes.py +0 -0
  396. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_attach_only.py +0 -0
  397. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_authority_projection.py +0 -0
  398. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_authority_resolver.py +0 -0
  399. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_blend_locator.py +0 -0
  400. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_bucket_alignment.py +0 -0
  401. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_canonical_document_rename.py +0 -0
  402. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_canvas_metadata_import.py +0 -0
  403. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_capture_acquisition.py +0 -0
  404. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_capture_rdf_class.py +0 -0
  405. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_chronology_on_request.py +0 -0
  406. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_coating_unit.py +0 -0
  407. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_composite_node_name.py +0 -0
  408. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_connection_resolver.py +0 -0
  409. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_consumer_drift.py +0 -0
  410. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_container.py +0 -0
  411. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_container_layouts.py +0 -0
  412. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_containment_tpq.py +0 -0
  413. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_contract.py +0 -0
  414. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_contract_consumer.py +0 -0
  415. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_convert_command.py +0 -0
  416. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_crdt.py +0 -0
  417. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_cycle_message_is_cheap.py +0 -0
  418. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_datamodel_fingerprint.py +0 -0
  419. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_datamodel_i18n.py +0 -0
  420. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_deterministic_ids.py +0 -0
  421. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dev29_em_sourcelist.py +0 -0
  422. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dev29_file_set_stamp.py +0 -0
  423. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dev29_graphml_without_a_database.py +0 -0
  424. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dev29_image_set_texturing.py +0 -0
  425. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dev29_not_georeferenced.py +0 -0
  426. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dev29_one_act_n_outputs.py +0 -0
  427. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dev29_ttl_round_trip.py +0 -0
  428. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dev30_decisions.py +0 -0
  429. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_devices.py +0 -0
  430. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dissemination_tombstones.py +0 -0
  431. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dove_sta_il_testo.py +0 -0
  432. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dtc_corpus.py +0 -0
  433. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dtc_ingest.py +0 -0
  434. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dtc_neighbourhood.py +0 -0
  435. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dtc_projection.py +0 -0
  436. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_dtc_residency.py +0 -0
  437. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_edge_outside_graph.py +0 -0
  438. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_edge_ui_phrases.py +0 -0
  439. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_editorial.py +0 -0
  440. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
  441. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_emjson_no_drawing_keys.py +0 -0
  442. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_emjson_roundtrip.py +0 -0
  443. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_emjson_schema_version.py +0 -0
  444. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
  445. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_epoch_undated_import.py +0 -0
  446. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_explicit_node_type_marker.py +0 -0
  447. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_extracted_from_unit.py +0 -0
  448. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_filtered_import.py +0 -0
  449. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_fmpxml_importer.py +0 -0
  450. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_fs_backend.py +0 -0
  451. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_functional_units.py +0 -0
  452. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_georeference_scene.py +0 -0
  453. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_gltf_stitch.py +0 -0
  454. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_glyph_paths.py +0 -0
  455. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_graph_header_code.py +0 -0
  456. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_graph_helpers_indexed.py +0 -0
  457. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_graph_indices_alive.py +0 -0
  458. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_graph_indices_edges.py +0 -0
  459. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_graph_scope_migration.py +0 -0
  460. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_hdto_projection.py +0 -0
  461. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_hdto_study.py +0 -0
  462. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_header_key_aliases.py +0 -0
  463. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_i_generi_dei_passi.py +0 -0
  464. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_iiif.py +0 -0
  465. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_il_modo_d_accesso.py +0 -0
  466. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_il_modo_dal_relay.py +0 -0
  467. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_il_proprietario_si_legge.py +0 -0
  468. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_il_riallineamento.py +0 -0
  469. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_importer_edge_hygiene.py +0 -0
  470. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_ipynb_exporter.py +0 -0
  471. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_issue27_small_points.py +0 -0
  472. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_la_lingua_alla_nascita.py +0 -0
  473. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_la_lingua_dei_dati.py +0 -0
  474. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_la_lingua_nell_op.py +0 -0
  475. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_la_riga_d_intestazione.py +0 -0
  476. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_latex_exporter.py +0 -0
  477. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_le_traduzioni.py +0 -0
  478. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_lod_levels.py +0 -0
  479. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_lossless_roundtrip.py +0 -0
  480. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_mapping_authoring.py +0 -0
  481. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_mapping_csv_and_relations.py +0 -0
  482. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_masonry_unit.py +0 -0
  483. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_material_color.py +0 -0
  484. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_merge_conflicts.py +0 -0
  485. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_metashape_project.py +0 -0
  486. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_migrate_legacy_proxy.py +0 -0
  487. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_minio_backend.py +0 -0
  488. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_authorship.py +0 -0
  489. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_bake_docx.py +0 -0
  490. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_figures.py +0 -0
  491. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_generation.py +0 -0
  492. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_mentions.py +0 -0
  493. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_node.py +0 -0
  494. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_query.py +0 -0
  495. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_scaffolder.py +0 -0
  496. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_site_place.py +0 -0
  497. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_narrative_unvalidated_export.py +0 -0
  498. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_node_datamodel_registry.py +0 -0
  499. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_node_finder.py +0 -0
  500. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_node_type_map_integrity.py +0 -0
  501. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_one_resolver.py +0 -0
  502. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_one_spelling_writers.py +0 -0
  503. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_op_vocabulary.py +0 -0
  504. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_pg_importer.py +0 -0
  505. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_photogrammetry_delta.py +0 -0
  506. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_physical_relation_spellings.py +0 -0
  507. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_piu_indirizzi.py +0 -0
  508. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_promote_keeps_proxy_type.py +0 -0
  509. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_promotion.py +0 -0
  510. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_property_as_source.py +0 -0
  511. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_property_owners.py +0 -0
  512. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_proxy_resource.py +0 -0
  513. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_proxy_retype.py +0 -0
  514. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_psx_locator.py +0 -0
  515. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_pyarchinit_tier2.py +0 -0
  516. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_qualia_dai_d7_d8.py +0 -0
  517. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_rdf_embedding.py +0 -0
  518. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_rdf_reverse_edges.py +0 -0
  519. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_rdf_roundtrip.py +0 -0
  520. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_reading_coords.py +0 -0
  521. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_reading_glb.py +0 -0
  522. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_reading_migration.py +0 -0
  523. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_reading_place.py +0 -0
  524. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_reading_rdf.py +0 -0
  525. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_recompute_warnings.py +0 -0
  526. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_release.py +0 -0
  527. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_reproject.py +0 -0
  528. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_resource_file_node.py +0 -0
  529. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_resource_files_implicit.py +0 -0
  530. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_resource_layer.py +0 -0
  531. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_resource_representations.py +0 -0
  532. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_resource_revision.py +0 -0
  533. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_resource_tier.py +0 -0
  534. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_reverse_edges.py +0 -0
  535. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_rm_container_node_group.py +0 -0
  536. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_room_import.py +0 -0
  537. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_room_import_access.py +0 -0
  538. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_room_import_inventory.py +0 -0
  539. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_room_import_trust.py +0 -0
  540. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_semantic_purity.py +0 -0
  541. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_shelf.py +0 -0
  542. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_shelf_facets.py +0 -0
  543. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_shelf_hatting.py +0 -0
  544. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_shelf_role_uri_table.py +0 -0
  545. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_shipped_mappings.py +0 -0
  546. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_source_list_mapping.py +0 -0
  547. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_source_text.py +0 -0
  548. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_spatiotemporal_entities.py +0 -0
  549. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_stable_study_code.py +0 -0
  550. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_stamp.py +0 -0
  551. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_stamp_hints.py +0 -0
  552. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_stamp_title_description.py +0 -0
  553. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_storage_rows.py +0 -0
  554. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_store_backed_geometry.py +0 -0
  555. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_stratiminer_api.py +0 -0
  556. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_study_metadata.py +0 -0
  557. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_tileset_resource.py +0 -0
  558. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_ttl_roundtrip.py +0 -0
  559. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_unit_definition.py +0 -0
  560. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_verifica_provenance.py +0 -0
  561. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_version_for.py +0 -0
  562. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_visual_assets.py +0 -0
  563. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_wheel_drift.py +0 -0
  564. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
  565. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_xlsx_importer_graph_init.py +0 -0
  566. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/tests/test_xlsx_source_column.py +0 -0
  567. {s3dgraphy-1.6.0.dev55 → s3dgraphy-1.6.0.dev57}/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.dev55
3
+ Version: 1.6.0.dev57
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.dev55"
7
+ version = "1.6.0.dev57"
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,6 +1,6 @@
1
1
  {
2
2
  "formal_language": "EM",
3
- "version": "1.6.34",
3
+ "version": "1.6.36",
4
4
  "_note_material_vs_qualia_color": [
5
5
  "DUE COSE DIVERSE CHE SI CHIAMANO ENTRAMBE color. Non confonderle: e gia successo.",
6
6
  "1) QUI, in node_styles.<tipo>.style.material.rgba_color — il COLORE DEL MATERIALE BLENDER del proxy 3D, in float LINEARI. UNA sola chiave: `rgba_color`. Fino a S8 il file ne usava due (`color` sui 13 tipi stratigrafici, `rgba_color` sugli altri) e get_material_color() ne leggeva una sola, restituendo None per 21 tipi su 38; ora sono unificate e la vecchia `color` e letta solo come tolleranza verso file scritti prima. Un tipo che non diventa mai una mesh NON ha material affatto (i contenitori di gruppo, e da S7 i dieci nodi che rendono per icona): per loro get_material_color() torna None, ed e corretto.",
@@ -9,6 +9,8 @@
9
9
  "In breve: qui si decide di che colore DISEGNARE una US; li si registra di che colore ERA."
10
10
  ],
11
11
  "_changelog": {
12
+ "1.6.36": "THE RM IS BOUND TO THE EPOCH ONLY DIRECTLY (MICRO lo spazio 3D 2, Parte 0, E.D. 16 Oct 2026). threed_instances.representation_model loses `via_property`: an epoch reaches its model only by a direct has_representation_model, the one form the connections datamodel admits (a property is not a source of has_representation_model) and the only one in the data (the 99 RMs of Templu Mare v2). «×N» counts the epochs bound directly.",
13
+ "1.6.35": "RM AND PROXY AMONG THE COMPUTED INSTANCES (MICRO lo spazio 3D, E.D. 11 Oct 2026). New block threed_instances: the proxy of a unit (geometry property → has_semantic_shape → SemanticShape) is drawn in the paradata group of the property, beside it; a representation model is drawn in the paradata group of each epoch that has it (has_representation_model, directly or through an epoch property), with the number of its epochs («×N»). A view: nothing in em.json or RDF. Read by s3dgraphy.paradata_view.threed_instances and units_without_3d.",
12
14
  "1.6.34": "THE AUTHOR AS AN INSTANCE (MICRO le entità spaziotemporali, decided by E.D. 10 Oct 2026: documents, authors and units are spatiotemporal entities, and an author «si istanzia come avviene con i documenti»). paradata_instances gains `authorship`: the author of a reader of the group (the extractor, or the combiner and the extractors it combines) reached by has_author, when the author is not itself a member of the group, is drawn inside the group as an INSTANCE of kind `author`, with the badge of the epoch where the author begins (has_first_epoch). Still a view: nothing is written in em.json or RDF. s3dgraphy.paradata_view.view_instances reads it.",
13
15
  "1.6.32": "THE GLYPHS OF THE 3D OBJECTS (MICRO «grafo reattivo», G9, 9 Oct 2026; drawings approved by E.D. on 6 Oct, APPROVATE.md). representation_model, representation_model_doc (the checkered picture seen three-quarters, with its frame's depth and a shadow on the ground: an image PLACED in 3D space) and representation_model_sf replace the three identical Font Awesome cubes of src/2D/ and join `2d_render_glyph_types.types`; proxy, tileset, container (the RM container, RepresentationModelNodeGroup) and the four versions version:gltf / version:mesh / version:tiles / version:scene are new files, resolved from the node's DATA by the new table `2d_render_glyph_types.data_glyphs` (keyed like dtc:<kind>; its rule is written in its _comment, measured on Templu Mare v2). All ten in the DTC frame (circle r 41.14, viewBox 87.12) with the 2×2 checker of the EMtools icons: the checker colours are `accent`, never recoloured; black `ink`, white `paper`, the grey of the picture's frame `ground`, the shadow `halo`. NEW in the layer format: `frame: true` marks the layers of the frame circle (its `paper` fill and its `ink` stroke), and the entry's `frameless_box` is the box of everything else — below 24 px a consumer may skip the frame and fit that box instead (docs/drawing-a-glyph.md §5). Additive: no existing glyph changed.",
14
16
  "1.6.31": "THE CHOICES OF DEV29, CONFIRMED (E.D., 2 Oct 2026, on the dev29 report, D5). dtc_kinds.process.texturing is projection AND baking of the photographs onto the mesh, one act, one kind; the baking of levels of detail in Blender stays lod_generation, an act of its own. The «until E.D. says otherwise» of 1.6.30 is gone from the description. Text only: no kind, glyph or label changed.",
@@ -6239,6 +6241,29 @@
6239
6241
  }
6240
6242
  }
6241
6243
  },
6244
+ "threed_instances": {
6245
+ "_comment": "1.6.35 (MICRO lo spazio 3D, E.D. 11 Oct 2026: «nel grafo, la presenza del 3D visibile accanto alle unità e alle epoche»). The representation models and the proxies join the computed instances, and like them they are a VIEW: nothing is written in em.json or RDF. PROXY: the property of type `geometry` of a unit reaches by `has_semantic_shape` the SemanticShape (the proxy, its glb a `proxy_model` resource by `has_linked_resource`); the view draws the shape in the paradata group of the property — its own `is_in_paradata_nodegroup`, else the group of its original owner (`has_paradata_nodegroup`) — BESIDE the property. RM: an epoch reaches its model by a direct `has_representation_model` (1.6.36: the road through an epoch property is gone, the connections datamodel does not admit it); the view draws the model in the epoch's paradata group, and when the same model is in N epochs every instance carries N («×N»). With no group, `place` is the owner itself (the unit, the epoch). The reference implementation is s3dgraphy.paradata_view.threed_instances; units_without_3d answers which units have a proxy, a geometry without payload, or none.",
6246
+ "proxy": {
6247
+ "kind": "proxy",
6248
+ "owner_edge": "has_property",
6249
+ "property_type": "geometry",
6250
+ "shape_edge": "has_semantic_shape",
6251
+ "file_edge": "has_linked_resource",
6252
+ "file_types": ["proxy_model"],
6253
+ "membership": "is_in_paradata_nodegroup",
6254
+ "group_edge": "has_paradata_nodegroup",
6255
+ "beside": "property"
6256
+ },
6257
+ "representation_model": {
6258
+ "kind": "rm",
6259
+ "holders": ["EpochNode"],
6260
+ "edge": "has_representation_model",
6261
+ "masters": ["RepresentationModelNode", "RepresentationModelDocNode", "RepresentationModelSpecialFindNode"],
6262
+ "group_edge": "has_paradata_nodegroup",
6263
+ "count_word": "×{n}"
6264
+ },
6265
+ "id": "{master}##{place}"
6266
+ },
6242
6267
  "dtc_kinds": {
6243
6268
  "_comment": "DATA-DRIVEN, EXPANDABLE per-kind vocabulary for the DTC substrate profile (ECHOES). Mirrors the Master-Document axis vocabularies above (document_roles/content_natures): the three base kinds (input/process/output) each list specific kinds seeded from the 2017 DTC palette. Adding a new kind (e.g. audio, spectroscopy) is a JSON entry here (+ a glyph) — NOT a code change; the DTC node classes validate against these keys via s3dgraphy.utils.get_dtc_kinds(). `glyph` names the 2017 DTC SVG (wired in the later glyph/visual-manager slice; recorded here as data only).",
6244
6269
  "input": {
@@ -1,4 +1,4 @@
1
- __version__ = "1.6.0.dev55"
1
+ __version__ = "1.6.0.dev57"
2
2
  __datamodel_version__ = "1.5.5" # s3Dgraphy connections datamodel version
3
3
 
4
4
  # s3Dgraphy/__init__.py
@@ -342,6 +342,24 @@ def view_instances(graph: Graph, group_id: str) -> List[Dict[str, Any]]:
342
342
  return _view(graph, group_id)
343
343
 
344
344
 
345
+ def threed_instances(graph: Graph) -> List[Dict[str, Any]]:
346
+ """The proxies and the representation models as the view draws them
347
+ (em_visual_rules 1.6.35, ``threed_instances``): the proxy of a unit in the
348
+ paradata group of its geometry property, beside it; a model in the paradata
349
+ group of each epoch that has it, with the number of its epochs. Computed,
350
+ never stored; see :func:`s3dgraphy.paradata_view.threed_instances`."""
351
+ from .paradata_view import threed_instances as _view
352
+ return _view(graph)
353
+
354
+
355
+ def units_without_3d(graph: Graph) -> Dict[str, List[str]]:
356
+ """``{with, empty, none, without}``: the units with a proxy, with an empty
357
+ geometry property, with none, and the last two together — see
358
+ :func:`s3dgraphy.paradata_view.units_without_3d`."""
359
+ from .paradata_view import units_without_3d as _units
360
+ return _units(graph)
361
+
362
+
345
363
  def dependents_of(graph: Graph, node_id: str) -> List[Dict[str, Any]]:
346
364
  """Who leans on a unit, a property or a document, in cascade: ``[{id,
347
365
  name, node_type, kind, via, depth, owner, owner_name}]`` — what an
@@ -241,3 +241,224 @@ def all_view_instances(graph) -> Dict[str, List[Dict[str, Any]]]:
241
241
  if recs:
242
242
  out[n.node_id] = recs
243
243
  return out
244
+
245
+
246
+ # ── 1.6.35 · the 3D among the computed instances ─────────────────────────────
247
+ #
248
+ # MICRO lo spazio 3D (E.D., 11 Oct 2026): «nel grafo, la presenza del 3D visibile
249
+ # accanto alle unità e alle epoche». The proxy of a unit and the representation
250
+ # model of an epoch are drawn as instances, like a document read from outside:
251
+ # still a view, nothing written. The rule is `em_visual_rules.json` →
252
+ # `threed_instances`.
253
+
254
+
255
+ @lru_cache(maxsize=1)
256
+ def threed_rule() -> Dict[str, Any]:
257
+ """The ``threed_instances`` block of ``em_visual_rules.json``."""
258
+ from .nodes.base_node import load_json_mapping
259
+ rules = load_json_mapping("em_visual_rules.json") or {}
260
+ return dict(rules.get("threed_instances") or {})
261
+
262
+
263
+ def threed_instance_id(master_id: str, place_id: str) -> str:
264
+ """The id every client gives the 3D instance of ``master_id`` drawn in
265
+ ``place_id`` (a paradata group, else the owner itself)."""
266
+ pattern = threed_rule().get("id") or "{master}##{place}"
267
+ return pattern.format(master=master_id, place=place_id)
268
+
269
+
270
+ def _out(graph, node_id: str, edge_type: str) -> List[str]:
271
+ return [e.edge_target for e in graph.edges
272
+ if e.edge_source == node_id and e.edge_type == edge_type and _live(e)]
273
+
274
+
275
+ def _inn(graph, node_id: str, edge_type: str) -> List[str]:
276
+ return [e.edge_source for e in graph.edges
277
+ if e.edge_target == node_id and e.edge_type == edge_type and _live(e)]
278
+
279
+
280
+ def _property_type(node) -> str:
281
+ data = getattr(node, "data", None) or {}
282
+ return str(getattr(node, "property_type", None) or data.get("property_type") or "")
283
+
284
+
285
+ def _proxy_payload(graph, shape, spec: Dict[str, Any]) -> Dict[str, Any]:
286
+ """What a shape carries: its ``proxy_model`` resources, its hulls and spheres."""
287
+ types = set(spec.get("file_types") or ["proxy_model"])
288
+ files = []
289
+ for rid in _out(graph, shape.node_id, spec.get("file_edge") or "has_linked_resource"):
290
+ res = graph.find_node_by_id(rid)
291
+ data = getattr(res, "data", None) or {}
292
+ if res is None or _removed(res) or getattr(res, "node_type", None) != "resource":
293
+ continue
294
+ if types & {data.get("url_type"), data.get("resource_type")}:
295
+ files.append(rid)
296
+ data = getattr(shape, "data", None) or {}
297
+ hulls = bool(data.get("convexshapes") or getattr(shape, "convexshapes", None))
298
+ spheres = bool(data.get("spheres") or getattr(shape, "spheres", None))
299
+ return {"files": files, "hulls": hulls or spheres}
300
+
301
+
302
+ def _place(graph, owner_id: str, prop_id: Optional[str], spec: Dict[str, Any]) -> Optional[str]:
303
+ """The paradata group a 3D instance is drawn in: the property's own group,
304
+ else the group of the owner (``has_paradata_nodegroup``)."""
305
+ if prop_id:
306
+ for g in _out(graph, prop_id, spec.get("membership") or "is_in_paradata_nodegroup"):
307
+ node = graph.find_node_by_id(g)
308
+ if node is not None and not _removed(node):
309
+ return g
310
+ for g in _out(graph, owner_id, spec.get("group_edge") or "has_paradata_nodegroup"):
311
+ node = graph.find_node_by_id(g)
312
+ if node is not None and not _removed(node):
313
+ return g
314
+ return None
315
+
316
+
317
+ def _units(graph):
318
+ from .nodes.stratigraphic_node import ContinuityNode, StratigraphicNode
319
+ return [n for n in graph.nodes if isinstance(n, StratigraphicNode)
320
+ and not isinstance(n, ContinuityNode) and not _removed(n)]
321
+
322
+
323
+ def proxy_instances(graph) -> List[Dict[str, Any]]:
324
+ """The proxies of the units, as instances::
325
+
326
+ {id, kind: "proxy", master, node_type, name, owner, owner_kind: "unit",
327
+ owner_name, beside, group, place, files, empty, removed}
328
+
329
+ ``master`` the SemanticShape; ``beside`` the geometry property it hangs
330
+ from; ``group`` the paradata group it is drawn in (None when the unit has
331
+ none: ``place`` is then the unit); ``files`` its ``proxy_model``
332
+ resources; ``empty`` when the shape carries neither a file nor hulls.
333
+ """
334
+ from .ownership import original_owner
335
+ spec = dict(threed_rule().get("proxy") or {})
336
+ owner_edge = spec.get("owner_edge") or "has_property"
337
+ ptype = spec.get("property_type") or "geometry"
338
+ shape_edge = spec.get("shape_edge") or "has_semantic_shape"
339
+ out: List[Dict[str, Any]] = []
340
+ seen = set()
341
+ for unit in _units(graph):
342
+ for pid in _out(graph, unit.node_id, owner_edge):
343
+ prop = graph.find_node_by_id(pid)
344
+ if prop is None or _removed(prop) or _property_type(prop) != ptype:
345
+ continue
346
+ # a property inherited by a second unit is drawn once, by its owner
347
+ owner = original_owner(graph, pid) or unit.node_id
348
+ if owner != unit.node_id:
349
+ continue
350
+ for sid in _out(graph, pid, shape_edge):
351
+ shape = graph.find_node_by_id(sid)
352
+ if shape is None or (pid, sid) in seen:
353
+ continue
354
+ seen.add((pid, sid))
355
+ payload = _proxy_payload(graph, shape, spec)
356
+ group = _place(graph, unit.node_id, pid, spec)
357
+ place = group or unit.node_id
358
+ out.append({
359
+ "id": threed_instance_id(sid, place), "kind": spec.get("kind") or "proxy",
360
+ "master": sid, "node_type": getattr(shape, "node_type", None),
361
+ "name": getattr(shape, "name", sid),
362
+ "owner": unit.node_id, "owner_kind": "unit",
363
+ "owner_name": getattr(unit, "name", unit.node_id),
364
+ "beside": pid, "group": group, "place": place,
365
+ "files": payload["files"],
366
+ "empty": not payload["files"] and not payload["hulls"],
367
+ "removed": _removed(shape)})
368
+ return out
369
+
370
+
371
+ def rm_instances(graph) -> List[Dict[str, Any]]:
372
+ """The representation models of the epochs, as instances::
373
+
374
+ {id, kind: "rm", master, node_type, name, owner, owner_kind: "epoch",
375
+ owner_name, group, place, epochs, count, count_label, removed}
376
+
377
+ One per (model, epoch), for a direct ``has_representation_model`` only
378
+ (1.6.36: the connections datamodel admits no other form); ``epochs`` every
379
+ epoch the model is in, ``count`` how many, ``count_label`` the rule's word
380
+ («×3») when there are more than one.
381
+ """
382
+ spec = dict(threed_rule().get("representation_model") or {})
383
+ holders = spec.get("holders") or ["EpochNode"]
384
+ edge = spec.get("edge") or "has_representation_model"
385
+ masters = spec.get("masters") or ["RepresentationModelNode", "RepresentationModelDocNode",
386
+ "RepresentationModelSpecialFindNode"]
387
+ word = spec.get("count_word") or "×{n}"
388
+ links: Dict[str, List[Dict[str, Any]]] = {}
389
+ order: List[str] = []
390
+ for holder in graph.nodes:
391
+ if _removed(holder) or _class_of(holder, holders) is None:
392
+ continue
393
+ for rm_id in _out(graph, holder.node_id, edge):
394
+ rm = graph.find_node_by_id(rm_id)
395
+ if rm is None or _class_of(rm, masters) is None:
396
+ continue
397
+ mine = links.setdefault(rm_id, [])
398
+ if any(x["owner"] == holder.node_id for x in mine):
399
+ continue
400
+ if rm_id not in order:
401
+ order.append(rm_id)
402
+ mine.append({"owner": holder.node_id})
403
+ out: List[Dict[str, Any]] = []
404
+ for rm_id in order:
405
+ rm = graph.find_node_by_id(rm_id)
406
+ epochs = [x["owner"] for x in links[rm_id]]
407
+ n = len(epochs)
408
+ for x in links[rm_id]:
409
+ epoch = graph.find_node_by_id(x["owner"])
410
+ group = _place(graph, x["owner"], None, spec)
411
+ place = group or x["owner"]
412
+ out.append({
413
+ "id": threed_instance_id(rm_id, place), "kind": spec.get("kind") or "rm",
414
+ "master": rm_id, "node_type": getattr(rm, "node_type", None),
415
+ "name": getattr(rm, "name", rm_id),
416
+ "owner": x["owner"], "owner_kind": "epoch",
417
+ "owner_name": getattr(epoch, "name", x["owner"]),
418
+ "group": group, "place": place,
419
+ "epochs": list(epochs), "count": n,
420
+ "count_label": word.format(n=n) if n > 1 else None,
421
+ "removed": _removed(rm)})
422
+ return out
423
+
424
+
425
+ def threed_instances(graph) -> List[Dict[str, Any]]:
426
+ """The proxies and the representation models, as the view draws them:
427
+ :func:`proxy_instances` then :func:`rm_instances`. Pure."""
428
+ return proxy_instances(graph) + rm_instances(graph)
429
+
430
+
431
+ def units_without_3d(graph) -> Dict[str, List[str]]:
432
+ """Which units have a 3D proxy, and which do not::
433
+
434
+ {"with": [...], "empty": [...], "none": [...], "without": [...]}
435
+
436
+ ``with`` a geometry property whose shape carries a file or hulls;
437
+ ``empty`` a geometry property and nothing in it (no shape, or a shape
438
+ with neither file nor hulls); ``none`` no geometry property at all;
439
+ ``without`` = ``empty`` + ``none``, the units a proxy can be given to.
440
+ Continuity nodes are not units to model.
441
+ """
442
+ spec = dict(threed_rule().get("proxy") or {})
443
+ owner_edge = spec.get("owner_edge") or "has_property"
444
+ ptype = spec.get("property_type") or "geometry"
445
+ shape_edge = spec.get("shape_edge") or "has_semantic_shape"
446
+ res: Dict[str, List[str]] = {"with": [], "empty": [], "none": [], "without": []}
447
+ for unit in _units(graph):
448
+ props = [graph.find_node_by_id(p) for p in _out(graph, unit.node_id, owner_edge)]
449
+ props = [p for p in props if p is not None and not _removed(p) and _property_type(p) == ptype]
450
+ if not props:
451
+ res["none"].append(unit.node_id)
452
+ continue
453
+ full = False
454
+ for p in props:
455
+ for sid in _out(graph, p.node_id, shape_edge):
456
+ shape = graph.find_node_by_id(sid)
457
+ if shape is None or _removed(shape):
458
+ continue
459
+ pay = _proxy_payload(graph, shape, spec)
460
+ if pay["files"] or pay["hulls"]:
461
+ full = True
462
+ res["with" if full else "empty"].append(unit.node_id)
463
+ res["without"] = res["empty"] + res["none"]
464
+ return res
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: s3dgraphy
3
- Version: 1.6.0.dev55
3
+ Version: 1.6.0.dev57
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>
@@ -551,6 +551,7 @@ tests/test_storage_rows.py
551
551
  tests/test_store_backed_geometry.py
552
552
  tests/test_stratiminer_api.py
553
553
  tests/test_study_metadata.py
554
+ tests/test_threed_instances.py
554
555
  tests/test_tileset_resource.py
555
556
  tests/test_ttl_roundtrip.py
556
557
  tests/test_unit_definition.py
@@ -0,0 +1,150 @@
1
+ """The 3D among the computed instances (em_visual_rules 1.6.35, MICRO lo spazio
2
+ 3D, E.D. 11 Oct 2026).
3
+
4
+ The proxy of a unit is drawn in the paradata group of its geometry property,
5
+ beside the property; a representation model in the paradata group of every epoch
6
+ bound to it directly (1.6.36: not through an epoch property) — with the number of
7
+ its epochs. A view: the graph is only read. ``units_without_3d`` says which units a
8
+ proxy can be given to.
9
+ """
10
+
11
+ import json
12
+ import pathlib
13
+
14
+ from s3dgraphy import api
15
+ from s3dgraphy.geometry.proxy import create_geometry_proxy
16
+ from s3dgraphy.graph import Graph
17
+ from s3dgraphy.nodes import PropertyNode, StratigraphicUnit
18
+ from s3dgraphy.nodes.epoch_node import EpochNode
19
+ from s3dgraphy.nodes.group_node import ParadataNodeGroup
20
+ from s3dgraphy.nodes.representation_node import RepresentationModelNode
21
+ from s3dgraphy.nodes.semantic_shape_node import SemanticShapeNode
22
+
23
+
24
+ def _templum() -> Graph:
25
+ g = Graph(graph_id="templum")
26
+ for eid, name, start in (("E1", "I a.C.", -100), ("E2", "I d.C.", 1), ("E3", "II d.C.", 101)):
27
+ g.add_node(EpochNode(eid, name, start, start + 99))
28
+ g.add_node(ParadataNodeGroup(f"PD_{eid}", f"PD_{name}"))
29
+ g.add_edge(f"hg_{eid}", eid, f"PD_{eid}", "has_paradata_nodegroup")
30
+ # US 1: a proxy with a glb, and a paradata group of its own
31
+ g.add_node(StratigraphicUnit("US1", name="US 1"))
32
+ g.add_node(ParadataNodeGroup("PD_US1", "US1_PD"))
33
+ g.add_edge("hg_US1", "US1", "PD_US1", "has_paradata_nodegroup")
34
+ create_geometry_proxy(g, "US1", {"url": "proxies/US 1.glb"})
35
+ # US 2: a proxy from hulls, no group
36
+ g.add_node(StratigraphicUnit("US2", name="US 2"))
37
+ create_geometry_proxy(g, "US2", {"convexshapes": [[0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1]]})
38
+ # US 3: a geometry property and nothing in it
39
+ g.add_node(StratigraphicUnit("US3", name="US 3"))
40
+ g.add_node(PropertyNode("P3", name="geometry", value="", property_type="geometry"))
41
+ g.add_edge("h3", "US3", "P3", "has_property")
42
+ # US 4: an empty shape
43
+ g.add_node(StratigraphicUnit("US4", name="US 4"))
44
+ g.add_node(PropertyNode("P4", name="geometry", value="S4", property_type="geometry"))
45
+ g.add_node(SemanticShapeNode("S4", name="US 4 geometry"))
46
+ g.add_edge("h4", "US4", "P4", "has_property")
47
+ g.add_edge("s4", "P4", "S4", "has_semantic_shape")
48
+ # US 5: no geometry
49
+ g.add_node(StratigraphicUnit("US5", name="US 5"))
50
+ # RM_A in three epochs, RM_B in one, all bound directly
51
+ g.add_node(RepresentationModelNode("RM_A", name="cella"))
52
+ g.add_node(RepresentationModelNode("RM_B", name="pronao"))
53
+ g.add_edge("r1", "E1", "RM_A", "has_representation_model")
54
+ g.add_edge("r2", "E2", "RM_A", "has_representation_model")
55
+ g.add_edge("r3", "E3", "RM_A", "has_representation_model")
56
+ g.add_edge("r4", "E3", "RM_B", "has_representation_model")
57
+ return g
58
+
59
+
60
+ def test_the_proxy_sits_beside_its_property_in_the_unit_group():
61
+ g = _templum()
62
+ recs = {r["owner"]: r for r in api.threed_instances(g) if r["kind"] == "proxy"}
63
+ assert set(recs) == {"US1", "US2", "US4"}
64
+ us1 = recs["US1"]
65
+ prop = next(e.edge_target for e in g.edges
66
+ if e.edge_source == "US1" and e.edge_type == "has_property")
67
+ assert us1["beside"] == prop and us1["group"] == "PD_US1"
68
+ assert us1["id"] == f"{us1['master']}##PD_US1" and len(us1["files"]) == 1
69
+ assert not us1["empty"]
70
+ # no group: the place is the unit itself
71
+ assert recs["US2"]["group"] is None and recs["US2"]["place"] == "US2"
72
+ assert not recs["US2"]["empty"] and recs["US2"]["files"] == []
73
+ assert recs["US4"]["empty"]
74
+
75
+
76
+ def test_a_property_in_a_group_of_its_own_wins():
77
+ g = _templum()
78
+ g.add_node(ParadataNodeGroup("PD_X", "X_PD"))
79
+ prop = next(e.edge_target for e in g.edges
80
+ if e.edge_source == "US2" and e.edge_type == "has_property")
81
+ g.add_edge("mx", prop, "PD_X", "is_in_paradata_nodegroup")
82
+ (us2,) = [r for r in api.threed_instances(g) if r["owner"] == "US2"]
83
+ assert us2["group"] == "PD_X"
84
+
85
+
86
+ def test_a_model_in_three_epochs_says_x3_in_each():
87
+ g = _templum()
88
+ rms = [r for r in api.threed_instances(g) if r["kind"] == "rm"]
89
+ a = {r["owner"]: r for r in rms if r["master"] == "RM_A"}
90
+ assert set(a) == {"E1", "E2", "E3"}
91
+ assert {r["count"] for r in a.values()} == {3}
92
+ assert {r["count_label"] for r in a.values()} == {"×3"}
93
+ assert a["E1"]["group"] == "PD_E1" and a["E1"]["id"] == "RM_A##PD_E1"
94
+ (b,) = [r for r in rms if r["master"] == "RM_B"]
95
+ assert b["count"] == 1 and b["count_label"] is None and b["owner"] == "E3"
96
+
97
+
98
+ def test_a_model_through_an_epoch_property_is_not_an_instance():
99
+ # 1.6.36: the connections datamodel does not let a property be the source
100
+ # of has_representation_model; an em.json written by hand with that form
101
+ # gives no instance (and no «×N»)
102
+ g = Graph(graph_id="by-hand")
103
+ g.add_node(EpochNode("E1", "I d.C.", 1, 100))
104
+ g.add_node(RepresentationModelNode("RM_C", name="podio"))
105
+ g.add_node(PropertyNode("PE1", name="modello", value="RM_C"))
106
+ g.add_edge("hpe1", "E1", "PE1", "has_property")
107
+ g.add_edge("rc", "PE1", "RM_C", "has_representation_model")
108
+ g.find_edge_by_id("rc").edge_type = "has_representation_model"
109
+ assert [r for r in api.threed_instances(g) if r["kind"] == "rm"] == []
110
+
111
+
112
+ def test_units_without_3d():
113
+ g = _templum()
114
+ u = api.units_without_3d(g)
115
+ assert u["with"] == ["US1", "US2"]
116
+ assert u["empty"] == ["US3", "US4"]
117
+ assert u["none"] == ["US5"]
118
+ assert u["without"] == ["US3", "US4", "US5"]
119
+
120
+
121
+ def test_a_view_writes_nothing():
122
+ g = _templum()
123
+ before = (len(g.nodes), len(g.edges))
124
+ api.threed_instances(g)
125
+ api.units_without_3d(g)
126
+ assert (len(g.nodes), len(g.edges)) == before
127
+
128
+
129
+ def test_a_removed_shape_and_link_are_not_drawn():
130
+ g = _templum()
131
+ api.remove_keeping_trace(g, "RM_B", at="2026-10-16T10:00:00Z")
132
+ (b,) = [r for r in api.threed_instances(g) if r["master"] == "RM_B"]
133
+ assert b["removed"]
134
+ edge = g.find_edge_by_id("r1")
135
+ edge.attributes = dict(getattr(edge, "attributes", None) or {},
136
+ removed={"ts": "2026-10-16T10:00:00Z", "by": "dev"})
137
+ a = [r for r in api.threed_instances(g) if r["master"] == "RM_A"]
138
+ assert {r["owner"] for r in a} == {"E2", "E3"} and {r["count"] for r in a} == {2}
139
+
140
+
141
+ def test_the_rule_is_in_the_visual_rules():
142
+ from s3dgraphy.paradata_view import threed_rule
143
+ raw = json.loads((pathlib.Path(api.__file__).parent / "JSON_config" /
144
+ "em_visual_rules.json").read_text("utf-8"))
145
+ block = raw["threed_instances"]
146
+ assert block == threed_rule()
147
+ assert block["id"] == "{master}##{place}"
148
+ assert block["proxy"]["shape_edge"] == "has_semantic_shape"
149
+ assert block["representation_model"]["count_word"] == "×{n}"
150
+ assert "via_property" not in block["representation_model"]
File without changes