Skip to main content

Python SDK for motorbridge Rust ABI

Project description

motorbridge Python SDK

Channel Compatibility (PCAN + slcan + CAN-FD + Damiao Serial Bridge)

  • Linux SocketCAN uses interface names directly: can0, can1, slcan0.
  • For USB-serial CAN adapters, bring up slcan0 first: sudo slcand -o -c -s8 /dev/ttyUSB0 slcan0 && sudo ip link set slcan0 up.
  • CAN-FD transport is available both in CLI (--transport socketcanfd) and Python SDK (Controller.from_socketcanfd(...)), and is required for Hexfellow.
  • Damiao-only serial bridge transport is also available in CLI (--transport dm-serial --serial-port /dev/ttyACM0 --serial-baud 921600).
  • Full Damiao serial-bridge interface list and command patterns are documented in motor_cli/README.md (section 3.6 in motor_cli/README.zh-CN.md).
  • On Linux SocketCAN, do not append bitrate in --channel (for example can0@1000000 is invalid).
  • On Windows (PCAN backend), can0/can1 map to PCAN_USBBUS1/2; optional @bitrate suffix is supported.

Python binding layer on top of motor_abi.

Chinese version: README.zh-CN.md

README Navigation (What Each One Is For)

If this is your first time in this folder, read in this order:

  1. This file: README.md
    Purpose: Python binding overview (install, API scope, common commands).
  2. examples/README.md (English) / examples/READMEzh_cn.md (Chinese)
    Purpose: practical demo index and run instructions (from simplest to advanced).
  3. DAMIAO_PYTHON_REFERENCE.zh-CN.md
    Purpose: Damiao Python interface reference (parameter lookup style).
  4. DAMIAO_binding.md
    Purpose: Damiao binding implementation notes (design/internal behavior).
  5. README.zh-CN.md
    Purpose: Chinese overview for Chinese-speaking teammates.

Notes:

  • If your goal is "run something now", start with Start Here (Simplest 2 Examples) in examples/README.md.
  • If your goal is CLI parameter lookup, see ../../motor_cli/README.md.

Scope

  • High-level API: Controller, Motor, Mode
  • CLI: motorbridge-cli
  • Controller constructors:
    • Controller(channel="can0") (SocketCAN/PCAN path)
    • Controller.from_socketcanfd(channel="can0") (CAN-FD path, required by Hexfellow)
    • Controller.from_dm_serial(serial_port="/dev/ttyACM0", baud=921600) (Damiao-only serial bridge)
  • Vendors:
    • Damiao: add_damiao_motor(...)
    • Hexfellow: add_hexfellow_motor(...)
    • MyActuator: add_myactuator_motor(...)
    • RobStride: add_robstride_motor(...)
    • HighTorque: add_hightorque_motor(...)

Quick Start

from motorbridge import Controller, Mode

with Controller("can0") as ctrl:
    motor = ctrl.add_damiao_motor(0x01, 0x11, "4340P")
    ctrl.enable_all()
    motor.ensure_mode(Mode.MIT, 1000)
    motor.send_mit(0.0, 0.0, 20.0, 1.0, 0.0)
    print(motor.get_state())
    motor.close()

Damiao over serial bridge:

from motorbridge import Controller, Mode

with Controller.from_dm_serial("/dev/ttyACM1", 921600) as ctrl:
    motor = ctrl.add_damiao_motor(0x04, 0x14, "4310")
    ctrl.enable_all()
    motor.ensure_mode(Mode.MIT, 1000)
    motor.send_mit(0.5, 0.0, 20.0, 1.0, 0.0)
    motor.close()

RobStride quick use:

from motorbridge import Controller

with Controller("can0") as ctrl:
    motor = ctrl.add_robstride_motor(127, 0xFF, "rs-00")
    print(motor.robstride_ping())
    print(motor.robstride_get_param_f32(0x7019))
    motor.close()

MyActuator quick use:

from motorbridge import Controller, Mode

with Controller("can0") as ctrl:
    motor = ctrl.add_myactuator_motor(1, 0x241, "X8")
    ctrl.enable_all()
    motor.ensure_mode(Mode.POS_VEL, 1000)
    motor.send_pos_vel(3.1416, 2.0)  # rad / rad/s
    print(motor.get_state())
    motor.close()

Hexfellow quick use (CAN-FD only):

from motorbridge import Controller, Mode

with Controller.from_socketcanfd("can0") as ctrl:
    motor = ctrl.add_hexfellow_motor(1, 0x00, "hexfellow")
    ctrl.enable_all()
    motor.ensure_mode(Mode.MIT, 1000)      # Hexfellow supports MIT / POS_VEL
    motor.send_mit(0.8, 1.0, 30.0, 1.0, 0.1)
    print(motor.get_state())
    motor.close()

CLI Examples

Damiao:

motorbridge-cli run \
  --vendor damiao --channel can0 --model 4340P --motor-id 0x01 --feedback-id 0x11 \
  --mode mit --pos 0 --vel 0 --kp 20 --kd 1 --tau 0 --loop 50 --dt-ms 20

RobStride:

motorbridge-cli run \
  --vendor robstride --channel can0 --model rs-00 --motor-id 127 \
  --mode ping

RobStride parameter read:

motorbridge-cli robstride-read-param \
  --channel can0 --model rs-00 --motor-id 127 --param-id 0x7019 --type f32

Unified scan (all vendors):

motorbridge-cli scan --vendor all --channel can0 --start-id 0x01 --end-id 0xFF

HighTorque via binding:

from motorbridge import Controller

with Controller("can0") as ctrl:
    motor = ctrl.add_hightorque_motor(1, 0x01, "hightorque")
    motor.send_mit(3.1416, 0.8, 0.0, 0.0, 0.8)  # kp/kd are accepted but ignored by protocol
    motor.request_feedback()
    print(motor.get_state())
    motor.close()

HighTorque via Rust CLI:

cargo run -p motor_cli --release -- \
  --vendor hightorque --channel can0 --motor-id 1 --mode read

Experimental Windows Support (PCAN-USB)

Linux remains the primary target. Windows support is experimental and currently uses PEAK PCAN.

  • Install PEAK PCAN driver + PCAN-Basic runtime (PCANBasic.dll).
  • Use channel as can0@1000000 (maps to PCAN_USBBUS1 at 1Mbps).

Recommended quick validation with Rust CLI on Windows:

cargo run -p motor_cli --release -- --vendor damiao --channel can0@1000000 --model 4340P --motor-id 0x01 --feedback-id 0x11 --mode scan --start-id 1 --end-id 16
cargo run -p motor_cli --release -- --vendor damiao --channel can0@1000000 --model 4340P --motor-id 0x01 --feedback-id 0x11 --mode pos-vel --pos 3.1416 --vlim 2.0 --loop 1 --dt-ms 20
cargo run -p motor_cli --release -- --vendor damiao --channel can0@1000000 --model 4310 --motor-id 0x07 --feedback-id 0x17 --mode pos-vel --pos 3.1416 --vlim 2.0 --loop 1 --dt-ms 20

Local wheel build (Windows):

python -m pip install --user wheel
set MOTORBRIDGE_LIB=%CD%\\target\\release\\motor_abi.dll
python -m pip wheel --no-build-isolation bindings/python -w bindings/python/dist
python -m pip install bindings/python/dist/motorbridge-*.whl

Example Programs

  • Damiao wrapper demo: examples/python_wrapper_demo.py
  • Hexfellow CAN-FD demo: examples/hexfellow_canfd_demo.py (MIT / POS_VEL only)
  • Damiao maintenance demo: examples/damiao_maintenance_demo.py
  • Damiao register rw demo: examples/damiao_register_rw_demo.py
  • Damiao dm-serial demo: examples/damiao_dm_serial_demo.py
  • RobStride wrapper demo: examples/robstride_wrapper_demo.py
  • Full Damiao mode demo: examples/full_modes_demo.py
  • Damiao scan / tune / position helpers:
    • examples/scan_ids_demo.py
    • examples/pid_register_tune_demo.py
    • examples/pos_ctrl_demo.py
    • examples/pos_repl_demo.py

See examples/README.md (English) or examples/READMEzh_cn.md (Chinese).

Damiao Full-Coverage Status

Damiao usage in Python examples is now covered end-to-end:

  • control modes: mit / pos-vel / vel / force-pos
  • transport paths: SocketCAN/PCAN constructor + from_dm_serial(...)
  • maintenance ops: clear_error, set_zero_position, set_can_timeout_ms, request_feedback
    • project guard for Damiao set-zero: call disable() before set_zero_position()
    • no user-facing ms parameter for set-zero; core applies fixed 20ms settle
  • register APIs: get/write f32, get/write u32, store_parameters

End-to-End Demo Commands

# Build ABI once
cargo build -p motor_abi --release
export PYTHONPATH=bindings/python/src
export LD_LIBRARY_PATH=$PWD/target/release:${LD_LIBRARY_PATH}

# Damiao wrapper demo
python3 bindings/python/examples/python_wrapper_demo.py \
  --channel can0 --model 4340P --motor-id 0x01 --feedback-id 0x11 \
  --pos 0 --vel 0 --kp 20 --kd 1 --tau 0 --loop 20 --dt-ms 20

# RobStride wrapper demo: ping
python3 bindings/python/examples/robstride_wrapper_demo.py \
  --channel can0 --model rs-06 --motor-id 127 --feedback-id 0xFF --mode ping

# RobStride wrapper demo: velocity
python3 bindings/python/examples/robstride_wrapper_demo.py \
  --channel can0 --model rs-06 --motor-id 127 --feedback-id 0xFF \
  --mode vel --vel 0.3 --loop 40 --dt-ms 50

Notes

  • id-dump and id-set are Damiao workflows; scan supports damiao|hexfellow|myactuator|robstride|hightorque|all.
  • Mode.MIT and send_force_pos are not available for MyActuator in ABI wrapper.
  • Hexfellow supports MIT and POS_VEL through ABI wrapper; VEL and FORCE_POS return unsupported.
  • Full Damiao tuning reference stays in:

PyPI Auto Publish (GitHub Actions)

This repository includes .github/workflows/pypi-publish.yml.

  • Tag publish: push vX.Y.Z to publish directly to PyPI.
  • Manual publish: run workflow Python Publish from GitHub Actions and choose:
    • testpypi (recommended dry-run first)
    • pypi (official release)

One-time setup (PyPI side)

  1. Create motorbridge project on PyPI/TestPyPI (or claim existing ownership).
  2. In PyPI project settings, configure Trusted Publisher:
    • Owner: your GitHub org/user
    • Repository: tianrking/motorbridge
    • Workflow: pypi-publish.yml
    • Environment: pypi (and testpypi for TestPyPI)
  3. In GitHub repo settings, create matching environments:
    • pypi
    • testpypi

After this, no API token is required in GitHub secrets for publishing.

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

motorbridge-0.1.3.tar.gz (18.4 kB view details)

Uploaded Source

Built Distributions

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

motorbridge-0.1.3-cp314-cp314-win_amd64.whl (204.3 kB view details)

Uploaded CPython 3.14Windows x86-64

motorbridge-0.1.3-cp313-cp313-win_amd64.whl (198.4 kB view details)

Uploaded CPython 3.13Windows x86-64

motorbridge-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (349.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

motorbridge-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (340.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

motorbridge-0.1.3-cp313-cp313-macosx_11_0_arm64.whl (296.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

motorbridge-0.1.3-cp312-cp312-win_amd64.whl (198.4 kB view details)

Uploaded CPython 3.12Windows x86-64

motorbridge-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (349.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

motorbridge-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (340.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

motorbridge-0.1.3-cp312-cp312-macosx_11_0_arm64.whl (296.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

motorbridge-0.1.3-cp311-cp311-win_amd64.whl (198.4 kB view details)

Uploaded CPython 3.11Windows x86-64

motorbridge-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (349.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

motorbridge-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (340.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

motorbridge-0.1.3-cp311-cp311-macosx_11_0_arm64.whl (296.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

motorbridge-0.1.3-cp310-cp310-win_amd64.whl (198.4 kB view details)

Uploaded CPython 3.10Windows x86-64

motorbridge-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (349.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

motorbridge-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (340.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

motorbridge-0.1.3-cp310-cp310-macosx_11_0_arm64.whl (296.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file motorbridge-0.1.3.tar.gz.

File metadata

  • Download URL: motorbridge-0.1.3.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for motorbridge-0.1.3.tar.gz
Algorithm Hash digest
SHA256 feaa68d30c1fb44fc95ecfe44c8b5bba7b2790763ac987335473ed18e7f25fe1
MD5 2e9f25a60e6a2947cd7a07037a6da5e9
BLAKE2b-256 f7daa38d746cefc49f4b156d362af1dab1ff022de2aede609ab6603bf900025d

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 4b064b1aba953ad83e2946090afba371c7cd3402c93a93f22c798af39daca4e8
MD5 592d45cf55ed1ab26db55e228949cc97
BLAKE2b-256 7b64f416fc249098838d5c5c858d3d6c0c76e780cdee69c166d306ff3b1fc396

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 458b3c98f298f9c4fd94eef47cfc6e77494aa5c10c93cc541cad87969f62f251
MD5 17ad5cfb3387bf940506b438a89a555e
BLAKE2b-256 86e1e69012e579b1b1f29e1f4dac36071ef0766f32f14c71d45d21354586f04f

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da3f20a17f7fb0e75fadf052f49dc61f8e4c60e0ec7cc2977409627c5b7fcf28
MD5 c52cb4f56167e76bc001defccecfe893
BLAKE2b-256 48d8f6fdd499ebd064d29ecf3b0d9ae2f1e4f8aec1d730be17e2d807a1f7408b

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 10c54975f787dbccca19bf0f296b3bcf546c104ec7b5e4876bd3941ed3586e39
MD5 5f2f5f84a35d7dd21b8750362163bbf4
BLAKE2b-256 9f85b9564868dd0626d45503b8f7d1b31d3f29b32c63f082a8376863346e8d1c

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b702d144d8a4a649ba7c15a842e6fdd4b1374b86faa9ecd78f14d18eb5908187
MD5 c27b966a7ba57b6ba11bfc0ae8df8434
BLAKE2b-256 fe7877f22e561292d482575a83199c4f09ab5de8296d43044e59e434077430f9

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 622814f0be51b7dea2ccab28b2ae74696195c641758594e8d7a26f20ba4b3ec8
MD5 0d1da14b3f091ea1bb1ed19ad985474f
BLAKE2b-256 7b4c1c7e56a1b4130bd24c87cfe98d4ee11e453afefd6a9e168fdb199aa32c3f

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 266c4e5eab0d4ca17810bbd7ced7fdb4507d089f02769ac32419dbd6f38d8d47
MD5 008ea750e4ce4d4fa41de8d1c5f758c8
BLAKE2b-256 ce7259feb05ba10cece08099018d158eff8ad44887186afe1680ecfdb1fc3493

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 57b99a1e0ce7272da4d7288cbd322a75fd669c50f31625a1f36704f545f719cc
MD5 04d57b6f9e98a527ac87e3e426a91481
BLAKE2b-256 d051bd320920f029cc99a7af81d73a410cb6465f71cdda820338745733d0f671

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ade01fcb388f6287629a29cef9294cac05df24575346ff211ffdce6cc841a6c3
MD5 254b8c2c966df7e0cd8aff08062bfcde
BLAKE2b-256 cdb5c9886b9583139adc98500816f3e61facf30bad96f22762e5d594e0146cc6

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b296aaaafd64c3d0330b065e906e0bdba9ef17107e216a98f086540b0a8cce14
MD5 0aa851ec56d913246e9ddae49289891b
BLAKE2b-256 112d42e493efb6208cb9e7a4cd8e2ab251df6d50882b2a33c85c277c2b240536

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bf972cf8b0c777b4aeb8d5d6c91e9a8d68d9b86781748c1258e6e08195b4ebad
MD5 87a4c90ae133a7eaaeab9e17d4402ab7
BLAKE2b-256 7daf8bd9ad80a9b97435c187dd98a753437287bfc94efcea4fc071d7c98aca51

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 559d833ee84d2161de159f8df8e79d6543da383240048e4e43bc6734d2768eda
MD5 485e770f5896b7b9bae5cb3a189af17a
BLAKE2b-256 08207944f77250d96ac724295a7dbadde5afd21da4d5ccb5675a7359102e7cdb

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2830838bf131371c9a42999a70934f32b590c5d32fef5c889582c4cdaec06e2f
MD5 a00a00f39a5d1d4b162ad7952f86ca2c
BLAKE2b-256 1ecfd88af97a034e9ad1d2139f255f330bd1cac09aa91f9a66f83c79c6d64148

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 136fe4d6ef564f16a19e977ed5aa69e5b1c3ba12f6f1654b61db539003d378ed
MD5 8cb3933219cd76bdf361ec2b8a28c3c9
BLAKE2b-256 309d0e41ef828cab33d570f4204f733ae91afeb0e93e303c1b15cd6183fbfc6d

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b2cd5ac54fce0534259900c90f705581ddf313fe2deb38792bdc109769f37265
MD5 e432c06f8c4647e4b6ff9258243c251e
BLAKE2b-256 4ecefea6e8665b2ea27c8b896403308d9212a3e008851fd7fea07ff83ca0373c

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2ae58c13fe615ccf19151783d2b78014ac64cdcb925915528464751ded131df4
MD5 b4f15a3f43c1839b55306f3718343687
BLAKE2b-256 40156ff59bb7f75005cb2cf0d92eeef71c67af026cd7698f128cb7f70717839c

See more details on using hashes here.

File details

Details for the file motorbridge-0.1.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for motorbridge-0.1.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b746b84dc4f51e062fdca6fd44578eb6862929569d18ef167d4a2d650a2c94ac
MD5 f6c25ee8da5082750f506b231720aae0
BLAKE2b-256 f2fa97e510e8dd7b3cdab505d531d2082e87863697aee9b800f16d246111a0bd

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