High-performance time series downsampling algorithms for visualization

Overview

tsdownsample

PyPI Latest Release support-version Downloads

📈 Time series downsampling algorithms for visualization

Features

  • Fast: written in rust with PyO3 bindings
    • leverages optimized argminmax - which is SIMD accelerated with runtime feature detection
    • scales linearly with the number of data points
    • multithreaded with Rayon (in Rust)
      Why we do not use Python multiprocessing Citing the PyO3 docs on parallelism:
      CPython has the infamous Global Interpreter Lock, which prevents several threads from executing Python bytecode in parallel. This makes threading in Python a bad fit for CPU-bound tasks and often forces developers to accept the overhead of multiprocessing.
      In Rust - which is a compiled language - there is no GIL, so CPU-bound tasks can be parallelized (with Rayon) with little to no overhead.
  • Efficient: memory efficient
    • works on views of the data (no copies)
    • no intermediate data structures are created
  • Flexible: works on any type of data
    • supported datatypes are f16, f32, f64, i16, i32, i64, u16, u32, u64
    !! 🚀 f16 argminmax is 200-300x faster than numpy In contrast with all other data types above, f16 is *not* hardware supported (i.e., no instructions for f16) by most modern CPUs!!
    🐌 Programming languages facilitate support for this datatype by either (i) upcasting to `f32` or (ii) using a software implementation.
    💡 As for argminmax, only comparisons are needed - and thus no arithmetic operations - creating a symmetrical ordinal mapping from f16 to i16 is sufficient. This mapping allows to use the hardware supported scalar and SIMD i16 instructions - while not producing any memory overhead 🎉
    More details are described in argminmax PR #1.
  • Easy to use: simple & flexible API

Install

🚨 This package is currently under development - no stable release yet 🚨

pip install tsdownsample

Usage

from tsdownsample import MinMaxLTTBDownsampler
import pandas as pd; import numpy as np

# Create a time series
y = np.random.randn(10_000_000)
s = pd.Series(y)

# Downsample to 1000 points
s_ds = MinMaxLTTBDownsampler.downsample(s, n_out=1000)

👤 Jeroen Van Der Donckt

Comments
  • Cannot install `tsdownsample` - NameError build is not defined

    Cannot install `tsdownsample` - NameError build is not defined

    Hi 👋🏼,

    I get the following error when trying to install tsdownsample:

    Collecting tsdownsample
      Downloading tsdownsample-0.1.0a1.tar.gz (5.5 kB)
      Installing build dependencies ...   Getting requirements to build wheel ...   Preparing metadata (pyproject.toml) ... Requirement already satisfied: pandas>=1.3 in /home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages (from tsdownsample) (1.4.0)
    Requirement already satisfied: numpy>=1.21 in /home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages (from tsdownsample) (1.22.2)
    Requirement already satisfied: python-dateutil>=2.8.1 in /home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages (from pandas>=1.3->tsdownsample) (2.8.2)
    Requirement already satisfied: pytz>=2020.1 in /home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages (from pandas>=1.3->tsdownsample) (2021.3)
    Requirement already satisfied: six>=1.5 in /home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages (from python-dateutil>=2.8.1->pandas>=1.3->tsdownsample) (1.16.0)
    Building wheels for collected packages: tsdownsample
      Building wheel for tsdownsample (pyproject.toml) ... error: subprocess-exited-with-error
      
      × Building wheel for tsdownsample (pyproject.toml) did not run successfully.
      │ exit code: 1
      ╰─> [27 lines of output]
          A setup.py file already exists. Using it.
          Traceback (most recent call last):
            File "/tmp/pip-install-ptqqurvn/tsdownsample_7026e70fb6cf4d72bd2b00ae792aa535/setup.py", line 28, in <module>
              from setup import *
            File "/tmp/pip-install-ptqqurvn/tsdownsample_7026e70fb6cf4d72bd2b00ae792aa535/setup.py", line 29, in <module>
              build(setup_kwargs)
          NameError: name 'build' is not defined
          Traceback (most recent call last):
            File "/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 351, in <module>
              main()
            File "/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 333, in main
              json_out['return_val'] = hook(**hook_input['kwargs'])
            File "/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 249, in build_wheel
              return _build_backend().build_wheel(wheel_directory, config_settings,
            File "/tmp/pip-build-env-65vdhqp1/overlay/lib/python3.8/site-packages/poetry/core/masonry/api.py", line 56, in build_wheel
              return WheelBuilder.make_in(
            File "/tmp/pip-build-env-65vdhqp1/overlay/lib/python3.8/site-packages/poetry/core/masonry/builders/wheel.py", line 85, in make_in
              wb.build(target_dir=directory)
            File "/tmp/pip-build-env-65vdhqp1/overlay/lib/python3.8/site-packages/poetry/core/masonry/builders/wheel.py", line 118, in build
              self._build(zip_file)
            File "/tmp/pip-build-env-65vdhqp1/overlay/lib/python3.8/site-packages/poetry/core/masonry/builders/wheel.py", line 179, in _build
              self._run_build_command(setup)
            File "/tmp/pip-build-env-65vdhqp1/overlay/lib/python3.8/site-packages/poetry/core/masonry/builders/wheel.py", line 217, in _run_build_command
              subprocess.check_call(
            File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
              raise CalledProcessError(retcode, cmd)
          subprocess.CalledProcessError: Command '['/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/bin/python', '/tmp/pip-install-ptqqurvn/tsdownsample_7026e70fb6cf4d72bd2b00ae792aa535/setup.py', 'build', '-b', '/tmp/pip-install-ptqqurvn/tsdownsample_7026e70fb6cf4d72bd2b00ae792aa535/build']' returned non-zero exit status 1.
          [end of output]
      
      note: This error originates from a subprocess, and is likely not a problem with pip.
      ERROR: Failed building wheel for tsdownsample
    Failed to build tsdownsample
    ERROR: Could not build wheels for tsdownsample, which is required to install pyproject.toml-based projects
    

    fyi, trying to install it via poetry gives the same error

    poetry add tsdownsample
    Using version ^0.1.0a1 for tsdownsample
    
    Updating dependencies
    Resolving dependencies... (5.6s)
    
    Writing lock file
    
    Package operations: 1 install, 2 updates, 0 removals
    
      • Updating typing-extensions (4.4.0 -> 4.0.1)
      • Updating pydantic (1.10.2 -> 1.8.2)
      • Installing tsdownsample (0.1.0a1): Failed
    
      CalledProcessError
    
      Command '['/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/bin/python', '-m', 'pip', 'install', '--use-pep517', '--disable-pip-version-check', '--prefix', '/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8', '--no-deps', '/home/jonas/.cache/pypoetry/artifacts/f4/dc/c1/ed26154e04a327d7ece0b3074c32a5b05bf7057f4dd093eb77b29e0b13/tsdownsample-0.1.0a1.tar.gz']' returned non-zero exit status 1.
    
      at /usr/lib/python3.10/subprocess.py:526 in run
           522│             # We don't call process.wait() as .__exit__ does that for us.
           523│             raise
           524│         retcode = process.poll()
           525│         if check and retcode:
        →  526│             raise CalledProcessError(retcode, process.args,
           527│                                      output=stdout, stderr=stderr)
           528│     return CompletedProcess(process.args, retcode, stdout, stderr)
           529│ 
           530│ 
    
    The following error occurred when trying to handle this error:
    
    
      EnvCommandError
    
      Command ['/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/bin/python', '-m', 'pip', 'install', '--use-pep517', '--disable-pip-version-check', '--prefix', '/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8', '--no-deps', '/home/jonas/.cache/pypoetry/artifacts/f4/dc/c1/ed26154e04a327d7ece0b3074c32a5b05bf7057f4dd093eb77b29e0b13/tsdownsample-0.1.0a1.tar.gz'] errored with the following return code 1, and output: 
      Processing /home/jonas/.cache/pypoetry/artifacts/f4/dc/c1/ed26154e04a327d7ece0b3074c32a5b05bf7057f4dd093eb77b29e0b13/tsdownsample-0.1.0a1.tar.gz
        Installing build dependencies: started
        Installing build dependencies: finished with status 'done'
        Getting requirements to build wheel: started
        Getting requirements to build wheel: finished with status 'done'
        Preparing metadata (pyproject.toml): started
        Preparing metadata (pyproject.toml): finished with status 'done'
      Building wheels for collected packages: tsdownsample
        Building wheel for tsdownsample (pyproject.toml): started
        Building wheel for tsdownsample (pyproject.toml): finished with status 'error'
        error: subprocess-exited-with-error
        
        × Building wheel for tsdownsample (pyproject.toml) did not run successfully.
        │ exit code: 1
        ╰─> [27 lines of output]
            A setup.py file already exists. Using it.
            Traceback (most recent call last):
              File "/tmp/pip-req-build-ubi789br/setup.py", line 28, in <module>
                from setup import *
              File "/tmp/pip-req-build-ubi789br/setup.py", line 29, in <module>
                build(setup_kwargs)
            NameError: name 'build' is not defined
            Traceback (most recent call last):
              File "/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 351, in <module>
                main()
              File "/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 333, in main
                json_out['return_val'] = hook(**hook_input['kwargs'])
              File "/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/lib/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 249, in build_wheel
                return _build_backend().build_wheel(wheel_directory, config_settings,
              File "/tmp/pip-build-env-4xa2n354/overlay/lib/python3.8/site-packages/poetry/core/masonry/api.py", line 56, in build_wheel
                return WheelBuilder.make_in(
              File "/tmp/pip-build-env-4xa2n354/overlay/lib/python3.8/site-packages/poetry/core/masonry/builders/wheel.py", line 85, in make_in
                wb.build(target_dir=directory)
              File "/tmp/pip-build-env-4xa2n354/overlay/lib/python3.8/site-packages/poetry/core/masonry/builders/wheel.py", line 118, in build
                self._build(zip_file)
              File "/tmp/pip-build-env-4xa2n354/overlay/lib/python3.8/site-packages/poetry/core/masonry/builders/wheel.py", line 179, in _build
                self._run_build_command(setup)
              File "/tmp/pip-build-env-4xa2n354/overlay/lib/python3.8/site-packages/poetry/core/masonry/builders/wheel.py", line 217, in _run_build_command
                subprocess.check_call(
              File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
                raise CalledProcessError(retcode, cmd)
            subprocess.CalledProcessError: Command '['/home/jonas/.cache/pypoetry/virtualenvs/semi-guided-speech-27YL4uf1-py3.8/bin/python', '/tmp/pip-req-build-ubi789br/setup.py', 'build', '-b', '/tmp/pip-req-build-ubi789br/build']' returned non-zero exit status 1.
            [end of output]
        
        note: This error originates from a subprocess, and is likely not a problem with pip.
        ERROR: Failed building wheel for tsdownsample
      Failed to build tsdownsample
      ERROR: Could not build wheels for tsdownsample, which is required to install pyproject.toml-based projects
      
    
      at /usr/lib/python3.10/site-packages/poetry/utils/env.py:1476 in _run
          1472│                 output = subprocess.check_output(
          1473│                     command, stderr=subprocess.STDOUT, env=env, **kwargs
          1474│                 )
          1475│         except CalledProcessError as e:
        → 1476│             raise EnvCommandError(e, input=input_)
          1477│ 
          1478│         return decode(output)
          1479│ 
          1480│     def execute(self, bin: str, *args: str, **kwargs: Any) -> int:
    
    The following error occurred when trying to handle this error:
    
    
      PoetryException
    
      Failed to install /home/jonas/.cache/pypoetry/artifacts/f4/dc/c1/ed26154e04a327d7ece0b3074c32a5b05bf7057f4dd093eb77b29e0b13/tsdownsample-0.1.0a1.tar.gz
    
      at /usr/lib/python3.10/site-packages/poetry/utils/pip.py:51 in pip_install
           47│ 
           48│     try:
           49│         return environment.run_pip(*args)
           50│     except EnvCommandError as e:
        →  51│         raise PoetryException(f"Failed to install {path.as_posix()}") from e
           52│ 
    
    
    bug help wanted 
    opened by jonasvdd 7
  • :sparkles: new interface

    :sparkles: new interface

    In this PR we transfer from pandas.Series as representation for time series to a purely np.ndarray based representation (pandas.Series its index can at this time not represent most numeric dtypes, e.g. int16)

    The signature for the downsample methdod is changed to:

    downsample([x], y, n_out, **kwargs)
    

    Note the following:

    • x is optional, allowing the same (memory) efficient runtime as with pd.RangeIndex
    • x and y are both positional arguments (this is in line with how the matplotlib,pyplot.plot signature is)
    • n_out is a mandatory keyword argument

    Example:

    from tsdownsample import MinMaxLTTBDownsampler
    import numpy as np
    
    # Create a time series
    y = np.random.randn(10_000_000)
    
    # Downsample to 1000 points
    s_ds = MinMaxLTTBDownsampler().downsample(y, n_out=1000)
    

    Other aspects of this PR

    • [x] support x and y datetime64: view the array as np.int64
    • [x] support x and y timedelta64: view the array as np.int64
    • [x] support y bool: view the array as np.int8 (under the hood numpy represents a bool as 8 bits)
    • [x] support y int8 & uint8
    • [ ] ~~support categorical data~~ => out of scope for this PR, would mostly be some Python code converting it to an encoding (which is perhaps not the responsibility of this library...) - also not really sure how numpy would represent categorical data

    Major TODOs:

    • documentation :ledger: => will leave this for another PR
    • do not assume fixed sampling rate => will leave this for another PR
    opened by jvdd 6
  • Binary not properly compiled for apple silicon

    Binary not properly compiled for apple silicon

    Tested the pip install tsdownsample on an Apple silicon cpu (M2).

    Instead of installing the library (by using the downloaded binary), the laptop tried to build (:cry:) the library itself..

    Normal installation :arrow_down: (here we see no build, just installation)

    image

    bug 
    opened by jvdd 1
  • :mag: add searchsorted to get equidistant x-bins

    :mag: add searchsorted to get equidistant x-bins

    This PR alleviates the assumption that when x has fixed sampling rate (& no gaps) for certain downsample algorithms. Should fix #10.

    This PR has the following contributions:

    • [x] add sequential & parallel iterator that generates equidistant x-bin idxs (aka searchsorted) in utils.rs
      • [x] use f64 for val_step as this avoids rounding errors with integer / usize x-data types !! => seems to be significantly slower for minmaxlttb (10 - 20 %)
    • [x] minmax algo with x
    • [x] m4 algo with x
    • [x] minmax lttb with x?
    • [x] :snake: update Python bindings (check n_out requirements etc.)
    • [x] :warning: update Python warnings + check new assertions
    • [x] :racehorse: update benchmarks
    • [x] :detective: search & fix out of bounds index issues in generic code of the downsample algorithms

    Algorithm changes:

    • M4:
      • n_out should be multiple of 4
      • removed the code which added the last datapoint to the output => when arr.len % n_out = 0 & equally sampled (+ no gaps) => difference betweeen with x and without x implementation
    • MinMax:
      • n_out should be multiple of 2
      • removed the code which added the first and last datapoint to the output => when arr.len % n_out = 0 & equally sampled (+ no gaps) => difference betweeen with x and without x implementation

    Python binding changes:

    • Removed f16 as supported x datatype (IMO, no 16-bit dtypes make sense as x datatype... as these at max (u16) can only represent up to 65_535 values)
    • M4 requires n_out to be multiple of 4
    • MinMax requires n_out to be multiple of 2
    opened by jvdd 0
  • Do not assume equally sampled x-data

    Do not assume equally sampled x-data

    The current code assumes equally sampled x-data (bin size is expressed in number of samples - assuming there are no gaps & sampling rate does not change)

    To remove this assumption we should use something like np.searchsorted to determine the start- and end-indexes of the bins (this uses the x-data values to determine the bins).

    I guess for empty bins, we should also perform some cleanup?

    enhancement 
    opened by jvdd 0
  • :robot: switch to maturin for build & release

    :robot: switch to maturin for build & release

    Fixes #2 (I hope :pray:)

    • [x] :robot: switch to maturin for build & release
    • [x] :bug: (minor) bug fixes
    • [x] :dizzy: head/tail recursion in build macro to build for all x & y dtype combinations
    • [x] :heavy_check_mark: extend Python tests to test the rust build
    • [x] :sparkles: add minmax_ratio to minmaxlttb bindings
    • [x] :arrow_up: upgrade argminmax dependency -> now also supporting SIMD on aarch64 :rocket:

    :vomiting_face: this PR hacks support for minmax_ratio in the current interface (requiring to disable some type checks from mypy.. - #5 should further address this!)

    opened by jvdd 0
  • :detective: testing + :building_construction: build & :rocket: release

    :detective: testing + :building_construction: build & :rocket: release

    Fixes #2 (I Hope :pray:)

    • [x] :bug: bug fix in switch_mod code for rust downsamplers
    • [x] :detective: add first (naive) tests
    • [x] :building_construction: build
    • [x] :rocket: release
    • [x] :pen: update readme
    opened by jvdd 0
  • :package: fix setup.py + :bug: some bug fixes + :robot: package CI-CD

    :package: fix setup.py + :bug: some bug fixes + :robot: package CI-CD

    Should open the path to the first proper PyPi release :fire:

    • [x] add tsdownsample_rs (aka the rust code) as subpackage (under tsdownsample._rust.
    • [x] :bug: bug fix in area calculation of LTTB_without_x
    • [x] :snake: first version of the Python bidings
    • [x] :pen: lint + checking the Python & Rust code

    TODO -> will create new PR for this:

    • [ ] testing of Python package
    • [ ] deploy script
    opened by jvdd 0
  • Different results between different implementations

    Different results between different implementations

    I have been playing around with your implementation of lttb and trying to compare it to other implementations (numpy and numba) and have been impressed by the speed.

    image

    But I have noticed that the algorithm does not give the same results as your other implementation in plotly_resampler. It seems to fail around 30,000 points. Do you know if this is expected?

    Looking at the above log-log plot, some extra overhead is added, around 30,000. So I'm thinking it could be because of some race condition when parallelizing the algorithm.

    import numpy as np
    
    from plotly_resampler.aggregation.algorithms.lttb_py import LTTB_core_py
    from tsdownsample import MinMaxLTTBDownsampler
    
    np.random.seed(1)
    
    ns = [i for i in np.arange(1, 51) * 1000]
    n_out = 1000
    for n in ns:
        x, y = np.arange(n), np.random.randn(n).cumsum()
        py = LTTB_core_py.downsample(x, y, n_out)
        ru = MinMaxLTTBDownsampler().downsample(x, y, n_out=n_out)
    
        print(f"Matches with {n:>5}: {(py == ru).all()}")
    
    opened by Hoxbro 1
  • Documentation for integrations

    Documentation for integrations

    • which interface to implement, decision statements of current architecture
    • what to look out for
    • links to existing integrations (plotly-resampler in near future 🙏🏼 )
    documentation enhancement 
    opened by jonasvdd 0
  • :snake: Python interface not yet stable

    :snake: Python interface not yet stable

    :exclamation: :rotating_light: The current Python interface is still under development!!

    Some factors that should be taken into account;

    • decide whether we go for classes or methods
    • flexible datatype support (pd.Series seems not ideal, cfr. the bug we uncovered @jonasvdd)
    • ...

    Some other TODOs;

    • [x] add minmax_ratio to Python bindings of minmaxlttb algorithm (:heavy_check_mark: #4)

    (continuation of issue #2 )

    unsure 
    opened by jvdd 3
Owner
PreDiCT.IDLab
Repositories of the IDLab PreDiCT research group
PreDiCT.IDLab
A rust implementation of some popular snowball stemming algorithms

Rust Stemmers This crate implements some stemmer algorithms found in the snowball project which are compiled to rust using the rust-backend of the sno

CurrySoftware GmbH 84 Dec 15, 2022
Read input lines as byte slices for high efficiency

bytelines This library provides an easy way to read in input lines as byte slices for high efficiency. It's basically lines from the standard library,

Isaac Whitfield 53 Sep 24, 2022
High precision decimal

decimal-rs High precision decimal with maximum precision of 38. Optional features serde When this optional dependency is enabled, Decimal implements t

CoD 22 Dec 28, 2022
An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs.

regex A Rust library for parsing, compiling, and executing regular expressions. Its syntax is similar to Perl-style regular expressions, but lacks a f

The Rust Programming Language 2.6k Jan 8, 2023
Learning how to build real-time procedural planets

Is It Planet Yet? This is just an experiment: me trying to learn how to build real-time procedural planets. Any suggestions/contributions is welcome.

null 3 Jan 10, 2023
The rust client for CeresDB. CeresDB is a high-performance, distributed, schema-less, cloud native time-series database that can handle both time-series and analytics workloads.

The rust client for CeresDB. CeresDB is a high-performance, distributed, schema-less, cloud native time-series database that can handle both time-series and analytics workloads.

null 12 Nov 18, 2022
A high-performance, distributed, schema-less, cloud native time-series database

CeresDB is a high-performance, distributed, schema-less, cloud native time-series database that can handle both time-series and analytics workloads.

null 1.8k Dec 30, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
A high-performance web-based geospatial visualization tool with an emphasis LEO satellites and lunar missions.

A high-performance web-based geospatial visualization tool with an emphasis LEO satellites and lunar missions. Written in Rust to target WebGPU, with WebGL2 backwards compatibility.

Shane B. 5 Dec 20, 2023
The Polkadot Hackathon Global Series North America edition is the second in a series of hackathons that brings the cutting edge of blockchain to a global community.

Polkadot Hackathon Project We are translating Uniswap v2 to Ink. Dependencies Install cargo-contract for building Ink contracts: cargo install dylint-

Kristiyan Dilov 3 Jun 28, 2022
Scalable and fast data store optimised for time series data such as financial data, events, metrics for real time analysis

OnTimeDB Scalable and fast data store optimised for time series data such as financial data, events, metrics for real time analysis OnTimeDB is a time

Stuart 2 Apr 5, 2022
Real-time 3D orientation visualization of a BNO055 IMU using Bissel and Bevy

orientation This is a demonstration of real-time visualization of the attitude of a BNO055 IMU across a wireless network to a Bevy app using the Bisse

chris m 4 Dec 10, 2022
A high-performance, high-reliability observability data pipeline.

Quickstart • Docs • Guides • Integrations • Chat • Download What is Vector? Vector is a high-performance, end-to-end (agent & aggregator) observabilit

Timber 12.1k Jan 2, 2023
Rust High Performance compile-time ORM(RBSON based)

WebSite | 简体中文 | Showcase | 案例 A highly Performant,Safe,Dynamic SQL(Compile time) ORM framework written in Rust, inspired by Mybatis and MybatisPlus.

rbatis 1.7k Jan 7, 2023
Time series anomaly detection for Rust

AnomalyDetection.rs Time series AnomalyDetection for Rust Learn how it works Installation Add this line to your application’s Cargo.toml under [depend

Andrew Kane 6 Nov 21, 2022
Rushes are new ephemeral projects at Hive Helsinki. Wordle is the first in this series with 48 hours time window

Rushes are new ephemeral projects at Hive Helsinki. Wordle is the first in this series with 48 hours time window

Jiri Novotny 1 Feb 24, 2022
A rust library built to support building time-series based projection models

TimeSeries TimeSeries is a framework for building analytical models in Rust that have a time dimension. Inspiration The inspiration for writing this i

James MacAdie 12 Dec 7, 2022
A SOAP client for Brazilian Central Bank's Time Series Management System

A SOAP client for Brazilian Central Bank's Time Series Management System

Felipe Noronha 3 May 4, 2022
Infino - Fast and scalable service to store time series and logs - written in Rust

Infino 〽️ ?? — ?? ?? — ⚖️ ?? Ingest Metrics and Logs — Query and Insights — Scale and Save $$ Infino is an observability platform for storing metrics

null 6 Apr 23, 2023
This repository contains the Rust source code for the algorithms in the textbook Algorithms, 4th Edition

Overview This repository contains the Rust source code for the algorithms in the textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne.

chuan 549 Dec 26, 2022