Skip to main content

Python bindings for Dexed DX7 synthesizer

Project description

dexed-py

Python bindings for the Dexed DX7 synthesizer, with support for high-level patch editing, ML/JAX workflows, and low-level parameter arrays.

The Yamaha DX7 (1983) is the best-selling hardware synthesizer of all time. Its 6-operator FM synthesis engine produces a huge range of sounds — from electric pianos and basses to bells, pads, and metallic textures. dexed-py wraps the open-source Dexed engine so you can program, render, and manipulate DX7 patches entirely from Python.

Dexed is licensed under the GPL v3. The msfa component (acronym for music synthesizer for android, see src/msfa) stays on the Apache 2.0 license to be able to collaborate between projects.

Requirements

  • Python >= 3.11
  • Platforms: macOS, Linux, Windows
  • Runtime dependency: NumPy
  • Optional: JAX — for PyTree integration and jax.pure_callback workflows

Installation

pip install dexed-py

Quick Start

Using the Patch API

Patch is the human-friendly interface — parameters use native DX7 ranges and string names. Use it for sound design, sysex import/export, and interactive exploration.

from dexed import Patch, DexedSynth

patch = Patch(name="My Sound")
patch.algorithm = 15        # 0-31
patch.feedback = 5
patch.op[0].output_level = 99
patch.op[0].envelope.rates = [99, 85, 35, 50]
patch.op[0].envelope.levels = [99, 75, 0, 0]
patch.lfo.wave = "sine"

synth = DexedSynth(sample_rate=44100)
synth.load_patch(patch)
audio = synth.render(midi_note=60, velocity=100, note_duration=1.0, render_duration=1.5)

Loading DX7 Sysex Files

from dexed import Patch

# Load a 32-voice bank (4096-byte .syx file)
patches = Patch.load_bank("rom1a.syx")
for i, p in enumerate(patches[:5]):
    print(f"  {i}: {p.name.strip()} (algorithm {p.algorithm})")

# Save patches back to a bank file
Patch.save_to_bank("my_bank.syx", patches)

ML / JAX Workflow with Preset

Preset is the ML-native representation: a single (145,) float32 vector covering all synth state. Continuous parameters are normalized to [0, 1]; discrete parameters (algorithm, curves, etc.) are integer-valued. All fields are JAX PyTree data leaves — changing any value, including algorithm, never triggers JIT recompilation.

import numpy as np
from dexed import Patch, Preset, DexedSynth

# From a sysex bank
preset = Patch.load_bank("rom1a.syx")[0].to_preset()

# Or construct directly (continuous params normalized [0, 1])
preset = Preset(
    algorithm=15,
    feedback=0.5,
    op_output_level=np.full(6, 0.8, dtype=np.float32),
)

synth = DexedSynth()
synth.load_preset(preset)
audio = synth.render(midi_note=60, velocity=100)

# Flat array round-trip
arr     = preset.to_array()  # (145,) float32
preset2 = Preset.from_array(arr)

# Bulk storage: 100k presets ~ 55 MB
bank = np.stack([p.to_array() for p in presets])  # (N, 145)
np.save("bank.npy", bank)
presets = [Preset.from_array(row) for row in np.load("bank.npy")]

JAX pure_callback

import jax
from jax import numpy as jnp
from dexed import DexedSynth, Preset

SAMPLE_RATE = 44100
NOTE_DURATION = 0.5
RENDER_DURATION = 1.0
NUM_SAMPLES = int(SAMPLE_RATE * RENDER_DURATION)

synth = DexedSynth(sample_rate=SAMPLE_RATE)

def render_fn(preset):
    synth.load_preset(preset)
    return synth.render(midi_note=60, velocity=100,
                        note_duration=NOTE_DURATION, render_duration=RENDER_DURATION)

@jax.jit
def jitted_render(preset):
    return jax.pure_callback(
        render_fn, jax.ShapeDtypeStruct((NUM_SAMPLES,), jnp.float32), preset,
    )

audio = jitted_render(Preset(algorithm=0, feedback=0.5))

# Changing algorithm does NOT recompile — all fields are data leaves
audio2 = jitted_render(Preset(algorithm=15, feedback=0.3))

For flat-vector policies (Beta distribution over the 145-dim space):

_, treedef = jax.tree.flatten(Preset())  # universal — no meta fields

@jax.jit
def render_from_flat(flat_params):   # (145,) float32
    preset = jax.tree.unflatten(treedef, Preset.array_to_leaves(flat_params))
    return jax.pure_callback(render_fn, jax.ShapeDtypeStruct((NUM_SAMPLES,), jnp.float32), preset)

Algorithm Metadata

from dexed import algorithms, get_carriers, get_modulators, get_mod_matrix

alg = algorithms[15]
print(f"carriers: {alg.carriers}")
print(f"modulators: {alg.modulators}")
print(f"modulation matrix:\n{alg.mod_matrix}")   # 6x6 int8

get_carriers(31)   # [0, 1, 2, 3, 4, 5] — all parallel

Individual Operator Outputs

synth.load_patch(patch)
audio = synth.render_all_ops(midi_note=60)
# audio.shape = (7, T): channels 0-5 are operators 0-5, channel 6 is final mix

Feedback Normalization

By default, normalize_feedback is False, which preserves Dexed-authentic behavior: algorithms 3, 5, and 31 (DX7 algorithms 4, 6, 32) have reduced feedback strength, matching the original hardware. Set it to True for consistent feedback scaling across all 32 algorithms, which is useful when feedback should be comparable regardless of algorithm choice (e.g. in ML pipelines).

synth.normalize_feedback = True  # consistent across all 32 algorithms

Custom Operator Graphs

OperatorGraph lets you build arbitrary FM topologies — not limited to the 32 standard DX7 algorithms, and not limited to 6 operators.

from dexed import OperatorGraph

graph = OperatorGraph(num_ops=7)
for i in range(7):
    graph.op[i].output_level = 99
for i in range(6, 0, -1):
    graph.connect(i, i - 1)
graph.set_carriers([0])
graph.set_feedback(6, level=7)

audio = graph.render(sample_rate=44100, midi_note=60, velocity=100,
                     note_duration=1.0, render_duration=1.5)

# From a modulation matrix
import numpy as np
mod_matrix = np.zeros((4, 4), dtype=np.float32)
mod_matrix[0, 1] = 1.0  # Op 1 modulates Op 0
graph = OperatorGraph.from_matrix(mod_matrix, carriers=[0], feedback={3: 0.5})

# From a standard DX7 algorithm (0-indexed)
graph = OperatorGraph.from_algorithm(15)

# Visualize the graph
print(graph.summary())
print(graph.to_ascii())
print(graph.to_mermaid())   # paste into any Mermaid renderer

API Reference

Patch

patch = Patch(name="My Sound")
patch.algorithm = 15          # 0-31
patch.feedback = 5            # 0-7
patch.osc_key_sync = True
patch.transpose = 24          # 0-48 (24 = C3)

patch.lfo.speed = 35          # 0-99
patch.lfo.delay = 0
patch.lfo.pitch_mod_depth = 0
patch.lfo.amp_mod_depth = 0
patch.lfo.sync = False
patch.lfo.wave = "sine"       # triangle, saw_down, saw_up, square, sine, s&h

patch.pitch_envelope.rates  = [99, 99, 99, 99]
patch.pitch_envelope.levels = [50, 50, 50, 50]

op = patch.op[0]              # 0-indexed: op[0] through op[5]
op.output_level = 99          # 0-99
op.frequency_coarse = 1       # 0-31
op.frequency_fine = 0         # 0-99
op.frequency_mode = 0         # 0=ratio, 1=fixed
op.detune = 7                 # 0-14 (7 = center)
op.velocity_sensitivity = 0   # 0-7
op.amp_mod_sensitivity = 0    # 0-3
op.rate_scaling = 0           # 0-7
op.breakpoint = 39            # 0-99
op.left_depth = 0             # 0-99
op.right_depth = 0            # 0-99
op.left_curve = "lin"         # lin, exp-, exp+, log
op.right_curve = "lin"
op.envelope.rates  = [99, 99, 99, 99]
op.envelope.levels = [99, 99, 99, 0]

Patch — Format Conversion

# Patch <-> Preset
preset = patch.to_preset()
patch  = preset.to_patch()
patch  = Preset.from_patch(patch)  # classmethod alternative

# Sysex (156 bytes unpacked, 128 bytes packed)
sysex  = patch.to_sysex()
patch  = Patch.from_sysex(sysex_bytes)
packed = patch.to_packed()
patch  = Patch.from_packed(packed_bytes)

# Bank (32-voice .syx files)
patches = Patch.load_bank("bank.syx")
Patch.save_to_bank("bank.syx", patches)

# Raw DX7 format (155 integers in native ranges)
raw   = patch.to_raw()
patch = Patch.from_raw(raw_params)

Preset

See docs/parameter-format.md for the full array layout and the per-operator interface.

from dexed import Preset
import numpy as np

preset = Preset(
    algorithm=15,                                           # 0-31
    feedback=0.71,                                          # 5/7
    osc_key_sync=1,                                         # 0 or 1
    lfo_sync=0,
    lfo_wave=4,                                             # 0-5 (sine)
    op_output_level=np.ones(6, dtype=np.float32),
    op_frequency_mode=np.zeros(6, dtype=np.int32),          # 0=ratio, 1=fixed
    op_left_curve=np.zeros(6, dtype=np.int32),              # 0-3
    op_right_curve=np.zeros(6, dtype=np.int32),
)

arr     = preset.to_array()       # (145,) float32
preset  = Preset.from_array(arr)

# Per-operator decomposition (useful for per-operator ML architectures)
gc = preset.global_continuous()   # (15,)   float32
gi = preset.global_ints()         # (4,)    int32
oc = preset.op_continuous()       # (6, 18) float32
oi = preset.op_ints()             # (6, 3)  int32
preset = Preset.from_operator_bundles(gc, gi, oc, oi)

DexedSynth

synth = DexedSynth(sample_rate=44100)

synth.load_patch(patch)    # from Patch
synth.load_preset(preset)  # from Preset

synth.algorithm            # read-only: currently loaded algorithm (0-31)
synth.normalize_feedback   # bool, read-write (default False)

audio = synth.render(midi_note=60, velocity=100,
                     note_duration=1.0, render_duration=1.5)
audio = synth.render_all_ops(midi_note=60)  # (7, T)

OperatorGraph

graph = OperatorGraph(num_ops=6)

# Connection API (all methods return self for chaining)
graph.connect(source, target, amount=1.0)
graph.disconnect(source, target)
graph.disconnect_all()
graph.set_carriers([0, 2])
graph.set_feedback(op, level=7)    # 0 disables, 1-7

# Query API
graph.mod_matrix       # NxN float32 (read-only copy)
graph.carriers         # List[int]
graph.modulators       # List[int]
graph.get_connections() # [(source, target, amount), ...]

# Visualization
graph.summary()        # human-readable text
graph.to_ascii()       # ASCII art
graph.to_mermaid()     # Mermaid diagram syntax

# Factory methods
OperatorGraph.from_algorithm(15)
OperatorGraph.from_matrix(mod_matrix, carriers=[0], feedback={5: 7})

# Rendering
audio = graph.render(sample_rate=44100, midi_note=60, velocity=100,
                     note_duration=1.0, render_duration=1.5)
audio = graph.render_all_ops(midi_note=60)  # (num_ops+1, T)

Building from Source

Requires a C++17 compiler and CMake >= 3.15.

git clone --recursive https://github.com/DBraun/dexed-py.git
cd dexed-py
pip install -e .
python -m pytest -v tests

Project details


Download files

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

Source Distributions

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

Built Distributions

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

dexed_py-0.1.0-cp314-cp314t-win_amd64.whl (114.7 kB view details)

Uploaded CPython 3.14tWindows x86-64

dexed_py-0.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (117.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

dexed_py-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl (103.2 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

dexed_py-0.1.0-cp314-cp314-win_amd64.whl (110.5 kB view details)

Uploaded CPython 3.14Windows x86-64

dexed_py-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (115.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

dexed_py-0.1.0-cp314-cp314-macosx_11_0_arm64.whl (101.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

dexed_py-0.1.0-cp313-cp313-win_amd64.whl (108.1 kB view details)

Uploaded CPython 3.13Windows x86-64

dexed_py-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (115.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

dexed_py-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (100.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dexed_py-0.1.0-cp312-cp312-win_amd64.whl (108.2 kB view details)

Uploaded CPython 3.12Windows x86-64

dexed_py-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (115.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

dexed_py-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (101.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dexed_py-0.1.0-cp311-cp311-win_amd64.whl (108.9 kB view details)

Uploaded CPython 3.11Windows x86-64

dexed_py-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (116.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

dexed_py-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (101.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file dexed_py-0.1.0-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: dexed_py-0.1.0-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 114.7 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dexed_py-0.1.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 f72880575b462862bf9020adfb1b378f82a9eb93fe3a12b86158a1c50981fae7
MD5 2c414c68db526000a21c9757ba3d44db
BLAKE2b-256 4135fdfa24d590f982e4fb16629d99374900ec49917aabea4bbaedf115f11cde

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp314-cp314t-win_amd64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 04dce0eda20d45dd803056f1a5503c4ba98f75bc5cc44d42ed7c51fb35b0966d
MD5 49d74b2d313db450ec9f8c18082d1c06
BLAKE2b-256 1ea8703e0c0008c2bcb39800b040560d313c2ba08cb0c3d13f071013829b3a5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4e8a74c1f73125e71b1fdfe02bf65c2d2c0e34574333f0811ee2384202c0d783
MD5 eb1d9d9f855b42d9987ba29cda616da8
BLAKE2b-256 024efbf6c1c673cce8c00b034dc4e07d1c567ccea86c669f2aa4b6eeaf4403ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: dexed_py-0.1.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 110.5 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dexed_py-0.1.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 bc889106a22023e5cb2a53fd2dd8176ab608f988451c2a86e5d2067f9b7370bd
MD5 2e6e6fdecfd9c6c3dcc3bc8d3273505e
BLAKE2b-256 0e6dc93862812c2c8b1d5e88779c0ac189d7ef1c743bbf1f360932c3012cdce3

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp314-cp314-win_amd64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7b802192f347debf5311a51414c365a4af1c984c96e07e6fd31655237ba903e2
MD5 7c324a26bce76edde9a26e4e7e34e8c8
BLAKE2b-256 7a59eecd4004379de841156c35e603ab1c92f0da0414bfcae084a2ff959df535

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 437493afb19d302e981ec3b589eee25d93593333c8f6c88946bf9a16994c1b9d
MD5 c0cd0c4a664204834d70c726b33e448b
BLAKE2b-256 bbd6af59ea04ee1bf04128d22f2ca5768387d635b78adfee06a47ef853720e86

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: dexed_py-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 108.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dexed_py-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c549eb1d50e96b072dc575f93e059d21b6c485408814423173097115b35e78c3
MD5 68e108723cf017ccc8da6f6a5d03d1bb
BLAKE2b-256 6d7d2ac55d83051724a371b99050cdec5cb46fcaf8dfea298db611644eb61b72

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp313-cp313-win_amd64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 54a421f2013bdc8a2cb8543fe064730f2e270e5e881df945a6c52e7088c0321e
MD5 f12344fc89f86e30d46f3c81534bd374
BLAKE2b-256 83672df471ca487bbae459754112153bc1fdfed2afb0f4d438fe9d41b9157436

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f31e280f39e8cd6914c1db84126434ed9d8899eb8bf1a8396c7e15dcfbc1e647
MD5 cbe8d94306eead553804559da727fb15
BLAKE2b-256 1816dccdbca64a65fccb5890ac88cd5b4f99a26954f3bc6a4b23842ef66d8f62

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: dexed_py-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 108.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dexed_py-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 df91cb97467b6fbaab267da9e2b78dbae254bc3bde7ec5cb2b935795cf67c6c9
MD5 4d5be92ac608cccf69ca788a41c05f3c
BLAKE2b-256 284c9e0242cb73a45fe02bbc41c24ab2d99d667b71d537eec2564fd8ab062efe

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp312-cp312-win_amd64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 22109d00bc1155b7c5c534258e916fd46614301c6486303ddeb16258724f2d1a
MD5 8af90d3cd5b93caef823c4c6cca93632
BLAKE2b-256 9e7b4b43c16efe7f7a98620704ac32f5dbd33ffa202f9a99debe054bb34f7afe

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5955d9ed752810a467c96d0849af7a915bd0ab8118229dd0e3ecc37dbb5707e9
MD5 499595e21a4e338dedfcbb6f71175aad
BLAKE2b-256 bed10f267f23253ae60fa78bf4db1b79878f9067f577e2c1bc4862d70f0ca146

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: dexed_py-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 108.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dexed_py-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a3db40d3224bf2d1915be1be3e157380b5095d9b8c410cfd6895fbab8f494d9a
MD5 97c3f2d11ac7eaca8f20b4efdc4dccb6
BLAKE2b-256 277219477c8288d61c86239fdd9e4c002305fbdb5fa8b7d8cd552999c57e3460

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp311-cp311-win_amd64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e3c234e505e510a06d2fce3163bbaf948c9ffb34af7e79f64c0f0356000a3ef
MD5 37dcc1e7b0ccdefeb49f102e8f5bf365
BLAKE2b-256 99b74cea57f72336ccf823637876ef0b8e3d298423725b9ad907818e9ebce8eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dexed_py-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dexed_py-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 775edb37e4e6f465eb5ac24d3e901c684067c79a1930c438ee5ee66639fc6b0f
MD5 0617dcda67237db3bb7e8bb24b34068f
BLAKE2b-256 3f882a619aae9d2cad923f4eeef58ecad49b71acbd99350ae9d3453854ba56d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for dexed_py-0.1.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build.yml on DBraun/dexed-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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