flightanalysis 0.2.11__tar.gz → 0.2.12__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.11 → flightanalysis-0.2.12}/PKG-INFO +3 -3
  2. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/sch_analysis.py +5 -4
  3. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/manparm.py +1 -2
  4. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/continuous.py +13 -8
  5. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scripts/batch_analyse.py +5 -1
  6. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scripts/collect_scores.py +6 -1
  7. flightanalysis-0.2.12/flightanalysis/scripts/plot_scores.py +46 -0
  8. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/PKG-INFO +3 -3
  9. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/SOURCES.txt +1 -0
  10. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/entry_points.txt +1 -0
  11. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/requires.txt +2 -2
  12. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/pyproject.toml +1 -0
  13. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/requirements-dev.txt +1 -1
  14. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/requirements.txt +1 -1
  15. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/.github/workflows/publish_pypi.yml +0 -0
  16. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/.gitignore +0 -0
  17. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/LICENSE +0 -0
  18. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/MANIFEST.in +0 -0
  19. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/README.md +0 -0
  20. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/__init__.py +0 -0
  21. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/__init__.py +0 -0
  22. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
  23. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
  24. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
  25. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/__init__.py +0 -0
  26. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/f3a_criteria_maker.py +0 -0
  27. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/judging.py +0 -0
  28. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/__init__.py +0 -0
  29. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/inter_analysis.py +0 -0
  30. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/intra_analysis.py +0 -0
  31. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/mans/__init__.py +0 -0
  32. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/mans/extract_mans.py +0 -0
  33. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/mans/tHat.json +0 -0
  34. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/positioning_analysis.py +0 -0
  35. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/temp.py +0 -0
  36. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/__init__.py +0 -0
  37. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/__init__.py +0 -0
  38. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/el_analysis.py +0 -0
  39. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/__init__.py +0 -0
  40. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/alignment.py +0 -0
  41. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/analysis.py +0 -0
  42. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/basic.py +0 -0
  43. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/complete.py +0 -0
  44. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/scored.py +0 -0
  45. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/IMAC_Unlimited2024_schedule.json +0 -0
  46. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/__init__.py +0 -0
  47. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3a_a25_schedule.json +0 -0
  48. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3a_f25_schedule.json +0 -0
  49. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3a_p23_schedule.json +0 -0
  50. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3a_p25_schedule.json +0 -0
  51. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3auk_clubman_schedule.json +0 -0
  52. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3auk_inter_schedule.json +0 -0
  53. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/__init__.py +0 -0
  54. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/__init__.py +0 -0
  55. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/elbuilders.py +0 -0
  56. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/lines.py +0 -0
  57. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/manbuilder.py +0 -0
  58. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/collectors.py +0 -0
  59. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/eldef.py +0 -0
  60. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/mandef.py +0 -0
  61. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/maninfo.py +0 -0
  62. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/manoption.py +0 -0
  63. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/__init__.py +0 -0
  64. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/funopp.py +0 -0
  65. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/itemopp.py +0 -0
  66. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/mathopp.py +0 -0
  67. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/operation.py +0 -0
  68. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/scheddef.py +0 -0
  69. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/scheduleinfo.py +0 -0
  70. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/__init__.py +0 -0
  71. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/autorotation.py +0 -0
  72. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/element.py +0 -0
  73. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/line.py +0 -0
  74. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/loop.py +0 -0
  75. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/nose_drop.py +0 -0
  76. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/pitch_break.py +0 -0
  77. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/recovery.py +0 -0
  78. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/stall_turn.py +0 -0
  79. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/manoeuvre.py +0 -0
  80. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/schedule.py +0 -0
  81. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/__init__.py +0 -0
  82. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/__init__.py +0 -0
  83. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/criteria.py +0 -0
  84. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/exponential.py +0 -0
  85. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/f3a_criteria.py +0 -0
  86. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
  87. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/combination.py +0 -0
  88. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/comparison.py +0 -0
  89. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
  90. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/bounded.py +0 -0
  91. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/single.py +0 -0
  92. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/downgrade.py +0 -0
  93. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/measurement.py +0 -0
  94. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/results.py +0 -0
  95. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/dependency_links.txt +0 -0
  96. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/top_level.txt +0 -0
  97. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/AMA_Intermediate2024.py +0 -0
  98. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/__init__.py +0 -0
  99. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/create_all.py +0 -0
  100. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3a_a25.py +0 -0
  101. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3a_f25.py +0 -0
  102. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3a_p23.py +0 -0
  103. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3a_p25.py +0 -0
  104. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3auk_Intermediate.py +0 -0
  105. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3auk_clubman.py +0 -0
  106. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/imac_sport2024.py +0 -0
  107. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/imac_unlim2024.py +0 -0
  108. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/make_manoeuvre.py +0 -0
  109. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/nsrca_inter2024.py +0 -0
  110. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/setup.cfg +0 -0
  111. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/EmailedBox.f3a +0 -0
  112. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/__init__.py +0 -0
  113. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/conftest.py +0 -0
  114. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/manual_F3A_P23.json +0 -0
  115. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/p23.BIN +0 -0
  116. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/p23_box.f3a +0 -0
  117. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/p23_fc.json +0 -0
  118. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/p23_flight.json +0 -0
  119. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_criiteria.py +0 -0
  120. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_data.py +0 -0
  121. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/__init__.py +0 -0
  122. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/__init__.py +0 -0
  123. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_definition_eldef.py +0 -0
  124. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_definition_manparm.py +0 -0
  125. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_definition_mpopp.py +0 -0
  126. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_schedule_definition.py +0 -0
  127. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_schedule_definition_maninfo.py +0 -0
  128. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/__init__.py +0 -0
  129. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/loop_analysis.json +0 -0
  130. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/p23_th_e0.csv +0 -0
  131. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/p23_th_e0.json +0 -0
  132. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/p23_th_e0_template.csv +0 -0
  133. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element.py +0 -0
  134. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_line.py +0 -0
  135. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_loop.py +0 -0
  136. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_nose_drop.py +0 -0
  137. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_pitch_break.py +0 -0
  138. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_recovery.py +0 -0
  139. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_stallturn.py +0 -0
  140. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_split_optimiser.py +0 -0
  141. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_measurement.py +0 -0
  142. {flightanalysis-0.2.11 → flightanalysis-0.2.12}/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.11
3
+ Version: 0.2.12
4
4
  Summary: A package for analysing flight data
5
5
  Author-email: Thomas David <thomasdavid0@gmail.com>
6
6
  License: GNU GPL v3
@@ -16,7 +16,7 @@ Requires-Dist: simplejson
16
16
  Requires-Dist: loguru
17
17
  Requires-Dist: joblib
18
18
  Requires-Dist: pfc-geometry>=0.2.6
19
- Requires-Dist: flightdata>=0.2.10
19
+ Requires-Dist: flightdata>=0.2.11
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: numpy; extra == "dev"
22
22
  Requires-Dist: pandas; extra == "dev"
@@ -26,7 +26,7 @@ Requires-Dist: simplejson; extra == "dev"
26
26
  Requires-Dist: loguru; extra == "dev"
27
27
  Requires-Dist: joblib; extra == "dev"
28
28
  Requires-Dist: pfc-geometry>=0.2.6; extra == "dev"
29
- Requires-Dist: flightdata>=0.2.10; extra == "dev"
29
+ Requires-Dist: flightdata>=0.2.11; extra == "dev"
30
30
  Requires-Dist: ardupilot_log_reader>=0.3.1; extra == "dev"
31
31
  Requires-Dist: pymavlink; extra == "dev"
32
32
 
@@ -9,6 +9,7 @@ from joblib import Parallel, delayed
9
9
  import os
10
10
  import pandas as pd
11
11
  from importlib.metadata import version
12
+ import geometry as g
12
13
 
13
14
 
14
15
  class ScheduleAnalysis(Collection):
@@ -26,16 +27,16 @@ class ScheduleAnalysis(Collection):
26
27
  else:
27
28
  data = file
28
29
  flight = Flight.from_fc_json(data)
29
- box = Origin.from_fcjson_parmameters(data["parameters"])
30
+
30
31
  if info is None:
31
32
  info = ScheduleInfo.from_str(data["parameters"]["schedule"][1])
33
+
32
34
  sdef = SchedDef.load(info)
33
-
35
+ box = Origin.from_fcjson_parmameters(data["parameters"])
34
36
  state = State.from_flight(flight, box).splitter_labels(
35
37
  data["mans"],
36
38
  sdef.uids
37
- )#.move(g.Transformation(g.Point(-data['parameters']['moveEast'], -data['parameters']['moveNorth'], 0)))
38
-
39
+ )
39
40
  direction = -state.get_manoeuvre(1)[0].direction()[0]
40
41
 
41
42
  return ScheduleAnalysis(
@@ -70,7 +70,6 @@ class ManParm(Opp):
70
70
 
71
71
  return Point.concatenate([Point.concatenate([v[0] for v in vi]).mean() for vi in vis ]), [np.mean([v[1]for v in vi]) for vi in vis]
72
72
 
73
-
74
73
  def get_downgrades(self, els, state: State):
75
74
  coll = self.collect(els)
76
75
  values = list(coll.values())
@@ -80,7 +79,7 @@ class ManParm(Opp):
80
79
  values,
81
80
  self.defaul,
82
81
  direction,
83
- vis
82
+ [vis[0]] + [min(va, vb) for va, vb in zip(vis[:-1], vis[1:])]
84
83
  )
85
84
 
86
85
  keys, errors, dgs = self.criteria(list(coll.keys()), list(coll.values()))
@@ -58,17 +58,23 @@ class Continuous(Criteria):
58
58
  outd[:ldf] = np.linspace(np.mean(data[:ldf]), conv[0],ldf+1)[:-1]
59
59
  outd[-ldc:] = np.linspace(conv[-1], np.mean(data[-ldc:]), ldc+1)[1:]
60
60
  return outd
61
-
62
-
61
+
62
+ @staticmethod
63
+ def convolve_wind(data, window_ratio, max_window):
64
+ window = min(len(data)//window_ratio, max_window)
65
+ sample = Continuous.convolve(data, window)
66
+ _mean = np.mean(sample)
67
+ sample = (sample - _mean) * window / max_window + _mean
68
+ return sample
69
+
63
70
  class ContAbs(Continuous):
64
71
  def prepare(self, values: npt.NDArray, expected: float):
65
- # window = 30
66
72
  sample = values - expected
67
73
  if len(sample) <= 8:
68
74
  return np.linspace(values[0],values[-1], len(sample))
69
75
  else:
70
- return Continuous.convolve(sample, min(len(values)//3, 40))
71
-
76
+ return Continuous.convolve_wind(values, 3, 40)
77
+
72
78
  @staticmethod
73
79
  def mistakes(data, peaks, troughs):
74
80
  '''All increases away from zero are downgraded (only peaks)'''
@@ -85,7 +91,6 @@ class ContAbs(Continuous):
85
91
  class ContRat(Continuous):
86
92
 
87
93
  def prepare(self, values: npt.NDArray, expected: float):
88
- #window = 40
89
94
  if len(values) <= 8:
90
95
  return np.abs(np.linspace(
91
96
  np.mean(values[:1+len(values)//3]),
@@ -93,8 +98,8 @@ class ContRat(Continuous):
93
98
  len(values)
94
99
  ))
95
100
  else:
96
- return np.abs(Continuous.convolve(values, min(len(values)//3, 40)))
97
-
101
+ return np.abs(Continuous.convolve_wind(values, 3, 40))
102
+
98
103
  @staticmethod
99
104
  def mistakes(data, peaks, troughs):
100
105
  '''All changes are downgraded (peaks and troughs)'''
@@ -51,4 +51,8 @@ def main():
51
51
  dump(sa.to_fcscore(file.stem), f, indent=4, cls=NumpyEncoder)
52
52
  logger.info(f'scores:\n{dumps(sa.scores(), indent=2)}')
53
53
  except Exception as e:
54
- logger.error(f'Error processing {file}: {e}')
54
+ logger.error(f'Error processing {file}: {e}')
55
+
56
+
57
+ if __name__ == '__main__':
58
+ main()
@@ -5,7 +5,7 @@ import argparse
5
5
  import pandas as pd
6
6
  from flightanalysis import ScheduleAnalysis
7
7
  from datetime import datetime
8
-
8
+ from flightanalysis.scripts.plot_scores import plot_logs
9
9
 
10
10
  def main():
11
11
  logger.remove()
@@ -46,3 +46,8 @@ def main():
46
46
 
47
47
  res.to_csv(args.outfile.replace('_scores.csv', f'_{sch}_scores.csv'))
48
48
 
49
+ plot_logs([args.outfile.replace('_scores.csv', f'_{sch}_scores.csv') for sch in dfs.keys()])
50
+
51
+
52
+ if __name__ == "__main__":
53
+ main()
@@ -0,0 +1,46 @@
1
+ import pandas as pd
2
+ from pathlib import Path
3
+ import plotly.express as px
4
+ import re
5
+ from datetime import date
6
+ from plotly_templates.aiaa import aiaa_template
7
+ import argparse
8
+
9
+
10
+ def parse_name(file):
11
+ data = re.findall(r"\w\d\d_\d\d_\d\d_\d\d+_\S+_",file)[0].split('_')
12
+ return data[0], date(int(data[1]) + 2000, int(data[2]), int(data[3])) , data[4]
13
+
14
+ def plot_logs(files):
15
+
16
+ data = pd.concat([pd.read_csv(file).assign(csv=file) for file in files], axis=0).reset_index(drop=True)
17
+ index_df = pd.DataFrame(list(data.source_file.apply(parse_name)), columns=['schedule', 'date', 'name'])
18
+
19
+ data = pd.concat([
20
+ index_df,
21
+ data], axis=1)
22
+ px.scatter(
23
+ data,
24
+ x='date',
25
+ y='total',
26
+ color = 'csv',
27
+ ).update_layout(
28
+ template=aiaa_template,
29
+ yaxis=dict(range=(0,500), title='Total Score'),
30
+ xaxis=dict(title='date'),
31
+ title=f'Scores from a Set of {data.schedule.unique()} Flights',
32
+ width=1000, height=600
33
+ ).update_traces(
34
+ marker=dict(size=10)
35
+ ).show()
36
+
37
+ def main():
38
+ parser = argparse.ArgumentParser(description='Collect scores for all analysis jsons in a directory')
39
+ parser.add_argument('-f', '--files', default=list(Path('.').glob('*.csv')), help='Source files, defaults to None for all csvs in current directory')
40
+ args = parser.parse_args()
41
+
42
+ return plot_logs(args.files)
43
+
44
+
45
+ if __name__ == "__main__":
46
+ main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flightanalysis
3
- Version: 0.2.11
3
+ Version: 0.2.12
4
4
  Summary: A package for analysing flight data
5
5
  Author-email: Thomas David <thomasdavid0@gmail.com>
6
6
  License: GNU GPL v3
@@ -16,7 +16,7 @@ Requires-Dist: simplejson
16
16
  Requires-Dist: loguru
17
17
  Requires-Dist: joblib
18
18
  Requires-Dist: pfc-geometry>=0.2.6
19
- Requires-Dist: flightdata>=0.2.10
19
+ Requires-Dist: flightdata>=0.2.11
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: numpy; extra == "dev"
22
22
  Requires-Dist: pandas; extra == "dev"
@@ -26,7 +26,7 @@ Requires-Dist: simplejson; extra == "dev"
26
26
  Requires-Dist: loguru; extra == "dev"
27
27
  Requires-Dist: joblib; extra == "dev"
28
28
  Requires-Dist: pfc-geometry>=0.2.6; extra == "dev"
29
- Requires-Dist: flightdata>=0.2.10; extra == "dev"
29
+ Requires-Dist: flightdata>=0.2.11; extra == "dev"
30
30
  Requires-Dist: ardupilot_log_reader>=0.3.1; extra == "dev"
31
31
  Requires-Dist: pymavlink; extra == "dev"
32
32
 
@@ -92,6 +92,7 @@ flightanalysis/scoring/criteria/intra/continuous.py
92
92
  flightanalysis/scoring/criteria/intra/single.py
93
93
  flightanalysis/scripts/batch_analyse.py
94
94
  flightanalysis/scripts/collect_scores.py
95
+ flightanalysis/scripts/plot_scores.py
95
96
  scripts/AMA_Intermediate2024.py
96
97
  scripts/__init__.py
97
98
  scripts/create_all.py
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
2
  batch_analyse = flightanalysis.scripts.batch_analyse:main
3
3
  collect_scores = flightanalysis.scripts.collect_scores:main
4
+ plot_scores = flightanalysis.scripts.plot_scores:main
@@ -6,7 +6,7 @@ simplejson
6
6
  loguru
7
7
  joblib
8
8
  pfc-geometry>=0.2.6
9
- flightdata>=0.2.10
9
+ flightdata>=0.2.11
10
10
 
11
11
  [dev]
12
12
  numpy
@@ -17,6 +17,6 @@ simplejson
17
17
  loguru
18
18
  joblib
19
19
  pfc-geometry>=0.2.6
20
- flightdata>=0.2.10
20
+ flightdata>=0.2.11
21
21
  ardupilot_log_reader>=0.3.1
22
22
  pymavlink
@@ -18,6 +18,7 @@ dynamic = ["version", "dependencies", "optional-dependencies"]
18
18
  [project.scripts]
19
19
  batch_analyse = "flightanalysis.scripts.batch_analyse:main"
20
20
  collect_scores = "flightanalysis.scripts.collect_scores:main"
21
+ plot_scores = "flightanalysis.scripts.plot_scores:main"
21
22
 
22
23
  [tool.setuptools.dynamic]
23
24
  dependencies = {file = ["requirements.txt"]}
@@ -6,6 +6,6 @@ simplejson
6
6
  loguru
7
7
  joblib
8
8
  pfc-geometry>=0.2.6
9
- flightdata>=0.2.10
9
+ flightdata>=0.2.11
10
10
  ardupilot_log_reader>=0.3.1
11
11
  pymavlink
@@ -6,4 +6,4 @@ simplejson
6
6
  loguru
7
7
  joblib
8
8
  pfc-geometry>=0.2.6
9
- flightdata>=0.2.10
9
+ flightdata>=0.2.11
File without changes