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 = Duration::from_secs(60 * 60);
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,
);
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);

Direct-to-PC Ethernet Connection and Statically-Addressed Networks

Deimos DAQs can be connected directly to your computer by ethernet, bypassing the need for a router or network switch. They can also be used on networks with a switch but no router.

When a Deimos DAQ connects to a network without a DHCP server to provide dynamic IP address assignments, it will automatically self-assign an IP address in the 169.254.x.[2-254]/16 range. It will attempt up to 3 candidate addresses, which limits the maximum amount of address resolution spam on the network, while also yielding a trivially small probability that no candidate address is available.

The rev7 firmware's IPv4 address manager follows this state machine:

stateDiagram-v2
    direction LR

    [*] --> Unconfigured

    Unconfigured --> TentativeFallback: Claim next MAC-derived<br>static address candidate
    Unconfigured --> ActiveDhcp: DHCP configured

    TentativeFallback --> ActiveFallback: No ARP conflict
    TentativeFallback --> Unconfigured: ARP conflict
    TentativeFallback --> ActiveDhcp: DHCP configured

    ActiveFallback --> ActiveDhcp: DHCP configured

    ActiveDhcp --> Unconfigured: DHCP deconfigured

To connect directly without a router,

  1. Connect the DAQ's ethernet cable to your computer's ethernet port.
  • (or to a shared network switch with no router).
  • If your computer does not have an ethernet port, an ethernet-to-USB adapter can be used at the expense of added latency.
  1. Check your computer's network settings.
  • Make sure that a static IP address was assigned in the 169.254.X.Y range.
  • This should occur automatically on MacOS and Windows.
  • On linux, you may need to manually set a static IPV4 address: 169.254.254.1/16

Make sure the netmask for your computer's static address is set to exactly /16 (255.255.0.0).

Otherwise, the DAQ will not recognize your computer as being on the same link-local network, and will not respond to your attempts to scan or bind it.

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.16.1.tar.gz (313.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.16.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

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

Uploaded PyPymusllinux: musl 1.2+ i686

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

Uploaded PyPymusllinux: musl 1.2+ ARMv7l

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

Uploaded PyPymusllinux: musl 1.2+ ARM64

deimos_daq-0.16.1-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.16.1-cp314-cp314t-musllinux_1_2_i686.whl (2.7 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ i686

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

deimos_daq-0.16.1-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.16.1-cp313-cp313t-musllinux_1_2_i686.whl (2.7 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ i686

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

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.11+Windows x86-64

deimos_daq-0.16.1-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.16.1-cp311-abi3-musllinux_1_2_i686.whl (2.7 MB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ i686

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

Uploaded CPython 3.11+musllinux: musl 1.2+ ARMv7l

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

Uploaded CPython 3.11+musllinux: musl 1.2+ ARM64

deimos_daq-0.16.1-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.16.1-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.16.1-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.16.1-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.16.1-cp311-abi3-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

deimos_daq-0.16.1-cp311-abi3-macosx_10_12_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

deimos_daq-0.16.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

File details

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

File metadata

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

File hashes

Hashes for deimos_daq-0.16.1.tar.gz
Algorithm Hash digest
SHA256 1eaaa473f2546908f9e81e754e89c6444ac592a7d5ead7bf791d5e1333e5c055
MD5 272e0be9e3589b5521094cbee5135949
BLAKE2b-256 6f528b08b9423d2e20bfd6cd7e07fda18f43674cd3d12d753587e7ad76ba877c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 882f5120e30565753138e3db2cbb040760be430045aa3b9b75f21320a978baf2
MD5 864843b77926dbe0321acdc525ae1bc3
BLAKE2b-256 ecd5e22fbe595d689512f752d591afcdecaf34d338c00f1b9b073ce52e353fe2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 0cc230bd7605860365cadd9a076f6abdb9adc406d5d4535740463588bdbe9fdb
MD5 3199965fe53c9220699cd262aa43513a
BLAKE2b-256 080f368b5feadf9c9776eab31474190c6349e2cbc69e6ce408d4ed47d103de6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 0de6b6f3fa641474d823e8846d2286dba332b2615d16ea1826f6f13875a869ba
MD5 0f24f82fc81d8bc743c9d3eb33fc5b46
BLAKE2b-256 93c4b301bc3b6b5967a8553f01da6e731068902c6a9fe1670c3ab2955541466c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9a5b0313243d9f944e4ea485c80312b047bc2c478bfcd605559c58d0f2b71f7f
MD5 53966a5200b2ce4630f98c3d8c9066a5
BLAKE2b-256 e985fa3cd05fafa10e79ee0f984aa1af62184675164718d836dc6388f1bd9be1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a3dadaf52da83fb37cc35659ffc2564e9958d54a1a934d5d9150b1781a3a6593
MD5 4baf7f30c92a7c07f68b2f3187905ef8
BLAKE2b-256 c2a4deb8feea6445c8c253707cf6c6cd3ed80eb4b8950035f857ebbab5cbc6a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp314-cp314t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 4ee05deb5c0dc913d72611a811430eb1def472bcf4ed918ee9f4d5bf67972a53
MD5 11b9ceb6c35277763dd07b75d719fec6
BLAKE2b-256 6b24ca1281776414733bb5478a10e6e5bf81cfae3b8a698fc954ec689f499fcc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp314-cp314t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 67585722457efb9780c6bd2422548be79cdcdf5ec9945f66b07ff898edf9b66b
MD5 6c1745480c5d8170aa00584af74e9489
BLAKE2b-256 d4553fea6c342c02edda7a9373066c4dd561add242b943dce3b7abec7575d05f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e942f9bb7acb5e34a8963afa4f7cb88cd17a3910706be98c090db0904faceeee
MD5 6fbf635961eae68ba5a07f6ddc4e1a79
BLAKE2b-256 a6dc029dd67178c057bbb61ec9de3706a74b1600dac095448ed3ff7ff9864aac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e3dff1380492fc829f75287b9edc6546f59ac586951dec16c21abdebd4e57009
MD5 e8e06988b8d303945948da3333af04cb
BLAKE2b-256 a57caa59f218b1cd768f9998255c4adec0e038991c7e795612a0268dfcdbdb16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp313-cp313t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 a6f335cb59055600e3fb1486c5ae69453dfecd256a8599ac94cba3a4b7bed886
MD5 9b7cc5dd7f6ee34794f735802193612a
BLAKE2b-256 cb35f21b8f51cc6c03cabc29c4e129cf61e00d635a1f06681eee3f5ee1b32a97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp313-cp313t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 640dc7a8b2a9cd7136aba6984245507a15f50410c821ccecebaf133e5ac54c97
MD5 4540dd21982e500c7bbe7286d9b4c143
BLAKE2b-256 4d899c7420c8dd23d4632a6d5364d6b5c1d17d29aa4a451b5165191f0f45f596

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6d2a6e7fe6815109ef4e86577883757a733941709d71ca97bca8e09d27aa1b21
MD5 2d2f66f2a323ccbebad268d7ca890854
BLAKE2b-256 fc135e537d8179338f11781eea58ef7b0509d890dbcd079964c870c3998e8d03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ef7f06491383ad426e91fa6370707d3043edf805cb9ff9cd3a996d9eeeaad1e3
MD5 83d5d030ab6208394cc8f13fda068198
BLAKE2b-256 984f87ac02c26175183c6ee611c7a4d9c996e717f339b379fc06af31bd5eb7c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ef88aa03d43845060a213faea6b9b2b27cb43e3460869b631e9860e28cf13d5d
MD5 e8ac5dcb6a48de207060754bcd90318e
BLAKE2b-256 49e05e7cf365c460edb62b30d2a5a179c82bf6287b575f2ed5df56346fb6f008

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 38ea0714c063d0f9d7048c14b5d88e169b7fec41be43e77bdee04fa774c0bcea
MD5 08787844f5b75b7a9bd9b2651a53d288
BLAKE2b-256 8933cbbc476d4a2186171e9a5e1d3ad6db8e4247cedfdaaa04b6a2fabfea1abd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 5a44dc54bfc64a0d5001991c8700e4ee1b915b70fa0ea6a5d38e5e33f8b5c0ca
MD5 f61a684f7f8905af9e851a8b443442e0
BLAKE2b-256 2a768bd7c18ce434e2e636757ee9a4dd738a33efb8ac0f2e7e6ee6d978fc79d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 bac8721ce964328a42d756c64cc75a34f74066efcb71d50dd348684e3812e876
MD5 225fc5af629d3f18ed2577c3f00613b9
BLAKE2b-256 c116121a52d1b715ae040e1537a90989775468b4c7d6b2c1ceb32a41eccb2a63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 e11227bd9653fe092534d4bfbe32d002167d056270d6de26741953866004c7d2
MD5 3dae78e7eab138a2897c2f0a413a4c7f
BLAKE2b-256 8e24c315bc45a905e96da3ea152d348abc7e1ed20fc5f807e6c0f33acd30e999

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 0eb2b4513722f1faeb694988dddf9470f8e456ec7251689845d6b55735aa4a1a
MD5 8650b3dc73f373ef8c286f6c689f5443
BLAKE2b-256 aaf37d17d88eac9b4c3718b3e60ecbf83da9dc96e1118e78cbb9b514ae3db3c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2a19f65ab0fe03db5b7789ef6b36c8135fffde13ea7edac2318e712b1614fda8
MD5 89345f0658d7b9e43a1499b4306fdc9a
BLAKE2b-256 3342b3a96c92a6e07a59c9722fc5385c425353a417ab691d5145dd73f42b77cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8eee324c1b58643eca5b061b02f6021d31efabf0f3468a206ab801b8997b0b02
MD5 cf11db9840505da438b435bf683eb51d
BLAKE2b-256 0b96478459ef7a1336b9a9c27933fbc37293672b7e09837e015b10565b923b91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59121387419b15745a0b4a847e8b2fe61f49450de4cbbe2b3af5dac05c91a9a3
MD5 6c172c4c5f33a2f2d9011b66da1a52e9
BLAKE2b-256 efcdd5c0bf675d788ef922f47c9c217466b35618ba93e92d334c5e2b1776021a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d36f318cf3b297dd62d798cac590ad78707dd8b9cf59ea0cf2dcbca11ebacdf1
MD5 4f5f8e7d9c1250a81b5c0294c71fe98b
BLAKE2b-256 f0bc5c66478451f77246288a1bb6dcec8d62d6c704dceeda40701a596760d418

See more details on using hashes here.

File details

Details for the file deimos_daq-0.16.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for deimos_daq-0.16.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aefaa30319eaca36c97f600eae8d364a17007a8bb11993843e035c35fbd006c2
MD5 382d49c23b25d7dcbfb2ffb7edfb6cb3
BLAKE2b-256 fdf9ab57190122d2e68dc0b7b013b23fd21ec64c1e586bd9583d661f6abe1769

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