From b3186ffcacef4c6931bb9e477f082b7d5333a740 Mon Sep 17 00:00:00 2001 From: Yey007 <55263178+Yey007@users.noreply.github.com> Date: Sat, 9 Nov 2024 14:01:53 -0500 Subject: [PATCH 1/6] First try at features --- Makefile | 2 +- include/icp/icp.h | 6 +- include/icp/impl/feature_aware.h | 35 ++++++++++ lib/icp/icp.cpp | 10 +-- lib/icp/impl/feature_aware.cpp | 109 +++++++++++++++++++++++++++++++ lib/icp/impl/trimmed.cpp | 15 ++--- lib/icp/impl/vanilla.cpp | 11 ++-- 7 files changed, 162 insertions(+), 26 deletions(-) create mode 100644 include/icp/impl/feature_aware.h create mode 100644 lib/icp/impl/feature_aware.cpp diff --git a/Makefile b/Makefile index 466b7b1..b84c59b 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ $(TESTNAME): CFLAGS += -DTEST -include $(TESTDEPS) N := 1 -METHOD := trimmed +METHOD := feature_aware ifeq ($(shell uname), Darwin) AR := /usr/bin/libtool diff --git a/include/icp/icp.h b/include/icp/icp.h index f82c4e2..ad5a639 100644 --- a/include/icp/icp.h +++ b/include/icp/icp.h @@ -46,13 +46,11 @@ namespace icp { */ class ICP { protected: - // TODO: make this more general to allow for point-to-line - /** A point-to-point matching between `point` and `pair` at a distance - * of `sqrt(sq_dist)`. */ + /** A matching between `point` and `pair` at (arbitrary) cost `cost`. */ struct Match { size_t point; size_t pair; - double sq_dist; + double cost; }; /** The current point cloud transformation that is being optimized. diff --git a/include/icp/impl/feature_aware.h b/include/icp/impl/feature_aware.h new file mode 100644 index 0000000..f300a15 --- /dev/null +++ b/include/icp/impl/feature_aware.h @@ -0,0 +1,35 @@ +/* + * @author Utku Melemetci + */ + +#include "icp/icp.h" +#include + +namespace icp { + class FeatureAware final : public ICP { + using FeatureVector = Eigen::VectorXd; + + public: + FeatureAware(double feature_weight, int symmetric_neighbors); + FeatureAware(const Config& config); + ~FeatureAware(); + + void setup() override; + void iterate() override; + + private: + void compute_features(const std::vector& points, Vector cm, + std::vector& features); + + std::vector a_current; + + icp::Vector b_cm; + + std::vector a_features; + std::vector b_features; + + int symmetric_neighbors; + double feature_weight; + double neighbor_weight; + }; +} diff --git a/lib/icp/icp.cpp b/lib/icp/icp.cpp index bf9603a..a8dee4e 100644 --- a/lib/icp/icp.cpp +++ b/lib/icp/icp.cpp @@ -10,6 +10,7 @@ // methods for builtin registration #include "icp/impl/vanilla.h" #include "icp/impl/trimmed.h" +#include "icp/impl/feature_aware.h" namespace icp { struct Methods { @@ -37,10 +38,7 @@ namespace icp { current_cost = std::numeric_limits::infinity(); // Ensure arrays are the right size - const size_t n = this->a.size(); - if (matches.size() < n) { - matches.resize(n); - } + matches.resize(this->a.size()); // Per-instance customization routine setup(); @@ -49,7 +47,7 @@ namespace icp { double ICP::calculate_cost() const { double sum_squares{}; for (auto& match: matches) { - sum_squares += match.sq_dist; + sum_squares += match.cost; } return std::sqrt(sum_squares / a.size()); } @@ -98,6 +96,8 @@ namespace icp { [](const ICP::Config& config) { return std::make_unique(config); }); register_method("trimmed", [](const ICP::Config& config) { return std::make_unique(config); }); + register_method("feature_aware", + [](const ICP::Config& config) { return std::make_unique(config); }); } bool ICP::register_method(std::string name, diff --git a/lib/icp/impl/feature_aware.cpp b/lib/icp/impl/feature_aware.cpp new file mode 100644 index 0000000..25c17c7 --- /dev/null +++ b/lib/icp/impl/feature_aware.cpp @@ -0,0 +1,109 @@ +#include +#include +#include + +#include "icp/impl/feature_aware.h" + +namespace icp { + FeatureAware::FeatureAware(double feature_weight, int symmetric_neighbors) + : ICP(), + symmetric_neighbors(symmetric_neighbors), + feature_weight(feature_weight), + neighbor_weight(1 - feature_weight) {} + + FeatureAware::FeatureAware(const Config& config) + : FeatureAware(config.get("feature_weight", 1.0), + config.get("symmetric_neighbors", 5)) {} + + FeatureAware::~FeatureAware() {} + + void FeatureAware::setup() { + a_current.resize(a.size()); + a_features.resize(a.size()); + b_features.resize(b.size()); + + b_cm = get_centroid(b); + + compute_features(a, get_centroid(a), a_features); + compute_features(b, b_cm, b_features); + } + + void FeatureAware::iterate() { + const size_t n = a.size(); + const size_t m = b.size(); + + for (size_t i = 0; i < n; i++) { + a_current[i] = transform.apply_to(a[i]); + } + + auto a_current_cm = get_centroid(a_current); + + /* TODO #step Matching Step: */ + for (size_t i = 0; i < n; i++) { + matches[i].point = i; + matches[i].cost = std::numeric_limits::infinity(); + for (size_t j = 0; j < m; j++) { + // Point-to-point matching + double dist = (b[j] - a_current[i]).norm(); + double feature_dist = (b_features[j] - a_features[i]).norm(); + double cost = neighbor_weight * dist + feature_weight * feature_dist; + + if (cost < matches[i].cost) { + matches[i].cost = cost; + matches[i].pair = j; + } + } + } + + // TODO normalize features + + /* #step SVD: see \ref vanilla_icp for details. */ + Matrix N = Matrix::Zero(); + for (size_t i = 0; i < n; i++) { + N += (a_current[i] - a_current_cm) * (b[matches[i].pair] - b_cm).transpose(); + } + + auto svd = N.jacobiSvd(Eigen::ComputeFullU | Eigen::ComputeFullV); + Matrix U = svd.matrixU(); + Matrix V = svd.matrixV(); + Matrix R = V * U.transpose(); + + /* #step Reflection Handling: see \ref vanilla_icp for details. */ + if (R.determinant() < 0) { + V = V * Eigen::DiagonalMatrix(1, -1); + R = V * U.transpose(); + } + + transform.rotation = R * transform.rotation; + + /* #step Transformation Step: see \ref vanilla_icp for details. */ + transform.translation += b_cm - R * a_current_cm; + } + + void FeatureAware::compute_features(const std::vector& points, Vector cm, + std::vector& features) { + for (size_t i = 0; i < points.size(); i++) { + Vector p = points[i]; + double cm_dist_p = (p - cm).norm(); + + FeatureVector feature(2 * symmetric_neighbors); + feature.setZero(); + + size_t lower = std::max((size_t)0, i - symmetric_neighbors); + for (size_t j = lower; j < i; j++) { + Vector q = points[j]; + double cm_dist_q = (q - cm).norm(); + feature[j - lower] = cm_dist_q - cm_dist_p; + } + + size_t upper = std::min(points.size() - 1, i + symmetric_neighbors); + for (size_t j = i + 1; j <= upper; j++) { + Vector q = points[j]; + double cm_dist_q = (q - cm).norm(); + feature[j - i - 1 + symmetric_neighbors] = cm_dist_q - cm_dist_p; + } + + features[i] = feature; + } + } +} diff --git a/lib/icp/impl/trimmed.cpp b/lib/icp/impl/trimmed.cpp index 9ea6296..65bab15 100644 --- a/lib/icp/impl/trimmed.cpp +++ b/lib/icp/impl/trimmed.cpp @@ -24,14 +24,11 @@ namespace icp { Trimmed::Trimmed(double overlap_rate): ICP(), overlap_rate(overlap_rate) {} Trimmed::Trimmed(const Config& config) - : ICP(), overlap_rate(config.get("overlap_rate", 0.7)) {} + : ICP(), overlap_rate(config.get("overlap_rate", 0.9)) {} Trimmed::~Trimmed() {} void Trimmed::setup() { - if (a_current.size() < a.size()) { - a_current.resize(a.size()); - } - + a_current.resize(a.size()); b_cm = get_centroid(b); } @@ -46,13 +43,13 @@ namespace icp { /* #step Matching Step: see \ref vanilla_icp for details. */ for (size_t i = 0; i < n; i++) { matches[i].point = i; - matches[i].sq_dist = std::numeric_limits::infinity(); + matches[i].cost = std::numeric_limits::infinity(); for (size_t j = 0; j < m; j++) { // Point-to-point matching double dist_ij = (b[j] - a_current[i]).squaredNorm(); - if (dist_ij < matches[i].sq_dist) { - matches[i].sq_dist = dist_ij; + if (dist_ij < matches[i].cost) { + matches[i].cost = dist_ij; matches[i].pair = j; } } @@ -68,7 +65,7 @@ namespace icp { https://ieeexplore.ieee.org/abstract/document/1047997 */ std::sort(matches.begin(), matches.end(), - [](const auto& a, const auto& b) { return a.sq_dist < b.sq_dist; }); + [](const auto& a, const auto& b) { return a.cost < b.cost; }); size_t new_n = static_cast(overlap_rate * n); new_n = std::max(new_n, 1); diff --git a/lib/icp/impl/vanilla.cpp b/lib/icp/impl/vanilla.cpp index 499fec9..39d2ba7 100644 --- a/lib/icp/impl/vanilla.cpp +++ b/lib/icp/impl/vanilla.cpp @@ -22,10 +22,7 @@ namespace icp { Vanilla::~Vanilla() {} void Vanilla::setup() { - if (a_current.size() < a.size()) { - a_current.resize(a.size()); - } - + a_current.resize(a.size()); b_cm = get_centroid(b); } @@ -53,13 +50,13 @@ namespace icp { -> use k-d tree */ for (size_t i = 0; i < n; i++) { - matches[i].sq_dist = std::numeric_limits::infinity(); + matches[i].cost = std::numeric_limits::infinity(); for (size_t j = 0; j < m; j++) { // Point-to-point matching double dist_ij = (b[j] - a_current[i]).squaredNorm(); - if (dist_ij < matches[i].sq_dist) { - matches[i].sq_dist = dist_ij; + if (dist_ij < matches[i].cost) { + matches[i].cost = dist_ij; matches[i].pair = j; } } From d18304d5639f90a5a1413da31ebaa3384d4d6836 Mon Sep 17 00:00:00 2001 From: Yey007 <55263178+Yey007@users.noreply.github.com> Date: Sat, 9 Nov 2024 16:35:49 -0500 Subject: [PATCH 2/6] Fixed trimmed, it's actually works now lol. Feature based also done but not any better than trimmed. --- include/icp/impl/feature_aware.h | 21 +++++++++++++++ lib/icp/impl/feature_aware.cpp | 45 ++++++++++++++++++++++++-------- lib/icp/impl/trimmed.cpp | 4 +-- 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/include/icp/impl/feature_aware.h b/include/icp/impl/feature_aware.h index f300a15..0dd38a2 100644 --- a/include/icp/impl/feature_aware.h +++ b/include/icp/impl/feature_aware.h @@ -21,6 +21,25 @@ namespace icp { void compute_features(const std::vector& points, Vector cm, std::vector& features); + template + Eigen::MatrixXd compute_norm_dists(const std::vector& first, + const std::vector& second) { + Eigen::MatrixXd norm_dists(first.size(), second.size()); + double max_dist = std::numeric_limits::min(); + for (size_t i = 0; i < first.size(); i++) { + for (size_t j = 0; j < second.size(); j++) { + double dist = (first[i] - second[j]).norm(); + norm_dists(i, j) = dist; + if (dist > max_dist) { + max_dist = dist; + } + } + } + + norm_dists /= max_dist; + return norm_dists; + } + std::vector a_current; icp::Vector b_cm; @@ -28,6 +47,8 @@ namespace icp { std::vector a_features; std::vector b_features; + Eigen::MatrixXd norm_feature_dists; + int symmetric_neighbors; double feature_weight; double neighbor_weight; diff --git a/lib/icp/impl/feature_aware.cpp b/lib/icp/impl/feature_aware.cpp index 25c17c7..17d00cd 100644 --- a/lib/icp/impl/feature_aware.cpp +++ b/lib/icp/impl/feature_aware.cpp @@ -9,11 +9,13 @@ namespace icp { : ICP(), symmetric_neighbors(symmetric_neighbors), feature_weight(feature_weight), - neighbor_weight(1 - feature_weight) {} + neighbor_weight(1 - feature_weight) { + std::cout << "Feature weight: " << feature_weight << std::endl; + } FeatureAware::FeatureAware(const Config& config) - : FeatureAware(config.get("feature_weight", 1.0), - config.get("symmetric_neighbors", 5)) {} + : FeatureAware(config.get("feature_weight", 0.7), + config.get("symmetric_neighbors", 10)) {} FeatureAware::~FeatureAware() {} @@ -26,6 +28,8 @@ namespace icp { compute_features(a, get_centroid(a), a_features); compute_features(b, b_cm, b_features); + + norm_feature_dists = compute_norm_dists(a_features, b_features); } void FeatureAware::iterate() { @@ -38,14 +42,15 @@ namespace icp { auto a_current_cm = get_centroid(a_current); - /* TODO #step Matching Step: */ + /* TODO: write smth #step Matching Step: */ + Eigen::MatrixXd norm_dists = compute_norm_dists(a_current, b); + for (size_t i = 0; i < n; i++) { matches[i].point = i; matches[i].cost = std::numeric_limits::infinity(); for (size_t j = 0; j < m; j++) { - // Point-to-point matching - double dist = (b[j] - a_current[i]).norm(); - double feature_dist = (b_features[j] - a_features[i]).norm(); + double dist = norm_dists(i, j); + double feature_dist = norm_feature_dists(i, j); double cost = neighbor_weight * dist + feature_weight * feature_dist; if (cost < matches[i].cost) { @@ -55,12 +60,30 @@ namespace icp { } } - // TODO normalize features + /* + #step + Trimming Step: see \ref trimmed for details. + */ + std::sort(matches.begin(), matches.end(), + [](const auto& a, const auto& b) { return a.cost < b.cost; }); + size_t new_n = static_cast(0.7 * n); + new_n = std::max(new_n, 1); // TODO: bad for scans with 0 points + + // yeah, i know this is inefficient. we'll get back to it later. + std::vector trimmed_current(new_n); + std::vector trimmed_b(new_n); + for (size_t i = 0; i < new_n; i++) { + trimmed_current[i] = a_current[matches[i].point]; + trimmed_b[i] = b[matches[i].pair]; + } + + icp::Vector trimmed_cm = get_centroid(trimmed_current); + icp::Vector trimmed_b_cm = get_centroid(trimmed_b); /* #step SVD: see \ref vanilla_icp for details. */ Matrix N = Matrix::Zero(); - for (size_t i = 0; i < n; i++) { - N += (a_current[i] - a_current_cm) * (b[matches[i].pair] - b_cm).transpose(); + for (size_t i = 0; i < new_n; i++) { + N += (trimmed_current[i] - trimmed_cm) * (trimmed_b[i] - trimmed_b_cm).transpose(); } auto svd = N.jacobiSvd(Eigen::ComputeFullU | Eigen::ComputeFullV); @@ -77,7 +100,7 @@ namespace icp { transform.rotation = R * transform.rotation; /* #step Transformation Step: see \ref vanilla_icp for details. */ - transform.translation += b_cm - R * a_current_cm; + transform.translation += trimmed_b_cm - R * trimmed_cm; } void FeatureAware::compute_features(const std::vector& points, Vector cm, diff --git a/lib/icp/impl/trimmed.cpp b/lib/icp/impl/trimmed.cpp index 65bab15..97c3970 100644 --- a/lib/icp/impl/trimmed.cpp +++ b/lib/icp/impl/trimmed.cpp @@ -67,14 +67,14 @@ namespace icp { std::sort(matches.begin(), matches.end(), [](const auto& a, const auto& b) { return a.cost < b.cost; }); size_t new_n = static_cast(overlap_rate * n); - new_n = std::max(new_n, 1); + new_n = std::max(new_n, 1); // TODO: bad for scans with 0 points // yeah, i know this is inefficient. we'll get back to it later. std::vector trimmed_current(new_n); std::vector trimmed_b(new_n); for (size_t i = 0; i < new_n; i++) { trimmed_current[i] = a_current[matches[i].point]; - trimmed_b[i] = b[matches[i].point]; + trimmed_b[i] = b[matches[i].pair]; } icp::Vector trimmed_cm = get_centroid(trimmed_current); From 5fd29a9dcf7af2faa316dce0116467d0914bbea8 Mon Sep 17 00:00:00 2001 From: Yey007 <55263178+Yey007@users.noreply.github.com> Date: Sat, 9 Nov 2024 16:56:27 -0500 Subject: [PATCH 3/6] Init uv project in script directory --- script/.python-version | 1 + script/hello.py | 6 + {math => script/math}/icp_math.py | 0 script/pyproject.toml | 8 + script/rosbag_extract.py | 0 script/uv.lock | 843 ++++++++++++++++++++++++++++++ 6 files changed, 858 insertions(+) create mode 100644 script/.python-version create mode 100644 script/hello.py rename {math => script/math}/icp_math.py (100%) create mode 100644 script/pyproject.toml create mode 100644 script/rosbag_extract.py create mode 100644 script/uv.lock diff --git a/script/.python-version b/script/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/script/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/script/hello.py b/script/hello.py new file mode 100644 index 0000000..098ae68 --- /dev/null +++ b/script/hello.py @@ -0,0 +1,6 @@ +def main(): + print("Hello from script!") + + +if __name__ == "__main__": + main() diff --git a/math/icp_math.py b/script/math/icp_math.py similarity index 100% rename from math/icp_math.py rename to script/math/icp_math.py diff --git a/script/pyproject.toml b/script/pyproject.toml new file mode 100644 index 0000000..81a3f66 --- /dev/null +++ b/script/pyproject.toml @@ -0,0 +1,8 @@ +[project] +name = "script" +version = "0.1.0" +description = "ICP scripts" +requires-python = ">=3.12" +dependencies = [ + "bagpy>=0.5", +] diff --git a/script/rosbag_extract.py b/script/rosbag_extract.py new file mode 100644 index 0000000..e69de29 diff --git a/script/uv.lock b/script/uv.lock new file mode 100644 index 0000000..9b7cc5c --- /dev/null +++ b/script/uv.lock @@ -0,0 +1,843 @@ +version = 1 +requires-python = ">=3.12" + +[[package]] +name = "asttokens" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/1d/f03bcb60c4a3212e15f99a56085d93093a497718adf828d050b9d675da81/asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0", size = 62284 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/86/4736ac618d82a20d87d2f92ae19441ebc7ac9e7a581d7e58bbe79233b24a/asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24", size = 27764 }, +] + +[[package]] +name = "bagpy" +version = "0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bitstring" }, + { name = "importlib-resources" }, + { name = "ipython" }, + { name = "jinja2" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "py3rosmsgs" }, + { name = "pycryptodomex" }, + { name = "pyserial" }, + { name = "pytest" }, + { name = "pyyaml" }, + { name = "rospkg" }, + { name = "seaborn" }, + { name = "setuptools-scm" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/cc/0743a31317afb9aeba7ed02f06fce8ff6ce5a60b9c30023c70dcdd98488d/bagpy-0.5-py2.py3-none-any.whl", hash = "sha256:42789cdc0e35bbb1a0490a47becaa96adcc42258edc0b8cf7a4747589bef1c47", size = 14549 }, +] + +[[package]] +name = "bitarray" +version = "2.9.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/c7/a85f206e6b2fddb93964efe53685ad8da7d856e6975b005ed6a88f25b010/bitarray-2.9.3.tar.gz", hash = "sha256:9eff55cf189b0c37ba97156a00d640eb7392db58a8049be6f26ff2712b93fa89", size = 132724 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/4d/00848351d0ad9b5dcdcf8efcaeae8e6eb1ed7bbef63067281c091e5ba635/bitarray-2.9.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dc47be026f76f1728af00dc7140cec8483fe2f0c476bbf2a59ef47865e00ff96", size = 177860 }, + { url = "https://files.pythonhosted.org/packages/b6/68/bbf3d6e5b30def505bb3ab97f8793624667949c337f4058178770a3e2522/bitarray-2.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:82b091742ff511cdb06f90af0d2c22e7af3dbff9b8212e2e0d88dfef6a8570b3", size = 127932 }, + { url = "https://files.pythonhosted.org/packages/c2/15/d90792b7298541f99d9dbf1df92b78269012a19d9214dde2ff7fddaea201/bitarray-2.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d5edb4302a0e3a3d1d0eeb891de3c615d4cb7a446fb41c21eecdcfb29400a6f", size = 125863 }, + { url = "https://files.pythonhosted.org/packages/71/61/da6fc35417f82db5015315fce35e30b67734a090cf2dee5b9a143930a638/bitarray-2.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4786c5525069c19820549dd2f42d33632bc42959ad167138bd8ee5024b922b", size = 297980 }, + { url = "https://files.pythonhosted.org/packages/0c/0c/17a887ecf664972ea6b2c2529e05f867e136ad88b14d2c62df93bca199f5/bitarray-2.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bfe2de2b4df61ccb9244871a0fdf1fff83be0c1bd7187048c3cf7f81c5fe631", size = 311959 }, + { url = "https://files.pythonhosted.org/packages/06/39/6a7d0d1d8aece919b33da04c61e4752571ff6fef392d2adea53aa1e01fc3/bitarray-2.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31e4f69538f95d2934587d957eea0d283162322dd1af29e57122b20b8cd60f92", size = 315861 }, + { url = "https://files.pythonhosted.org/packages/02/9f/55ff793e2dc23c446e7bb2516d833ccc2416c5dc4aa0cecbf3d8d6adfa39/bitarray-2.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca44908b2bc08d8995770018638d62626706864f9c599b7818225a12f3dbc2c", size = 298715 }, + { url = "https://files.pythonhosted.org/packages/d2/e1/e1aa0ca6d6dbe0a2a97d287e717fc640d7d9948d83d1eeb6ad24fe8e978b/bitarray-2.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:279f8de5d251ee521e365df29c927d9b5732f1ed4f373d2dbbd278fcbad94ff5", size = 289206 }, + { url = "https://files.pythonhosted.org/packages/f1/76/c57e4d4eca18291125f7619918d32bc626d58361c625771e30b08c5c15cd/bitarray-2.9.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49bb631b38431c09ecd534d56ef04264397d24d18c4ee6653c84e14ae09d92d", size = 292131 }, + { url = "https://files.pythonhosted.org/packages/13/2b/efb5d63052c397415f2502b905a262c8850a1e9f7c9262141fd47cbc76da/bitarray-2.9.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:192bffc93ee9a5b6c833c98d1dcc81f5633ddd726b85e18341387d0c1d51f691", size = 284634 }, + { url = "https://files.pythonhosted.org/packages/f3/c0/1493e5e9e93e251f24382f113efe181ba055b579c2c211d0f1c73e1b062d/bitarray-2.9.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c516cec28c6511df51d87033f40ec420324a2247469b0c989d344f4d27ea37d2", size = 307289 }, + { url = "https://files.pythonhosted.org/packages/1f/e6/61a25b402fa48b1bc771c545677787f2bd7b55d8b930f46ebe2462e8e466/bitarray-2.9.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:66241cb9a1c1db294f46cd440141e57e8242874e38f3f61877f72d92ae14768a", size = 320414 }, + { url = "https://files.pythonhosted.org/packages/7f/c6/a838d147dce87e545988e06d01fb2b3da5d1d8e6e5d839150cc64e793dba/bitarray-2.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab1f0e7631110c89bea7b605c0c35832333eb9cc97e5de05d71c76d42a1858c9", size = 291664 }, + { url = "https://files.pythonhosted.org/packages/00/5c/481d564ecdf638758e71e587d001762e9ab8fdce12a1b741d14c00a5b9f2/bitarray-2.9.3-cp312-cp312-win32.whl", hash = "sha256:42aa5bee6fe8ad3385eaf5c6585016bbc38a7b75efb52ce5c6f8e00e05237dfa", size = 118715 }, + { url = "https://files.pythonhosted.org/packages/4d/42/1d3dffa5f680cf8de3712f661f6b2566205c9d7ac0776cb134b678f3abd3/bitarray-2.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:dc3fd647d845b94fac3652390866f921f914a17f3807a031c826f68dae3f43e3", size = 126125 }, + { url = "https://files.pythonhosted.org/packages/4c/1e/9f6c2efc108959d88e6a0e7ad575fd18073cf1d9e723cf029bb2fa96a58c/bitarray-2.9.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fcfcc1989e3e021a282624017b7fb754210f5332e933b1c3ebc79643727b6551", size = 177843 }, + { url = "https://files.pythonhosted.org/packages/ce/40/816d22035e98e4bdcb3b7dcfd4d9c0fe36e4c3af481ad2efd5b526676a3c/bitarray-2.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:71b1e229a706798a9e106ca7b03d4c63455deb40b18c92950ec073a05a8f8285", size = 127931 }, + { url = "https://files.pythonhosted.org/packages/ad/e5/f33509aedac5c76f97420c62f7df6df837eaaf4be34027a40275f1b68cdf/bitarray-2.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4bb49556d3d505d24c942a4206ad4d0d40e89fa3016a7ea6edc994d5c08d4a8e", size = 125848 }, + { url = "https://files.pythonhosted.org/packages/6d/e7/f08ef676011357f63e99314bc691bf8b164ef8a60da0a730fc66448e798e/bitarray-2.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4466aa1e533a59d5f7fd37219d154ec3f2ba73fce3d8a2e11080ec475bc15fb", size = 297881 }, + { url = "https://files.pythonhosted.org/packages/46/54/ffd6a59504774cc9324cedf0bfe54f612b049cf7718c0142d510605f4635/bitarray-2.9.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9b75adc0fd0bf278bea89dc3d679d74e10d2df98d3d074b7f3d36f323138818", size = 311819 }, + { url = "https://files.pythonhosted.org/packages/63/dd/16ea5110eaa2b941f670564bff021229b99121ea235276c368b37386a5c0/bitarray-2.9.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701582bbbeac372b1cd8a3c9daf6c2336dc2d22e14373a6271d788bc4f2b6edc", size = 315937 }, + { url = "https://files.pythonhosted.org/packages/56/f8/7a8690306935b2cd4741e7c1d99d36b21bb3a319f7981e48ca1e2d18000c/bitarray-2.9.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea1f119668bbdbd68008031491515e84441e505163918819994b28f295f762c", size = 298593 }, + { url = "https://files.pythonhosted.org/packages/51/2f/fdc1e6ada45b3154f1fb3b678b1ef3328cb4fa140c2310afd4decd2e03d9/bitarray-2.9.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f400bc18a70bfdb073532c3054ecd78a0e64f96ff7b6140adde5b122580ec2b", size = 289192 }, + { url = "https://files.pythonhosted.org/packages/b1/4a/728c6a561a7d5f7b27749ead3305f18411f368773ecf3a9689a23315a0e6/bitarray-2.9.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:aacff5656fb3e15cede7d02903da2634d376aa928d7a81ec8df19b0724d7972a", size = 292124 }, + { url = "https://files.pythonhosted.org/packages/2b/e5/6ce6969a16e6637881aa238b99b18f516f8f1d91c2bb16bc49431897e160/bitarray-2.9.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8a2ae42a14cbf766d4478d7101da6359b0648dd813e60eb3486ac56ad2f5add3", size = 284697 }, + { url = "https://files.pythonhosted.org/packages/bd/4a/54093d281e3f5a4264c2fc264a55b39a41b4d18a4c8f5216eeb1411c320f/bitarray-2.9.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:616698edb547d10f0b960cb9f2e8629c55a420dd4c2b1ab46706f49a1815621d", size = 307361 }, + { url = "https://files.pythonhosted.org/packages/8a/85/051ec466663a1517fbd98fc4e6ed96bb70a9cb06b99a8f868d98b0322244/bitarray-2.9.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f277c50ba184929dfeed39b6cf9468e3446093521b0aeb52bd54a21ca08f5473", size = 320501 }, + { url = "https://files.pythonhosted.org/packages/e6/6e/50f16db80ef267eacd20e8a77a7efbfe1a81d64bf3ee59655328c8a7ab6d/bitarray-2.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:661237739b385c90d8837d5e96b06de093cc6e610236977e198f88f5a979686e", size = 291703 }, + { url = "https://files.pythonhosted.org/packages/87/0f/df8b9facb4f5d4f86244ae03d56975850d0a28a14c854e87649e3941f29b/bitarray-2.9.3-cp313-cp313-win32.whl", hash = "sha256:68acec6c19d798051f178a1197b76f891985f683f95a4b12811b68e58b080f5a", size = 118699 }, + { url = "https://files.pythonhosted.org/packages/d3/7a/c2f534d51d8566c966e1fdb33b3370d6b972336cc9aa3aadf0cd5c8a026f/bitarray-2.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:3055720afdcfd7e8f630fa16db7bed7e55c9d0a1f4756195e3b250e203f3b436", size = 126123 }, +] + +[[package]] +name = "bitstring" +version = "4.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bitarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/d0/d6f57409bb50f54fe2894ec5a50b5c04cb41aa814c3bdb8a7eeb4a0f7697/bitstring-4.2.3.tar.gz", hash = "sha256:e0c447af3fda0d114f77b88c2d199f02f97ee7e957e6d719f40f41cf15fbb897", size = 250537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/5b/62278b308e45ba5edb4b6390a69033def7ade220890cafaaba9ef656a302/bitstring-4.2.3-py3-none-any.whl", hash = "sha256:20ed0036e2fcf0323acb0f92f0b7b178516a080f3e91061470aa019ac4ede404", size = 71671 }, +] + +[[package]] +name = "catkin-pkg" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/a2/88f8ba42a0119833887b8afe159f6e3ae96e2700720baf461eeabcc6acd8/catkin_pkg-1.0.0.tar.gz", hash = "sha256:476e9f52917282f464739241b4bcaf5ebbfba9a7a68d9af8f875225feac0e1b5", size = 64861 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/f7/86d933ec31f00450f513ef110fa9c0e5da4c6e2c992933a35c8d8fe7d01f/catkin_pkg-1.0.0-py3-none-any.whl", hash = "sha256:10a6589e9edf3cd5bd18e35e094d20b516e6351bcf0da891c28a0ff526fdb7cc", size = 75996 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "contourpy" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f", size = 267838 }, + { url = "https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6", size = 251549 }, + { url = "https://files.pythonhosted.org/packages/51/3d/aa0fe6ae67e3ef9f178389e4caaaa68daf2f9024092aa3c6032e3d174670/contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", size = 303177 }, + { url = "https://files.pythonhosted.org/packages/56/c3/c85a7e3e0cab635575d3b657f9535443a6f5d20fac1a1911eaa4bbe1aceb/contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", size = 341735 }, + { url = "https://files.pythonhosted.org/packages/dd/8d/20f7a211a7be966a53f474bc90b1a8202e9844b3f1ef85f3ae45a77151ee/contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", size = 314679 }, + { url = "https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", size = 320549 }, + { url = "https://files.pythonhosted.org/packages/0f/96/fdb2552a172942d888915f3a6663812e9bc3d359d53dafd4289a0fb462f0/contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", size = 1263068 }, + { url = "https://files.pythonhosted.org/packages/2a/25/632eab595e3140adfa92f1322bf8915f68c932bac468e89eae9974cf1c00/contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", size = 1322833 }, + { url = "https://files.pythonhosted.org/packages/73/e3/69738782e315a1d26d29d71a550dbbe3eb6c653b028b150f70c1a5f4f229/contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", size = 172681 }, + { url = "https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", size = 218283 }, + { url = "https://files.pythonhosted.org/packages/53/a1/d20415febfb2267af2d7f06338e82171824d08614084714fb2c1dac9901f/contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3", size = 267879 }, + { url = "https://files.pythonhosted.org/packages/aa/45/5a28a3570ff6218d8bdfc291a272a20d2648104815f01f0177d103d985e1/contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7", size = 251573 }, + { url = "https://files.pythonhosted.org/packages/39/1c/d3f51540108e3affa84f095c8b04f0aa833bb797bc8baa218a952a98117d/contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", size = 303184 }, + { url = "https://files.pythonhosted.org/packages/00/56/1348a44fb6c3a558c1a3a0cd23d329d604c99d81bf5a4b58c6b71aab328f/contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", size = 340262 }, + { url = "https://files.pythonhosted.org/packages/2b/23/00d665ba67e1bb666152131da07e0f24c95c3632d7722caa97fb61470eca/contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", size = 313806 }, + { url = "https://files.pythonhosted.org/packages/5a/42/3cf40f7040bb8362aea19af9a5fb7b32ce420f645dd1590edcee2c657cd5/contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", size = 319710 }, + { url = "https://files.pythonhosted.org/packages/05/32/f3bfa3fc083b25e1a7ae09197f897476ee68e7386e10404bdf9aac7391f0/contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", size = 1264107 }, + { url = "https://files.pythonhosted.org/packages/1c/1e/1019d34473a736664f2439542b890b2dc4c6245f5c0d8cdfc0ccc2cab80c/contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", size = 1322458 }, + { url = "https://files.pythonhosted.org/packages/22/85/4f8bfd83972cf8909a4d36d16b177f7b8bdd942178ea4bf877d4a380a91c/contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", size = 172643 }, + { url = "https://files.pythonhosted.org/packages/cc/4a/fb3c83c1baba64ba90443626c228ca14f19a87c51975d3b1de308dd2cf08/contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", size = 218301 }, + { url = "https://files.pythonhosted.org/packages/76/65/702f4064f397821fea0cb493f7d3bc95a5d703e20954dce7d6d39bacf378/contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8", size = 278972 }, + { url = "https://files.pythonhosted.org/packages/80/85/21f5bba56dba75c10a45ec00ad3b8190dbac7fd9a8a8c46c6116c933e9cf/contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b", size = 263375 }, + { url = "https://files.pythonhosted.org/packages/0a/64/084c86ab71d43149f91ab3a4054ccf18565f0a8af36abfa92b1467813ed6/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", size = 307188 }, + { url = "https://files.pythonhosted.org/packages/3d/ff/d61a4c288dc42da0084b8d9dc2aa219a850767165d7d9a9c364ff530b509/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", size = 345644 }, + { url = "https://files.pythonhosted.org/packages/ca/aa/00d2313d35ec03f188e8f0786c2fc61f589306e02fdc158233697546fd58/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", size = 317141 }, + { url = "https://files.pythonhosted.org/packages/8d/6a/b5242c8cb32d87f6abf4f5e3044ca397cb1a76712e3fa2424772e3ff495f/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", size = 323469 }, + { url = "https://files.pythonhosted.org/packages/6f/a6/73e929d43028a9079aca4bde107494864d54f0d72d9db508a51ff0878593/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", size = 1260894 }, + { url = "https://files.pythonhosted.org/packages/2b/1e/1e726ba66eddf21c940821df8cf1a7d15cb165f0682d62161eaa5e93dae1/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", size = 1314829 }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + +[[package]] +name = "decorator" +version = "5.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", size = 35016 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 }, +] + +[[package]] +name = "docutils" +version = "0.21.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, +] + +[[package]] +name = "executing" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/e3/7d45f492c2c4a0e8e0fad57d081a7c8a0286cdd86372b070cca1ec0caa1e/executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab", size = 977485 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/fd/afcd0496feca3276f509df3dbd5dae726fcc756f1a08d9e25abe1733f962/executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf", size = 25805 }, +] + +[[package]] +name = "fonttools" +version = "4.54.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/1d/70b58e342e129f9c0ce030029fb4b2b0670084bbbfe1121d008f6a1e361c/fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285", size = 3463867 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/b6/f9d365932dcefefdcc794985f8846471e60932070c557e0f66ed195fccec/fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d", size = 2761873 }, + { url = "https://files.pythonhosted.org/packages/67/9d/cfbfe36e5061a8f68b154454ba2304eb01f40d4ba9b63e41d9058909baed/fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08", size = 2251828 }, + { url = "https://files.pythonhosted.org/packages/90/41/5573e074739efd9227dd23647724f01f6f07ad062fe09d02e91c5549dcf7/fonttools-4.54.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263", size = 4792544 }, + { url = "https://files.pythonhosted.org/packages/08/07/aa85cc62abcc940b25d14b542cf585eebf4830032a7f6a1395d696bb3231/fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab", size = 4875892 }, + { url = "https://files.pythonhosted.org/packages/47/23/c5726c2615446c498a976bed21c35a242a97eee39930a2655d616ca885cc/fonttools-4.54.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d", size = 4769822 }, + { url = "https://files.pythonhosted.org/packages/8f/7b/87f7f7d35e0732ac67422dfa6f05e2b568fb6ca2dcd7f3e4f500293cfd75/fonttools-4.54.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714", size = 5029455 }, + { url = "https://files.pythonhosted.org/packages/e0/09/241aa498587889576838aa73c78d22b70ce06970807a5475d372baa7ccb7/fonttools-4.54.1-cp312-cp312-win32.whl", hash = "sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac", size = 2154411 }, + { url = "https://files.pythonhosted.org/packages/b9/0a/a57caaff3bc880779317cb157e5b49dc47fad54effe027016abd355b0651/fonttools-4.54.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e", size = 2200412 }, + { url = "https://files.pythonhosted.org/packages/05/3d/cc515cae84a11d696f2cb7c139a90997b15f02e2e97ec09a5d79302cbcd7/fonttools-4.54.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff", size = 2749174 }, + { url = "https://files.pythonhosted.org/packages/03/03/05d4b22d1a674d066380657f60bbc0eda2d206446912e676d1a33a206878/fonttools-4.54.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb", size = 2246267 }, + { url = "https://files.pythonhosted.org/packages/52/c3/bb6086adb675e8b0963a7dbb7769e7118c95b687dd318cd660aefd4b4c8c/fonttools-4.54.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a", size = 4855090 }, + { url = "https://files.pythonhosted.org/packages/80/a1/d7192b6a104e3f9ea8e5b1c3463a6240399f0fa826a782eff636cbe0495a/fonttools-4.54.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c", size = 5005449 }, + { url = "https://files.pythonhosted.org/packages/5a/6c/ecfd5c6cd8c9006e85b128d073af26bb263e8aa47506374cb14b25bcf65f/fonttools-4.54.1-cp313-cp313-win32.whl", hash = "sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58", size = 2152496 }, + { url = "https://files.pythonhosted.org/packages/63/da/f7a1d837de419e3d4cccbd0dbf53c7399f610f65ceb9bcbf2480f3ae7950/fonttools-4.54.1-cp313-cp313-win_amd64.whl", hash = "sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d", size = 2197257 }, + { url = "https://files.pythonhosted.org/packages/57/5e/de2e6e51cb6894f2f2bc2641f6c845561361b622e96df3cca04df77222c9/fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd", size = 1096920 }, +] + +[[package]] +name = "gnupg" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "psutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/6c/21f99b450d2f0821ff35343b9a7843b71e98de35192454606435c72991a8/gnupg-2.3.1.tar.gz", hash = "sha256:8db5a05c369dbc231dab4c98515ce828f2dffdc14f1534441a6c59b71c6d2031", size = 100437 } + +[[package]] +name = "importlib-resources" +version = "6.4.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/be/f3e8c6081b684f176b761e6a2fef02a0be939740ed6f54109a2951d806f3/importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065", size = 43372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717", size = 36115 }, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, +] + +[[package]] +name = "ipython" +version = "8.29.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/e0/a3f36dde97e12121106807d80485423ae4c5b27ce60d40d4ab0bab18a9db/ipython-8.29.0.tar.gz", hash = "sha256:40b60e15b22591450eef73e40a027cf77bd652e757523eebc5bd7c7c498290eb", size = 5497513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/a5/c15ed187f1b3fac445bb42a2dedd8dec1eee1718b35129242049a13a962f/ipython-8.29.0-py3-none-any.whl", hash = "sha256:0188a1bd83267192123ccea7f4a8ed0a78910535dbaa3f37671dca76ebd429c8", size = 819911 }, +] + +[[package]] +name = "jedi" +version = "0.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/99/99b493cec4bf43176b678de30f81ed003fd6a647a301b9c927280c600f0a/jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", size = 1227821 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/9f/bc63f0f0737ad7a60800bfd472a4836661adae21f9c2535f3957b1e54ceb/jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0", size = 1569361 }, +] + +[[package]] +name = "jinja2" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/a5/429efc6246119e1e3fbf562c00187d04e83e54619249eb732bb423efa6c6/Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7", size = 269196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/9a/e5d9ec41927401e41aea8af6d16e78b5e612bca4699d417f646a9610a076/Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", size = 133630 }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/9c/0a11c714cf8b6ef91001c8212c4ef207f772dd84540104952c45c1f0a249/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", size = 121808 }, + { url = "https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", size = 65531 }, + { url = "https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", size = 63894 }, + { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296 }, + { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450 }, + { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168 }, + { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308 }, + { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186 }, + { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877 }, + { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204 }, + { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461 }, + { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358 }, + { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119 }, + { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367 }, + { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884 }, + { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528 }, + { url = "https://files.pythonhosted.org/packages/c4/06/7da99b04259b0f18b557a4effd1b9c901a747f7fdd84cf834ccf520cb0b2/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", size = 121913 }, + { url = "https://files.pythonhosted.org/packages/97/f5/b8a370d1aa593c17882af0a6f6755aaecd643640c0ed72dcfd2eafc388b9/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", size = 65627 }, + { url = "https://files.pythonhosted.org/packages/2a/fc/6c0374f7503522539e2d4d1b497f5ebad3f8ed07ab51aed2af988dd0fb65/kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", size = 63888 }, + { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145 }, + { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448 }, + { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750 }, + { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175 }, + { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963 }, + { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220 }, + { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463 }, + { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842 }, + { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635 }, + { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556 }, + { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364 }, + { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887 }, + { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "matplotlib" +version = "3.9.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/d8/3d7f706c69e024d4287c1110d74f7dabac91d9843b99eadc90de9efc8869/matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92", size = 36088381 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/de/54f7f38ce6de79cb77d513bb3eaa4e0b1031e9fd6022214f47943fa53a88/matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9", size = 7892511 }, + { url = "https://files.pythonhosted.org/packages/35/3e/5713b84a02b24b2a4bd4d6673bfc03017e6654e1d8793ece783b7ed4d484/matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d", size = 7769370 }, + { url = "https://files.pythonhosted.org/packages/5b/bd/c404502aa1824456d2862dd6b9b0c1917761a51a32f7f83ff8cf94b6d117/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7", size = 8193260 }, + { url = "https://files.pythonhosted.org/packages/27/75/de5b9cd67648051cae40039da0c8cbc497a0d99acb1a1f3d087cd66d27b7/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c", size = 8306310 }, + { url = "https://files.pythonhosted.org/packages/de/e3/2976e4e54d7ee76eaf54b7639fdc10a223d05c2bdded7045233e9871e469/matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e", size = 9086717 }, + { url = "https://files.pythonhosted.org/packages/d2/92/c2b9464a0562feb6ae780bdc152364810862e07ef5e6affa2b7686028db2/matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3", size = 7832805 }, + { url = "https://files.pythonhosted.org/packages/5c/7f/8932eac316b32f464b8f9069f151294dcd892c8fbde61fe8bcd7ba7f7f7e/matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9", size = 7893012 }, + { url = "https://files.pythonhosted.org/packages/90/89/9db9db3dd0ff3e2c49e452236dfe29e60b5586a88f8928ca1d153d0da8b5/matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa", size = 7769810 }, + { url = "https://files.pythonhosted.org/packages/67/26/d2661cdc2e1410b8929c5f12dfd521e4528abfed1b3c3d5a28ac48258b43/matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b", size = 8193779 }, + { url = "https://files.pythonhosted.org/packages/95/70/4839eaa672bf4eacc98ebc8d23633e02b6daf39e294e7433c4ab11a689be/matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413", size = 8306260 }, + { url = "https://files.pythonhosted.org/packages/88/62/7b263b2cb2724b45d3a4f9c8c6137696cc3ef037d44383fb01ac2a9555c2/matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b", size = 9086073 }, + { url = "https://files.pythonhosted.org/packages/b0/6d/3572fe243c74112fef120f0bc86f5edd21f49b60e8322fc7f6a01fe945dd/matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49", size = 7833041 }, + { url = "https://files.pythonhosted.org/packages/03/8f/9d505be3eb2f40ec731674fb6b47d10cc3147bbd6a9ea7a08c8da55415c6/matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03", size = 7933657 }, + { url = "https://files.pythonhosted.org/packages/5d/68/44b458b9794bcff2a66921f8c9a8110a50a0bb099bd5f7cabb428a1dc765/matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30", size = 7799276 }, + { url = "https://files.pythonhosted.org/packages/47/79/8486d4ddcaaf676314b5fb58e8fe19d1a6210a443a7c31fa72d4215fcb87/matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51", size = 8221027 }, + { url = "https://files.pythonhosted.org/packages/56/62/72a472181578c3d035dcda0d0fa2e259ba2c4cb91132588a348bb705b70d/matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c", size = 8329097 }, + { url = "https://files.pythonhosted.org/packages/01/8a/760f7fce66b39f447ad160800619d0bd5d0936d2b4633587116534a4afe0/matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e", size = 9093770 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, +] + +[[package]] +name = "numpy" +version = "2.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/ca/1166b75c21abd1da445b97bf1fa2f14f423c6cfb4fc7c4ef31dccf9f6a94/numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761", size = 20166090 } +wheels = [ + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/ac/b6/26108cf2cfa5c7e03fb969b595c93131eab4a399762b51ce9ebec2332e80/numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9", size = 6239077 }, + { url = "https://files.pythonhosted.org/packages/a6/84/fa11dad3404b7634aaab50733581ce11e5350383311ea7a7010f464c0170/numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a", size = 12566858 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/e9/6a/d64514dcecb2ee70bfdfad10c42b76cab657e7ee31944ff7a600f141d9e9/numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f", size = 6236021 }, + { url = "https://files.pythonhosted.org/packages/bb/f9/12297ed8d8301a401e7d8eb6b418d32547f1d700ed3c038d325a605421a4/numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed", size = 12560405 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/24/d7/78a40ed1d80e23a774cb8a34ae8a9493ba1b4271dde96e56ccdbab1620ef/numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48", size = 6291907 }, + { url = "https://files.pythonhosted.org/packages/86/09/a5ab407bd7f5f5599e6a9261f964ace03a73e7c6928de906981c31c38082/numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4", size = 12644098 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pandas" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, +] + +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + +[[package]] +name = "pillow" +version = "11.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739", size = 46737780 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/a3/26e606ff0b2daaf120543e537311fa3ae2eb6bf061490e4fea51771540be/pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923", size = 3147642 }, + { url = "https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903", size = 2978999 }, + { url = "https://files.pythonhosted.org/packages/d9/ff/5a45000826a1aa1ac6874b3ec5a856474821a1b59d838c4f6ce2ee518fe9/pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4", size = 4196794 }, + { url = "https://files.pythonhosted.org/packages/9d/21/84c9f287d17180f26263b5f5c8fb201de0f88b1afddf8a2597a5c9fe787f/pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f", size = 4300762 }, + { url = "https://files.pythonhosted.org/packages/84/39/63fb87cd07cc541438b448b1fed467c4d687ad18aa786a7f8e67b255d1aa/pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9", size = 4210468 }, + { url = "https://files.pythonhosted.org/packages/7f/42/6e0f2c2d5c60f499aa29be14f860dd4539de322cd8fb84ee01553493fb4d/pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7", size = 4381824 }, + { url = "https://files.pythonhosted.org/packages/31/69/1ef0fb9d2f8d2d114db982b78ca4eeb9db9a29f7477821e160b8c1253f67/pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6", size = 4296436 }, + { url = "https://files.pythonhosted.org/packages/44/ea/dad2818c675c44f6012289a7c4f46068c548768bc6c7f4e8c4ae5bbbc811/pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc", size = 4429714 }, + { url = "https://files.pythonhosted.org/packages/af/3a/da80224a6eb15bba7a0dcb2346e2b686bb9bf98378c0b4353cd88e62b171/pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6", size = 2249631 }, + { url = "https://files.pythonhosted.org/packages/57/97/73f756c338c1d86bb802ee88c3cab015ad7ce4b838f8a24f16b676b1ac7c/pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47", size = 2567533 }, + { url = "https://files.pythonhosted.org/packages/0b/30/2b61876e2722374558b871dfbfcbe4e406626d63f4f6ed92e9c8e24cac37/pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25", size = 2254890 }, + { url = "https://files.pythonhosted.org/packages/63/24/e2e15e392d00fcf4215907465d8ec2a2f23bcec1481a8ebe4ae760459995/pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699", size = 3147300 }, + { url = "https://files.pythonhosted.org/packages/43/72/92ad4afaa2afc233dc44184adff289c2e77e8cd916b3ddb72ac69495bda3/pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38", size = 2978742 }, + { url = "https://files.pythonhosted.org/packages/9e/da/c8d69c5bc85d72a8523fe862f05ababdc52c0a755cfe3d362656bb86552b/pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2", size = 4194349 }, + { url = "https://files.pythonhosted.org/packages/cd/e8/686d0caeed6b998351d57796496a70185376ed9c8ec7d99e1d19ad591fc6/pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2", size = 4298714 }, + { url = "https://files.pythonhosted.org/packages/ec/da/430015cec620d622f06854be67fd2f6721f52fc17fca8ac34b32e2d60739/pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527", size = 4208514 }, + { url = "https://files.pythonhosted.org/packages/44/ae/7e4f6662a9b1cb5f92b9cc9cab8321c381ffbee309210940e57432a4063a/pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa", size = 4380055 }, + { url = "https://files.pythonhosted.org/packages/74/d5/1a807779ac8a0eeed57f2b92a3c32ea1b696e6140c15bd42eaf908a261cd/pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f", size = 4296751 }, + { url = "https://files.pythonhosted.org/packages/38/8c/5fa3385163ee7080bc13026d59656267daaaaf3c728c233d530e2c2757c8/pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb", size = 4430378 }, + { url = "https://files.pythonhosted.org/packages/ca/1d/ad9c14811133977ff87035bf426875b93097fb50af747793f013979facdb/pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798", size = 2249588 }, + { url = "https://files.pythonhosted.org/packages/fb/01/3755ba287dac715e6afdb333cb1f6d69740a7475220b4637b5ce3d78cec2/pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de", size = 2567509 }, + { url = "https://files.pythonhosted.org/packages/c0/98/2c7d727079b6be1aba82d195767d35fcc2d32204c7a5820f822df5330152/pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84", size = 2254791 }, + { url = "https://files.pythonhosted.org/packages/eb/38/998b04cc6f474e78b563716b20eecf42a2fa16a84589d23c8898e64b0ffd/pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b", size = 3150854 }, + { url = "https://files.pythonhosted.org/packages/13/8e/be23a96292113c6cb26b2aa3c8b3681ec62b44ed5c2bd0b258bd59503d3c/pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003", size = 2982369 }, + { url = "https://files.pythonhosted.org/packages/97/8a/3db4eaabb7a2ae8203cd3a332a005e4aba00067fc514aaaf3e9721be31f1/pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2", size = 4333703 }, + { url = "https://files.pythonhosted.org/packages/28/ac/629ffc84ff67b9228fe87a97272ab125bbd4dc462745f35f192d37b822f1/pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a", size = 4412550 }, + { url = "https://files.pythonhosted.org/packages/d6/07/a505921d36bb2df6868806eaf56ef58699c16c388e378b0dcdb6e5b2fb36/pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8", size = 4461038 }, + { url = "https://files.pythonhosted.org/packages/d6/b9/fb620dd47fc7cc9678af8f8bd8c772034ca4977237049287e99dda360b66/pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8", size = 2253197 }, + { url = "https://files.pythonhosted.org/packages/df/86/25dde85c06c89d7fc5db17940f07aae0a56ac69aa9ccb5eb0f09798862a8/pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904", size = 2572169 }, + { url = "https://files.pythonhosted.org/packages/51/85/9c33f2517add612e17f3381aee7c4072779130c634921a756c97bc29fb49/pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3", size = 2256828 }, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.48" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2d/4f/feb5e137aff82f7c7f3248267b97451da3644f6cdc218edfe549fb354127/prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90", size = 424684 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/6a/fd08d94654f7e67c52ca30523a178b3f8ccc4237fce4be90d39c938a831a/prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e", size = 386595 }, +] + +[[package]] +name = "psutil" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/10/2a30b13c61e7cf937f4adf90710776b7918ed0a9c434e2c38224732af310/psutil-6.1.0.tar.gz", hash = "sha256:353815f59a7f64cdaca1c0307ee13558a0512f6db064e92fe833784f08539c7a", size = 508565 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/9e/8be43078a171381953cfee33c07c0d628594b5dbfc5157847b85022c2c1b/psutil-6.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e2dcd475ce8b80522e51d923d10c7871e45f20918e027ab682f94f1c6351688", size = 247762 }, + { url = "https://files.pythonhosted.org/packages/1d/cb/313e80644ea407f04f6602a9e23096540d9dc1878755f3952ea8d3d104be/psutil-6.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0895b8414afafc526712c498bd9de2b063deaac4021a3b3c34566283464aff8e", size = 248777 }, + { url = "https://files.pythonhosted.org/packages/65/8e/bcbe2025c587b5d703369b6a75b65d41d1367553da6e3f788aff91eaf5bd/psutil-6.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dcbfce5d89f1d1f2546a2090f4fcf87c7f669d1d90aacb7d7582addece9fb38", size = 284259 }, + { url = "https://files.pythonhosted.org/packages/58/4d/8245e6f76a93c98aab285a43ea71ff1b171bcd90c9d238bf81f7021fb233/psutil-6.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:498c6979f9c6637ebc3a73b3f87f9eb1ec24e1ce53a7c5173b8508981614a90b", size = 287255 }, + { url = "https://files.pythonhosted.org/packages/27/c2/d034856ac47e3b3cdfa9720d0e113902e615f4190d5d1bdb8df4b2015fb2/psutil-6.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d905186d647b16755a800e7263d43df08b790d709d575105d419f8b6ef65423a", size = 288804 }, + { url = "https://files.pythonhosted.org/packages/ea/55/5389ed243c878725feffc0d6a3bc5ef6764312b6fc7c081faaa2cfa7ef37/psutil-6.1.0-cp37-abi3-win32.whl", hash = "sha256:1ad45a1f5d0b608253b11508f80940985d1d0c8f6111b5cb637533a0e6ddc13e", size = 250386 }, + { url = "https://files.pythonhosted.org/packages/11/91/87fa6f060e649b1e1a7b19a4f5869709fbf750b7c8c262ee776ec32f3028/psutil-6.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be", size = 254228 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + +[[package]] +name = "py3rosmsgs" +version = "1.18.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gnupg" }, + { name = "numpy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/d3/2709c577457400f9f80aa24235d11b8c6ff3d415d0e210fa8f74df490d64/py3rosmsgs-1.18.2-py2.py3-none-any.whl", hash = "sha256:317a38c2fe9faeb44cebfacac6a3cb275da12ca295ed66a1986842108d627021", size = 1127049 }, +] + +[[package]] +name = "pycryptodomex" +version = "3.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/dc/e66551683ade663b5f07d7b3bc46434bf703491dbd22ee12d1f979ca828f/pycryptodomex-3.21.0.tar.gz", hash = "sha256:222d0bd05381dd25c32dd6065c071ebf084212ab79bab4599ba9e6a3e0009e6c", size = 4818543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5e/99f217d9881eead69607a2248dd7bbdf610837d7f5ad53f45a6cb71bbbfb/pycryptodomex-3.21.0-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:34325b84c8b380675fd2320d0649cdcbc9cf1e0d1526edbe8fce43ed858cdc7e", size = 2499490 }, + { url = "https://files.pythonhosted.org/packages/ce/8f/4d0e2a859a6470289d64e39b419f01d2494dfa2e4995342d50f6c2834237/pycryptodomex-3.21.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:103c133d6cd832ae7266feb0a65b69e3a5e4dbbd6f3a3ae3211a557fd653f516", size = 1638037 }, + { url = "https://files.pythonhosted.org/packages/0c/9e/6e748c1fa814c956d356f93cf7192b19487ca56fc9e2a0bcde2bbc057601/pycryptodomex-3.21.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77ac2ea80bcb4b4e1c6a596734c775a1615d23e31794967416afc14852a639d3", size = 2172279 }, + { url = "https://files.pythonhosted.org/packages/46/3f/f5bef92b11750af9e3516d4e69736eeeff20a2818d34611508bef5a7b381/pycryptodomex-3.21.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aa0cf13a1a1128b3e964dc667e5fe5c6235f7d7cfb0277213f0e2a783837cc2", size = 2258130 }, + { url = "https://files.pythonhosted.org/packages/de/4d/f0c65afd64ce435fd0547187ce6f99dfb37cdde16b05b57bca9f5c06966e/pycryptodomex-3.21.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46eb1f0c8d309da63a2064c28de54e5e614ad17b7e2f88df0faef58ce192fc7b", size = 2297719 }, + { url = "https://files.pythonhosted.org/packages/1c/6a/2a1a101b0345ee70376ba93df8de6c8c01aac8341fda02970800873456a7/pycryptodomex-3.21.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:cc7e111e66c274b0df5f4efa679eb31e23c7545d702333dfd2df10ab02c2a2ce", size = 2164079 }, + { url = "https://files.pythonhosted.org/packages/3d/00/90a15f16c234815b660303c2d7266b41b401ea2605f3a90373e9d425e39f/pycryptodomex-3.21.0-cp36-abi3-musllinux_1_2_i686.whl", hash = "sha256:770d630a5c46605ec83393feaa73a9635a60e55b112e1fb0c3cea84c2897aa0a", size = 2333060 }, + { url = "https://files.pythonhosted.org/packages/61/74/49f5d20c514ccc631b940cc9dfec45dcce418dc84a98463a2e2ebec33904/pycryptodomex-3.21.0-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:52e23a0a6e61691134aa8c8beba89de420602541afaae70f66e16060fdcd677e", size = 2257982 }, + { url = "https://files.pythonhosted.org/packages/92/4b/d33ef74e2cc0025a259936661bb53432c5bbbadc561c5f2e023bcd73ce4c/pycryptodomex-3.21.0-cp36-abi3-win32.whl", hash = "sha256:a3d77919e6ff56d89aada1bd009b727b874d464cb0e2e3f00a49f7d2e709d76e", size = 1779052 }, + { url = "https://files.pythonhosted.org/packages/5b/be/7c991840af1184009fc86267160948350d1bf875f153c97bb471ad944e40/pycryptodomex-3.21.0-cp36-abi3-win_amd64.whl", hash = "sha256:b0e9765f93fe4890f39875e6c90c96cb341767833cfa767f41b490b506fa9ec0", size = 1816307 }, + { url = "https://files.pythonhosted.org/packages/af/ac/24125ad36778914a36f08d61ba5338cb9159382c638d9761ee19c8de822c/pycryptodomex-3.21.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:feaecdce4e5c0045e7a287de0c4351284391fe170729aa9182f6bd967631b3a8", size = 1694999 }, + { url = "https://files.pythonhosted.org/packages/93/73/be7a54a5903508070e5508925ba94493a1f326cfeecfff750e3eb250ea28/pycryptodomex-3.21.0-pp27-pypy_73-win32.whl", hash = "sha256:365aa5a66d52fd1f9e0530ea97f392c48c409c2f01ff8b9a39c73ed6f527d36c", size = 1769437 }, +] + +[[package]] +name = "pygments" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", size = 4891905 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", size = 1205513 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/d5/e5aeee5387091148a19e1145f63606619cb5f20b83fccb63efae6474e7b2/pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c", size = 920984 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", size = 106921 }, +] + +[[package]] +name = "pyserial" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/7d/ae3f0a63f41e4d2f6cb66a5b57197850f919f59e558159a4dd3a818f5082/pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb", size = 159125 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585 }, +] + +[[package]] +name = "pytest" +version = "8.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", size = 1442487 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2", size = 342341 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { 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 }, +] + +[[package]] +name = "pytz" +version = "2024.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "rospkg" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "catkin-pkg" }, + { name = "distro" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/d1/80636a38597b75ae95aa0804238d2241e57eb0f5a5bc1f900d4e142afac9/rospkg-1.5.1.tar.gz", hash = "sha256:fce76a7477786c3732981262198ea250f097f88e0d3329c10c11069bf40ca604", size = 42675 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/e2/772f8cff8172a612823755035073b00753613c24af0ed6d3bae215021608/rospkg-1.5.1-py3-none-any.whl", hash = "sha256:1167a8f908d9c4379954732a605810e166ddcc18fcf47e6555395e1d6d972a7c", size = 36094 }, +] + +[[package]] +name = "script" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "bagpy" }, +] + +[package.metadata] +requires-dist = [{ name = "bagpy", specifier = ">=0.5" }] + +[[package]] +name = "seaborn" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914 }, +] + +[[package]] +name = "setuptools" +version = "75.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/22/a438e0caa4576f8c383fa4d35f1cc01655a46c75be358960d815bfbb12bd/setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686", size = 1351577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/12/282ee9bce8b58130cb762fbc9beabd531549952cac11fc56add11dcb7ea0/setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", size = 1251070 }, +] + +[[package]] +name = "setuptools-scm" +version = "8.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4f/a4/00a9ac1b555294710d4a68d2ce8dfdf39d72aa4d769a7395d05218d88a42/setuptools_scm-8.1.0.tar.gz", hash = "sha256:42dea1b65771cba93b7a515d65a65d8246e560768a66b9106a592c8e7f26c8a7", size = 76465 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/b9/1906bfeb30f2fc13bb39bf7ddb8749784c05faadbd18a21cf141ba37bff2/setuptools_scm-8.1.0-py3-none-any.whl", hash = "sha256:897a3226a6fd4a6eb2f068745e49733261a21f70b1bb28fce0339feb978d9af3", size = 43666 }, +] + +[[package]] +name = "six" +version = "1.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + +[[package]] +name = "tzdata" +version = "2024.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a86a98e9896bae89c7aa15078ec29f490fef2f1e5384/tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", size = 193282 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 }, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, +] From ca0c7f8db75cbacaf9bea447d1af525d10566af8 Mon Sep 17 00:00:00 2001 From: Yey007 <55263178+Yey007@users.noreply.github.com> Date: Tue, 12 Nov 2024 21:18:26 -0500 Subject: [PATCH 4/6] Added lidar scan explorer --- script/.gitignore | 2 + script/pyproject.toml | 2 + script/rosbag_extract.py | 126 +++++++++++++++++++++++++++++++++++++++ script/uv.lock | 47 ++++++++++++++- 4 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 script/.gitignore diff --git a/script/.gitignore b/script/.gitignore new file mode 100644 index 0000000..6181db3 --- /dev/null +++ b/script/.gitignore @@ -0,0 +1,2 @@ +bag/ +data/ diff --git a/script/pyproject.toml b/script/pyproject.toml index 81a3f66..228ca48 100644 --- a/script/pyproject.toml +++ b/script/pyproject.toml @@ -5,4 +5,6 @@ description = "ICP scripts" requires-python = ">=3.12" dependencies = [ "bagpy>=0.5", + "matplotlib>=3.9.2", + "pyqt5>=5.15.11", ] diff --git a/script/rosbag_extract.py b/script/rosbag_extract.py index e69de29..895c1fd 100644 --- a/script/rosbag_extract.py +++ b/script/rosbag_extract.py @@ -0,0 +1,126 @@ +import argparse +import os + +import matplotlib +import numpy as np +import pandas as pd +from bagpy import bagreader +from matplotlib import pyplot as plt + +parser = argparse.ArgumentParser( + prog="rosbag_extract", + description="Extract LiDAR data from ROS bags to use in ICP testing", +) +parser.add_argument( + "-i", + "--input", + type=str, + help="Input ROS bag file", + required=True, +) +parser.add_argument( + "-o", + "--output_dir", + type=str, + help="Output directory to save the extracted scans", + required=True, +) +parser.add_argument( + "-t", + "--topic", + type=str, + help="Topic name to extract", + required=True, +) +args = parser.parse_args() + +os.makedirs(args.output_dir, exist_ok=True) + +b = bagreader(args.input) +LASER_MSG = b.message_by_topic(args.topic) +df = pd.read_csv(LASER_MSG) + +current_i = 0 +exported = 0 + + +def on_press(event): + global current_i + if event.key == "l": + current_i = min(current_i + 1, len(df) - 1) + elif event.key == "h": + current_i = max(current_i - 1, 0) + elif event.key == "p": + current_i = min(current_i + 10, len(df) - 1) + elif event.key == "u": + current_i = max(current_i - 10, 0) + elif event.key == "e": + save(current_i) + draw(current_i) + + +def get_ranges(row): + ranges = [] + i = 0 + while True: + if f"ranges_{i}" not in row: + break + ranges.append(row[f"ranges_{i}"]) + i += 1 + return np.array(ranges) + + +def draw(index: int): + row = df.iloc[index] + ranges = get_ranges(row) + + angle_increment = row["angle_increment"] + angle_min = row["angle_min"] + angle_max = row["angle_max"] + angles = np.arange(angle_min, angle_max + angle_increment, angle_increment) + + x = np.cos(angles) * ranges + y = np.sin(angles) * ranges + + ax.clear() + ax.set_xlabel("x") + ax.set_ylabel("y") + ax.set_aspect("equal") + ax.set_xscale("linear") + ax.set_yscale("linear") + + lidar_max = df.iloc[0]["range_max"] + ax.set_xlim(-lidar_max, lidar_max) + ax.set_ylim(-lidar_max, lidar_max) + ax.plot(x, y, "o", linestyle="None") + + +def save(index: int): + global exported + row = df.iloc[index] + angle_increment = row["angle_increment"] + angle_min = row["angle_min"] + angle_max = row["angle_max"] + range_min = row["range_min"] + range_max = row["range_max"] + ranges = get_ranges(row) + length = len(ranges) + with open(f"{args.output_dir}/scan_{exported}.conf", "w") as f: + f.write(f"angle_max = {angle_max}\n") + f.write(f"angle_min = {angle_min}\n") + f.write(f"angle_increment = {angle_increment}\n") + f.write(f"length = {length}\n") + f.write(f"range_max = {range_max}\n") + f.write(f"range_min = {range_min}\n") + for i, r in enumerate(ranges): + f.write(f"{i} = {r}\n") + print(f"Exported scan {exported}") + exported += 1 + + +matplotlib.use("qt5agg") +fig, ax = plt.subplots() +plt.ion() +fig.canvas.mpl_connect("key_press_event", on_press) +draw(current_i) +plt.show(block=True) diff --git a/script/uv.lock b/script/uv.lock index 9b7cc5c..fc4d10a 100644 --- a/script/uv.lock +++ b/script/uv.lock @@ -660,6 +660,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", size = 106921 }, ] +[[package]] +name = "pyqt5" +version = "5.15.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyqt5-qt5" }, + { name = "pyqt5-sip" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/64/42ec1b0bd72d87f87bde6ceb6869f444d91a2d601f2e67cd05febc0346a1/PyQt5-5.15.11-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c8b03dd9380bb13c804f0bdb0f4956067f281785b5e12303d529f0462f9afdc2", size = 6579776 }, + { url = "https://files.pythonhosted.org/packages/49/f5/3fb696f4683ea45d68b7e77302eff173493ac81e43d63adb60fa760b9f91/PyQt5-5.15.11-cp38-abi3-macosx_11_0_x86_64.whl", hash = "sha256:6cd75628f6e732b1ffcfe709ab833a0716c0445d7aec8046a48d5843352becb6", size = 7016415 }, + { url = "https://files.pythonhosted.org/packages/b4/8c/4065950f9d013c4b2e588fe33cf04e564c2322842d84dbcbce5ba1dc28b0/PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1", size = 8188103 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/ae5a5b4f9b826b29ea4be841b2f2d951bcf5ae1d802f3732b145b57c5355/PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd", size = 5433308 }, + { url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517", size = 6865864 }, +] + +[[package]] +name = "pyqt5-qt5" +version = "5.15.15" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/6e/a5789bac6310208756fc6a36fd7e01caa86ea6ae7abbb5922dcea003a215/PyQt5_Qt5-5.15.15-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:eb74072935958a830887115b1de1ff26341fc2d5881b28129de39612b10a260e", size = 39147807 }, + { url = "https://files.pythonhosted.org/packages/92/4c/c9026ca280f2cd4bef562cfb0a5050eb23f1e7fe1b85aa8455eb6ea437bf/PyQt5_Qt5-5.15.15-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f8b174725fbe29c1a22f8acce5798933a65c8a083f1d9833ff212479ec2b3c14", size = 36953104 }, + { url = "https://files.pythonhosted.org/packages/95/70/1ba9b828387f42e0812b496ed637a950bf57a5d59b844d034841e8f9fb4f/PyQt5_Qt5-5.15.15-py3-none-manylinux2014_x86_64.whl", hash = "sha256:611505d04ffb06a5e5bcf98f5ff0e4e15ba7785565ccbe7bd3b2e40642ea3bdd", size = 59827278 }, +] + +[[package]] +name = "pyqt5-sip" +version = "12.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/15/78318d50f10062c428e97e7ce387e772616a4673c356018b905f247a6a85/PyQt5_sip-12.15.0.tar.gz", hash = "sha256:d23fdfcf363b5cedd9d39f8a9c5710e7d52804f5b08a58e91c638b36eafcb702", size = 104024 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/47/de48934a0d692c65b0833924a618786146c0869910c707a5e508351d5b91/PyQt5_sip-12.15.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:852b75cf208825602480e95ab63314108f872d0da251e9ad3deaaff5a183a6f5", size = 124312 }, + { url = "https://files.pythonhosted.org/packages/d1/6c/9a2fe24f8970e092613f709283a2101403490a209a30de3de89a413d9915/PyQt5_sip-12.15.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0cd21c3215e3c47fdd5fa7a2dc3dd1e07a7230b0626e905a7217925068c788b9", size = 281431 }, + { url = "https://files.pythonhosted.org/packages/90/53/0a4dc2d448619f2a51849e124d375ec7a8e95c938eccfaf8711bb77a62b6/PyQt5_sip-12.15.0-cp312-cp312-win32.whl", hash = "sha256:b58eeedc9b2a3037b136bf96915196c391a33be470ed1c0723d7163ef0b727a2", size = 49408 }, + { url = "https://files.pythonhosted.org/packages/aa/c2/c07c531fe5a6124d91942c48a85ff4e14918766cd37819f7841cf2debabb/PyQt5_sip-12.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:24a1d4937332bf0a38dd95bb2ce4d89723df449f6e912b52ef0e107e11fefac1", size = 57922 }, +] + [[package]] name = "pyserial" version = "3.5" @@ -751,10 +790,16 @@ version = "0.1.0" source = { virtual = "." } dependencies = [ { name = "bagpy" }, + { name = "matplotlib" }, + { name = "pyqt5" }, ] [package.metadata] -requires-dist = [{ name = "bagpy", specifier = ">=0.5" }] +requires-dist = [ + { name = "bagpy", specifier = ">=0.5" }, + { name = "matplotlib", specifier = ">=3.9.2" }, + { name = "pyqt5", specifier = ">=5.15.11" }, +] [[package]] name = "seaborn" From 87757103edb0c11fa6c2dc0ab26b8f4eedca0f85 Mon Sep 17 00:00:00 2001 From: Yey007 <55263178+Yey007@users.noreply.github.com> Date: Tue, 12 Nov 2024 23:22:27 -0500 Subject: [PATCH 5/6] Add another scan --- Makefile | 2 +- ex_data/scan3/first.conf | 726 ++++++++++++++++++++++++++++++++++++++ ex_data/scan3/second.conf | 726 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 1453 insertions(+), 1 deletion(-) create mode 100644 ex_data/scan3/first.conf create mode 100644 ex_data/scan3/second.conf diff --git a/Makefile b/Makefile index b84c59b..b09f10e 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,7 @@ $(TESTNAME): CFLAGS += -DTEST -include $(MAINDEPS) -include $(TESTDEPS) -N := 1 +N := 3 METHOD := feature_aware ifeq ($(shell uname), Darwin) diff --git a/ex_data/scan3/first.conf b/ex_data/scan3/first.conf new file mode 100644 index 0000000..25837e4 --- /dev/null +++ b/ex_data/scan3/first.conf @@ -0,0 +1,726 @@ +angle_max = 3.141592741012573 +angle_min = -3.1241390705108643 +angle_increment = 0.0087145091965794 +length = 720 +range_max = 12.0 +range_min = 0.1500000059604644 +0 = 0.163000002503395 +1 = 0.1620000004768371 +2 = 0.1620000004768371 +3 = 0.1609999984502792 +4 = 0.1609999984502792 +5 = 0.1609999984502792 +6 = 0.1609999984502792 +7 = 0.1609999984502792 +8 = 0.1609999984502792 +9 = 0.1609999984502792 +10 = 0.1609999984502792 +11 = 0.1609999984502792 +12 = 0.1620000004768371 +13 = 0.1620000004768371 +14 = 0.1620000004768371 +15 = 0.1620000004768371 +16 = 0.164000004529953 +17 = 0.164000004529953 +18 = 0.1650000065565109 +19 = 0.1650000065565109 +20 = 0.1659999936819076 +21 = 0.1669999957084655 +22 = 0.1679999977350235 +23 = 0.1689999997615814 +24 = 0.1700000017881393 +25 = 0.1710000038146972 +26 = 0.1720000058412552 +27 = 0.1729999929666519 +28 = 0.1749999970197677 +29 = 0.1759999990463256 +30 = 0.1770000010728836 +31 = 0.1780000030994415 +32 = 0.1790000051259994 +33 = 0.1809999942779541 +34 = 0.181999996304512 +35 = 0.1829999983310699 +36 = 0.1850000023841858 +37 = 0.1860000044107437 +38 = 0.1870000064373016 +39 = 0.1889999955892563 +40 = 0.1889999955892563 +41 = 0.1909999996423721 +42 = 0.19200000166893 +43 = 0.1940000057220459 +44 = 0.1959999948740005 +45 = 0.1969999969005584 +46 = 0.1979999989271164 +47 = 0.2010000050067901 +48 = 0.202000007033348 +49 = 0.2039999961853027 +50 = 0.2070000022649765 +51 = 0.2090000063180923 +52 = 0.210999995470047 +53 = 0.2140000015497207 +54 = 0.2150000035762787 +55 = 0.2169999927282333 +56 = 0.221000000834465 +57 = 0.2230000048875808 +58 = 0.2249999940395355 +59 = 0.2290000021457672 +60 = 0.231000006198883 +61 = 0.2329999953508377 +62 = 0.2370000034570694 +63 = 0.2440000027418136 +64 = 0.2469999939203262 +65 = 0.25 +66 = 0.2540000081062317 +67 = 0.2619999945163727 +68 = 0.2660000026226043 +69 = 0.270000010728836 +70 = 0.2739999890327453 +71 = 0.2820000052452087 +72 = 0.2870000004768371 +73 = 0.2939999997615814 +74 = 0.3000000119209289 +75 = inf +76 = inf +77 = inf +78 = inf +79 = inf +80 = inf +81 = inf +82 = 0.2300000041723251 +83 = 0.2300000041723251 +84 = 0.2240000069141388 +85 = 0.2199999988079071 +86 = 0.2160000056028366 +87 = 0.209999993443489 +88 = 0.2080000042915344 +89 = 0.2080000042915344 +90 = 0.2039999961853027 +91 = 0.2010000050067901 +92 = 0.1979999989271164 +93 = 0.1969999969005584 +94 = 0.1940000057220459 +95 = 0.1930000036954879 +96 = 0.1909999996423721 +97 = 0.1899999976158142 +98 = 0.1889999955892563 +99 = 0.1870000064373016 +100 = 0.1860000044107437 +101 = 0.1850000023841858 +102 = 0.1840000003576278 +103 = 0.1840000003576278 +104 = 0.1829999983310699 +105 = 0.1829999983310699 +106 = 0.181999996304512 +107 = 0.1809999942779541 +108 = 0.1809999942779541 +109 = 0.1809999942779541 +110 = 0.1809999942779541 +111 = 0.1809999942779541 +112 = 0.181999996304512 +113 = 0.181999996304512 +114 = 0.1829999983310699 +115 = 0.1840000003576278 +116 = 0.1850000023841858 +117 = 0.1870000064373016 +118 = 0.1879999935626983 +119 = 0.1909999996423721 +120 = 0.1930000036954879 +121 = 0.1959999948740005 +122 = 0.1990000009536743 +123 = 0.202000007033348 +124 = 0.2090000063180923 +125 = inf +126 = inf +127 = inf +128 = inf +129 = inf +130 = inf +131 = inf +132 = inf +133 = inf +134 = inf +135 = inf +136 = inf +137 = inf +138 = inf +139 = inf +140 = inf +141 = inf +142 = inf +143 = inf +144 = inf +145 = inf +146 = inf +147 = inf +148 = inf +149 = inf +150 = 1.1460000276565552 +151 = 1.1460000276565552 +152 = 1.1540000438690186 +153 = 1.1540000438690186 +154 = 1.1679999828338623 +155 = 1.1759999990463257 +156 = inf +157 = 1.090000033378601 +158 = 1.090000033378601 +159 = 1.0980000495910645 +160 = 1.1039999723434448 +161 = inf +162 = inf +163 = inf +164 = inf +165 = inf +166 = inf +167 = 2.763999938964844 +168 = 2.763999938964844 +169 = 2.752000093460083 +170 = 2.7320001125335693 +171 = 2.759999990463257 +172 = 2.7839999198913574 +173 = 2.815999984741211 +174 = 2.8480000495910645 +175 = 2.8959999084472656 +176 = 2.940000057220459 +177 = 3.2079999446868896 +178 = 3.2079999446868896 +179 = 3.184000015258789 +180 = 2.907999992370605 +181 = 2.907999992370605 +182 = 2.8559999465942383 +183 = 2.8559999465942383 +184 = 2.8480000495910645 +185 = 2.8480000495910645 +186 = 2.851999998092652 +187 = 2.851999998092652 +188 = 2.8559999465942383 +189 = 2.8359999656677246 +190 = 2.8320000171661377 +191 = 2.819999933242798 +192 = 2.815999984741211 +193 = 2.808000087738037 +194 = 2.803999900817871 +195 = 2.799999952316284 +196 = 2.7920000553131104 +197 = 2.7799999713897705 +198 = 2.7799999713897705 +199 = 2.7839999198913574 +200 = 2.776000022888184 +201 = 2.7720000743865967 +202 = 2.940000057220459 +203 = 2.940000057220459 +204 = 2.927999973297119 +205 = 2.6640000343322754 +206 = 2.6600000858306885 +207 = 2.6600000858306885 +208 = 2.6559998989105225 +209 = 2.6480000019073486 +210 = 2.6480000019073486 +211 = 2.6440000534057617 +212 = 2.631999969482422 +213 = 2.640000104904175 +214 = 2.640000104904175 +215 = 2.628000020980835 +216 = 2.624000072479248 +217 = 2.628000020980835 +218 = 2.628000020980835 +219 = 2.624000072479248 +220 = 2.619999885559082 +221 = 2.619999885559082 +222 = 2.624000072479248 +223 = 2.619999885559082 +224 = 2.619999885559082 +225 = 2.619999885559082 +226 = 2.6080000400543213 +227 = 2.6080000400543213 +228 = 2.611999988555908 +229 = 2.611999988555908 +230 = 2.400000095367432 +231 = 2.400000095367432 +232 = 2.3919999599456787 +233 = 2.3919999599456787 +234 = 2.7880001068115234 +235 = inf +236 = inf +237 = inf +238 = inf +239 = inf +240 = 2.24399995803833 +241 = 2.24399995803833 +242 = 2.247999906539917 +243 = 2.236000061035156 +244 = 2.236000061035156 +245 = 2.24399995803833 +246 = inf +247 = inf +248 = 2.2679998874664307 +249 = 2.2679998874664307 +250 = inf +251 = inf +252 = inf +253 = inf +254 = 2.259999990463257 +255 = 2.259999990463257 +256 = inf +257 = 5.271999835968018 +258 = 5.271999835968018 +259 = 5.423999786376953 +260 = 5.375999927520752 +261 = 5.480000019073486 +262 = 5.504000186920166 +263 = 5.4079999923706055 +264 = 5.335999965667725 +265 = 5.303999900817871 +266 = 5.328000068664551 +267 = 5.328000068664551 +268 = 5.368000030517578 +269 = 5.368000030517578 +270 = 9.416000366210938 +271 = 9.456000328063965 +272 = 9.53600025177002 +273 = 9.616000175476074 +274 = 9.631999969482422 +275 = 9.631999969482422 +276 = 9.696000099182127 +277 = 9.68000030517578 +278 = 3.944000005722046 +279 = 3.944000005722046 +280 = 3.884000062942505 +281 = 3.839999914169312 +282 = 3.75600004196167 +283 = 3.723999977111816 +284 = 3.635999917984009 +285 = 3.651999950408936 +286 = 3.700000047683716 +287 = 3.723999977111816 +288 = 3.723999977111816 +289 = 3.6679999828338623 +290 = 3.595999956130981 +291 = 3.568000078201294 +292 = 3.552000045776367 +293 = 3.5280001163482666 +294 = 3.440000057220459 +295 = 3.4760000705718994 +296 = 3.483999967575073 +297 = 3.5160000324249268 +298 = 3.5239999294281006 +299 = 3.5999999046325684 +300 = 3.640000104904175 +301 = 3.615999937057495 +302 = 3.6760001182556152 +303 = 3.611999988555908 +304 = 3.588000059127808 +305 = 3.572000026702881 +306 = 3.611999988555908 +307 = 3.635999917984009 +308 = 3.6679999828338623 +309 = 3.680000066757202 +310 = 3.703999996185303 +311 = 3.723999977111816 +312 = 3.759999990463257 +313 = 3.783999919891357 +314 = 3.8320000171661377 +315 = 3.8440001010894775 +316 = 3.871999979019165 +317 = 3.900000095367432 +318 = 2.6040000915527344 +319 = 2.6040000915527344 +320 = 2.6480000019073486 +321 = 2.6480000019073486 +322 = 2.640000104904175 +323 = 2.6600000858306885 +324 = 2.483999967575073 +325 = 2.483999967575073 +326 = 2.492000102996826 +327 = 2.200000047683716 +328 = 2.196000099182129 +329 = 2.191999912261963 +330 = 2.187999963760376 +331 = 2.180000066757202 +332 = 2.184000015258789 +333 = 2.191999912261963 +334 = 2.191999912261963 +335 = 2.200000047683716 +336 = 2.24399995803833 +337 = 2.276000022888184 +338 = 2.2880001068115234 +339 = 2.2839999198913574 +340 = 2.200000047683716 +341 = 2.187999963760376 +342 = 2.180000066757202 +343 = 2.191999912261963 +344 = 2.191999912261963 +345 = 2.2039999961853027 +346 = 4.703999996185303 +347 = 4.703999996185303 +348 = 4.688000202178955 +349 = inf +350 = 4.144000053405762 +351 = 4.144000053405762 +352 = 4.191999912261963 +353 = 4.223999977111816 +354 = 4.223999977111816 +355 = 4.223999977111816 +356 = 4.239999771118164 +357 = 4.415999889373779 +358 = 4.440000057220459 +359 = 4.392000198364258 +360 = 4.296000003814697 +361 = 4.248000144958496 +362 = 4.239999771118164 +363 = 7.072000026702881 +364 = 7.056000232696533 +365 = 7.039999961853027 +366 = 3.51200008392334 +367 = 3.51200008392334 +368 = 3.496000051498413 +369 = 3.532000064849853 +370 = 3.375999927520752 +371 = 3.3480000495910645 +372 = 3.3480000495910645 +373 = 3.3320000171661377 +374 = 3.3239998817443848 +375 = 3.2920000553131104 +376 = 3.2920000553131104 +377 = 3.2880001068115234 +378 = 3.299999952316284 +379 = 3.308000087738037 +380 = 3.312000036239624 +381 = 3.3399999141693115 +382 = 3.3919999599456787 +383 = 3.407999992370605 +384 = 3.388000011444092 +385 = 3.364000082015991 +386 = 6.631999969482422 +387 = 6.631999969482422 +388 = 6.616000175476074 +389 = 6.616000175476074 +390 = 6.616000175476074 +391 = 6.576000213623047 +392 = 6.584000110626221 +393 = 6.559999942779541 +394 = 6.552000045776367 +395 = 6.567999839782715 +396 = 6.559999942779541 +397 = 6.535999774932861 +398 = 6.527999877929688 +399 = 6.527999877929688 +400 = 6.544000148773193 +401 = 6.51200008392334 +402 = inf +403 = 3.723999977111816 +404 = 3.723999977111816 +405 = 3.068000078201294 +406 = 3.068000078201294 +407 = 3.0439999103546143 +408 = 3.0239999294281006 +409 = 3.0199999809265137 +410 = 3.200000047683716 +411 = 3.200000047683716 +412 = 3.184000015258789 +413 = 3.1760001182556152 +414 = 3.184000015258789 +415 = 3.191999912261963 +416 = 3.211999893188477 +417 = 3.2079999446868896 +418 = 3.236000061035156 +419 = 3.263999938964844 +420 = 3.140000104904175 +421 = 3.140000104904175 +422 = 3.131999969482422 +423 = 3.131999969482422 +424 = 3.135999917984009 +425 = 3.0160000324249268 +426 = 2.9760000705718994 +427 = 2.9679999351501465 +428 = 2.9679999351501465 +429 = 3.0 +430 = 3.055999994277954 +431 = 3.052000045776367 +432 = 3.003999948501587 +433 = 2.98799991607666 +434 = 3.01200008392334 +435 = 3.0439999103546143 +436 = inf +437 = inf +438 = 6.671999931335449 +439 = 6.671999931335449 +440 = 6.71999979019165 +441 = 6.728000164031982 +442 = 6.736000061035156 +443 = 6.728000164031982 +444 = 6.760000228881836 +445 = 6.760000228881836 +446 = 7.495999813079834 +447 = 7.535999774932861 +448 = 7.544000148773193 +449 = 7.559999942779541 +450 = 7.567999839782715 +451 = 7.599999904632568 +452 = 7.624000072479248 +453 = 7.656000137329102 +454 = 7.671999931335449 +455 = 7.688000202178955 +456 = 7.711999893188477 +457 = 7.736000061035156 +458 = inf +459 = inf +460 = inf +461 = inf +462 = inf +463 = inf +464 = inf +465 = 4.576000213623047 +466 = 4.576000213623047 +467 = 4.552000045776367 +468 = 4.544000148773193 +469 = 4.616000175476074 +470 = 4.631999969482422 +471 = 4.656000137329102 +472 = 4.671999931335449 +473 = 4.703999996185303 +474 = 4.703999996185303 +475 = 4.5920000076293945 +476 = 4.552000045776367 +477 = 4.4720001220703125 +478 = 4.400000095367432 +479 = 4.584000110626221 +480 = 4.584000110626221 +481 = 4.576000213623047 +482 = 4.559999942779541 +483 = 4.559999942779541 +484 = 4.552000045776367 +485 = 4.576000213623047 +486 = 4.624000072479248 +487 = 4.703999996185303 +488 = 4.76800012588501 +489 = 4.800000190734863 +490 = 4.831999778747559 +491 = 4.863999843597412 +492 = 4.927999973297119 +493 = 4.920000076293945 +494 = 4.992000102996826 +495 = 4.992000102996826 +496 = 5.239999771118164 +497 = 5.25600004196167 +498 = 5.447999954223633 +499 = 5.383999824523926 +500 = 5.368000030517578 +501 = 5.343999862670898 +502 = 5.368000030517578 +503 = 5.831999778747559 +504 = 5.567999839782715 +505 = 5.584000110626221 +506 = 5.616000175476074 +507 = 6.064000129699707 +508 = 6.136000156402588 +509 = 6.199999809265137 +510 = 6.223999977111816 +511 = 6.296000003814697 +512 = 6.343999862670898 +513 = 6.440000057220459 +514 = 6.480000019073486 +515 = 6.599999904632568 +516 = 6.671999931335449 +517 = 6.76800012588501 +518 = 6.800000190734863 +519 = 6.952000141143799 +520 = 6.8480000495910645 +521 = 6.815999984741211 +522 = 6.800000190734863 +523 = 6.728000164031982 +524 = 6.671999931335449 +525 = 6.616000175476074 +526 = 6.616000175476074 +527 = 6.544000148773193 +528 = inf +529 = inf +530 = inf +531 = inf +532 = inf +533 = inf +534 = inf +535 = inf +536 = inf +537 = inf +538 = inf +539 = inf +540 = inf +541 = inf +542 = 4.084000110626221 +543 = 4.084000110626221 +544 = 3.3919999599456787 +545 = 3.380000114440918 +546 = 3.359999895095825 +547 = 3.400000095367432 +548 = 3.431999921798706 +549 = 3.51200008392334 +550 = 4.0 +551 = 4.072000026702881 +552 = 4.072000026702881 +553 = 4.311999797821045 +554 = 4.311999797821045 +555 = 4.303999900817871 +556 = 4.296000003814697 +557 = 4.28000020980835 +558 = 3.1640000343322754 +559 = 3.171999931335449 +560 = 3.171999931335449 +561 = 4.639999866485596 +562 = 4.639999866485596 +563 = 6.072000026702881 +564 = 6.072000026702881 +565 = 6.056000232696533 +566 = 6.056000232696533 +567 = 5.48799991607666 +568 = 5.48799991607666 +569 = 6.0320000648498535 +570 = 6.0320000648498535 +571 = inf +572 = inf +573 = inf +574 = inf +575 = inf +576 = inf +577 = inf +578 = inf +579 = inf +580 = inf +581 = inf +582 = inf +583 = inf +584 = inf +585 = inf +586 = inf +587 = inf +588 = inf +589 = inf +590 = inf +591 = inf +592 = inf +593 = inf +594 = inf +595 = inf +596 = inf +597 = inf +598 = inf +599 = inf +600 = inf +601 = inf +602 = inf +603 = inf +604 = inf +605 = inf +606 = inf +607 = inf +608 = inf +609 = inf +610 = inf +611 = inf +612 = inf +613 = inf +614 = inf +615 = inf +616 = inf +617 = inf +618 = inf +619 = inf +620 = inf +621 = inf +622 = inf +623 = inf +624 = inf +625 = inf +626 = 0.5860000252723694 +627 = 0.5860000252723694 +628 = 0.5920000076293945 +629 = 0.5720000267028809 +630 = 0.5659999847412109 +631 = 0.5659999847412109 +632 = inf +633 = 0.5 +634 = 0.5 +635 = 0.4930000007152557 +636 = 0.4930000007152557 +637 = inf +638 = 0.4580000042915344 +639 = 0.4580000042915344 +640 = 0.4519999921321869 +641 = 0.4519999921321869 +642 = 0.4490000009536743 +643 = inf +644 = inf +645 = inf +646 = inf +647 = inf +648 = inf +649 = inf +650 = inf +651 = inf +652 = inf +653 = inf +654 = inf +655 = inf +656 = inf +657 = inf +658 = inf +659 = inf +660 = inf +661 = inf +662 = inf +663 = inf +664 = inf +665 = 0.4239999949932098 +666 = 0.4239999949932098 +667 = 0.4199999868869781 +668 = 0.4180000126361847 +669 = 0.4180000126361847 +670 = 0.4149999916553497 +671 = 0.4120000004768371 +672 = inf +673 = inf +674 = inf +675 = 0.221000000834465 +676 = 0.221000000834465 +677 = 0.2189999967813491 +678 = 0.2169999927282333 +679 = 0.2150000035762787 +680 = 0.2129999995231628 +681 = 0.2119999974966049 +682 = 0.209999993443489 +683 = 0.2090000063180923 +684 = 0.2080000042915344 +685 = 0.2070000022649765 +686 = 0.2060000002384185 +687 = 0.2060000002384185 +688 = 0.2049999982118606 +689 = 0.2049999982118606 +690 = 0.2039999961853027 +691 = 0.2039999961853027 +692 = 0.2039999961853027 +693 = 0.2029999941587448 +694 = 0.2029999941587448 +695 = 0.2029999941587448 +696 = 0.2029999941587448 +697 = 0.2029999941587448 +698 = 0.2029999941587448 +699 = 0.202000007033348 +700 = 0.2010000050067901 +701 = 0.2010000050067901 +702 = 0.2000000029802322 +703 = 0.1979999989271164 +704 = 0.1969999969005584 +705 = 0.1949999928474426 +706 = 0.1930000036954879 +707 = 0.1909999996423721 +708 = 0.1889999955892563 +709 = 0.1870000064373016 +710 = 0.1840000003576278 +711 = 0.181999996304512 +712 = 0.1809999942779541 +713 = 0.1770000010728836 +714 = 0.1759999990463256 +715 = 0.1729999929666519 +716 = 0.1710000038146972 +717 = 0.1689999997615814 +718 = 0.1669999957084655 +719 = 0.1659999936819076 diff --git a/ex_data/scan3/second.conf b/ex_data/scan3/second.conf new file mode 100644 index 0000000..73ebcdb --- /dev/null +++ b/ex_data/scan3/second.conf @@ -0,0 +1,726 @@ +angle_max = 3.141592741012573 +angle_min = -3.1241390705108643 +angle_increment = 0.0087145091965794 +length = 720 +range_max = 12.0 +range_min = 0.1500000059604644 +0 = 0.1620000004768371 +1 = 0.1609999984502792 +2 = 0.1599999964237213 +3 = 0.1589999943971634 +4 = 0.1589999943971634 +5 = 0.1589999943971634 +6 = 0.1589999943971634 +7 = 0.1580000072717666 +8 = 0.1580000072717666 +9 = 0.1580000072717666 +10 = 0.1580000072717666 +11 = 0.1580000072717666 +12 = 0.1580000072717666 +13 = 0.1580000072717666 +14 = 0.1580000072717666 +15 = 0.1589999943971634 +16 = 0.1589999943971634 +17 = 0.1589999943971634 +18 = 0.1599999964237213 +19 = 0.1599999964237213 +20 = 0.1609999984502792 +21 = 0.1609999984502792 +22 = 0.1620000004768371 +23 = 0.163000002503395 +24 = 0.164000004529953 +25 = 0.1650000065565109 +26 = 0.1659999936819076 +27 = 0.1669999957084655 +28 = 0.1679999977350235 +29 = 0.1689999997615814 +30 = 0.1710000038146972 +31 = 0.1720000058412552 +32 = 0.1729999929666519 +33 = 0.1739999949932098 +34 = 0.1749999970197677 +35 = 0.1759999990463256 +36 = 0.1780000030994415 +37 = 0.1790000051259994 +38 = 0.1800000071525573 +39 = 0.181999996304512 +40 = 0.1829999983310699 +41 = 0.1850000023841858 +42 = 0.1860000044107437 +43 = 0.1870000064373016 +44 = 0.1879999935626983 +45 = 0.1889999955892563 +46 = 0.1899999976158142 +47 = 0.19200000166893 +48 = 0.1930000036954879 +49 = 0.1969999969005584 +50 = 0.1979999989271164 +51 = 0.1990000009536743 +52 = 0.2010000050067901 +53 = 0.2039999961853027 +54 = 0.2049999982118606 +55 = 0.2080000042915344 +56 = 0.2090000063180923 +57 = 0.209999993443489 +58 = 0.2119999974966049 +59 = 0.2140000015497207 +60 = 0.2150000035762787 +61 = 0.2199999988079071 +62 = 0.2220000028610229 +63 = 0.2240000069141388 +64 = 0.2269999980926513 +65 = 0.2349999994039535 +66 = 0.2380000054836273 +67 = 0.2419999986886978 +68 = 0.2460000067949295 +69 = 0.25 +70 = 0.2590000033378601 +71 = 0.2630000114440918 +72 = 0.2680000066757202 +73 = 0.2720000147819519 +74 = 0.2770000100135803 +75 = 0.2879999876022339 +76 = inf +77 = inf +78 = inf +79 = inf +80 = inf +81 = inf +82 = 0.2300000041723251 +83 = 0.2300000041723251 +84 = 0.2269999980926513 +85 = 0.221000000834465 +86 = 0.2179999947547912 +87 = 0.2140000015497207 +88 = 0.209999993443489 +89 = 0.2070000022649765 +90 = 0.2049999982118606 +91 = 0.2039999961853027 +92 = 0.2000000029802322 +93 = 0.1979999989271164 +94 = 0.1969999969005584 +95 = 0.1940000057220459 +96 = 0.19200000166893 +97 = 0.1909999996423721 +98 = 0.1909999996423721 +99 = 0.1879999935626983 +100 = 0.1870000064373016 +101 = 0.1860000044107437 +102 = 0.1850000023841858 +103 = 0.1850000023841858 +104 = 0.1840000003576278 +105 = 0.1840000003576278 +106 = 0.1840000003576278 +107 = 0.1829999983310699 +108 = 0.181999996304512 +109 = 0.181999996304512 +110 = 0.181999996304512 +111 = 0.181999996304512 +112 = 0.1829999983310699 +113 = 0.1829999983310699 +114 = 0.1840000003576278 +115 = 0.1850000023841858 +116 = 0.1850000023841858 +117 = 0.1879999935626983 +118 = 0.1889999955892563 +119 = 0.1909999996423721 +120 = 0.1949999928474426 +121 = 0.1979999989271164 +122 = 0.2010000050067901 +123 = 0.2039999961853027 +124 = inf +125 = inf +126 = inf +127 = inf +128 = inf +129 = inf +130 = inf +131 = inf +132 = inf +133 = inf +134 = inf +135 = 1.4279999732971191 +136 = 1.4279999732971191 +137 = 1.4279999732971191 +138 = 1.4279999732971191 +139 = 1.440000057220459 +140 = 1.440000057220459 +141 = 1.4539999961853027 +142 = 1.4420000314712524 +143 = 1.4040000438690186 +144 = 1.3880000114440918 +145 = 1.3960000276565552 +146 = 1.3960000276565552 +147 = 1.5019999742507937 +148 = 1.5019999742507937 +149 = 1.5080000162124634 +150 = 1.5080000162124634 +151 = 1.531999945640564 +152 = inf +153 = inf +154 = 4.440000057220459 +155 = 4.440000057220459 +156 = 4.48799991607666 +157 = 4.48799991607666 +158 = 4.519999980926514 +159 = 3.4719998836517334 +160 = 3.4600000381469727 +161 = 4.335999965667725 +162 = 4.335999965667725 +163 = 4.311999797821045 +164 = 4.223999977111816 +165 = 4.208000183105469 +166 = 4.151999950408936 +167 = 4.0960001945495605 +168 = 4.056000232696533 +169 = 3.971999883651733 +170 = 3.992000102996826 +171 = 3.9159998893737793 +172 = 3.911999940872192 +173 = 3.868000030517578 +174 = 3.848000049591065 +175 = 3.788000106811523 +176 = 2.983999967575073 +177 = 2.983999967575073 +178 = 2.924000024795532 +179 = 2.9159998893737797 +180 = 2.9159998893737797 +181 = 2.8919999599456787 +182 = 2.900000095367432 +183 = 2.927999973297119 +184 = 2.940000057220459 +185 = 2.9719998836517334 +186 = 2.992000102996826 +187 = 3.0239999294281006 +188 = 3.052000045776367 +189 = inf +190 = inf +191 = 2.996000051498413 +192 = 2.996000051498413 +193 = 2.983999967575073 +194 = 2.983999967575073 +195 = 2.9719998836517334 +196 = 2.947999954223633 +197 = 2.924000024795532 +198 = 2.900000095367432 +199 = 2.888000011444092 +200 = 2.871999979019165 +201 = 2.864000082015991 +202 = 2.859999895095825 +203 = 2.851999998092652 +204 = 2.8480000495910645 +205 = 2.8399999141693115 +206 = 2.819999933242798 +207 = 2.812000036239624 +208 = 2.812000036239624 +209 = 2.808000087738037 +210 = 2.7880001068115234 +211 = 2.759999990463257 +212 = 2.940000057220459 +213 = inf +214 = inf +215 = inf +216 = inf +217 = inf +218 = 2.559999942779541 +219 = 2.559999942779541 +220 = 2.559999942779541 +221 = 2.5480000972747803 +222 = 2.539999961853028 +223 = 2.532000064849853 +224 = 2.51200008392334 +225 = 2.507999897003174 +226 = 2.5 +227 = 2.492000102996826 +228 = 2.492000102996826 +229 = 2.483999967575073 +230 = 2.4760000705718994 +231 = 2.4679999351501465 +232 = 2.4600000381469727 +233 = 2.45199990272522 +234 = 2.447999954223633 +235 = 2.440000057220459 +236 = 2.440000057220459 +237 = 2.2279999256134038 +238 = 2.220000028610229 +239 = 2.2160000801086426 +240 = 2.2239999771118164 +241 = 3.007999897003174 +242 = 3.01200008392334 +243 = 3.032000064849853 +244 = 3.052000045776367 +245 = inf +246 = inf +247 = 2.0160000324249268 +248 = 2.0160000324249268 +249 = 2.013999938964844 +250 = 2.009999990463257 +251 = 2.0179998874664307 +252 = 2.009999990463257 +253 = 2.003999948501587 +254 = 2.009999990463257 +255 = 2.00600004196167 +256 = 2.009999990463257 +257 = 1.9980000257492063 +258 = 2.0 +259 = 2.003999948501587 +260 = 2.0 +261 = 1.9980000257492063 +262 = 2.00600004196167 +263 = 3.007999897003174 +264 = 3.007999897003174 +265 = 3.007999897003174 +266 = 3.007999897003174 +267 = 2.8480000495910645 +268 = 2.8480000495910645 +269 = 2.8480000495910645 +270 = 2.851999998092652 +271 = 2.7279999256134038 +272 = 2.7279999256134038 +273 = inf +274 = inf +275 = inf +276 = 8.663999557495117 +277 = 8.663999557495117 +278 = 8.67199993133545 +279 = inf +280 = 8.680000305175781 +281 = 8.680000305175781 +282 = 8.704000473022461 +283 = 8.704000473022461 +284 = 7.927999973297119 +285 = 7.927999973297119 +286 = 6.703999996185303 +287 = 6.703999996185303 +288 = 6.6479997634887695 +289 = 6.607999801635742 +290 = inf +291 = 5.216000080108643 +292 = 5.216000080108643 +293 = 5.216000080108643 +294 = 5.216000080108643 +295 = 5.136000156402588 +296 = 5.136000156402588 +297 = 9.04800033569336 +298 = 9.04800033569336 +299 = 9.04800033569336 +300 = 9.04800033569336 +301 = 3.51200008392334 +302 = 3.51200008392334 +303 = 3.444000005722046 +304 = 3.351999998092652 +305 = 3.259999990463257 +306 = 3.2320001125335693 +307 = 3.1519999504089355 +308 = 3.0999999046325684 +309 = 3.007999897003174 +310 = 2.9159998893737797 +311 = 2.907999992370605 +312 = 2.927999973297119 +313 = 2.936000108718872 +314 = 2.940000057220459 +315 = 2.940000057220459 +316 = 2.9679999351501465 +317 = 2.983999967575073 +318 = 2.992000102996826 +319 = 3.007999897003174 +320 = 3.032000064849853 +321 = 3.039999961853028 +322 = 3.0480000972747803 +323 = 3.068000078201294 +324 = 3.072000026702881 +325 = 3.0840001106262207 +326 = 3.115999937057495 +327 = 3.131999969482422 +328 = 3.0439999103546143 +329 = 3.0439999103546143 +330 = 2.828000068664551 +331 = 2.828000068664551 +332 = 2.96399998664856 +333 = 2.884000062942505 +334 = 2.7039999961853027 +335 = 2.7039999961853027 +336 = 2.720000028610229 +337 = 2.7279999256134038 +338 = 2.752000093460083 +339 = 2.7679998874664307 +340 = 2.7880001068115234 +341 = 2.799999952316284 +342 = 2.819999933242798 +343 = 2.8399999141693115 +344 = 2.875999927520752 +345 = 2.8919999599456787 +346 = 3.068000078201294 +347 = 3.1080000400543213 +348 = 2.74399995803833 +349 = 2.747999906539917 +350 = 3.187999963760376 +351 = 3.184000015258789 +352 = 3.200000047683716 +353 = 3.2079999446868896 +354 = 3.568000078201294 +355 = 3.588000059127808 +356 = 3.687999963760376 +357 = 3.660000085830689 +358 = 3.2960000038146973 +359 = inf +360 = inf +361 = inf +362 = inf +363 = 3.236000061035156 +364 = 3.236000061035156 +365 = 3.2279999256134038 +366 = 3.2279999256134038 +367 = 3.2079999446868896 +368 = 3.196000099182129 +369 = 3.1480000019073486 +370 = 3.1600000858306885 +371 = 3.2239999771118164 +372 = 3.2239999771118164 +373 = 4.296000003814697 +374 = 4.296000003814697 +375 = 4.25600004196167 +376 = 4.23199987411499 +377 = 4.184000015258789 +378 = 4.159999847412109 +379 = 4.144000053405762 +380 = 4.119999885559082 +381 = 4.0960001945495605 +382 = inf +383 = 3.588000059127808 +384 = 3.588000059127808 +385 = 3.0999999046325684 +386 = 3.0999999046325684 +387 = 3.631999969482422 +388 = 3.631999969482422 +389 = 3.640000104904175 +390 = 3.6440000534057617 +391 = 3.6640000343322754 +392 = 3.828000068664551 +393 = 3.8239998817443848 +394 = 3.812000036239624 +395 = 3.660000085830689 +396 = 3.628000020980835 +397 = 3.619999885559082 +398 = 3.6040000915527344 +399 = 6.432000160217285 +400 = 6.432000160217285 +401 = 6.415999889373779 +402 = 6.415999889373779 +403 = 6.383999824523926 +404 = 6.352000236511231 +405 = 6.328000068664551 +406 = 6.303999900817871 +407 = 6.271999835968018 +408 = 6.263999938964844 +409 = 6.25600004196167 +410 = 6.23199987411499 +411 = 3.572000026702881 +412 = 3.572000026702881 +413 = 3.572000026702881 +414 = 3.559999942779541 +415 = 3.555999994277954 +416 = 3.5239999294281006 +417 = 3.5360000133514404 +418 = 6.064000129699707 +419 = 6.064000129699707 +420 = 6.047999858856201 +421 = 6.064000129699707 +422 = 6.047999858856201 +423 = 6.015999794006348 +424 = 6.039999961853027 +425 = 6.0320000648498535 +426 = 5.992000102996826 +427 = 5.992000102996826 +428 = 5.984000205993652 +429 = 6.015999794006348 +430 = 6.0 +431 = 5.992000102996826 +432 = 5.984000205993652 +433 = 5.960000038146973 +434 = 5.960000038146973 +435 = 5.952000141143799 +436 = 5.935999870300293 +437 = 5.927999973297119 +438 = 5.935999870300293 +439 = 5.912000179290772 +440 = 5.927999973297119 +441 = 5.90399980545044 +442 = 5.912000179290772 +443 = 5.895999908447266 +444 = 5.872000217437744 +445 = 3.2279999256134038 +446 = 3.2279999256134038 +447 = 3.407999992370605 +448 = 3.407999992370605 +449 = inf +450 = inf +451 = 2.563999891281128 +452 = 2.563999891281128 +453 = 2.5160000324249268 +454 = 2.4760000705718994 +455 = 2.46399998664856 +456 = 2.4679999351501465 +457 = 2.4760000705718994 +458 = 2.6519999504089355 +459 = 2.6440000534057617 +460 = 2.624000072479248 +461 = 2.624000072479248 +462 = 2.640000104904175 +463 = 2.6519999504089355 +464 = 2.6559998989105225 +465 = 2.6760001182556152 +466 = 2.684000015258789 +467 = 2.747999906539917 +468 = 2.7320001125335693 +469 = 2.6440000534057617 +470 = 2.615999937057495 +471 = 2.6080000400543213 +472 = 2.6080000400543213 +473 = 2.615999937057495 +474 = 2.6480000019073486 +475 = 2.635999917984009 +476 = 2.46399998664856 +477 = 2.46399998664856 +478 = 2.4600000381469727 +479 = 2.4560000896453857 +480 = 2.483999967575073 +481 = 2.5199999809265137 +482 = 2.555999994277954 +483 = 2.555999994277954 +484 = 2.503999948501587 +485 = 2.5239999294281006 +486 = 2.5239999294281006 +487 = 2.5360000133514404 +488 = 6.335999965667725 +489 = 6.335999965667725 +490 = 7.127999782562256 +491 = 7.119999885559082 +492 = 7.144000053405762 +493 = 7.184000015258789 +494 = 7.208000183105469 +495 = 7.263999938964844 +496 = 7.23199987411499 +497 = 7.320000171661377 +498 = 7.311999797821045 +499 = 7.360000133514404 +500 = 7.383999824523926 +501 = 7.415999889373779 +502 = 7.455999851226807 +503 = inf +504 = inf +505 = inf +506 = inf +507 = inf +508 = inf +509 = inf +510 = 7.760000228881836 +511 = 7.760000228881836 +512 = 7.800000190734863 +513 = 7.823999881744385 +514 = 7.903999805450439 +515 = 4.263999938964844 +516 = 4.25600004196167 +517 = 4.25600004196167 +518 = 4.223999977111816 +519 = 4.271999835968018 +520 = 4.271999835968018 +521 = 4.311999797821045 +522 = 4.383999824523926 +523 = 4.335999965667725 +524 = 4.368000030517578 +525 = 4.400000095367432 +526 = 4.263999938964844 +527 = 4.239999771118164 +528 = 4.263999938964844 +529 = inf +530 = 4.400000095367432 +531 = 4.400000095367432 +532 = 4.4079999923706055 +533 = 4.4079999923706055 +534 = 4.4079999923706055 +535 = 4.423999786376953 +536 = 4.455999851226807 +537 = 4.631999969482422 +538 = 4.664000034332275 +539 = 4.728000164031982 +540 = 4.736000061035156 +541 = 4.776000022888184 +542 = 4.831999778747559 +543 = 4.895999908447266 +544 = 4.872000217437744 +545 = inf +546 = 5.0879998207092285 +547 = 5.0879998207092285 +548 = 5.432000160217285 +549 = 5.432000160217285 +550 = 5.535999774932861 +551 = 5.576000213623047 +552 = 5.639999866485596 +553 = 5.559999942779541 +554 = 5.639999866485596 +555 = 5.6479997634887695 +556 = 5.97599983215332 +557 = 6.02400016784668 +558 = 6.047999858856201 +559 = 6.199999809265137 +560 = 6.239999771118164 +561 = 6.311999797821045 +562 = 6.360000133514404 +563 = 6.480000019073486 +564 = 6.567999839782715 +565 = 6.703999996185303 +566 = 6.888000011444092 +567 = 6.808000087738037 +568 = 6.791999816894531 +569 = 6.736000061035156 +570 = 6.728000164031982 +571 = 6.6479997634887695 +572 = 6.616000175476074 +573 = 6.5920000076293945 +574 = 6.552000045776367 +575 = 6.504000186920166 +576 = 6.535999774932861 +577 = 6.624000072479248 +578 = 6.808000087738037 +579 = 6.840000152587891 +580 = inf +581 = 7.28000020980835 +582 = 7.28000020980835 +583 = 7.3520002365112305 +584 = 7.631999969482422 +585 = 7.776000022888184 +586 = 8.055999755859375 +587 = 8.104000091552734 +588 = 8.152000427246094 +589 = 8.079999923706055 +590 = 8.079999923706055 +591 = inf +592 = inf +593 = inf +594 = 3.588000059127808 +595 = 3.588000059127808 +596 = 3.595999956130981 +597 = 3.5999999046325684 +598 = 4.0879998207092285 +599 = 4.0879998207092285 +600 = 4.119999885559082 +601 = 4.164000034332275 +602 = inf +603 = inf +604 = inf +605 = 0.4519999921321869 +606 = 0.4519999921321869 +607 = 0.44200000166893 +608 = 0.4350000023841858 +609 = 0.4329999983310699 +610 = 0.4329999983310699 +611 = 0.4320000112056732 +612 = 0.4300000071525574 +613 = 0.4280000030994415 +614 = 0.4259999990463257 +615 = 0.4250000119209289 +616 = 0.4259999990463257 +617 = 0.4239999949932098 +618 = 0.4230000078678131 +619 = 0.4239999949932098 +620 = 0.4250000119209289 +621 = 0.4280000030994415 +622 = 0.4269999861717224 +623 = 0.4280000030994415 +624 = 0.4289999902248382 +625 = 0.4269999861717224 +626 = 0.4309999942779541 +627 = 0.4300000071525574 +628 = 0.4289999902248382 +629 = 0.4300000071525574 +630 = 0.4320000112056732 +631 = 0.4339999854564667 +632 = 0.4339999854564667 +633 = 0.4329999983310699 +634 = 0.4320000112056732 +635 = 0.4300000071525574 +636 = 0.4280000030994415 +637 = 0.4269999861717224 +638 = 0.4259999990463257 +639 = 0.4250000119209289 +640 = 0.4250000119209289 +641 = 0.4239999949932098 +642 = 0.4230000078678131 +643 = 0.4239999949932098 +644 = 0.4230000078678131 +645 = 0.421999990940094 +646 = 0.4210000038146972 +647 = 0.4210000038146972 +648 = 0.4210000038146972 +649 = 0.4210000038146972 +650 = 0.4210000038146972 +651 = 0.4199999868869781 +652 = 0.4199999868869781 +653 = 0.4199999868869781 +654 = 0.4199999868869781 +655 = 0.4189999997615814 +656 = 0.4189999997615814 +657 = 0.4189999997615814 +658 = 0.4180000126361847 +659 = 0.4180000126361847 +660 = 0.4180000126361847 +661 = 0.4180000126361847 +662 = 0.4169999957084656 +663 = 0.4160000085830688 +664 = 0.4149999916553497 +665 = 0.4149999916553497 +666 = 0.4169999957084656 +667 = 0.4189999997615814 +668 = 0.4189999997615814 +669 = 0.4189999997615814 +670 = 0.4189999997615814 +671 = 0.4169999957084656 +672 = 0.4149999916553497 +673 = inf +674 = inf +675 = inf +676 = 0.2450000047683715 +677 = 0.2450000047683715 +678 = 0.2399999946355819 +679 = 0.238999992609024 +680 = 0.2360000014305114 +681 = 0.2339999973773956 +682 = 0.2319999933242797 +683 = 0.231000006198883 +684 = 0.2300000041723251 +685 = 0.2300000041723251 +686 = 0.2280000001192093 +687 = 0.2259999960660934 +688 = 0.2249999940395355 +689 = 0.2240000069141388 +690 = 0.2230000048875808 +691 = 0.2230000048875808 +692 = 0.221000000834465 +693 = 0.2199999988079071 +694 = 0.2189999967813491 +695 = 0.2189999967813491 +696 = 0.2179999947547912 +697 = 0.2169999927282333 +698 = 0.2140000015497207 +699 = 0.2140000015497207 +700 = 0.210999995470047 +701 = 0.2070000022649765 +702 = 0.1990000009536743 +703 = 0.1959999948740005 +704 = 0.1940000057220459 +705 = 0.1889999955892563 +706 = 0.1850000023841858 +707 = 0.181999996304512 +708 = 0.1790000051259994 +709 = 0.1759999990463256 +710 = 0.1729999929666519 +711 = 0.1700000017881393 +712 = 0.1689999997615814 +713 = 0.1679999977350235 +714 = 0.1659999936819076 +715 = 0.164000004529953 +716 = 0.1620000004768371 +717 = 0.1620000004768371 +718 = 0.1599999964237213 +719 = 0.1589999943971634 From 8ea4aaaa5565b54d55534bbaabdf4c32b981279b Mon Sep 17 00:00:00 2001 From: Yey007 <55263178+Yey007@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:55:26 -0500 Subject: [PATCH 6/6] Update basic mode --- lib/icp/impl/feature_aware.cpp | 2 -- src/main.cpp | 2 +- src/sim/lidar_view.cpp | 10 +++++----- src/sim/view_config.cpp | 2 +- src/sim/view_config.h | 2 +- 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/icp/impl/feature_aware.cpp b/lib/icp/impl/feature_aware.cpp index 17d00cd..05dd7b9 100644 --- a/lib/icp/impl/feature_aware.cpp +++ b/lib/icp/impl/feature_aware.cpp @@ -40,8 +40,6 @@ namespace icp { a_current[i] = transform.apply_to(a[i]); } - auto a_current_cm = get_centroid(a_current); - /* TODO: write smth #step Matching Step: */ Eigen::MatrixXd norm_dists = compute_norm_dists(a_current, b); diff --git a/src/main.cpp b/src/main.cpp index b4a6e22..f333c88 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -204,7 +204,7 @@ int main(int argc, const char** argv) { Log.is_enabled = *enable_log; parse_config(config_file, set_config_param, NULL); if (*basic_mode) { - view_config::use_light_background = true; + view_config::use_light_mode = true; } icp::ICP::register_builtin_methods(); diff --git a/src/sim/lidar_view.cpp b/src/sim/lidar_view.cpp index b524092..d13128b 100644 --- a/src/sim/lidar_view.cpp +++ b/src/sim/lidar_view.cpp @@ -59,10 +59,10 @@ void LidarView::on_event(const SDL_Event& event) { void LidarView::draw(SDL_Renderer* renderer, [[maybe_unused]] const SDL_Rect* frame, [[maybe_unused]] double dtime) { - if (view_config::use_light_background) { - SDL_SetRenderDrawColor(renderer, 100, 100, 100, 255); + if (view_config::use_light_mode) { + SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE); } else { - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); } SDL_RenderClear(renderer); @@ -80,12 +80,12 @@ void LidarView::draw(SDL_Renderer* renderer, [[maybe_unused]] const SDL_Rect* fr } icp::Vector a_cm = icp->current_transform().apply_to(icp::get_centroid(source)); - SDL_SetRenderDrawColor(renderer, 255, 0, 0, 10); + SDL_SetRenderDrawColor(renderer, 255, 0, 0, SDL_ALPHA_OPAQUE); SDL_DrawCircle(renderer, a_cm.x() + view_config::x_displace, a_cm.y() + view_config::y_displace, 20); icp::Vector b_cm = icp::get_centroid(destination); - SDL_SetRenderDrawColor(renderer, 0, 0, 255, 10); + SDL_SetRenderDrawColor(renderer, 0, 0, 255, SDL_ALPHA_OPAQUE); SDL_DrawCircle(renderer, b_cm.x() + view_config::x_displace, b_cm.y() + view_config::y_displace, 20); diff --git a/src/sim/view_config.cpp b/src/sim/view_config.cpp index f40761d..efbcc75 100644 --- a/src/sim/view_config.cpp +++ b/src/sim/view_config.cpp @@ -13,5 +13,5 @@ namespace view_config { double x_displace = 100; double y_displace = 50; - bool use_light_background = false; + bool use_light_mode = false; } diff --git a/src/sim/view_config.h b/src/sim/view_config.h index 90db4c1..47d8ac6 100644 --- a/src/sim/view_config.h +++ b/src/sim/view_config.h @@ -12,5 +12,5 @@ namespace view_config { extern double x_displace; extern double y_displace; - extern bool use_light_background; + extern bool use_light_mode; }