pyflightstream 0.45.0__tar.gz → 0.45.1__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 (415) hide show
  1. {pyflightstream-0.45.0/src/pyflightstream.egg-info → pyflightstream-0.45.1}/PKG-INFO +1 -1
  2. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/pyproject.toml +1 -1
  3. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/fsi_workspace.py +2 -2
  4. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/pproc.py +45 -44
  5. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/reference_blocks.py +48 -17
  6. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_clock.py +2 -2
  7. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_exports.py +18 -0
  8. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_farfield.py +81 -75
  9. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_frames.py +61 -15
  10. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_motion.py +1 -3
  11. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_pproc.py +18 -1
  12. pyflightstream-0.45.1/src/pyflightstream/cases/workflows/_probe_imports.py +159 -0
  13. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_probes.py +187 -44
  14. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_qsteady_rotor.py +3 -5
  15. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_registry.py +6 -8
  16. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_rotor.py +12 -3
  17. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_rows.py +5 -9
  18. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_skeleton.py +2 -0
  19. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_field_inputs.py +1 -1
  20. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_reduction_stage.py +17 -8
  21. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_sim.py +43 -5
  22. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/farfield_fields.py +73 -27
  23. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/farfield_products.py +3 -2
  24. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/input_template.py +3 -3
  25. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/products.py +13 -0
  26. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/qsteady.py +1 -1
  27. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/probes/layouts.py +53 -6
  28. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_actions_counter.py +22 -1
  29. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_continuation.py +6 -1
  30. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/inputs.py +2 -2
  31. {pyflightstream-0.45.0 → pyflightstream-0.45.1/src/pyflightstream.egg-info}/PKG-INFO +1 -1
  32. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream.egg-info/SOURCES.txt +1 -0
  33. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/LICENSE +0 -0
  34. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/MANIFEST.in +0 -0
  35. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/README.md +0 -0
  36. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/setup.cfg +0 -0
  37. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/__init__.py +0 -0
  38. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_atmosphere.py +0 -0
  39. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_cli.py +0 -0
  40. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_console.py +0 -0
  41. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_decimal.py +0 -0
  42. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_deprecations.py +0 -0
  43. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_digest.py +0 -0
  44. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_errors.py +0 -0
  45. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_expressions.py +0 -0
  46. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_fsi_calibration.py +0 -0
  47. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_fsm.py +0 -0
  48. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_fsm_fresh.py +0 -0
  49. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_lengths.py +0 -0
  50. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_maturity.py +0 -0
  51. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_mesh.py +0 -0
  52. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_progress.py +0 -0
  53. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_retired_names.py +0 -0
  54. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_signature.py +0 -0
  55. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_textio.py +0 -0
  56. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_tokens.py +0 -0
  57. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/_yamlflow.py +0 -0
  58. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/__init__.py +0 -0
  59. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_ccs.py +0 -0
  60. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_farfield_spec.py +0 -0
  61. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_fsi_external.py +0 -0
  62. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_geometry_emit.py +0 -0
  63. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_geometry_instruction.py +0 -0
  64. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_matrix_layouts.py +0 -0
  65. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_matrix_upgrade.py +0 -0
  66. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_setup_keys.py +0 -0
  67. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_setup_link.py +0 -0
  68. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_skipped_families.py +0 -0
  69. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_sweep_names.py +0 -0
  70. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/_unsteady_actions.py +0 -0
  71. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/acoustics.py +0 -0
  72. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/ccs_fuselage.py +0 -0
  73. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/ccs_revolution.py +0 -0
  74. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/ccs_wing.py +0 -0
  75. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/corrections.py +0 -0
  76. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/farfield_inputs.py +0 -0
  77. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/field_coverage.py +0 -0
  78. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/freestream.py +0 -0
  79. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/matrix.py +0 -0
  80. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/mesh.py +0 -0
  81. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/naming.py +0 -0
  82. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/qsteady.py +0 -0
  83. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/selection.py +0 -0
  84. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/settings.py +0 -0
  85. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/setup_surfaces.py +0 -0
  86. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/sixdof.py +0 -0
  87. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/windows.py +0 -0
  88. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/__init__.py +0 -0
  89. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_actuator.py +0 -0
  90. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_additional.py +0 -0
  91. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_batch_actions.py +0 -0
  92. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_batch_script.py +0 -0
  93. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_conventions.py +0 -0
  94. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_export_first_step.py +0 -0
  95. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_freestream.py +0 -0
  96. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_gap_evidence.py +0 -0
  97. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_geometry.py +0 -0
  98. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_names.py +0 -0
  99. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_reductions.py +0 -0
  100. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_row_cells.py +0 -0
  101. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_sixdof.py +0 -0
  102. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_solver_settings.py +0 -0
  103. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_steady.py +0 -0
  104. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_streamlines.py +0 -0
  105. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_timing.py +0 -0
  106. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_unsteady.py +0 -0
  107. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_vocabulary.py +0 -0
  108. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/cases/workflows/_wake_length.py +0 -0
  109. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/__init__.py +0 -0
  110. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/_meta.yaml +0 -0
  111. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/_schema.py +0 -0
  112. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/acoustics.yaml +0 -0
  113. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/actuators.yaml +0 -0
  114. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/advanced_settings.yaml +0 -0
  115. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/aeroelastic_coupling.yaml +0 -0
  116. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/base_regions.yaml +0 -0
  117. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/boundary_conditions.yaml +0 -0
  118. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/cad.yaml +0 -0
  119. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/cad_create.yaml +0 -0
  120. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/ccs_fuselage_mesh.yaml +0 -0
  121. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/ccs_revolve_mesh.yaml +0 -0
  122. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/ccs_wing_mesh.yaml +0 -0
  123. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/coordinate_systems.yaml +0 -0
  124. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/file_io.yaml +0 -0
  125. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/free_surfaces.yaml +0 -0
  126. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/inlets_outlets.yaml +0 -0
  127. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/mesh_import_export.yaml +0 -0
  128. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/mesh_operations.yaml +0 -0
  129. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/mesh_unite.yaml +0 -0
  130. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/mesh_wrapper.yaml +0 -0
  131. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/motion_definitions.yaml +0 -0
  132. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/plots.yaml +0 -0
  133. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/probe_points.yaml +0 -0
  134. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/runtime_settings.yaml +0 -0
  135. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/scene_settings.yaml +0 -0
  136. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/scenes.yaml +0 -0
  137. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/script_controls.yaml +0 -0
  138. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/simulation_controls.yaml +0 -0
  139. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/solver_analysis.yaml +0 -0
  140. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/solver_contours.yaml +0 -0
  141. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/solver_export.yaml +0 -0
  142. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/solver_initialization.yaml +0 -0
  143. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/solver_settings.yaml +0 -0
  144. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/stability_toolbox.yaml +0 -0
  145. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/streamlines.yaml +0 -0
  146. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/surface_sections.yaml +0 -0
  147. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/sweeper.yaml +0 -0
  148. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/transition_trips.yaml +0 -0
  149. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/unsteady_solver.yaml +0 -0
  150. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/commands/volume_sections.yaml +0 -0
  151. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/exceptions.py +0 -0
  152. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/extras.py +0 -0
  153. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/farfield/__init__.py +0 -0
  154. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/farfield/balances.py +0 -0
  155. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/farfield/fields.py +0 -0
  156. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/farfield/quadrature.py +0 -0
  157. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/farfield/trefftz.py +0 -0
  158. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/__init__.py +0 -0
  159. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/_direct_morphing.py +0 -0
  160. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/beam.py +0 -0
  161. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/calibration.py +0 -0
  162. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/centrifugal.py +0 -0
  163. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/cli.py +0 -0
  164. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/config.py +0 -0
  165. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/driver.py +0 -0
  166. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/errors.py +0 -0
  167. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/external.py +0 -0
  168. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/kinematics.py +0 -0
  169. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/loads.py +0 -0
  170. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/materials.py +0 -0
  171. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/nodes.py +0 -0
  172. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/sections.py +0 -0
  173. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/state.py +0 -0
  174. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/fsi/wing.py +0 -0
  175. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/options.py +0 -0
  176. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/overview.py +0 -0
  177. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/__init__.py +0 -0
  178. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_additional.py +0 -0
  179. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_admit.py +0 -0
  180. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_condition.py +0 -0
  181. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_installed_copies.py +0 -0
  182. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_matrix_template.py +0 -0
  183. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_noise_products.py +0 -0
  184. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_products_campaign.py +0 -0
  185. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_rotor_plan.py +0 -0
  186. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_rotor_products.py +0 -0
  187. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_settings_product.py +0 -0
  188. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_stage.py +0 -0
  189. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_structure.py +0 -0
  190. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_tables.py +0 -0
  191. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/_transfer_functions.py +0 -0
  192. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/acoustics.py +0 -0
  193. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/axes.py +0 -0
  194. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/boundary_layer.py +0 -0
  195. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/corrections.py +0 -0
  196. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/custom_polar.py +0 -0
  197. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/diagnostics.py +0 -0
  198. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/disc_maps.py +0 -0
  199. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/equations.py +0 -0
  200. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/field_frames.py +0 -0
  201. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/glossary.py +0 -0
  202. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/guides.py +0 -0
  203. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/harmonics.py +0 -0
  204. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/inflow_tools.py +0 -0
  205. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/point_tables.py +0 -0
  206. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/polar.py +0 -0
  207. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/probe_fields.py +0 -0
  208. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/provenance.py +0 -0
  209. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/qsteady_noise.py +0 -0
  210. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/reductions.py +0 -0
  211. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/rotor_table.py +0 -0
  212. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/section_distributions.py +0 -0
  213. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/series.py +0 -0
  214. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/settings_table.py +0 -0
  215. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/streamlines.py +0 -0
  216. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/superfile.py +0 -0
  217. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/surfaces.py +0 -0
  218. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/unsteady.py +0 -0
  219. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/unsteady_polar.py +0 -0
  220. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/post/writers.py +0 -0
  221. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/probes/__init__.py +0 -0
  222. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/probes/_model.py +0 -0
  223. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/probes/errors.py +0 -0
  224. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/probes/geometry.py +0 -0
  225. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/probes/lattice.py +0 -0
  226. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/probes/planar.py +0 -0
  227. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/__init__.py +0 -0
  228. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_reanalysis.py +0 -0
  229. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_0400_gap.py +0 -0
  230. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_0400_gapbase.py +0 -0
  231. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_0400_gapedges.py +0 -0
  232. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_0400_gapkit.py +0 -0
  233. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_26125.py +0 -0
  234. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_catalog_b.py +0 -0
  235. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_ccs_mesh.py +0 -0
  236. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_ccs_noise.py +0 -0
  237. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_kit.py +0 -0
  238. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/_spec_t1.py +0 -0
  239. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/cli.py +0 -0
  240. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/compat.py +0 -0
  241. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/cost.py +0 -0
  242. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/drift.py +0 -0
  243. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/errors.py +0 -0
  244. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/geometry.py +0 -0
  245. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/matrix.py +0 -0
  246. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/physics.py +0 -0
  247. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/probes.py +0 -0
  248. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/PHY-01.yaml +0 -0
  249. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/PHY-02.yaml +0 -0
  250. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/PHY-05.yaml +0 -0
  251. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/PHY-06.yaml +0 -0
  252. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/SMI-01.yaml +0 -0
  253. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/SMI-02.yaml +0 -0
  254. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/pressure-drag/PHY-01.yaml +0 -0
  255. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/pressure-drag/PHY-02.yaml +0 -0
  256. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/pressure-drag/PHY-05.yaml +0 -0
  257. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/references/pressure-drag/PHY-06.yaml +0 -0
  258. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/reports.py +0 -0
  259. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/qa/specs.py +0 -0
  260. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/reference.py +0 -0
  261. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/__init__.py +0 -0
  262. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/conditions.py +0 -0
  263. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/core.py +0 -0
  264. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/exports.py +0 -0
  265. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/loads.py +0 -0
  266. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/log.py +0 -0
  267. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/native_surface.py +0 -0
  268. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/sectional_loads.py +0 -0
  269. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/surface.py +0 -0
  270. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/tables.py +0 -0
  271. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/results/wake.py +0 -0
  272. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/__init__.py +0 -0
  273. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_additional.py +0 -0
  274. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_alias.py +0 -0
  275. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_assemble.py +0 -0
  276. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_assessment.py +0 -0
  277. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_batch_collect.py +0 -0
  278. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_batch_exec.py +0 -0
  279. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_batch_plan.py +0 -0
  280. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_batch_run.py +0 -0
  281. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_batch_split.py +0 -0
  282. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_campaign.py +0 -0
  283. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_cli_geometry.py +0 -0
  284. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_cli_mesh.py +0 -0
  285. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_cli_parsers.py +0 -0
  286. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_cli_parsers_storage.py +0 -0
  287. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_cli_print.py +0 -0
  288. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_cli_query.py +0 -0
  289. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_cli_query_history.py +0 -0
  290. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_cli_query_point.py +0 -0
  291. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_collect_logs.py +0 -0
  292. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_collect_notes.py +0 -0
  293. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_continuation_frame.py +0 -0
  294. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_executors.py +0 -0
  295. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_field_motion.py +0 -0
  296. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_grouped.py +0 -0
  297. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_identity.py +0 -0
  298. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_ids.py +0 -0
  299. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_mark_converged.py +0 -0
  300. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_matrix_warnings.py +0 -0
  301. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_pending.py +0 -0
  302. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_plan.py +0 -0
  303. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_plan_report.py +0 -0
  304. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_points.py +0 -0
  305. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_rebuild.py +0 -0
  306. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_rebuild_evidence.py +0 -0
  307. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_rebuild_grouped.py +0 -0
  308. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_rebuild_summary.py +0 -0
  309. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_record_files.py +0 -0
  310. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_solver_windows.py +0 -0
  311. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_step_exports.py +0 -0
  312. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_sweep.py +0 -0
  313. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/_wake_edge_verdict.py +0 -0
  314. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/cli.py +0 -0
  315. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/collect.py +0 -0
  316. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/matrix.py +0 -0
  317. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/run/records.py +0 -0
  318. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/__init__.py +0 -0
  319. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/_arg_checks.py +0 -0
  320. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/_build_forms.py +0 -0
  321. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/_ledger_tables.py +0 -0
  322. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/_relaxed_te.py +0 -0
  323. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/_settings.py +0 -0
  324. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/_surface_averaging.py +0 -0
  325. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/_wake_edge_file.py +0 -0
  326. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/entities.py +0 -0
  327. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/helpers.py +0 -0
  328. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/motion.py +0 -0
  329. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/rotor_vocabulary.py +0 -0
  330. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/solver_setup.py +0 -0
  331. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/script/toggles.py +0 -0
  332. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/support.py +0 -0
  333. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/testing.py +0 -0
  334. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/utils/__init__.py +0 -0
  335. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/utils/cli.py +0 -0
  336. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/utils/database.py +0 -0
  337. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/utils/errors.py +0 -0
  338. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/utils/manual.py +0 -0
  339. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/versions.py +0 -0
  340. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/__init__.py +0 -0
  341. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_batch_life.py +0 -0
  342. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_batch_relocate.py +0 -0
  343. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_batches.py +0 -0
  344. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_degenerate.py +0 -0
  345. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_effective.py +0 -0
  346. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_free_space.py +0 -0
  347. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_geometry_build.py +0 -0
  348. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_geometry_clean.py +0 -0
  349. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_geometry_convert.py +0 -0
  350. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_geometry_instruction.py +0 -0
  351. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_geometry_record.py +0 -0
  352. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_geometry_sidecar.py +0 -0
  353. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_geometry_vtk.py +0 -0
  354. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_layout.py +0 -0
  355. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_ledger_api.py +0 -0
  356. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_ledger_history.py +0 -0
  357. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_links.py +0 -0
  358. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_matrix_binding.py +0 -0
  359. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_matrix_homes.py +0 -0
  360. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_matrix_phases.py +0 -0
  361. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_missing_log.py +0 -0
  362. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_query_files.py +0 -0
  363. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_query_logs.py +0 -0
  364. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_query_point.py +0 -0
  365. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/__init__.py +0 -0
  366. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_audit.py +0 -0
  367. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_blocks.py +0 -0
  368. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_config.py +0 -0
  369. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_geometry.py +0 -0
  370. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_grid.py +0 -0
  371. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_level.py +0 -0
  372. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_obj.py +0 -0
  373. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_periodic.py +0 -0
  374. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_remesh.py +0 -0
  375. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_remesh_group.py +0 -0
  376. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_remesh_pairs.py +0 -0
  377. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_refine/_staging.py +0 -0
  378. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_row_setup.py +0 -0
  379. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_script_comparison.py +0 -0
  380. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_settings_file.py +0 -0
  381. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_step_prune.py +0 -0
  382. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/_verdicts.py +0 -0
  383. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/actuator_profiles.py +0 -0
  384. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/builds.py +0 -0
  385. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/cli.py +0 -0
  386. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/costs.py +0 -0
  387. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/excel.py +0 -0
  388. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/excel_bridge.py +0 -0
  389. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/excel_file.py +0 -0
  390. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/excel_sync.py +0 -0
  391. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/fields.py +0 -0
  392. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/flight_condition.py +0 -0
  393. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/fsi_external_setup.py +0 -0
  394. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/fsi_setup.py +0 -0
  395. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/hpc.py +0 -0
  396. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/ledger.py +0 -0
  397. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/manifest.py +0 -0
  398. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/matrix.py +0 -0
  399. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/migrate.py +0 -0
  400. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/naming.py +0 -0
  401. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/record_document.py +0 -0
  402. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/selections.py +0 -0
  403. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/setup_inspection.py +0 -0
  404. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/setup_standards.py +0 -0
  405. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/sidecars.py +0 -0
  406. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/sixdof_setup.py +0 -0
  407. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/storage.py +0 -0
  408. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/trailing_edges.py +0 -0
  409. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream/workspace/wake_edges.py +0 -0
  410. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream.egg-info/dependency_links.txt +0 -0
  411. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream.egg-info/entry_points.txt +0 -0
  412. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream.egg-info/requires.txt +0 -0
  413. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/src/pyflightstream.egg-info/top_level.txt +0 -0
  414. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/tools/check_shipped_surface.py +0 -0
  415. {pyflightstream-0.45.0 → pyflightstream-0.45.1}/tools/shipped_surface.conf +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyflightstream
3
- Version: 0.45.0
3
+ Version: 0.45.1
4
4
  Summary: Version-aware, didactic Python driver for the FlightStream panel-method solver
5
5
  Author: Geovana Neves
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyflightstream"
7
- version = "0.45.0"
7
+ version = "0.45.1"
8
8
  description = "Version-aware, didactic Python driver for the FlightStream panel-method solver"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -876,7 +876,7 @@ def wire_workspace_fsi(
876
876
  blades = list(rotor.families_blades)
877
877
  if len(blades) != cfg.blade_count or len(set(blades)) != len(blades):
878
878
  raise CampaignConfigError("FSI blade count differs from the unique resolved rotor blades.")
879
- if rotor.axis != "X" or rotor.blade1.zero != "Z":
879
+ if rotor.axis_vector != (1.0, 0.0, 0.0) or rotor.blade1.zero != "Z":
880
880
  raise CampaignConfigError(
881
881
  "FSI rotor_frame requires shaft X and blade datum Z; another node/load basis "
882
882
  "has not been established by this adapter."
@@ -1211,7 +1211,7 @@ def wire_quasi_steady_sector_fsi(
1211
1211
  "blade, blade one, and the others are its periodic images."
1212
1212
  )
1213
1213
  if (
1214
- rotor.axis != "X"
1214
+ rotor.axis_vector != (1.0, 0.0, 0.0)
1215
1215
  or rotor.blade1.zero != "Z"
1216
1216
  or abs(rotor.blade1.azimuth_deg) > 1e-12
1217
1217
  or any(abs(value) > _ORIGIN_TOLERANCE_M for value in rotor.origin)
@@ -37,7 +37,7 @@ from pydantic import (
37
37
  )
38
38
 
39
39
  from pyflightstream._deprecations import ROW_EACH_BLADE, refusal_text
40
- from pyflightstream._errors import InputArtifactError
40
+ from pyflightstream._errors import InputArtifactError, PyflightstreamWarning, warn
41
41
  from pyflightstream._expressions import ALLOWED_FUNCTIONS, expression_symbols
42
42
  from pyflightstream._retired_names import PROBE_SCALE_PROPELLER_RADIUS
43
43
  from pyflightstream._tokens import REDUCTION_COLUMNS
@@ -51,7 +51,6 @@ from pyflightstream.cases._farfield_spec import (
51
51
  farfield_entries,
52
52
  )
53
53
  from pyflightstream.cases.corrections import QsteadyCorrectionSpec
54
- from pyflightstream.cases.reference_blocks import CampaignConfigError
55
54
  from pyflightstream.cases.selection import EVERY_FAMILY
56
55
  from pyflightstream.commands import CommandRegistry
57
56
  from pyflightstream.probes.planar import PlanarProbeGrid
@@ -146,6 +145,7 @@ EXPORT_KINDS: tuple[tuple[str, str, str, bool], ...] = (
146
145
  # FR-461: a free body's trajectory, declared only by a row's SIXDOF
147
146
  # input. Its command is a setup command, emitted with the motion it names.
148
147
  ("trajectory_6dof", "_trajectory_6dof.txt", "EXPORT_6DOF_TRAJECTORY", True),
148
+ ("debug_fsm", "_debug.fsm", "SAVEAS", False),
149
149
  ("log", "_log.txt", "EXPORT_LOG", False),
150
150
  )
151
151
 
@@ -202,17 +202,15 @@ EXPORT_KIND_SINCE: dict[str, tuple[int, int]] = {
202
202
  #: are saved once after the march (GOAL-033 T40, 26.124 build 8172026).
203
203
  STEADY_ONLY_EXPORT_KINDS: frozenset[str] = frozenset({"probes"})
204
204
 
205
- #: FR-417: the probe kinds a ``[[probes]]`` entry may state. ``unsteady`` (the
206
- #: default) samples through fluid plots at every time step; ``normal`` creates
207
- #: probe points after the time march and exports them once.
208
- ProbeKind = Literal["unsteady", "normal"]
205
+ #: PFS-2167: default samples once; instantaneous requests an unsteady history.
206
+ ProbeKind = Literal["default", "instantaneous"]
209
207
  PROBE_KINDS: tuple[str, ...] = get_args(ProbeKind)
210
208
 
211
209
  #: The kinds a pproc must switch ON: every other kind is on unless its
212
210
  #: ``[exports]`` entry says false. The surface fields and the per-panel force
213
211
  #: distribution (G10) grow with the mesh, so they are asked for
214
212
  #: where they are wanted.
215
- OPT_IN_EXPORT_KINDS: tuple[str, ...] = ("vtk", "csv", "force_distributions")
213
+ OPT_IN_EXPORT_KINDS: tuple[str, ...] = ("vtk", "csv", "force_distributions", "debug_fsm")
216
214
 
217
215
  #: What each kind an ``[exports]`` table may name leaves, one sentence each,
218
216
  #: for the generated input glossary ``INPUTS.md`` (G08). The command
@@ -221,6 +219,7 @@ OPT_IN_EXPORT_KINDS: tuple[str, ...] = ("vtk", "csv", "force_distributions")
221
219
  #: The two volume-section kinds are not here: ``[exports]`` cannot name them.
222
220
  EXPORT_KIND_MEANINGS: dict[str, str] = {
223
221
  "simulation": "The point's final saved simulation, its solver state after the solve.",
222
+ "debug_fsm": "The solver state before output setup, for inspection only.",
224
223
  "loads": "The loads table, the export every run is judged by.",
225
224
  "tecplot": (
226
225
  "The surface solution in Tecplot format, written by the package from the VTK "
@@ -1186,10 +1185,10 @@ class ProbesSpec(_LocatedSpec):
1186
1185
  points_file : str, optional
1187
1186
  The name of a points file of ``inputs/profiles/``, cited instead of
1188
1187
  drawing lines and planes.
1189
- kind : {'unsteady', 'normal'}
1190
- How an unsteady row samples the entry: ``unsteady``, one
1188
+ kind : {'default', 'instantaneous'}
1189
+ How an unsteady row samples the entry: ``instantaneous``, one
1191
1190
  fluid plot per point and parameter evaluated at every time step, or
1192
- ``normal``, probe points created after the time march and exported
1191
+ ``default`` (also when absent), probe points created after the time march and exported
1193
1192
  once, at the last time step. A steady row accepts either and samples
1194
1193
  probe points.
1195
1194
  """
@@ -1238,26 +1237,35 @@ class ProbesSpec(_LocatedSpec):
1238
1237
  #: committed report).
1239
1238
  #: Excluded from every dump, so no machine path reaches a record or a plan.
1240
1239
  resolved_points_file: str | None = Field(default=None, exclude=True)
1241
- #: FR-417: how an unsteady row samples this entry. ``unsteady`` (the
1242
- #: default) is one fluid plot per point and
1243
- #: parameter, a history at every time step; ``normal`` is probe points
1240
+ #: How an unsteady row samples this entry. ``instantaneous`` is one fluid
1241
+ #: plot per point and parameter, a history at every time step; ``default`` is probe points
1244
1242
  #: created after the time march with the steady commands, updated and
1245
1243
  #: exported once, so they hold the solution at the end of the march (RPT-153,
1246
1244
  #: "normal probes after an unsteady march", 2026-10-05; not the same sample as
1247
1245
  #: the last fluid-plot step). A steady row samples
1248
1246
  #: probe points whatever the entry states.
1249
- kind: ProbeKind = "unsteady"
1247
+ kind: ProbeKind = "default"
1250
1248
 
1251
1249
  @field_validator("kind", mode="before")
1252
1250
  @classmethod
1253
1251
  def _a_known_probe_kind(cls, value: object) -> object:
1254
1252
  """Refuse a probe kind other than the two, naming both (FR-888)."""
1253
+ aliases = {"normal": "default", "unsteady": "instantaneous"}
1254
+ if isinstance(value, str) and value in aliases:
1255
+ canonical = aliases[value]
1256
+ warn(
1257
+ f"probe kind {value!r} is deprecated; use kind = {canonical!r} instead.",
1258
+ PyflightstreamWarning,
1259
+ stacklevel=2,
1260
+ )
1261
+ return canonical
1255
1262
  if value not in PROBE_KINDS:
1256
1263
  raise ValueError(
1257
1264
  f"probe kind {value!r} is not one of {' or '.join(map(repr, PROBE_KINDS))}: "
1258
- 'write kind = "unsteady" for a fluid plot per point and parameter, '
1259
- 'evaluated at every time step, or kind = "normal" for probe points '
1260
- "sampled once, at the last time step"
1265
+ 'write kind = "instantaneous" for a fluid plot per point and parameter, '
1266
+ 'evaluated at every time step, or kind = "default" for probe points '
1267
+ "sampled once, at the last time step. Deprecated aliases: 'unsteady' "
1268
+ "and 'normal', respectively."
1261
1269
  )
1262
1270
  return value
1263
1271
 
@@ -2462,12 +2470,7 @@ class PprocSpec(BaseModel):
2462
2470
  # history is in the plots export whatever the [[probes]] kind is
2463
2471
  # (PFS-2105.002).
2464
2472
  sources.append("{name}_plots.txt")
2465
- if self.volume_section is not None or any(
2466
- entry.field_formats or entry.reusable_inflow for entry in self.probes
2467
- ):
2468
- # FR-418: a NORMAL entry's field is read from the probe-points
2469
- # export on an unsteady row too, not from the plots history.
2470
- sources.append("{name}_plots.txt" if unsteady and not normal else "{name}_probes.txt")
2473
+ sources.extend(self._field_exports(unsteady))
2471
2474
  for source in sources:
2472
2475
  if source not in names:
2473
2476
  names.append(source)
@@ -2476,6 +2479,20 @@ class PprocSpec(BaseModel):
2476
2479
  names.append(name)
2477
2480
  return names
2478
2481
 
2482
+ def _field_exports(self, unsteady: bool) -> list[str]:
2483
+ """Request both native sources when mixed entries require sampled fields."""
2484
+ sources = []
2485
+ if self.volume_section is not None:
2486
+ sources.append("{name}_plots.txt" if unsteady else "{name}_probes.txt")
2487
+ for entry in self.probes:
2488
+ if entry.field_formats or entry.reusable_inflow:
2489
+ sources.append(
2490
+ "{name}_plots.txt"
2491
+ if unsteady and entry.kind != "default"
2492
+ else "{name}_probes.txt"
2493
+ )
2494
+ return sources
2495
+
2479
2496
  def _streamline_exports(self) -> list[str]:
2480
2497
  """Return the files the streamline traces are exported to (FR-1078)."""
2481
2498
  if self.streamlines is None:
@@ -2487,31 +2504,15 @@ class PprocSpec(BaseModel):
2487
2504
  return [f"{{name}}{suffix[kind]}" for kind in traced]
2488
2505
 
2489
2506
  def samples_normal_probes(self) -> bool:
2490
- """Whether an unsteady row samples this artifact's probes as NORMAL probe points.
2507
+ """Whether an unsteady row has entries sampled as normal probe points.
2491
2508
 
2492
2509
  True when the artifact declares at least one ``[[probes]]`` entry and
2493
- every entry states ``kind = "normal"`` (FR-417); an entry that states no
2494
- kind and a volume section are ``unsteady``. A mixture is refused here,
2495
- naming the entries of each kind. Steady callers do not ask this question.
2510
+ at least one entry states ``kind = "default"``. Mixed entries keep their
2511
+ independent sampling routes. Steady callers do not ask this question.
2496
2512
 
2497
2513
  Returns
2498
2514
  -------
2499
2515
  bool
2500
- Whether the entries are all normal probes.
2516
+ Whether any entry needs the final probe-points export.
2501
2517
  """
2502
- normal = [str(n) for n, entry in enumerate(self.probes, 1) if entry.kind == "normal"]
2503
- if not normal:
2504
- return False
2505
- unsteady = [str(n) for n, entry in enumerate(self.probes, 1) if entry.kind != "normal"]
2506
- if self.volume_section is not None:
2507
- unsteady.append("[volume_section]")
2508
- if unsteady:
2509
- raise CampaignConfigError(
2510
- "mixes probe kinds on an unsteady row: unsteady (fluid plots at every time step) "
2511
- f"{', '.join(unsteady)}; normal (probe points at the last time step) "
2512
- f"{', '.join(normal)}. One unsteady row samples every [[probes]] entry one "
2513
- 'way, an entry stating no kind counting as kind = "unsteady", and a '
2514
- "[volume_section] is sampled through fluid plots. State one kind on every "
2515
- "entry, or move the other entries to a second pproc on their own row."
2516
- )
2517
- return True
2518
+ return any(entry.kind == "default" for entry in self.probes)
@@ -116,6 +116,29 @@ class BladeDatum(BaseModel):
116
116
  return token
117
117
 
118
118
 
119
+ class _RotorAxis(BaseModel):
120
+ """The named shaft axis and its installed direction in global coordinates."""
121
+
122
+ model_config = ConfigDict(extra="forbid", allow_inf_nan=False)
123
+ shaft: Literal["X", "Y", "Z"]
124
+ vector_wrt_global: tuple[float, float, float]
125
+
126
+ @model_validator(mode="after")
127
+ def _usable_direction(self) -> _RotorAxis:
128
+ scale = max(abs(value) for value in self.vector_wrt_global)
129
+ if scale == 0:
130
+ raise ValueError("vector_wrt_global has zero length; state the shaft direction")
131
+ scaled = tuple(value / scale for value in self.vector_wrt_global)
132
+ component = scaled["XYZ".index(self.shaft)] / math.hypot(*scaled)
133
+ angle = math.degrees(math.acos(max(-1.0, min(1.0, component))))
134
+ if angle > 45.0 + 1e-10:
135
+ raise ValueError(
136
+ f"vector_wrt_global is {angle:.2f} degrees from shaft {self.shaft}; "
137
+ "at most 45 degrees is accepted. Choose the matching shaft letter"
138
+ )
139
+ return self
140
+
141
+
119
142
  class RotorBlock(BaseModel):
120
143
  """One rotor, declared as one block of the reference artifact (FR-60).
121
144
 
@@ -151,8 +174,8 @@ class RotorBlock(BaseModel):
151
174
  a type check is what found it.
152
175
  x_m, y_m, z_m : float
153
176
  The hub, in the geometry's own frame.
154
- axis : str
155
- The axis it turns about.
177
+ axis : str or mapping
178
+ A shaft letter or ``{shaft, vector_wrt_global}`` installation declaration.
156
179
  rpm_sign : int
157
180
  ``+1`` is the right-hand rule about ``axis``, which is the one
158
181
  reading that does not depend on where the reader stands.
@@ -178,7 +201,7 @@ class RotorBlock(BaseModel):
178
201
  model_config = ConfigDict(extra="forbid", allow_inf_nan=False)
179
202
 
180
203
  alias: str
181
- axis: str | tuple[float, float, float] | list[float]
204
+ axis: str | _RotorAxis
182
205
  diameter_m: float = Field(gt=0.0)
183
206
  families_blades: list[str]
184
207
  x_m: float = 0.0
@@ -207,14 +230,7 @@ class RotorBlock(BaseModel):
207
230
  @field_validator("axis", mode="before")
208
231
  @classmethod
209
232
  def _an_axis(cls, value: object) -> object:
210
- """Accept a LETTER or a three-component VECTOR.
211
-
212
- The letter keeps its exact meaning: `Z` IS the vector (0, 0, 1), so the
213
- letter spelling is a special case of a vector. A mesh can arrive
214
- with its pitch and toe
215
- already in it, and a shaft installed at an angle lies on no geometry
216
- axis at all.
217
- """
233
+ """Accept a letter or an explicit shaft table; translate retired bare vectors."""
218
234
  if isinstance(value, str):
219
235
  token = value.strip().upper()
220
236
  if token not in ("X", "Y", "Z"):
@@ -223,8 +239,8 @@ class RotorBlock(BaseModel):
223
239
  # documentation carries. Widening what `axis` accepts may add to
224
240
  # the sentence and may not replace it.
225
241
  raise ValueError(
226
- f"axis = {value!r} is not an axis; write X, Y or Z, or the three "
227
- "components of the shaft direction for a rotor installed at an angle"
242
+ f"axis = {value!r} is not an axis; write X, Y or Z, or a table "
243
+ "with shaft and vector_wrt_global for a rotor installed at an angle"
228
244
  )
229
245
  return token
230
246
  if isinstance(value, (list, tuple)):
@@ -244,9 +260,18 @@ class RotorBlock(BaseModel):
244
260
  f"axis = {value!r} has no length, so it names no direction, and a rotor "
245
261
  "turns about a direction"
246
262
  )
247
- return components
263
+ nearest = "XYZ"[max(range(3), key=lambda i: abs(components[i]))]
264
+ raise ValueError(
265
+ f"axis = {list(value)!r} did not say which frame axis is the shaft; "
266
+ f'write axis = {{ shaft = "{nearest}", vector_wrt_global = {list(value)!r} }}'
267
+ )
248
268
  return value
249
269
 
270
+ @property
271
+ def shaft(self) -> str:
272
+ """The rotor-frame axis named as the shaft."""
273
+ return self.axis if isinstance(self.axis, str) else self.axis.shaft
274
+
250
275
  @property
251
276
  def axis_vector(self) -> tuple[float, float, float]:
252
277
  """The shaft direction as a UNIT vector, whichever way it was written.
@@ -258,7 +283,8 @@ class RotorBlock(BaseModel):
258
283
  stated = self.axis
259
284
  if isinstance(stated, str):
260
285
  return AXIS_UNIT_VECTORS[stated]
261
- components = tuple(float(component) for component in stated)
286
+ scale = max(abs(value) for value in stated.vector_wrt_global)
287
+ components = tuple(value / scale for value in stated.vector_wrt_global)
262
288
  length = math.hypot(*components)
263
289
  return (components[0] / length, components[1] / length, components[2] / length)
264
290
 
@@ -277,9 +303,9 @@ class RotorBlock(BaseModel):
277
303
  def _an_alias_no_frame_can_be_mistaken_for(cls, value: str) -> str:
278
304
  if not value.strip() or value != value.strip() or any(c.isspace() for c in value):
279
305
  raise ValueError(f"alias = {value!r} must be one word, with no blank or space in it")
280
- if value.upper().endswith(("_SMRP", "_RMRP")):
306
+ if value.upper().endswith(("_SMRP", "_RMRP", "_BMRP")):
281
307
  raise ValueError(
282
- f"alias = {value!r} ends in _SMRP or _RMRP, the radical of the frames the "
308
+ f"alias = {value!r} ends in _SMRP or _RMRP or _BMRP, the radical of the frames the "
283
309
  "package builds from a rotor's name, so a rotor and a frame would spell the "
284
310
  "same; choose another name"
285
311
  )
@@ -302,6 +328,11 @@ class RotorBlock(BaseModel):
302
328
  # Compare directions by angle, not spelling. An axis (0, 0.02, 0.9998)
303
329
  # is only one degree from a Z datum even though their strings differ.
304
330
  # A nearly parallel datum cannot define a useful azimuth and is refused.
331
+ if self.blade1.zero.lstrip("+-") == self.shaft:
332
+ raise ValueError(
333
+ f"blade1.zero {self.blade1.zero} equals shaft {self.shaft}; "
334
+ "choose one of the two remaining axes"
335
+ )
305
336
  shaft = self.axis_vector
306
337
  datum = AXIS_UNIT_VECTORS[self.blade1.zero.lstrip("+-")]
307
338
  alignment = abs(sum(a * b for a, b in zip(shaft, datum, strict=True)))
@@ -282,11 +282,11 @@ def _action_export_kinds(
282
282
  for kind, name in classify_outputs(names).items()
283
283
  if whole_run or kind not in (*WHOLE_RUN_EXPORT_KINDS, *END_OF_RUN_EXPORT_KINDS)
284
284
  }
285
+ kinds.pop("debug_fsm", None) # Saved once at the window start, never on every step.
285
286
  # FR-890: the per-step exports of a row whose probes are NORMAL update and
286
287
  # export them at every step of the window; the wall clock's rescue does not,
287
288
  # since the points may not exist when it fires.
288
- normal = not whole_run and case.pproc is not None and case.pproc.samples_normal_probes()
289
- if declared_run_type(case) in _UNSTEADY_RECIPES and not normal:
289
+ if declared_run_type(case) in _UNSTEADY_RECIPES:
290
290
  for kind in STEADY_ONLY_EXPORT_KINDS:
291
291
  kinds.pop(kind, None)
292
292
  # G05: an action fires during the march and a volume section is cut after
@@ -29,6 +29,7 @@ from pyflightstream.cases import (
29
29
  from pyflightstream.cases import (
30
30
  windows as _windows,
31
31
  )
32
+ from pyflightstream.cases._unsteady_actions import UNSTEADY_EXPORTS_ACTION
32
33
  from pyflightstream.probes.layouts import emit_probe_export
33
34
  from pyflightstream.script import (
34
35
  Script,
@@ -429,6 +430,21 @@ def _export_block(
429
430
  _export_log(conventions, case, script, claimed=tuple(claimed))
430
431
 
431
432
 
433
+ def _debug_fsm(case: SimCase, script: Script, *, clocking: int | None = None) -> None:
434
+ """Save the opt-in inspection state before post-solve output setup."""
435
+ if case.pproc is None or not case.pproc.exports.get("debug_fsm", False):
436
+ return
437
+ if any(action.name == UNSTEADY_EXPORTS_ACTION for action in script.unsteady_actions):
438
+ return # The window-start action owns this save.
439
+ names = [name for name in case.outputs if name.endswith("_debug.fsm")]
440
+ if not names:
441
+ return
442
+ if clocking is None and any(name.endswith("_c0_debug.fsm") for name in names):
443
+ clocking = 0
444
+ name = next((name for name in names if name.endswith(f"_c{clocking}_debug.fsm")), names[0])
445
+ script.emit("SAVEAS", name)
446
+
447
+
432
448
  def _export_each_kind(
433
449
  script: Script,
434
450
  case: SimCase,
@@ -457,6 +473,8 @@ def _export_each_kind(
457
473
  if kind == "log" and skip_log:
458
474
  continue
459
475
  claimed.append(names.index(kinds[kind]) + 1)
476
+ if kind == "debug_fsm":
477
+ continue # Already saved before output setup, or at the window start.
460
478
  if kind == "probes":
461
479
  # THE PROBES HOME'S EXPORT (PFS-2140.001): the public emitter is what
462
480
  # the workspace runs. UPDATE_PROBE_POINTS was emitted with the other