pyBADA 0.1.4__tar.gz → 0.1.6__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.
- pybada-0.1.6/.gitignore +8 -0
- pybada-0.1.6/AMENDMENT_TO_EUPL_license.md +26 -0
- {pybada-0.1.4 → pybada-0.1.6}/PKG-INFO +16 -14
- {pybada-0.1.4 → pybada-0.1.6}/README.md +4 -3
- {pybada-0.1.4 → pybada-0.1.6}/examples/BADAData.py +1 -2
- pybada-0.1.6/examples/combinedSlopeAndDestination.py +56 -0
- pybada-0.1.4/examples/geodesic.py → pybada-0.1.6/examples/geodesicCalculations.py +0 -1
- pybada-0.1.6/examples/initialMass.py +70 -0
- pybada-0.1.4/examples/optimum_speed_altitude.py → pybada-0.1.6/examples/optimumSpeedAndAltitude.py +0 -1
- pybada-0.1.4/examples/heli_trajectory.py → pybada-0.1.6/examples/trajectoryHELI.py +5 -5
- {pybada-0.1.4 → pybada-0.1.6}/pyproject.toml +15 -12
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/TCL.py +10 -17
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/aircraft.py +2 -2
- pybada-0.1.6/src/pyBADA/atmosphere.py +513 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/bada3.py +58 -72
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/bada4.py +116 -130
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/badaH.py +20 -33
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/configuration.py +2 -1
- pybada-0.1.6/src/pyBADA/conversions.py +145 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/flightTrajectory.py +2 -1
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/geodesic.py +116 -10
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/magnetic.py +2 -1
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/trajectoryPrediction.py +13 -12
- pybada-0.1.6/src/pyBADA/utils.py +204 -0
- pybada-0.1.6/tests/atmosphereTest.py +768 -0
- pybada-0.1.6/uv.lock +1279 -0
- pybada-0.1.4/.gitignore +0 -5
- pybada-0.1.4/examples/initial_mass.py +0 -62
- pybada-0.1.4/src/pyBADA/atmosphere.py +0 -379
- pybada-0.1.4/src/pyBADA/conversions.py +0 -172
- {pybada-0.1.4 → pybada-0.1.6}/.github/workflows/lint.yml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/.github/workflows/pytest.yml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/.github/workflows/release.yml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/.github/workflows/sphinx.yml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/.pre-commit-config.yaml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/AUTHORS +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/LICENCE.txt +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/Makefile +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/TCL.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/aircraft.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/atmosphere.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/bada3.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/bada4.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/badaH.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/configuration.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/constants.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/conversions.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/flightTrajectory.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/geodesic.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/magnetic.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/trajectoryPrediction.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/_static/css/custom.css +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/_static/default_thumbnail.png +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/_static/pyBADA_architecture.png +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/_templates/footer.html +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/architecture.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/conf.py +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/getting-started.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/history.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/index.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/pyBADA.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/userManual.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/user_manual/examples.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/docs/source/user_manual/introduction.rst +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/examples/GALLERY_HEADER.rst +0 -0
- pybada-0.1.4/examples/file_parser.py → pybada-0.1.6/examples/fileParser.py +0 -0
- pybada-0.1.4/examples/ac_trajectory.py → pybada-0.1.6/examples/trajectoryAC.py +3 -3
- pybada-0.1.4/examples/ac_trajectory_GPS.py → pybada-0.1.6/examples/trajectoryAC_GPS.py +4 -4
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BADA.GPF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BZJT__.APF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BZJT__.OPF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BZJT__.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BZJT__.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/GA____.APF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/GA____.OPF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/GA____.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/GA____.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2H___.APF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2H___.OPF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2H___.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2H___.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2M___.APF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2M___.OPF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2M___.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2M___.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J4H___.APF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J4H___.OPF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J4H___.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J4H___.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/ReleaseSummary +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/SYNONYM.NEW +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/TP2M__.APF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/TP2M__.OPF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/TP2M__.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/TP2M__.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/ACM_BADA4.xsd +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST.ATF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST.xml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST_ISA+20.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST_ISA+20.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST_ISA.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST_ISA.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP.ATF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP.xml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP_ISA+20.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP_ISA+20.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP_ISA.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP_ISA.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/LRC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/MEC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/MRC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/OPTALT.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN.ATF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN.xml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN_ISA+20.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN_ISA+20.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN_ISA.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN_ISA.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/ECON.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/LRC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/MEC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/MRC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/OPTALT.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus.ATF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus.xml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus_ISA+20.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus_ISA+20.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus_ISA.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus_ISA.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/ECON.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/LRC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/MEC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/MRC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/OPTALT.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/GPF.xml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/GPF_BADA4.xsd +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH.ATF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH.xml +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH_ISA+20.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH_ISA+20.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH_ISA.PTD +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH_ISA.PTF +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/LRC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/MEC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/MRC.OPT +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/data/magneticDeclinationGridData.json +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/__init__.py +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/constants.py +0 -0
- {pybada-0.1.4 → pybada-0.1.6}/tests/load_test.py +1 -1
pybada-0.1.6/.gitignore
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## 1. Definitions
|
|
2
|
+
|
|
3
|
+
**The Licensor**: The natural or legal person that distributes or communicates the Work under the Licence $\color{red}{\text{(“EUROCONTROL”, the European Organisation for the Safety of Air Navigation)}}$.
|
|
4
|
+
|
|
5
|
+
## 5. Obligations of the Licensee
|
|
6
|
+
|
|
7
|
+
**Legal Protection**: This Licence does not grant permission to use the $\color{red}{\text{official emblems}}$, trade names, trademarks, service marks, or names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the copyright notice.
|
|
8
|
+
|
|
9
|
+
## 9. Additional agreements
|
|
10
|
+
|
|
11
|
+
### $\color{red}{\text{9a. Processing of personal data}}$
|
|
12
|
+
|
|
13
|
+
$\color{red}{\text{Licensee processes the personal data it receives from Licensor under this Agreement for the sole purpose of making use of the Work under}}$ $\color{red}{\text{the terms of the License. EUROCONTROL processes the personal data in accordance with the EUROCONTROL Regulation on Personal Data}}$ $\color{red}{\text{Protection.}}$
|
|
14
|
+
|
|
15
|
+
$\color{red}{\text{Licensor processes the personal data it receives from the Licensee under the Licence for the sole purpose of distributing or communicates the }}$ $\color{red}{\text{Work under the Licence. Licensee processes the personal data in accordance with the data protection laws applicable to Licensee.}}$
|
|
16
|
+
|
|
17
|
+
$\color{red}{\text{To protect the personal data, the Licensee and Licensor shall implement appropriate organisational, technical and physical measures}}$ $\color{red}{\text{ which shall be kept up to date in accordance with generally accepted standards.}}$
|
|
18
|
+
|
|
19
|
+
## 14. Jurisdiction
|
|
20
|
+
Without prejudice to specific agreement between parties, any litigation arising between other parties and resulting from the interpretation of this License, will be subject to the exclusive jurisdiction of the competent courts of $\color{red}{\text{Belgium}}$.
|
|
21
|
+
|
|
22
|
+
## 15. Applicable Law
|
|
23
|
+
Without prejudice to specific agreement between parties, this Licence shall be governed by the law of $\color{red}{\text{Belgium}}$.
|
|
24
|
+
|
|
25
|
+
## Appendix
|
|
26
|
+
The $\color{red}{\text{Licencor}}$ may update this Appendix to later versions of the above licences without producing a new version of the EUPL, as long as they provide the rights granted in Article 2 of this Licence and protect the covered Source Code from exclusive appropriation.
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyBADA
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.1.6
|
|
4
|
+
Summary: Aircraft performance modelling, trajectory prediction and optimisation, and visualisation with EUROCONTROL's BADA.
|
|
5
5
|
Project-URL: Homepage, https://github.com/eurocontrol-bada/pybada
|
|
6
|
-
Author-email: Henrich Glaser-Opitz <henrich.glaser-opitz@eurocontrol.int>
|
|
6
|
+
Author-email: Henrich Glaser-Opitz <henrich.glaser-opitz@eurocontrol.int>, Antonio Vivace <antonio.vivace@eurocontrol.int>
|
|
7
7
|
License: EUPL-1.2
|
|
8
8
|
License-File: AUTHORS
|
|
9
9
|
License-File: LICENCE.txt
|
|
10
10
|
Classifier: License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
12
|
Requires-Python: >=3.12
|
|
13
|
-
Requires-Dist: numpy>=2.2
|
|
14
|
-
Requires-Dist: pandas>=2.
|
|
15
|
-
Requires-Dist: scipy>=1.
|
|
13
|
+
Requires-Dist: numpy>=2.3.2
|
|
14
|
+
Requires-Dist: pandas>=2.3.1
|
|
15
|
+
Requires-Dist: scipy>=1.16.1
|
|
16
16
|
Requires-Dist: simplekml>=1.3.6
|
|
17
|
-
Requires-Dist:
|
|
17
|
+
Requires-Dist: xarray>=2025.7.1
|
|
18
|
+
Requires-Dist: xlsxwriter>=3.2.5
|
|
18
19
|
Provides-Extra: dev
|
|
19
20
|
Requires-Dist: build; extra == 'dev'
|
|
20
|
-
Requires-Dist: folium==0.
|
|
21
|
-
Requires-Dist: matplotlib==3.10.
|
|
22
|
-
Requires-Dist: pre-commit==4.
|
|
23
|
-
Requires-Dist: pytest==8.
|
|
21
|
+
Requires-Dist: folium==0.20.0; extra == 'dev'
|
|
22
|
+
Requires-Dist: matplotlib==3.10.5; extra == 'dev'
|
|
23
|
+
Requires-Dist: pre-commit==4.2.0; extra == 'dev'
|
|
24
|
+
Requires-Dist: pytest==8.4.1; extra == 'dev'
|
|
24
25
|
Requires-Dist: readthedocs-sphinx-search>=0.3.2; extra == 'dev'
|
|
25
26
|
Requires-Dist: ruff==0.11.5; extra == 'dev'
|
|
26
27
|
Requires-Dist: sphinx-gallery==0.19.0; extra == 'dev'
|
|
@@ -33,10 +34,10 @@ Description-Content-Type: text/markdown
|
|
|
33
34
|
|
|
34
35
|
[](https://github.com/astral-sh/ruff)
|
|
35
36
|
<a href="https://github.com/eurocontrol-bada/pybada/blob/main/LICENCE.txt"><img alt="License: EUPL" src="https://img.shields.io/badge/license-EUPL-3785D1.svg"></a>
|
|
36
|
-
<a href="https://pypi.org/project/pyBADA"><img alt="Released on PyPi" src="https://img.shields.io/pypi/v/pyBADA.svg"></a>
|
|
37
|
-

|
|
37
|
+
<a href="https://pypi.org/project/pyBADA"><img alt="Released on PyPi" src="https://img.shields.io/pypi/v/pyBADA.svg"></a> <img alt="PyPI - Downloads" src="https://img.shields.io/pypi/dw/pybada"> 
|
|
38
38
|
<a href="https://github.com/eurocontrol-bada/pybada"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>
|
|
39
39
|
[](https://github.com/eurocontrol-bada/pybada/actions/workflows/pytest.yml)
|
|
40
|
+

|
|
40
41
|
|
|
41
42
|
This package provides aircraft performance modelling, trajectory prediction and optimisation, and visualisation with [BADA](https://www.eurocontrol.int/model/bada) in Python.
|
|
42
43
|
|
|
@@ -89,4 +90,5 @@ You won't receive support for it, but you can pass the flag `--ignore-requires-p
|
|
|
89
90
|
|
|
90
91
|
BADA and pyBADA are developed and maintained by [EUROCONTROL](https://www.eurocontrol.int/model/bada).
|
|
91
92
|
|
|
92
|
-
This project is released under the European Union Public License v1.2 - see the [
|
|
93
|
+
This project is released under the European Union Public License v1.2 - see the [LICENCE](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12) file for details.
|
|
94
|
+
See the [Amendment to the EUPL](./AMENDMENT_TO_EUPL_license.md) for additional terms.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/astral-sh/ruff)
|
|
4
4
|
<a href="https://github.com/eurocontrol-bada/pybada/blob/main/LICENCE.txt"><img alt="License: EUPL" src="https://img.shields.io/badge/license-EUPL-3785D1.svg"></a>
|
|
5
|
-
<a href="https://pypi.org/project/pyBADA"><img alt="Released on PyPi" src="https://img.shields.io/pypi/v/pyBADA.svg"></a>
|
|
6
|
-

|
|
5
|
+
<a href="https://pypi.org/project/pyBADA"><img alt="Released on PyPi" src="https://img.shields.io/pypi/v/pyBADA.svg"></a> <img alt="PyPI - Downloads" src="https://img.shields.io/pypi/dw/pybada"> 
|
|
7
6
|
<a href="https://github.com/eurocontrol-bada/pybada"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>
|
|
8
7
|
[](https://github.com/eurocontrol-bada/pybada/actions/workflows/pytest.yml)
|
|
8
|
+

|
|
9
9
|
|
|
10
10
|
This package provides aircraft performance modelling, trajectory prediction and optimisation, and visualisation with [BADA](https://www.eurocontrol.int/model/bada) in Python.
|
|
11
11
|
|
|
@@ -58,4 +58,5 @@ You won't receive support for it, but you can pass the flag `--ignore-requires-p
|
|
|
58
58
|
|
|
59
59
|
BADA and pyBADA are developed and maintained by [EUROCONTROL](https://www.eurocontrol.int/model/bada).
|
|
60
60
|
|
|
61
|
-
This project is released under the European Union Public License v1.2 - see the [
|
|
61
|
+
This project is released under the European Union Public License v1.2 - see the [LICENCE](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12) file for details.
|
|
62
|
+
See the [Amendment to the EUPL](./AMENDMENT_TO_EUPL_license.md) for additional terms.
|
|
@@ -5,9 +5,8 @@ BADA Data Retrieval
|
|
|
5
5
|
Example of BADA parametes retrieval for specific aircraft
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from pyBADA.bada3 import Parser as Bada3Parser
|
|
9
8
|
from pyBADA.aircraft import Bada
|
|
10
|
-
|
|
9
|
+
from pyBADA.bada3 import Parser as Bada3Parser
|
|
11
10
|
|
|
12
11
|
# loading all the BADA data into a dataframe
|
|
13
12
|
allData = Bada3Parser.parseAll(badaVersion="DUMMY")
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Required Slope & Destination Point Applying Slope For Distance and Bearing
|
|
3
|
+
==========================================================================
|
|
4
|
+
1. Computes the required climb/descent slope and horizontal distance between two WGS84 waypoints.
|
|
5
|
+
2. Computes the destination waypoint (lat, lon, alt) from an initial waypoint, given a slope,
|
|
6
|
+
horizontal distance and bearing.
|
|
7
|
+
Uses three different geodesic algorithms: Vincenty, Haversine, and Rhumb-Line.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from pyBADA import conversions as conv
|
|
11
|
+
from pyBADA import geodesic as geo
|
|
12
|
+
|
|
13
|
+
# ——— Inputs for required–slope example ———
|
|
14
|
+
waypoint1 = {
|
|
15
|
+
'latitude': 52.2367946579192,
|
|
16
|
+
'longitude': 20.7129809016565,
|
|
17
|
+
'altitude': 3500.0 # ft
|
|
18
|
+
}
|
|
19
|
+
waypoint2 = {
|
|
20
|
+
'latitude': 52.1697191213371,
|
|
21
|
+
'longitude': 20.9519554471793,
|
|
22
|
+
'altitude': 412.0 # ft
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# ——— Inputs for destination–point example ———
|
|
26
|
+
initial_waypoint = waypoint1.copy()
|
|
27
|
+
slope_deg = 3.5 # degrees (positive = climb)
|
|
28
|
+
distance_nm = 12.0 # nautical miles
|
|
29
|
+
bearing_deg = 75.0 # degrees from true north
|
|
30
|
+
|
|
31
|
+
# ——— Run both examples for each algorithm ———
|
|
32
|
+
for algo_name, Algo in [
|
|
33
|
+
("Vincenty", geo.Vincenty),
|
|
34
|
+
("Haversine", geo.Haversine),
|
|
35
|
+
("RhumbLine", geo.RhumbLine),
|
|
36
|
+
]:
|
|
37
|
+
print(f"\n=== {algo_name} ===")
|
|
38
|
+
|
|
39
|
+
# 1) Required slope & horizontal distance
|
|
40
|
+
slope_req_deg, dist_m = Algo.requiredSlope(waypoint1, waypoint2)
|
|
41
|
+
dist_nm = conv.m2nm(dist_m)
|
|
42
|
+
print("Required slope from waypoint1 → waypoint2:")
|
|
43
|
+
print(f" Slope = {slope_req_deg:.8f}°")
|
|
44
|
+
print(f" Horizontal distance = {dist_nm:.8f} NM")
|
|
45
|
+
|
|
46
|
+
# 2) Destination point given a slope, distance & bearing
|
|
47
|
+
dest_wp = Algo.destinationPointApplyingSlopeForDistance(
|
|
48
|
+
initial_waypoint,
|
|
49
|
+
slope_deg,
|
|
50
|
+
distance_nm,
|
|
51
|
+
bearing_deg
|
|
52
|
+
)
|
|
53
|
+
print("Destination waypoint applying slope & distance:")
|
|
54
|
+
print(f" Latitude = {dest_wp['latitude']:.6f}°")
|
|
55
|
+
print(f" Longitude = {dest_wp['longitude']:.6f}°")
|
|
56
|
+
print(f" Altitude = {dest_wp['altitude']:.2f} ft")
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Initial Mass Calculation
|
|
3
|
+
========================
|
|
4
|
+
|
|
5
|
+
Example calculation of aircraft initial mass
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from pyBADA import atmosphere as atm
|
|
10
|
+
from pyBADA import conversions as conv
|
|
11
|
+
from pyBADA import trajectoryPrediction as TP
|
|
12
|
+
from pyBADA.bada3 import Bada3Aircraft
|
|
13
|
+
from pyBADA.bada4 import Bada4Aircraft
|
|
14
|
+
from pyBADA.badaH import BadaHAircraft
|
|
15
|
+
|
|
16
|
+
# calculate estimations for the fuel flow, and aircraft initial mass
|
|
17
|
+
AC = Bada3Aircraft(badaVersion="DUMMY", acName="J2M")
|
|
18
|
+
|
|
19
|
+
# Common inputs
|
|
20
|
+
DeltaTemp = 0 # deviation from ISA temperature [K]
|
|
21
|
+
M = 0.7 # Mach number [-]
|
|
22
|
+
altitude = conv.ft2m(30000) # cruise altitude [m]
|
|
23
|
+
distance = conv.nm2m(100) # flown distance [m]
|
|
24
|
+
payload = 80 # payload mass [% of max payload]
|
|
25
|
+
fuelReserve = 3600 # fuel reserve [s]
|
|
26
|
+
flightPlanInitMass = None # planned takeoff mass [kg]
|
|
27
|
+
|
|
28
|
+
# Precompute atmosphere & speed inputs
|
|
29
|
+
theta, delta, sigma = atm.atmosphereProperties(h=altitude, DeltaTemp=DeltaTemp)
|
|
30
|
+
TAS = atm.mach2Tas(Mach=M, theta=theta)
|
|
31
|
+
GS = TAS # assume no wind
|
|
32
|
+
|
|
33
|
+
# Specify acName per model
|
|
34
|
+
for model_name, ACClass, acName in [
|
|
35
|
+
("BADA3", Bada3Aircraft, "J2M"),
|
|
36
|
+
("BADA4", Bada4Aircraft, "Dummy-TWIN-plus"),
|
|
37
|
+
("BADAH", BadaHAircraft, "DUMH"),
|
|
38
|
+
]:
|
|
39
|
+
print(f"\n=== {model_name} ===")
|
|
40
|
+
AC = ACClass(badaVersion="DUMMY", acName=acName)
|
|
41
|
+
|
|
42
|
+
# 1) Cruise fuel flow [kg/s]
|
|
43
|
+
cruiseFuelFlow = TP.cruiseFuelConsumption(
|
|
44
|
+
AC=AC, altitude=altitude, M=M, DeltaTemp=DeltaTemp
|
|
45
|
+
)
|
|
46
|
+
print(f"cruiseFuelFlow: {cruiseFuelFlow:.6f} kg/s")
|
|
47
|
+
|
|
48
|
+
# 2) Distance based initial mass via Breguet–Leduc
|
|
49
|
+
breguetInitialMass = TP.breguetLeducInitialMass(
|
|
50
|
+
AC=AC,
|
|
51
|
+
distance=distance,
|
|
52
|
+
GS=GS,
|
|
53
|
+
cruiseFuelFlow=cruiseFuelFlow,
|
|
54
|
+
payload=payload,
|
|
55
|
+
fuelReserve=fuelReserve,
|
|
56
|
+
)
|
|
57
|
+
print(f"breguetLeducInitialMass: {breguetInitialMass:.2f} kg")
|
|
58
|
+
|
|
59
|
+
# 3) Initial mass using limited by flight envelope (OEW, MTOW)
|
|
60
|
+
initMass = TP.getInitialMass(
|
|
61
|
+
AC=AC,
|
|
62
|
+
distance=distance,
|
|
63
|
+
altitude=altitude,
|
|
64
|
+
M=M,
|
|
65
|
+
payload=payload,
|
|
66
|
+
fuelReserve=fuelReserve,
|
|
67
|
+
flightPlanInitialMass=flightPlanInitMass,
|
|
68
|
+
DeltaTemp=DeltaTemp,
|
|
69
|
+
)
|
|
70
|
+
print(f"initMass(limited): {initMass:.2f} kg")
|
|
@@ -5,16 +5,16 @@ Helicopter Trajectory Calculation
|
|
|
5
5
|
Example of BADAH trajectory using TCL
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from math import tan, pi
|
|
9
8
|
from dataclasses import dataclass
|
|
9
|
+
from math import pi, tan
|
|
10
|
+
|
|
10
11
|
import matplotlib.pyplot as plt
|
|
11
12
|
|
|
12
|
-
from pyBADA import constants as const
|
|
13
13
|
from pyBADA import TCL as TCL
|
|
14
|
-
from pyBADA
|
|
15
|
-
|
|
16
|
-
from pyBADA.badaH import Parser as BadaHParser
|
|
14
|
+
from pyBADA import constants as const
|
|
17
15
|
from pyBADA.badaH import BadaHAircraft
|
|
16
|
+
from pyBADA.badaH import Parser as BadaHParser
|
|
17
|
+
from pyBADA.flightTrajectory import FlightTrajectory as FT
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
@dataclass
|
|
@@ -4,11 +4,12 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyBADA"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.6"
|
|
8
8
|
authors = [
|
|
9
|
-
{ name="Henrich Glaser-Opitz", email="henrich.glaser-opitz@eurocontrol.int" }
|
|
9
|
+
{ name="Henrich Glaser-Opitz", email="henrich.glaser-opitz@eurocontrol.int" },
|
|
10
|
+
{ name="Antonio Vivace", email="antonio.vivace@eurocontrol.int" }
|
|
10
11
|
]
|
|
11
|
-
description = "
|
|
12
|
+
description = "Aircraft performance modelling, trajectory prediction and optimisation, and visualisation with EUROCONTROL's BADA."
|
|
12
13
|
readme = "README.md"
|
|
13
14
|
requires-python = ">=3.12"
|
|
14
15
|
classifiers = [
|
|
@@ -16,11 +17,12 @@ classifiers = [
|
|
|
16
17
|
"License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)"
|
|
17
18
|
]
|
|
18
19
|
dependencies = [
|
|
19
|
-
"scipy>=1.
|
|
20
|
-
"numpy>=2.2
|
|
21
|
-
"pandas>=2.
|
|
20
|
+
"scipy>=1.16.1",
|
|
21
|
+
"numpy>=2.3.2",
|
|
22
|
+
"pandas>=2.3.1",
|
|
22
23
|
"simplekml>=1.3.6",
|
|
23
|
-
"XlsxWriter>=3.2.
|
|
24
|
+
"XlsxWriter>=3.2.5",
|
|
25
|
+
"xarray >=2025.7.1"
|
|
24
26
|
]
|
|
25
27
|
license = { text = "EUPL-1.2" }
|
|
26
28
|
|
|
@@ -30,11 +32,11 @@ license = { text = "EUPL-1.2" }
|
|
|
30
32
|
dev = [
|
|
31
33
|
"sphinx-rtd-theme==3.0.2",
|
|
32
34
|
"Sphinx==8.2.3",
|
|
33
|
-
"pre-commit==4.
|
|
35
|
+
"pre-commit==4.2.0",
|
|
34
36
|
"sphinx-gallery==0.19.0",
|
|
35
|
-
"matplotlib==3.10.
|
|
36
|
-
"folium==0.
|
|
37
|
-
"pytest==8.
|
|
37
|
+
"matplotlib==3.10.5",
|
|
38
|
+
"folium==0.20.0",
|
|
39
|
+
"pytest==8.4.1",
|
|
38
40
|
"build",
|
|
39
41
|
"twine",
|
|
40
42
|
"readthedocs-sphinx-search>=0.3.2",
|
|
@@ -63,7 +65,8 @@ exclude = [
|
|
|
63
65
|
]
|
|
64
66
|
|
|
65
67
|
[tool.ruff.lint]
|
|
66
|
-
select = ["E", "F401"]
|
|
68
|
+
# select = ["E", "F401", "W", "C90", "B", "UP", "SIM", "I"]
|
|
69
|
+
select = ["E", "F401", "W", "I"]
|
|
67
70
|
ignore = ["E501"]
|
|
68
71
|
|
|
69
72
|
[tool.hatch.build.targets.wheel]
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
"""Trajectory Computation Light (TCL) for BADAH/BADAE/BADA3/BADA4 aircraft
|
|
2
2
|
performance module."""
|
|
3
3
|
|
|
4
|
-
import numpy as np
|
|
5
|
-
from pyBADA.geodesic import Vincenty as vincenty
|
|
6
|
-
from pyBADA.geodesic import RhumbLine as rhumb
|
|
7
|
-
from pyBADA.geodesic import Turn as turn
|
|
8
|
-
|
|
9
|
-
from dataclasses import dataclass
|
|
10
4
|
import itertools
|
|
11
5
|
import warnings
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from math import asin, atan, cos, degrees, radians, sin, tan
|
|
12
8
|
|
|
13
|
-
|
|
9
|
+
import numpy as np
|
|
14
10
|
|
|
11
|
+
from pyBADA import utils
|
|
15
12
|
from pyBADA import atmosphere as atm
|
|
16
|
-
from pyBADA import conversions as conv
|
|
17
13
|
from pyBADA import constants as const
|
|
14
|
+
from pyBADA import conversions as conv
|
|
18
15
|
from pyBADA.flightTrajectory import FlightTrajectory as FT
|
|
16
|
+
from pyBADA.geodesic import RhumbLine as rhumb
|
|
17
|
+
from pyBADA.geodesic import Turn as turn
|
|
18
|
+
from pyBADA.geodesic import Vincenty as vincenty
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass
|
|
@@ -26,13 +26,6 @@ class target:
|
|
|
26
26
|
ESFtarget: float = None
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def checkArgument(argument, **kwargs):
|
|
30
|
-
if kwargs.get(argument) is not None:
|
|
31
|
-
return kwargs.get(argument)
|
|
32
|
-
else:
|
|
33
|
-
raise TypeError("Missing " + argument + " argument")
|
|
34
|
-
|
|
35
|
-
|
|
36
29
|
def constantSpeedLevel(
|
|
37
30
|
AC,
|
|
38
31
|
lengthType,
|
|
@@ -7506,7 +7499,7 @@ def accDec(
|
|
|
7506
7499
|
else:
|
|
7507
7500
|
maxRating = "MCMB"
|
|
7508
7501
|
else:
|
|
7509
|
-
maxRating = checkArgument("maxRating", **kwargs)
|
|
7502
|
+
maxRating = utils.checkArgument("maxRating", **kwargs)
|
|
7510
7503
|
|
|
7511
7504
|
# Determine engine rating
|
|
7512
7505
|
if (
|
|
@@ -8779,7 +8772,7 @@ def accDec_time(
|
|
|
8779
8772
|
else:
|
|
8780
8773
|
maxRating = "MCMB"
|
|
8781
8774
|
else:
|
|
8782
|
-
maxRating = checkArgument("maxRating", **kwargs)
|
|
8775
|
+
maxRating = utils.checkArgument("maxRating", **kwargs)
|
|
8783
8776
|
|
|
8784
8777
|
# Determine engine rating
|
|
8785
8778
|
if (
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""Generic airplane/helicopter performance module."""
|
|
2
2
|
|
|
3
|
-
from math import
|
|
3
|
+
from math import atan, cos, degrees, pow, radians, sqrt, tan
|
|
4
4
|
|
|
5
|
+
from pyBADA import atmosphere as atm
|
|
5
6
|
from pyBADA import constants as const
|
|
6
7
|
from pyBADA import conversions as conv
|
|
7
|
-
from pyBADA import atmosphere as atm
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def checkArgument(argument, **kwargs):
|