pyflightstream 0.41.0__tar.gz → 0.43.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.
- {pyflightstream-0.41.0/src/pyflightstream.egg-info → pyflightstream-0.43.0}/PKG-INFO +22 -18
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/README.md +20 -16
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/pyproject.toml +19 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/__init__.py +9 -15
- pyflightstream-0.43.0/src/pyflightstream/_atmosphere.py +280 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_cli.py +5 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_console.py +7 -7
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_deprecations.py +34 -104
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_digest.py +36 -37
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_errors.py +40 -29
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_fsm.py +38 -45
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_fsm_fresh.py +233 -32
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_lengths.py +4 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_maturity.py +20 -165
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_mesh.py +4 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_progress.py +9 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_retired_names.py +66 -35
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_signature.py +1 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_textio.py +50 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_tokens.py +27 -45
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_yamlflow.py +27 -24
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/__init__.py +144 -263
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_ccs.py +82 -8
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_farfield_spec.py +3 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_fsi_external.py +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_geometry_emit.py +58 -7
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_geometry_instruction.py +82 -6
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_matrix_layouts.py +56 -130
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_matrix_upgrade.py +26 -14
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_setup_keys.py +158 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_setup_link.py +14 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_skipped_families.py +15 -16
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_sweep_names.py +16 -29
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/_unsteady_actions.py +9 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/acoustics.py +30 -14
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/ccs_fuselage.py +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/ccs_wing.py +96 -13
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/corrections.py +4 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/farfield_inputs.py +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/field_coverage.py +87 -41
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/freestream.py +115 -28
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/fsi_workspace.py +153 -62
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/matrix.py +143 -187
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/mesh.py +11 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/naming.py +19 -17
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/pproc.py +213 -142
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/qsteady.py +63 -47
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/reference_blocks.py +58 -76
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/selection.py +101 -89
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/settings.py +100 -100
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/setup_surfaces.py +9 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/sixdof.py +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/windows.py +41 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/__init__.py +22 -7
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_actuator.py +2 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_additional.py +12 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_batch_actions.py +62 -17
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_batch_script.py +129 -39
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_clock.py +88 -32
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_conventions.py +18 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_export_first_step.py +6 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_exports.py +12 -16
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_farfield.py +74 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_frames.py +87 -116
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_freestream.py +53 -32
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_gap_evidence.py +36 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_geometry.py +60 -40
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_motion.py +61 -198
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_names.py +31 -51
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_pproc.py +107 -78
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_probes.py +139 -134
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_qsteady_rotor.py +150 -54
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_reductions.py +90 -101
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_registry.py +0 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_rotor.py +66 -75
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_row_cells.py +17 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_rows.py +214 -172
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_sixdof.py +3 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_skeleton.py +56 -79
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_solver_settings.py +31 -51
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_steady.py +36 -42
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_streamlines.py +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_timing.py +80 -62
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_unsteady.py +13 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_vocabulary.py +140 -194
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/__init__.py +60 -277
- pyflightstream-0.43.0/src/pyflightstream/commands/_meta.yaml +468 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/_schema.py +272 -37
- pyflightstream-0.43.0/src/pyflightstream/commands/acoustics.yaml +308 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/actuators.yaml +117 -114
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/advanced_settings.yaml +252 -211
- pyflightstream-0.43.0/src/pyflightstream/commands/aeroelastic_coupling.yaml +321 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/base_regions.yaml +122 -113
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/boundary_conditions.yaml +205 -172
- pyflightstream-0.43.0/src/pyflightstream/commands/cad.yaml +292 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/cad_create.yaml +395 -366
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/ccs_fuselage_mesh.yaml +84 -79
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/ccs_revolve_mesh.yaml +98 -82
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/ccs_wing_mesh.yaml +104 -106
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/coordinate_systems.yaml +107 -107
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/file_io.yaml +60 -60
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/free_surfaces.yaml +10 -8
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/inlets_outlets.yaml +78 -69
- pyflightstream-0.43.0/src/pyflightstream/commands/mesh_import_export.yaml +154 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/mesh_operations.yaml +239 -230
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/mesh_unite.yaml +40 -31
- pyflightstream-0.43.0/src/pyflightstream/commands/mesh_wrapper.yaml +361 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/motion_definitions.yaml +315 -302
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/plots.yaml +27 -25
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/probe_points.yaml +53 -52
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/runtime_settings.yaml +107 -105
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/scene_settings.yaml +79 -69
- pyflightstream-0.43.0/src/pyflightstream/commands/scenes.yaml +282 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/script_controls.yaml +24 -24
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/simulation_controls.yaml +57 -56
- pyflightstream-0.43.0/src/pyflightstream/commands/solver_analysis.yaml +275 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/solver_contours.yaml +84 -27
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/solver_export.yaml +99 -83
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/solver_initialization.yaml +86 -65
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/solver_settings.yaml +219 -204
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/stability_toolbox.yaml +62 -56
- pyflightstream-0.43.0/src/pyflightstream/commands/streamlines.yaml +384 -0
- pyflightstream-0.43.0/src/pyflightstream/commands/surface_sections.yaml +349 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/sweeper.yaml +65 -78
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/transition_trips.yaml +14 -16
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/commands/unsteady_solver.yaml +108 -95
- pyflightstream-0.43.0/src/pyflightstream/commands/volume_sections.yaml +308 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/exceptions.py +10 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/extras.py +30 -44
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/farfield/__init__.py +13 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/farfield/balances.py +68 -18
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/farfield/fields.py +33 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/farfield/quadrature.py +125 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/farfield/trefftz.py +98 -24
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/__init__.py +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/beam.py +27 -23
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/centrifugal.py +55 -22
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/cli.py +64 -16
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/config.py +80 -48
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/driver.py +119 -80
- pyflightstream-0.43.0/src/pyflightstream/fsi/errors.py +21 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/external.py +59 -11
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/loads.py +41 -46
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/nodes.py +57 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/sections.py +57 -36
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/state.py +25 -6
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/wing.py +2 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/options.py +5 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/overview.py +5 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/__init__.py +24 -20
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_additional.py +2 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_admit.py +31 -28
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_condition.py +176 -128
- pyflightstream-0.43.0/src/pyflightstream/post/_noise_products.py +164 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_products_campaign.py +161 -40
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_reduction_stage.py +148 -50
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_rotor_plan.py +72 -104
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_rotor_products.py +364 -171
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_settings_product.py +2 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_sim.py +159 -90
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_stage.py +161 -45
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_structure.py +62 -31
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_tables.py +258 -196
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_transfer_functions.py +65 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/acoustics.py +125 -14
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/axes.py +32 -20
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/boundary_layer.py +135 -35
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/corrections.py +64 -124
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/custom_polar.py +68 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/diagnostics.py +11 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/disc_maps.py +148 -44
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/equations.py +51 -8
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/farfield_fields.py +90 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/farfield_products.py +177 -141
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/field_frames.py +26 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/glossary.py +56 -28
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/guides.py +41 -23
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/harmonics.py +92 -23
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/inflow_tools.py +80 -17
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/input_template.py +84 -81
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/point_tables.py +172 -133
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/polar.py +430 -78
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/probe_fields.py +244 -155
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/products.py +82 -101
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/provenance.py +61 -40
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/qsteady.py +330 -111
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/qsteady_noise.py +91 -29
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/reductions.py +43 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/rotor_table.py +145 -172
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/section_distributions.py +103 -90
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/series.py +134 -75
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/settings_table.py +114 -76
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/streamlines.py +24 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/superfile.py +188 -160
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/surfaces.py +74 -13
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/unsteady.py +275 -86
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/unsteady_polar.py +146 -65
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/writers.py +85 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/probes/errors.py +1 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/probes/geometry.py +36 -51
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/probes/lattice.py +37 -6
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/probes/layouts.py +92 -38
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/probes/planar.py +52 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/__init__.py +7 -19
- pyflightstream-0.43.0/src/pyflightstream/qa/_reanalysis.py +151 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_0400_gap.py +24 -25
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_0400_gapbase.py +20 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_0400_gapedges.py +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_0400_gapkit.py +48 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_26125.py +20 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_catalog_b.py +95 -41
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_ccs_mesh.py +8 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_ccs_noise.py +70 -27
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_kit.py +9 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/_spec_t1.py +6 -6
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/cli.py +16 -26
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/compat.py +470 -151
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/cost.py +21 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/drift.py +16 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/errors.py +2 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/geometry.py +62 -21
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/matrix.py +216 -39
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/physics.py +187 -103
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/probes.py +242 -162
- pyflightstream-0.43.0/src/pyflightstream/qa/references/SMI-01.yaml +29 -0
- pyflightstream-0.43.0/src/pyflightstream/qa/references/SMI-02.yaml +29 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/references/pressure-drag/PHY-02.yaml +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/reports.py +61 -109
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/specs.py +119 -46
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/reference.py +65 -56
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/__init__.py +8 -16
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/conditions.py +5 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/core.py +56 -95
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/exports.py +74 -42
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/loads.py +198 -103
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/log.py +170 -89
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/native_surface.py +101 -32
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/sectional_loads.py +45 -13
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/surface.py +163 -40
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/tables.py +130 -106
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/results/wake.py +49 -14
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/__init__.py +25 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_actions_counter.py +21 -11
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_additional.py +216 -13
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_alias.py +43 -17
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_assemble.py +30 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_assessment.py +94 -151
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_batch_collect.py +10 -8
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_batch_exec.py +1 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_batch_plan.py +124 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_batch_run.py +22 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_batch_split.py +148 -85
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_campaign.py +97 -85
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_cli_geometry.py +44 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_cli_mesh.py +29 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_cli_parsers.py +73 -80
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_cli_parsers_storage.py +3 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_cli_print.py +4 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_cli_query.py +11 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_cli_query_point.py +8 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_collect_logs.py +38 -18
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_collect_notes.py +86 -33
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_continuation.py +45 -18
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_continuation_frame.py +16 -20
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_executors.py +281 -228
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_field_motion.py +21 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_grouped.py +3 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_identity.py +158 -30
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_ids.py +68 -33
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_mark_converged.py +47 -45
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_matrix_warnings.py +36 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_pending.py +52 -27
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_plan.py +260 -375
- pyflightstream-0.43.0/src/pyflightstream/run/_plan_report.py +231 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_points.py +163 -171
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_rebuild.py +79 -27
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_rebuild_evidence.py +33 -42
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_rebuild_grouped.py +30 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_rebuild_summary.py +5 -6
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_record_files.py +81 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_solver_windows.py +4 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_step_exports.py +4 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_sweep.py +51 -89
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_wake_edge_verdict.py +6 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/cli.py +163 -201
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/collect.py +291 -246
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/matrix.py +112 -217
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/records.py +16 -58
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/__init__.py +178 -294
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/_arg_checks.py +41 -15
- pyflightstream-0.43.0/src/pyflightstream/script/_build_forms.py +869 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/_ledger_tables.py +165 -157
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/_relaxed_te.py +21 -24
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/_settings.py +343 -130
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/_surface_averaging.py +4 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/_wake_edge_file.py +12 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/entities.py +46 -31
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/helpers.py +345 -376
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/motion.py +119 -14
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/rotor_vocabulary.py +8 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/solver_setup.py +132 -112
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/script/toggles.py +5 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/support.py +36 -31
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/testing.py +12 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/utils/__init__.py +5 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/utils/cli.py +144 -88
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/utils/database.py +120 -128
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/utils/errors.py +5 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/utils/manual.py +189 -419
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/versions.py +54 -54
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/__init__.py +188 -292
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_batch_life.py +23 -8
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_batch_relocate.py +50 -6
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_batches.py +37 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_degenerate.py +38 -17
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_effective.py +2 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_free_space.py +307 -21
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_geometry_build.py +113 -24
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_geometry_clean.py +14 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_geometry_convert.py +55 -13
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_geometry_instruction.py +18 -1
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_geometry_record.py +12 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_geometry_sidecar.py +25 -7
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_layout.py +118 -36
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_ledger_api.py +3 -2
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_ledger_history.py +97 -30
- pyflightstream-0.43.0/src/pyflightstream/workspace/_links.py +247 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_matrix_binding.py +43 -84
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_matrix_homes.py +58 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_matrix_phases.py +64 -158
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_missing_log.py +10 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_query_files.py +29 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_query_logs.py +19 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_query_point.py +32 -12
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_audit.py +139 -41
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_config.py +59 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_geometry.py +57 -15
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_grid.py +62 -27
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_level.py +85 -75
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_obj.py +94 -6
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_periodic.py +13 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_remesh.py +31 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_remesh_group.py +63 -10
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_script_comparison.py +127 -62
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_step_prune.py +12 -8
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/actuator_profiles.py +38 -6
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/builds.py +11 -8
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/cli.py +121 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/costs.py +46 -9
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/excel.py +74 -36
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/excel_bridge.py +170 -88
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/excel_file.py +121 -30
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/excel_sync.py +64 -5
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/fields.py +115 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/flight_condition.py +67 -54
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/fsi_external_setup.py +30 -18
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/fsi_setup.py +52 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/hpc.py +98 -58
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/inputs.py +191 -193
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/ledger.py +79 -18
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/manifest.py +193 -203
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/matrix.py +29 -42
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/migrate.py +35 -7
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/naming.py +116 -64
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/record_document.py +48 -8
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/selections.py +122 -19
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/setup_inspection.py +3 -3
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/setup_standards.py +55 -17
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/sidecars.py +102 -54
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/sixdof_setup.py +8 -4
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/storage.py +208 -254
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/trailing_edges.py +25 -23
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/wake_edges.py +44 -25
- {pyflightstream-0.41.0 → pyflightstream-0.43.0/src/pyflightstream.egg-info}/PKG-INFO +22 -18
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream.egg-info/SOURCES.txt +2 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream.egg-info/requires.txt +1 -1
- pyflightstream-0.41.0/src/pyflightstream/_atmosphere.py +0 -349
- pyflightstream-0.41.0/src/pyflightstream/commands/_meta.yaml +0 -639
- pyflightstream-0.41.0/src/pyflightstream/commands/acoustics.yaml +0 -300
- pyflightstream-0.41.0/src/pyflightstream/commands/aeroelastic_coupling.yaml +0 -332
- pyflightstream-0.41.0/src/pyflightstream/commands/cad.yaml +0 -273
- pyflightstream-0.41.0/src/pyflightstream/commands/mesh_import_export.yaml +0 -154
- pyflightstream-0.41.0/src/pyflightstream/commands/mesh_wrapper.yaml +0 -366
- pyflightstream-0.41.0/src/pyflightstream/commands/scenes.yaml +0 -290
- pyflightstream-0.41.0/src/pyflightstream/commands/solver_analysis.yaml +0 -265
- pyflightstream-0.41.0/src/pyflightstream/commands/streamlines.yaml +0 -350
- pyflightstream-0.41.0/src/pyflightstream/commands/surface_sections.yaml +0 -342
- pyflightstream-0.41.0/src/pyflightstream/commands/volume_sections.yaml +0 -296
- pyflightstream-0.41.0/src/pyflightstream/fsi/errors.py +0 -30
- pyflightstream-0.41.0/src/pyflightstream/post/_noise_products.py +0 -142
- pyflightstream-0.41.0/src/pyflightstream/qa/references/SMI-01.yaml +0 -28
- pyflightstream-0.41.0/src/pyflightstream/qa/references/SMI-02.yaml +0 -28
- pyflightstream-0.41.0/src/pyflightstream/script/_build_forms.py +0 -276
- pyflightstream-0.41.0/src/pyflightstream/workspace/_links.py +0 -148
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/LICENSE +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/setup.cfg +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_decimal.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_expressions.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/_fsi_calibration.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/ccs_revolution.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/cases/workflows/_wake_length.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/_direct_morphing.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/calibration.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/kinematics.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/fsi/materials.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_field_inputs.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_installed_copies.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/post/_matrix_template.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/probes/__init__.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/probes/_model.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/references/PHY-01.yaml +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/references/PHY-02.yaml +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/references/PHY-05.yaml +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/references/PHY-06.yaml +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/references/pressure-drag/PHY-01.yaml +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/references/pressure-drag/PHY-05.yaml +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/qa/references/pressure-drag/PHY-06.yaml +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/run/_cli_query_history.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_geometry_vtk.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/__init__.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_blocks.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_refine/_remesh_pairs.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_row_setup.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_settings_file.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream/workspace/_verdicts.py +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream.egg-info/dependency_links.txt +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.0}/src/pyflightstream.egg-info/entry_points.txt +0 -0
- {pyflightstream-0.41.0 → pyflightstream-0.43.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.
|
|
3
|
+
Version: 0.43.0
|
|
4
4
|
Summary: Version-aware, didactic Python driver for the FlightStream panel-method solver
|
|
5
5
|
Author: Geovana Neves
|
|
6
6
|
License: MIT
|
|
@@ -33,7 +33,7 @@ Requires-Dist: PyNiteFEA>=3.0; extra == "fsi"
|
|
|
33
33
|
Provides-Extra: excel
|
|
34
34
|
Requires-Dist: XlsxWriter<4,>=3.2.9; extra == "excel"
|
|
35
35
|
Provides-Extra: manual
|
|
36
|
-
Requires-Dist: pypdf; extra == "manual"
|
|
36
|
+
Requires-Dist: pypdf>=4.0.0; extra == "manual"
|
|
37
37
|
Provides-Extra: dev
|
|
38
38
|
Requires-Dist: pytest; extra == "dev"
|
|
39
39
|
Requires-Dist: packaging; extra == "dev"
|
|
@@ -60,8 +60,7 @@ 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
|
-
|
|
64
|
-
retained release history.
|
|
63
|
+
CHANGELOG.md describes package changes and the retained release history.
|
|
65
64
|
Use the [upgrade guidance](https://nevesgeovana.github.io/pyflightstream/upgrading/)
|
|
66
65
|
when moving an existing workspace to a newer package version.
|
|
67
66
|
|
|
@@ -91,9 +90,14 @@ matrix -> plan -> run -> collect -> post -> products
|
|
|
91
90
|
## Install
|
|
92
91
|
|
|
93
92
|
```
|
|
94
|
-
pip install "pyflightstream[geom,fsi,
|
|
93
|
+
pip install "pyflightstream[dev,plot,geom,fsi,excel]"
|
|
95
94
|
```
|
|
96
95
|
|
|
96
|
+
The extras add development and documentation tools (`dev`), plotting (`plot`),
|
|
97
|
+
spatial geometry queries (`geom`), structural coupling (`fsi`) and workbook
|
|
98
|
+
authoring (`excel`). Maintainers reading licensed manuals also install
|
|
99
|
+
`pyflightstream[manual]`.
|
|
100
|
+
|
|
97
101
|
Python 3.12 or newer. FlightStream itself is licensed separately and is
|
|
98
102
|
located through your workspace, never guessed.
|
|
99
103
|
|
|
@@ -140,19 +144,19 @@ and the evidence behind it is narrower than for the supported rows.
|
|
|
140
144
|
|
|
141
145
|
## Supported FlightStream versions
|
|
142
146
|
|
|
143
|
-
| Version | Vendor name | Support level |
|
|
144
|
-
|
|
145
|
-
| 25.000 | 25.0 | `documented` |
|
|
146
|
-
| 25.100 | 25.1 | `documented` |
|
|
147
|
-
| 26.000 | 26.0 | `documented` |
|
|
148
|
-
| 26.100 | 26.1 | `operational` |
|
|
149
|
-
| 26.101 | 26.1 | `operational` |
|
|
150
|
-
| 26.120 | 26.12 | `operational` |
|
|
151
|
-
| 26.121 | 26.12 | `operational` |
|
|
152
|
-
| 26.122 | 26.12 | `operational` |
|
|
153
|
-
| 26.123 | 26.12 | `operational` |
|
|
154
|
-
| 26.124 | 26.12 | `operational` |
|
|
155
|
-
| 26.125 | 26.12 | `operational` |
|
|
147
|
+
| Version | Vendor name | Support level | Build |
|
|
148
|
+
|---|---|---|---|
|
|
149
|
+
| 25.000 | 25.0 | `documented` | `12162024` |
|
|
150
|
+
| 25.100 | 25.1 | `documented` | `5062025` |
|
|
151
|
+
| 26.000 | 26.0 | `documented` | `10202025` |
|
|
152
|
+
| 26.100 | 26.1 | `operational` | `2122026` |
|
|
153
|
+
| 26.101 | 26.1 | `operational` | `5012026` |
|
|
154
|
+
| 26.120 | 26.12 | `operational` | `7012026` |
|
|
155
|
+
| 26.121 | 26.12 | `operational` | `7262026` |
|
|
156
|
+
| 26.122 | 26.12 | `operational` | `8092026` |
|
|
157
|
+
| 26.123 | 26.12 | `operational` | `8112026` |
|
|
158
|
+
| 26.124 | 26.12 | `operational` | `8172026` |
|
|
159
|
+
| 26.125 | 26.12 | `operational` | `10052026` |
|
|
156
160
|
|
|
157
161
|
`operational` means the minimal geometry-to-loads workflow builds for that
|
|
158
162
|
version, checked by a test. `documented` describes the database support level;
|
|
@@ -8,8 +8,7 @@ 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
|
-
|
|
12
|
-
retained release history.
|
|
11
|
+
CHANGELOG.md describes package changes and the retained release history.
|
|
13
12
|
Use the [upgrade guidance](https://nevesgeovana.github.io/pyflightstream/upgrading/)
|
|
14
13
|
when moving an existing workspace to a newer package version.
|
|
15
14
|
|
|
@@ -39,9 +38,14 @@ matrix -> plan -> run -> collect -> post -> products
|
|
|
39
38
|
## Install
|
|
40
39
|
|
|
41
40
|
```
|
|
42
|
-
pip install "pyflightstream[geom,fsi,
|
|
41
|
+
pip install "pyflightstream[dev,plot,geom,fsi,excel]"
|
|
43
42
|
```
|
|
44
43
|
|
|
44
|
+
The extras add development and documentation tools (`dev`), plotting (`plot`),
|
|
45
|
+
spatial geometry queries (`geom`), structural coupling (`fsi`) and workbook
|
|
46
|
+
authoring (`excel`). Maintainers reading licensed manuals also install
|
|
47
|
+
`pyflightstream[manual]`.
|
|
48
|
+
|
|
45
49
|
Python 3.12 or newer. FlightStream itself is licensed separately and is
|
|
46
50
|
located through your workspace, never guessed.
|
|
47
51
|
|
|
@@ -88,19 +92,19 @@ and the evidence behind it is narrower than for the supported rows.
|
|
|
88
92
|
|
|
89
93
|
## Supported FlightStream versions
|
|
90
94
|
|
|
91
|
-
| Version | Vendor name | Support level |
|
|
92
|
-
|
|
93
|
-
| 25.000 | 25.0 | `documented` |
|
|
94
|
-
| 25.100 | 25.1 | `documented` |
|
|
95
|
-
| 26.000 | 26.0 | `documented` |
|
|
96
|
-
| 26.100 | 26.1 | `operational` |
|
|
97
|
-
| 26.101 | 26.1 | `operational` |
|
|
98
|
-
| 26.120 | 26.12 | `operational` |
|
|
99
|
-
| 26.121 | 26.12 | `operational` |
|
|
100
|
-
| 26.122 | 26.12 | `operational` |
|
|
101
|
-
| 26.123 | 26.12 | `operational` |
|
|
102
|
-
| 26.124 | 26.12 | `operational` |
|
|
103
|
-
| 26.125 | 26.12 | `operational` |
|
|
95
|
+
| Version | Vendor name | Support level | Build |
|
|
96
|
+
|---|---|---|---|
|
|
97
|
+
| 25.000 | 25.0 | `documented` | `12162024` |
|
|
98
|
+
| 25.100 | 25.1 | `documented` | `5062025` |
|
|
99
|
+
| 26.000 | 26.0 | `documented` | `10202025` |
|
|
100
|
+
| 26.100 | 26.1 | `operational` | `2122026` |
|
|
101
|
+
| 26.101 | 26.1 | `operational` | `5012026` |
|
|
102
|
+
| 26.120 | 26.12 | `operational` | `7012026` |
|
|
103
|
+
| 26.121 | 26.12 | `operational` | `7262026` |
|
|
104
|
+
| 26.122 | 26.12 | `operational` | `8092026` |
|
|
105
|
+
| 26.123 | 26.12 | `operational` | `8112026` |
|
|
106
|
+
| 26.124 | 26.12 | `operational` | `8172026` |
|
|
107
|
+
| 26.125 | 26.12 | `operational` | `10052026` |
|
|
104
108
|
|
|
105
109
|
`operational` means the minimal geometry-to-loads workflow builds for that
|
|
106
110
|
version, checked by a test. `documented` describes the database support level;
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyflightstream"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.43.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"}
|
|
@@ -19,10 +19,10 @@ authors = [{name = "Geovana Neves"}]
|
|
|
19
19
|
# (2025-06-05) are the oldest of theirs still inside it. Until then the
|
|
20
20
|
# window was chosen (">=3.11" since the first release, no floor on the
|
|
21
21
|
# numerical dependencies), and a user reading it could not know how it
|
|
22
|
-
# would move.
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
# the classifiers below
|
|
22
|
+
# would move. The floors are derived by hand from the release dates and the
|
|
23
|
+
# date above, and moving one is a commit that moves the date with it; no test
|
|
24
|
+
# re-derives them from the release dates. tests/tier1_offline/test_support_window.py
|
|
25
|
+
# holds the CI matrices, the ruff target and the classifiers below to this line.
|
|
26
26
|
requires-python = ">=3.12"
|
|
27
27
|
# PyPA well-known metadata (audit 2026-07-23). The SPDX license
|
|
28
28
|
# expression form is deferred with the VCS-versioning item: it needs a
|
|
@@ -63,13 +63,14 @@ classifiers = [
|
|
|
63
63
|
# BOTH ENDS ARE PINNED DELIBERATELY. The floor is the oldest release this
|
|
64
64
|
# package has been exercised against, and the ceiling excludes the next
|
|
65
65
|
# major, which is a boundary this repository has no evidence about; a new
|
|
66
|
-
# install resolves 5.0.0 today. tests/tier1_offline/
|
|
67
|
-
# version
|
|
68
|
-
# than a hope.
|
|
66
|
+
# install resolves 5.0.0 today. tests/tier1_offline/test_support_window.py holds
|
|
67
|
+
# the installed version of each declared dependency inside its declared range,
|
|
68
|
+
# so the envelope is a measurement rather than a hope.
|
|
69
69
|
#
|
|
70
70
|
# numpy and pandas carry the SPEC 0 floor computed on 2026-09-09 (see
|
|
71
71
|
# requires-python above); neither is above the version this tree runs
|
|
72
|
-
# with, which
|
|
72
|
+
# with, which the same test measures. The CI leg `test-floors` installs the
|
|
73
|
+
# numpy and pandas floors themselves and runs tier 1 on them. pydantic
|
|
73
74
|
# is not a SPEC 0 project: its floor is the major whose API this package
|
|
74
75
|
# is written against (field_validator, model_validator).
|
|
75
76
|
dependencies = [
|
|
@@ -99,8 +100,9 @@ excel = ["XlsxWriter>=3.2.9,<4"]
|
|
|
99
100
|
# Reading a vendor manual pdf, for pyflightstream.utils.manual. A
|
|
100
101
|
# MAINTAINER extra: no run path imports it, and the manual it reads is
|
|
101
102
|
# licensed material that never enters Git. pypdf is BSD-3-Clause,
|
|
102
|
-
# MIT-compatible (NFR-02).
|
|
103
|
-
|
|
103
|
+
# MIT-compatible (NFR-02). The floor is 4.0.0, the first release whose extract_text takes
|
|
104
|
+
# extraction_mode="layout"; 3.17.4, the last 3.x, does not.
|
|
105
|
+
manual = ["pypdf>=4.0.0"]
|
|
104
106
|
dev = [
|
|
105
107
|
# Licence evidence for every distribution in this block:
|
|
106
108
|
# reports/RPT-033_development-tool-licences_2026-08-19.md, one card
|
|
@@ -113,10 +115,10 @@ dev = [
|
|
|
113
115
|
# the edge would turn a guard into a collection error. Apache-2.0 and
|
|
114
116
|
# BSD-2-Clause dual, MIT-compatible.
|
|
115
117
|
"packaging",
|
|
116
|
-
# The coverage floor
|
|
118
|
+
# The coverage floor is enforced by the release's frozen full suite.
|
|
117
119
|
# Not in pytest's addopts: instrumentation costs about a third of the
|
|
118
120
|
# suite's runtime and a developer running one test file does not need
|
|
119
|
-
# a whole-package number. The
|
|
121
|
+
# a whole-package number. The suite-full receipt passes --cov explicitly.
|
|
120
122
|
"pytest-cov",
|
|
121
123
|
# Parallel tier 1: CI and the release gates run `pytest -n auto`, in place
|
|
122
124
|
# of a serial run of about 36 minutes, the 0.33.0 release gate's serial
|
|
@@ -208,7 +210,9 @@ markers = [
|
|
|
208
210
|
]
|
|
209
211
|
addopts = "-m 'not needs_flightstream'"
|
|
210
212
|
|
|
211
|
-
#
|
|
213
|
+
# The test-coverage floor, enforced by the release's frozen full suite.
|
|
214
|
+
# The suite-full receipt passes --cov; push CI does not measure coverage.
|
|
215
|
+
# The requirement states the rule and
|
|
212
216
|
# deliberately does NOT state the number: it lives here, where the tool that
|
|
213
217
|
# enforces it reads it, so raising the floor is one edit rather than two
|
|
214
218
|
# statements drifting apart.
|
|
@@ -226,7 +230,7 @@ branch = true
|
|
|
226
230
|
# The floor is set BELOW that, on purpose and twice over. It is a ratchet
|
|
227
231
|
# against regression rather than a target to be gamed, so the measurement is
|
|
228
232
|
# the fact and this is the promise; and the measurement above was taken on
|
|
229
|
-
# Windows while the floor
|
|
233
|
+
# Windows while the original CI floor ran on Linux, where the Windows-only
|
|
230
234
|
# branches count as uncovered. Four points absorbs both. Raise it when the
|
|
231
235
|
# suite earns it, in a commit that says so.
|
|
232
236
|
fail_under = 87
|
|
@@ -18,23 +18,17 @@ Pipeline layers, dependencies flowing strictly downward:
|
|
|
18
18
|
- ``results``: anchor-based parsers for solver output files.
|
|
19
19
|
- ``cases``: simulation and campaign definitions.
|
|
20
20
|
- ``workspace``: the managed workspace (input-artifact library plus run
|
|
21
|
-
layout) and the run manifest.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
since 0.33.0: ``run`` imports ``workspace``, and nothing of
|
|
21
|
+
layout) and the run manifest.
|
|
22
|
+
- ``run``: execution and the campaign loop, one row above ``workspace``: ``run`` imports
|
|
23
|
+
``workspace``, and nothing of
|
|
25
24
|
``workspace`` imports ``run``.
|
|
26
25
|
- ``post``: results into engineering data (sweep assembly, exports).
|
|
27
26
|
- ``qa``: probe harness and physics regression tooling.
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
of their own, and every public name of 0.32.0 still imports from its
|
|
34
|
-
0.32.0 path. Tier-1 architecture guards hold module size, function
|
|
35
|
-
limits, import cycles, fan-out, private-name coupling of the tests,
|
|
36
|
-
one home per constant and facade roots to ratchets that only fall,
|
|
37
|
-
measured by ``scripts/arch_metrics.py``.
|
|
28
|
+
The largest modules are packages or facades over private modules. Public import paths remain
|
|
29
|
+
available through the facades. Tier-1 architecture guards ratchet module size, function
|
|
30
|
+
limits, import cycles, fan-out, private-name coupling and shared constants, measured by
|
|
31
|
+
``scripts/arch_metrics.py``.
|
|
38
32
|
|
|
39
33
|
Side packages follow the same downward-only rule:
|
|
40
34
|
|
|
@@ -91,8 +85,8 @@ except metadata.PackageNotFoundError:
|
|
|
91
85
|
import pyflightstream.post # noqa: E402, F401
|
|
92
86
|
|
|
93
87
|
# The run records register, the same way, the rebuild a restoring sync asks
|
|
94
|
-
# for (P0320-SYNC-RESTORE-OPTIN): the storage layer sits BELOW the run
|
|
95
|
-
#
|
|
88
|
+
# for (P0320-SYNC-RESTORE-OPTIN): the storage layer sits BELOW the run layer
|
|
89
|
+
# (AD-09) and calls whatever is registered, so no import points upward.
|
|
96
90
|
import pyflightstream.run.records # noqa: E402, F401
|
|
97
91
|
from pyflightstream._cli import cli_entrypoint as cli_entrypoint # noqa: E402
|
|
98
92
|
from pyflightstream.options import ( # noqa: E402
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"""The standard atmosphere, below every pipeline layer (PFS-2027.03).
|
|
2
|
+
|
|
3
|
+
This module computes atmospheric properties and imports only the package's
|
|
4
|
+
base exception. Flight-condition resolution belongs to workspace, where a
|
|
5
|
+
reference is available for Reynolds constraints. The script layer emits
|
|
6
|
+
AIR_ALTITUDE or explicit fluid properties; this module emits no commands.
|
|
7
|
+
|
|
8
|
+
AIR_ALTITUDE has no ISA-deviation argument. Conditions carrying dISA and
|
|
9
|
+
conditions solved from density therefore need explicit fluid properties.
|
|
10
|
+
The command is recorded broken on builds 26.100, 26.101 and 26.120. Only the
|
|
11
|
+
26.120 evidence quantifies the discrepancy: density 1.056 against 0.736
|
|
12
|
+
expected, consistent with the 5000-foot rather than 5000-metre standard state
|
|
13
|
+
(RPT-014, build 7012026). On 26.100 and 26.101 the probe records absence of
|
|
14
|
+
the expected effect, not its cause. A static effect_note is not a per-run
|
|
15
|
+
reading. The emitter refuses a broken command unless allow_broken is set;
|
|
16
|
+
on 25.000 AIR_ALTITUDE takes a bare value in feet. Explicit properties avoid
|
|
17
|
+
these build-dependent command limitations.
|
|
18
|
+
|
|
19
|
+
An ISA deviation changes temperature at unchanged pressure altitude and
|
|
20
|
+
pressure. Density follows from the offset temperature. delta_isa_c is a
|
|
21
|
+
temperature difference, with the same numerical value in Celsius and Kelvin.
|
|
22
|
+
The model describes the standard atmosphere, not local weather, and refuses
|
|
23
|
+
altitudes outside ISA's modeled layers instead of extrapolating.
|
|
24
|
+
|
|
25
|
+
Atmosphere constants follow ISO 2533:1975, also published as ICAO Doc 7488/3
|
|
26
|
+
[REF-01]. Sutherland's viscosity law uses the air coefficients attributed to
|
|
27
|
+
White, Viscous Fluid Flow, third edition, equation (1-36) [REF-02].
|
|
28
|
+
METRES_PER_FOOT is the exact defining value of the international foot.
|
|
29
|
+
|
|
30
|
+
The viscosity attribution has an unresolved limitation: the cited book is
|
|
31
|
+
not available in this repository. The implemented reference temperature and
|
|
32
|
+
Sutherland constant are 273.15 K and 110.4 K. A 273 K / 111 K triplet commonly
|
|
33
|
+
attributed to the equation gives different results: about 0.0492 percent
|
|
34
|
+
at sea level, 0.0536 percent at 300 K and 0.0164 percent at the tropopause.
|
|
35
|
+
The difference propagates into density solved on the REmi path. Resolving
|
|
36
|
+
which triplet belongs to the cited equation requires the source.
|
|
37
|
+
|
|
38
|
+
The atmosphere tests pin viscosity with rel=1e-4 at three temperatures.
|
|
39
|
+
The alternative triplet differs by 1.64e-4 at 216.65 K, 3.59e-4 at 255.65 K
|
|
40
|
+
and 5.36e-4 at 300 K, exceeding that tolerance at all three points.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
from __future__ import annotations
|
|
44
|
+
|
|
45
|
+
import math
|
|
46
|
+
from dataclasses import dataclass
|
|
47
|
+
from typing import Final
|
|
48
|
+
|
|
49
|
+
from pyflightstream._errors import PyflightstreamError
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class AtmosphereError(PyflightstreamError, ValueError):
|
|
53
|
+
"""An atmosphere was asked for outside the range this module models.
|
|
54
|
+
|
|
55
|
+
Catalogued (SRS FR-39) rather than a bare :class:`ValueError`, so a
|
|
56
|
+
caller can tell a refusal of this package's from one of Python's.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@dataclass(frozen=True)
|
|
61
|
+
class IsaConstants:
|
|
62
|
+
"""Hold the defining constants of ISO 2533:1975 [REF-01], in one citable object.
|
|
63
|
+
|
|
64
|
+
Held as data rather than as module-level names so that a test can
|
|
65
|
+
read the values it is checking out of the same object the physics
|
|
66
|
+
uses. A test that restates a constant proves the restatement.
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
#: Sea-level temperature, K.
|
|
70
|
+
sea_level_temperature_k: float = 288.15
|
|
71
|
+
#: Sea-level pressure, Pa.
|
|
72
|
+
sea_level_pressure_pa: float = 101325.0
|
|
73
|
+
#: Specific gas constant of dry air, J/(kg K).
|
|
74
|
+
gas_constant_j_per_kg_k: float = 287.05287
|
|
75
|
+
#: Ratio of specific heats of dry air, dimensionless.
|
|
76
|
+
heat_capacity_ratio: float = 1.4
|
|
77
|
+
#: Standard gravity, m/s2.
|
|
78
|
+
gravity_m_per_s2: float = 9.80665
|
|
79
|
+
#: Troposphere temperature lapse rate, K/m (a DECREASE with height).
|
|
80
|
+
lapse_rate_k_per_m: float = 0.0065
|
|
81
|
+
#: Geopotential height of the tropopause, m.
|
|
82
|
+
tropopause_altitude_m: float = 11000.0
|
|
83
|
+
#: Temperature of the isothermal layer above the tropopause, K.
|
|
84
|
+
tropopause_temperature_k: float = 216.65
|
|
85
|
+
#: The top of what this module models, m. ISO 2533 continues above [REF-01]
|
|
86
|
+
#: it with layers this module does not implement, so the ceiling is
|
|
87
|
+
#: a refusal boundary rather than the end of the standard.
|
|
88
|
+
ceiling_altitude_m: float = 20000.0
|
|
89
|
+
#: The bottom, m. ISO 2533 is defined from -2000 m. [REF-01]
|
|
90
|
+
floor_altitude_m: float = -2000.0
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
#: The single instance every function here reads.
|
|
94
|
+
ISA: Final = IsaConstants()
|
|
95
|
+
|
|
96
|
+
#: Sutherland's law for air: White, *Viscous Fluid Flow*, 3rd ed., [REF-02]
|
|
97
|
+
#: eq. (1-36). The reference viscosity is at the reference temperature,
|
|
98
|
+
#: and S is the Sutherland constant of air.
|
|
99
|
+
SUTHERLAND_REFERENCE_VISCOSITY_PA_S: Final = 1.716e-5
|
|
100
|
+
SUTHERLAND_REFERENCE_TEMPERATURE_K: Final = 273.15
|
|
101
|
+
SUTHERLAND_CONSTANT_K: Final = 110.4
|
|
102
|
+
|
|
103
|
+
#: Exactly, by definition of the international foot.
|
|
104
|
+
METRES_PER_FOOT: Final = 0.3048
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@dataclass(frozen=True)
|
|
108
|
+
class AtmosphereState:
|
|
109
|
+
"""Hold one fully determined air state.
|
|
110
|
+
|
|
111
|
+
Every field carries its unit in its name, which is this
|
|
112
|
+
repository's rule rather than this module's habit.
|
|
113
|
+
"""
|
|
114
|
+
|
|
115
|
+
temperature_k: float
|
|
116
|
+
pressure_pa: float
|
|
117
|
+
density_kg_m3: float
|
|
118
|
+
sonic_velocity_m_per_s: float
|
|
119
|
+
viscosity_pa_s: float
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def feet_to_metres(altitude_ft: float) -> float:
|
|
123
|
+
"""Convert an altitude in feet to metres.
|
|
124
|
+
|
|
125
|
+
Here rather than at the caller because ``ALTFT`` is the interface
|
|
126
|
+
unit a flight condition is written in and metres are the unit this
|
|
127
|
+
module works in, so the conversion belongs at the boundary between
|
|
128
|
+
them and should exist exactly once.
|
|
129
|
+
"""
|
|
130
|
+
return altitude_ft * METRES_PER_FOOT
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def _require_finite(name: str, value: float) -> None:
|
|
134
|
+
"""Refuse NaN and infinity, which every comparison below would let through."""
|
|
135
|
+
if not math.isfinite(value):
|
|
136
|
+
raise AtmosphereError(f"{name} {value} is not a finite number")
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def sutherland_viscosity(temperature_k: float) -> float:
|
|
140
|
+
"""Dynamic viscosity of air at ``temperature_k``, in Pa s."""
|
|
141
|
+
_require_finite("temperature", temperature_k)
|
|
142
|
+
if temperature_k <= 0.0:
|
|
143
|
+
raise AtmosphereError(
|
|
144
|
+
f"temperature {temperature_k} K is not above absolute zero, so "
|
|
145
|
+
"Sutherland's law has no value there"
|
|
146
|
+
)
|
|
147
|
+
ratio = temperature_k / SUTHERLAND_REFERENCE_TEMPERATURE_K
|
|
148
|
+
return (
|
|
149
|
+
SUTHERLAND_REFERENCE_VISCOSITY_PA_S
|
|
150
|
+
* ratio**1.5
|
|
151
|
+
* (SUTHERLAND_REFERENCE_TEMPERATURE_K + SUTHERLAND_CONSTANT_K)
|
|
152
|
+
/ (temperature_k + SUTHERLAND_CONSTANT_K)
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def speed_of_sound(temperature_k: float) -> float:
|
|
157
|
+
"""Speed of sound in dry air at ``temperature_k``, in m/s."""
|
|
158
|
+
_require_finite("temperature", temperature_k)
|
|
159
|
+
if temperature_k <= 0.0:
|
|
160
|
+
raise AtmosphereError(
|
|
161
|
+
f"temperature {temperature_k} K is not above absolute zero, so the "
|
|
162
|
+
"speed of sound has no value there"
|
|
163
|
+
)
|
|
164
|
+
return math.sqrt(ISA.heat_capacity_ratio * ISA.gas_constant_j_per_kg_k * temperature_k)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def density(pressure_pa: float, temperature_k: float) -> float:
|
|
168
|
+
"""Density of dry air from the ideal gas law, in kg/m3."""
|
|
169
|
+
_require_finite("pressure", pressure_pa)
|
|
170
|
+
_require_finite("temperature", temperature_k)
|
|
171
|
+
if pressure_pa <= 0.0:
|
|
172
|
+
raise AtmosphereError(f"pressure {pressure_pa} Pa is not above zero")
|
|
173
|
+
if temperature_k <= 0.0:
|
|
174
|
+
raise AtmosphereError(
|
|
175
|
+
f"temperature {temperature_k} K is not above absolute zero, so the "
|
|
176
|
+
"ideal gas law has no density there"
|
|
177
|
+
)
|
|
178
|
+
return pressure_pa / (ISA.gas_constant_j_per_kg_k * temperature_k)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def standard_pressure(altitude_m: float) -> float:
|
|
182
|
+
"""ISA pressure at a geopotential altitude, in Pa.
|
|
183
|
+
|
|
184
|
+
An ISA deviation does NOT appear here, and that is the convention
|
|
185
|
+
this module exists to make explicit: a deviation moves temperature
|
|
186
|
+
and leaves the pressure at a pressure altitude alone.
|
|
187
|
+
"""
|
|
188
|
+
if not ISA.floor_altitude_m <= altitude_m <= ISA.ceiling_altitude_m:
|
|
189
|
+
raise AtmosphereError(
|
|
190
|
+
f"altitude {altitude_m} m is outside the range this atmosphere "
|
|
191
|
+
f"models, {ISA.floor_altitude_m} m to {ISA.ceiling_altitude_m} m. "
|
|
192
|
+
"ISO 2533 continues above that ceiling with layers this module [REF-01] "
|
|
193
|
+
"does not implement, and extrapolating past either end of the range "
|
|
194
|
+
"would be wrong in a way the caller could not see."
|
|
195
|
+
)
|
|
196
|
+
exponent = ISA.gravity_m_per_s2 / (ISA.lapse_rate_k_per_m * ISA.gas_constant_j_per_kg_k)
|
|
197
|
+
if altitude_m <= ISA.tropopause_altitude_m:
|
|
198
|
+
temperature = ISA.sea_level_temperature_k - ISA.lapse_rate_k_per_m * altitude_m
|
|
199
|
+
return ISA.sea_level_pressure_pa * (temperature / ISA.sea_level_temperature_k) ** exponent
|
|
200
|
+
tropopause_pressure = (
|
|
201
|
+
ISA.sea_level_pressure_pa
|
|
202
|
+
* (ISA.tropopause_temperature_k / ISA.sea_level_temperature_k) ** exponent
|
|
203
|
+
)
|
|
204
|
+
height_above = altitude_m - ISA.tropopause_altitude_m
|
|
205
|
+
return tropopause_pressure * math.exp(
|
|
206
|
+
-ISA.gravity_m_per_s2
|
|
207
|
+
* height_above
|
|
208
|
+
/ (ISA.gas_constant_j_per_kg_k * ISA.tropopause_temperature_k)
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def standard_temperature(altitude_m: float) -> float:
|
|
213
|
+
"""ISA temperature at a geopotential altitude, in K, with no deviation."""
|
|
214
|
+
if not ISA.floor_altitude_m <= altitude_m <= ISA.ceiling_altitude_m:
|
|
215
|
+
raise AtmosphereError(
|
|
216
|
+
f"altitude {altitude_m} m is outside the range this atmosphere "
|
|
217
|
+
f"models, {ISA.floor_altitude_m} m to {ISA.ceiling_altitude_m} m"
|
|
218
|
+
)
|
|
219
|
+
if altitude_m <= ISA.tropopause_altitude_m:
|
|
220
|
+
return ISA.sea_level_temperature_k - ISA.lapse_rate_k_per_m * altitude_m
|
|
221
|
+
return ISA.tropopause_temperature_k
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def isa(altitude_m: float = 0.0, *, delta_isa_c: float = 0.0) -> AtmosphereState:
|
|
225
|
+
"""Return the air state at a pressure altitude, with an optional ISA deviation.
|
|
226
|
+
|
|
227
|
+
Parameters
|
|
228
|
+
----------
|
|
229
|
+
altitude_m:
|
|
230
|
+
Geopotential pressure altitude in metres. Defaults to sea level,
|
|
231
|
+
which is what an absent altitude means in a flight condition.
|
|
232
|
+
delta_isa_c:
|
|
233
|
+
Temperature offset from the standard value, in Celsius, applied
|
|
234
|
+
as a DELTA. Defaults to 0. Pressure is unaffected by it; see the
|
|
235
|
+
module docstring.
|
|
236
|
+
|
|
237
|
+
Raises
|
|
238
|
+
------
|
|
239
|
+
AtmosphereError
|
|
240
|
+
For an altitude outside the modelled range, a deviation that is
|
|
241
|
+
NaN or infinite, or a deviation that puts the temperature at or
|
|
242
|
+
below absolute zero.
|
|
243
|
+
|
|
244
|
+
Examples
|
|
245
|
+
--------
|
|
246
|
+
>>> state = isa()
|
|
247
|
+
>>> round(state.temperature_k, 2)
|
|
248
|
+
288.15
|
|
249
|
+
>>> round(state.sonic_velocity_m_per_s, 3)
|
|
250
|
+
340.294
|
|
251
|
+
|
|
252
|
+
An ISA deviation moves temperature and density and leaves pressure
|
|
253
|
+
exactly where it was:
|
|
254
|
+
|
|
255
|
+
>>> hot = isa(0.0, delta_isa_c=15.0)
|
|
256
|
+
>>> hot.pressure_pa == state.pressure_pa
|
|
257
|
+
True
|
|
258
|
+
>>> hot.density_kg_m3 < state.density_kg_m3
|
|
259
|
+
True
|
|
260
|
+
"""
|
|
261
|
+
_require_finite("delta_isa_c (the ISA deviation, degrees C)", delta_isa_c)
|
|
262
|
+
pressure = standard_pressure(altitude_m)
|
|
263
|
+
temperature = standard_temperature(altitude_m) + delta_isa_c
|
|
264
|
+
if not math.isfinite(temperature):
|
|
265
|
+
raise AtmosphereError(
|
|
266
|
+
f"an ISA deviation of {delta_isa_c} C at {altitude_m} m gives a non-finite "
|
|
267
|
+
f"temperature ({temperature}); the deviation must be a finite number"
|
|
268
|
+
)
|
|
269
|
+
if temperature <= 0.0:
|
|
270
|
+
raise AtmosphereError(
|
|
271
|
+
f"an ISA deviation of {delta_isa_c} C at {altitude_m} m puts the "
|
|
272
|
+
f"temperature at {temperature} K, which is not above absolute zero"
|
|
273
|
+
)
|
|
274
|
+
return AtmosphereState(
|
|
275
|
+
temperature_k=temperature,
|
|
276
|
+
pressure_pa=pressure,
|
|
277
|
+
density_kg_m3=density(pressure, temperature),
|
|
278
|
+
sonic_velocity_m_per_s=speed_of_sound(temperature),
|
|
279
|
+
viscosity_pa_s=sutherland_viscosity(temperature),
|
|
280
|
+
)
|
|
@@ -4,12 +4,12 @@ Decorating a console ``main`` preserves its return value and exceptions.
|
|
|
4
4
|
Only the outermost entry point reports, including argparse's early exits.
|
|
5
5
|
Machine-readable stdout is never used for human outcome reporting.
|
|
6
6
|
|
|
7
|
-
Every invocation ends with the package's signature on stderr
|
|
7
|
+
Every invocation ends with the package's signature on stderr: a box
|
|
8
8
|
drawn from :mod:`pyflightstream._signature` for an outcome, or one short line
|
|
9
9
|
for ``--help`` and ``--version`` so their output stays compact. For the length
|
|
10
10
|
of the call, a warning of the package's own categories prints as
|
|
11
11
|
``[warning] <message>`` with no file, line or echoed source, wrapped at 90
|
|
12
|
-
columns under its text and followed by a blank line
|
|
12
|
+
columns under its text and followed by a blank line; ``--verbose``
|
|
13
13
|
keeps Python's full format. A Python caller outside a console script is never
|
|
14
14
|
touched.
|
|
15
15
|
|
|
@@ -168,6 +168,9 @@ def _sign(outcome: str) -> None:
|
|
|
168
168
|
except Exception:
|
|
169
169
|
text = _signature.SEES_YOU
|
|
170
170
|
stream = sys.stderr
|
|
171
|
+
if stream is None:
|
|
172
|
+
# print(file=None) would fall back to stdout and break its byte contract.
|
|
173
|
+
return
|
|
171
174
|
try:
|
|
172
175
|
try:
|
|
173
176
|
print(text, file=stream)
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
"""The console layout of a command's human output: titled blocks and wrapped lines.
|
|
2
2
|
|
|
3
3
|
Below the package's domain layers, beside :mod:`pyflightstream._cli`, so
|
|
4
|
-
every command prints the same shapes
|
|
4
|
+
every command prints the same shapes. A block is a short title line
|
|
5
5
|
saying what it is, then its lines indented under it; one blank line separates
|
|
6
6
|
two blocks, and a block with nothing to say is not printed. A long line is
|
|
7
7
|
wrapped at :data:`WIDTH` columns with its continuation lines indented under
|
|
8
8
|
its text, never under its label, and every word is kept in order: only the
|
|
9
9
|
spaces at a break change.
|
|
10
10
|
|
|
11
|
-
Nothing here decides a stream. Each caller
|
|
11
|
+
Nothing here decides a stream. Each caller chooses its stream:
|
|
12
12
|
the human summary of ``plan`` on stdout, a warning on stderr.
|
|
13
13
|
|
|
14
|
-
THE CONSOLE CONTRACT (
|
|
14
|
+
THE CONSOLE CONTRACT (FR-200 and FR-201). Every ``pyfs-matrix`` and
|
|
15
15
|
``pyfs-workspace`` command opens with a titled block, the command's own name
|
|
16
16
|
and what it is for (:func:`opening_lines`, :func:`opens_with_titled_block`),
|
|
17
17
|
and a command's warnings are held and printed together at the end under
|
|
18
|
-
``Warnings (<count>)`` (:func:`warnings_title`).
|
|
19
|
-
go to stderr,
|
|
18
|
+
``Warnings (<count>)`` (:func:`warnings_title`). These console blocks
|
|
19
|
+
go to stderr, keeping standard output available for command results. The
|
|
20
20
|
progress of a long stage is one line of the shape :func:`progress_text` draws
|
|
21
21
|
(FR-202). :mod:`pyflightstream._progress` holds the state that uses these
|
|
22
22
|
shapes; this module holds only the shapes.
|
|
@@ -37,8 +37,8 @@ _Subparsers = argparse._SubParsersAction
|
|
|
37
37
|
WIDTH = 90
|
|
38
38
|
|
|
39
39
|
#: The console levels of a command (FR-997), least to most: ``quiet`` says the
|
|
40
|
-
#: errors, the final summary line and the signature; ``normal``
|
|
41
|
-
#:
|
|
40
|
+
#: errors, the final summary line and the signature; ``normal`` includes progress
|
|
41
|
+
#: and summaries; ``verbose`` includes details. The activity log is full at every level.
|
|
42
42
|
CONSOLE_LEVELS = ("quiet", "normal", "verbose")
|
|
43
43
|
|
|
44
44
|
#: What a console warning starts with; its continuation lines align with the
|