flightdata 0.2.22__tar.gz → 0.2.24__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 (93) hide show
  1. flightdata-0.2.24/.github/workflows/publish_pypi.yml +26 -0
  2. {flightdata-0.2.22 → flightdata-0.2.24}/.vscode/settings.json +0 -1
  3. {flightdata-0.2.22/flightdata.egg-info → flightdata-0.2.24}/PKG-INFO +7 -19
  4. flightdata-0.2.24/pyproject.toml +23 -0
  5. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/base/__init__.py +6 -1
  6. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/base/collection.py +8 -5
  7. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/base/table.py +1 -1
  8. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/flight/flight.py +2 -2
  9. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/origin.py +6 -2
  10. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/schemas/fcj.py +1 -1
  11. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/state.py +7 -7
  12. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_bindata.py +3 -3
  13. flightdata-0.2.24/test/test_state/__init__.py +0 -0
  14. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_state/test_state_builders.py +1 -1
  15. flightdata-0.2.24/uv.lock +301 -0
  16. flightdata-0.2.22/.github/workflows/publish_pypi.yml +0 -53
  17. flightdata-0.2.22/PKG-INFO +0 -50
  18. flightdata-0.2.22/flightdata.egg-info/SOURCES.txt +0 -87
  19. flightdata-0.2.22/flightdata.egg-info/dependency_links.txt +0 -1
  20. flightdata-0.2.22/flightdata.egg-info/entry_points.txt +0 -3
  21. flightdata-0.2.22/flightdata.egg-info/requires.txt +0 -13
  22. flightdata-0.2.22/flightdata.egg-info/top_level.txt +0 -1
  23. flightdata-0.2.22/pyproject.toml +0 -26
  24. flightdata-0.2.22/requirements-dev.txt +0 -6
  25. flightdata-0.2.22/requirements.txt +0 -5
  26. flightdata-0.2.22/setup.cfg +0 -4
  27. {flightdata-0.2.22 → flightdata-0.2.24}/.gitignore +0 -0
  28. {flightdata-0.2.22 → flightdata-0.2.24}/.vscode/launch.json +0 -0
  29. {flightdata-0.2.22 → flightdata-0.2.24}/LICENSE +0 -0
  30. {flightdata-0.2.22 → flightdata-0.2.24}/README.md +0 -0
  31. {flightdata-0.2.22 → flightdata-0.2.24}/examples/__init__.py +0 -0
  32. {flightdata-0.2.22 → flightdata-0.2.24}/examples/data/__init__.py +0 -0
  33. {flightdata-0.2.22 → flightdata-0.2.24}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
  34. {flightdata-0.2.22 → flightdata-0.2.24}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
  35. {flightdata-0.2.22 → flightdata-0.2.24}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
  36. {flightdata-0.2.22 → flightdata-0.2.24}/examples/flight_dynamics/00000150.json +0 -0
  37. {flightdata-0.2.22 → flightdata-0.2.24}/examples/flight_dynamics/__init__.py +0 -0
  38. {flightdata-0.2.22 → flightdata-0.2.24}/examples/flight_dynamics/box.f3a +0 -0
  39. {flightdata-0.2.22 → flightdata-0.2.24}/examples/flight_dynamics/param_id.py +0 -0
  40. {flightdata-0.2.22 → flightdata-0.2.24}/examples/state_analysis/__init__.py +0 -0
  41. {flightdata-0.2.22 → flightdata-0.2.24}/examples/state_analysis/axes.py +0 -0
  42. {flightdata-0.2.22 → flightdata-0.2.24}/examples/state_analysis/state_fill_plot.py +0 -0
  43. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/__init__.py +0 -0
  44. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/base/constructs.py +0 -0
  45. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/base/labeling.py +0 -0
  46. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/base/numpy_encoder.py +0 -0
  47. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/bindata.py +0 -0
  48. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/coefficients.py +0 -0
  49. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/environment/__init__.py +0 -0
  50. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/environment/environment.py +0 -0
  51. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/environment/wind.py +0 -0
  52. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/flight/__init__.py +0 -0
  53. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/flight/ardupilot.py +0 -0
  54. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/flight/fields.py +0 -0
  55. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/flight/parameters.py +0 -0
  56. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/flow.py +0 -0
  57. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/model/__init__.py +0 -0
  58. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/model/aerodynamic.py +0 -0
  59. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/model/thrust.py +0 -0
  60. /flightdata-0.2.22/flightdata/schemas/__init__.py → /flightdata-0.2.24/src/flightdata/py.typed +0 -0
  61. {flightdata-0.2.22/test → flightdata-0.2.24/src/flightdata/schemas}/__init__.py +0 -0
  62. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/scripts/collect_logs.py +0 -0
  63. {flightdata-0.2.22 → flightdata-0.2.24/src}/flightdata/scripts/flightline.py +0 -0
  64. {flightdata-0.2.22 → flightdata-0.2.24}/test/EmailedBox.f3a +0 -0
  65. {flightdata-0.2.22/test/base → flightdata-0.2.24/test}/__init__.py +0 -0
  66. {flightdata-0.2.22/test/test_environment → flightdata-0.2.24/test/base}/__init__.py +0 -0
  67. {flightdata-0.2.22 → flightdata-0.2.24}/test/base/test_base_constructs.py +0 -0
  68. {flightdata-0.2.22 → flightdata-0.2.24}/test/base/test_table.py +0 -0
  69. {flightdata-0.2.22 → flightdata-0.2.24}/test/conftest.py +0 -0
  70. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/bin_parser_GPS.csv +0 -0
  71. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/bin_parser_POS.csv +0 -0
  72. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/make_inputs.py +0 -0
  73. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/manual_F3A_P23.json +0 -0
  74. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/p23.BIN +0 -0
  75. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/p23.json +0 -0
  76. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/p23_box.f3a +0 -0
  77. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/p23_fc.json +0 -0
  78. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/p23_flight.json +0 -0
  79. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/vtol_hover.bin +0 -0
  80. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/vtol_hover.json +0 -0
  81. {flightdata-0.2.22 → flightdata-0.2.24}/test/data/web_bin_parse.json +0 -0
  82. {flightdata-0.2.22/test/test_model → flightdata-0.2.24/test/test_environment}/__init__.py +0 -0
  83. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_environment/test_environment.py +0 -0
  84. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_environment/test_environment_wind.py +0 -0
  85. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_fields.py +0 -0
  86. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_flight.py +0 -0
  87. {flightdata-0.2.22/test/test_state → flightdata-0.2.24/test/test_model}/__init__.py +0 -0
  88. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_model/test_model_coefficients.py +0 -0
  89. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_model/test_model_flow.py +0 -0
  90. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_origin.py +0 -0
  91. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_state/test_state.py +0 -0
  92. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_state/test_state_conversions.py +0 -0
  93. {flightdata-0.2.22 → flightdata-0.2.24}/test/test_state/test_state_measurements.py +0 -0
@@ -0,0 +1,26 @@
1
+ name: Publish to PyPI and TestPyPI
2
+ on:
3
+ push:
4
+ branches:
5
+ - 'main'
6
+ jobs:
7
+ build:
8
+ name: Build and publish distribution
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout repo
12
+ uses: actions/checkout@v4
13
+
14
+ - name: Install uv
15
+ uses: astral-sh/setup-uv@v3
16
+ with:
17
+ enable-cache: true
18
+ cache-dependency-glob: uv.lock
19
+ - name: Set up Python
20
+ run: uv python install 3.12
21
+
22
+ - name: Build
23
+ run: uv build
24
+
25
+ - name: Publish to PyPI
26
+ run: uv publish -t ${{ secrets.PYPI_TOKEN }}
@@ -1,5 +1,4 @@
1
1
  {
2
- "python.pythonPath": "/home/tom/miniconda3/envs/flightdatadev/bin/python",
3
2
  "python.testing.unittestArgs": [
4
3
  "-v",
5
4
  "-s",
@@ -1,25 +1,13 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: flightdata
3
- Version: 0.2.22
4
- Summary: Module for handling UAV flight log data
3
+ Version: 0.2.24
4
+ Summary: Python tools for handling flight data
5
5
  Author-email: Thomas David <thomasdavid0@gmail.com>
6
- License: GNU GPL v3
7
- Classifier: Programming Language :: Python :: 3
8
6
  Requires-Python: >=3.12
7
+ Requires-Dist: numpy>=2.1.3
8
+ Requires-Dist: pandas>=2.2.3
9
+ Requires-Dist: pfc-geometry>=0.2.13
9
10
  Description-Content-Type: text/markdown
10
- License-File: LICENSE
11
- Requires-Dist: numpy
12
- Requires-Dist: pandas
13
- Requires-Dist: simplejson
14
- Requires-Dist: pfc-geometry>=0.2.12
15
- Requires-Dist: json_stream
16
- Provides-Extra: dev
17
- Requires-Dist: numpy; extra == "dev"
18
- Requires-Dist: pandas; extra == "dev"
19
- Requires-Dist: simplejson; extra == "dev"
20
- Requires-Dist: pfc-geometry>=0.2.12; extra == "dev"
21
- Requires-Dist: ardupilot-log-reader>=0.3.3; extra == "dev"
22
- Requires-Dist: pytest; extra == "dev"
23
11
 
24
12
  ## FlightData
25
13
  This repo is contains a set of datastructures and tools for handling flight log data.
@@ -47,4 +35,4 @@ pip install pfc-geometry
47
35
 
48
36
  ```bash
49
37
  pip install .
50
- ```
38
+ ```
@@ -0,0 +1,23 @@
1
+ [project]
2
+ name = "flightdata"
3
+ version = "v0.2.24"
4
+ description = "Python tools for handling flight data"
5
+ readme = "README.md"
6
+ authors = [{ name = "Thomas David", email = "thomasdavid0@gmail.com" }]
7
+ requires-python = ">=3.12"
8
+ dependencies = [
9
+ "numpy>=2.1.3",
10
+ "pandas>=2.2.3",
11
+ "pfc-geometry>=0.2.13",
12
+ ]
13
+
14
+ [build-system]
15
+ requires = ["hatchling"]
16
+ build-backend = "hatchling.build"
17
+
18
+ [tool.uv.sources]
19
+ pfc-geometry = { path = "../geometry" , editable = true }
20
+ ardupilot_log_reader = { path = "../ArdupilotLogReader" , editable = true }
21
+
22
+ [dependency-groups]
23
+ dev = ["ardupilot_log_reader>=0.3.5", "pymavlink>=2.4.42", "pytest>=8.3.3"]
@@ -1,9 +1,14 @@
1
1
  from .table import Table, Constructs, SVar
2
2
  from .collection import Collection
3
3
  from .numpy_encoder import NumpyEncoder
4
+ from numbers import Number
4
5
 
5
6
  def to_list(obj):
6
- if hasattr(obj, 'tolist'):
7
+ if obj is None:
8
+ return []
9
+ elif hasattr(obj, 'tolist'):
7
10
  return obj.tolist()
11
+ elif obj is None:
12
+ return None
8
13
  else:
9
14
  return list(obj)
@@ -66,7 +66,7 @@ class Collection:
66
66
  def from_dict(cls, vals: dict[str, dict[str, Any]]) -> Self:
67
67
  return cls([cls.VType.from_dict(v) for v in vals.values()])
68
68
 
69
- def add(self, v: Union[T, Self], inplace=True) -> Self:
69
+ def add(self, v: T | Self, inplace=True) -> Self:
70
70
  odata = self.data.copy()
71
71
  if isinstance(v, self.VType):
72
72
  odata[getattr(v, self.uid)] = v
@@ -86,12 +86,15 @@ class Collection:
86
86
  coll.add(v)
87
87
  return coll
88
88
 
89
- def add_start(self, v: Union[T, Self]) -> Self:
89
+ def add_start(self, v: T | Self, inplace=True) -> Self:
90
+ ocol = self.copy() if not inplace else self
90
91
  if isinstance(v, self.VType):
91
- self.data.update({getattr(v, self.uid): v})
92
+ ocol.data.update({getattr(v, ocol.uid): v})
92
93
  elif isinstance(v, self.__class__):
93
- self.data = dict(**v.data, **self.data)
94
- return v
94
+ ocol.data = dict(**v.data, **ocol.data)
95
+ else:
96
+ raise TypeError(f"Expected a {self.__class__.__name__} or a {self.VType}")
97
+ return ocol
95
98
 
96
99
  def next_free_name(self, prefix: str) -> str:
97
100
  i=0
@@ -52,7 +52,7 @@ class Table:
52
52
  raise AttributeError(f"Unknown column or construct {name}")
53
53
 
54
54
  def to_csv(self, filename):
55
- self.data.to_csv(filename)
55
+ self.data.to_csv(filename, index=False)
56
56
  return filename
57
57
 
58
58
  def to_dict(self):
@@ -16,7 +16,7 @@ import numpy as np
16
16
  import pandas as pd
17
17
  from .fields import fields, Field
18
18
  from geometry import GPS, Point, P0
19
- from geometry.testing import assert_almost_equal
19
+ from geometry.checks import assert_almost_equal
20
20
  from time import time
21
21
  from json import load, dump
22
22
  from flightdata.base.numpy_encoder import NumpyEncoder
@@ -76,7 +76,7 @@ class Flight:
76
76
  self.primary_pos_source = primary_pos_source
77
77
 
78
78
  def __getattr__(self, name):
79
- if self.parameters is not None:
79
+ if self.parameters is not None and 'parameter' in self.parameters.columns:
80
80
  if name in self.parameters.parameter.unique():
81
81
  df = self.parameters.loc[self.parameters.parameter == name]
82
82
  return df.loc[df.value != df.value.shift()]
@@ -85,7 +85,7 @@ class Origin(object):
85
85
  This is a convenient, but not very accurate way to setup the box.
86
86
  '''
87
87
 
88
- position = g.GPS(flight.gps_latitude.iloc[0], flight.gps_longitude.iloc[0], flight.gps_altitude.iloc[0])
88
+ position = g.GPS(flight.pos_latitude.iloc[0], flight.pos_longitude.iloc[0], flight.pos_altitude.iloc[0])
89
89
  heading = g.Euler(flight.attitude)[0].transform_point(g.PX())
90
90
 
91
91
  return Origin('origin', position, np.arctan2(heading.y, heading.x)[0])
@@ -168,4 +168,8 @@ class FCJOrigin(BaseModel):
168
168
  def shift(self):
169
169
  return self.origin().rotation.transform_point(
170
170
  g.Point(self.move_east, -self.move_north, 0)
171
- )
171
+ )
172
+
173
+ @staticmethod
174
+ def zero():
175
+ return FCJOrigin(lat=0, lng=0, alt=0, heading=0)
@@ -101,7 +101,7 @@ class Result(BaseModel):
101
101
 
102
102
  class ManResult(BaseModel):
103
103
  els: list[El]
104
- results: list[Score]
104
+ results: list[Score] = []
105
105
 
106
106
  def to_df(self) -> pd.DataFrame:
107
107
  return pd.DataFrame(
@@ -266,7 +266,7 @@ class State(Table):
266
266
  test="startswith" if subels else None, element=element
267
267
  )
268
268
 
269
- def convert_state(self: State, r: g.Point) -> State:
269
+ def body_rotate(self: State, r: g.Point) -> State:
270
270
  """Rotate body axis by an axis angle"""
271
271
  att = self.att.body_rotate(r)
272
272
  q = att.inverse() * self.att
@@ -317,13 +317,13 @@ class State(Table):
317
317
  if not flow:
318
318
  env = Environment.from_constructs(self.time)
319
319
  flow = Flow.build(self, env)
320
- return self.convert_state(-g.Point(0, 1, 0) * flow.alpha)
320
+ return self.body_rotate(-g.Point(0, 1, 0) * flow.alpha)
321
321
 
322
322
  def stability_to_wind(self: State, flow: Flow = None) -> State:
323
323
  if not flow:
324
324
  env = Environment.from_constructs(self.time)
325
325
  flow = Flow.build(self, env)
326
- return self.convert_state(g.Point(0, 0, 1) * flow.beta)
326
+ return self.body_rotate(g.Point(0, 0, 1) * flow.beta)
327
327
 
328
328
  def body_to_wind(self: State, flow: Flow = None) -> State:
329
329
  return self.body_to_stability(flow).stability_to_wind(flow)
@@ -346,7 +346,7 @@ class State(Table):
346
346
  yaw_rotation = (jwind + self.vel).angles(g.PX()) * g.Point(0, 0, 1)
347
347
 
348
348
  # transform the data by this yaw rotation:
349
- int_axis = self.convert_state(yaw_rotation)
349
+ int_axis = self.body_rotate(yaw_rotation)
350
350
 
351
351
  # the local wind vector in the intermediate frame:
352
352
  intwind = int_axis.att.inverse().transform_point(env.wind)
@@ -355,11 +355,11 @@ class State(Table):
355
355
  pitch_rotation = (intwind + int_axis.vel).angles(g.PX()) * g.Point(0, 1, 0)
356
356
 
357
357
  # transform by this pitch rotation to get the wind axis state
358
- return int_axis.convert_state(pitch_rotation)
358
+ return int_axis.body_rotate(pitch_rotation)
359
359
 
360
360
  def wind_to_body(self: State, flow: Flow) -> State:
361
- stability_axis = self.convert_state(-g.Point(0, 0, 1) * flow.beta)
362
- body_axis = stability_axis.convert_state(g.Point(0, 1, 0) * flow.alpha)
361
+ stability_axis = self.body_rotate(-g.Point(0, 0, 1) * flow.beta)
362
+ body_axis = stability_axis.body_rotate(g.Point(0, 1, 0) * flow.alpha)
363
363
 
364
364
  return body_axis
365
365
 
@@ -6,16 +6,16 @@ import pandas as pd
6
6
  from ardupilot_log_reader import Ardupilot
7
7
  from flightdata import Flight
8
8
  from datetime import datetime
9
-
9
+ from pathlib import Path
10
10
 
11
11
  @fixture(scope="session")
12
12
  def bin_parser():
13
- return Ardupilot.parse("test/data/p23.BIN", types=Flight.ardupilot_types)
13
+ return Ardupilot.parse(Path(__file__).parent / "data/p23.BIN", types=Flight.ardupilot_types)
14
14
 
15
15
 
16
16
  @fixture(scope="session")
17
17
  def web_json():
18
- with open("test/data/web_bin_parse.json", "r") as f:
18
+ with open(Path(__file__).parent / "data/web_bin_parse.json", "r") as f:
19
19
  return load(f)
20
20
 
21
21
 
File without changes
@@ -1,7 +1,7 @@
1
1
  from flightdata import Flight, State, Origin, BinData, fcj
2
2
  from pytest import approx, fixture
3
3
  from geometry import Transformation, PX, PY, P0, Time
4
- from geometry.testing import assert_almost_equal
4
+ from geometry.checks import assert_almost_equal
5
5
  import numpy as np
6
6
  from time import sleep, time
7
7
  from json import load
@@ -0,0 +1,301 @@
1
+ version = 1
2
+ requires-python = ">=3.12"
3
+
4
+ [[package]]
5
+ name = "ardupilot-log-reader"
6
+ version = "0.3.5"
7
+ source = { editable = "../ArdupilotLogReader" }
8
+ dependencies = [
9
+ { name = "numpy" },
10
+ { name = "pandas" },
11
+ { name = "pymavlink" },
12
+ ]
13
+
14
+ [package.metadata]
15
+ requires-dist = [
16
+ { name = "numpy", specifier = ">=2.1.3" },
17
+ { name = "pandas", specifier = ">=2.2.3" },
18
+ { name = "pymavlink", specifier = ">=2.4.42" },
19
+ ]
20
+
21
+ [package.metadata.requires-dev]
22
+ dev = [{ name = "pytest", specifier = ">=8.3.3" }]
23
+ lint = [{ name = "ruff", specifier = ">=0.7.3" }]
24
+
25
+ [[package]]
26
+ name = "colorama"
27
+ version = "0.4.6"
28
+ source = { registry = "https://pypi.org/simple" }
29
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
30
+ wheels = [
31
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
32
+ ]
33
+
34
+ [[package]]
35
+ name = "flightdata"
36
+ version = "0.2.24"
37
+ source = { editable = "." }
38
+ dependencies = [
39
+ { name = "numpy" },
40
+ { name = "pandas" },
41
+ { name = "pfc-geometry" },
42
+ ]
43
+
44
+ [package.dev-dependencies]
45
+ dev = [
46
+ { name = "ardupilot-log-reader" },
47
+ { name = "pymavlink" },
48
+ { name = "pytest" },
49
+ ]
50
+
51
+ [package.metadata]
52
+ requires-dist = [
53
+ { name = "numpy", specifier = ">=2.1.3" },
54
+ { name = "pandas", specifier = ">=2.2.3" },
55
+ { name = "pfc-geometry", editable = "../geometry" },
56
+ ]
57
+
58
+ [package.metadata.requires-dev]
59
+ dev = [
60
+ { name = "ardupilot-log-reader", editable = "../ArdupilotLogReader" },
61
+ { name = "pymavlink", specifier = ">=2.4.42" },
62
+ { name = "pytest", specifier = ">=8.3.3" },
63
+ ]
64
+
65
+ [[package]]
66
+ name = "future"
67
+ version = "1.0.0"
68
+ source = { registry = "https://pypi.org/simple" }
69
+ sdist = { url = "https://files.pythonhosted.org/packages/a7/b2/4140c69c6a66432916b26158687e821ba631a4c9273c474343badf84d3ba/future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05", size = 1228490 }
70
+ wheels = [
71
+ { url = "https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216", size = 491326 },
72
+ ]
73
+
74
+ [[package]]
75
+ name = "iniconfig"
76
+ version = "2.0.0"
77
+ source = { registry = "https://pypi.org/simple" }
78
+ sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 }
79
+ wheels = [
80
+ { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 },
81
+ ]
82
+
83
+ [[package]]
84
+ name = "lxml"
85
+ version = "5.3.0"
86
+ source = { registry = "https://pypi.org/simple" }
87
+ sdist = { url = "https://files.pythonhosted.org/packages/e7/6b/20c3a4b24751377aaa6307eb230b66701024012c29dd374999cc92983269/lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", size = 3679318 }
88
+ wheels = [
89
+ { url = "https://files.pythonhosted.org/packages/eb/6d/d1f1c5e40c64bf62afd7a3f9b34ce18a586a1cccbf71e783cd0a6d8e8971/lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859", size = 8171753 },
90
+ { url = "https://files.pythonhosted.org/packages/bd/83/26b1864921869784355459f374896dcf8b44d4af3b15d7697e9156cb2de9/lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e", size = 4441955 },
91
+ { url = "https://files.pythonhosted.org/packages/e0/d2/e9bff9fb359226c25cda3538f664f54f2804f4b37b0d7c944639e1a51f69/lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f", size = 5050778 },
92
+ { url = "https://files.pythonhosted.org/packages/88/69/6972bfafa8cd3ddc8562b126dd607011e218e17be313a8b1b9cc5a0ee876/lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e", size = 4748628 },
93
+ { url = "https://files.pythonhosted.org/packages/5d/ea/a6523c7c7f6dc755a6eed3d2f6d6646617cad4d3d6d8ce4ed71bfd2362c8/lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179", size = 5322215 },
94
+ { url = "https://files.pythonhosted.org/packages/99/37/396fbd24a70f62b31d988e4500f2068c7f3fd399d2fd45257d13eab51a6f/lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a", size = 4813963 },
95
+ { url = "https://files.pythonhosted.org/packages/09/91/e6136f17459a11ce1757df864b213efbeab7adcb2efa63efb1b846ab6723/lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3", size = 4923353 },
96
+ { url = "https://files.pythonhosted.org/packages/1d/7c/2eeecf87c9a1fca4f84f991067c693e67340f2b7127fc3eca8fa29d75ee3/lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1", size = 4740541 },
97
+ { url = "https://files.pythonhosted.org/packages/3b/ed/4c38ba58defca84f5f0d0ac2480fdcd99fc7ae4b28fc417c93640a6949ae/lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d", size = 5346504 },
98
+ { url = "https://files.pythonhosted.org/packages/a5/22/bbd3995437e5745cb4c2b5d89088d70ab19d4feabf8a27a24cecb9745464/lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c", size = 4898077 },
99
+ { url = "https://files.pythonhosted.org/packages/0a/6e/94537acfb5b8f18235d13186d247bca478fea5e87d224644e0fe907df976/lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99", size = 4946543 },
100
+ { url = "https://files.pythonhosted.org/packages/8d/e8/4b15df533fe8e8d53363b23a41df9be907330e1fa28c7ca36893fad338ee/lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff", size = 4816841 },
101
+ { url = "https://files.pythonhosted.org/packages/1a/e7/03f390ea37d1acda50bc538feb5b2bda6745b25731e4e76ab48fae7106bf/lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a", size = 5417341 },
102
+ { url = "https://files.pythonhosted.org/packages/ea/99/d1133ab4c250da85a883c3b60249d3d3e7c64f24faff494cf0fd23f91e80/lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8", size = 5327539 },
103
+ { url = "https://files.pythonhosted.org/packages/7d/ed/e6276c8d9668028213df01f598f385b05b55a4e1b4662ee12ef05dab35aa/lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d", size = 5012542 },
104
+ { url = "https://files.pythonhosted.org/packages/36/88/684d4e800f5aa28df2a991a6a622783fb73cf0e46235cfa690f9776f032e/lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30", size = 3486454 },
105
+ { url = "https://files.pythonhosted.org/packages/fc/82/ace5a5676051e60355bd8fb945df7b1ba4f4fb8447f2010fb816bfd57724/lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f", size = 3816857 },
106
+ { url = "https://files.pythonhosted.org/packages/94/6a/42141e4d373903bfea6f8e94b2f554d05506dfda522ada5343c651410dc8/lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a", size = 8156284 },
107
+ { url = "https://files.pythonhosted.org/packages/91/5e/fa097f0f7d8b3d113fb7312c6308af702f2667f22644441715be961f2c7e/lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd", size = 4432407 },
108
+ { url = "https://files.pythonhosted.org/packages/2d/a1/b901988aa6d4ff937f2e5cfc114e4ec561901ff00660c3e56713642728da/lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51", size = 5048331 },
109
+ { url = "https://files.pythonhosted.org/packages/30/0f/b2a54f48e52de578b71bbe2a2f8160672a8a5e103df3a78da53907e8c7ed/lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b", size = 4744835 },
110
+ { url = "https://files.pythonhosted.org/packages/82/9d/b000c15538b60934589e83826ecbc437a1586488d7c13f8ee5ff1f79a9b8/lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002", size = 5316649 },
111
+ { url = "https://files.pythonhosted.org/packages/e3/ee/ffbb9eaff5e541922611d2c56b175c45893d1c0b8b11e5a497708a6a3b3b/lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4", size = 4812046 },
112
+ { url = "https://files.pythonhosted.org/packages/15/ff/7ff89d567485c7b943cdac316087f16b2399a8b997007ed352a1248397e5/lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492", size = 4918597 },
113
+ { url = "https://files.pythonhosted.org/packages/c6/a3/535b6ed8c048412ff51268bdf4bf1cf052a37aa7e31d2e6518038a883b29/lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3", size = 4738071 },
114
+ { url = "https://files.pythonhosted.org/packages/7a/8f/cbbfa59cb4d4fd677fe183725a76d8c956495d7a3c7f111ab8f5e13d2e83/lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4", size = 5342213 },
115
+ { url = "https://files.pythonhosted.org/packages/5c/fb/db4c10dd9958d4b52e34d1d1f7c1f434422aeaf6ae2bbaaff2264351d944/lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367", size = 4893749 },
116
+ { url = "https://files.pythonhosted.org/packages/f2/38/bb4581c143957c47740de18a3281a0cab7722390a77cc6e610e8ebf2d736/lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832", size = 4945901 },
117
+ { url = "https://files.pythonhosted.org/packages/fc/d5/18b7de4960c731e98037bd48fa9f8e6e8f2558e6fbca4303d9b14d21ef3b/lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff", size = 4815447 },
118
+ { url = "https://files.pythonhosted.org/packages/97/a8/cd51ceaad6eb849246559a8ef60ae55065a3df550fc5fcd27014361c1bab/lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd", size = 5411186 },
119
+ { url = "https://files.pythonhosted.org/packages/89/c3/1e3dabab519481ed7b1fdcba21dcfb8832f57000733ef0e71cf6d09a5e03/lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb", size = 5324481 },
120
+ { url = "https://files.pythonhosted.org/packages/b6/17/71e9984cf0570cd202ac0a1c9ed5c1b8889b0fc8dc736f5ef0ffb181c284/lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", size = 5011053 },
121
+ { url = "https://files.pythonhosted.org/packages/69/68/9f7e6d3312a91e30829368c2b3217e750adef12a6f8eb10498249f4e8d72/lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", size = 3485634 },
122
+ { url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", size = 3814417 },
123
+ ]
124
+
125
+ [[package]]
126
+ name = "numpy"
127
+ version = "2.1.3"
128
+ source = { registry = "https://pypi.org/simple" }
129
+ sdist = { url = "https://files.pythonhosted.org/packages/25/ca/1166b75c21abd1da445b97bf1fa2f14f423c6cfb4fc7c4ef31dccf9f6a94/numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761", size = 20166090 }
130
+ wheels = [
131
+ { url = "https://files.pythonhosted.org/packages/8a/f0/385eb9970309643cbca4fc6eebc8bb16e560de129c91258dfaa18498da8b/numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e", size = 20849658 },
132
+ { url = "https://files.pythonhosted.org/packages/54/4a/765b4607f0fecbb239638d610d04ec0a0ded9b4951c56dc68cef79026abf/numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958", size = 13492258 },
133
+ { url = "https://files.pythonhosted.org/packages/bd/a7/2332679479c70b68dccbf4a8eb9c9b5ee383164b161bee9284ac141fbd33/numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8", size = 5090249 },
134
+ { url = "https://files.pythonhosted.org/packages/c1/67/4aa00316b3b981a822c7a239d3a8135be2a6945d1fd11d0efb25d361711a/numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564", size = 6621704 },
135
+ { url = "https://files.pythonhosted.org/packages/5e/da/1a429ae58b3b6c364eeec93bf044c532f2ff7b48a52e41050896cf15d5b1/numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512", size = 13606089 },
136
+ { url = "https://files.pythonhosted.org/packages/9e/3e/3757f304c704f2f0294a6b8340fcf2be244038be07da4cccf390fa678a9f/numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b", size = 16043185 },
137
+ { url = "https://files.pythonhosted.org/packages/43/97/75329c28fea3113d00c8d2daf9bc5828d58d78ed661d8e05e234f86f0f6d/numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc", size = 16410751 },
138
+ { url = "https://files.pythonhosted.org/packages/ad/7a/442965e98b34e0ae9da319f075b387bcb9a1e0658276cc63adb8c9686f7b/numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0", size = 14082705 },
139
+ { url = "https://files.pythonhosted.org/packages/ac/b6/26108cf2cfa5c7e03fb969b595c93131eab4a399762b51ce9ebec2332e80/numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9", size = 6239077 },
140
+ { url = "https://files.pythonhosted.org/packages/a6/84/fa11dad3404b7634aaab50733581ce11e5350383311ea7a7010f464c0170/numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a", size = 12566858 },
141
+ { url = "https://files.pythonhosted.org/packages/4d/0b/620591441457e25f3404c8057eb924d04f161244cb8a3680d529419aa86e/numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f", size = 20836263 },
142
+ { url = "https://files.pythonhosted.org/packages/45/e1/210b2d8b31ce9119145433e6ea78046e30771de3fe353f313b2778142f34/numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598", size = 13507771 },
143
+ { url = "https://files.pythonhosted.org/packages/55/44/aa9ee3caee02fa5a45f2c3b95cafe59c44e4b278fbbf895a93e88b308555/numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57", size = 5075805 },
144
+ { url = "https://files.pythonhosted.org/packages/78/d6/61de6e7e31915ba4d87bbe1ae859e83e6582ea14c6add07c8f7eefd8488f/numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe", size = 6608380 },
145
+ { url = "https://files.pythonhosted.org/packages/3e/46/48bdf9b7241e317e6cf94276fe11ba673c06d1fdf115d8b4ebf616affd1a/numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43", size = 13602451 },
146
+ { url = "https://files.pythonhosted.org/packages/70/50/73f9a5aa0810cdccda9c1d20be3cbe4a4d6ea6bfd6931464a44c95eef731/numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56", size = 16039822 },
147
+ { url = "https://files.pythonhosted.org/packages/ad/cd/098bc1d5a5bc5307cfc65ee9369d0ca658ed88fbd7307b0d49fab6ca5fa5/numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a", size = 16411822 },
148
+ { url = "https://files.pythonhosted.org/packages/83/a2/7d4467a2a6d984549053b37945620209e702cf96a8bc658bc04bba13c9e2/numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef", size = 14079598 },
149
+ { url = "https://files.pythonhosted.org/packages/e9/6a/d64514dcecb2ee70bfdfad10c42b76cab657e7ee31944ff7a600f141d9e9/numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f", size = 6236021 },
150
+ { url = "https://files.pythonhosted.org/packages/bb/f9/12297ed8d8301a401e7d8eb6b418d32547f1d700ed3c038d325a605421a4/numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed", size = 12560405 },
151
+ { url = "https://files.pythonhosted.org/packages/a7/45/7f9244cd792e163b334e3a7f02dff1239d2890b6f37ebf9e82cbe17debc0/numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f", size = 20859062 },
152
+ { url = "https://files.pythonhosted.org/packages/b1/b4/a084218e7e92b506d634105b13e27a3a6645312b93e1c699cc9025adb0e1/numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4", size = 13515839 },
153
+ { url = "https://files.pythonhosted.org/packages/27/45/58ed3f88028dcf80e6ea580311dc3edefdd94248f5770deb980500ef85dd/numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e", size = 5116031 },
154
+ { url = "https://files.pythonhosted.org/packages/37/a8/eb689432eb977d83229094b58b0f53249d2209742f7de529c49d61a124a0/numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0", size = 6629977 },
155
+ { url = "https://files.pythonhosted.org/packages/42/a3/5355ad51ac73c23334c7caaed01adadfda49544f646fcbfbb4331deb267b/numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408", size = 13575951 },
156
+ { url = "https://files.pythonhosted.org/packages/c4/70/ea9646d203104e647988cb7d7279f135257a6b7e3354ea6c56f8bafdb095/numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6", size = 16022655 },
157
+ { url = "https://files.pythonhosted.org/packages/14/ce/7fc0612903e91ff9d0b3f2eda4e18ef9904814afcae5b0f08edb7f637883/numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f", size = 16399902 },
158
+ { url = "https://files.pythonhosted.org/packages/ef/62/1d3204313357591c913c32132a28f09a26357e33ea3c4e2fe81269e0dca1/numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17", size = 14067180 },
159
+ { url = "https://files.pythonhosted.org/packages/24/d7/78a40ed1d80e23a774cb8a34ae8a9493ba1b4271dde96e56ccdbab1620ef/numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48", size = 6291907 },
160
+ { url = "https://files.pythonhosted.org/packages/86/09/a5ab407bd7f5f5599e6a9261f964ace03a73e7c6928de906981c31c38082/numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4", size = 12644098 },
161
+ ]
162
+
163
+ [[package]]
164
+ name = "packaging"
165
+ version = "24.2"
166
+ source = { registry = "https://pypi.org/simple" }
167
+ sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 }
168
+ wheels = [
169
+ { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
170
+ ]
171
+
172
+ [[package]]
173
+ name = "pandas"
174
+ version = "2.2.3"
175
+ source = { registry = "https://pypi.org/simple" }
176
+ dependencies = [
177
+ { name = "numpy" },
178
+ { name = "python-dateutil" },
179
+ { name = "pytz" },
180
+ { name = "tzdata" },
181
+ ]
182
+ sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 }
183
+ wheels = [
184
+ { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 },
185
+ { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 },
186
+ { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 },
187
+ { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 },
188
+ { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 },
189
+ { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 },
190
+ { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 },
191
+ { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 },
192
+ { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 },
193
+ { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 },
194
+ { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 },
195
+ { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 },
196
+ { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 },
197
+ { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 },
198
+ { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 },
199
+ { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 },
200
+ { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 },
201
+ { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 },
202
+ { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 },
203
+ { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 },
204
+ ]
205
+
206
+ [[package]]
207
+ name = "pfc-geometry"
208
+ version = "0.2.13"
209
+ source = { editable = "../geometry" }
210
+ dependencies = [
211
+ { name = "numpy" },
212
+ { name = "pandas" },
213
+ ]
214
+
215
+ [package.metadata]
216
+ requires-dist = [
217
+ { name = "numpy", specifier = ">=2.1.3" },
218
+ { name = "pandas", specifier = ">=2.2.3" },
219
+ ]
220
+
221
+ [package.metadata.requires-dev]
222
+ dev = [
223
+ { name = "numpy-quaternion", specifier = ">=2023.0.3" },
224
+ { name = "pytest", specifier = ">=8.3.3" },
225
+ ]
226
+
227
+ [[package]]
228
+ name = "pluggy"
229
+ version = "1.5.0"
230
+ source = { registry = "https://pypi.org/simple" }
231
+ sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 }
232
+ wheels = [
233
+ { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 },
234
+ ]
235
+
236
+ [[package]]
237
+ name = "pymavlink"
238
+ version = "2.4.42"
239
+ source = { registry = "https://pypi.org/simple" }
240
+ dependencies = [
241
+ { name = "future" },
242
+ { name = "lxml" },
243
+ ]
244
+ sdist = { url = "https://files.pythonhosted.org/packages/6e/c8/19591ad720be80db73d117bdfe682b701231c2f7a4eae69af5a567ed25c2/pymavlink-2.4.42.tar.gz", hash = "sha256:dfe04408b57425e26538a6b4bd977f77239bc8ce61886174567b1a243f7c3d76", size = 11629743 }
245
+ wheels = [
246
+ { url = "https://files.pythonhosted.org/packages/34/3c/7709b1662e87a999a780209786b85bd3cf34054138bb76a302e38d7c34d1/pymavlink-2.4.42-py3-none-any.whl", hash = "sha256:c40f9bd8f39247776afd74de83b93b14e795ee825704e7d3d8d021de3ebf65ad", size = 11840706 },
247
+ ]
248
+
249
+ [[package]]
250
+ name = "pytest"
251
+ version = "8.3.3"
252
+ source = { registry = "https://pypi.org/simple" }
253
+ dependencies = [
254
+ { name = "colorama", marker = "sys_platform == 'win32'" },
255
+ { name = "iniconfig" },
256
+ { name = "packaging" },
257
+ { name = "pluggy" },
258
+ ]
259
+ sdist = { url = "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", size = 1442487 }
260
+ wheels = [
261
+ { url = "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2", size = 342341 },
262
+ ]
263
+
264
+ [[package]]
265
+ name = "python-dateutil"
266
+ version = "2.9.0.post0"
267
+ source = { registry = "https://pypi.org/simple" }
268
+ dependencies = [
269
+ { name = "six" },
270
+ ]
271
+ sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
272
+ wheels = [
273
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
274
+ ]
275
+
276
+ [[package]]
277
+ name = "pytz"
278
+ version = "2024.2"
279
+ source = { registry = "https://pypi.org/simple" }
280
+ sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 }
281
+ wheels = [
282
+ { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 },
283
+ ]
284
+
285
+ [[package]]
286
+ name = "six"
287
+ version = "1.16.0"
288
+ source = { registry = "https://pypi.org/simple" }
289
+ sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 }
290
+ wheels = [
291
+ { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 },
292
+ ]
293
+
294
+ [[package]]
295
+ name = "tzdata"
296
+ version = "2024.2"
297
+ source = { registry = "https://pypi.org/simple" }
298
+ sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a86a98e9896bae89c7aa15078ec29f490fef2f1e5384/tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", size = 193282 }
299
+ wheels = [
300
+ { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 },
301
+ ]
@@ -1,53 +0,0 @@
1
- #https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/
2
- name: Publish to PyPI and TestPyPI
3
-
4
- on:
5
- push:
6
- tags:
7
- - 'v[0-9]+.[0-9]+.[0-9]+'
8
- jobs:
9
- build:
10
- name: Build distribution
11
- runs-on: ubuntu-latest
12
-
13
- steps:
14
- - uses: actions/checkout@v4
15
-
16
- - name: Set up Python
17
- uses: actions/setup-python@v4
18
- with:
19
- python-version: ^3.12
20
-
21
- - name: Install dependencies
22
- run: pip install -r requirements.txt
23
-
24
- - name: Install pypa / build
25
- run: python3 -m pip install build --user
26
-
27
- - name: Build a binary wheel and a source tarball
28
- run: python3 -m build
29
-
30
- - name: Store the distribution packages
31
- uses: actions/upload-artifact@v3
32
- with:
33
- name: python-package-distributions
34
- path: dist/
35
-
36
- publish-to-pypi:
37
- name: Publish Python distribution to PyPI
38
- needs: build
39
- runs-on: ubuntu-latest
40
- environment:
41
- name: pypi
42
- url: https://pypi.org/p/<package-name>
43
- permissions:
44
- id-token: write # IMPORTANT: mandatory for trusted publishing
45
-
46
- steps:
47
- - name: Download all the dists
48
- uses: actions/download-artifact@v3
49
- with:
50
- name: python-package-distributions
51
- path: dist/
52
- - name: Publish distribution to PyPI
53
- uses: pypa/gh-action-pypi-publish@release/v1
@@ -1,50 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: flightdata
3
- Version: 0.2.22
4
- Summary: Module for handling UAV flight log data
5
- Author-email: Thomas David <thomasdavid0@gmail.com>
6
- License: GNU GPL v3
7
- Classifier: Programming Language :: Python :: 3
8
- Requires-Python: >=3.12
9
- Description-Content-Type: text/markdown
10
- License-File: LICENSE
11
- Requires-Dist: numpy
12
- Requires-Dist: pandas
13
- Requires-Dist: simplejson
14
- Requires-Dist: pfc-geometry>=0.2.12
15
- Requires-Dist: json_stream
16
- Provides-Extra: dev
17
- Requires-Dist: numpy; extra == "dev"
18
- Requires-Dist: pandas; extra == "dev"
19
- Requires-Dist: simplejson; extra == "dev"
20
- Requires-Dist: pfc-geometry>=0.2.12; extra == "dev"
21
- Requires-Dist: ardupilot-log-reader>=0.3.3; extra == "dev"
22
- Requires-Dist: pytest; extra == "dev"
23
-
24
- ## FlightData
25
- This repo is contains a set of datastructures and tools for handling flight log data.
26
-
27
- ### Flight
28
- The Flight object represents the data logged by a flight controller. The class wraps a pandas dataframe which is indexed on a single time axis. Where data is logged at different rates for different sensors it is mapped to the closest time index. Attribute access provides individual columns or sets of columns in the groups defined in Fields. Item access subsets the data in the time axis.
29
-
30
- ### Table
31
- The Table is the base type for most of the datastructures. It allows attribute access to individual columns. Attribute access is also available to return basic entities subclassed from the base type in the pfc-geometry package. For example in the state object table.x provides the x position, table.pos provides a Point representing the xyz position. columns that are not represented by geometric base types are considered to be labels for the data.
32
-
33
- ### State
34
- The State object is a table representing the position and orientation of the aircraft along with their derivatives, it can be constructed from a Flight or from scratch by extrapolating in lines or around arcs. Many tools are provided to manipulate the data. The position and attitude are in a reference frame (with Z up), the derivatives move with the aircraft in either the body, wind, stability or track (like the wind axis but with no wind) frame.
35
-
36
-
37
- Further documentation will be provided here: https://pfcdocumentation.readthedocs.io/pyflightcoach/flightdata.html
38
-
39
-
40
- ### Installation
41
-
42
- ```bash
43
- pip install pfc-geometry
44
- ```
45
-
46
- ### Setup from source
47
-
48
- ```bash
49
- pip install .
50
- ```
@@ -1,87 +0,0 @@
1
- .gitignore
2
- LICENSE
3
- README.md
4
- pyproject.toml
5
- requirements-dev.txt
6
- requirements.txt
7
- .github/workflows/publish_pypi.yml
8
- .vscode/launch.json
9
- .vscode/settings.json
10
- examples/__init__.py
11
- examples/data/__init__.py
12
- examples/data/manual_F3A_F23_22_04_28_00000231.json
13
- examples/data/manual_F3A_P23_22_05_31_00000350.json
14
- examples/data/manual_F3A_P23_23_08_11_00000094.json
15
- examples/flight_dynamics/00000150.json
16
- examples/flight_dynamics/__init__.py
17
- examples/flight_dynamics/box.f3a
18
- examples/flight_dynamics/param_id.py
19
- examples/state_analysis/__init__.py
20
- examples/state_analysis/axes.py
21
- examples/state_analysis/state_fill_plot.py
22
- flightdata/__init__.py
23
- flightdata/bindata.py
24
- flightdata/coefficients.py
25
- flightdata/flow.py
26
- flightdata/origin.py
27
- flightdata/state.py
28
- flightdata.egg-info/PKG-INFO
29
- flightdata.egg-info/SOURCES.txt
30
- flightdata.egg-info/dependency_links.txt
31
- flightdata.egg-info/entry_points.txt
32
- flightdata.egg-info/requires.txt
33
- flightdata.egg-info/top_level.txt
34
- flightdata/base/__init__.py
35
- flightdata/base/collection.py
36
- flightdata/base/constructs.py
37
- flightdata/base/labeling.py
38
- flightdata/base/numpy_encoder.py
39
- flightdata/base/table.py
40
- flightdata/environment/__init__.py
41
- flightdata/environment/environment.py
42
- flightdata/environment/wind.py
43
- flightdata/flight/__init__.py
44
- flightdata/flight/ardupilot.py
45
- flightdata/flight/fields.py
46
- flightdata/flight/flight.py
47
- flightdata/flight/parameters.py
48
- flightdata/model/__init__.py
49
- flightdata/model/aerodynamic.py
50
- flightdata/model/thrust.py
51
- flightdata/schemas/__init__.py
52
- flightdata/schemas/fcj.py
53
- flightdata/scripts/collect_logs.py
54
- flightdata/scripts/flightline.py
55
- test/EmailedBox.f3a
56
- test/__init__.py
57
- test/conftest.py
58
- test/test_bindata.py
59
- test/test_fields.py
60
- test/test_flight.py
61
- test/test_origin.py
62
- test/base/__init__.py
63
- test/base/test_base_constructs.py
64
- test/base/test_table.py
65
- test/data/bin_parser_GPS.csv
66
- test/data/bin_parser_POS.csv
67
- test/data/make_inputs.py
68
- test/data/manual_F3A_P23.json
69
- test/data/p23.BIN
70
- test/data/p23.json
71
- test/data/p23_box.f3a
72
- test/data/p23_fc.json
73
- test/data/p23_flight.json
74
- test/data/vtol_hover.bin
75
- test/data/vtol_hover.json
76
- test/data/web_bin_parse.json
77
- test/test_environment/__init__.py
78
- test/test_environment/test_environment.py
79
- test/test_environment/test_environment_wind.py
80
- test/test_model/__init__.py
81
- test/test_model/test_model_coefficients.py
82
- test/test_model/test_model_flow.py
83
- test/test_state/__init__.py
84
- test/test_state/test_state.py
85
- test/test_state/test_state_builders.py
86
- test/test_state/test_state_conversions.py
87
- test/test_state/test_state_measurements.py
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- collect_logs = flightdata.scripts.collect_logs:main
3
- flightline = flightdata.scripts.flightline:main
@@ -1,13 +0,0 @@
1
- numpy
2
- pandas
3
- simplejson
4
- pfc-geometry>=0.2.12
5
- json_stream
6
-
7
- [dev]
8
- numpy
9
- pandas
10
- simplejson
11
- pfc-geometry>=0.2.12
12
- ardupilot-log-reader>=0.3.3
13
- pytest
@@ -1 +0,0 @@
1
- flightdata
@@ -1,26 +0,0 @@
1
- [build-system]
2
- requires = [
3
- "setuptools>=60",
4
- "setuptools-scm>=8.0"
5
- ]
6
- build-backend = "setuptools.build_meta"
7
-
8
- [project]
9
- name = "flightdata"
10
- authors = [{name = "Thomas David", email = "thomasdavid0@gmail.com"}]
11
- description = "Module for handling UAV flight log data"
12
- readme = "README.md"
13
- requires-python = ">=3.12"
14
- license = {text = "GNU GPL v3"}
15
- classifiers = ["Programming Language :: Python :: 3",]
16
- dynamic = ["version", "dependencies", "optional-dependencies"]
17
-
18
- [project.scripts]
19
- collect_logs = "flightdata.scripts.collect_logs:main"
20
- flightline = "flightdata.scripts.flightline:main"
21
-
22
- [tool.setuptools.dynamic]
23
- dependencies = {file = ["requirements.txt"]}
24
- optional-dependencies = {dev = { file = ["requirements-dev.txt"] }}
25
-
26
- [tool.setuptools_scm]
@@ -1,6 +0,0 @@
1
- numpy
2
- pandas
3
- simplejson
4
- pfc-geometry>=0.2.12
5
- ardupilot-log-reader>=0.3.3
6
- pytest
@@ -1,5 +0,0 @@
1
- numpy
2
- pandas
3
- simplejson
4
- pfc-geometry>=0.2.12
5
- json_stream
@@ -1,4 +0,0 @@
1
- [egg_info]
2
- tag_build =
3
- tag_date = 0
4
-
File without changes
File without changes
File without changes