flightanalysis 0.2.15__tar.gz → 0.2.16__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 (142) hide show
  1. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/PKG-INFO +6 -6
  2. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/scoring/f3a_criteria_maker.py +5 -6
  3. flightanalysis-0.2.16/examples/scoring/temp.py +24 -0
  4. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/sch_analysis.py +23 -10
  5. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/criteria.py +4 -0
  6. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/f3a_criteria.py +7 -6
  7. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/intra/continuous.py +7 -4
  8. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/measurement.py +3 -3
  9. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/results.py +1 -1
  10. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scripts/batch_analyse.py +4 -6
  11. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis.egg-info/PKG-INFO +6 -6
  12. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis.egg-info/SOURCES.txt +14 -13
  13. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis.egg-info/requires.txt +5 -5
  14. flightanalysis-0.2.16/requirements-dev.txt +11 -0
  15. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/requirements.txt +2 -2
  16. flightanalysis-0.2.15/requirements-dev.txt +0 -11
  17. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/.github/workflows/publish_pypi.yml +0 -0
  18. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/.gitignore +0 -0
  19. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/LICENSE +0 -0
  20. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/MANIFEST.in +0 -0
  21. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/README.md +0 -0
  22. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/__init__.py +0 -0
  23. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/data/__init__.py +0 -0
  24. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
  25. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
  26. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
  27. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/AMA_Intermediate2024.py +0 -0
  28. {flightanalysis-0.2.15/examples/scoring/manoeuvres → flightanalysis-0.2.16/examples/schedule_construction}/__init__.py +0 -0
  29. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/create_all.py +0 -0
  30. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/f3a_a25.py +0 -0
  31. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/f3a_f25.py +0 -0
  32. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/f3a_p23.py +0 -0
  33. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/f3a_p25.py +0 -0
  34. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/f3auk_clubman.py +0 -0
  35. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/f3auk_intermediate.py +0 -0
  36. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/imac_sport2024.py +0 -0
  37. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/imac_unlim2024.py +0 -0
  38. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/make_manoeuvre.py +0 -0
  39. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/examples/schedule_construction}/nsrca_inter2024.py +0 -0
  40. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/scoring/__init__.py +0 -0
  41. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/scoring/judging.py +0 -0
  42. {flightanalysis-0.2.15/examples/scoring/manoeuvres/mans → flightanalysis-0.2.16/examples/scoring/manoeuvres}/__init__.py +0 -0
  43. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/scoring/manoeuvres/inter_analysis.py +0 -0
  44. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/scoring/manoeuvres/intra_analysis.py +0 -0
  45. {flightanalysis-0.2.15/flightanalysis/definition/builders → flightanalysis-0.2.16/examples/scoring/manoeuvres/mans}/__init__.py +0 -0
  46. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/scoring/manoeuvres/mans/extract_mans.py +0 -0
  47. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/scoring/manoeuvres/mans/tHat.json +0 -0
  48. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/examples/scoring/manoeuvres/positioning_analysis.py +0 -0
  49. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/__init__.py +0 -0
  50. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/__init__.py +0 -0
  51. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/el_analysis.py +0 -0
  52. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/manoeuvre_analysis/__init__.py +0 -0
  53. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/manoeuvre_analysis/alignment.py +0 -0
  54. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/manoeuvre_analysis/analysis.py +0 -0
  55. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/manoeuvre_analysis/basic.py +0 -0
  56. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/manoeuvre_analysis/complete.py +0 -0
  57. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/analysis/manoeuvre_analysis/scored.py +0 -0
  58. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/data/IMAC_Unlimited2024_schedule.json +0 -0
  59. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/data/__init__.py +0 -0
  60. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/data/f3a_a25_schedule.json +0 -0
  61. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/data/f3a_f25_schedule.json +0 -0
  62. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/data/f3a_p23_schedule.json +0 -0
  63. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/data/f3a_p25_schedule.json +0 -0
  64. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/data/f3auk_clubman_schedule.json +0 -0
  65. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/data/f3auk_inter_schedule.json +0 -0
  66. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/__init__.py +0 -0
  67. {flightanalysis-0.2.15/flightanalysis/scoring/criteria/inter → flightanalysis-0.2.16/flightanalysis/definition/builders}/__init__.py +0 -0
  68. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/builders/elbuilders.py +0 -0
  69. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/builders/lines.py +0 -0
  70. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/builders/manbuilder.py +0 -0
  71. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/collectors.py +0 -0
  72. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/eldef.py +0 -0
  73. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/mandef.py +0 -0
  74. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/maninfo.py +0 -0
  75. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/manoption.py +0 -0
  76. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/manparm.py +0 -0
  77. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/operations/__init__.py +0 -0
  78. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/operations/funopp.py +0 -0
  79. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/operations/itemopp.py +0 -0
  80. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/operations/mathopp.py +0 -0
  81. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/operations/operation.py +0 -0
  82. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/scheddef.py +0 -0
  83. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/definition/scheduleinfo.py +0 -0
  84. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/__init__.py +0 -0
  85. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/autorotation.py +0 -0
  86. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/element.py +0 -0
  87. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/line.py +0 -0
  88. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/loop.py +0 -0
  89. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/nose_drop.py +0 -0
  90. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/pitch_break.py +0 -0
  91. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/recovery.py +0 -0
  92. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/elements/stall_turn.py +0 -0
  93. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/manoeuvre.py +0 -0
  94. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/schedule.py +0 -0
  95. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/__init__.py +0 -0
  96. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/__init__.py +0 -0
  97. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/exponential.py +0 -0
  98. {flightanalysis-0.2.15/flightanalysis/scoring/criteria/intra → flightanalysis-0.2.16/flightanalysis/scoring/criteria/inter}/__init__.py +0 -0
  99. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/inter/combination.py +0 -0
  100. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/inter/comparison.py +0 -0
  101. {flightanalysis-0.2.15/scripts → flightanalysis-0.2.16/flightanalysis/scoring/criteria/intra}/__init__.py +0 -0
  102. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/intra/bounded.py +0 -0
  103. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/criteria/intra/single.py +0 -0
  104. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scoring/downgrade.py +0 -0
  105. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scripts/collect_scores.py +0 -0
  106. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis/scripts/plot_scores.py +0 -0
  107. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis.egg-info/dependency_links.txt +0 -0
  108. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis.egg-info/entry_points.txt +0 -0
  109. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/flightanalysis.egg-info/top_level.txt +0 -0
  110. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/pyproject.toml +0 -0
  111. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/setup.cfg +0 -0
  112. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/EmailedBox.f3a +0 -0
  113. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/__init__.py +0 -0
  114. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/conftest.py +0 -0
  115. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/data/manual_F3A_P23.json +0 -0
  116. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/data/p23.BIN +0 -0
  117. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/data/p23_box.f3a +0 -0
  118. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/data/p23_fc.json +0 -0
  119. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/data/p23_flight.json +0 -0
  120. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_criiteria.py +0 -0
  121. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_data.py +0 -0
  122. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/__init__.py +0 -0
  123. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_definition/__init__.py +0 -0
  124. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_definition/test_definition_eldef.py +0 -0
  125. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_definition/test_definition_manparm.py +0 -0
  126. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_definition/test_definition_mpopp.py +0 -0
  127. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_definition/test_schedule_definition.py +0 -0
  128. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_definition/test_schedule_definition_maninfo.py +0 -0
  129. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/__init__.py +0 -0
  130. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/loop_analysis.json +0 -0
  131. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/p23_th_e0.csv +0 -0
  132. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/p23_th_e0.json +0 -0
  133. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/p23_th_e0_template.csv +0 -0
  134. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/test_schedule_element.py +0 -0
  135. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/test_schedule_element_line.py +0 -0
  136. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/test_schedule_element_loop.py +0 -0
  137. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/test_schedule_element_nose_drop.py +0 -0
  138. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/test_schedule_element_pitch_break.py +0 -0
  139. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/test_schedule_element_recovery.py +0 -0
  140. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_element/test_schedule_element_stallturn.py +0 -0
  141. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_measurement.py +0 -0
  142. {flightanalysis-0.2.15 → flightanalysis-0.2.16}/tests/test_schedule/test_schedule_manoeuvre.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flightanalysis
3
- Version: 0.2.15
3
+ Version: 0.2.16
4
4
  Summary: A package for analysing flight data
5
5
  Author-email: Thomas David <thomasdavid0@gmail.com>
6
6
  License: GNU GPL v3
@@ -15,8 +15,8 @@ Requires-Dist: fastdtw
15
15
  Requires-Dist: simplejson
16
16
  Requires-Dist: loguru
17
17
  Requires-Dist: joblib
18
- Requires-Dist: pfc-geometry>=0.2.6
19
- Requires-Dist: flightdata>=0.2.14
18
+ Requires-Dist: pfc-geometry>=0.2.7
19
+ Requires-Dist: flightdata>=0.2.15
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: numpy; extra == "dev"
22
22
  Requires-Dist: pandas; extra == "dev"
@@ -25,9 +25,9 @@ Requires-Dist: fastdtw; extra == "dev"
25
25
  Requires-Dist: simplejson; extra == "dev"
26
26
  Requires-Dist: loguru; extra == "dev"
27
27
  Requires-Dist: joblib; extra == "dev"
28
- Requires-Dist: pfc-geometry>=0.2.6; extra == "dev"
29
- Requires-Dist: flightdata>=0.2.14; extra == "dev"
30
- Requires-Dist: ardupilot_log_reader>=0.3.1; extra == "dev"
28
+ Requires-Dist: pfc-geometry>=0.2.7; extra == "dev"
29
+ Requires-Dist: flightdata>=0.2.15; extra == "dev"
30
+ Requires-Dist: ardupilot_log_reader>=0.3.3; extra == "dev"
31
31
  Requires-Dist: pymavlink; extra == "dev"
32
32
 
33
33
  # FlightAnalysis
@@ -7,14 +7,13 @@ f3a=dict(
7
7
  track=Single(Exponential.fit_points(np.radians([30, 90]), [2, 6], 6)),
8
8
  roll=Single(Exponential.fit_points(np.radians([30, 90]), [1, 6], 6)),
9
9
  angle=Single(Exponential.fit_points(np.radians([30, 90]), [2, 6], 6)),
10
- # distance = Single(Exponential.fit_points([20, 40], [0.5, 1]))
11
10
  ),
12
11
  intra=dict(
13
- track=ContAbs(Exponential.fit_points(np.radians([30, 90]), [2, 6], 6)),
14
- roll=ContAbs(Exponential.fit_points(np.radians([30, 90]), [1.5, 6], 6)),
15
- radius=ContRat(Exponential.fit_points([1,5], [0.5, 4], 3)),
16
- speed=ContRat(Exponential.fit_points([1,5], [0.15, 0.75], 1)),
17
- roll_rate=ContRat(Exponential.fit_points([1,5], [0.15, 0.75], 2)),
12
+ track=ContAbs(Exponential.fit_points(np.radians([30, 90]), [2, 6], 6), 20),
13
+ roll=ContAbs(Exponential.fit_points(np.radians([30, 90]), [1.5, 6], 6), 30),
14
+ radius=ContRat(Exponential.fit_points([1,5], [0.5, 4], 3), 40),
15
+ speed=ContRat(Exponential.fit_points([1,5], [0.15, 0.75], 1), 50),
16
+ roll_rate=ContRat(Exponential.fit_points([1,5], [0.15, 0.75], 2), 40),
18
17
  stallturn_speed=InsideBound(Exponential.fit_points([2, 5], [0.3,1.5]), [-2,2]),
19
18
  stallturn_width=InsideBound(Exponential.fit_points([2, 5], [0.5,2.5]), [-2,2]),
20
19
  spin_entry_length=InsideBound(Exponential.fit_points([2, 5], [0.3,1.5]), [-5,5]),
@@ -0,0 +1,24 @@
1
+ class F3ASingle:
2
+ track=Single(Exponential(3.8197186342054885,0.9999999999999999, 6 ))
3
+ roll=Single(Exponential(2.872721387028467,1.6309297535714575, 6 ))
4
+ angle=Single(Exponential(3.8197186342054885,0.9999999999999999, 6 ))
5
+ class F3AIntra:
6
+ track=ContAbs(Exponential(3.8197186342054885,0.9999999999999999, 6 ), 10, 3)
7
+ roll=ContAbs(Exponential(3.3937161800825275,1.2618595071429148, 6 ), 20, 3)
8
+ radius=ContRat(Exponential(0.5,1.2920296742201793, 3 ), 25, 3)
9
+ speed=ContRat(Exponential(0.15,1.0, 1 ), 50, 3)
10
+ roll_rate=ContRat(Exponential(0.15,1.0, 2 ), 25, 3)
11
+ stallturn_speed=InsideBound(Exponential(0.08879139070041006,1.75647079736603, None ), [-2, 2])
12
+ stallturn_width=InsideBound(Exponential(0.14798565116735013,1.75647079736603, None ), [-2, 2])
13
+ spin_entry_length=InsideBound(Exponential(0.08879139070041006,1.75647079736603, None ), [-5, 5])
14
+ pitch_break_length=InsideBound(Exponential(0.7,2.321928094887362, None ), [-2, 2])
15
+ nose_drop_amount=OutsideBound(Exponential(20,1, None ), [-0.2617993877991494, 0.2617993877991494])
16
+ recovery_length=MaxBound(Exponential(0.7,2.321928094887362, None ), 2)
17
+ box=InsideBound(Exponential(76.39437268410977,1, None ), [-1.0471975511965976, 1.0471975511965976])
18
+ depth=MaxBound(Exponential(0.02500000000000001,0.9999999999999999, None ), 170)
19
+ class F3AInter:
20
+ radius=Comparison(Exponential(1.0,1.0, 2 ))
21
+ speed=Comparison(Exponential(0.25,1.0000000000000002, 1 ))
22
+ roll_rate=Comparison(Exponential(0.25,1.0000000000000002, 1 ))
23
+ length=Comparison(Exponential(1.0,1.0, 2 ))
24
+ free=Comparison(Exponential(0,1, None ))
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
  from typing import Self, Union
3
3
  from json import load, dump
4
- from flightdata import Flight, State, Origin, Collection
4
+ from flightdata import Flight, State, Origin, Collection, NumpyEncoder
5
5
  from flightanalysis.definition import SchedDef, ScheduleInfo
6
6
  from . import manoeuvre_analysis as analysis
7
7
  from loguru import logger
@@ -10,7 +10,7 @@ import os
10
10
  import pandas as pd
11
11
  from importlib.metadata import version
12
12
  from packaging import version as pkgversion
13
-
13
+ from pathlib import Path
14
14
 
15
15
  class ScheduleAnalysis(Collection):
16
16
  VType=analysis.Analysis
@@ -21,8 +21,8 @@ class ScheduleAnalysis(Collection):
21
21
  self.sinfo = sinfo
22
22
 
23
23
  @staticmethod
24
- def from_fcj(file: Union[str, dict], info: ScheduleInfo=None) -> ScheduleAnalysis:
25
- data = load(open(file, 'r')) if isinstance(file, str) else file
24
+ def from_fcj(file: Union[Union[str, bytes, os.PathLike], dict], info: ScheduleInfo=None) -> ScheduleAnalysis:
25
+ data = file if isinstance(file, dict) else load(open(file, 'r'))
26
26
 
27
27
  flight = Flight.from_fc_json(data)
28
28
 
@@ -50,8 +50,8 @@ class ScheduleAnalysis(Collection):
50
50
 
51
51
  return ScheduleAnalysis(mas,info)
52
52
 
53
- def append_scores_to_fcj(self, file: Union[str, dict]) -> dict:
54
- data = load(open(file, 'r')) if isinstance(file, str) else file
53
+ def append_scores_to_fcj(self, file: Union[str, dict], ofile: str=None) -> dict:
54
+ data = file if isinstance(file, dict) else load(open(file, 'r'))
55
55
 
56
56
  new_results = dict(
57
57
  fa_version = version('flightanalysis'),
@@ -69,14 +69,27 @@ class ScheduleAnalysis(Collection):
69
69
  else:
70
70
  data['fcs_scores'].append(new_results)
71
71
 
72
+ if ofile:
73
+ if ofile=='same':
74
+ ofile = file
75
+ dump(data, open(ofile, 'w'), cls=NumpyEncoder, indent=2)
76
+
72
77
  return data
73
-
78
+
79
+ # def export_fcj_and_internals(self, file: Union[str, dict]):
80
+ # data = load(open(file, 'r')) if isinstance(file, str) else file
81
+ # fcj = self.append_scores_to_fcj(data)
82
+
74
83
 
75
84
  def run_all(self) -> Self:
76
85
  def parse_analyse_serialise(pad):
77
- res = analysis.parse_dict(pad).run_all()
78
- logger.info(f'Completed {res.name}')
79
- return res.to_dict()
86
+ try:
87
+ pad = analysis.parse_dict(pad)
88
+ pad = pad.run_all()
89
+ logger.info(f'Completed {pad.name}')
90
+ except Exception as e:
91
+ logger.error(f'Failed to process {pad.name}: {repr(e)}')
92
+ return pad.to_dict()
80
93
 
81
94
  logger.info(f'Starting {os.cpu_count()} analysis processes')
82
95
  madicts = Parallel(n_jobs=os.cpu_count())(
@@ -38,6 +38,10 @@ class Criteria:
38
38
  _so = f"{self.__class__.__name__}(Exponential({self.lookup.factor},{self.lookup.exponent}, {self.lookup.limit} )"
39
39
  if hasattr(self, 'bound'):
40
40
  _so = f"{_so}, {self.bound}"
41
+ if hasattr(self, 'max_window'):
42
+ _so = f"{_so}, {self.max_window}"
43
+ if hasattr(self, 'window_ratio'):
44
+ _so = f"{_so}, {self.window_ratio}"
41
45
  return _so + ')'
42
46
 
43
47
  @dataclass
@@ -6,11 +6,11 @@ class F3ASingle:
6
6
  roll=Single(Exponential(2.872721387028467,1.6309297535714575, 6 ))
7
7
  angle=Single(Exponential(3.8197186342054885,0.9999999999999999, 6 ))
8
8
  class F3AIntra:
9
- track=ContAbs(Exponential(3.8197186342054885,0.9999999999999999, 6 ))
10
- roll=ContAbs(Exponential(3.3937161800825275,1.2618595071429148, 6 ))
11
- radius=ContRat(Exponential(0.5,1.2920296742201793, 3 ))
12
- speed=ContRat(Exponential(0.15,1.0, 1 ))
13
- roll_rate=ContRat(Exponential(0.15,1.0, 2 ))
9
+ track=ContAbs(Exponential(3.8197186342054885,0.9999999999999999, 6 ), 20, 3)
10
+ roll=ContAbs(Exponential(3.3937161800825275,1.2618595071429148, 6 ), 30, 3)
11
+ radius=ContRat(Exponential(0.5,1.2920296742201793, 3 ), 40, 3)
12
+ speed=ContRat(Exponential(0.15,1.0, 1 ), 50, 3)
13
+ roll_rate=ContRat(Exponential(0.15,1.0, 2 ), 40, 3)
14
14
  stallturn_speed=InsideBound(Exponential(0.08879139070041006,1.75647079736603, None ), [-2, 2])
15
15
  stallturn_width=InsideBound(Exponential(0.14798565116735013,1.75647079736603, None ), [-2, 2])
16
16
  spin_entry_length=InsideBound(Exponential(0.08879139070041006,1.75647079736603, None ), [-5, 5])
@@ -18,7 +18,7 @@ class F3AIntra:
18
18
  nose_drop_amount=OutsideBound(Exponential(20,1, None ), [-0.2617993877991494, 0.2617993877991494])
19
19
  recovery_length=MaxBound(Exponential(0.7,2.321928094887362, None ), 2)
20
20
  box=InsideBound(Exponential(76.39437268410977,1, None ), [-1.0471975511965976, 1.0471975511965976])
21
- depth=MaxBound(Exponential(0.02500000000000001,0.9999999999999999, 3 ), 170)
21
+ depth=MaxBound(Exponential(0.02500000000000001,0.9999999999999999, None ), 170)
22
22
  class F3AInter:
23
23
  radius=Comparison(Exponential(1.0,1.0, 2 ))
24
24
  speed=Comparison(Exponential(0.25,1.0000000000000002, 1 ))
@@ -28,6 +28,7 @@ class F3AInter:
28
28
 
29
29
 
30
30
 
31
+
31
32
  class F3A:
32
33
  inter = F3AInter
33
34
  intra = F3AIntra
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
  import numpy as np
3
3
  import numpy.typing as npt
4
- import pandas as pd
5
4
  from .. import Criteria
6
5
  from dataclasses import dataclass
7
6
  from flightanalysis.scoring import Measurement, Result
@@ -13,6 +12,9 @@ class Continuous(Criteria):
13
12
  only downgrades for increases (away from zero) of the value.
14
13
  treats each separate increase (peak - trough) as a new error.
15
14
  """
15
+ max_window: int = 40
16
+ window_ratio: int = 3
17
+
16
18
  @staticmethod
17
19
  def get_peak_locs(arr, rev=False):
18
20
  increasing = np.sign(np.diff(np.abs(arr)))>0
@@ -66,14 +68,15 @@ class Continuous(Criteria):
66
68
  _mean = np.mean(sample)
67
69
  sample = (sample - _mean) * window / max_window + _mean
68
70
  return sample
69
-
71
+
72
+
70
73
  class ContAbs(Continuous):
71
74
  def prepare(self, values: npt.NDArray, expected: float):
72
75
  sample = values - expected
73
76
  if len(sample) <= 8:
74
77
  return np.linspace(values[0],values[-1], len(sample))
75
78
  else:
76
- return Continuous.convolve_wind(values, 3, 40)
79
+ return Continuous.convolve_wind(values, self.window_ratio, self.max_window)
77
80
 
78
81
  @staticmethod
79
82
  def mistakes(data, peaks, troughs):
@@ -98,7 +101,7 @@ class ContRat(Continuous):
98
101
  len(values)
99
102
  ))
100
103
  else:
101
- return np.abs(Continuous.convolve_wind(values, 3, 40))
104
+ return np.abs(Continuous.convolve_wind(values, self.window_ratio, self.max_window))
102
105
 
103
106
  @staticmethod
104
107
  def mistakes(data, peaks, troughs):
@@ -4,7 +4,7 @@ from geometry import Point, Quaternion, PX, PY, PZ
4
4
  import numpy as np
5
5
  import pandas as pd
6
6
  import numpy.typing as npt
7
- from dataclasses import dataclass, field
7
+ from dataclasses import dataclass
8
8
  from typing import Union, Self
9
9
 
10
10
 
@@ -72,7 +72,7 @@ class Measurement:
72
72
  def _vector_vis(direction: Point, loc: Point) -> Union[Point, npt.NDArray]:
73
73
  #a vector error is more visible if it is perpendicular to the viewing vector
74
74
  # 0 to np.pi, pi/2 gives max, 0&np.pi give min
75
- return direction, (1 - 0.8* np.abs(Point.cos_angle_between(loc, direction))) * Measurement._pos_vis(loc)
75
+ return direction, (1 - 0.9* np.abs(Point.cos_angle_between(loc, direction))) * Measurement._pos_vis(loc)
76
76
 
77
77
  @staticmethod
78
78
  def _roll_vis(fl: State, tp: State) -> Union[Point, npt.NDArray]:
@@ -89,7 +89,7 @@ class Measurement:
89
89
  ao[np.abs(afl) > np.abs(atp)] = atp[np.abs(afl) > np.abs(atp)]
90
90
  ao[np.sign(azfl) != np.sign(aztp)] = 0 # wings have passed through the view vector
91
91
 
92
- rvis = (1-0.8*np.abs(ao))
92
+ rvis = (1-0.9*np.abs(ao))
93
93
 
94
94
  return fl.att.transform_point(PZ()), rvis * Measurement._pos_vis(fl.pos)
95
95
 
@@ -210,7 +210,7 @@ class ManoeuvreResults:
210
210
  intra=intra,
211
211
  inter=inter,
212
212
  positioning=positioning,
213
- total=10 - intra - inter - positioning
213
+ total=max(10 - intra - inter - positioning, 0)
214
214
  )
215
215
 
216
216
  def score(self, difficulty=3, truncate: bool=False):
@@ -40,15 +40,13 @@ def main():
40
40
  logger.info(f'Processing file {i} of {len(all_logs)} - {file}')
41
41
  data = load(open(file, 'r'))
42
42
 
43
- if 'analysis.json' not in file.name:
44
- sa = ScheduleAnalysis.from_fcj(data)
45
- else:
46
- sa = ScheduleAnalysis.from_fcscore(data)
43
+ sa = ScheduleAnalysis.from_fcj(data)
44
+
47
45
  logger.info(sa.sinfo)
48
46
  sa = sa.run_all()
49
47
 
50
- with open(outdir / f'{file.stem}_analysis.json', 'w') as f:
51
- dump(sa.to_fcscore(file.stem), f, indent=4, cls=NumpyEncoder)
48
+ with open(outdir / f'{file.stem}.json', 'w') as f:
49
+ dump(sa.append_scores_to_fcj(data), f, indent=4, cls=NumpyEncoder)
52
50
  logger.info(f'scores:\n{dumps(sa.scores(), indent=2)}')
53
51
  except Exception as e:
54
52
  logger.error(f'Error processing {file}: {e}')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flightanalysis
3
- Version: 0.2.15
3
+ Version: 0.2.16
4
4
  Summary: A package for analysing flight data
5
5
  Author-email: Thomas David <thomasdavid0@gmail.com>
6
6
  License: GNU GPL v3
@@ -15,8 +15,8 @@ Requires-Dist: fastdtw
15
15
  Requires-Dist: simplejson
16
16
  Requires-Dist: loguru
17
17
  Requires-Dist: joblib
18
- Requires-Dist: pfc-geometry>=0.2.6
19
- Requires-Dist: flightdata>=0.2.14
18
+ Requires-Dist: pfc-geometry>=0.2.7
19
+ Requires-Dist: flightdata>=0.2.15
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: numpy; extra == "dev"
22
22
  Requires-Dist: pandas; extra == "dev"
@@ -25,9 +25,9 @@ Requires-Dist: fastdtw; extra == "dev"
25
25
  Requires-Dist: simplejson; extra == "dev"
26
26
  Requires-Dist: loguru; extra == "dev"
27
27
  Requires-Dist: joblib; extra == "dev"
28
- Requires-Dist: pfc-geometry>=0.2.6; extra == "dev"
29
- Requires-Dist: flightdata>=0.2.14; extra == "dev"
30
- Requires-Dist: ardupilot_log_reader>=0.3.1; extra == "dev"
28
+ Requires-Dist: pfc-geometry>=0.2.7; extra == "dev"
29
+ Requires-Dist: flightdata>=0.2.15; extra == "dev"
30
+ Requires-Dist: ardupilot_log_reader>=0.3.3; extra == "dev"
31
31
  Requires-Dist: pymavlink; extra == "dev"
32
32
 
33
33
  # FlightAnalysis
@@ -11,9 +11,23 @@ examples/data/__init__.py
11
11
  examples/data/manual_F3A_F23_22_04_28_00000231.json
12
12
  examples/data/manual_F3A_P23_22_05_31_00000350.json
13
13
  examples/data/manual_F3A_P23_23_08_11_00000094.json
14
+ examples/schedule_construction/AMA_Intermediate2024.py
15
+ examples/schedule_construction/__init__.py
16
+ examples/schedule_construction/create_all.py
17
+ examples/schedule_construction/f3a_a25.py
18
+ examples/schedule_construction/f3a_f25.py
19
+ examples/schedule_construction/f3a_p23.py
20
+ examples/schedule_construction/f3a_p25.py
21
+ examples/schedule_construction/f3auk_clubman.py
22
+ examples/schedule_construction/f3auk_intermediate.py
23
+ examples/schedule_construction/imac_sport2024.py
24
+ examples/schedule_construction/imac_unlim2024.py
25
+ examples/schedule_construction/make_manoeuvre.py
26
+ examples/schedule_construction/nsrca_inter2024.py
14
27
  examples/scoring/__init__.py
15
28
  examples/scoring/f3a_criteria_maker.py
16
29
  examples/scoring/judging.py
30
+ examples/scoring/temp.py
17
31
  examples/scoring/manoeuvres/__init__.py
18
32
  examples/scoring/manoeuvres/inter_analysis.py
19
33
  examples/scoring/manoeuvres/intra_analysis.py
@@ -92,19 +106,6 @@ flightanalysis/scoring/criteria/intra/single.py
92
106
  flightanalysis/scripts/batch_analyse.py
93
107
  flightanalysis/scripts/collect_scores.py
94
108
  flightanalysis/scripts/plot_scores.py
95
- scripts/AMA_Intermediate2024.py
96
- scripts/__init__.py
97
- scripts/create_all.py
98
- scripts/f3a_a25.py
99
- scripts/f3a_f25.py
100
- scripts/f3a_p23.py
101
- scripts/f3a_p25.py
102
- scripts/f3auk_clubman.py
103
- scripts/f3auk_intermediate.py
104
- scripts/imac_sport2024.py
105
- scripts/imac_unlim2024.py
106
- scripts/make_manoeuvre.py
107
- scripts/nsrca_inter2024.py
108
109
  tests/EmailedBox.f3a
109
110
  tests/__init__.py
110
111
  tests/conftest.py
@@ -5,8 +5,8 @@ fastdtw
5
5
  simplejson
6
6
  loguru
7
7
  joblib
8
- pfc-geometry>=0.2.6
9
- flightdata>=0.2.14
8
+ pfc-geometry>=0.2.7
9
+ flightdata>=0.2.15
10
10
 
11
11
  [dev]
12
12
  numpy
@@ -16,7 +16,7 @@ fastdtw
16
16
  simplejson
17
17
  loguru
18
18
  joblib
19
- pfc-geometry>=0.2.6
20
- flightdata>=0.2.14
21
- ardupilot_log_reader>=0.3.1
19
+ pfc-geometry>=0.2.7
20
+ flightdata>=0.2.15
21
+ ardupilot_log_reader>=0.3.3
22
22
  pymavlink
@@ -0,0 +1,11 @@
1
+ numpy
2
+ pandas
3
+ scipy
4
+ fastdtw
5
+ simplejson
6
+ loguru
7
+ joblib
8
+ pfc-geometry>=0.2.7
9
+ flightdata>=0.2.15
10
+ ardupilot_log_reader>=0.3.3
11
+ pymavlink
@@ -5,5 +5,5 @@ fastdtw
5
5
  simplejson
6
6
  loguru
7
7
  joblib
8
- pfc-geometry>=0.2.6
9
- flightdata>=0.2.14
8
+ pfc-geometry>=0.2.7
9
+ flightdata>=0.2.15
@@ -1,11 +0,0 @@
1
- numpy
2
- pandas
3
- scipy
4
- fastdtw
5
- simplejson
6
- loguru
7
- joblib
8
- pfc-geometry>=0.2.6
9
- flightdata>=0.2.14
10
- ardupilot_log_reader>=0.3.1
11
- pymavlink
File without changes