pyflightstream 0.2.0__py3-none-any.whl

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 (71) hide show
  1. pyflightstream/__init__.py +27 -0
  2. pyflightstream/cases/__init__.py +332 -0
  3. pyflightstream/cases/matrix_legacy.py +337 -0
  4. pyflightstream/commands/__init__.py +544 -0
  5. pyflightstream/commands/_meta.yaml +18 -0
  6. pyflightstream/commands/actuators.yaml +167 -0
  7. pyflightstream/commands/advanced_settings.yaml +136 -0
  8. pyflightstream/commands/aeroelastic_coupling.yaml +172 -0
  9. pyflightstream/commands/boundary_conditions.yaml +153 -0
  10. pyflightstream/commands/ccs_wing_mesh.yaml +74 -0
  11. pyflightstream/commands/coordinate_systems.yaml +123 -0
  12. pyflightstream/commands/file_io.yaml +82 -0
  13. pyflightstream/commands/mesh_import_export.yaml +72 -0
  14. pyflightstream/commands/motion_definitions.yaml +185 -0
  15. pyflightstream/commands/probe_points.yaml +116 -0
  16. pyflightstream/commands/runtime_settings.yaml +160 -0
  17. pyflightstream/commands/scenes.yaml +14 -0
  18. pyflightstream/commands/script_controls.yaml +39 -0
  19. pyflightstream/commands/simulation_controls.yaml +30 -0
  20. pyflightstream/commands/solver_analysis.yaml +118 -0
  21. pyflightstream/commands/solver_export.yaml +138 -0
  22. pyflightstream/commands/solver_initialization.yaml +95 -0
  23. pyflightstream/commands/solver_settings.yaml +120 -0
  24. pyflightstream/commands/streamlines.yaml +63 -0
  25. pyflightstream/commands/surface_sections.yaml +145 -0
  26. pyflightstream/commands/sweeper.yaml +115 -0
  27. pyflightstream/commands/unsteady_solver.yaml +68 -0
  28. pyflightstream/commands/volume_sections.yaml +148 -0
  29. pyflightstream/farfield/__init__.py +613 -0
  30. pyflightstream/files/__init__.py +375 -0
  31. pyflightstream/fsi/__init__.py +57 -0
  32. pyflightstream/fsi/beam.py +417 -0
  33. pyflightstream/fsi/centrifugal.py +418 -0
  34. pyflightstream/fsi/cli.py +206 -0
  35. pyflightstream/fsi/config.py +316 -0
  36. pyflightstream/fsi/driver.py +501 -0
  37. pyflightstream/fsi/kinematics.py +153 -0
  38. pyflightstream/fsi/loads.py +740 -0
  39. pyflightstream/fsi/nodes.py +463 -0
  40. pyflightstream/fsi/state.py +181 -0
  41. pyflightstream/post/__init__.py +18 -0
  42. pyflightstream/post/writers.py +195 -0
  43. pyflightstream/probes/__init__.py +453 -0
  44. pyflightstream/probes/geometry.py +281 -0
  45. pyflightstream/probes/planar.py +477 -0
  46. pyflightstream/qa/__init__.py +59 -0
  47. pyflightstream/qa/cli.py +364 -0
  48. pyflightstream/qa/compat.py +285 -0
  49. pyflightstream/qa/drift.py +406 -0
  50. pyflightstream/qa/geometry.py +421 -0
  51. pyflightstream/qa/physics.py +1744 -0
  52. pyflightstream/qa/probes.py +1023 -0
  53. pyflightstream/qa/references/PHY-01.yaml +38 -0
  54. pyflightstream/qa/references/PHY-02.yaml +28 -0
  55. pyflightstream/qa/references/PHY-05.yaml +29 -0
  56. pyflightstream/qa/references/PHY-06.yaml +90 -0
  57. pyflightstream/qa/references/SMI-01.yaml +28 -0
  58. pyflightstream/qa/references/SMI-02.yaml +28 -0
  59. pyflightstream/qa/specs.py +1405 -0
  60. pyflightstream/reference.py +465 -0
  61. pyflightstream/results/__init__.py +547 -0
  62. pyflightstream/run/__init__.py +677 -0
  63. pyflightstream/script/__init__.py +474 -0
  64. pyflightstream/script/helpers.py +844 -0
  65. pyflightstream/versions.py +191 -0
  66. pyflightstream-0.2.0.dist-info/METADATA +88 -0
  67. pyflightstream-0.2.0.dist-info/RECORD +71 -0
  68. pyflightstream-0.2.0.dist-info/WHEEL +5 -0
  69. pyflightstream-0.2.0.dist-info/entry_points.txt +3 -0
  70. pyflightstream-0.2.0.dist-info/licenses/LICENSE +21 -0
  71. pyflightstream-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,191 @@
1
+ """Canonical FlightStream version identifiers and their ordering.
2
+
3
+ Pipeline role: the lowest layer. Everything else asks this module which
4
+ FlightStream versions exist and how they are ordered.
5
+
6
+ Canonical identifiers use the 26.XXX three-digit scheme (for example
7
+ ``26.120`` for the vendor release named 26.12); the last digit indexes
8
+ vendor hotfix builds. Neither string nor float comparison orders vendor
9
+ names correctly ("26.1" versus "26.12"), so the ordered list in
10
+ ``commands/_meta.yaml`` is the only ordering authority.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import re
16
+ from dataclasses import dataclass
17
+ from functools import lru_cache
18
+ from importlib import resources
19
+
20
+ import yaml
21
+
22
+ _CANONICAL_PATTERN = re.compile(r"^\d{2}\.\d{3}$")
23
+
24
+
25
+ class UnknownVersionError(ValueError):
26
+ """A FlightStream version identifier is not in the ordered registry.
27
+
28
+ Raised when a canonical identifier or display alias does not match
29
+ any entry of the ordered list in ``commands/_meta.yaml``. The message
30
+ lists every known version so the caller can correct the input or
31
+ register the new version first.
32
+ """
33
+
34
+
35
+ @dataclass(frozen=True)
36
+ class FsVersion:
37
+ """One registered FlightStream version.
38
+
39
+ Value object wrapping a canonical ``26.XXX`` identifier. Instances
40
+ are obtained through :func:`resolve` or :func:`known_versions`;
41
+ constructing one by hand bypasses the registry and is reserved to
42
+ this module.
43
+
44
+ Attributes
45
+ ----------
46
+ canonical : str
47
+ Canonical identifier in the three-fractional-digit scheme, for
48
+ example ``"26.120"``. The first two fractional digits carry the
49
+ official minor release, the last digit the vendor hotfix build
50
+ (0 means the official release).
51
+ alias : str
52
+ Vendor-facing release name, for example ``"26.12"``.
53
+ index : int
54
+ Position in the ordered list of ``commands/_meta.yaml``. All
55
+ ordering comparisons delegate to this index, never to string or
56
+ float comparison of the identifiers.
57
+ """
58
+
59
+ canonical: str
60
+ alias: str
61
+ index: int
62
+
63
+ def __post_init__(self) -> None:
64
+ """Reject identifiers that do not follow the canonical scheme."""
65
+ if not _CANONICAL_PATTERN.match(self.canonical):
66
+ raise UnknownVersionError(
67
+ f"{self.canonical!r} does not follow the canonical MAJOR.XXX "
68
+ "scheme with exactly three fractional digits (example: 26.120)."
69
+ )
70
+
71
+ def __str__(self) -> str:
72
+ """Return the canonical identifier."""
73
+ return self.canonical
74
+
75
+ def _index_against(self, other: object) -> int | None:
76
+ if isinstance(other, FsVersion):
77
+ return other.index
78
+ return None
79
+
80
+ def __lt__(self, other: object) -> bool:
81
+ """Order by release position in the registry list."""
82
+ other_index = self._index_against(other)
83
+ if other_index is None:
84
+ return NotImplemented
85
+ return self.index < other_index
86
+
87
+ def __le__(self, other: object) -> bool:
88
+ """Order by release position in the registry list."""
89
+ other_index = self._index_against(other)
90
+ if other_index is None:
91
+ return NotImplemented
92
+ return self.index <= other_index
93
+
94
+ def __gt__(self, other: object) -> bool:
95
+ """Order by release position in the registry list."""
96
+ other_index = self._index_against(other)
97
+ if other_index is None:
98
+ return NotImplemented
99
+ return self.index > other_index
100
+
101
+ def __ge__(self, other: object) -> bool:
102
+ """Order by release position in the registry list."""
103
+ other_index = self._index_against(other)
104
+ if other_index is None:
105
+ return NotImplemented
106
+ return self.index >= other_index
107
+
108
+
109
+ @lru_cache(maxsize=1)
110
+ def known_versions() -> tuple[FsVersion, ...]:
111
+ """Return every registered FlightStream version, in release order.
112
+
113
+ The list is read from ``commands/_meta.yaml`` inside the installed
114
+ package, so it is available from the wheel without repository access.
115
+
116
+ Returns
117
+ -------
118
+ tuple of FsVersion
119
+ Registered versions, ordered oldest first. The tuple position is
120
+ the ordering authority (CLAUDE.md invariant 4).
121
+ """
122
+ meta_text = (
123
+ resources.files("pyflightstream.commands")
124
+ .joinpath("_meta.yaml")
125
+ .read_text(encoding="utf-8")
126
+ )
127
+ meta = yaml.safe_load(meta_text)
128
+ return tuple(
129
+ FsVersion(canonical=entry["canonical"], alias=str(entry["alias"]), index=position)
130
+ for position, entry in enumerate(meta["versions"])
131
+ )
132
+
133
+
134
+ @lru_cache(maxsize=1)
135
+ def manual_editions() -> dict[str, str]:
136
+ """Return the registered manual edition per canonical version.
137
+
138
+ The mapping is read from ``commands/_meta.yaml`` and names the
139
+ manual edition (with its source id) that backs the ``documented``
140
+ statuses of each version. Versions without a registered edition are
141
+ absent; their commands await release-notes review or backfill
142
+ probing.
143
+
144
+ Returns
145
+ -------
146
+ dict of str to str
147
+ Manual edition description keyed by canonical identifier.
148
+ """
149
+ meta_text = (
150
+ resources.files("pyflightstream.commands")
151
+ .joinpath("_meta.yaml")
152
+ .read_text(encoding="utf-8")
153
+ )
154
+ meta = yaml.safe_load(meta_text)
155
+ editions = meta.get("manual_editions") or {}
156
+ return {str(key): str(value).strip() for key, value in editions.items()}
157
+
158
+
159
+ def resolve(version: str | FsVersion) -> FsVersion:
160
+ """Resolve a canonical identifier or display alias to a registered version.
161
+
162
+ Parameters
163
+ ----------
164
+ version : str or FsVersion
165
+ Canonical identifier (``"26.120"``), display alias (``"26.12"``),
166
+ or an already resolved :class:`FsVersion`, returned unchanged.
167
+
168
+ Returns
169
+ -------
170
+ FsVersion
171
+ The registered version.
172
+
173
+ Raises
174
+ ------
175
+ UnknownVersionError
176
+ If the identifier matches no registered version. The message
177
+ lists the known versions; new versions are only added through
178
+ the ordered list in ``commands/_meta.yaml``.
179
+ """
180
+ if isinstance(version, FsVersion):
181
+ return version
182
+ for registered in known_versions():
183
+ if version in (registered.canonical, registered.alias):
184
+ return registered
185
+ known = ", ".join(f"{v.canonical} (vendor name {v.alias})" for v in known_versions())
186
+ raise UnknownVersionError(
187
+ f"FlightStream version {version!r} is not registered. Known versions, "
188
+ f"in release order: {known}. Canonical identifiers use the 26.XXX "
189
+ "three-digit scheme; register new versions in commands/_meta.yaml, "
190
+ "which is the only ordering authority."
191
+ )
@@ -0,0 +1,88 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyflightstream
3
+ Version: 0.2.0
4
+ Summary: Version-aware, didactic Python driver for the FlightStream panel-method solver
5
+ Author: Geovana Neves
6
+ License: MIT
7
+ Project-URL: Repository, https://github.com/nevesgeovana/pyflightstream
8
+ Requires-Python: >=3.11
9
+ Description-Content-Type: text/markdown
10
+ License-File: LICENSE
11
+ Requires-Dist: numpy
12
+ Requires-Dist: pandas
13
+ Requires-Dist: pydantic
14
+ Requires-Dist: pyyaml
15
+ Requires-Dist: xarray
16
+ Provides-Extra: plot
17
+ Requires-Dist: matplotlib; extra == "plot"
18
+ Provides-Extra: geom
19
+ Requires-Dist: trimesh; extra == "geom"
20
+ Requires-Dist: rtree; extra == "geom"
21
+ Requires-Dist: scipy; extra == "geom"
22
+ Provides-Extra: fsi
23
+ Requires-Dist: PyNiteFEA>=3.0; extra == "fsi"
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest; extra == "dev"
26
+ Requires-Dist: ruff; extra == "dev"
27
+ Requires-Dist: pre-commit; extra == "dev"
28
+ Requires-Dist: mkdocs-material; extra == "dev"
29
+ Requires-Dist: mkdocstrings[python]; extra == "dev"
30
+ Requires-Dist: mkdocs-gen-files; extra == "dev"
31
+ Requires-Dist: mkdocs-literate-nav; extra == "dev"
32
+ Dynamic: license-file
33
+
34
+ # pyflightstream
35
+
36
+ Version-aware, didactic Python driver for the FlightStream panel-method solver.
37
+ Successor of the author's legacy research scripts. MIT licensed.
38
+
39
+ Status: pre-alpha, milestone M0 (repository skeleton). The package installs and
40
+ imports, but no functionality ships yet. See the milestone plan below.
41
+
42
+ ## Why this package
43
+
44
+ FlightStream is scripted through an ASCII command file whose commands change
45
+ between solver versions, and not every change reaches the changelog. This
46
+ package makes the FlightStream version an explicit input: every command it
47
+ emits is validated against a per-version command database, and old versions
48
+ are only ever added, never dropped.
49
+
50
+ ## What is each folder?
51
+
52
+ | Folder | Purpose in plain language |
53
+ |---|---|
54
+ | `src/pyflightstream/` | The package itself, one subpackage per pipeline stage |
55
+ | `src/pyflightstream/commands/` | The command database: what exists in which FlightStream version, with manual page citations |
56
+ | `tests/` | Tier 1 tests, runnable anywhere, no FlightStream needed |
57
+ | `reports/` | Committed evidence from licensed machines: which commands actually work (compat) and physics regression results |
58
+ | `docs/` | Documentation source (mkdocs) |
59
+ | `examples/` | Runnable example scripts in percent format |
60
+ | `.claude/skills/` | Maintenance procedures (version updates, command additions, QA runs, releases) |
61
+ | `_private/` | Local only, never committed: FlightStream manuals and research geometry |
62
+
63
+ ## Supported FlightStream versions
64
+
65
+ Planned at launch: 26.000, 26.100, 26.120 (canonical 26.XXX scheme; the last
66
+ digit indexes vendor hotfix builds). The ordered list in
67
+ `src/pyflightstream/commands/_meta.yaml` is the only ordering authority.
68
+
69
+ ## Development setup
70
+
71
+ ```
72
+ pip install -e .[dev]
73
+ pre-commit install
74
+ pytest
75
+ ```
76
+
77
+ Tier 2 (command validity probes) and Tier 3 (physics regression) require a
78
+ local FlightStream license and are documented in CONTRIBUTING.md.
79
+
80
+ ## Milestones
81
+
82
+ M0 skeleton (this) > M1 command database > M2 builder, runner, parser >
83
+ M3 compat report > M4 physics cases > M5 docs and example > v0.1.0 (private).
84
+
85
+ ## License
86
+
87
+ MIT. Contributions must be original or MIT-compatible; code derived from the
88
+ AGPL pyFlightscript package is not accepted. See CONTRIBUTING.md.
@@ -0,0 +1,71 @@
1
+ pyflightstream/__init__.py,sha256=9KF_ePOp8WiabGyzrkfDi9DmwqD9xLO6OuHXKSJ_PVw,1150
2
+ pyflightstream/reference.py,sha256=9EwpW6YePyRjALr_lJ9AzbMMwyiTQbFiZ0PTw1ZSoO0,17696
3
+ pyflightstream/versions.py,sha256=ACXF8D0lo3aeaKjb4SUF_NSZAyaSMln1384gIInA-co,6897
4
+ pyflightstream/cases/__init__.py,sha256=wN3SgxV2uyzCLPfNK-zhkn432lx-9BkDhkBXtUPB26o,11624
5
+ pyflightstream/cases/matrix_legacy.py,sha256=76fJFCky_Wp3rKXjLQtMKPvYzgHqjZXtr9E0AnUbWJg,12102
6
+ pyflightstream/commands/__init__.py,sha256=y2jirOauFQ6e_Yb2EvDfH2OUAQ9gQvmzqxR6KoBh6aU,21373
7
+ pyflightstream/commands/_meta.yaml,sha256=ZAB1jlt0wy2aA9ddm6fMkDFABmlnDf3ACUFf02NqJY8,681
8
+ pyflightstream/commands/actuators.yaml,sha256=rlk8by47uX7cMV7vU4UXOliIBzwNSM7gI1Bx1eW1gMc,4351
9
+ pyflightstream/commands/advanced_settings.yaml,sha256=wAybL0xY2zfdOCQI6ps2B2n6dbPFsKtBxd_ozxz7-nY,3426
10
+ pyflightstream/commands/aeroelastic_coupling.yaml,sha256=3roBumDYMcxM_89DXahFofhtBMA2AXGH37lvVmoBWa4,5460
11
+ pyflightstream/commands/boundary_conditions.yaml,sha256=Fp28w0TnsxQMXdt9xaQioiDdz2DC6sLEbRuLZXW3qbk,4521
12
+ pyflightstream/commands/ccs_wing_mesh.yaml,sha256=yLCLLLHMjPED3xJulSY6akXn-jB_hJ5Rpeam58eFMYg,2203
13
+ pyflightstream/commands/coordinate_systems.yaml,sha256=E8i5FWyn8A5tvg0mXzdmtmpUU5m6jnkB2KKgDFufyC4,3169
14
+ pyflightstream/commands/file_io.yaml,sha256=o-Z1y_YRdCTH4So9LMJQ1brX7bmGjItEOXb4zdveuKc,2567
15
+ pyflightstream/commands/mesh_import_export.yaml,sha256=sK3vcwSOQlyfwXqUKEmnzVNYtU4hjVH_2r6YNRugOQ0,2271
16
+ pyflightstream/commands/motion_definitions.yaml,sha256=YNe-pmc-2_ag--JsK_Xoo4k4UzBFb71URe2kBGTA4oo,5176
17
+ pyflightstream/commands/probe_points.yaml,sha256=eB-ddRIV6nl-mW2ONFQPVnv4Ibk5jvv8rTCXM1qXzmg,3890
18
+ pyflightstream/commands/runtime_settings.yaml,sha256=SJNi_bdY6z44IRPrpWoPIjg7cehT2v9keXpeZOsII74,4623
19
+ pyflightstream/commands/scenes.yaml,sha256=FTvudHFNFJ3IT1Hch7RsFuHCHwsnM5tvtFitHyft3s4,468
20
+ pyflightstream/commands/script_controls.yaml,sha256=mPBWPchbgUvD9JimXBYT7hhSMktWxoNa5hv5qztzv2k,1155
21
+ pyflightstream/commands/simulation_controls.yaml,sha256=Nkxmprc-mtXAy74rk0fhYWkjcLSPyJuCCqxl717ySO4,943
22
+ pyflightstream/commands/solver_analysis.yaml,sha256=ohUu3u7ZvzJGUOnZB6bjwODkzUVMweLcoiX4wxYBIJQ,3623
23
+ pyflightstream/commands/solver_export.yaml,sha256=lysFWe0h4rjazyCLx_XJ1xJxkDS2cXTrQ9TnwTpZXAg,3981
24
+ pyflightstream/commands/solver_initialization.yaml,sha256=G2-5YqZTwmcef4PxwrvKvk2kSCxcBDkXMV-Lz5yQqGA,3140
25
+ pyflightstream/commands/solver_settings.yaml,sha256=RJ9NpNbSJUMvzI0FYm5X3GViw_hVnXvu_3IlUV7K4-g,3780
26
+ pyflightstream/commands/streamlines.yaml,sha256=X1Qk3urRFgianRUbe9kK62VbDiykIkAXACc3vV1YHEA,1835
27
+ pyflightstream/commands/surface_sections.yaml,sha256=-Z5n6FBl-deQ_5_D4kVJ8bm9YgSSWG9TjX1X5c39UfU,4647
28
+ pyflightstream/commands/sweeper.yaml,sha256=EGD12KKo929iRHbIuLF5IBcdXxtxAADGQLersjdkjUU,3021
29
+ pyflightstream/commands/unsteady_solver.yaml,sha256=yXrJzkFiBlDRwEDJUUGSfAfY842_CrBX8_0CxChXFeU,2152
30
+ pyflightstream/commands/volume_sections.yaml,sha256=C3mPokKBnTEYBIxUJTji_TatYAZe_6Rm09jtTr1gVeo,3892
31
+ pyflightstream/farfield/__init__.py,sha256=6i4O1aT893Ufz_jQdmThGCf8I4Ead8jUVmI4Gw7Cb44,22317
32
+ pyflightstream/files/__init__.py,sha256=QLQCKZZ0tkdI4LlXII_iDo4nYRfqu9gCXjsA1z3ru3M,13683
33
+ pyflightstream/fsi/__init__.py,sha256=Pd8X4PHJXETlDdXqX6Zw-5A8Ms7Q5HWhL7znYclq50A,2534
34
+ pyflightstream/fsi/beam.py,sha256=oHAv_L13-HomFTq0-i5YBuZDvsx1BsMoeEvoZUhECX8,16258
35
+ pyflightstream/fsi/centrifugal.py,sha256=ucBsDQykuHZ2N9pNoel3Gkp8xZKCPf9TWdRq7ixXxkc,15137
36
+ pyflightstream/fsi/cli.py,sha256=zcapJU7U9JR45Xv0eVRB5bLwj_y-mbINhDaejmUP0xU,8891
37
+ pyflightstream/fsi/config.py,sha256=zDwEBF45yyFVEdQ_EhIVQCJMRzRuozfKMof6Lg6XcmM,13038
38
+ pyflightstream/fsi/driver.py,sha256=bec89tHusOTVMcmTtb7xMI-6oWjaqVgXC76r2MX2p2Q,20390
39
+ pyflightstream/fsi/kinematics.py,sha256=-SCgTss3Lw255V70KSbMWl0tze0scfXmTZeDEggJg2c,6166
40
+ pyflightstream/fsi/loads.py,sha256=NLWGlGZaAaQHU6amjxnS2OcpAcFIKr8NDWC8ETktydk,30977
41
+ pyflightstream/fsi/nodes.py,sha256=1U7z6Qi421vBkmHX8ILL-hdo550UqvaVzydrereFB2s,18922
42
+ pyflightstream/fsi/state.py,sha256=0uNFLY3bx5KVITpEjE2VNmRfRPEgxpN2iF0IsfmYk-Q,6318
43
+ pyflightstream/post/__init__.py,sha256=7uPjAeVmeFqCx54wnQ91xs-_2p_YRVdQgegCO_J8qMA,689
44
+ pyflightstream/post/writers.py,sha256=a6qIWJlazcbCyfVFq7YOfm_BH-7z_WIs4w2x4Q_kGw8,6578
45
+ pyflightstream/probes/__init__.py,sha256=XhI-Zg0rGNsowM2jnPxv4E4T0EdVDB7KuLg9LxO1BWk,17103
46
+ pyflightstream/probes/geometry.py,sha256=cLl4ODkFmvm6IRTCYMSS5z1oq9QEy4rnna0_QeeT9Do,10676
47
+ pyflightstream/probes/planar.py,sha256=ZfLZCxw0jcHnAdv6ndlNIUPyOYkqyDkhOPhfcUWWJmI,18626
48
+ pyflightstream/qa/__init__.py,sha256=pUQVOQZi7UDw2elps3481EkSFzVmQfRmxf366NrRFVg,1555
49
+ pyflightstream/qa/cli.py,sha256=OA5jtnwBvf4ZinWXX2iIzAkReA7Xqk09Uutv7WQq-Ko,12933
50
+ pyflightstream/qa/compat.py,sha256=C1laPeX5Wid-FCZpIPPmgdDgEmx-Jypx-jVAN6YrlWc,10966
51
+ pyflightstream/qa/drift.py,sha256=FtQhfp-ydxJk7dhkOML-jOvbtOVhFIHW4JDPZcvGe9o,14092
52
+ pyflightstream/qa/geometry.py,sha256=ReSsf_xafFf2TzBD3WEcBvfb9Qwc4vDkyEouM4fQRgE,15819
53
+ pyflightstream/qa/physics.py,sha256=OZsoxWXfsyMtxVaQw2P6JIL44-HRIBYEVZkZ-OK_US8,66198
54
+ pyflightstream/qa/probes.py,sha256=oQDaux50BdLEZL6yVP1jkKiWewYUYHlp204QxQyOy0U,38373
55
+ pyflightstream/qa/specs.py,sha256=jcmjluSUmo5ZJZwNUisP3qmZ31eJD70Yq2pOrurQ3OA,47679
56
+ pyflightstream/qa/references/PHY-01.yaml,sha256=MraZQBksXoLDHYvHtMR-Tr9lUvdKogQSPsVbKyeQtYg,817
57
+ pyflightstream/qa/references/PHY-02.yaml,sha256=zEuujBxgOYHH47kZB4oe3Dxp7PRPXWXjWHGBe-kkjAE,721
58
+ pyflightstream/qa/references/PHY-05.yaml,sha256=h5xQsnDYbF1bCHF8tda3jiSLEE3dsG3ENlOIq_GQN-g,805
59
+ pyflightstream/qa/references/PHY-06.yaml,sha256=sCZFupHP9fPeppecwkXpEhU8zTVM9YNtqgqNBNH1ghk,2209
60
+ pyflightstream/qa/references/SMI-01.yaml,sha256=RjEpKGri327id_vsHNKeNtwHMvbXsYPKfQB6IC9nNj8,628
61
+ pyflightstream/qa/references/SMI-02.yaml,sha256=Unu1pau3sCAf-30msOjch0BBIhLIyVH57cqbxG_4Tl8,650
62
+ pyflightstream/results/__init__.py,sha256=10d2t-Q-WsihEdflI0IQo1TFH4P-mTr7h1OwzIfcCtQ,20882
63
+ pyflightstream/run/__init__.py,sha256=gFkOJ4xlMkKgIQvkXYBiWMOVFzj9qccwtstAj2MJP_k,25683
64
+ pyflightstream/script/__init__.py,sha256=ABAEbSLN6ZZhrImH2FFR6Czvmjwit0I2oUjnQkj1t7c,19139
65
+ pyflightstream/script/helpers.py,sha256=ObhdaWV0I6KeyV4-vuomPZwwHP8s-obZXttdWZ0cxsg,32616
66
+ pyflightstream-0.2.0.dist-info/licenses/LICENSE,sha256=7o5R7Nl3SszAFmZ8W9juTDjFOADLPELVBh8X6L7lpG0,1070
67
+ pyflightstream-0.2.0.dist-info/METADATA,sha256=GUSBlMM7iV5ghHnUMvaUWHjTB6YTjsbOxQfyNd2bhg0,3408
68
+ pyflightstream-0.2.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
69
+ pyflightstream-0.2.0.dist-info/entry_points.txt,sha256=tsBrgOAZnvvIp5nXb7SSyq00asFdWEw2pHGJW9nwQFM,94
70
+ pyflightstream-0.2.0.dist-info/top_level.txt,sha256=0zB1FRd9vtcgUePn_8UtSjfiHj-IViFq1GmGPtfyTco,15
71
+ pyflightstream-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ pyfs-fsi = pyflightstream.fsi.cli:main
3
+ pyfs-qa = pyflightstream.qa.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Geovana Neves
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ pyflightstream