Skip to main content

Control-loop and data pipeline for the Deimos data acquisition system

Project description

Deimos

Control program and data integrations for the Deimos data acquisition ecosystem.

See the project readme for contact details as well as commentary about the goals and state of the project.

The control program and the firmware-software shared library share a changelog at the workspace level.

Install - Rust

cargo add deimos

Install - Python

pip install deimos-daq

Features & Roadmap

✅ Implemented | 💡 Planned

Feature Category Features
Control Loop ✅ Fixed-dt roundtrip control loop
✅ Network scanning for available hardware
✅ Planned loop termination
✅ Global event logging
✅ Reconnection
✅ Low-CPU-usage background operation
Control Calcs ✅ User-defined custom calcs
✅ Explicit (acyclic) calc expression
✅ Low-pass filters
✅ Sequenced state machines
✅ Polynomial calibration curves
💡 Cyclic expressions with explicit time-delay
💡 Prototype calc w/ rhai script-defined inner function
Data Integrations ✅ User-defined custom targets
✅ Manual read/write
✅ CSV
✅ In-memory dataframe
✅ TimescaleDB
💡 InfluxDB
💡 Zarr file/bucket
💡 Generic sqlite, postgres, etc.
Hardware Peripherals ✅ Deimos DAQs
✅ User-defined custom hardware
✅ User-defined hardware drivers
✅ Hardware-out-of-the-loop wrapper
Socket Interfaces
(peripheral I/O)
✅ User-defined custom interfaces
✅ UDP/IPV4
✅ Unix socket
✅ Thread channel sideloading
💡 TCP
💡 UDP/IPV6

Concept of Operation

The control program follows the hardware peripheral state machine, which is linear except that an error in any peripheral state results in returning to Connecting.

Peripheral states:

  1. Connecting (no communication with the control machine)
  2. Binding (waiting to associate with a control machine)
  3. Configuring (waiting for operation-specific configuration from control machine)
  4. Operating (roundtrip control)

The controller initialization schedule is:

                  --------------------binding timeout windows
                 /                          /
                /    Controller init       /           
             |====|=====================|====|         timeout to operating
     scan for|                          |==============|
  peripherals|                          |      \
   (broadcast|              sent binding|       \
     binding)|                          |    configuring window
                             peripherals|
                              transition|
                          to configuring|            

In words,

  1. Scan network for peripherals available to bind
    • Broadcast binding request, but do not send configuration; allow Configuring to time out back to Connecting
  2. Initialize controller (set up data integrations, initialize internal state, etc)
  3. Send binding request
  4. Wait for binding responses
  5. Send configuration
  6. Wait for start of Operating

Peripherals acknowledge binding and transition to configuring on their next internal cycle (usually 1ms) after receiving a request to bind. They will then wait for configuration input until the timeout to operating, and either proceed to Operating if configuration was successful, or return to Connecting (and likely return immediately to Binding) if configuration was not successful.

The control loop then follows a fixed schedule on each cycle:

  1. Send control input to peripherals
  2. Wait for outputs from peripherals
    • Target synchronization to middle of cycle
  3. Update time-sync control
  4. Run calculations on peripheral outputs

Control loop timing uses the control machine's best available monotonic clock. Both system time in UTC with nanoseconds and monotonic clock time are stored in order to support post-processing adjustments to account for the slow drift of the monotonic clock relative to system time.

Example: 200Hz Control Program w/ 2 DAQs

use std::time::Duration;

use deimos::calc::{Constant, Sin};
use deimos::peripheral::{PluginMap, analog_i_rev_3::AnalogIRev3};
use controller::context::ControllerCtx;
use deimos::*;

// The name of the operation will be used as the table name for databases,
// or as the file name for local storage.
let op_name = "test_op".to_owned();

// An optional dictionary mapping user-defined custom hardware
// peripheral model numbers to initializer functions.
let peripheral_plugins: Option<PluginMap> = None;

// Configure the controller
//    Sample interval is taken as integer nanoseconds
//    so that any rounding and loss of precision is visible to the user
let rate_hz = 200.0;
let dt_ns = (1e9_f64 / rate_hz).ceil() as u32;  // Control cycle period

// Define idle controller
let mut ctx = ControllerCtx::default();
ctx.op_name = op_name;
ctx.dt_ns = dt_ns;
let mut controller = Controller::new(ctx);

// Set up any number of data integrations,
// all of which will receive the same data at each cycle of the control loop
//    TSDB-flavored postgres database
let buffer_window = Duration::from_nanos(1); // Non-buffering mode
let retention_time_hours = 1;
let timescale_dispatcher: Box<dyn Dispatcher> = TimescaleDbDispatcher::new(
    "<database name>",  // Database name
    "<database address>", // URL or unix socket interface
    "<username>",  // Login name; for unix socket, must match OS username
    "<token env var>",  // Environment variable containing password or token
    buffer_window,
    retention_time_hours,
);
controller.add_dispatcher("tsdb", timescale_dispatcher);

//    A 50MB CSV file that will be wrapped and overwritten when full
let csv_dispatcher: Box<dyn Dispatcher> =
    CsvDispatcher::new(50, dispatcher::Overflow::Wrap);
controller.add_dispatcher("csv", csv_dispatcher);

// Associate hardware peripherals that we expect to find on the network
// The controller can also run with no peripherals at all, and simply do
// calculations on a fixed time interval.
controller.add_peripheral("p1", Box::new(AnalogIRev3 { serial_number: 1 }));
controller.add_peripheral("p2", Box::new(AnalogIRev3 { serial_number: 2 }));

// Set up calcs that will be run at each cycle
//     Add a constant for duty cycle and a sine wave for frequency
let freq = Sin::new(1.0 / (rate_hz / 100.0), 0.25, 100.0, 250_000.0, true);
let duty = Constant::new(0.5, true);
controller.add_calc("freq", freq);
controller.add_calc("duty", duty);
//     Set a PWM on the first peripheral to change its frequency in time
controller.set_peripheral_input_source("p1.pwm0_freq", "freq.y");  // A value to be written to the hardware
controller.set_peripheral_input_source("p1.pwm0_duty", "duty.y");
//     Set a PWM frequency on one peripheral based on a measured temperature from the other peripheral
controller.set_peripheral_input_source("p2.pwm0_duty", "duty.y");  // Values can be referenced any number of times
controller.set_peripheral_input_source("p2.pwm0_freq", "p1_rtd_5.temperature_K");

// Serialize and deserialize the controller (for demonstration purposes).
// All of the configuration up to this point, including any custom peripheral plugins
// or user-defined calcs, are serialized with the controller and can be written to and read from a json file.
let serialized_controller: String = serde_json::to_string_pretty(&controller).unwrap();
let _deserialized_controller: Controller = serde_json::from_str(&serialized_controller).unwrap();


// Run the control program
// (skipped here because there are no peripherals
// or databases on the network in the test environment).
// controller.run(&peripheral_plugins, None);

Project details


Download files

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

Source Distribution

deimos_daq-0.15.0.tar.gz (303.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl (2.7 MB view details)

Uploaded PyPymusllinux: musl 1.2+ i686

deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl (2.8 MB view details)

Uploaded PyPymusllinux: musl 1.2+ ARMv7l

deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded PyPymusllinux: musl 1.2+ ARM64

deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_i686.whl (2.7 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ i686

deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_armv7l.whl (2.8 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARMv7l

deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_i686.whl (2.7 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ i686

deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_armv7l.whl (2.8 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARMv7l

deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

deimos_daq-0.15.0-cp311-abi3-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.11+Windows x86-64

deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ x86-64

deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_i686.whl (2.7 MB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ i686

deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_armv7l.whl (2.8 MB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ ARMv7l

deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ ARM64

deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ x86-64

deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.6 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ s390x

deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.6 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ppc64le

deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.5 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARMv7l

deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARM64

deimos_daq-0.15.0-cp311-abi3-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

deimos_daq-0.15.0-cp311-abi3-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

Details for the file deimos_daq-0.15.0.tar.gz.

File metadata

  • Download URL: deimos_daq-0.15.0.tar.gz
  • Upload date:
  • Size: 303.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.10.2

File hashes

Hashes for deimos_daq-0.15.0.tar.gz
Algorithm Hash digest
SHA256 fa17b141e3b9b7fd0239b5b5eae79a94e76852dbd52864ed98107d93d608c3b6
MD5 4a433605ab9d41940a0944642f46c9af
BLAKE2b-256 f0dbe86d61713b24924f2c5ba44806a26ccd6f2dcd5fde68700c562a4bceb3b6

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 adfc0b7579605e7e118a4de2037bf4423ee46590e02b8a6527d3c42567c24b86
MD5 f04dd1065423be6c5890397f39716d52
BLAKE2b-256 ee64ea4e2bc2a770a2e31a3a721b746a80e7b72fe8ae27b2cfaf85c8a83953a6

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 bfd640a5acdc6823616ad3033d230a5be62985c1e081293840978cce48d641a6
MD5 5bcce01c0e89f176c6d1a90e2f594345
BLAKE2b-256 592cd34a39e23a81a06203aaf6d36e4767291c78e91854b6eeb8a9c764a7e0a8

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 f3b33c2ede9c3153158067802223f450053ac957bae43cfcd347f29980ead233
MD5 2e3312ee87d29cc6c1ea1307ec7411ec
BLAKE2b-256 e3327c38dbf9d1c390a3c4e25ecb671cfd7f9616021bb06a00eee9adfe44a368

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 18ca07e0124b432e6f67b5bb732cf4f53c8546c75a9db6adf6c0fe462a32582b
MD5 41264422b9bb9edb1de7ea2ce860b135
BLAKE2b-256 18394f4baaf8f629ebae68fac5b4b224154da4be5963d576d21b9cef99feace9

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 222811ea1ca06d55d3d1c48980debe4ceb1b63dfe81a083d7e109ce4b7d9cae2
MD5 e141fa4be47f53c8b2211338b0cf4f6c
BLAKE2b-256 9ae52a2e53f9be8b8d153f6be5a92d18381865df9929b452af1fd33aa3c4a952

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 ee0940fc6b862efdd7d875ff659c49138baeb57d63ce4c5b5eb2f01786313471
MD5 138b9ef8d57e519d2e4fd2eedd51e42d
BLAKE2b-256 ea01283b2df945e206cdd49ca7c39a1725f850afd6a3a87dcecd2c6fadfa8c27

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 d9fcd83eb16231ccf287a44674537da9a9ad26ff2a170173efcae3bcbb4034da
MD5 9d1863e10359a26ed4221fe6c2d57a9f
BLAKE2b-256 a6c9797b7cf734619d8a75d35c6f33c262a3b43e59e5d1f010e5a3beb36503ae

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2f2adc51ff74652a47c5b15e1fd7b7563b0d6a3af30bc9e5f394cbf7642119f3
MD5 4bfb5bd20cd43bb0a7016b7dea29fb66
BLAKE2b-256 a7ec3ef6868c0dac0a48b9ff6f7ada0b820f8095223f8292ac00a55c2973e380

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fc9714c5c7eaec63815103e59af82b1da0e2500a0e854aa1c6e0ee22aec7ceff
MD5 05df92307dca60665a7ff9e8a63b4c1f
BLAKE2b-256 b395c8fd2601f7817cd8edd10c1d573d53084db9cd8932d50db577872a30288a

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d793a3073aea08f9339a6919a0df1cf5e2ea632388898799556960d211800071
MD5 0ced577d49513cb6a6d33b9cb5f6dcb9
BLAKE2b-256 11ad23d2f047e452258057ff8969f3cb481a12a0bbd267681cae324311e0c54a

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 7d1ae9c4411c23e3c8548e7fe791093201c13737cca98da5e7c4cfd4cf1624fc
MD5 3cfc56c9f7d41e268ef8ac95bb75f52e
BLAKE2b-256 69c277a2a8f92bdb8e30df53a4383ac112d0cf0165408998089271b3cf334114

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9b7399ddb3257fc23b576aadedcd8c5df0eb5d618fbba287a7daf581650c2b11
MD5 6a57932d7c8ed4ea61ef65d422a42a81
BLAKE2b-256 0e3c3585113141a2144d1cf9e0bec77dd701994c90319bdd4ac28fdce5625c36

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e7070af63218f641e92c99787fd1e949c1646b12242975c414b8584dc12e0c2e
MD5 76126f4f169a411448753d74b9b08adb
BLAKE2b-256 2fc29f651e0c19bd03e15ba78c99ea8477a0fcce313dda5a0d600d076333fba1

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 90662e2240408e1c1e67e27c116843e9ab5ead6f2e950acd7874d51f6e73de0f
MD5 8ad952b9f6217470acd8b7e14355eeba
BLAKE2b-256 221b9a98a9026fb866a3b375180e3797bfa3d2b6691b6c66248bb298c39e2e0d

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 92851b516b359852b54b3544f1477a55e1a7fc20391e8b55f1704d16657d8681
MD5 cc61ec966198b7e51393be1c2b860cb1
BLAKE2b-256 557210f0338dd948f0a2114a26abdc08926f6a31aa9271ad68acf5286ad73a70

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 6522f7acae689e38c7dab906275d792950b218df4ad71011ff7724901e77dfd4
MD5 3bab18bae6bd021ad5f08e72dd3dd985
BLAKE2b-256 265ed53c020f43378d602cf21b6b67b90fc009c901fcef74341113eb5d94f0b9

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8b7bbae2bd6f567202118330a9fc1b719005267e99415b951296582ee7d8061b
MD5 7e7297894994ffa767f57342c664e23b
BLAKE2b-256 50949d3171aca2b044c8a6a16ae85b5394dab2bb58d801441c11881559c9ba83

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7dca79673b499c05f645f56eebd9e4469ec61ed08f80036e3d72476099cc0637
MD5 cf7e49712fdd554bc415343539cce2eb
BLAKE2b-256 d32e442960341afe56e242ea698138a7bac11825e853f9378e445ce04ec0b31a

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 f2349620a7cb515d27d72cc2219ed2d0878087cc890adddb7d0f5a3ef761d452
MD5 065e3a41fad682a6567e704de056dc70
BLAKE2b-256 0c54c7cbff713db65ba959192e45df698a8daf34427e4a20e0731c12c9a829a8

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1683a88a3efbffe624aa9cb19ae26838f041e66b93329089987d66c07177b538
MD5 5297aeffae453f4175fb21b43e64209f
BLAKE2b-256 fc2c45de4152b7f88e3878046cf16ac7025d0db76b57c9aafbac3e199b21a17e

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2ea7cd6c950e63685ab3de647fa8d4ee4b90c743e6ad924f5287d932189b1d2d
MD5 c6ce8c76a558bfde3b6f9cad828eef0a
BLAKE2b-256 0d498b3446b915940412e1897c29a72b6c3d1ef4f093367b3c6b8dadf9413012

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f3d3b6a41dd9e23d7cca357df7521f770747c340a50a3bb922348d83b25e0b63
MD5 bc21b5182d41ff0f01d53d477c7c9aae
BLAKE2b-256 6357ef31438415836433b366babb158e98149bece5ad26350568650d212774df

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 50b4f500ebe7438d221dfe682fd81fa623b40fd71567b9a47d853c6b3aaeb065
MD5 e298a5ef9f994aa52e5e0019fbe2e710
BLAKE2b-256 f84ed850700e6fbd2fad8b69c7668fe26807e0c2f49d191ec0ea7862a117b593

See more details on using hashes here.

File details

Details for the file deimos_daq-0.15.0-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.15.0-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6365b2727f5e86640f0abe2b6a798dbadb116cecd2f666689f46b71b9265836a
MD5 32137fe3ea2dd474d88a253a767e02d7
BLAKE2b-256 c49e79e84676be3baaee66eab8d5aa4dfb16f7a64571278a64b0683cfa4fdb70

See more details on using hashes here.

Supported by

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