Skip to main content

Python parser and MIDI generator for the Alda music programming language

Project description

aldakit

PyPI version Python 3.10+ License: MIT

A zero-dependency Python parser and MIDI generator for the Alda music programming language[^1].

[^1]: Includes a rich repl and native MIDI support via bundled prompt-toolkit and libremidi respectively.

Features

  • Alda Parser - Full parser for the Alda music language with AST generation
  • MIDI Playback - Low-latency playback via libremidi (CoreMIDI, ALSA, WinMM)
  • MIDI Export - Save compositions as Standard MIDI Files
  • MIDI Import - Load MIDI files and convert to Alda notation
  • Real-time Transcription - Record from MIDI keyboards and convert to Alda
  • Programmatic Composition - Build music with Python using the compose module
  • Music Theory - Scale, chord, and interval utilities
  • Transformers - Transpose, invert, augment, diminish, and more
  • Generative Music - Markov chains, L-systems, cellular automata, Euclidean rhythms
  • Interactive REPL - Syntax highlighting, auto-completion, and live playback
  • CLI Tools - Play, transcribe, and convert from the command line

Installation

Requires Python 3.10+

pip install aldakit

Or with uv:

uv add aldakit

Quick Start

Command Line

# Evaluate inline code
aldakit -e "piano: c d e f g"

# Interactive REPL
aldakit repl

# Play an Alda file (examples available in the repository)
aldakit examples/twinkle.alda

# Export to MIDI file
aldakit examples/bach-prelude.alda -o bach.mid

Python API

import aldakit

# Play directly
aldakit.play("piano: c d e f g")

# Save to MIDI file
aldakit.save("piano: c d e f g", "output.mid")

# Play from file
aldakit.play_file("song.alda")

# List available MIDI ports
print(aldakit.list_ports())

For more control, use the Score class:

from aldakit import Score

score = Score("""
piano:
  (tempo 120)
  o4 c4 d e f | g a b > c
""")

# Play with options
score.play(port="FluidSynth", wait=False)

# Save to file
score.save("output.mid")

# Access internals
print(f"Duration: {score.duration}s")
print(score.ast)   # Parsed AST
print(score.midi)  # MIDI sequence

MIDI Import

Import existing MIDI files and work with them as Alda:

from aldakit import Score

# Import a MIDI file
score = Score.from_midi_file("recording.mid")

# Or use from_file (auto-detects .mid/.midi)
score = Score.from_file("song.mid")

# View as Alda source
print(score.to_alda())
# piano:
# o4 c4 d e f | g a b > c

# Play the imported MIDI
score.play()

# Export to Alda file
score.save("song.alda")

# Re-export to MIDI
score.save("output.mid")

# Import with custom quantization grid
# Default is 0.25 (16th notes), use 0.5 for 8th notes
score = Score.from_midi_file("recording.mid", quantize_grid=0.5)

Features:

  • Multi-track MIDI files (each channel becomes a separate part)
  • Tempo detection and preservation
  • General MIDI instrument mapping
  • Chord detection for simultaneous notes
  • Configurable timing quantization

Real-Time MIDI Transcription

Record MIDI input from a keyboard or controller:

import aldakit

# List available MIDI input ports
print(aldakit.list_input_ports())

# Record for 10 seconds from the first available port
score = aldakit.transcribe(duration=10)

# Play back what was recorded
score.play()

# Export to Alda source
print(score.to_alda())

# Record with options
score = aldakit.transcribe(
    duration=30,
    port_name="My MIDI Keyboard",
    instrument="piano",
    tempo=120,
    quantize_grid=0.25,  # Quantize to 16th notes
)

For more control, use TranscribeSession:

from aldakit.midi.transcriber import TranscribeSession

session = TranscribeSession(quantize_grid=0.25, default_tempo=120)

# Set a callback for note events (optional)
session.on_note(lambda pitch, vel, on: print(f"Note: {pitch}, vel={vel}, on={on}"))

# Start recording
session.start()

# Poll periodically (in a loop or timer)
import time
for _ in range(100):
    session.poll()
    time.sleep(0.1)

# Stop and get the recorded notes
seq = session.stop()
print(seq.to_alda())

Programmatic Composition

Build music programmatically using the compose module:

from aldakit import Score
from aldakit.compose import part, note, rest, chord, seq, tempo, volume

# Create a score from compose elements
score = Score.from_elements(
    part("piano"),
    tempo(120),
    note("c", duration=4),
    note("d"),
    note("e"),
    chord("c", "e", "g", duration=2),
)
score.play()

# Builder pattern with method chaining
score = (
    Score.from_elements(part("violin"))
    .with_tempo(90)
    .add(note("g", duration=8), note("a"), note("b"))
)

# Note transformations
c = note("c", duration=4)
c_sharp = c.sharpen()           # C#
c_up_octave = c.transpose(12)   # Up one octave

# Repeat syntax
pattern = seq(note("c"), note("d"), note("e"))
repeated = pattern * 4  # Repeat 4 times

# Export to Alda source
print(score.to_alda())  # "violin: (tempo 90) g8 a b"

Available compose elements:

  • Notes: note("c", duration=4, octave=5, accidental="+", dots=1)
  • Rests: rest(duration=4), rest(ms=500)
  • Chords: chord("c", "e", "g"), chord(note("c"), note("e", accidental="+"))
  • Sequences: seq(note("c"), note("d")), Seq.from_alda("c d e")
  • Parts: part("piano"), part("violin", alias="v1")
  • Attributes: tempo(120), volume(80), octave(5), panning(50)
  • Dynamics: pp(), p(), mp(), mf(), f(), ff()
  • Advanced: cram(), voice(), voice_group(), var(), var_ref(), marker(), at_marker()

Scales and Chords

Build melodies and harmonies using music theory helpers:

from aldakit import Score
from aldakit.compose import part, tempo
from aldakit.compose import (
    # Scale functions
    scale, scale_notes, scale_degree, mode,
    relative_minor, relative_major,
    # Chord builders
    major, minor, dim, aug, maj7, min7, dom7,
    arpeggiate, invert_chord, voicing,
)

# Get scale pitches
c_major = scale("c", "major")       # ['c', 'd', 'e', 'f', 'g', 'a', 'b']
a_blues = scale("a", "blues")       # ['a', 'c', 'd', 'd+', 'e', 'g']

# Generate scale as playable notes
melody = scale_notes("c", "pentatonic", duration=8)

# Key relationships
rel_min = relative_minor("c")  # 'a' (C major -> A minor)
rel_maj = relative_major("a")  # 'c' (A minor -> C major)

# Build chords
c_maj = major("c")                    # C E G
a_min7 = min7("a")                    # A C E G
g_dom7 = dom7("g", inversion=1)       # B D F G (first inversion)

# Arpeggiate a chord
arp = arpeggiate(maj7("c"), pattern=[0, 1, 2, 3, 2, 1], duration=16)

# Custom voicing (spread chord across octaves)
spread = voicing(major("c"), [3, 4, 5])  # C3 E4 G5

# Create a I-IV-V-I progression
pitches = scale("c", "major")
progression = [
    major(pitches[0], duration=2),  # C major (I)
    major(pitches[3], duration=2),  # F major (IV)
    major(pitches[4], duration=2),  # G major (V)
    major(pitches[0], duration=1),  # C major (I)
]

score = Score.from_elements(
    part("piano"),
    tempo(100),
    *progression,
)
score.play()

Available scales: major, minor, harmonic-minor, melodic-minor, pentatonic, blues, chromatic, whole-tone, dorian, phrygian, lydian, mixolydian, locrian, japanese, arabic, hungarian-minor, spanish, bebop-dominant, bebop-major

Available chords: major, minor, dim, aug, sus2, sus4, maj7, min7, dom7, dim7, half_dim7, min_maj7, aug7, maj6, min6, dom9, maj9, min9, add9, power

Transformers

Transform sequences with pitch and structural operations:

from aldakit.compose import (
    note, seq,
    transpose, invert, reverse, shuffle,
    augment, diminish, fragment, loop, interleave,
    pipe,
)

# Create a motif
motif = seq(note("c", duration=8), note("d", duration=8), note("e", duration=8))

# Pitch transformers
up_fourth = transpose(motif, 5)      # Transpose up 5 semitones
inverted = invert(motif)             # Invert intervals around first note
backwards = reverse(motif)           # Retrograde

# Structural transformers
longer = augment(motif, 2)           # Double durations (8th -> quarter)
shorter = diminish(motif, 2)         # Halve durations (8th -> 16th)
first_two = fragment(motif, 2)       # Take first 2 elements
repeated = loop(motif, 4)            # Repeat 4 times (explicit)

# Chain transformations with pipe
result = pipe(
    motif,
    lambda s: transpose(s, 5),
    reverse,
    lambda s: augment(s, 2),
)

# All transforms preserve to_alda() export
print(result.to_alda())

MIDI Transformers

For post-MIDI-generation processing, use MIDI-level transformers that operate on absolute timing:

from aldakit import Score
from aldakit.midi.transform import (
    quantize, humanize, swing, stretch,
    accent, crescendo, normalize,
    filter_notes, trim, merge,
)

# Get MIDI sequence from a score
score = Score("piano: c d e f g a b > c")
midi_seq = score.midi

# Timing transformers
quantized = quantize(midi_seq, grid=0.25, strength=0.8)  # Snap to quarter-note grid
humanized = humanize(midi_seq, timing=0.02, velocity=10)  # Add subtle variations
swung = swing(midi_seq, grid=0.5, amount=0.3)            # Apply swing feel

# Velocity transformers
accented = accent(midi_seq, pattern=[1.0, 0.5, 0.5, 0.5])  # 4/4 accent pattern
crescendo_seq = crescendo(midi_seq, start_vel=50, end_vel=100)
normalized = normalize(midi_seq, target=100)

# Filtering and combining
filtered = filter_notes(midi_seq, lambda n: n.pitch >= 60)  # Keep notes >= middle C
trimmed = trim(midi_seq, start=0.0, end=2.0)               # First 2 seconds
merged = merge(midi_seq, another_seq)                       # Combine sequences

Note: MIDI transformers operate on absolute timing (seconds) and cannot be converted back to Alda notation.

Generative Functions

Create algorithmic compositions with generative functions:

from aldakit import Score
from aldakit.compose import part, tempo
from aldakit.compose.generate import (
    random_walk, euclidean, markov_chain, lsystem, cellular_automaton,
    shift_register, turing_machine,
)

# Random walk melody
melody = random_walk("c", steps=16, intervals=[-2, -1, 1, 2], duration=8, seed=42)

# Euclidean rhythms (e.g., Cuban tresillo: 3 hits over 8 steps)
rhythm = euclidean(hits=3, steps=8, pitch="c", duration=16)

# Markov chain
chain = markov_chain({
    "c": {"d": 0.5, "e": 0.3, "g": 0.2},
    "d": {"e": 0.6, "c": 0.4},
    "e": {"c": 0.5, "g": 0.5},
    "g": {"c": 1.0},
})
markov_melody = chain.generate(start="c", length=16, duration=8, seed=42)

# L-System (Fibonacci pattern)
from aldakit.compose import note, rest
fib = lsystem(
    axiom="A",
    rules={"A": "AB", "B": "A"},
    iterations=5,
    note_map={"A": note("c", duration=8), "B": note("e", duration=8)},
)

# Cellular automaton (Rule 110)
automaton = cellular_automaton(rule=110, width=8, steps=4, pitch_on="c", duration=16)

# Shift register (LFSR) - classic analog sequencer
lfsr = shift_register(16, bits=4, scale=["c", "e", "g", "b"], duration=16)

# Turing Machine - evolving loop (probability=0 for locked, higher for chaos)
turing = turing_machine(32, bits=8, probability=0.1, seed=42)

# Combine into a score
score = Score.from_elements(
    part("piano"),
    tempo(120),
    *melody.elements,
)
score.play()

CLI Reference

aldakit [-h] [--version] [-e CODE] [-o FILE] [--port NAME|INDEX]
       [--stdin] [--parse-only] [--no-wait] [-v]
       {repl,ports,transcribe,play} [file]

Subcommands

Command Description
repl Interactive REPL with syntax highlighting and auto-completion
ports List available MIDI ports (both input and output)
transcribe Record MIDI input and output Alda code
play Play an Alda file or code (default behavior)

Options

Option Description
file Alda file to play (use - for stdin)
-e, --eval CODE Evaluate Alda code directly
-o, --output FILE Save to MIDI file instead of playing
--port NAME|INDEX MIDI port by name or index (see aldakit ports). Auto-selects if only one port available.
--stdin Read from stdin (blank line to play)
--parse-only Print AST without playing
--no-wait Don't wait for playback to finish
-v, --verbose Verbose output

Examples

# Interactive REPL with syntax highlighting
aldakit repl

# List available MIDI ports (input and output)
aldakit ports
aldakit ports -o  # output ports only
aldakit ports -i  # input ports only

# Play with verbose output
aldakit -v examples/jazz.alda

# Play to a specific port (by index or name)
aldakit --port 0 examples/twinkle.alda
aldakit --port FluidSynth examples/twinkle.alda

# Read from stdin
echo "piano: c d e f g" | aldakit -

# Parse and show AST
aldakit --parse-only -e "piano: c/e/g"

# Export to MIDI file
aldakit examples/twinkle.alda -o twinkle.mid

# Record MIDI input for 10 seconds (default)
aldakit transcribe

# Record from a specific input port (by index or name)
aldakit transcribe --port 0
aldakit transcribe --port "My MIDI Keyboard"

# Record for 30 seconds with verbose note display
aldakit transcribe -d 30 -v

# Record with Alda-style note display
aldakit transcribe -d 10 -v --alda-notes

# Record and save to file
aldakit transcribe -o recording.alda
aldakit transcribe -o recording.mid

# Record and play back
aldakit transcribe --play

# Record with custom settings (swing feel, triplet quantization)
aldakit transcribe -d 20 -t 90 -i guitar --feel triplet --play

Interactive REPL

The REPL provides an interactive environment for composing and playing Alda code:

aldakit repl

Features:

  • Syntax highlighting
  • Auto-completion for instruments (3+ characters)
  • Command history (persistent across sessions)
  • Multi-line paste (use platform-specific paste: ctrl-v, shift-ctrl-v, cmd-v, etc.)
  • Multi-line input (Alt+Enter)
  • MIDI playback control (Ctrl+C to stop)

REPL Commands:

  • :help - Show help
  • :quit - Exit REPL
  • :ports - List MIDI ports
  • :instruments - List available instruments
  • :tempo [BPM] - Show/set default tempo
  • :stop - Stop playback

Alda Syntax Reference

Notes and Rests

piano:
  c d e f g a b   # Notes
  r               # Rest
  c4 d8 e16       # With duration (4=quarter, 8=eighth, etc.)
  c4. d4..        # Dotted notes
  c500ms d2s      # Milliseconds and seconds

Accidentals

c+    # Sharp
c-    # Flat
c_    # Natural
c++   # Double sharp

Octaves

o4 c    # Set octave to 4
> c     # Octave up
< c     # Octave down

Chords

c/e/g           # C major chord
c1/e/g          # Whole note chord
c/e/g/>c        # With octave change

Ties and Slurs

c1~1            # Tied notes (duration adds)
c4~d~e~f        # Slurred notes (legato)

Parts

piano: c d e

violin "v1": c d e    # With alias

violin/viola/cello "strings":   # Multi-instrument
  c d e

Attributes

(tempo 120)     # Set tempo (BPM)
(tempo! 120)    # Global tempo

(vol 80)        # Volume (0-100)
(volume 80)

(quant 90)      # Quantization/legato (0-100)

(panning 50)    # Pan (0=left, 100=right)

# Dynamic markings
(pp) (p) (mp) (mf) (f) (ff)

Variables

riff = c8 d e f g4

piano:
  riff riff > riff

Repeats

c*4             # Repeat note 4 times
[c d e]*4       # Repeat sequence
[c d e f]*8     # 8 times

Cram (Tuplets)

{c d e}4        # Triplet in quarter note
{c d e f g}2    # Quintuplet in half note
{c {d e} f}4    # Nested cram

Voices

piano:
  V1: c4 d e f
  V2: e4 f g a
  V0:           # End voices

Markers

piano:
  c d e f
  %chorus
  g a b > c

violin:
  @chorus       # Jump to chorus marker
  e f g a

Supported Instruments

All 128 General MIDI instruments are supported. Common examples:

  • piano, acoustic-grand-piano
  • violin, viola, cello, contrabass
  • flute, oboe, clarinet, bassoon
  • trumpet, trombone, french-horn, tuba
  • acoustic-guitar, electric-guitar-clean, electric-bass
  • choir, strings, brass-section

See midi/types.py for the complete mapping.

MIDI Backend

aldakit uses libremidi via nanobind for cross-platform MIDI I/O:

  • Low-latency realtime playback
  • Virtual MIDI port support (AldakitMIDI), makes it easy to just send to your DAW.
  • Pure Python MIDI file writing (no external dependencies)
  • Cross-platform: macOS (CoreMIDI), Linux (ALSA), Windows (WinMM)
  • Supports hardware and software/virtual MIDI ports (FluidSynth, IAC Driver, etc.)
import aldakit

# List available ports
print(aldakit.list_ports())

# Play to virtual port (visible in DAWs like Ableton Live)
aldakit.play("piano: c d e f g")

# Play to a specific port
aldakit.play("piano: c d e f g", port="FluidSynth")

# Save to MIDI file
aldakit.save("piano: c d e f g", "output.mid")

MIDI Playback Setup

Virtual Port (Recommended)

When no hardware MIDI ports are available, aldakit creates a virtual port named "AldakitMIDI". This port is visible to DAWs and other MIDI software:

  1. Start the REPL: aldakit repl
  2. In your DAW (Ableton Live, Logic Pro, etc.), look for "AldakitMIDI" in MIDI input settings
  3. Play code in the REPL - notes will be sent to your DAW

Software Synthesizer (FluidSynth)

For high-quality General MIDI playback without hardware, use FluidSynth:

# Install FluidSynth (macOS)
brew install fluidsynth

# Install FluidSynth (Debian/Ubuntu)
sudo apt install fluidsynth 

# Download a SoundFont (e.g., FluidR3_GM.sf2)
# eg. sudo apt install fluid-soundfont-gm
# Place in ~/Music/sf2/

# Start FluidSynth with CoreMIDI (macOS)
fluidsynth -a coreaudio -m coremidi ~/Music/sf2/FluidR3_GM.sf2

# In another terminal, start aldakit
aldakit repl
# aldakit> piano: c d e f g

A helper script is available in the repository:

# Set the SoundFont directory (add to your shell profile)
export ALDAPY_SF2_DIR=~/Music/sf2

# Run with default SoundFont (FluidR3_GM.sf2)
python scripts/fluidsynth-gm.py

# Or specify a SoundFont directly
python scripts/fluidsynth-gm.py /path/to/soundfont.sf2

# List available SoundFonts
python scripts/fluidsynth-gm.py --list

Hardware MIDI

Connect a USB MIDI interface or synthesizer, then:

# List available ports
aldakit ports

# Play to a specific port
aldakit --port "My MIDI Device" examples/twinkle.alda

MIDI File Export

If you don't have MIDI playback set up, export to a file:

# Save to MIDI file
aldakit examples/twinkle.alda -o twinkle.mid

# Open with default app
open twinkle.mid

Development

Setup

git clone https://github.com/shakfu/aldakit.git
cd aldakit
make  # Build the libremidi extension

Run Tests

make test
# or
uv run pytest tests/ -v

Architecture

aldakit architecture

License

MIT

See Also

  • Alda - The original Alda language and reference implementation
  • Alda Cheat Sheet - Syntax reference
  • Extending aldakit - Design document for programmatic API
  • libremidi - A modern C++ MIDI 1 / MIDI 2 real-time & file I/O library. Supports Windows, macOS, Linux and WebMIDI.
  • nanobind - a tiny and efficient C++/Python bindings

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

aldakit-0.1.6.tar.gz (1.3 MB view details)

Uploaded Source

Built Distributions

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

aldakit-0.1.6-cp314-cp314-win_amd64.whl (842.5 kB view details)

Uploaded CPython 3.14Windows x86-64

aldakit-0.1.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (705.8 kB view details)

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

aldakit-0.1.6-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (697.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

aldakit-0.1.6-cp314-cp314-macosx_15_0_arm64.whl (645.8 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

aldakit-0.1.6-cp314-cp314-macosx_11_0_x86_64.whl (655.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

aldakit-0.1.6-cp314-cp314-macosx_11_0_arm64.whl (650.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

aldakit-0.1.6-cp313-cp313-win_amd64.whl (834.9 kB view details)

Uploaded CPython 3.13Windows x86-64

aldakit-0.1.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (705.9 kB view details)

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

aldakit-0.1.6-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (697.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

aldakit-0.1.6-cp313-cp313-macosx_15_0_arm64.whl (645.7 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

aldakit-0.1.6-cp313-cp313-macosx_11_0_x86_64.whl (655.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

aldakit-0.1.6-cp313-cp313-macosx_11_0_arm64.whl (650.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

aldakit-0.1.6-cp312-cp312-win_amd64.whl (835.0 kB view details)

Uploaded CPython 3.12Windows x86-64

aldakit-0.1.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (705.9 kB view details)

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

aldakit-0.1.6-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (697.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

aldakit-0.1.6-cp312-cp312-macosx_15_0_arm64.whl (645.8 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

aldakit-0.1.6-cp312-cp312-macosx_11_0_x86_64.whl (655.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

aldakit-0.1.6-cp312-cp312-macosx_11_0_arm64.whl (650.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

aldakit-0.1.6-cp311-cp311-win_amd64.whl (835.9 kB view details)

Uploaded CPython 3.11Windows x86-64

aldakit-0.1.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (706.8 kB view details)

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

aldakit-0.1.6-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (698.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

aldakit-0.1.6-cp311-cp311-macosx_15_0_arm64.whl (646.8 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

aldakit-0.1.6-cp311-cp311-macosx_11_0_x86_64.whl (656.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

aldakit-0.1.6-cp311-cp311-macosx_11_0_arm64.whl (651.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

aldakit-0.1.6-cp310-cp310-win_amd64.whl (836.0 kB view details)

Uploaded CPython 3.10Windows x86-64

aldakit-0.1.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (707.1 kB view details)

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

aldakit-0.1.6-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (698.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

aldakit-0.1.6-cp310-cp310-macosx_15_0_arm64.whl (646.9 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

aldakit-0.1.6-cp310-cp310-macosx_11_0_x86_64.whl (656.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

aldakit-0.1.6-cp310-cp310-macosx_11_0_arm64.whl (651.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file aldakit-0.1.6.tar.gz.

File metadata

  • Download URL: aldakit-0.1.6.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for aldakit-0.1.6.tar.gz
Algorithm Hash digest
SHA256 05f91fd3fe4f7714db2ebb7e2e55f937a733f9874fd3620742a82730a8c2f3e4
MD5 4b8f6757382fb26e2551228d79ae9062
BLAKE2b-256 ce06c43ee863d3c048e0b1e3b3cb687fffdc565f120e100c982f5db7484d48ec

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: aldakit-0.1.6-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 842.5 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for aldakit-0.1.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8df8e17babf67801b0bd2375f13c94b7a67915e6f6f111f1c75f0f2a588ffb74
MD5 c455166a9a84de079b084766559b4c4f
BLAKE2b-256 a800d8be9cd5abfc4f9537bea64aa33e886732c239a49e1891307d5397d47d59

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2bd4244b1a0f69f7129dd80baaa17d236f8c7fc3541d9c4a48c3d546678803a7
MD5 0cb494918cf2db6cc4bef6b823895cad
BLAKE2b-256 ea3ed8acc81120a8812123843f48d20ba00416dd198111da12a5472f50db79e8

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c17977f07ec4deb8913fea4ecb985e2a596372a419ac04c1fef3303ef37878d0
MD5 2a5d89b5b5dca91aecc2b28472f81041
BLAKE2b-256 a7374a76e020f2c531dc9dd300239b98e56405c4064429959f72070146453416

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 73ed53c130f75ea5e5abf5291248a3e6d3ed4aecfb70c9fc828854579812be08
MD5 7476829304946b5cdf149f40e16d0355
BLAKE2b-256 e6d6a969949e45001596bc1f76d09b926e57ea4c1989e817190cfcd096be28f2

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 db6e9ae8793d206c5667f440ce09cb4f0054639637184f4f3fe7a3b2b4e259b4
MD5 773019f6495f530868d929c2d9ea3e1d
BLAKE2b-256 09ee98e0d12bf375fabb2dc1862f30148cf0898d0538345f8883a3f94929a626

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 230646f9be8b67a47ac233265ca3fbf661d9013e23fa5d227329ab17030978e3
MD5 436de041d0bc0f7cda8839089c2d59dd
BLAKE2b-256 a25247a52b40d9b85f9a75b2a32638ebe281d05778b21e3a120d1c4be2a796bc

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: aldakit-0.1.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 834.9 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for aldakit-0.1.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 141c44322446cdd1391c107abea428dafca60a125b0dcf8d0fd0bb79990a8c9e
MD5 1845de7f6ed43b9b7f9cbc96c1926c52
BLAKE2b-256 cd28312aa61d2433859fdd8e8f9962f9f12652b6af07828877fb08338e9276a4

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f2bc1dd4f0ffbf2773c20be3dd782e1a61b8c60ca8bd25825b99f28977197245
MD5 e2ad7bed54f8551ff2e9ad30132418be
BLAKE2b-256 bea0f28449b923c692ac212bbfe38a4d2740eccf9008fd47917d0cfb489a4dee

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0f26f323ce73478861f97cfadef3caa6a5b9617a6a784f853779371e1b726d1d
MD5 263a394d41567a5fc3a85bc737f66a13
BLAKE2b-256 ca4bf28b8f27c8fe145670a4ac66b2639045dbf9b0ede0820ff4878f0ca1cb81

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e36e15efba26d9752cb113efdc681d7c84ea5cda9c2f8069858c9be9d4f08f91
MD5 f880fc75d34ac8ce66be869c9711f06c
BLAKE2b-256 b390bee3f547552c2b0fd773108b87de3114239742c05bff1e7a1edff950044f

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 a30125cc694365f846a3718ecb9444530d5e6fa72bf226b4a2e0dfa239c0db06
MD5 d862bf2468223d35865d2af0008359dd
BLAKE2b-256 7f4c8cf43308bba215c99e16dccad9458367ae62a25d79c362128a7201795e65

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fa3a3456937bee4aa2962e2a549903e9cd80d8ee145c89450039e6502c671cf2
MD5 3c4fb62f4745dff0830f79d4ed5d9293
BLAKE2b-256 ac188368e7645df54867b90b3d71f3ef1007640fe221fe3158dcd60b9a0f2946

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: aldakit-0.1.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 835.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for aldakit-0.1.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 90829ec654326444db0cfad9fe0b6f8964cbcc055c19bb8e5760e16f5e8aa979
MD5 32d692962992af2e6a1edaa6445b8223
BLAKE2b-256 577b139dbacf4004b3627ebe90e0c54a03873e38deb916cfe055e041a93c4f15

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2f372cfa765b10d7d1b2e866a94b81bc2c11d332fd1115cba346ebdaf395a5e1
MD5 81ee926eec93c9105c055ea39091da03
BLAKE2b-256 58fa8c8144429f7ef9e963a4a281a90da4a02f8eae65d6533f2eceb9462be3ac

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1df3467e40bd6802fa39a765bc53a8c24144c0714a99029613a26c455a34745d
MD5 ea43e3b4ec1f881bb57cdeda4ae0f590
BLAKE2b-256 95bc86691bdad68b4393b2abd9523e86177ab5a175191ecd1e558d69430addfa

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e4b07023c2d4be34636613d783a237cc4adfa9fb4649f92adf933623f454af8e
MD5 a2fe9cebbccd0b83ac73aba436ff0b51
BLAKE2b-256 e90059fd5c47b6195309ed9da8adabb43ab051abb37249ffb6a5d0f9eea5f62c

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 ec267fd0bba70a23ca0d577e8dd21f8f92c6f2cd240bed889878c79e7bb354ff
MD5 d8c81d397a61f3ad58a2a04736c1d9b4
BLAKE2b-256 aba62aef498612590c0c59d3465af9ae62e1df369c41ab25eeac1eabc35b4c21

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4641ee51c4bf9be9e5fe08828abd73c5012a86d804085309dd7fca9973e68254
MD5 3f3933583ae2ddca99d5847e4dbe5ee8
BLAKE2b-256 449273dbc27bc4fc57b32053420ef005ea5b4c1221525021ed61dca2de15c3ab

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: aldakit-0.1.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 835.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for aldakit-0.1.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8ea2c1f944e96b003a68ca1fa4bd210e27d5a9b51d69182c89f5e71b5172351a
MD5 584b2e667cdd256d3dc6784f1eb95304
BLAKE2b-256 75a32854457f9acfcb044cf1b8dadeb29b4876f635db667dc3ade9e026713360

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 660bba6f046b226ba9e82132ca6fec49ee851b88ca4903a2c8cc7bd0e6d8b1c1
MD5 285cd7df932a24aa34783cd7bbdb5d6c
BLAKE2b-256 67345a79b620289ade8a34e5c847c92f982ca2b7b2b38f06e5c693e27b398bb7

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 373c95b6c5fe98f2c3e1b0b8b9778048ee0bd586e3d7856b035b4a7e7e579fc0
MD5 ff510af3a5bb8dcd74cc76b0448852de
BLAKE2b-256 86f25a356c798788b637970eb865d2d44ab952793fccf5592128e61bcbe9e224

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 260653c9cd203fbb37838c049b14528c2656e636af281e5585c7c70a8b6b2426
MD5 857bf3990011b2ac599ef1b553f06cb1
BLAKE2b-256 c883de70a761944213df47cff04185757447634c25e8e5b72b7cfa127873b3d1

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 e77627a3aaf7980daf57b6e59a7b8925b67c473c501e0b9b8a656fbab074c4db
MD5 8dd9ac911b9fc76afed80a4c1f36fd38
BLAKE2b-256 3f0dc2552516b764d315c419e6a04442e6c4b75ebb1eaeccf740995faa0c1bc2

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0bf3b93f861bb7319441e0588b883d878aee753701245f66298ce35258977ebc
MD5 c428e455e9b5362faeb6152219d7bf7b
BLAKE2b-256 57d760f99390fab94e646ef6e7765d1ab905f395b6230e3c2e223d61d3c4e717

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: aldakit-0.1.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 836.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for aldakit-0.1.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7dc627b59c14622e178860a5876c8906d34efc1d61f51a337e8d4540afbd9e81
MD5 61da7dad48db0e067f18e7b7c22f7a8c
BLAKE2b-256 6332982adf231805d71c4df71897d78bc805a2ec128c345891000f29db603b9c

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9f7fd4f9c120720343546452ad4d32595c3defd6196d9ed88913073dce3d11df
MD5 d9148b3a68616f7a77f0dadc2e291a21
BLAKE2b-256 3e0ed8d5d6a664b20ebb16ca56fe98766ba06fb0bd8fc54795b4fb30496d72d1

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 823290f20d8688cb3ad6fb6a5b513bc916d7bf129193aa1d888ccbead7fe16ea
MD5 cea59c15a58e5bcafdc2dd9d5c3482c5
BLAKE2b-256 8761feed64edcbb38e6339881917d735b9387cb719d3a9e31c99a878b76a8c8b

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 64252b1bdc0bed48b0ce4facfb2d8ed97e17bd232e04ba101a1e09200dd81151
MD5 932d84ba1cbb71a2e6538ee1ac3a8cad
BLAKE2b-256 2371ac8fcb1c78be61906f5edf257b9b887cdcd3cabff4b781ec7e4f67b0a7f6

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 6678839fccd690f5137cd0639c98af984fb63954bc9b0f8efc9931604678e134
MD5 17d3a1d37493f36560ed54323560e69b
BLAKE2b-256 99f3c74a31c114d81789b182328978d0e89e2ad3dcc72a29818ac16e2add50bb

See more details on using hashes here.

File details

Details for the file aldakit-0.1.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8d2154e3dfa52155a890d7506ae42bf5601dc96901a01677e89637316a90c6d
MD5 4258ee4617f5d3f7ef4351d6814358f2
BLAKE2b-256 29c36fcc16269c53a3c2486e93f17f679f671126162c209f8985d404bbfcc6ab

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