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.5.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.5-cp314-cp314-macosx_15_0_arm64.whl (644.9 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

aldakit-0.1.5-cp313-cp313-win_amd64.whl (834.0 kB view details)

Uploaded CPython 3.13Windows x86-64

aldakit-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (693.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

aldakit-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (686.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

aldakit-0.1.5-cp313-cp313-macosx_15_0_arm64.whl (644.8 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

aldakit-0.1.5-cp313-cp313-macosx_11_0_x86_64.whl (654.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

aldakit-0.1.5-cp313-cp313-macosx_11_0_arm64.whl (649.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

aldakit-0.1.5-cp312-cp312-win_amd64.whl (834.0 kB view details)

Uploaded CPython 3.12Windows x86-64

aldakit-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (693.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

aldakit-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (686.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

aldakit-0.1.5-cp312-cp312-macosx_15_0_arm64.whl (644.9 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

aldakit-0.1.5-cp312-cp312-macosx_11_0_x86_64.whl (654.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

aldakit-0.1.5-cp312-cp312-macosx_11_0_arm64.whl (649.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

aldakit-0.1.5-cp311-cp311-win_amd64.whl (835.0 kB view details)

Uploaded CPython 3.11Windows x86-64

aldakit-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (694.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

aldakit-0.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (687.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

aldakit-0.1.5-cp311-cp311-macosx_15_0_arm64.whl (645.9 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

aldakit-0.1.5-cp311-cp311-macosx_11_0_x86_64.whl (655.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

aldakit-0.1.5-cp311-cp311-macosx_11_0_arm64.whl (650.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

aldakit-0.1.5-cp310-cp310-win_amd64.whl (835.1 kB view details)

Uploaded CPython 3.10Windows x86-64

aldakit-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (694.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

aldakit-0.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (688.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

aldakit-0.1.5-cp310-cp310-macosx_15_0_arm64.whl (646.0 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

aldakit-0.1.5-cp310-cp310-macosx_11_0_x86_64.whl (655.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

aldakit-0.1.5-cp310-cp310-macosx_11_0_arm64.whl (650.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: aldakit-0.1.5.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.5.tar.gz
Algorithm Hash digest
SHA256 ddb7594d0552507642c3df02cab1403a77edc90b8c0a77d169609eba8481a92e
MD5 812f18eba3c3b40c7d243e3395b4309a
BLAKE2b-256 cc3d4ff550f99650ef5c19bfcc7a54a87945c71bed5e70dfebeb86b6ddd1dfb3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 28af8e4484a71c3503698511797f1cb28b0ea259dc8d8c1663c2c2a1d7e6188a
MD5 3c263e9b8e0812a0beeead5e5c0232ad
BLAKE2b-256 2914a6cf4ca2e89ca508a0544ba9fe4c016471236f08cae8a93e3f10b2763a6f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aldakit-0.1.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 834.0 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.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2aa1cc843df9f88ca120026d5d1cd1c61e266165dc4b24c80e67aa1f9fa06b13
MD5 4dbe86cec45b95b3a00408ccd3b44c53
BLAKE2b-256 156e947ef0291dca9e97ed3e65574372f046de2a4f5462c6e2149b543fe2056b

See more details on using hashes here.

File details

Details for the file aldakit-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 51275243826afbd70f541e80f2f1f8be0f0f44dfb205d1099df50a555906494c
MD5 c830d2360f5589b96390556fd73b4138
BLAKE2b-256 4d9d8ab63a85bda8f8f2695faf00dfd0b3b65f8e8c97311df256803130054c94

See more details on using hashes here.

File details

Details for the file aldakit-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 01a8cd45ed4a52fa497127cac825c67ea36dd32e93fe5400133ba961b99b1912
MD5 2b15ae64384868fedbb31ec77c31e1de
BLAKE2b-256 9c806d6b72d7607e738115be1fa47de9b6849690edb9301cbd5a96e30fbafdff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7cc4f1aadd05e0cc3a63980b127d03c156e1df2de458c3ee0419438cb26c5aad
MD5 96cb710129661e23efae96ee18aa71d0
BLAKE2b-256 30cdd917ea927a3ad9df9174580d2912519bccffd32eeb834527923356ff31b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b13c854a66087cb20e0f5450e5380ebb48b4c29cdfb25d5d1b9089605f61c2e2
MD5 c7ef69d2db2975ec6c96919e974dd1c4
BLAKE2b-256 f69fdc8ef678bd35ad9cc59a51a0fdf88580cce5bc23217e0da9a1432e58239c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2345af5c82bebdfa6a09731e220f9ee931621a2768874027625abc8ce00860bc
MD5 45b4bfa0ce6b3815f9e590efd377f4d1
BLAKE2b-256 29434197e2285c6454fd92d1a126e3190fc7ee1e141190b1214c2de95c301424

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aldakit-0.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 834.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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9d062d02947bfcbcdadaf5c7b64149f47f060ca8048943c6f5645246ef34cdf0
MD5 79f899fdc4a225ee27b1239ef95d5239
BLAKE2b-256 feb9a164cff295daf0ec1fffce1de165c08663094cd7ca1c3a8e0f28d5d8e0f7

See more details on using hashes here.

File details

Details for the file aldakit-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da8a99d8f13c9826ab1c807659a350e82f4f45d7ce37d5524ac6db86028cc802
MD5 31cf24b4657d6dd3190848208ba028e7
BLAKE2b-256 a549dfe681920f70887e10fd17dd05c020332155d99a47d9b7768c1fef946718

See more details on using hashes here.

File details

Details for the file aldakit-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0e64b325184c7721753fc95f2393982fac8066630cb3792e90f00d50895aa8a3
MD5 fec59db2511ba3192337cd98895416b5
BLAKE2b-256 758badeea174b8b0dedf3990ac4999d448cd731f404a14f04f84e80a07daa3f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 603d05c83b1d15a90ee81bffef30ffbe625a806668c7ca72dbc6a21edf67d23c
MD5 cb91d96730dbab106b1ec1446fbfd66a
BLAKE2b-256 0ce7e5cdf886588cfee804637e9d8685cc56c9543964f643e962d48c8c383399

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 32dcc10a3317552098f446cb4de0eba1d738b62cb0e7dbc0aff4106a139d9157
MD5 3916f9d724346765381e6a2f708bda27
BLAKE2b-256 656b07afb9c8d89395088786d5c05a3001d49ec556be18a77644a0de222fe9df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ca96cb132a0ac6b75b7e8c7480b6d54554e5b96cda74dc9a7712ffcf93b2c69f
MD5 f27c2e60f6168f767d8c813ff0348a79
BLAKE2b-256 d55985869cb6f21b3016b07fde7b31f6dc5ebb5b2405c835119b777cae63721c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aldakit-0.1.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 835.0 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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8ee24845023915de9f0df0f2f6b34628fd6e494769cc4608c7737d5a1cf74d2e
MD5 a99bc48e835a2fe5cfbde9ce0197e1d4
BLAKE2b-256 5d4b847646367d469a8ab406d3348467f96b7e9b552d3a49d06f61ea35483e7f

See more details on using hashes here.

File details

Details for the file aldakit-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 928b74d0417a921bfeb2fd856dc067bc346131f4e8860f6b08fbff58bc78d683
MD5 d4b29a88e9c78f1d5a96d8900748bd0d
BLAKE2b-256 30ea8e131d0b815f8c7001e1cfe2246fac0e1c24242cd17739aec7687d27cb88

See more details on using hashes here.

File details

Details for the file aldakit-0.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 00545974665d4829e40e7f786d7e533c93ca4c2aea388ee3e9e2b01f7869e9c8
MD5 7de833ecf89cbbff856fc370e9f9ee3e
BLAKE2b-256 e5898e1bc57105538d1345b76f4f2cfd9cc3917b9f112144eafa750bfe075777

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 b72cd5da606e7b8f4aa390dde8359b775b0f20735b61c50ee109d1908a492128
MD5 07168eed251ebc1954687daaf090884d
BLAKE2b-256 e8c5ab0159dcca643ee852a8f6d89f5a1b35f7872fc900b60d57602cf55b6b8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f5e6ef5dccc9a212b5550b554020bc9328d929a7e1966904a4fddca59563290c
MD5 93318fa405dd996817e0c770a7c3a148
BLAKE2b-256 0adf113f7e63fe914ab47fbdb3273c55fc25267832277df3cdada8bf87f9a70a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fde73f17a119a496142b1bb24c55135153582a3b88e9b51d005d0375218c417e
MD5 e0c3d0f646a13f29dc97f4073594e647
BLAKE2b-256 1cd08caf304e59541496c93f7fcf2cb37a154a8ee4aeaa66f9baadadb9471ed2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aldakit-0.1.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 835.1 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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 26cc20b4579892c3b1727946558524fdc51ae3cae6adeccc8d8e2b07ff3ca010
MD5 cd68131b8b2b9868d86aee5889a29079
BLAKE2b-256 d438ffeb6194a4465022d89f7feb85c855a374f988b8d76f8ed0c97e7d99486a

See more details on using hashes here.

File details

Details for the file aldakit-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 31dd57ae0b8e3e40f28b43c6a047845d548d3a41aaa945252e1ea5970bba2aa3
MD5 8b23feb9b8f76e9a24807f62b5dba18a
BLAKE2b-256 def1e2d4751edf9d06c68e77f2321f5a6980a9cdef76a27173e37b5ea9f4cb99

See more details on using hashes here.

File details

Details for the file aldakit-0.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for aldakit-0.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 611f662184ac85496f38b0ccdea1f8f521b7f930dfd8a227b5cb31bf52139a80
MD5 4ecf425beb2df93997481c94edb1473e
BLAKE2b-256 e5f352fc95cb8afe687ca4df024d62fd85c2e9234f390556d0fb78bb41c289cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 5313ba2c3af6d62e452a81b1f7f8a6420bec56990f9f674f6644ef9122c0a638
MD5 8d8215a53c3dcd450053a02bad457397
BLAKE2b-256 8be2960482c9f369446979e567daa1df25cb5e1a6f25d4b444044e868e5167dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4035c581c12d908ff35c90ce62f1e799bc8ec62519adc3a5f3c506d15bd05387
MD5 27ac8949cc081ac703b7fe5cfb752cd5
BLAKE2b-256 2bafc09c878b586682633127df5794939a3340d362a4a9975630144fa460949a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aldakit-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f28434cd333491f352d35baf365637bb3679a3d706a7f7b0c4ed27b0ca11812
MD5 0c2cf787b5ab3842e54a7efd7e4c5edd
BLAKE2b-256 6b0dd4883256e1526e88d2e68d34036a684d5e22c2ad09b1dc1bed80b3c0d983

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