pyflightstream 0.40.0__tar.gz → 0.41.0__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 (411) hide show
  1. {pyflightstream-0.40.0/src/pyflightstream.egg-info → pyflightstream-0.41.0}/PKG-INFO +18 -13
  2. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/README.md +17 -12
  3. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/pyproject.toml +12 -2
  4. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_cli.py +4 -4
  5. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_console.py +1 -1
  6. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_deprecations.py +9 -110
  7. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_digest.py +6 -1
  8. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_errors.py +2 -9
  9. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_fsm.py +1 -1
  10. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_fsm_fresh.py +2 -2
  11. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_maturity.py +4 -4
  12. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_progress.py +5 -5
  13. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/__init__.py +22 -106
  14. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_farfield_spec.py +8 -8
  15. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_fsi_external.py +3 -3
  16. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_geometry_emit.py +6 -6
  17. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_geometry_instruction.py +6 -6
  18. pyflightstream-0.41.0/src/pyflightstream/cases/_matrix_upgrade.py +201 -0
  19. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_setup_link.py +3 -3
  20. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_skipped_families.py +25 -25
  21. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/ccs_wing.py +1 -1
  22. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/farfield_inputs.py +11 -11
  23. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/fsi_workspace.py +30 -1
  24. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/matrix.py +26 -294
  25. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/naming.py +2 -41
  26. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/pproc.py +74 -17
  27. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/selection.py +1 -1
  28. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/settings.py +7 -6
  29. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/setup_surfaces.py +5 -5
  30. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/sixdof.py +1 -1
  31. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/__init__.py +2 -0
  32. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_additional.py +2 -2
  33. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_clock.py +2 -2
  34. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_export_first_step.py +1 -1
  35. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_exports.py +6 -5
  36. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_farfield.py +82 -33
  37. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_freestream.py +33 -33
  38. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_geometry.py +12 -12
  39. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_motion.py +2 -2
  40. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_names.py +4 -4
  41. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_pproc.py +3 -3
  42. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_probes.py +17 -10
  43. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_qsteady_rotor.py +47 -0
  44. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_registry.py +1 -1
  45. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_rotor.py +7 -7
  46. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_rows.py +5 -4
  47. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_sixdof.py +5 -5
  48. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_skeleton.py +6 -6
  49. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_streamlines.py +5 -5
  50. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_timing.py +2 -2
  51. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_unsteady.py +3 -3
  52. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_vocabulary.py +6 -5
  53. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_wake_length.py +15 -12
  54. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/__init__.py +3 -1
  55. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/_meta.yaml +5 -6
  56. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/actuators.yaml +1 -1
  57. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/advanced_settings.yaml +7 -7
  58. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/aeroelastic_coupling.yaml +4 -4
  59. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/boundary_conditions.yaml +7 -7
  60. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/motion_definitions.yaml +3 -3
  61. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/probe_points.yaml +2 -2
  62. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/solver_analysis.yaml +2 -2
  63. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/solver_export.yaml +1 -1
  64. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/solver_settings.yaml +1 -1
  65. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/surface_sections.yaml +1 -1
  66. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/unsteady_solver.yaml +4 -4
  67. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/farfield/balances.py +2 -2
  68. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/farfield/fields.py +2 -2
  69. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/farfield/quadrature.py +3 -3
  70. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/farfield/trefftz.py +11 -11
  71. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/__init__.py +1 -0
  72. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/_direct_morphing.py +1 -1
  73. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/cli.py +9 -9
  74. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/config.py +1 -1
  75. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/driver.py +70 -10
  76. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/external.py +9 -9
  77. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/loads.py +29 -1
  78. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/sections.py +56 -0
  79. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/state.py +1 -0
  80. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/__init__.py +19 -3
  81. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_additional.py +1 -1
  82. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_field_inputs.py +2 -0
  83. pyflightstream-0.41.0/src/pyflightstream/post/_matrix_template.py +116 -0
  84. pyflightstream-0.41.0/src/pyflightstream/post/_noise_products.py +142 -0
  85. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_products_campaign.py +5 -5
  86. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_sim.py +39 -16
  87. pyflightstream-0.41.0/src/pyflightstream/post/_structure.py +141 -0
  88. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_tables.py +3 -4
  89. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/axes.py +6 -2
  90. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/corrections.py +38 -1
  91. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/farfield_fields.py +10 -8
  92. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/farfield_products.py +27 -24
  93. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/guides.py +2 -3
  94. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/inflow_tools.py +15 -0
  95. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/input_template.py +68 -115
  96. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/point_tables.py +56 -1
  97. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/polar.py +42 -0
  98. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/probe_fields.py +12 -12
  99. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/products.py +5 -1
  100. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/qsteady_noise.py +35 -17
  101. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/rotor_table.py +14 -17
  102. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/streamlines.py +2 -2
  103. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/superfile.py +28 -22
  104. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/surfaces.py +2 -2
  105. pyflightstream-0.41.0/src/pyflightstream/probes/_model.py +93 -0
  106. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/probes/geometry.py +4 -3
  107. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/probes/lattice.py +3 -2
  108. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/probes/layouts.py +2 -2
  109. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/probes/planar.py +7 -6
  110. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_ccs_mesh.py +1 -1
  111. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_ccs_noise.py +1 -1
  112. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/cli.py +1 -1
  113. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/geometry.py +1 -56
  114. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/matrix.py +3 -2
  115. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/probes.py +2 -6
  116. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/PHY-01.yaml +1 -1
  117. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/PHY-02.yaml +1 -1
  118. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/PHY-05.yaml +1 -1
  119. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/PHY-06.yaml +1 -1
  120. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/SMI-01.yaml +1 -1
  121. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/SMI-02.yaml +1 -1
  122. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/pressure-drag/PHY-01.yaml +2 -2
  123. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/pressure-drag/PHY-02.yaml +1 -1
  124. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/pressure-drag/PHY-05.yaml +2 -2
  125. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/references/pressure-drag/PHY-06.yaml +2 -2
  126. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/reference.py +10 -18
  127. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/conditions.py +16 -13
  128. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/wake.py +1 -1
  129. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_actions_counter.py +3 -3
  130. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_alias.py +6 -7
  131. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_assessment.py +25 -30
  132. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_campaign.py +4 -4
  133. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_cli_geometry.py +109 -4
  134. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_cli_mesh.py +7 -7
  135. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_cli_parsers.py +8 -108
  136. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_cli_print.py +3 -3
  137. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_cli_query.py +16 -2
  138. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_cli_query_point.py +3 -2
  139. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_collect_logs.py +2 -2
  140. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_collect_notes.py +4 -5
  141. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_executors.py +13 -5
  142. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_identity.py +4 -4
  143. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_mark_converged.py +12 -8
  144. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_matrix_warnings.py +1 -1
  145. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_pending.py +2 -4
  146. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_plan.py +47 -21
  147. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_points.py +3 -3
  148. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_rebuild.py +9 -6
  149. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_rebuild_evidence.py +7 -12
  150. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_rebuild_grouped.py +2 -2
  151. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_rebuild_summary.py +2 -2
  152. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_sweep.py +3 -3
  153. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/cli.py +25 -160
  154. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/collect.py +2 -2
  155. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/matrix.py +2 -2
  156. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/records.py +22 -20
  157. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/__init__.py +1 -1
  158. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/helpers.py +3 -4
  159. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/solver_setup.py +9 -0
  160. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/utils/cli.py +5 -2
  161. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/__init__.py +8 -26
  162. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_degenerate.py +14 -14
  163. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_free_space.py +9 -0
  164. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_geometry_build.py +63 -20
  165. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_geometry_clean.py +3 -3
  166. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_geometry_convert.py +7 -5
  167. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_geometry_instruction.py +2 -2
  168. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_geometry_record.py +1 -1
  169. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_geometry_sidecar.py +1 -1
  170. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_geometry_vtk.py +2 -2
  171. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_layout.py +44 -9
  172. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_ledger_history.py +7 -4
  173. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_matrix_homes.py +3 -5
  174. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_matrix_phases.py +1 -1
  175. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_missing_log.py +11 -11
  176. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_query_point.py +3 -1
  177. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/__init__.py +3 -3
  178. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_audit.py +25 -25
  179. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_blocks.py +9 -7
  180. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_config.py +24 -23
  181. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_geometry.py +26 -26
  182. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_grid.py +19 -17
  183. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_level.py +53 -47
  184. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_obj.py +3 -3
  185. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_periodic.py +7 -7
  186. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_remesh.py +18 -18
  187. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_remesh_group.py +10 -10
  188. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_refine/_remesh_pairs.py +1 -1
  189. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_row_setup.py +1 -1
  190. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_settings_file.py +16 -16
  191. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_verdicts.py +1 -1
  192. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/actuator_profiles.py +1 -1
  193. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/builds.py +5 -5
  194. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/cli.py +39 -64
  195. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/costs.py +2 -2
  196. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/excel.py +20 -10
  197. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/fsi_external_setup.py +4 -4
  198. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/fsi_setup.py +167 -31
  199. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/inputs.py +35 -333
  200. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/ledger.py +9 -7
  201. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/manifest.py +19 -34
  202. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/matrix.py +2 -3
  203. pyflightstream-0.41.0/src/pyflightstream/workspace/migrate.py +174 -0
  204. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/naming.py +2 -2
  205. pyflightstream-0.41.0/src/pyflightstream/workspace/record_document.py +325 -0
  206. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/setup_standards.py +1 -0
  207. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/sidecars.py +2 -108
  208. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/sixdof_setup.py +6 -6
  209. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/storage.py +9 -10
  210. {pyflightstream-0.40.0 → pyflightstream-0.41.0/src/pyflightstream.egg-info}/PKG-INFO +18 -13
  211. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream.egg-info/SOURCES.txt +6 -2
  212. pyflightstream-0.40.0/src/pyflightstream/cases/_matrix_upgrade.py +0 -975
  213. pyflightstream-0.40.0/src/pyflightstream/run/rename.py +0 -934
  214. pyflightstream-0.40.0/src/pyflightstream/workspace/rename_groups.py +0 -237
  215. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/LICENSE +0 -0
  216. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/setup.cfg +0 -0
  217. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/__init__.py +0 -0
  218. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_atmosphere.py +0 -0
  219. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_decimal.py +0 -0
  220. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_expressions.py +0 -0
  221. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_fsi_calibration.py +0 -0
  222. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_lengths.py +0 -0
  223. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_mesh.py +0 -0
  224. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_retired_names.py +0 -0
  225. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_signature.py +0 -0
  226. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_textio.py +0 -0
  227. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_tokens.py +0 -0
  228. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/_yamlflow.py +0 -0
  229. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_ccs.py +0 -0
  230. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_matrix_layouts.py +0 -0
  231. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_setup_keys.py +0 -0
  232. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_sweep_names.py +0 -0
  233. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/_unsteady_actions.py +0 -0
  234. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/acoustics.py +0 -0
  235. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/ccs_fuselage.py +0 -0
  236. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/ccs_revolution.py +0 -0
  237. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/corrections.py +0 -0
  238. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/field_coverage.py +0 -0
  239. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/freestream.py +0 -0
  240. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/mesh.py +0 -0
  241. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/qsteady.py +0 -0
  242. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/reference_blocks.py +0 -0
  243. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/windows.py +0 -0
  244. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_actuator.py +0 -0
  245. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_batch_actions.py +0 -0
  246. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_batch_script.py +0 -0
  247. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_conventions.py +0 -0
  248. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_frames.py +0 -0
  249. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_gap_evidence.py +0 -0
  250. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_reductions.py +0 -0
  251. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_row_cells.py +0 -0
  252. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_solver_settings.py +0 -0
  253. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/cases/workflows/_steady.py +0 -0
  254. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/_schema.py +0 -0
  255. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/acoustics.yaml +0 -0
  256. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/base_regions.yaml +0 -0
  257. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/cad.yaml +0 -0
  258. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/cad_create.yaml +0 -0
  259. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/ccs_fuselage_mesh.yaml +0 -0
  260. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/ccs_revolve_mesh.yaml +0 -0
  261. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/ccs_wing_mesh.yaml +0 -0
  262. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/coordinate_systems.yaml +0 -0
  263. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/file_io.yaml +0 -0
  264. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/free_surfaces.yaml +0 -0
  265. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/inlets_outlets.yaml +0 -0
  266. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/mesh_import_export.yaml +0 -0
  267. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/mesh_operations.yaml +0 -0
  268. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/mesh_unite.yaml +0 -0
  269. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/mesh_wrapper.yaml +0 -0
  270. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/plots.yaml +0 -0
  271. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/runtime_settings.yaml +0 -0
  272. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/scene_settings.yaml +0 -0
  273. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/scenes.yaml +0 -0
  274. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/script_controls.yaml +0 -0
  275. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/simulation_controls.yaml +0 -0
  276. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/solver_contours.yaml +0 -0
  277. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/solver_initialization.yaml +0 -0
  278. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/stability_toolbox.yaml +0 -0
  279. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/streamlines.yaml +0 -0
  280. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/sweeper.yaml +0 -0
  281. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/transition_trips.yaml +0 -0
  282. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/commands/volume_sections.yaml +0 -0
  283. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/exceptions.py +0 -0
  284. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/extras.py +0 -0
  285. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/farfield/__init__.py +0 -0
  286. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/beam.py +0 -0
  287. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/calibration.py +0 -0
  288. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/centrifugal.py +0 -0
  289. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/errors.py +0 -0
  290. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/kinematics.py +0 -0
  291. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/materials.py +0 -0
  292. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/nodes.py +0 -0
  293. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/fsi/wing.py +0 -0
  294. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/options.py +0 -0
  295. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/overview.py +0 -0
  296. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_admit.py +0 -0
  297. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_condition.py +0 -0
  298. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_installed_copies.py +0 -0
  299. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_reduction_stage.py +0 -0
  300. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_rotor_plan.py +0 -0
  301. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_rotor_products.py +0 -0
  302. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_settings_product.py +0 -0
  303. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_stage.py +0 -0
  304. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/_transfer_functions.py +0 -0
  305. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/acoustics.py +0 -0
  306. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/boundary_layer.py +0 -0
  307. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/custom_polar.py +0 -0
  308. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/diagnostics.py +0 -0
  309. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/disc_maps.py +0 -0
  310. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/equations.py +0 -0
  311. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/field_frames.py +0 -0
  312. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/glossary.py +0 -0
  313. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/harmonics.py +0 -0
  314. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/provenance.py +0 -0
  315. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/qsteady.py +0 -0
  316. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/reductions.py +0 -0
  317. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/section_distributions.py +0 -0
  318. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/series.py +0 -0
  319. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/settings_table.py +0 -0
  320. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/unsteady.py +0 -0
  321. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/unsteady_polar.py +0 -0
  322. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/post/writers.py +0 -0
  323. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/probes/__init__.py +0 -0
  324. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/probes/errors.py +0 -0
  325. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/__init__.py +0 -0
  326. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_0400_gap.py +0 -0
  327. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_0400_gapbase.py +0 -0
  328. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_0400_gapedges.py +0 -0
  329. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_0400_gapkit.py +0 -0
  330. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_26125.py +0 -0
  331. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_catalog_b.py +0 -0
  332. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_kit.py +0 -0
  333. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/_spec_t1.py +0 -0
  334. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/compat.py +0 -0
  335. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/cost.py +0 -0
  336. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/drift.py +0 -0
  337. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/errors.py +0 -0
  338. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/physics.py +0 -0
  339. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/reports.py +0 -0
  340. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/qa/specs.py +0 -0
  341. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/__init__.py +0 -0
  342. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/core.py +0 -0
  343. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/exports.py +0 -0
  344. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/loads.py +0 -0
  345. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/log.py +0 -0
  346. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/native_surface.py +0 -0
  347. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/sectional_loads.py +0 -0
  348. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/surface.py +0 -0
  349. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/results/tables.py +0 -0
  350. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/__init__.py +0 -0
  351. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_additional.py +0 -0
  352. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_assemble.py +0 -0
  353. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_batch_collect.py +0 -0
  354. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_batch_exec.py +0 -0
  355. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_batch_plan.py +0 -0
  356. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_batch_run.py +0 -0
  357. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_batch_split.py +0 -0
  358. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_cli_parsers_storage.py +0 -0
  359. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_cli_query_history.py +0 -0
  360. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_continuation.py +0 -0
  361. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_continuation_frame.py +0 -0
  362. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_field_motion.py +0 -0
  363. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_grouped.py +0 -0
  364. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_ids.py +0 -0
  365. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_record_files.py +0 -0
  366. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_solver_windows.py +0 -0
  367. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_step_exports.py +0 -0
  368. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/run/_wake_edge_verdict.py +0 -0
  369. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/_arg_checks.py +0 -0
  370. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/_build_forms.py +0 -0
  371. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/_ledger_tables.py +0 -0
  372. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/_relaxed_te.py +0 -0
  373. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/_settings.py +0 -0
  374. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/_surface_averaging.py +0 -0
  375. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/_wake_edge_file.py +0 -0
  376. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/entities.py +0 -0
  377. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/motion.py +0 -0
  378. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/rotor_vocabulary.py +0 -0
  379. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/script/toggles.py +0 -0
  380. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/support.py +0 -0
  381. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/testing.py +0 -0
  382. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/utils/__init__.py +0 -0
  383. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/utils/database.py +0 -0
  384. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/utils/errors.py +0 -0
  385. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/utils/manual.py +0 -0
  386. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/versions.py +0 -0
  387. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_batch_life.py +0 -0
  388. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_batch_relocate.py +0 -0
  389. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_batches.py +0 -0
  390. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_effective.py +0 -0
  391. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_ledger_api.py +0 -0
  392. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_links.py +0 -0
  393. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_matrix_binding.py +0 -0
  394. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_query_files.py +0 -0
  395. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_query_logs.py +0 -0
  396. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_script_comparison.py +0 -0
  397. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/_step_prune.py +0 -0
  398. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/excel_bridge.py +0 -0
  399. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/excel_file.py +0 -0
  400. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/excel_sync.py +0 -0
  401. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/fields.py +0 -0
  402. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/flight_condition.py +0 -0
  403. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/hpc.py +0 -0
  404. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/selections.py +0 -0
  405. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/setup_inspection.py +0 -0
  406. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/trailing_edges.py +0 -0
  407. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream/workspace/wake_edges.py +0 -0
  408. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream.egg-info/dependency_links.txt +0 -0
  409. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream.egg-info/entry_points.txt +0 -0
  410. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream.egg-info/requires.txt +0 -0
  411. {pyflightstream-0.40.0 → pyflightstream-0.41.0}/src/pyflightstream.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyflightstream
3
- Version: 0.40.0
3
+ Version: 0.41.0
4
4
  Summary: Version-aware, didactic Python driver for the FlightStream panel-method solver
5
5
  Author: Geovana Neves
6
6
  License: MIT
@@ -60,7 +60,10 @@ Version-aware Python driver for the FlightStream panel-method solver: write a
60
60
  run matrix, and pyflightstream plans, runs and post-processes every point,
61
61
  from your workstation or a cluster. MIT licensed.
62
62
 
63
- Status: v0.40.0 is the current release; CHANGELOG.md carries the history.
63
+ This source tree contains 0.41.0; CHANGELOG.md describes its changes and the
64
+ retained release history.
65
+ Use the [upgrade guidance](https://nevesgeovana.github.io/pyflightstream/upgrading/)
66
+ when moving an existing workspace to a newer package version.
64
67
 
65
68
  **Documentation: [nevesgeovana.github.io/pyflightstream](https://nevesgeovana.github.io/pyflightstream/)**
66
69
 
@@ -94,18 +97,19 @@ pip install "pyflightstream[geom,fsi,plot,excel]"
94
97
  Python 3.12 or newer. FlightStream itself is licensed separately and is
95
98
  located through your workspace, never guessed.
96
99
 
97
- ## Quick start
100
+ ## Quick start without a solver
98
101
 
99
102
  ```
100
- pyfs-workspace init my-study # the workspace tree and input folders
101
- cd my-study # add a geometry, a matrix, a reference, a setup
102
- pyfs-matrix plan matriz.fs # zero solver time: what will run, what is refused
103
- pyfs-matrix run matriz.fs # runs every READY point
104
- pyfs-matrix post --workspace . # rebuilds the products from the records
103
+ pyfs-workspace init my-study
105
104
  ```
106
105
 
107
106
  [Getting started](https://nevesgeovana.github.io/pyflightstream/getting-started/)
108
- walks a first workspace file by file, and
107
+ starts with an executable solver-free example, then walks the geometry,
108
+ matrix, reference, setup and post-processing inputs needed before planning.
109
+ Initialization creates `my-study/inputs/INPUTS.md`; read it next. Planning
110
+ needs those inputs but no solver license. Running requires a separately
111
+ licensed FlightStream installation.
112
+
109
113
  [From the GUI to pyfs](https://nevesgeovana.github.io/pyflightstream/gui-to-pyfs/)
110
114
  maps each GUI step to the key that takes it here.
111
115
 
@@ -113,7 +117,7 @@ maps each GUI step to the key that takes it here.
113
117
 
114
118
  | Tool | What it is for |
115
119
  |---|---|
116
- | `pyfs-workspace` | Create a workspace; archive a simulation; reorganise the geometry library |
120
+ | `pyfs-workspace` | Create or migrate a workspace; archive simulations; prepare geometry, custom fields and actuator profiles |
117
121
  | `pyfs-matrix` | Plan, run, collect and post a run matrix; storage (`space-in-use`, `free-space`, `delete-sims`) and `sync` between workspaces |
118
122
  | `pyfs-qa` | Command-validity probes and physics regression on a licensed machine |
119
123
  | `pyfs-fsi` | The structural executable of the aeroelastic coupling loop |
@@ -127,7 +131,7 @@ maps each GUI step to the key that takes it here.
127
131
  | Parsers, tables, run manifest, reconstruction | supported |
128
132
  | Campaigns, run matrices, workspace, pre-flight | supported |
129
133
  | Far-field ledgers and probe surveys | **experimental** |
130
- | FSI structural beam and modal analysis | **experimental** (`examples/wing_static_deflection.py`, `examples/fsi_campbell_diagram.py`) |
134
+ | FSI structural beam and modal analysis | **experimental** (`docs/examples/_sources/wing_static_deflection.py`, `docs/examples/_sources/fsi_campbell_diagram.py`) |
131
135
  | FSI coupled driver (the four-phase loop) | **experimental**: offline replay only, never run against a live solver in CI |
132
136
  | Rotary two-way coupling | **not validated** |
133
137
 
@@ -151,8 +155,9 @@ and the evidence behind it is narrower than for the supported rows.
151
155
  | 26.125 | 26.12 | `operational` |
152
156
 
153
157
  `operational` means the minimal geometry-to-loads workflow builds for that
154
- version, checked by a test; `documented` means the manual has been read but
155
- nothing has been measured on the build yet. The details, and how to tell
158
+ version, checked by a test. `documented` describes the database support level;
159
+ it does not imply that no measurements exist for that build. Individual commands
160
+ may carry different evidence. The details, and how to tell
156
161
  which build you have, are on
157
162
  [Which build do I have](https://nevesgeovana.github.io/pyflightstream/builds/):
158
163
 
@@ -8,7 +8,10 @@ Version-aware Python driver for the FlightStream panel-method solver: write a
8
8
  run matrix, and pyflightstream plans, runs and post-processes every point,
9
9
  from your workstation or a cluster. MIT licensed.
10
10
 
11
- Status: v0.40.0 is the current release; CHANGELOG.md carries the history.
11
+ This source tree contains 0.41.0; CHANGELOG.md describes its changes and the
12
+ retained release history.
13
+ Use the [upgrade guidance](https://nevesgeovana.github.io/pyflightstream/upgrading/)
14
+ when moving an existing workspace to a newer package version.
12
15
 
13
16
  **Documentation: [nevesgeovana.github.io/pyflightstream](https://nevesgeovana.github.io/pyflightstream/)**
14
17
 
@@ -42,18 +45,19 @@ pip install "pyflightstream[geom,fsi,plot,excel]"
42
45
  Python 3.12 or newer. FlightStream itself is licensed separately and is
43
46
  located through your workspace, never guessed.
44
47
 
45
- ## Quick start
48
+ ## Quick start without a solver
46
49
 
47
50
  ```
48
- pyfs-workspace init my-study # the workspace tree and input folders
49
- cd my-study # add a geometry, a matrix, a reference, a setup
50
- pyfs-matrix plan matriz.fs # zero solver time: what will run, what is refused
51
- pyfs-matrix run matriz.fs # runs every READY point
52
- pyfs-matrix post --workspace . # rebuilds the products from the records
51
+ pyfs-workspace init my-study
53
52
  ```
54
53
 
55
54
  [Getting started](https://nevesgeovana.github.io/pyflightstream/getting-started/)
56
- walks a first workspace file by file, and
55
+ starts with an executable solver-free example, then walks the geometry,
56
+ matrix, reference, setup and post-processing inputs needed before planning.
57
+ Initialization creates `my-study/inputs/INPUTS.md`; read it next. Planning
58
+ needs those inputs but no solver license. Running requires a separately
59
+ licensed FlightStream installation.
60
+
57
61
  [From the GUI to pyfs](https://nevesgeovana.github.io/pyflightstream/gui-to-pyfs/)
58
62
  maps each GUI step to the key that takes it here.
59
63
 
@@ -61,7 +65,7 @@ maps each GUI step to the key that takes it here.
61
65
 
62
66
  | Tool | What it is for |
63
67
  |---|---|
64
- | `pyfs-workspace` | Create a workspace; archive a simulation; reorganise the geometry library |
68
+ | `pyfs-workspace` | Create or migrate a workspace; archive simulations; prepare geometry, custom fields and actuator profiles |
65
69
  | `pyfs-matrix` | Plan, run, collect and post a run matrix; storage (`space-in-use`, `free-space`, `delete-sims`) and `sync` between workspaces |
66
70
  | `pyfs-qa` | Command-validity probes and physics regression on a licensed machine |
67
71
  | `pyfs-fsi` | The structural executable of the aeroelastic coupling loop |
@@ -75,7 +79,7 @@ maps each GUI step to the key that takes it here.
75
79
  | Parsers, tables, run manifest, reconstruction | supported |
76
80
  | Campaigns, run matrices, workspace, pre-flight | supported |
77
81
  | Far-field ledgers and probe surveys | **experimental** |
78
- | FSI structural beam and modal analysis | **experimental** (`examples/wing_static_deflection.py`, `examples/fsi_campbell_diagram.py`) |
82
+ | FSI structural beam and modal analysis | **experimental** (`docs/examples/_sources/wing_static_deflection.py`, `docs/examples/_sources/fsi_campbell_diagram.py`) |
79
83
  | FSI coupled driver (the four-phase loop) | **experimental**: offline replay only, never run against a live solver in CI |
80
84
  | Rotary two-way coupling | **not validated** |
81
85
 
@@ -99,8 +103,9 @@ and the evidence behind it is narrower than for the supported rows.
99
103
  | 26.125 | 26.12 | `operational` |
100
104
 
101
105
  `operational` means the minimal geometry-to-loads workflow builds for that
102
- version, checked by a test; `documented` means the manual has been read but
103
- nothing has been measured on the build yet. The details, and how to tell
106
+ version, checked by a test. `documented` describes the database support level;
107
+ it does not imply that no measurements exist for that build. Individual commands
108
+ may carry different evidence. The details, and how to tell
104
109
  which build you have, are on
105
110
  [Which build do I have](https://nevesgeovana.github.io/pyflightstream/builds/):
106
111
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyflightstream"
7
- version = "0.40.0"
7
+ version = "0.41.0"
8
8
  description = "Version-aware, didactic Python driver for the FlightStream panel-method solver"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -187,6 +187,16 @@ testpaths = ["tests"]
187
187
  # with `-o pythonpath=`.
188
188
  pythonpath = ["src"]
189
189
  markers = [
190
+ "pkg_core: tier-1 core package",
191
+ "pkg_script_results: tier-1 script-results package",
192
+ "pkg_probes_farfield: tier-1 probes-farfield package",
193
+ "pkg_fsi: tier-1 fsi package",
194
+ "pkg_cases: tier-1 cases package",
195
+ "pkg_workspace: tier-1 workspace package",
196
+ "pkg_run: tier-1 run package",
197
+ "pkg_post: tier-1 post package",
198
+ "pkg_qa: tier-1 qa package",
199
+ "pkg_guards: tier-1 repository guards package",
190
200
  "needs_flightstream: requires a local FlightStream installation and license",
191
201
  "validity: tier 2 per-command probe tests",
192
202
  "physics: tier 3 physics regression matrix (slow)",
@@ -276,7 +286,7 @@ exclude_also = [
276
286
  # modules exempted below still reports at least one error (re-counted with the
277
287
  # sentence above). The per-module figures, the
278
288
  # reproduction command and the dependency versions the count rests on are in
279
- # reports/RPT-029, and `scripts/mypy_recount.py` re-derives every one of them
289
+ # the internal type-debt record; the release tooling re-derives the counts
280
290
  # from a single run.
281
291
  #
282
292
  # THE PROSE AROUND THE SENTENCE IS NOT GUARDED AND WENT STALE ON 2026-08-20,
@@ -37,7 +37,7 @@ _POST_WARNINGS: ContextVar[bool | None] = ContextVar(
37
37
  "pyflightstream_cli_post_warnings", default=None
38
38
  )
39
39
  #: Python's own warning format, held for the length of one invocation so a
40
- #: console level chosen after the parse can put it back (FR-436 R6).
40
+ #: console level chosen after the parse can put it back (FR-997).
41
41
  _STANDARD_FORMAT: ContextVar[Callable[..., str] | None] = ContextVar(
42
42
  "pyflightstream_cli_standard_format", default=None
43
43
  )
@@ -73,7 +73,7 @@ def note_post_ran() -> None:
73
73
 
74
74
 
75
75
  def set_post_warning_policy(enabled: bool) -> None:
76
- """Set whether this invocation prints grouped post-processing warnings (FR-436 R5).
76
+ """Set whether this invocation prints grouped post-processing warnings (FR-996).
77
77
 
78
78
  Read from the raw command line before the parse; a workspace settings file
79
79
  or ``--no-pproc-warnings`` decides after it. Outside a console command it
@@ -89,7 +89,7 @@ def set_post_warning_policy(enabled: bool) -> None:
89
89
 
90
90
 
91
91
  def set_console_level(level: str) -> None:
92
- """Set the console level of this invocation, chosen after the parse (FR-436 R6).
92
+ """Set the console level of this invocation, chosen after the parse (FR-997).
93
93
 
94
94
  ``verbose`` prints warnings in Python's full format, the other two levels in
95
95
  the package's short one; :func:`pyflightstream._progress.set_console_level`
@@ -264,7 +264,7 @@ def cli_entrypoint[**P, R](function: Callable[P, R]) -> Callable[P, R]:
264
264
  _POSTED.reset(posted_token)
265
265
  _POST_WARNINGS.reset(warning_token)
266
266
  _ACTIVE.reset(token)
267
- # FR-436 R6: a quiet console says its errors and final line, then the signature.
267
+ # FR-997: a quiet console says its errors and final line, then the signature.
268
268
  _progress.release_quiet(terminal, failed=outcome in ("failed", "cancelled"))
269
269
  if outcome == "success" and posted[0]:
270
270
  outcome = "post"
@@ -36,7 +36,7 @@ _Subparsers = argparse._SubParsersAction
36
36
  #: word longer than the room left (a long path) is kept whole on its own line.
37
37
  WIDTH = 90
38
38
 
39
- #: The console levels of a command (FR-436 R6), least to most: ``quiet`` says the
39
+ #: The console levels of a command (FR-997), least to most: ``quiet`` says the
40
40
  #: errors, the final summary line and the signature; ``normal`` is the console of
41
41
  #: 0.38.0; ``verbose`` is its ``--verbose``. The activity log is full at every level.
42
42
  CONSOLE_LEVELS = ("quiet", "normal", "verbose")
@@ -640,100 +640,18 @@ def removed_names_hook(module: str) -> Callable[[str], object]:
640
640
  return refuse
641
641
 
642
642
 
643
- #: THE VOCABULARY THAT MOVED TO THE REFERENCE (FR-59 and FR-72, the design
644
- #: of 2026-09-10). Both tables were the setup preset's at 0.14.0, are read
645
- #: from it with a warning at 0.15.0, and stop being read at 0.17.0. Two
646
- #: releases rather than one because a workspace migrates its inputs by
647
- #: hand and the tables are shared by every row of a configuration.
648
- _MOVED_TO_THE_REFERENCE = (
649
- "A boundary name and a coordinate system are properties of the "
650
- "CONFIGURATION, and a preset is per condition."
651
- )
652
- SETUP_ALIASES_TABLE = DeprecatedParameter(
653
- owner="the setup preset",
654
- old="[aliases]",
655
- new="the same table in the reference artifact",
656
- deprecated_since="0.15.0",
657
- removal_version="0.18.0",
658
- extra=_MOVED_TO_THE_REFERENCE,
659
- )
660
- SETUP_FRAMES_TABLE = DeprecatedParameter(
661
- owner="the setup preset",
662
- old="[[frames]]",
663
- new="the same table in the reference artifact",
664
- deprecated_since="0.15.0",
665
- removal_version="0.18.0",
666
- extra=_MOVED_TO_THE_REFERENCE,
667
- )
668
- #: THE FIVE ROW KEYS AN ALIAS REPLACES (FR-61). The reference states each
669
- #: of them once, in the rotor's own block, so a row states the alias and
670
- #: nothing else about the rotor.
671
- _STATED_IN_THE_BLOCK = (
672
- "The reference states it once, in the rotor's own block, and a row names the rotor by alias."
673
- )
643
+ #: A motion record must name its rotor by alias. Flat rotor rows retain their
644
+ #: accepted axis, origin, sign and blade-count keys; this refusal is conditional
645
+ #: on MOVING_BOUNDARIES appearing inside a MOTIONS record.
674
646
  ROW_MOVING_BOUNDARIES = DeprecatedParameter(
675
- owner="a motion record",
647
+ owner="a MOTIONS record",
676
648
  old="MOVING_BOUNDARIES",
677
649
  new="MOVING_BC_ALIAS",
678
650
  deprecated_since="0.15.0",
679
651
  removal_version="0.18.0",
680
- extra=_STATED_IN_THE_BLOCK,
681
- )
682
- ROW_ROTOR_AXIS = DeprecatedParameter(
683
- owner="a motion record",
684
- old="ROTOR_AXIS",
685
- new="the axis of the rotor the record names",
686
- deprecated_since="0.15.0",
687
- removal_version="0.18.0",
688
- extra=_STATED_IN_THE_BLOCK,
689
- )
690
- ROW_ROTOR_ORIGIN = DeprecatedParameter(
691
- owner="a motion record",
692
- old="ROTOR_ORIGIN",
693
- new="the hub of the rotor the record names",
694
- deprecated_since="0.15.0",
695
- removal_version="0.18.0",
696
- extra=_STATED_IN_THE_BLOCK,
697
- )
698
- ROW_RPM_SIGN = DeprecatedParameter(
699
- owner="a motion record",
700
- old="RPM_SIGN",
701
- new="the rpm_sign of the rotor the record names",
702
- deprecated_since="0.15.0",
703
- removal_version="0.18.0",
704
- extra=_STATED_IN_THE_BLOCK,
705
- )
706
- ROW_BLADES = DeprecatedParameter(
707
- owner="a motion record",
708
- old="BLADES",
709
- new="the length of that rotor's families_blades",
710
- deprecated_since="0.15.0",
711
- removal_version="0.18.0",
712
652
  extra=(
713
- "The reference states the blade FAMILIES and the count is how many "
714
- "there are, so a sector mesh carrying one blade of four still "
715
- "reduces over four and no row states a number that can disagree "
716
- "with the file it opens."
717
- ),
718
- )
719
- #: A KEY BECOMING REQUIRED IS NOT A RENAME, and this is the first entry of
720
- #: that shape. `old` is the ABSENCE and `new` is the key, because what a
721
- #: reader needs is the sentence "you have until 0.17.0 to add this", which
722
- #: the ledger's own renderer produces from those two fields. Written here
723
- #: rather than only in the warning string, because a promise the deadline
724
- #: guard cannot see is a promise nothing keeps (the interface lens of the
725
- #: 0.15.0 release review).
726
- ROW_CLOCK_MOTION_ON_A_FLAT_ROW = DeprecatedParameter(
727
- owner="a rotor row in the pre-0.15.0 spelling",
728
- old="no CLOCK_MOTION, the clock following the fastest rotor",
729
- new="CLOCK_MOTION naming the motion that owns the clock",
730
- deprecated_since="0.15.0",
731
- removal_version="0.18.0",
732
- extra=(
733
- "A row stating a MOTIONS list is refused without the key since "
734
- "0.15.0. A flat-form row that turns more than one rotor is refused "
735
- "without it as well, and a flat-form row turning ONE rotor needs no "
736
- "key, because there is nothing to choose between."
653
+ "A MOTIONS record names a rotor alias from the reference. "
654
+ "Flat rotor row keys remain accepted."
737
655
  ),
738
656
  )
739
657
  ROW_ROTATE_FAMILIES = DeprecatedParameter(
@@ -795,30 +713,11 @@ ROW_BLADES_SELECTOR = DeprecatedParameter(
795
713
  #: the entry moves rather than staying here unspoken. Its home is
796
714
  #: :data:`pyflightstream._retired_names.PROBE_SCALE_PROPELLER_RADIUS`.
797
715
 
798
- #: THE 0.15.0 BATCH, WHICH IS NOT A SET OF PROMISES. Every entry below was
799
- #: written in 0.15.0 and 0.15.0 has not shipped, so nobody has a workspace
800
- #: that was told the old spelling would keep working. The decision of
801
- #: 2026-09-10 is that this release breaks them rather than carrying two
802
- #: vocabularies into a package with no stable version: a promise made
803
- #: inside an unreleased version was never a promise to anyone.
804
- #:
805
- #: The entries stay as objects because their `message()` is the sentence the
806
- #: REFUSALS print, and one home for a sentence is what this module is for.
807
- #: They are out of :data:`DEPRECATIONS` because that tuple is what the Tier 1
808
- #: deadline guard reads, and there is no shim left for it to watch expire.
809
- #:
810
- #: The 0.14.0 batch is deliberately NOT here. Those promises were published,
811
- #: they expire at 0.16.0 which is the next release anyway, and breaking them
812
- #: would break a workspace that upgraded on the strength of them.
716
+ #: Live refusal messages for removed spellings, not unconditional bans on
717
+ #: flat rotor row keys. These entries have callers; obsolete catalog-only
718
+ #: entries are not promises or active refusals.
813
719
  REFUSED_IN_0_15_0: tuple[Deprecation, ...] = (
814
- SETUP_ALIASES_TABLE,
815
- SETUP_FRAMES_TABLE,
816
720
  ROW_MOVING_BOUNDARIES,
817
- ROW_ROTOR_AXIS,
818
- ROW_ROTOR_ORIGIN,
819
- ROW_RPM_SIGN,
820
- ROW_BLADES,
821
- ROW_CLOCK_MOTION_ON_A_FLAT_ROW,
822
721
  ROW_ROTATE_FAMILIES,
823
722
  ROW_EACH_BLADE,
824
723
  ROW_AIRFRAME_SELECTOR,
@@ -124,6 +124,11 @@ EXCLUDED_FROM_EVERY_DIGEST = (
124
124
  #: package for every ``hashlib`` call and fails on a module absent here,
125
125
  #: so a new digest cannot enter with its canonical form unstated.
126
126
  CANONICAL_FORMS = {
127
+ "workspace/record_document.py": (
128
+ "the UTF-8 encoding of JSON with sorted keys, compact comma/colon separators "
129
+ "and ensure_ascii=True for each shared solver, frame or geometry definition. "
130
+ "The full SHA-256 names the immutable definition in its workspace registry."
131
+ ),
127
132
  "_digest.py": (
128
133
  "the raw bytes of a file, read in blocks and never decoded; or the "
129
134
  "UTF-8 encoding of a string. Nothing else is read: not the path, not "
@@ -225,7 +230,7 @@ CANONICAL_FORMS = {
225
230
  "newline, 'name key=value ...' with the keys sorted, factor always "
226
231
  "written and every other option only when it is not its default, a "
227
232
  "number as the shortest text that reads back to the same float without "
228
- "a trailing '.0' (FR-433 R2). The first 8 hexadecimal characters name a "
233
+ "a trailing '.0' (FR-970). The first 8 hexadecimal characters name a "
229
234
  "level folder whose automatic tag is too long; refine.json lists the "
230
235
  "selected families as tag_selection, not the text."
231
236
  ),
@@ -171,15 +171,8 @@ class ProductArgumentError(PyflightstreamError, TypeError):
171
171
  class ProductError(PyflightstreamError, ValueError):
172
172
  """A product cannot be written from what the run left.
173
173
 
174
- DEFINED HERE RATHER THAN IN :mod:`pyflightstream.post._tables` since
175
- 0.23.0, and for the reason `InputArtifactError` is: TWO LAYERS NAME IT.
176
- The post layer raises it, and `workspace.rename_groups` -- the migration
177
- that moves a user's existing products -- raised it by importing UPWARD into
178
- `post`, an edge on the package's own import path that resolved only by the
179
- relative order of two lines in a third file. Moving that block, or adding
180
- any earlier `workspace` import to `post.products`, stopped the package
181
- importing at all. An architecture lens found it; a circular import while
182
- wiring item 14 is what made it urgent.
174
+ Defined in the shared error catalogue so callers can catch a product
175
+ refusal without importing the post-processing layer.
183
176
 
184
177
  `post.products` re-exports it, so the public name and the pair of bases are
185
178
  unchanged and `except ValueError` catches exactly what it always did.
@@ -1010,7 +1010,7 @@ def surface_mesh(
1010
1010
  def boundary_owners(path: str | Path) -> tuple[int, ...]:
1011
1011
  """Return the boundary of every face of a saved simulation's mesh block, counted from 1.
1012
1012
 
1013
- The geometry stage colours its preview by it (FR-471 R6). Empty where the
1013
+ The geometry stage colours its preview by it (FR-1107). Empty where the
1014
1014
  block carries no boundary row this reader recognises.
1015
1015
 
1016
1016
  Raises
@@ -11,7 +11,7 @@ trailing edges and the others), and everything else should come from the
11
11
  script. So every block other than those is put back to the content a freshly
12
12
  imported file holds.
13
13
 
14
- WHAT IS RESET IS MEASURED, NEVER GUESSED (FR-312 R2). A saved simulation is a
14
+ WHAT IS RESET IS MEASURED, NEVER GUESSED (FR-531). A saved simulation is a
15
15
  sequence of ``$<NAME>_START$`` ... ``$<NAME>_END$`` blocks after a two-line
16
16
  head (the solver's version, then its build). Measured on 2026-09-30 over the
17
17
  ten committed tier-3 geometries, which the tier-3 preparation made by
@@ -375,7 +375,7 @@ def reset_to_fresh_import(text: str, unit: str | None, where: str) -> FreshReset
375
375
  (),
376
376
  f"{where}: no fresh import of build {build or 'unknown'} saved in "
377
377
  f"{unit or 'an unread unit'} is measured, so every block other than the "
378
- "saved solver actions is kept as it is (FR-312 R2)",
378
+ "saved solver actions is kept as it is (FR-531)",
379
379
  )
380
380
  eol, lines = _lines(text)
381
381
  held = block_lines(text)
@@ -248,8 +248,6 @@ MATURITY = {
248
248
  "pyflightstream.run.matrix": "stable",
249
249
  # Module path added after v0.30.0.
250
250
  "pyflightstream.run.records": "provisional",
251
- # v0.30.0: run/rename.py
252
- "pyflightstream.run.rename": "stable",
253
251
  # v0.30.0: script/__init__.py
254
252
  "pyflightstream.script": "stable",
255
253
  # v0.30.0: script/entities.py
@@ -316,10 +314,12 @@ MATURITY = {
316
314
  "pyflightstream.workspace.manifest": "provisional",
317
315
  # v0.30.0: workspace/matrix.py
318
316
  "pyflightstream.workspace.matrix": "stable",
317
+ # 0.41.0: explicit workspace migration and shared record definitions.
318
+ "pyflightstream.workspace.migrate": "provisional",
319
319
  # v0.30.0: workspace/naming.py
320
320
  "pyflightstream.workspace.naming": "stable",
321
- # v0.30.0: workspace/rename_groups.py
322
- "pyflightstream.workspace.rename_groups": "stable",
321
+ # 0.41.0: shared record definitions.
322
+ "pyflightstream.workspace.record_document": "provisional",
323
323
  # Module path added after v0.30.0.
324
324
  "pyflightstream.workspace.selections": "provisional",
325
325
  # v0.30.0: workspace/setup_inspection.py
@@ -133,7 +133,7 @@ class _Terminal:
133
133
  self.console: _Console | None = None
134
134
  #: The width of the progress line a terminal shows now, to clear before any other line.
135
135
  self.redrawn = 0
136
- #: The ``quiet`` console level (FR-436 R6): what the console would show is
136
+ #: The ``quiet`` console level (FR-997): what the console would show is
137
137
  #: held, and only the errors and the final summary line are said at the end.
138
138
  self.quiet = False
139
139
  #: How deep the console is in its own chatter (the opening block, a stage
@@ -173,7 +173,7 @@ def command_terminal(*, verbose: bool) -> Iterator[_Terminal]:
173
173
 
174
174
 
175
175
  def set_console_level(level: str) -> None:
176
- """Set the console level of the running command (FR-436 R6).
176
+ """Set the console level of the running command (FR-997).
177
177
 
178
178
  ``verbose`` is the console of ``--verbose``; ``normal`` the default one;
179
179
  ``quiet`` holds everything the console would show and, once the command
@@ -220,7 +220,7 @@ def _chatter() -> Iterator[None]:
220
220
 
221
221
 
222
222
  def quiet_keeps(text: str, *, error: bool = False) -> None:
223
- """State a command's final summary, or one of its errors, for a quiet console (FR-436 R6).
223
+ """State a command's final summary, or one of its errors, for a quiet console (FR-997).
224
224
 
225
225
  A ``quiet`` console says, once the command has ended, the errors and the
226
226
  final summary line a command states here, whatever stream the command
@@ -250,7 +250,7 @@ def say_summary(text: str) -> None:
250
250
  """Print a command's final summary line on standard output, stated for a quiet console.
251
251
 
252
252
  The same line :func:`print` writes, at every level; a ``quiet`` console
253
- says it once the command has ended (FR-436 R6, :func:`quiet_keeps`).
253
+ says it once the command has ended (FR-997, :func:`quiet_keeps`).
254
254
 
255
255
  Parameters
256
256
  ----------
@@ -788,7 +788,7 @@ class _ConsoleStream:
788
788
  Each write clears a progress line a terminal shows, says the opening block
789
789
  first where it is still owed, then goes to the stream it wraps and to the
790
790
  live log. Every other attribute is the wrapped stream's. On a ``quiet``
791
- console (FR-436 R6) a write still reaches the live log and is not said:
791
+ console (FR-997) a write still reaches the live log and is not said:
792
792
  of standard error what is not the console's own chatter is held, for
793
793
  :func:`release_quiet` to say if the command fails; standard output is
794
794
  said only through what the command states with :func:`quiet_keeps`.