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.
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/PKG-INFO +3 -3
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/sch_analysis.py +5 -4
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/manparm.py +1 -2
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/continuous.py +13 -8
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scripts/batch_analyse.py +5 -1
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scripts/collect_scores.py +6 -1
- flightanalysis-0.2.12/flightanalysis/scripts/plot_scores.py +46 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/PKG-INFO +3 -3
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/SOURCES.txt +1 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/entry_points.txt +1 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/requires.txt +2 -2
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/pyproject.toml +1 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/requirements-dev.txt +1 -1
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/requirements.txt +1 -1
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/.github/workflows/publish_pypi.yml +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/.gitignore +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/LICENSE +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/MANIFEST.in +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/README.md +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/f3a_criteria_maker.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/judging.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/inter_analysis.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/intra_analysis.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/mans/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/mans/extract_mans.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/mans/tHat.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/positioning_analysis.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/temp.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/el_analysis.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/alignment.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/analysis.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/basic.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/complete.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/scored.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/IMAC_Unlimited2024_schedule.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3a_a25_schedule.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3a_f25_schedule.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3a_p23_schedule.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3a_p25_schedule.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3auk_clubman_schedule.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3auk_inter_schedule.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/elbuilders.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/lines.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/manbuilder.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/collectors.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/eldef.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/mandef.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/maninfo.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/manoption.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/funopp.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/itemopp.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/mathopp.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/operation.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/scheddef.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/scheduleinfo.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/autorotation.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/element.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/line.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/loop.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/nose_drop.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/pitch_break.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/recovery.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/elements/stall_turn.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/manoeuvre.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/schedule.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/criteria.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/exponential.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/f3a_criteria.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/combination.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/comparison.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/bounded.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/single.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/downgrade.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/measurement.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/results.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/dependency_links.txt +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/top_level.txt +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/AMA_Intermediate2024.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/create_all.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3a_a25.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3a_f25.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3a_p23.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3a_p25.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3auk_Intermediate.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/f3auk_clubman.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/imac_sport2024.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/imac_unlim2024.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/make_manoeuvre.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/scripts/nsrca_inter2024.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/setup.cfg +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/EmailedBox.f3a +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/conftest.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/manual_F3A_P23.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/p23.BIN +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/p23_box.f3a +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/p23_fc.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/data/p23_flight.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_criiteria.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_data.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_definition_eldef.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_definition_manparm.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_definition_mpopp.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_schedule_definition.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/test_schedule_definition_maninfo.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/__init__.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/loop_analysis.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/p23_th_e0.csv +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/p23_th_e0.json +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/p23_th_e0_template.csv +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_line.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_loop.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_nose_drop.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_pitch_break.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_recovery.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_schedule_element_stallturn.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/test_split_optimiser.py +0 -0
- {flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_measurement.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
)
|
|
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()))
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/continuous.py
RENAMED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
@@ -6,7 +6,7 @@ simplejson
|
|
|
6
6
|
loguru
|
|
7
7
|
joblib
|
|
8
8
|
pfc-geometry>=0.2.6
|
|
9
|
-
flightdata>=0.2.
|
|
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.
|
|
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"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_F23_22_04_28_00000231.json
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_P23_22_05_31_00000350.json
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/data/manual_F3A_P23_23_08_11_00000094.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/inter_analysis.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/intra_analysis.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/mans/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/mans/extract_mans.py
RENAMED
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/examples/scoring/manoeuvres/positioning_analysis.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/basic.py
RENAMED
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/analysis/manoeuvre_analysis/scored.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/IMAC_Unlimited2024_schedule.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3auk_clubman_schedule.json
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/data/f3auk_inter_schedule.json
RENAMED
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/elbuilders.py
RENAMED
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/builders/manbuilder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/funopp.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/itemopp.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/mathopp.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/definition/operations/operation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/exponential.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/f3a_criteria.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/combination.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/inter/comparison.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/bounded.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis/scoring/criteria/intra/single.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/flightanalysis.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_definition/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/loop_analysis.json
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/p23_th_e0.csv
RENAMED
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_element/p23_th_e0.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.11 → flightanalysis-0.2.12}/tests/test_schedule/test_schedule_manoeuvre.py
RENAMED
|
File without changes
|