Cython bindings for the CDP audio processing library
Project description
cycdp
Python bindings for the CDP8 (Composers Desktop Project, Release 8) audio processing library.
Overview
The Composers Desktop Project (CDP) is a venerable suite of over 500 sound transformation programs developed since the late 1980s by Trevor Wishart, Richard Orton, and others. It occupies a unique niche in audio processing: where most tools focus on mixing, mastering, or standard effects, CDP specializes in deep spectral manipulation, granular synthesis, pitch-synchronous operations, waveset distortion, and other techniques rooted in the electroacoustic and computer music traditions.
Historically, CDP programs are invoked as standalone command-line executables that read and write sound files, which makes integration into modern workflows cumbersome. cycdp solves this in two ways. First, a C library (libcdp) reimplements a curated subset of CDP's algorithms to operate directly on memory buffers. Second, a shim layer intercepts the file I/O calls inside original CDP algorithm code (the sfsys open/read/write/seek functions) and redirects them to memory buffers transparently, so those algorithms can run in-process without touching the filesystem. Both paths are exposed to Python via Cython bindings, giving you native-speed audio processing with a Pythonic API, zero-copy buffer interoperability, and no subprocess overhead.
Design principles
- Zero-copy interop. Cython memoryviews and the buffer protocol mean data passes between Python and C without copying.
- No numpy dependency. Operates on any object supporting the Python buffer protocol (
array.array,memoryview, numpy arrays, etc.). Numpy is optional, not required. - Functional API. Most functions accept a buffer and return a new buffer, leaving the original unchanged. Low-level in-place alternatives are also available.
- Self-contained. The C library is compiled into the extension; no external CDP installation is needed.
Features
Spectral Processing -- Time stretching (preserving pitch), pitch shifting (preserving duration), spectral blur, shift, stretch, focus, hilite, fold, and noise cleaning.
Granular Synthesis -- Classic brassage, freeze, grain clouds, grain time-extension, simple and multi-layer texture synthesis, wrappage, plus extended grain operations (reorder, rerhythm, reverse, timewarp, repitch, stereo positioning, omit, duplicate).
Pitch-Synchronous Operations (PSOW) -- Time-stretching that preserves pitch via PSOLA, grain extraction and interpolation, and a hover effect for sustained pitched textures.
FOF Extraction and Synthesis -- Extract pitch-synchronous grains (FOFs), build a grain bank, resynthesize at arbitrary pitch and duration, and repitch with optional formant preservation.
Morphing and Cross-Synthesis -- Spectral morphing between two sounds, gliding morphs over time, and vocoder-style cross-synthesis.
Distortion -- Waveset-based techniques: overload/saturation, reverse, fractal, shuffle, cut with decaying envelopes, marker-based interpolation, wavecycle repetition, half-wavecycle shifting, and progressive warp with sample folding.
Dynamics and EQ -- Compressor, limiter, noise gate, parametric EQ, envelope follower, and envelope application.
Filters -- Lowpass, highpass, bandpass, and notch (band-reject).
Effects -- Reverb (FDN: 8 comb + 4 allpass), delay, chorus, flanger, ring modulation, bitcrush, tremolo, and attack reshaping.
Spatial Processing -- Static and envelope-driven panning, stereo mirror and width control, spinning rotation with optional doppler, dual-rotation modulation, spatial tremolo, and phase-based stereo enhancement.
Playback and Time Manipulation -- Zigzag, iterate, stutter, bounce, drunk-walk navigation, looping with crossfades, TDOLA time-stretching, waveset scrambling, splinter, and silence constriction.
Experimental / Chaos -- Strange attractor (Lorenz), Brownian motion, crystal growth, fractal, Chirikov map, Cantor set, cascade, fracture, and tesselation transformations.
Analysis -- Pitch tracking (YIN), formant analysis (LPC), and partial/harmonic extraction.
Synthesis -- Waveform generation (sine, square, saw, ramp, triangle), white and pink noise, click/metronome tracks, and chord synthesis from MIDI notes.
Core Operations -- Gain (linear and dB), normalization, phase inversion, peak detection, channel conversion (mono/stereo, split, merge, interleave), mixing, reverse, fade in/out, and concatenation.
File I/O -- Read and write WAV files (float32, PCM16, PCM24).
Installation
pip install cycdp
If you prefer to build from source:
# clone the repository
git clone https://github.com/shakfu/cycdp.git
cd cycdp
# Build and install in development mode
make build
# Or with uv directly
uv sync
Quick Start
Command Line
# Process audio
cycdp time-stretch input.wav --factor 2.0 -o stretched.wav
cycdp reverb input.wav --decay-time 3.0 --mix 0.5
cycdp pitch-shift input.wav --semitones 5 -o shifted.wav
# Two-input operations
cycdp morph voice.wav pad.wav --morph-end 0.7 -o morphed.wav
cycdp mix2 track1.wav track2.wav -o mixed.wav
# Synthesis (no input file)
cycdp synth-wave --waveform saw --frequency 220 --duration 2.0 -o tone.wav
cycdp synth-chord --midi-notes 60 64 67 --duration 1.0 -o chord.wav
# Analysis (output to stdout)
cycdp pitch input.wav
cycdp pitch input.wav --format json
cycdp formants input.wav --format csv -o formants.csv
# Utilities
cycdp info input.wav
cycdp list # all commands grouped by category
cycdp list spectral # commands in one category
cycdp version
Output is auto-normalized to 0.95 peak level by default. Use --no-normalize to disable, or -n 0.8 to set a different target. When -o is omitted, output is written alongside the input as <input_stem>_<command>.wav.
Also accessible as python3 -m cycdp.
Python API
import cycdp
# Load audio file
buf = cycdp.read_file("input.wav")
# Apply processing
stretched = cycdp.time_stretch(buf, stretch_factor=2.0)
shifted = cycdp.pitch_shift(buf, semitones=5)
# Save result
cycdp.write_file("output.wav", stretched)
Usage
High-level API
Works with any float32 buffer (numpy arrays, array.array('f'), memoryview, etc.):
import array
import cycdp
# Create sample data
samples = array.array('f', [0.5, 0.3, -0.2, 0.8, -0.4])
# Apply gain (linear or decibels)
result = cycdp.gain(samples, gain_factor=2.0)
result = cycdp.gain_db(samples, db=6.0) # +6dB = ~2x
# Normalize to target peak level
result = cycdp.normalize(samples, target=1.0)
result = cycdp.normalize_db(samples, target_db=-3.0) # -3dBFS
# Phase invert
result = cycdp.phase_invert(samples)
# Find peak level
level, position = cycdp.peak(samples)
With numpy
import numpy as np
import cycdp
samples = np.random.randn(44100).astype(np.float32) * 0.5
result = cycdp.normalize(samples, target=0.9)
# Result supports buffer protocol - zero-copy to numpy
output = np.asarray(result)
File I/O
import cycdp
# Read audio file (returns Buffer)
buf = cycdp.read_file("input.wav")
# Write audio file
cycdp.write_file("output.wav", buf)
Low-level API
For more control, use explicit Context and Buffer objects:
import cycdp
# Create context and buffer
ctx = cycdp.Context()
buf = cycdp.Buffer.create(1000, channels=2, sample_rate=44100)
# Fill buffer
for i in range(len(buf)):
buf[i] = 0.5
# Process in-place
cycdp.apply_gain(ctx, buf, 2.0, clip=True)
cycdp.apply_normalize(ctx, buf, target_level=0.9)
# Get peak info
level, pos = cycdp.get_peak(ctx, buf)
# Access via buffer protocol
mv = memoryview(buf)
API Reference
File I/O
| Function | Description |
|---|---|
read_file(path) |
Read audio file, returns Buffer |
write_file(path, buffer) |
Write buffer to audio file |
Gain and Normalization
| Function | Description |
|---|---|
gain(samples, gain_factor, ...) |
Apply linear gain |
gain_db(samples, db, ...) |
Apply gain in decibels |
normalize(samples, target, ...) |
Normalize to target peak (0-1) |
normalize_db(samples, target_db, ...) |
Normalize to target dB |
phase_invert(samples, ...) |
Invert phase |
peak(samples, ...) |
Find peak level and position |
Spatial and Panning
| Function | Description |
|---|---|
pan(samples, position, ...) |
Pan mono to stereo (-1 to 1) |
pan_envelope(samples, envelope, ...) |
Pan with time-varying envelope |
mirror(samples, ...) |
Mirror/swap stereo channels |
narrow(samples, width, ...) |
Adjust stereo width (0=mono, 1=full) |
Mixing
| Function | Description |
|---|---|
mix(buffers, ...) |
Mix multiple buffers together |
mix2(buf1, buf2, ...) |
Mix two buffers |
Buffer Utilities
| Function | Description |
|---|---|
reverse(samples, ...) |
Reverse audio |
fade_in(samples, duration, ...) |
Apply fade in |
fade_out(samples, duration, ...) |
Apply fade out |
concat(buffers, ...) |
Concatenate buffers |
Channel Operations
| Function | Description |
|---|---|
to_mono(samples, ...) |
Convert to mono |
to_stereo(samples, ...) |
Convert mono to stereo |
extract_channel(samples, channel, ...) |
Extract single channel |
merge_channels(left, right, ...) |
Merge two mono buffers to stereo |
split_channels(samples, ...) |
Split stereo to two mono buffers |
interleave(channels, ...) |
Interleave multiple mono buffers |
Time and Pitch
| Function | Description |
|---|---|
time_stretch(samples, stretch_factor, ...) |
Time stretch without pitch change |
modify_speed(samples, speed, ...) |
Change speed (affects pitch) |
pitch_shift(samples, semitones, ...) |
Shift pitch without time change |
Spectral Processing
| Function | Description |
|---|---|
spectral_blur(samples, blur_amount, ...) |
Blur/smear spectrum over time |
spectral_shift(samples, shift, ...) |
Shift spectrum up/down |
spectral_stretch(samples, stretch, ...) |
Stretch/compress spectrum |
spectral_focus(samples, freq, bandwidth, ...) |
Focus on frequency region |
spectral_hilite(samples, freq, gain, ...) |
Highlight frequency region |
spectral_fold(samples, freq, ...) |
Fold spectrum around frequency |
spectral_clean(samples, threshold, ...) |
Remove spectral noise |
Filters
| Function | Description |
|---|---|
filter_lowpass(samples, cutoff, ...) |
Low-pass filter |
filter_highpass(samples, cutoff, ...) |
High-pass filter |
filter_bandpass(samples, low, high, ...) |
Band-pass filter |
filter_notch(samples, freq, width, ...) |
Notch/band-reject filter |
Dynamics and EQ
| Function | Description |
|---|---|
gate(samples, threshold, ...) |
Noise gate |
compressor(samples, threshold, ratio, ...) |
Dynamic range compressor |
limiter(samples, threshold, ...) |
Peak limiter |
eq_parametric(samples, freq, gain, q, ...) |
Parametric EQ band |
envelope_follow(samples, ...) |
Extract amplitude envelope |
envelope_apply(samples, envelope, ...) |
Apply envelope to audio |
Effects
| Function | Description |
|---|---|
bitcrush(samples, bits, ...) |
Bit depth reduction |
ring_mod(samples, freq, ...) |
Ring modulation |
delay(samples, time, feedback, ...) |
Delay effect |
chorus(samples, depth, rate, ...) |
Chorus effect |
flanger(samples, depth, rate, ...) |
Flanger effect |
reverb(samples, size, damping, ...) |
Reverb effect |
Envelope Shaping
| Function | Description |
|---|---|
dovetail(samples, fade_time, ...) |
Apply dovetail fades |
tremolo(samples, rate, depth, ...) |
Tremolo effect |
attack(samples, attack_time, ...) |
Modify attack transient |
Distortion
| Function | Description |
|---|---|
distort_overload(samples, gain, ...) |
Overload/saturation distortion |
distort_reverse(samples, ...) |
Reverse distortion effect |
distort_fractal(samples, ...) |
Fractal distortion |
distort_shuffle(samples, ...) |
Shuffle distortion |
distort_cut(samples, cycle_count, ...) |
Waveset cut with decaying envelope |
distort_mark(samples, markers, ...) |
Interpolate wavesets at time markers |
distort_repeat(samples, multiplier, ...) |
Time-stretch by repeating wavecycles |
distort_shift(samples, group_size, ...) |
Shift/swap half-wavecycle groups |
distort_warp(samples, warp, ...) |
Progressive warp distortion with sample folding |
Granular Processing
| Function | Description |
|---|---|
brassage(samples, ...) |
Granular brassage |
freeze(samples, position, ...) |
Granular freeze at position |
grain_cloud(samples, density, ...) |
Granular cloud synthesis |
grain_extend(samples, extension, ...) |
Granular time extension |
texture_simple(samples, ...) |
Simple texture synthesis |
texture_multi(samples, ...) |
Multi-layer texture synthesis |
Morphing and Cross-synthesis
| Function | Description |
|---|---|
morph(buf1, buf2, amount, ...) |
Spectral morph between sounds |
morph_glide(buf1, buf2, ...) |
Gliding morph over time |
cross_synth(carrier, modulator, ...) |
Cross-synthesis (vocoder-like) |
Analysis
| Function | Description |
|---|---|
pitch(samples, ...) |
Extract pitch data |
formants(samples, ...) |
Extract formant data |
get_partials(samples, ...) |
Extract partial/harmonic data |
Experimental/Chaos
| Function | Description |
|---|---|
strange(samples, ...) |
Strange attractor transformation |
brownian(samples, ...) |
Brownian motion transformation |
crystal(samples, ...) |
Crystal growth patterns |
fractal(samples, ...) |
Fractal transformation |
quirk(samples, ...) |
Quirky transformation |
chirikov(samples, ...) |
Chirikov map transformation |
cantor(samples, ...) |
Cantor set transformation |
cascade(samples, ...) |
Cascade transformation |
fracture(samples, ...) |
Fracture transformation |
tesselate(samples, ...) |
Tesselation transformation |
Playback/Time Manipulation
| Function | Description |
|---|---|
zigzag(samples, times, ...) |
Alternating forward/backward playback through time points |
iterate(samples, repeats, ...) |
Repeat audio with pitch shift and gain decay variations |
stutter(samples, segment_ms, ...) |
Segment-based stuttering with silence inserts |
bounce(samples, bounces, ...) |
Bouncing ball effect with accelerating repeats |
drunk(samples, duration, ...) |
Random "drunk walk" navigation through audio |
loop(samples, start, length_ms, ...) |
Loop a section with crossfades and variations |
retime(samples, ratio, ...) |
Time-domain time stretch/compress (TDOLA) |
scramble(samples, mode, ...) |
Reorder wavesets (shuffle, reverse, by size/level) |
splinter(samples, start, ...) |
Fragmenting effect with shrinking repeats |
hover(samples, frequency, location, ...) |
Zigzag reading at specified frequency for hovering pitch effect |
constrict(samples, constriction) |
Shorten or remove silent sections |
phase_invert(samples) |
Invert phase (multiply all samples by -1) |
phase_stereo(samples, transfer) |
Enhance stereo separation via phase subtraction |
wrappage(samples, grain_size, density, ...) |
Granular texture with stereo spatial distribution |
Spatial Effects
| Function | Description |
|---|---|
spin(samples, rate, ...) |
Rotate audio around stereo field with optional doppler |
rotor(samples, pitch_rate, amp_rate, ...) |
Dual-rotation modulation (pitch + amplitude interference) |
flutter(samples, frequency, depth, ...) |
Spatial tremolo (loudness modulation alternating L/R) |
Extended Granular
| Function | Description |
|---|---|
grain_reorder(samples, mode, ...) |
Reorder detected grains (shuffle, reverse, rotate) |
grain_rerhythm(samples, factor, ...) |
Change timing/rhythm of grains |
grain_reverse(samples, ...) |
Reverse individual grains in place |
grain_timewarp(samples, factor, ...) |
Time-stretch/compress grain spacing |
grain_repitch(samples, semitones, ...) |
Pitch-shift grains with interpolation |
grain_position(samples, spread, ...) |
Reposition grains in stereo field |
grain_omit(samples, probability, ...) |
Probabilistically omit grains |
grain_duplicate(samples, count, ...) |
Duplicate grains with variations |
Pitch-Synchronous Operations (PSOW)
| Function | Description |
|---|---|
psow_stretch(samples, stretch_factor, ...) |
Time-stretch while preserving pitch (PSOLA) |
psow_grab(samples, time, duration, ...) |
Extract pitch-synchronous grains from position |
psow_dupl(samples, repeat_count, ...) |
Duplicate grains for time-stretching |
psow_interp(grain1, grain2, ...) |
Interpolate between two grains |
FOF Extraction and Synthesis (FOFEX)
| Function | Description |
|---|---|
fofex_extract(samples, time, ...) |
Extract single FOF (pitch-synchronous grain) at time |
fofex_extract_all(samples, ...) |
Extract all FOFs to uniform-length bank |
fofex_synth(fof_bank, duration, frequency, ...) |
Synthesize audio from FOFs at target pitch |
fofex_repitch(samples, pitch_shift, ...) |
Repitch audio with optional formant preservation |
Synthesis
| Function | Description |
|---|---|
synth_wave(waveform, frequency, ...) |
Generate waveforms (sine, square, saw, ramp, triangle) |
synth_noise(pink, amplitude, ...) |
Generate white or pink noise |
synth_click(tempo, beats_per_bar, ...) |
Generate click/metronome track |
synth_chord(midi_notes, ...) |
Synthesize chord from MIDI note list |
Utility Functions
| Function | Description |
|---|---|
gain_to_db(gain) |
Convert linear gain to decibels |
db_to_gain(db) |
Convert decibels to linear gain |
version() |
Get library version string |
Low-level Functions
These work with explicit Context and Buffer objects:
| Function | Description |
|---|---|
apply_gain(ctx, buf, gain, clip) |
Apply gain in-place |
apply_gain_db(ctx, buf, db, clip) |
Apply dB gain in-place |
apply_normalize(ctx, buf, target) |
Normalize in-place |
apply_normalize_db(ctx, buf, target_db) |
Normalize to dB in-place |
apply_phase_invert(ctx, buf) |
Invert phase in-place |
get_peak(ctx, buf) |
Get peak level and position |
Classes
Context- Processing context (holds error state)Buffer- Audio buffer with buffer protocol supportBuffer.create(frames, channels, sample_rate)- Create new buffer- Supports indexing, len(), and memoryview
Constants
Processing flags:
FLAG_NONE- No processing flagsFLAG_CLIP- Clip output to [-1.0, 1.0]
Waveform types (for synth_wave):
WAVE_SINE- Sine waveWAVE_SQUARE- Square waveWAVE_SAW- Sawtooth waveWAVE_RAMP- Ramp (reverse sawtooth) waveWAVE_TRIANGLE- Triangle wave
Scramble modes (for scramble):
SCRAMBLE_SHUFFLE- Random shuffleSCRAMBLE_REVERSE- Reverse orderSCRAMBLE_SIZE_UP- Sort by size (smallest first)SCRAMBLE_SIZE_DOWN- Sort by size (largest first)SCRAMBLE_LEVEL_UP- Sort by level (quietest first)SCRAMBLE_LEVEL_DOWN- Sort by level (loudest first)
Exceptions
CDPError- Raised on processing errors
Architecture
Python cycdp (high-level API)
|
Cython _core.pyx (zero-copy buffer protocol)
|
+-------------+-------------+
| |
C libcdp cdp_lib
(reimplemented (shim-wrapped CDP8
algorithms) algorithms)
| |
+------ cdp_shim / cdp_io_redirect ------+
(intercept sfsys I/O,
redirect to memory buffers)
|
CDP8 sources
(FFT, spectral core)
libcdp (projects/libcdp/src/) -- Core C library that reimplements CDP operations (buffer management, gain, channel ops, mixing, spatial, file I/O, utilities) to work directly on memory buffers.
cdp_lib (projects/libcdp/cdp_lib/) -- Wrapper modules that call into original CDP8 algorithm code. Each category (spectral, granular, morph, distortion, etc.) has its own .c/.h pair. These rely on the shim layer to function without file I/O.
cdp_shim / cdp_io_redirect (projects/libcdp/cdp_lib/cdp_shim.*, cdp_io_redirect.*) -- Intercept CDP's sfsys file operations (sndopenEx, fgetfbufEx, fputfbufEx, sndseekEx, etc.) and redirect them to memory buffers. This allows original CDP algorithms to run in-process without touching the filesystem, handling single and multi-input scenarios (e.g. morph, cross-synthesis) via slot-based buffer registration.
CDP8 sources (projects/cpd8/dev/) -- Upstream CDP8 code (FFT routines, spectral processing core, header definitions) compiled in and accessed through the shim layer.
Directory layout
cycdp/
src/cycdp/
__init__.py # Public exports
__main__.py # Entry point for python3 -m cycdp
cli.py # CLI: registry, parser, handlers
_core.pyx # Cython bindings
_core.pyi # Type stubs
cdp_lib.pxd # Cython declarations for C layer
projects/
libcdp/
include/
cdp.h # Public C API
cdp_error.h # Error codes
cdp_types.h # Type definitions
src/ # Reimplemented core (buffer, gain, channel, ...)
cdp_lib/
cdp_lib.h/.c # Main library entry point
cdp_shim.h/.c # Shim: sfsys replacement functions
cdp_io_redirect.h/.c # I/O redirect: slot-based buffer routing
cdp_spectral.h/.c # Spectral processing wrappers
cdp_granular.h/.c # Granular synthesis wrappers
cdp_morph.h/.c # Morphing wrappers
cdp_distort.h/.c # Distortion wrappers
cdp_*.h/.c # Other category wrappers
cpd8/dev/ # Upstream CDP8 sources (FFT, includes)
tests/ # Python tests
demos/ # Example scripts
CMakeLists.txt # Builds extension
Demos
The demos/ directory contains example scripts demonstrating cycdp usage.
Run All Demos
make demos # Run all demos, output WAV files to build/
make demos-clean # Remove generated WAV files
Synthesis Demos (01-07)
These generate test sounds programmatically and demonstrate the API:
python demos/01_basic_operations.py # Buffers, gain, fades, panning, mixing
python demos/02_effects_and_processing.py # Delay, reverb, modulation, filters
python demos/03_spectral_processing.py # Blur, time stretch, pitch shift, freeze
python demos/04_granular_synthesis.py # Brassage, wrappage, grain ops
python demos/05_pitch_synchronous.py # PSOW, FOF, hover
python demos/06_creative_techniques.py # Effect chains, recipes
python demos/07_morphing.py # Morph, glide, cross-synthesis
FX Processing Demos (fx01-fx07)
CLI tools for processing real audio files:
# Basic usage
python demos/fx01_time_and_pitch.py input.wav -o output_dir/
# All FX demos:
python demos/fx01_time_and_pitch.py input.wav # Time stretch, pitch shift
python demos/fx02_spectral_effects.py input.wav # Blur, focus, fold, freeze
python demos/fx03_granular.py input.wav # Brassage, wrappage, grains
python demos/fx04_reverb_delay_mod.py input.wav # Reverb, delay, modulation
python demos/fx05_distortion_dynamics.py input.wav # Distortion, filters, dynamics
python demos/fx06_psow_fof.py input.wav # PSOW, FOF, hover
python demos/fx07_creative_chains.py input.wav # Complex effect chains
Each FX demo generates multiple output files showcasing different parameter settings.
Development
# Build
make build
# Run tests
make test
# Lint and format
make lint
make format
# Type check
make typecheck
# Full QA
make qa
# Build wheel
make wheel
# See all targets
make help
Adding New Operations
To add more CDP operations:
- Add C implementation to
projects/libcdp/cdp_lib/<operation>.c - Add function declarations to appropriate header in
projects/libcdp/cdp_lib/ - Export from
projects/libcdp/cdp_lib/cdp_lib.h - Update
CMakeLists.txtto include new source file - Add Cython declarations to
src/cycdp/cdp_lib.pxd - Add Cython bindings to
src/cycdp/_core.pyx - Export from
src/cycdp/__init__.py - Add tests to
tests/
License
LGPL-2.1-or-later (same as CDP)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cycdp-0.1.2.tar.gz.
File metadata
- Download URL: cycdp-0.1.2.tar.gz
- Upload date:
- Size: 5.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7265b4f11bb4741edd29478628c4663c1b15aedb627d7142c9d94b3c5d4ecd3c
|
|
| MD5 |
57390298e4a10fc3b3861a54bd7d3038
|
|
| BLAKE2b-256 |
f0376a0d2655b4ebeec895b2056cca8717754a548221436b9ca36a26f1f990ff
|
File details
Details for the file cycdp-0.1.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 534.5 kB
- Tags: CPython 3.14, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b721598ffa4bf7379d067ce000b9bba2f56c2e1222d3c848775dc61a7fcbeb2
|
|
| MD5 |
aa25b1657c038a2e97a0d81d9c470bd4
|
|
| BLAKE2b-256 |
3b15fb10db18ef6cbd80d4365aedf968717e8a949a39c56ba986fdf83daeb69e
|
File details
Details for the file cycdp-0.1.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 510.3 kB
- Tags: CPython 3.14, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72ccf4d9c09fbfbc280f1fbd6ee12d2a7d2a2b90b536e22db31689fc6d71a802
|
|
| MD5 |
4a7c178c0fc77fc15a2747d158681f46
|
|
| BLAKE2b-256 |
5750b2089e0a59806ad27f6754728c9d46103a98256ed3c765915bdc408aeb76
|
File details
Details for the file cycdp-0.1.2-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 399.7 kB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cee39d5a23f6385c65aa28904e9e6d06f882a1f3554091677c6b1d362aeb723a
|
|
| MD5 |
fc134605d8db6c2124975bc095fee92f
|
|
| BLAKE2b-256 |
339586322afea173f2fe6789a0e025055a864189b7bc5bac27449ffef39d3e07
|
File details
Details for the file cycdp-0.1.2-cp314-cp314-macosx_10_15_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp314-cp314-macosx_10_15_x86_64.whl
- Upload date:
- Size: 460.9 kB
- Tags: CPython 3.14, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
461b9facd60d5ddf3ca60dca578f342204685334486c1d8c24ae7025c94305e4
|
|
| MD5 |
fb97293dc122282eb6993c745bd72ae4
|
|
| BLAKE2b-256 |
03bd55c522d2b87bf60e290fd270ff68627998a42a0d9dcb9a1628c804fe60e1
|
File details
Details for the file cycdp-0.1.2-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 429.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8091e8f25ee3136cd810b8dc6abd057f6d076dce86097de0f295cd0b901cf046
|
|
| MD5 |
6e46fe22741dece6c9da5f403bca5bd6
|
|
| BLAKE2b-256 |
0a2cf138fd6782d9d7f0c6d2896d1fdfd6cfcaaddab73518edf908c7f28c7e61
|
File details
Details for the file cycdp-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 532.4 kB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eec8fe1dbf509c9e7a115a16c3124300f233d5096518f22ba22dc9c407351043
|
|
| MD5 |
af03d831023e66a093435f487bb0d87e
|
|
| BLAKE2b-256 |
7a54f726b409c6035952dbed68b602a1ac78aae520002a8d7777cbf532bc30b5
|
File details
Details for the file cycdp-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 503.4 kB
- Tags: CPython 3.13, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
964e400947d4825cec198fac1fb5b775bc15faea117dac925fb7a81d42f36859
|
|
| MD5 |
e56d8667cb0fb9a7bb2548678001d341
|
|
| BLAKE2b-256 |
f0e546740042a2daf070ec4e4c94761656a7cb4c6ff1938f1371692e5291b7cc
|
File details
Details for the file cycdp-0.1.2-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 397.5 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbcea6e0d569674652420f85c12f1eebdfec265d0d059bc0d38eed66b9e55f33
|
|
| MD5 |
77dde2a5ce69e67eedd146b9e65bd269
|
|
| BLAKE2b-256 |
871437a366e9f762fa0b931a1e15c506876bd433c70565d62e6170c8774fa0cc
|
File details
Details for the file cycdp-0.1.2-cp313-cp313-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp313-cp313-macosx_10_13_x86_64.whl
- Upload date:
- Size: 459.6 kB
- Tags: CPython 3.13, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e49af9bb7a2ff75bc2753a9bcaa64886d09764aa46c4616b7e5cbaae5fd2a8bb
|
|
| MD5 |
46e0cc92f1c61f7dce2d5aa7c6939119
|
|
| BLAKE2b-256 |
4475b23023be7b18c44b84ae82b4798adbf18a4d23207e4dc6f2611e6b653e73
|
File details
Details for the file cycdp-0.1.2-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 429.6 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec52e6628e581d6287ae36c2494277e5e690314527606f5be46ad9574a9c0abd
|
|
| MD5 |
dbfe725ffc8fa2b144c80dc03946ea47
|
|
| BLAKE2b-256 |
22dc8263a4fd14d46ee92ac73ef6a01ba70cbcf588b1fededd73f3b7cdc38710
|
File details
Details for the file cycdp-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 534.0 kB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e559cb31a9de7573e7130954d79ce33c074fbb0b12917da9b6ce69d39d5ce2d
|
|
| MD5 |
59e3f613cf9d43230b88b13d304c0f9e
|
|
| BLAKE2b-256 |
8a16d2dce3d8d80f24571a8fff159c228abe48469813cba2220e39753c3d4083
|
File details
Details for the file cycdp-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 503.4 kB
- Tags: CPython 3.12, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8eac04617f5f860e34faa7b03f9906e9d23ed02897cc660305377d6e2220135
|
|
| MD5 |
a864754b9acaea502f403d9bdea0e0b2
|
|
| BLAKE2b-256 |
6b1405469109e300d4afb8177db6610ff4fe60e1eafdf22a9f4b12840ff51ffd
|
File details
Details for the file cycdp-0.1.2-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 398.3 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da0c292176889a1bbfb6b9f475e005f1bd0c84e8022092c6eadfcd517c15a2dc
|
|
| MD5 |
deddbe526364c9403a1c36e13d13a1ec
|
|
| BLAKE2b-256 |
81ea9b94dcce68000e03105c3b358d4cbf168ba79828c638a358a910e3791537
|
File details
Details for the file cycdp-0.1.2-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 460.3 kB
- Tags: CPython 3.12, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99cbc0699acf4e529fdd036c8c2d9d15dc2b47611cba42244c8ba0e8afd6acde
|
|
| MD5 |
511f8076e0a136219d369cce5a5cc211
|
|
| BLAKE2b-256 |
5375982ba883f3799d075be0dfc4c5445e90863c83bb1f0eea595fc3c1675a20
|
File details
Details for the file cycdp-0.1.2-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 455.5 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4668277de4983cb5391162be3c8e45f52fab09bc31e460c4a5009c66bf3e6bec
|
|
| MD5 |
e179ae20046b99714df23b5abaf227a7
|
|
| BLAKE2b-256 |
56160568131640199625d80e74e5c5a0c37aa338a743cf3c4a0fba6588cc5781
|
File details
Details for the file cycdp-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 548.2 kB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac317bc67d0f60894cf0b93578ba1cfe549cbf747609a228089b7e9e867f62ef
|
|
| MD5 |
8210d14f5c81c6b3771d2ab80e4530cd
|
|
| BLAKE2b-256 |
ef97412d62f24cf72517df8a9d3cb874ea13b3b0e3055de9a3546c5ca103e489
|
File details
Details for the file cycdp-0.1.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 525.7 kB
- Tags: CPython 3.11, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3800605bf4e01e9b906993c0afa2c90de124a6b7c4c535d64d3402a34d4a40e
|
|
| MD5 |
7f278350397a8dcbad2da3f92c0714b8
|
|
| BLAKE2b-256 |
b21ac90eb53cca7b2de3b9fa13e6d8e08f66e8002bacc41b2d1bbf7e70d40805
|
File details
Details for the file cycdp-0.1.2-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 398.1 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76f816d33e5ae6f9dc51aa245ff5dee3ad1c240ca5f75082644d6eaa6e2591b9
|
|
| MD5 |
b2a94cce7fd9674232ffec544cc04f71
|
|
| BLAKE2b-256 |
b20c997457372f22d1bedbb0f1ebb5d8d650be07648de121da9a1255c53f3bd2
|
File details
Details for the file cycdp-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 454.5 kB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8eedbf426c8232ac28689ad3f5e4939d9765bc3074c6d28c94091bc491b6ea8e
|
|
| MD5 |
f09f5c9e4c47506ff516f80a9bd9c50d
|
|
| BLAKE2b-256 |
ba2162027fb401484ad87398bdb7cc14d3b2065ecef4261af8c80a55a005659c
|
File details
Details for the file cycdp-0.1.2-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 455.9 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c625ee38b93a8c01849841b350da4cf0de4ce90b9c54221265db954d5644c7ed
|
|
| MD5 |
86f7299331eef7cd3a5a893d52a65c84
|
|
| BLAKE2b-256 |
44b0655528f0dd4d9f157359b043a9171602671ee30ad19df839996c0c9d0d86
|
File details
Details for the file cycdp-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 550.7 kB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb69c6f96d194e8b290b65d3d27e420e1d48c7a62f5bac96634af67dc12e70f0
|
|
| MD5 |
afe66f3730d7f291fe94597bbef28230
|
|
| BLAKE2b-256 |
59cc94bb2dfb906aad8835c5e9c160235f320036ec8751a7b2214db03b683544
|
File details
Details for the file cycdp-0.1.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 525.5 kB
- Tags: CPython 3.10, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89ade36ef913a20ebd171069088d4e058e3790524e962d922fdb5211093b66f5
|
|
| MD5 |
d47461e89f6c46a0e671e05b2cd3edcb
|
|
| BLAKE2b-256 |
6eae5b31eb94a23aa7e769b67e7250639e8bde95ea957d086c9ef3246966c65e
|
File details
Details for the file cycdp-0.1.2-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 398.0 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82d8ca32f33dcc0a154894e14b480aae96b91e152d4a33c7ce039a7e7b26fb5b
|
|
| MD5 |
b3013a69fe594379c14da00b566c8cc5
|
|
| BLAKE2b-256 |
2ffdd1f7e34f08941772dbbf6d9a992a357cd9d37eae2e2bf9d791a2b277549a
|
File details
Details for the file cycdp-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cycdp-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 454.2 kB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f2feed0e23799b18af37b657fe2a37f3110b4954530114f44cdcb3475fbba74
|
|
| MD5 |
cae4f74f04471e228663f40594ec5cfa
|
|
| BLAKE2b-256 |
4a27953d394d6b565b3dfa1dd1b5d3ae926d67bee165f360a6f48b7c926e6f55
|