s3dgraphy 1.6.0.dev35__tar.gz → 1.6.0.dev37__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 (519) hide show
  1. {s3dgraphy-1.6.0.dev35/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev37}/PKG-INFO +1 -1
  2. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/pyproject.toml +1 -1
  3. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/__init__.py +1 -1
  4. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/import_graphml.py +9 -0
  5. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/node_finder.py +24 -5
  6. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
  7. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_importer_edge_hygiene.py +14 -0
  8. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_node_finder.py +31 -1
  9. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_release.py +154 -9
  10. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/LICENSE +0 -0
  11. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/MANIFEST.in +0 -0
  12. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/README.md +0 -0
  13. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/setup.cfg +0 -0
  14. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
  15. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
  16. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
  17. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
  18. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
  19. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/em.ttl +0 -0
  20. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  21. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  22. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
  23. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
  24. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  25. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
  26. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
  27. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
  28. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  29. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
  30. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  31. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  32. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
  33. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
  34. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
  35. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
  36. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
  37. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
  38. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
  39. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
  40. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  41. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  42. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
  43. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
  44. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
  45. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  46. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
  47. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  48. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  49. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
  50. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  51. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
  52. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  53. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
  54. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  55. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
  56. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
  57. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  58. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
  59. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
  60. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
  61. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
  62. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
  63. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  64. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
  65. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  66. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
  67. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  68. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
  69. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
  70. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
  71. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
  72. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
  73. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
  74. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
  75. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
  76. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
  77. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
  78. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
  79. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
  80. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
  81. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
  82. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
  83. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
  84. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
  85. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
  86. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
  87. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
  88. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
  89. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
  90. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
  91. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
  92. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
  93. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
  94. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
  95. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
  96. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
  97. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
  98. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  99. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
  100. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
  101. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
  102. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
  103. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
  104. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
  105. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
  106. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
  107. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
  108. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
  109. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
  110. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  111. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
  112. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
  113. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
  114. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
  115. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
  116. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
  117. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
  118. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  119. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
  120. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  121. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  122. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
  123. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
  124. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  125. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  126. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  127. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  128. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  129. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  130. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  131. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  132. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  133. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  134. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  135. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  136. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  137. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  138. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  139. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  140. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/acquisition/__init__.py +0 -0
  141. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/acquisition/acquire.py +0 -0
  142. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/acquisition/descriptor.py +0 -0
  143. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/acquisition/mapping.py +0 -0
  144. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/ai_validation.py +0 -0
  145. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/annotation/__init__.py +0 -0
  146. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
  147. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/annotation/paradata.py +0 -0
  148. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/annotation/reading.py +0 -0
  149. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/api.py +0 -0
  150. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/authorities/__init__.py +0 -0
  151. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/authorities/resolver.py +0 -0
  152. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
  153. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
  154. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
  155. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
  156. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
  157. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
  158. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/classification.py +0 -0
  159. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/container.py +0 -0
  160. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/contract/__init__.py +0 -0
  161. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/contract/connector.py +0 -0
  162. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/contract/consumer.py +0 -0
  163. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/contract/core.py +0 -0
  164. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/contract/reference.py +0 -0
  165. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/crdt.py +0 -0
  166. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  167. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/datamodel.py +0 -0
  168. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/diagnostics.py +0 -0
  169. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/dissemination.py +0 -0
  170. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/dtc/__init__.py +0 -0
  171. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/dtc/capture.py +0 -0
  172. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/dtc/corpus.py +0 -0
  173. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/dtc/devices.py +0 -0
  174. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/dtc/ingest.py +0 -0
  175. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
  176. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/dtc/residency.py +0 -0
  177. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/edges/__init__.py +0 -0
  178. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/edges/connection_resolver.py +0 -0
  179. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/edges/connections_loader.py +0 -0
  180. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/edges/edge.py +0 -0
  181. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/editorial.py +0 -0
  182. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/__init__.py +0 -0
  183. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
  184. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
  185. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  186. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
  187. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  188. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  189. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
  190. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  191. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  192. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  193. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  194. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  195. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  196. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  197. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  198. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  199. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  200. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/html_exporter.py +0 -0
  201. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
  202. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/json_exporter.py +0 -0
  203. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
  204. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
  205. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  206. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/geometry/__init__.py +0 -0
  207. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/geometry/aton.py +0 -0
  208. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/geometry/gltf.py +0 -0
  209. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/geometry/migrate.py +0 -0
  210. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/geometry/proxy.py +0 -0
  211. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/geometry/reading_glb.py +0 -0
  212. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/geometry/store_backed.py +0 -0
  213. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/geometry/wkt.py +0 -0
  214. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/graph.py +0 -0
  215. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/iiif.py +0 -0
  216. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/__init__.py +0 -0
  217. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/base_importer.py +0 -0
  218. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/csv_importer.py +0 -0
  219. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/emjson_importer.py +0 -0
  220. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
  221. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
  222. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/metashape_project.py +0 -0
  223. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
  224. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/qualia_importer.py +0 -0
  225. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/rdf_importer.py +0 -0
  226. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/sheet_header.py +0 -0
  227. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/source_text.py +0 -0
  228. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
  229. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
  230. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/importer/xml_importer.py +0 -0
  231. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/indices.py +0 -0
  232. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/language.py +0 -0
  233. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/__init__.py +0 -0
  234. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/authoring.py +0 -0
  235. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
  236. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
  237. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
  238. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
  239. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
  240. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/registry.py +0 -0
  241. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
  242. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
  243. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
  244. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
  245. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/merge/__init__.py +0 -0
  246. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/merge/graph_merger.py +0 -0
  247. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/multigraph/__init__.py +0 -0
  248. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  249. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/narrative/__init__.py +0 -0
  250. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/narrative/bake.py +0 -0
  251. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/narrative/generation.py +0 -0
  252. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/narrative/query.py +0 -0
  253. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/narrative/registry.py +0 -0
  254. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/narrative/site_story.py +0 -0
  255. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/__init__.py +0 -0
  256. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
  257. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/author_node.py +0 -0
  258. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/base_node.py +0 -0
  259. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  260. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/document_node.py +0 -0
  261. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
  262. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
  263. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/dtc_node.py +0 -0
  264. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
  265. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  266. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  267. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  268. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
  269. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
  270. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/graph_node.py +0 -0
  271. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/group_node.py +0 -0
  272. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/hdt_node.py +0 -0
  273. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
  274. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/license_node.py +0 -0
  275. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/narrative_node.py +0 -0
  276. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  277. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/project_node.py +0 -0
  278. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/property_node.py +0 -0
  279. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/representation_node.py +0 -0
  280. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
  281. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/resource_node.py +0 -0
  282. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  283. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  284. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/study_node.py +0 -0
  285. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/nodes/translation_node.py +0 -0
  286. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/ownership.py +0 -0
  287. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
  288. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/photogrammetry/delta.py +0 -0
  289. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/project_tree.py +0 -0
  290. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/publication.py +0 -0
  291. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/rapporti.py +0 -0
  292. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resolvers/__init__.py +0 -0
  293. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  294. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  295. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/__init__.py +0 -0
  296. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/addresses.py +0 -0
  297. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/files.py +0 -0
  298. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/fs_backend.py +0 -0
  299. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/locate.py +0 -0
  300. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/minio_backend.py +0 -0
  301. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/resolver.py +0 -0
  302. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/tiles3tz.py +0 -0
  303. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/resources/versions.py +0 -0
  304. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/rights.py +0 -0
  305. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/shelf/__init__.py +0 -0
  306. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/shelf/core.py +0 -0
  307. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/stamp/__init__.py +0 -0
  308. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/stamp/absorb.py +0 -0
  309. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/stamp/emit.py +0 -0
  310. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/stamp/hints.py +0 -0
  311. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/stamp/identity.py +0 -0
  312. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/study.py +0 -0
  313. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/__init__.py +0 -0
  314. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/_db_handle.py +0 -0
  315. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
  316. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/_workspace.py +0 -0
  317. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
  318. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/edge_registry.py +0 -0
  319. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
  320. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/graph_projector.py +0 -0
  321. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/graphml_writer.py +0 -0
  322. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/group_projector.py +0 -0
  323. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/group_store.py +0 -0
  324. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/ingest_result.py +0 -0
  325. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/paradata_store.py +0 -0
  326. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
  327. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/rapporti.py +0 -0
  328. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/uuid7.py +0 -0
  329. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
  330. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/vocab_types.py +0 -0
  331. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/yed_classifier.py +0 -0
  332. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/yed_detector.py +0 -0
  333. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
  334. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
  335. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
  336. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
  337. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  338. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  339. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/temporal/__init__.py +0 -0
  340. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/temporal/inference_engine.py +0 -0
  341. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/__init__.py +0 -0
  342. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/consumer_drift.py +0 -0
  343. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
  344. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/deliverable_report.py +0 -0
  345. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
  346. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
  347. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
  348. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/tools/wheel_drift.py +0 -0
  349. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/transforms/__init__.py +0 -0
  350. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  351. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/transforms/compact.py +0 -0
  352. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  353. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/translation.py +0 -0
  354. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/utils/__init__.py +0 -0
  355. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/utils/utils.py +0 -0
  356. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/utils/visual_layout.py +0 -0
  357. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy/zero_hour.py +0 -0
  358. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy.egg-info/SOURCES.txt +0 -0
  359. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  360. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy.egg-info/requires.txt +0 -0
  361. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/src/s3dgraphy.egg-info/top_level.txt +0 -0
  362. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_acquisition.py +0 -0
  363. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_acquisition_fs.py +0 -0
  364. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_add_resource.py +0 -0
  365. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_ai_validation_nodes.py +0 -0
  366. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_api_surface.py +0 -0
  367. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_asset_dtc_protocol.py +0 -0
  368. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_asset_versions.py +0 -0
  369. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_aton_shapes.py +0 -0
  370. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_attach_only.py +0 -0
  371. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_authority_projection.py +0 -0
  372. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_authority_resolver.py +0 -0
  373. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_blend_locator.py +0 -0
  374. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_canonical_document_rename.py +0 -0
  375. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_canvas_metadata_import.py +0 -0
  376. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_capture_acquisition.py +0 -0
  377. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_capture_rdf_class.py +0 -0
  378. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_chronology_on_request.py +0 -0
  379. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_coating_unit.py +0 -0
  380. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_composite_node_name.py +0 -0
  381. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_connection_resolver.py +0 -0
  382. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_consumer_drift.py +0 -0
  383. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_container.py +0 -0
  384. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_container_layouts.py +0 -0
  385. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_containment_tpq.py +0 -0
  386. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_contract.py +0 -0
  387. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_contract_consumer.py +0 -0
  388. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_convert_command.py +0 -0
  389. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_crdt.py +0 -0
  390. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_datamodel_fingerprint.py +0 -0
  391. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_datamodel_i18n.py +0 -0
  392. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_deterministic_ids.py +0 -0
  393. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dev29_em_sourcelist.py +0 -0
  394. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dev29_file_set_stamp.py +0 -0
  395. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dev29_graphml_without_a_database.py +0 -0
  396. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dev29_image_set_texturing.py +0 -0
  397. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dev29_not_georeferenced.py +0 -0
  398. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dev29_one_act_n_outputs.py +0 -0
  399. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dev29_ttl_round_trip.py +0 -0
  400. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dev30_decisions.py +0 -0
  401. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_devices.py +0 -0
  402. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dissemination_tombstones.py +0 -0
  403. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dove_sta_il_testo.py +0 -0
  404. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dtc_corpus.py +0 -0
  405. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dtc_ingest.py +0 -0
  406. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dtc_neighbourhood.py +0 -0
  407. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dtc_projection.py +0 -0
  408. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_dtc_residency.py +0 -0
  409. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_edge_ui_phrases.py +0 -0
  410. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_editorial.py +0 -0
  411. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
  412. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_emjson_roundtrip.py +0 -0
  413. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_emjson_schema_version.py +0 -0
  414. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
  415. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_epoch_undated_import.py +0 -0
  416. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_explicit_node_type_marker.py +0 -0
  417. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_extracted_from_unit.py +0 -0
  418. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_filtered_import.py +0 -0
  419. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_fmpxml_importer.py +0 -0
  420. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_fs_backend.py +0 -0
  421. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_functional_units.py +0 -0
  422. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_georeference_scene.py +0 -0
  423. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_gltf_stitch.py +0 -0
  424. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_glyph_paths.py +0 -0
  425. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_graph_indices_edges.py +0 -0
  426. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_graph_scope_migration.py +0 -0
  427. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_hdto_projection.py +0 -0
  428. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_header_key_aliases.py +0 -0
  429. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_i_generi_dei_passi.py +0 -0
  430. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_iiif.py +0 -0
  431. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_il_modo_d_accesso.py +0 -0
  432. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_il_modo_dal_relay.py +0 -0
  433. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_il_proprietario_si_legge.py +0 -0
  434. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_il_riallineamento.py +0 -0
  435. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_ipynb_exporter.py +0 -0
  436. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_la_lingua_alla_nascita.py +0 -0
  437. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_la_lingua_dei_dati.py +0 -0
  438. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_la_lingua_nell_op.py +0 -0
  439. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_la_riga_d_intestazione.py +0 -0
  440. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_latex_exporter.py +0 -0
  441. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_le_traduzioni.py +0 -0
  442. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_lod_levels.py +0 -0
  443. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_lossless_roundtrip.py +0 -0
  444. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_mapping_authoring.py +0 -0
  445. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_mapping_csv_and_relations.py +0 -0
  446. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_masonry_unit.py +0 -0
  447. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_material_color.py +0 -0
  448. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_merge_conflicts.py +0 -0
  449. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_metashape_project.py +0 -0
  450. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_migrate_legacy_proxy.py +0 -0
  451. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_minio_backend.py +0 -0
  452. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_authorship.py +0 -0
  453. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_bake_docx.py +0 -0
  454. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_figures.py +0 -0
  455. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_generation.py +0 -0
  456. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_mentions.py +0 -0
  457. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_node.py +0 -0
  458. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_query.py +0 -0
  459. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_scaffolder.py +0 -0
  460. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_site_place.py +0 -0
  461. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_narrative_unvalidated_export.py +0 -0
  462. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_node_datamodel_registry.py +0 -0
  463. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_node_type_map_integrity.py +0 -0
  464. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_one_resolver.py +0 -0
  465. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_one_spelling_writers.py +0 -0
  466. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_op_vocabulary.py +0 -0
  467. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_pg_importer.py +0 -0
  468. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_photogrammetry_delta.py +0 -0
  469. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_physical_relation_spellings.py +0 -0
  470. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_piu_indirizzi.py +0 -0
  471. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_promotion.py +0 -0
  472. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_property_owners.py +0 -0
  473. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_proxy_resource.py +0 -0
  474. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_proxy_retype.py +0 -0
  475. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_psx_locator.py +0 -0
  476. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_pyarchinit_tier2.py +0 -0
  477. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_qualia_dai_d7_d8.py +0 -0
  478. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_rdf_embedding.py +0 -0
  479. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_rdf_reverse_edges.py +0 -0
  480. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_rdf_roundtrip.py +0 -0
  481. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_reading_coords.py +0 -0
  482. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_reading_glb.py +0 -0
  483. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_reading_migration.py +0 -0
  484. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_reading_place.py +0 -0
  485. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_reading_rdf.py +0 -0
  486. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_recompute_warnings.py +0 -0
  487. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_reproject.py +0 -0
  488. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_resource_file_node.py +0 -0
  489. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_resource_files_implicit.py +0 -0
  490. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_resource_layer.py +0 -0
  491. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_resource_representations.py +0 -0
  492. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_resource_revision.py +0 -0
  493. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_resource_tier.py +0 -0
  494. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_reverse_edges.py +0 -0
  495. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_rm_container_node_group.py +0 -0
  496. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_semantic_purity.py +0 -0
  497. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_shelf.py +0 -0
  498. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_shelf_facets.py +0 -0
  499. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_shelf_hatting.py +0 -0
  500. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_shelf_role_uri_table.py +0 -0
  501. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_shipped_mappings.py +0 -0
  502. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_source_list_mapping.py +0 -0
  503. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_source_text.py +0 -0
  504. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_stamp.py +0 -0
  505. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_stamp_hints.py +0 -0
  506. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_stamp_title_description.py +0 -0
  507. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_store_backed_geometry.py +0 -0
  508. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_stratiminer_api.py +0 -0
  509. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_study_metadata.py +0 -0
  510. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_tileset_resource.py +0 -0
  511. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_ttl_roundtrip.py +0 -0
  512. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_unit_definition.py +0 -0
  513. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_verifica_provenance.py +0 -0
  514. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_visual_assets.py +0 -0
  515. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_wheel_drift.py +0 -0
  516. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
  517. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_xlsx_importer_graph_init.py +0 -0
  518. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/tests/test_xlsx_source_column.py +0 -0
  519. {s3dgraphy-1.6.0.dev35 → s3dgraphy-1.6.0.dev37}/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.dev35
3
+ Version: 1.6.0.dev37
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.dev35"
7
+ version = "1.6.0.dev37"
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.dev35"
1
+ __version__ = "1.6.0.dev37"
2
2
  __datamodel_version__ = "1.5.5" # s3Dgraphy connections datamodel version
3
3
 
4
4
  # s3Dgraphy/__init__.py
@@ -3442,6 +3442,15 @@ class GraphMLImporter:
3442
3442
  edge_type = "combines"
3443
3443
  # print(f"Enhanced to combines: CombinerNode -> ExtractorNode")
3444
3444
 
3445
+ # DocumentNode -> PropertyNode: the document's own property (its
3446
+ # dating, `absolute_time_start` drawn beside a master document),
3447
+ # the reading `_enrich_canonical_documents` already gives it.
3448
+ # Measured on Templu Mare (4 Oct 2026): five of these came out
3449
+ # generic_connection and reached the room that way.
3450
+ elif (isinstance(source_node, DocumentNode)
3451
+ and isinstance(target_node, PropertyNode)):
3452
+ edge_type = "has_property"
3453
+
3445
3454
  # PropertyNode -> DocumentNode. BUGFIX-CONN3: this is read as
3446
3455
  # has_documentation (P70i_is_documented_in) — the honest shortcut
3447
3456
  # when a legacy yEd dashed connector links a property to a source
@@ -102,10 +102,25 @@ def parse_avahi(text: str) -> List[Dict[str, str]]:
102
102
  for line in text.splitlines():
103
103
  parts = line.split(";")
104
104
  if len(parts) >= 9 and parts[0] == "=":
105
- out.append({"name": parts[3], "host": parts[6], "address": parts[7], "port": parts[8]})
105
+ out.append({"name": parts[3], "host": parts[6], "address": parts[7], "port": parts[8],
106
+ "txt": parts[9] if len(parts) > 9 else ""})
106
107
  return out
107
108
 
108
109
 
110
+ def url_of(host: str, port: str, txt: str = "") -> str:
111
+ """The node's address from what DNS-SD gives: host, port and the TXT keys
112
+ ``scheme`` (default ``http``) and ``path`` (default none). The personal node
113
+ announces ``path=/``; the dev stack behind Caddy announces ``scheme=https
114
+ path=/em`` (``fcn-up.sh``), because that port answers https and the API
115
+ lives under ``/em`` — ``http://host:8443`` would be a node that never answers."""
116
+ keys = dict(m.groups() for m in re.finditer(r'"?([A-Za-z][\w-]*)=([^"\s]*)"?', txt or ""))
117
+ scheme = keys.get("scheme") if keys.get("scheme") in ("http", "https") else "http"
118
+ path = (keys.get("path") or "").rstrip("/")
119
+ if path and not path.startswith("/"):
120
+ path = "/" + path
121
+ return f"{scheme}://{host.rstrip('.')}:{port}{path}"
122
+
123
+
109
124
  def browse_lan(timeout: float = 3.0, *, tool: Optional[str] = None,
110
125
  runner: Optional[Callable[..., Any]] = None) -> Dict[str, Any]:
111
126
  """The nodes that announce themselves on the local network.
@@ -120,7 +135,7 @@ def browse_lan(timeout: float = 3.0, *, tool: Optional[str] = None,
120
135
  try:
121
136
  done = run(["avahi-browse", "-rpt", SERVICE], capture_output=True, text=True,
122
137
  timeout=timeout)
123
- found = [{"name": f["name"], "url": f"http://{f['host']}:{f['port']}"}
138
+ found = [{"name": f["name"], "url": url_of(f["host"], f["port"], f.get("txt", ""))}
124
139
  for f in parse_avahi(done.stdout)]
125
140
  return {"how": "avahi-browse", "found": found, "note": ""}
126
141
  except Exception as exc: # noqa: BLE001
@@ -146,7 +161,8 @@ def browse_lan(timeout: float = 3.0, *, tool: Optional[str] = None,
146
161
 
147
162
  def resolve_dns_sd(name: str, *, timeout: float = 3.0,
148
163
  runner: Optional[Callable[..., Any]] = None) -> Optional[str]:
149
- """``dns-sd -L <name>`` → ``http://<host>:<port>``, or None."""
164
+ """``dns-sd -L <name>`` → ``<scheme>://<host>:<port><path>`` (:func:`url_of`;
165
+ the TXT record is the line after «can be reached at»), or None."""
150
166
  run = runner or subprocess.run
151
167
  try:
152
168
  done = run(["dns-sd", "-L", name, SERVICE, "local."], capture_output=True, text=True,
@@ -156,8 +172,11 @@ def resolve_dns_sd(name: str, *, timeout: float = 3.0,
156
172
  text = exc.stdout.decode() if isinstance(exc.stdout, bytes) else (exc.stdout or "")
157
173
  except Exception: # noqa: BLE001
158
174
  return None
159
- m = re.search(r"can be reached at (\S+?)\.?:(\d+)", text)
160
- return f"http://{m.group(1).rstrip('.')}:{m.group(2)}" if m else None
175
+ m = re.search(r"can be reached at (\S+?)\.?:(\d+)[^\n]*\n?([^\n]*)", text)
176
+ if not m:
177
+ return None
178
+ txt = m.group(3) if "=" in m.group(3) and "can be reached" not in m.group(3) else ""
179
+ return url_of(m.group(1), m.group(2), txt)
161
180
 
162
181
 
163
182
  def find_nodes(*, saved: Iterable[str] = (), typed: str = "", lan: bool = True,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: s3dgraphy
3
- Version: 1.6.0.dev35
3
+ Version: 1.6.0.dev37
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>
@@ -75,6 +75,20 @@ def test_property_to_document_is_documentation(importer):
75
75
  ) == "extracted_from"
76
76
 
77
77
 
78
+ def test_document_to_its_property_is_has_property(importer):
79
+ """G2 · a dashed connector from a (master) document to its own property —
80
+ its dating, `absolute_time_start` — is the document's property: the reading
81
+ `_enrich_canonical_documents` already gives it. Measured on Templu Mare
82
+ (4 Oct 2026): five came out generic_connection and reached the room so."""
83
+ dating = PropertyNode(node_id="P9", name="absolute_time_start",
84
+ property_type="absolute_time_start", value="170")
85
+ got = importer.enhance_edge_type(
86
+ "has_data_provenance", DocumentNode("D10", "D.10"), dating)
87
+ assert got == "has_property"
88
+ from s3dgraphy.edges.connection_resolver import connection_allowed
89
+ assert connection_allowed(DocumentNode("D10", "D.10"), dating, got)
90
+
91
+
78
92
  def test_combiner_to_document_is_left_generic_with_a_warning(importer):
79
93
  """BUGFIX-CONN3: a CombinerNode/bare ParadataNode → Document has no honest
80
94
  single relation (a combiner aggregates extractors; it cites no document, and
@@ -22,7 +22,37 @@ def test_parse_dns_sd_and_avahi():
22
22
  assert N.parse_dns_sd(DNS_SD_B) == [{"domain": "local", "name": "StratiGraph lab (fcn)"}]
23
23
  avahi = "=;eth0;IPv4;StratiGraph lab;_stratigraph._tcp;local;fcn.local;192.168.1.9;8777;\n"
24
24
  assert N.parse_avahi(avahi) == [{"name": "StratiGraph lab", "host": "fcn.local",
25
- "address": "192.168.1.9", "port": "8777"}]
25
+ "address": "192.168.1.9", "port": "8777", "txt": ""}]
26
+
27
+
28
+ #: measured 4 Oct 2026 on this Mac: `dns-sd -R probe-fcn-test _stratigraph._tcp
29
+ #: local. 8443 path=/em scheme=https`, then `dns-sd -L` — the TXT is the next line
30
+ DNS_SD_L_FCN = """Lookup probe-fcn-test._stratigraph._tcp.local.
31
+ DATE: ---Sun 04 Oct 2026---
32
+ 13:14:54.518 ...STARTING...
33
+ 13:14:54.519 probe-fcn-test._stratigraph._tcp.local. can be reached at MacBook-Pro-di-Emanuel.local.:8443 (interface 14) Flags: 1
34
+ path=/em scheme=https
35
+ 13:14:54.519 probe-fcn-test._stratigraph._tcp.local. can be reached at MacBook-Pro-di-Emanuel.local.:8443 (interface 14)
36
+ path=/em scheme=https
37
+ """
38
+
39
+
40
+ def test_the_dev_stack_announced_by_fcn_up_resolves_to_its_https_door():
41
+ def runner(cmd, **kw):
42
+ raise subprocess.TimeoutExpired(cmd, 1, output=DNS_SD_L_FCN)
43
+ assert N.resolve_dns_sd("probe-fcn-test", runner=runner) == \
44
+ "https://MacBook-Pro-di-Emanuel.local:8443/em"
45
+ avahi = ('=;eth0;IPv4;StratiGraph fcn;_stratigraph._tcp;local;fcn.local;192.168.1.9;8443;'
46
+ '"scheme=https" "path=/em"\n')
47
+ got = N.browse_lan(1, tool="avahi-browse",
48
+ runner=lambda cmd, **kw: subprocess.CompletedProcess(cmd, 0, avahi, ""))
49
+ assert got["found"] == [{"name": "StratiGraph fcn", "url": "https://fcn.local:8443/em"}]
50
+
51
+
52
+ def test_the_personal_node_path_slash_stays_a_bare_address():
53
+ assert N.url_of("fcn.local.", "8777", "path=/") == "http://fcn.local:8777"
54
+ assert N.url_of("fcn.local", "8777", "") == "http://fcn.local:8777"
55
+ assert N.url_of("h.local", "1", "scheme=gopher path=em") == "http://h.local:1/em"
26
56
 
27
57
 
28
58
  def test_browse_lan_with_dns_sd_resolves_the_url():
@@ -45,6 +45,9 @@ state = os.path.join(os.environ["FAKE_STATE"], "gh.json")
45
45
  db = json.load(open(state)) if os.path.exists(state) else {"runs": [], "n": 0}
46
46
  def save(): json.dump(db, open(state, "w"))
47
47
  def here():
48
+ aimed = sys.argv[sys.argv.index("-R") + 1] if "-R" in sys.argv else os.environ.get("GH_REPO")
49
+ if aimed:
50
+ return os.path.basename(aimed)
48
51
  top = subprocess.run(["git", "rev-parse", "--show-toplevel"], capture_output=True, text=True).stdout.strip()
49
52
  return os.path.basename(top)
50
53
  def add_run(repo, wf, head):
@@ -65,6 +68,15 @@ if a[:2] == ["workflow", "run"]:
65
68
  print("HTTP 500 (fake)", file=sys.stderr); sys.exit(1)
66
69
  if os.environ.get("FAKE_FAIL") == "dispatch":
67
70
  print("HTTP 500 (fake)", file=sys.stderr); sys.exit(1)
71
+ if here() == "ExtendedMatrix-site":
72
+ # build.yml of the site: the page, built, offers the newest EMStudio tag
73
+ add_run(here(), a[2], "main")
74
+ if not os.environ.get("FAKE_SITE_STALE"):
75
+ st = subprocess.run(["git", "-C", os.path.join(os.environ["EM_RELEASE_PARENT"], "EMStudio"), "tag",
76
+ "-l", "v*", "--sort=-creatordate"], capture_output=True, text=True).stdout.split()
77
+ open(os.path.join(os.environ["FAKE_STATE"], "site.html"), "w").write(
78
+ f'<a href="https://github.com/zalmoxes-laran/EMStudio/releases/download/{st[0]}/EMStudio.dmg">')
79
+ sys.exit(0)
68
80
  tag = [x.split("=", 1)[1] for x in a if x.startswith("version_tag=")][0]
69
81
  repo = here()
70
82
  add_run(repo, a[2], "main")
@@ -102,7 +114,7 @@ if a[:2] == ["run", "watch"]:
102
114
  import time; time.sleep(float(os.environ.get("FAKE_WATCH_SLEEP", "0"))); sys.exit(0)
103
115
  if a[:2] == ["release", "view"]:
104
116
  if "isDraft" in a:
105
- print(os.environ.get("FAKE_DRAFT", "true")); sys.exit(0)
117
+ print(os.environ.get("FAKE_DRAFT", "false")); sys.exit(0)
106
118
  print(f"https://example.invalid/releases/{a[2]}"); sys.exit(0)
107
119
  sys.exit(0)
108
120
  '''
@@ -239,6 +251,27 @@ esac
239
251
 
240
252
  CHANGELOG = "# Changelog\n\n## [0.1.3] — YYYY-MM-DD <!-- the date is written when the tag is made -->\n\nNew.\n"
241
253
 
254
+ # step 10, the development node: `docker ps` says em-dev-server runs when
255
+ # FAKE_NODE_UP is set; /v1/health is a file:// URL whose JSON the fake
256
+ # bump-s3dgraphy.sh rewrites FAKE_NODE_RESTART seconds after the rebuild (the
257
+ # container restarting), or never with FAKE_NODE_STUCK
258
+ FAKE_DOCKER = r"""#!/usr/bin/env bash
259
+ echo "docker $*" >> "$FAKE_STATE/docker.log"
260
+ [[ "$1" == ps ]] || exit 0
261
+ [[ -n "$FAKE_NODE_UP" ]] && echo em-dev-server
262
+ exit 0
263
+ """
264
+
265
+ SERVER_BUMP = r"""#!/usr/bin/env bash
266
+ set -e
267
+ { echo "$*"; git log -1 --format=%s; git rev-list --count @{u}..HEAD; } > "$FAKE_STATE/bump.log"
268
+ [[ -n "$FAKE_NODE_STUCK" ]] && exit 0
269
+ rm -f "$FAKE_STATE/health.json"
270
+ ( sleep "${FAKE_NODE_RESTART:-0}"
271
+ printf '{"version": "1.6.0.dev2", "s3dgraphy": "%s"}' "$1" > "$FAKE_STATE/health.tmp"
272
+ mv "$FAKE_STATE/health.tmp" "$FAKE_STATE/health.json" ) >/dev/null 2>&1 &
273
+ """
274
+
242
275
 
243
276
  # ── the world ─────────────────────────────────────────────────────────────────
244
277
 
@@ -268,6 +301,9 @@ class World:
268
301
  "EM_RELEASE_PYTHON": str(self.bin / "fakepython"), "EM_RELEASE_TMP": str(tmp / "t"),
269
302
  "EM_RELEASE_POLL": "0.02", "EM_RELEASE_WAIT_TAG": "3", "EM_RELEASE_WAIT_RUN": "3",
270
303
  "EM_RELEASE_WAIT_PYPI": "5", "EM_RELEASE_WAIT_BUILD": "5", "EM_RELEASE_PROGRESS": "0.02",
304
+ "EM_RELEASE_DOCKER": str(self.bin / "docker"),
305
+ "EM_RELEASE_NODE_HEALTH": (self.state / "health.json").as_uri(),
306
+ "EM_RELEASE_SITE_PAGE": (self.state / "site.html").as_uri(), "EM_RELEASE_WAIT_SITE": "3",
271
307
  "EM_RELEASE_DOWNSTREAM": json.dumps([{"repo": "EM-blender-tools", "cmd": [
272
308
  "bash", "-c", 'echo "$FAKE_DOWNSTREAM_SAYS"; exit "${FAKE_DOWNSTREAM_RC:-0}"']}]),
273
309
  })
@@ -275,6 +311,10 @@ class World:
275
311
  _x(self.bin / "gh", FAKE_GH)
276
312
  _x(self.bin / "pip", FAKE_PIP)
277
313
  _x(self.bin / "fakepython", FAKE_PYTHON)
314
+ _x(self.bin / "docker", FAKE_DOCKER)
315
+ (self.state / "health.json").write_text('{"version": "1.6.0.dev1", "s3dgraphy": "1.6.0.dev27"}')
316
+ (self.state / "site.html").write_text(
317
+ '<a href="https://github.com/zalmoxes-laran/EMStudio/releases/download/v1.6.0-dev.0/EMStudio.dmg">')
278
318
 
279
319
  self.repo("s3Dgraphy", {
280
320
  "pyproject.toml": f'[project]\nname = "s3dgraphy"\nversion = "1.6.0.dev27"\ndependencies = [\n'
@@ -302,7 +342,8 @@ class World:
302
342
  (et / "wheels" / cp / w).write_text("")
303
343
  _x(et / ".venv" / "bin" / "python", EMTOOLS_VENV_PY)
304
344
  (et / ".venv" / "versions").write_text("1.6.0.dev26\n0.1.2\n")
305
- self.repo("stratigraph-server", {"pyproject.toml": 'dependencies = [\n "s3dgraphy[geo,rdf]==1.6.0.dev27",\n]\n'})
345
+ self.repo("stratigraph-server", {"pyproject.toml": 'dependencies = [\n "s3dgraphy[geo,rdf]==1.6.0.dev27",\n]\n',
346
+ "bump-s3dgraphy.sh": SERVER_BUMP})
306
347
  self.repo("stratigraph-templates", {"registry/s3dgraphy-snapshot.json": '{\n "s3dgraphy_version": "1.6.0.dev27"\n}\n'})
307
348
  self.repo("stratigraph-chatbot", {"pyproject.toml": 'dependencies = [\n "s3dgraphy>=1.6.0.dev22",\n]\n',
308
349
  "schede/a.json": "{}\n"})
@@ -359,7 +400,7 @@ def test_the_whole_row_in_dry_run_writes_nothing(world):
359
400
  before = world.snapshot()
360
401
  r = world.release(*FULL, "--dry-run")
361
402
  assert r.returncode == 0, _all(r)
362
- for n in range(1, 12):
403
+ for n in range(1, 14):
363
404
  assert f" {n:>2} " in r.stdout, f"step {n} missing:\n{r.stdout}"
364
405
  assert " ✓ 1 done" in r.stdout
365
406
  assert " → 2 to do" in r.stdout
@@ -386,7 +427,7 @@ def test_the_round_goes_through_and_status_says_done(world):
386
427
  assert subjects == {
387
428
  "stratigraph-templates": f"Snapshot s3Dgraphy {V} from PyPI",
388
429
  "stratigraph-chatbot": f"Vendor the schede against s3Dgraphy {V} and require it",
389
- "stratigraph-server": f"Pin s3dgraphy {V} in one place and its two copies",
430
+ "stratigraph-server": f"Pin s3dgraphy {V} in one place and its two copies, and count one more iteration of the server",
390
431
  "EM-blender-tools": f"Bundle s3dgraphy {V} and dtcstamp {D}"}
391
432
  assert f'"s3dgraphy>={V}"' in world.git(world.ws / "stratigraph-chatbot", "show", "HEAD:pyproject.toml")
392
433
  req = world.git(world.ws / "EM-blender-tools", "show", "HEAD:scripts/requirements_wheels.txt")
@@ -405,13 +446,13 @@ def test_the_round_goes_through_and_status_says_done(world):
405
446
  # and status agrees, with its proofs
406
447
  st = world.release("status", *FULL)
407
448
  assert st.returncode == 0, _all(st)
408
- assert st.stdout.count(" done ") == 12, st.stdout # 0 … 11
449
+ assert st.stdout.count(" done ") == 13, st.stdout # 0 … 13, but 10: the em-dev stack is down here
409
450
  assert f"s3dgraphy {V} is on PyPI" in st.stdout and f"dtcstamp {D} is on PyPI" in st.stdout
410
451
  assert "every step is done" in st.stdout
411
452
  # a second run does nothing and says so
412
453
  again = world.release(*FULL, "--yes")
413
454
  assert again.returncode == 0, _all(again)
414
- assert again.stdout.count("already done") == 10, again.stdout
455
+ assert again.stdout.count("already done") == 11, again.stdout
415
456
 
416
457
 
417
458
  @pytest.mark.skipif(not REAL_DTC_BUMP.exists(), reason="../dtcstamp/bump_and_push.sh is not next door")
@@ -474,7 +515,7 @@ def test_resume_after_step_9(world):
474
515
  assert r.returncode == 1, _all(r)
475
516
  assert "not committed: EMStudio" in _all(r)
476
517
  assert world.git(world.ws / "EMStudio", "status", "--porcelain") # its pin still waits
477
- assert "git push" not in r.stdout # step 10 was not reached
518
+ assert "git push" not in r.stdout # step 11 was not reached
478
519
  r = world.release(*FULL, "--yes")
479
520
  assert r.returncode == 0, _all(r)
480
521
  for n in ("stratigraph-templates", "stratigraph-chatbot", "stratigraph-server", "EM-blender-tools"):
@@ -531,7 +572,7 @@ def test_a_different_fingerprint_stops_it(world):
531
572
  def test_without_dtcstamp_and_desktop_those_steps_are_not_asked(world):
532
573
  r = world.release(V, "--dry-run")
533
574
  assert r.returncode == 0, _all(r)
534
- assert r.stdout.count("not asked") == 3
575
+ assert r.stdout.count("not asked") == 4 # dtcstamp ×2, the desktop, the site
535
576
  assert "Bundle s3dgraphy 1.6.0.dev28\"" in r.stdout
536
577
 
537
578
 
@@ -703,7 +744,7 @@ def test_a_long_wait_says_the_jobs_and_their_step(world):
703
744
  out = r.stdout
704
745
  assert f"▸ 2 · publish.yml for v{D} · " in out
705
746
  assert f"▸ 4 · publish.yml for v{V} · " in out
706
- assert "▸ 11 · build desktop v1.6.0-dev.1 · " in out
747
+ assert "▸ 12 · build desktop v1.6.0-dev.1 · " in out
707
748
  assert "macos-arm64 in progress · step «tauri build»" in out
708
749
  assert "linux done ✓" in out
709
750
  # not a terminal: a new line per change of state, not one per look
@@ -818,3 +859,107 @@ def test_without_a_terminal_and_without_yes_nobody_says_yes(monkeypatch, capsys)
818
859
  monkeypatch.setattr(sys, "stdin", io.StringIO("y\n")) # a pipe that answers: as before
819
860
  assert c.ask("Push these 3 repositories?") is True
820
861
  assert R.Ctx(V, None, False, False, True).ask("anything?") is True # --yes
862
+
863
+
864
+ # ── W3: the release updates the development node (measured on 4 Oct 2026) ────
865
+ #
866
+ # After `./em.sh release 1.6.0.dev34 --desktop` the server's pin was dev34 in
867
+ # its files and the node on this computer still answered dev33 on /v1/health:
868
+ # step 6 only printed «Per applicarlo: ./bump-s3dgraphy.sh … --build».
869
+
870
+ def test_the_development_node_is_a_step_of_the_dry_run(world):
871
+ up = world.release(*FULL, "--dry-run", FAKE_NODE_UP=1)
872
+ assert up.returncode == 0, _all(up)
873
+ assert "10 blocked the development node: ./bump-s3dgraphy.sh V --build if em-dev is up" in up.stdout
874
+ assert f"would run in stratigraph-server: [Y/n, yes in 10 s] ./bump-s3dgraphy.sh {V} --build" in up.stdout
875
+ assert f'"s3dgraphy": "{V}" (cap 180 s)' in up.stdout
876
+ assert " 11 done the push" in up.stdout and " 12 blocked the desktop" in up.stdout # nothing ahead yet
877
+ assert not (world.state / "bump.log").exists() # a dry-run rebuilds nothing
878
+ down = world.release(*FULL, "--dry-run")
879
+ assert down.returncode == 0, _all(down)
880
+ assert " - 10 not up" in down.stdout
881
+ assert "em-dev-server is not running — the em-dev stack is down, nothing to rebuild" in down.stdout
882
+
883
+
884
+ def test_with_the_stack_up_it_rebuilds_the_node_and_waits_for_its_health(world):
885
+ r = world.release(*FULL, "--yes", FAKE_NODE_UP=1, FAKE_NODE_RESTART=0.3)
886
+ assert r.returncode == 0, _all(r)
887
+ said, last, ahead = (world.state / "bump.log").read_text().splitlines()
888
+ assert said == f"{V} --build"
889
+ # after the pin commit, before the push
890
+ assert last == f"Pin s3dgraphy {V} in one place and its two copies, and count one more iteration of the server"
891
+ assert int(ahead) >= 1
892
+ assert "the container is restarting" in r.stdout # the retries while it restarts
893
+ assert f'the development node answers "s3dgraphy": "{V}" (server 1.6.0.dev2)' in r.stdout
894
+ assert r.stdout.index("▸ 10 · the development node") < r.stdout.index("▸ 11 · the push")
895
+ assert world.git(world.ws / "stratigraph-server", "rev-list", "--count", "@{u}..HEAD") == "0"
896
+ st = world.release("status", *FULL, FAKE_NODE_UP=1)
897
+ assert f' ✓ 10 done' in st.stdout and f'says "s3dgraphy": "{V}" (server 1.6.0.dev2)' in st.stdout
898
+ assert "every step is done" in st.stdout
899
+
900
+
901
+ def test_with_the_stack_down_it_says_so_and_goes_on(world):
902
+ r = world.release(*FULL, "--yes")
903
+ assert r.returncode == 0, _all(r)
904
+ assert ("em-dev-server is not running — the em-dev stack is down, nothing to rebuild — skipped"
905
+ in r.stdout)
906
+ assert not (world.state / "bump.log").exists()
907
+ assert "▸ 11 · the push" in r.stdout
908
+ assert world.git(world.ws / "stratigraph-server", "rev-list", "--count", "@{u}..HEAD") == "0"
909
+
910
+
911
+ def test_a_node_that_never_says_v_stops_before_the_push(world):
912
+ r = world.release(*FULL, "--yes", FAKE_NODE_UP=1, FAKE_NODE_STUCK=1, EM_RELEASE_WAIT_NODE=0.3)
913
+ assert r.returncode == 75, _all(r)
914
+ assert "still says '1.6.0.dev27', not '1.6.0.dev28'" in r.stderr
915
+ assert "docker logs em-dev-server" in r.stderr
916
+ assert world.git(world.ws / "stratigraph-server", "rev-list", "--count", "@{u}..HEAD") != "0" # not pushed
917
+
918
+
919
+ def test_declining_the_node_does_not_stop_the_row(world):
920
+ # the first confirmation, the five pin commits, then the node: n, then the push: y
921
+ r = world.release(*FULL, input="y\n" * 6 + "n\ny\n", FAKE_NODE_UP=1, EM_RELEASE_CONFIRM_SECONDS=0)
922
+ assert r.returncode == 0, _all(r)
923
+ assert f"not rebuilt. When ready: (stratigraph-server) ./bump-s3dgraphy.sh {V} --build" in r.stdout
924
+ assert not (world.state / "bump.log").exists()
925
+ assert world.git(world.ws / "stratigraph-server", "rev-list", "--count", "@{u}..HEAD") == "0"
926
+
927
+
928
+ # ── W4: the site in the release (measured on 4 Oct 2026) ─────────────────────
929
+ #
930
+ # The EM site offers EMStudio's installers read at BUILD time from the newest
931
+ # release that is not a draft (src/lib/upstream.ts): a new desktop reached it
932
+ # only when someone remembered to build it again.
933
+
934
+ def test_the_site_is_a_step_of_the_dry_run(world):
935
+ r = world.release(*FULL, "--dry-run")
936
+ assert r.returncode == 0, _all(r)
937
+ assert " 13 blocked the site: build.yml of the EM site" in r.stdout
938
+ assert ("would run: [Y/n, yes in 10 s] gh workflow run build.yml -R zalmoxes-laran/ExtendedMatrix-site "
939
+ "--ref main") in r.stdout
940
+ assert "until it links EMStudio/releases/download/<the tag>/ (cap 3 s)" in r.stdout
941
+ assert "workflow run" not in (world.state / "gh.log").read_text()
942
+
943
+
944
+ def test_after_the_desktop_the_site_is_built_and_offers_the_new_tag(world):
945
+ r = world.release(*FULL, "--yes", FAKE_DRAFT="false")
946
+ assert r.returncode == 0, _all(r)
947
+ log = (world.state / "gh.log").read_text()
948
+ assert "workflow run build.yml -R zalmoxes-laran/ExtendedMatrix-site --ref main" in log
949
+ assert r.stdout.index("▸ 12 · the desktop") < r.stdout.index("▸ 13 · the site")
950
+ assert "offers EMStudio v1.6.0-dev.1" in r.stdout
951
+ st = world.release("status", *FULL, FAKE_DRAFT="false")
952
+ assert " ✓ 13 done" in st.stdout and "offers v1.6.0-dev.1" in st.stdout
953
+
954
+
955
+ def test_a_draft_desktop_does_not_build_the_site_and_says_why(world):
956
+ r = world.release(*FULL, "--yes", FAKE_DRAFT="true")
957
+ assert r.returncode == 0, _all(r)
958
+ assert "the site offers only published releases" in r.stdout
959
+ assert "build.yml" not in (world.state / "gh.log").read_text()
960
+
961
+
962
+ def test_a_site_that_keeps_the_old_tag_stops_with_what_it_offers(world):
963
+ r = world.release(*FULL, "--yes", FAKE_DRAFT="false", FAKE_SITE_STALE=1)
964
+ assert r.returncode == 75, _all(r)
965
+ assert "still offers 'v1.6.0-dev.0', not 'v1.6.0-dev.1'" in r.stderr
File without changes