Skip to main content

Find valuable gems 💎 in your tracked sport 🚴 activity!

Project description

sportgems

Sportgems finds valuable gems 💎 in your tracked sport 🚴 activity!

What is it?

Sportgems is a tiny library which lets you efficiently parse your activity data. It will search and find your fastest sections. It will determine the start, end and speed of whatever fastest sections you are interested, e.g. 1km, 2km and 10km. This repo is a tiny rust reincarnation of the C++ implementation of the sportgems algorithm.

Sportgems is (or will be) used in workoutizer to find your fastest 1km (and other 💎) in all your activities and ultimately visualize it.

Get Started

Sportgems is bundled in a python package using pyo3. Simply install it with pip:

pip install sportgems

In order to search for gems 💎 in your activity, you need to pass the coordinates as list of tuples of floats (lat, lon) and the timestamps as a list of floats as seconds since the Unix epoch:

from sportgems import find_gems

fastest_1km = 1000      # in meter
coordinates = [(48.123, 9.35), (48.123, 9.36), (48.123, 9.37), (48.123, 9.38)]
times = [1608228953.8, 1608228954.8, 1608228955.8, 1608228956.8]

result = find_gems(fastest_1km, times, coordinates)

The result will be a tuple consisting of (int, int, float) where

  • the first element is the start index
  • the second element is the end index of the fastest section
  • the last element is the found velocity In the above example this would lead to
start_index = result[0]
end_index = result[1]
velocity = result[2]

print(f"The fastest {int(fastest_1km / 1000)}km is from index {start_index} to {end_index} with a velocity of {velocity}m/s.")

which prints

The fastest 1.0km is from index 1 to 2 with a velocity of 743.0908195788583m/s.

How does it work?

The following diagram illustrates how the core algorithm (implemented in gem_finder.cpp) works:

Running the tests

In order to run the rust unit tests simply run

cargo test

To run the python test, which obviously also covers the import of the python package you first need to install the requirements

pip install -r requirements.txt

and subsequently run the tests

pytest tests/

Contributing

Contributions are welcome!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

sportgems-0.1.2-cp39-none-win_amd64.whl (98.9 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

sportgems-0.1.2-cp39-cp39-manylinux2014_x86_64.whl (146.4 kB view hashes)

Uploaded CPython 3.9

sportgems-0.1.2-cp39-cp39-macosx_10_7_x86_64.whl (135.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.7+ x86-64

sportgems-0.1.2-cp38-none-win_amd64.whl (98.9 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

sportgems-0.1.2-cp38-cp38-manylinux2014_x86_64.whl (146.4 kB view hashes)

Uploaded CPython 3.8

sportgems-0.1.2-cp38-cp38-macosx_10_7_x86_64.whl (135.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.7+ x86-64

sportgems-0.1.2-cp37-none-win_amd64.whl (98.9 kB view hashes)

Uploaded CPython 3.7 Windows x86-64

sportgems-0.1.2-cp37-cp37m-manylinux2014_x86_64.whl (146.4 kB view hashes)

Uploaded CPython 3.7m

sportgems-0.1.2-cp37-cp37m-macosx_10_7_x86_64.whl (135.4 kB view hashes)

Uploaded CPython 3.7m macOS 10.7+ x86-64

sportgems-0.1.2-cp36-none-win_amd64.whl (99.3 kB view hashes)

Uploaded CPython 3.6 Windows x86-64

sportgems-0.1.2-cp36-cp36m-manylinux2014_x86_64.whl (146.8 kB view hashes)

Uploaded CPython 3.6m

sportgems-0.1.2-cp36-cp36m-macosx_10_7_x86_64.whl (135.8 kB view hashes)

Uploaded CPython 3.6m macOS 10.7+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page