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.
Files changed (149) hide show
  1. pybada-0.1.6/.gitignore +8 -0
  2. pybada-0.1.6/AMENDMENT_TO_EUPL_license.md +26 -0
  3. {pybada-0.1.4 → pybada-0.1.6}/PKG-INFO +16 -14
  4. {pybada-0.1.4 → pybada-0.1.6}/README.md +4 -3
  5. {pybada-0.1.4 → pybada-0.1.6}/examples/BADAData.py +1 -2
  6. pybada-0.1.6/examples/combinedSlopeAndDestination.py +56 -0
  7. pybada-0.1.4/examples/geodesic.py → pybada-0.1.6/examples/geodesicCalculations.py +0 -1
  8. pybada-0.1.6/examples/initialMass.py +70 -0
  9. pybada-0.1.4/examples/optimum_speed_altitude.py → pybada-0.1.6/examples/optimumSpeedAndAltitude.py +0 -1
  10. pybada-0.1.4/examples/heli_trajectory.py → pybada-0.1.6/examples/trajectoryHELI.py +5 -5
  11. {pybada-0.1.4 → pybada-0.1.6}/pyproject.toml +15 -12
  12. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/TCL.py +10 -17
  13. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/aircraft.py +2 -2
  14. pybada-0.1.6/src/pyBADA/atmosphere.py +513 -0
  15. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/bada3.py +58 -72
  16. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/bada4.py +116 -130
  17. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/badaH.py +20 -33
  18. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/configuration.py +2 -1
  19. pybada-0.1.6/src/pyBADA/conversions.py +145 -0
  20. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/flightTrajectory.py +2 -1
  21. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/geodesic.py +116 -10
  22. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/magnetic.py +2 -1
  23. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/trajectoryPrediction.py +13 -12
  24. pybada-0.1.6/src/pyBADA/utils.py +204 -0
  25. pybada-0.1.6/tests/atmosphereTest.py +768 -0
  26. pybada-0.1.6/uv.lock +1279 -0
  27. pybada-0.1.4/.gitignore +0 -5
  28. pybada-0.1.4/examples/initial_mass.py +0 -62
  29. pybada-0.1.4/src/pyBADA/atmosphere.py +0 -379
  30. pybada-0.1.4/src/pyBADA/conversions.py +0 -172
  31. {pybada-0.1.4 → pybada-0.1.6}/.github/workflows/lint.yml +0 -0
  32. {pybada-0.1.4 → pybada-0.1.6}/.github/workflows/pytest.yml +0 -0
  33. {pybada-0.1.4 → pybada-0.1.6}/.github/workflows/release.yml +0 -0
  34. {pybada-0.1.4 → pybada-0.1.6}/.github/workflows/sphinx.yml +0 -0
  35. {pybada-0.1.4 → pybada-0.1.6}/.pre-commit-config.yaml +0 -0
  36. {pybada-0.1.4 → pybada-0.1.6}/AUTHORS +0 -0
  37. {pybada-0.1.4 → pybada-0.1.6}/LICENCE.txt +0 -0
  38. {pybada-0.1.4 → pybada-0.1.6}/docs/Makefile +0 -0
  39. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/TCL.rst +0 -0
  40. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/aircraft.rst +0 -0
  41. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/atmosphere.rst +0 -0
  42. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/bada3.rst +0 -0
  43. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/bada4.rst +0 -0
  44. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/badaH.rst +0 -0
  45. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/configuration.rst +0 -0
  46. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/constants.rst +0 -0
  47. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/conversions.rst +0 -0
  48. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/flightTrajectory.rst +0 -0
  49. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/geodesic.rst +0 -0
  50. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/magnetic.rst +0 -0
  51. {pybada-0.1.4 → pybada-0.1.6}/docs/source/API_reference/trajectoryPrediction.rst +0 -0
  52. {pybada-0.1.4 → pybada-0.1.6}/docs/source/_static/css/custom.css +0 -0
  53. {pybada-0.1.4 → pybada-0.1.6}/docs/source/_static/default_thumbnail.png +0 -0
  54. {pybada-0.1.4 → pybada-0.1.6}/docs/source/_static/pyBADA_architecture.png +0 -0
  55. {pybada-0.1.4 → pybada-0.1.6}/docs/source/_templates/footer.html +0 -0
  56. {pybada-0.1.4 → pybada-0.1.6}/docs/source/architecture.rst +0 -0
  57. {pybada-0.1.4 → pybada-0.1.6}/docs/source/conf.py +0 -0
  58. {pybada-0.1.4 → pybada-0.1.6}/docs/source/getting-started.rst +0 -0
  59. {pybada-0.1.4 → pybada-0.1.6}/docs/source/history.rst +0 -0
  60. {pybada-0.1.4 → pybada-0.1.6}/docs/source/index.rst +0 -0
  61. {pybada-0.1.4 → pybada-0.1.6}/docs/source/pyBADA.rst +0 -0
  62. {pybada-0.1.4 → pybada-0.1.6}/docs/source/userManual.rst +0 -0
  63. {pybada-0.1.4 → pybada-0.1.6}/docs/source/user_manual/examples.rst +0 -0
  64. {pybada-0.1.4 → pybada-0.1.6}/docs/source/user_manual/introduction.rst +0 -0
  65. {pybada-0.1.4 → pybada-0.1.6}/examples/GALLERY_HEADER.rst +0 -0
  66. pybada-0.1.4/examples/file_parser.py → pybada-0.1.6/examples/fileParser.py +0 -0
  67. pybada-0.1.4/examples/ac_trajectory.py → pybada-0.1.6/examples/trajectoryAC.py +3 -3
  68. pybada-0.1.4/examples/ac_trajectory_GPS.py → pybada-0.1.6/examples/trajectoryAC_GPS.py +4 -4
  69. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BADA.GPF +0 -0
  70. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BZJT__.APF +0 -0
  71. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BZJT__.OPF +0 -0
  72. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BZJT__.PTD +0 -0
  73. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/BZJT__.PTF +0 -0
  74. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/GA____.APF +0 -0
  75. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/GA____.OPF +0 -0
  76. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/GA____.PTD +0 -0
  77. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/GA____.PTF +0 -0
  78. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2H___.APF +0 -0
  79. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2H___.OPF +0 -0
  80. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2H___.PTD +0 -0
  81. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2H___.PTF +0 -0
  82. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2M___.APF +0 -0
  83. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2M___.OPF +0 -0
  84. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2M___.PTD +0 -0
  85. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J2M___.PTF +0 -0
  86. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J4H___.APF +0 -0
  87. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J4H___.OPF +0 -0
  88. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J4H___.PTD +0 -0
  89. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/J4H___.PTF +0 -0
  90. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/ReleaseSummary +0 -0
  91. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/SYNONYM.NEW +0 -0
  92. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/TP2M__.APF +0 -0
  93. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/TP2M__.OPF +0 -0
  94. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/TP2M__.PTD +0 -0
  95. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA3/DUMMY/TP2M__.PTF +0 -0
  96. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/ACM_BADA4.xsd +0 -0
  97. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST.ATF +0 -0
  98. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST.xml +0 -0
  99. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST_ISA+20.PTD +0 -0
  100. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST_ISA+20.PTF +0 -0
  101. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST_ISA.PTD +0 -0
  102. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-PST/Dummy-PST_ISA.PTF +0 -0
  103. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP.ATF +0 -0
  104. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP.xml +0 -0
  105. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP_ISA+20.PTD +0 -0
  106. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP_ISA+20.PTF +0 -0
  107. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP_ISA.PTD +0 -0
  108. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/Dummy-TBP_ISA.PTF +0 -0
  109. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/LRC.OPT +0 -0
  110. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/MEC.OPT +0 -0
  111. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/MRC.OPT +0 -0
  112. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TBP/OPTALT.OPT +0 -0
  113. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN.ATF +0 -0
  114. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN.xml +0 -0
  115. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN_ISA+20.PTD +0 -0
  116. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN_ISA+20.PTF +0 -0
  117. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN_ISA.PTD +0 -0
  118. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/Dummy-TWIN_ISA.PTF +0 -0
  119. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/ECON.OPT +0 -0
  120. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/LRC.OPT +0 -0
  121. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/MEC.OPT +0 -0
  122. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/MRC.OPT +0 -0
  123. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN/OPTALT.OPT +0 -0
  124. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus.ATF +0 -0
  125. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus.xml +0 -0
  126. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus_ISA+20.PTD +0 -0
  127. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus_ISA+20.PTF +0 -0
  128. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus_ISA.PTD +0 -0
  129. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/Dummy-TWIN-plus_ISA.PTF +0 -0
  130. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/ECON.OPT +0 -0
  131. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/LRC.OPT +0 -0
  132. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/MEC.OPT +0 -0
  133. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/MRC.OPT +0 -0
  134. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/Dummy-TWIN-plus/OPTALT.OPT +0 -0
  135. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/GPF.xml +0 -0
  136. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADA4/DUMMY/GPF_BADA4.xsd +0 -0
  137. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH.ATF +0 -0
  138. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH.xml +0 -0
  139. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH_ISA+20.PTD +0 -0
  140. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH_ISA+20.PTF +0 -0
  141. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH_ISA.PTD +0 -0
  142. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/DUMH_ISA.PTF +0 -0
  143. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/LRC.OPT +0 -0
  144. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/MEC.OPT +0 -0
  145. {pybada-0.1.4 → pybada-0.1.6}/src/aircraft/BADAH/DUMMY/DUMH/MRC.OPT +0 -0
  146. {pybada-0.1.4 → pybada-0.1.6}/src/data/magneticDeclinationGridData.json +0 -0
  147. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/__init__.py +0 -0
  148. {pybada-0.1.4 → pybada-0.1.6}/src/pyBADA/constants.py +0 -0
  149. {pybada-0.1.4 → pybada-0.1.6}/tests/load_test.py +1 -1
@@ -0,0 +1,8 @@
1
+ .idea
2
+ __pycache__
3
+ dist/
4
+ docs/build
5
+ env/
6
+
7
+ docs/source/auto_examples/
8
+ docs/source/sg_execution_times.rst
@@ -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
4
- Summary: pyBADA
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.3
14
- Requires-Dist: pandas>=2.2.3
15
- Requires-Dist: scipy>=1.15.2
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: xlsxwriter>=3.2.2
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.19.5; extra == 'dev'
21
- Requires-Dist: matplotlib==3.10.1; extra == 'dev'
22
- Requires-Dist: pre-commit==4.1.0; extra == 'dev'
23
- Requires-Dist: pytest==8.3.5; extra == 'dev'
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
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](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
- ![Python 3.12](https://img.shields.io/badge/Python-3.12-3776AB.svg?logo=python&logoColor=white)
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"> ![Python 3.12](https://img.shields.io/badge/Python-3.12-3776AB.svg?logo=python&logoColor=white)
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
  [![Run unit tests](https://github.com/eurocontrol-bada/pybada/actions/workflows/pytest.yml/badge.svg)](https://github.com/eurocontrol-bada/pybada/actions/workflows/pytest.yml)
40
+ ![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/pyBADA_dev?style=social&label=Follow%20%40pyBADA_dev)
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 [LICENSE](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12) file for details.
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
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](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
- ![Python 3.12](https://img.shields.io/badge/Python-3.12-3776AB.svg?logo=python&logoColor=white)
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"> ![Python 3.12](https://img.shields.io/badge/Python-3.12-3776AB.svg?logo=python&logoColor=white)
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
  [![Run unit tests](https://github.com/eurocontrol-bada/pybada/actions/workflows/pytest.yml/badge.svg)](https://github.com/eurocontrol-bada/pybada/actions/workflows/pytest.yml)
8
+ ![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/pyBADA_dev?style=social&label=Follow%20%40pyBADA_dev)
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 [LICENSE](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12) file for details.
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")
@@ -11,7 +11,6 @@ import folium
11
11
 
12
12
  from pyBADA import geodesic as geo
13
13
 
14
-
15
14
  # input parameters
16
15
  LAT_init = 48.596289
17
16
  LON_init = 2.351640
@@ -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")
@@ -7,7 +7,6 @@ Example of BADA4 and BADAH optimum speed and altitude calculation
7
7
 
8
8
  from pyBADA import atmosphere as atm
9
9
  from pyBADA import conversions as conv
10
-
11
10
  from pyBADA.bada4 import Bada4Aircraft
12
11
  from pyBADA.badaH import BadaHAircraft
13
12
 
@@ -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.flightTrajectory import FlightTrajectory as FT
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.4"
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 = "pyBADA"
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.15.2",
20
- "numpy>=2.2.3",
21
- "pandas>=2.2.3",
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.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.1.0",
35
+ "pre-commit==4.2.0",
34
36
  "sphinx-gallery==0.19.0",
35
- "matplotlib==3.10.1",
36
- "folium==0.19.5",
37
- "pytest==8.3.5",
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
- from math import atan, asin, sin, tan, cos, radians, degrees
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 sqrt, pow, cos, radians, atan, tan, degrees
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):