flightdata 0.2.23__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.23 → flightdata-0.2.24}/.vscode/settings.json +0 -1
  3. {flightdata-0.2.23/flightdata.egg-info → flightdata-0.2.24}/PKG-INFO +7 -21
  4. flightdata-0.2.24/pyproject.toml +23 -0
  5. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/base/__init__.py +6 -1
  6. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/base/collection.py +8 -5
  7. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/base/table.py +1 -1
  8. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/flight/flight.py +1 -1
  9. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/origin.py +5 -1
  10. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/state.py +7 -7
  11. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_bindata.py +3 -3
  12. flightdata-0.2.24/test/test_state/__init__.py +0 -0
  13. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_state/test_state_builders.py +1 -1
  14. flightdata-0.2.24/uv.lock +301 -0
  15. flightdata-0.2.23/.github/workflows/publish_pypi.yml +0 -53
  16. flightdata-0.2.23/PKG-INFO +0 -52
  17. flightdata-0.2.23/flightdata.egg-info/SOURCES.txt +0 -87
  18. flightdata-0.2.23/flightdata.egg-info/dependency_links.txt +0 -1
  19. flightdata-0.2.23/flightdata.egg-info/entry_points.txt +0 -3
  20. flightdata-0.2.23/flightdata.egg-info/requires.txt +0 -15
  21. flightdata-0.2.23/flightdata.egg-info/top_level.txt +0 -1
  22. flightdata-0.2.23/pyproject.toml +0 -26
  23. flightdata-0.2.23/requirements-dev.txt +0 -7
  24. flightdata-0.2.23/requirements.txt +0 -6
  25. flightdata-0.2.23/setup.cfg +0 -4
  26. {flightdata-0.2.23 → flightdata-0.2.24}/.gitignore +0 -0
  27. {flightdata-0.2.23 → flightdata-0.2.24}/.vscode/launch.json +0 -0
  28. {flightdata-0.2.23 → flightdata-0.2.24}/LICENSE +0 -0
  29. {flightdata-0.2.23 → flightdata-0.2.24}/README.md +0 -0
  30. {flightdata-0.2.23 → flightdata-0.2.24}/examples/__init__.py +0 -0
  31. {flightdata-0.2.23 → flightdata-0.2.24}/examples/data/__init__.py +0 -0
  32. {flightdata-0.2.23 → flightdata-0.2.24}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
  33. {flightdata-0.2.23 → flightdata-0.2.24}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
  34. {flightdata-0.2.23 → flightdata-0.2.24}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
  35. {flightdata-0.2.23 → flightdata-0.2.24}/examples/flight_dynamics/00000150.json +0 -0
  36. {flightdata-0.2.23 → flightdata-0.2.24}/examples/flight_dynamics/__init__.py +0 -0
  37. {flightdata-0.2.23 → flightdata-0.2.24}/examples/flight_dynamics/box.f3a +0 -0
  38. {flightdata-0.2.23 → flightdata-0.2.24}/examples/flight_dynamics/param_id.py +0 -0
  39. {flightdata-0.2.23 → flightdata-0.2.24}/examples/state_analysis/__init__.py +0 -0
  40. {flightdata-0.2.23 → flightdata-0.2.24}/examples/state_analysis/axes.py +0 -0
  41. {flightdata-0.2.23 → flightdata-0.2.24}/examples/state_analysis/state_fill_plot.py +0 -0
  42. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/__init__.py +0 -0
  43. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/base/constructs.py +0 -0
  44. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/base/labeling.py +0 -0
  45. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/base/numpy_encoder.py +0 -0
  46. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/bindata.py +0 -0
  47. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/coefficients.py +0 -0
  48. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/environment/__init__.py +0 -0
  49. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/environment/environment.py +0 -0
  50. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/environment/wind.py +0 -0
  51. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/flight/__init__.py +0 -0
  52. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/flight/ardupilot.py +0 -0
  53. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/flight/fields.py +0 -0
  54. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/flight/parameters.py +0 -0
  55. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/flow.py +0 -0
  56. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/model/__init__.py +0 -0
  57. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/model/aerodynamic.py +0 -0
  58. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/model/thrust.py +0 -0
  59. /flightdata-0.2.23/flightdata/schemas/__init__.py → /flightdata-0.2.24/src/flightdata/py.typed +0 -0
  60. {flightdata-0.2.23/test → flightdata-0.2.24/src/flightdata/schemas}/__init__.py +0 -0
  61. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/schemas/fcj.py +0 -0
  62. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/scripts/collect_logs.py +0 -0
  63. {flightdata-0.2.23 → flightdata-0.2.24/src}/flightdata/scripts/flightline.py +0 -0
  64. {flightdata-0.2.23 → flightdata-0.2.24}/test/EmailedBox.f3a +0 -0
  65. {flightdata-0.2.23/test/base → flightdata-0.2.24/test}/__init__.py +0 -0
  66. {flightdata-0.2.23/test/test_environment → flightdata-0.2.24/test/base}/__init__.py +0 -0
  67. {flightdata-0.2.23 → flightdata-0.2.24}/test/base/test_base_constructs.py +0 -0
  68. {flightdata-0.2.23 → flightdata-0.2.24}/test/base/test_table.py +0 -0
  69. {flightdata-0.2.23 → flightdata-0.2.24}/test/conftest.py +0 -0
  70. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/bin_parser_GPS.csv +0 -0
  71. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/bin_parser_POS.csv +0 -0
  72. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/make_inputs.py +0 -0
  73. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/manual_F3A_P23.json +0 -0
  74. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/p23.BIN +0 -0
  75. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/p23.json +0 -0
  76. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/p23_box.f3a +0 -0
  77. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/p23_fc.json +0 -0
  78. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/p23_flight.json +0 -0
  79. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/vtol_hover.bin +0 -0
  80. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/vtol_hover.json +0 -0
  81. {flightdata-0.2.23 → flightdata-0.2.24}/test/data/web_bin_parse.json +0 -0
  82. {flightdata-0.2.23/test/test_model → flightdata-0.2.24/test/test_environment}/__init__.py +0 -0
  83. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_environment/test_environment.py +0 -0
  84. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_environment/test_environment_wind.py +0 -0
  85. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_fields.py +0 -0
  86. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_flight.py +0 -0
  87. {flightdata-0.2.23/test/test_state → flightdata-0.2.24/test/test_model}/__init__.py +0 -0
  88. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_model/test_model_coefficients.py +0 -0
  89. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_model/test_model_flow.py +0 -0
  90. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_origin.py +0 -0
  91. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_state/test_state.py +0 -0
  92. {flightdata-0.2.23 → flightdata-0.2.24}/test/test_state/test_state_conversions.py +0 -0
  93. {flightdata-0.2.23 → 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,27 +1,13 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: flightdata
3
- Version: 0.2.23
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: pydantic
15
- Requires-Dist: pfc-geometry>=0.2.12
16
- Requires-Dist: json_stream
17
- Provides-Extra: dev
18
- Requires-Dist: numpy; extra == "dev"
19
- Requires-Dist: pandas; extra == "dev"
20
- Requires-Dist: simplejson; extra == "dev"
21
- Requires-Dist: pydantic; extra == "dev"
22
- Requires-Dist: pfc-geometry>=0.2.12; extra == "dev"
23
- Requires-Dist: ardupilot-log-reader>=0.3.3; extra == "dev"
24
- Requires-Dist: pytest; extra == "dev"
25
11
 
26
12
  ## FlightData
27
13
  This repo is contains a set of datastructures and tools for handling flight log data.
@@ -49,4 +35,4 @@ pip install pfc-geometry
49
35
 
50
36
  ```bash
51
37
  pip install .
52
- ```
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
@@ -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)
@@ -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,52 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: flightdata
3
- Version: 0.2.23
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: pydantic
15
- Requires-Dist: pfc-geometry>=0.2.12
16
- Requires-Dist: json_stream
17
- Provides-Extra: dev
18
- Requires-Dist: numpy; extra == "dev"
19
- Requires-Dist: pandas; extra == "dev"
20
- Requires-Dist: simplejson; extra == "dev"
21
- Requires-Dist: pydantic; extra == "dev"
22
- Requires-Dist: pfc-geometry>=0.2.12; extra == "dev"
23
- Requires-Dist: ardupilot-log-reader>=0.3.3; extra == "dev"
24
- Requires-Dist: pytest; extra == "dev"
25
-
26
- ## FlightData
27
- This repo is contains a set of datastructures and tools for handling flight log data.
28
-
29
- ### Flight
30
- 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.
31
-
32
- ### Table
33
- 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.
34
-
35
- ### State
36
- 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.
37
-
38
-
39
- Further documentation will be provided here: https://pfcdocumentation.readthedocs.io/pyflightcoach/flightdata.html
40
-
41
-
42
- ### Installation
43
-
44
- ```bash
45
- pip install pfc-geometry
46
- ```
47
-
48
- ### Setup from source
49
-
50
- ```bash
51
- pip install .
52
- ```
@@ -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,15 +0,0 @@
1
- numpy
2
- pandas
3
- simplejson
4
- pydantic
5
- pfc-geometry>=0.2.12
6
- json_stream
7
-
8
- [dev]
9
- numpy
10
- pandas
11
- simplejson
12
- pydantic
13
- pfc-geometry>=0.2.12
14
- ardupilot-log-reader>=0.3.3
15
- 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,7 +0,0 @@
1
- numpy
2
- pandas
3
- simplejson
4
- pydantic
5
- pfc-geometry>=0.2.12
6
- ardupilot-log-reader>=0.3.3
7
- pytest
@@ -1,6 +0,0 @@
1
- numpy
2
- pandas
3
- simplejson
4
- pydantic
5
- pfc-geometry>=0.2.12
6
- 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