Skip to main content

A C++/Python library to manipulate sheet music data

Project description

🎵 Maialib - Music Analysis Library for Everyone

Maialib CI/CD PyPI version Python Versions License: GPL v3 Downloads

Analyze and create musical scores using Python - designed for musicians, researchers, and composers.

Whether you're a music student analyzing Bach chorales, a composer generating algorithmic pieces, or a researcher studying harmonic patterns across centuries of music, Maialib makes working with musical scores as easy as a few lines of code.

import maialib as ml

# Create a middle C note
note = ml.Note("C#4")

# Print information about this note
print("Note Information:")
print(f"  Pitch: {note.getPitch()}")
print(f"  Pitch class: {note.getPitchClass()}")
print(f"  Pitch Step: {note.getPitchStep()}")
print(f"  Octave: {note.getOctave()}")
print(f"  Alter symbol: {note.getAlterSymbol()}" )
print(f"  Type (long name): {note.getLongType()}")
print(f"  Duration (unit: quarter notes): {note.getQuarterDuration()}")
print(f"  MIDI number: {note.getMidiNumber()}")
print(f"  Frequency: {note.getFrequency():.2f} Hz")
print(f"  Is note on: {note.isNoteOn()}")
print(f"  Is note off: {note.isNoteOff()}")
print(f"  Enharmonic Notes: {note.getEnharmonicNotes()}")
print(f"  Harmonic Spectrum (first 3 partials): {note.getHarmonicSpectrum(numPartials=3, partialsDecayExpRate=0.5)}")

Output

Note Information:
  Pitch: C#4
  Pitch class: C#
  Pitch Step: C
  Octave: 4
  Alter symbol: #
  Type (long name): quarter
  Duration (unit: quarter notes): 1.0
  MIDI number: 61
  Frequency: 277.18 Hz
  Is note on: True
  Is note off: False
  Ehnarmonic Notes: [<Note Db4>, <Note Bx3>]
  Harmonic Spectrum (first 3 partials): ([277.1826171875, 554.365234375, 831.5478515625], [1.0, 0.5, 0.25])

No music software required. No complex APIs. Just simple, powerful Python.


📑 Table of Contents


✨ Why Maialib?

Built for Musicians Who Code (or Want to Learn)

  • 🎹 Musician-Friendly: Designed with music theory terminology, not just technical jargon
  • ⚡ Lightning Fast: C++17 core engine with Python interface - get professional performance without complexity
  • 📊 Data Science Ready: Export to pandas DataFrames for statistical analysis
  • 🎨 Visualization Built-in: Generate piano rolls, pitch envelopes, and dissonance curves
  • 📝 MusicXML Native: Read and write standard notation files from MuseScore, Finale, Sibelius
  • 🔬 Research-Grade: Used in musicology research and composition studies
  • 🎓 Academic Foundation: Developed as part of doctoral research at UNICAMP (State University of Campinas)

Perfect For:

Music Students - Analyze scores for theory assignments and research projects
Composers - Generate algorithmic compositions and explore musical patterns
Musicologists - Perform computational analysis on large musical corpora
Music Teachers - Create customized teaching examples and exercises
Arrangers - Batch transpose scores for different instruments
Performers - Extract sections and practice specific passages
Researchers - Conduct quantitative musicology studies

Key Features

  • Full MusicXML Support: Read and write .xml, .mxl, and .musicxml files
  • High Performance: C++17 core engine for fast computation on large musical corpora
  • Built-in Visualizations: Piano rolls, pitch envelopes, chord analysis, and dissonance curves
  • Advanced Chord Analysis: Identify qualities, analyze complexity, and calculate harmonic density
  • Dissonance Models: Psychoacoustic dissonance calculation using the Sethares model
  • DataFrame Export: Seamless integration with pandas for statistical analysis
  • Beginner-Friendly: Simple API designed for musicians without extensive programming experience
  • Comprehensive Documentation: Interactive tutorials, examples, and complete API reference
  • Cross-Platform: Works on Windows, Linux, and macOS with Python 3.8-3.14

Academic Background

Maialib was developed as part of the doctoral thesis:

"maialib: A programming library for computer-aided music analysis and composition with applications on models of dissonance"

  • Author: Nycholas Maia
  • Institution: UNICAMP (Universidade Estadual de Campinas)
  • Defense Date: November 25, 2022
  • Research Focus: Computational musicology, dissonance models, and algorithmic composition

🔧 Installation

Prerequisites

  • Python 3.8 or newer (Download here)
  • Basic command line familiarity (we'll guide you!)

Install in 30 Seconds

Open your terminal (or Command Prompt on Windows) and run:

pip install maialib

Upgrading from an older version?

pip install maialib --upgrade

Verify Installation

import maialib as ml
print(ml.__version__)

If you see a version number, you're ready to go! 🎉

🛠️ Troubleshooting Installation Issues

"pip: command not found"

  • Make sure Python is in your system PATH
  • Try python -m pip install maialib or python3 -m pip install maialib

"ModuleNotFoundError: No module named 'maialib'"

  • Verify installation with pip list | grep maialib
  • Make sure you're using the same Python environment

Still having issues?


🚀 Quick Start

Your First Musical Analysis in 5 Minutes

Maialib includes example scores so you can start immediately - no need to find files!

import maialib as ml

# Load one of the included Bach examples
sampleScore = ml.SampleScore.Bach_Cello_Suite_1
sampleScorePath = ml.getSampleScorePath(sampleScore)
score = ml.Score(sampleScorePath)

# Get basic score information
print(f"Title: {score.getTitle()}")
print(f"Composer: {score.getComposerName()}")
print(f"Number of measures: {score.getNumMeasures()}")
print(f"Number of notes: {score.getNumNotes()}")

# Extract all notes as a pandas DataFrame
df = score.toDataFrame()
print("\nFirst 5 notes:")
print(df.head())

# Count notes by pitch class
pitch_distribution = df['Note'].value_counts()
print("\nPitch class distribution:")
print(pitch_distribution)

Output:

Title: Cello Suite No. 1
Composer: Johann Sebastian Bach
Number of measures: 220
Number of notes: 2293

First 5 notes:
                 Part      Measure       Note
0  <Part Violoncello>  <Measure 0>  <Note G2>
1  <Part Violoncello>  <Measure 0>  <Note D3>
2  <Part Violoncello>  <Measure 0>  <Note B3>
3  <Part Violoncello>  <Measure 0>  <Note A3>
4  <Part Violoncello>  <Measure 0>  <Note B3>

Pitch class distribution:
Note
<Note A3>     241
<Note G3>     184
<Note F#3>    169
<Note D3>     156
<Note B3>     154
             ...
<Note Eb2>      1
<Note Bb2>      1
<Note Ab3>      1
<Note Eb4>      1
<Note D4>       1
Name: count, Length: 99, dtype: int64

Visualize Your Score

# Load one of the included Bach examples
sampleScore = ml.SampleScore.Bach_Cello_Suite_1
sampleScorePath = ml.getSampleScorePath(sampleScore)
score = ml.Score(sampleScorePath)

# Generate a piano roll visualization
fig1, df1 = ml.plotPianoRoll(score, measureStart=1, measureEnd=16)
fig1.show()

# Plot pitch envelope over time
fig2, df2 = ml.plotScorePitchEnvelope(score, measureStart=1, measureEnd=16)
fig2.show()

💡 Examples Gallery

Example 1: Get all music chords as a table

import maialib as ml

# Load one of the included Chopin examples
sampleScore = ml.SampleScore.Chopin_Fantasie_Impromptu
sampleScorePath = ml.getSampleScorePath(sampleScore)
score = ml.Score(sampleScorePath)

# Extract chord data as a pandas DataFrame
chords = score.getChordsDataFrame()
print(chords)

Output

      measure  floatMeasure      key                                   chord  \
0           1      1.000000  <Key E>                      <Chord [G#2, G#3]>
1           2      2.000000  <Key E>                      <Chord [G#2, G#3]>
2           3      3.000000  <Key E>                      <Chord [C#2, C#3]>
3           3      3.083333  <Key E>                           <Chord [G#3]>
4           3      3.166667  <Key E>                           <Chord [G#3]>
...       ...           ...      ...                                     ...
1746      101    101.812500  <Key E>                 <Chord [G#1, G#2, C#4]>
1747      101    101.875000  <Key E>                 <Chord [G#1, G#2, G#4]>
1748      101    101.937500  <Key E>                 <Chord [G#1, G#2, F#3]>
1749      102    102.000000  <Key E>  <Chord [C#2, G#2, F#3, G#3, B#3, D#4]>
1750      103    103.000000  <Key E>       <Chord [C#2, G#2, E#3, G#3, C#4]>

      isHomophonic
0             True
1             True
2             True
3             True
4            False
...            ...
1746         False
1747         False
1748         False
1749          True
1750          True

[1751 rows x 5 columns]

Example 2: Analyze Melodic Intervals

# Load Beethoven's Symphony No. 5 score
score = ml.Score(ml.getSampleScorePath(ml.SampleScore.Beethoven_Symphony_5th))

# Analyze melodic intervals in the first measure of the first violin part
firstMeasure = score.getPart('Violins 1').getMeasure(0) # First violin part
firstMeasureNumNotes = firstMeasure.getNumNotes()

# Collect notes in the first measure
notes = []
for i in range(firstMeasureNumNotes):
    note = firstMeasure.getNote(i)
    notes.append(note)

# Calculate and print melodic intervals
print("Melodic intervals in opening:")
for i in range(firstMeasureNumNotes - 1):
    if notes[i].isNoteOff() or notes[i+1].isNoteOff():
        continue
    interval = ml.Interval(notes[i], notes[i+1])
    print(f"{notes[i].getPitch()}{notes[i+1].getPitch()}: {interval.getName()} ({interval.getNumSemitones()} semitones)")

Output

Melodic intervals in opening:
G4 → G4: P1 (0 semitones)
G4 → G4: P1 (0 semitones)

Example 3: Find Melodic Patterns

# Load your Beethoven 5th Symphony score (or any other sheet music)
score = ml.Score('Beethoven_5th_symphony.xml')

# Define a pattern to search for (e.g., descending scale fragment)
pattern = [
    ml.Note("G4"),
    ml.Note("F4"),
    ml.Note("E4"),
    ml.Note("D4")
]

# Find all occurrences
df_patterns = score.findMelodyPatternDataFrame(
    melodyPattern=pattern,
    totalIntervalsSimilarityThreshold=0.8,
    totalRhythmSimilarityThreshold=0.5
)

print(f"Found {len(df_patterns)} occurrences of the pattern")
print(df_patterns[['partName', 'measureId', 'transposeInterval', 'totalSimilarity']])

Output

Found 6 occurrences of the pattern
    partName  measureId transposeInterval  totalSimilarity
0  Violins 1        406            m3 asc              1.0
1  Violins 1        409            m7 asc              1.0
2  Violins 2        406            m3 asc              1.0
3  Violins 2        409            m7 asc              1.0
4     Violas        166           M2 desc              1.0
5     Violas        460           M6 desc              1.0

Example 4: Statistical Harmonic Analysis

import pandas as pd
import maialib as ml

score = ml.Score('Beethoven_Symphony_5.xml')

chords = score.getChords()

# Analyze chord quality distribution
chord_qualities = []
for _, _, _, chord, _ in chords:
    if chord.isMajorChord():
        chord_qualities.append('Major')
    elif chord.isMinorChord():
        chord_qualities.append('Minor')
    elif chord.isDiminishedChord():
        chord_qualities.append('Diminished')
    elif chord.isAugmentedChord():
        chord_qualities.append('Augmented')
    else:
        chord_qualities.append('Other')

# Create distribution
df = pd.DataFrame({'Quality': chord_qualities})
distribution = df['Quality'].value_counts(normalize=True) * 100

print("Chord quality distribution:")
print(distribution)

Output

Chord quality distribution:
Quality
Other         40.218878
Major         30.711354
Minor         22.229822
Diminished     6.703146
Augmented      0.136799
Name: proportion, dtype: float64

Example 5: Dissonance Analysis

# Calculate psychoacoustic dissonance using Sethares model
score = ml.Score('my_score.xml')
chords = score.getChords()

dissonance_values = []
for _, _, _, chord, _ in chords:
    # Calculate Sethares dissonance value
    chordDissonance = chord.getSetharesDissonance(numPartialsPerNote=6)
    dissonance_values.append(chordDissonance)

print(dissonance_values)

Output

[1.1458631753921509, 1.1458631753921509, 1.1458631753921509, 1.233114242553711, 0.9513687491416931,...]

🎹 What Can You Analyze?

Maialib provides comprehensive tools for musical analysis:

🎼 Score Analysis

  • Load MusicXML files (.xml, .mxl, .musicxml)
  • Extract parts, measures, notes, and chords
  • Access key signatures, time signatures, and tempo markings
  • Export to pandas DataFrames for data science workflows

🎵 Melodic Analysis

  • Find melodic patterns and motifs
  • Calculate intervallic contours
  • Analyze pitch distributions and ranges
  • Compute melodic similarity metrics

🎶 Harmonic Analysis

  • Extract vertical chord structures
  • Identify chord qualities (major, minor, diminished, augmented)
  • Analyze harmonic complexity and density
  • Calculate psychoacoustic dissonance (Sethares model)
  • Track chord progressions

🎹 Rhythmic Analysis

  • Extract rhythmic patterns
  • Analyze duration distributions
  • Calculate rhythmic similarity
  • Study metric structures

🎨 Visualization

  • Piano rolls with customizable colors
  • Pitch envelope graphs
  • Chord analysis heatmaps
  • Dissonance curves
  • Statistical distribution plots

⚙️ Score Manipulation

  • Transpose to any key
  • Extract specific sections
  • Modify notes, chords, and measures
  • Export modified scores to MusicXML

📊 Statistical Tools

  • Convert scores to DataFrames
  • Aggregate data across multiple scores
  • Perform corpus-wide analysis
  • Export data for R, MATLAB, or other tools

📚 Documentation

For Musicians & Researchers

🎓 Interactive Tutorials - Learn by doing with Jupyter notebooks:

📖 Full Tutorial Collection: Browse all tutorials

🌐 API Reference: Complete documentation

For Developers

🛠️ Build from Source: See BUILDING.md for C++ compilation instructions

💻 C++ API Documentation: Developer docs

🤝 Contributing: See CONTRIBUTING.md for contribution guidelines


🎼 Included Example Scores

Maialib includes 7 classical works so you can start exploring immediately:

  • Bach - Cello Suite No. 1 (Bach_Cello_Suite_1.mxl)
  • Bach - Prelude No. 1 in C Major, BWV 846 (Bach_Prelude_1_BWV_846.xml)
  • Beethoven - String Quartet Op. 133 (Beethoven_quartet_133.xml)
  • Beethoven - Symphony No. 5, Movement 1 (Beethoven_Symphony_5_mov_1.xml)
  • Chopin - Fantaisie-Impromptu Op. 66 (Chopin_Fantasie_Impromptu.mxl)
  • Dvořák - Symphony No. 9 "New World", Movement 4 (Dvorak_Symphony_9_mov_4.xml)
  • Mahler - Symphony No. 1 "Titan", Movement 1 (Mahler_Symphony_1_mov_1.mxl)
  • Mozart - Requiem, Introitus (Mozart_Requiem_Introitus.mxl)
  • Strauss - The Blue Danube Waltz (Strauss_Blue_Danube.mxl)

Try them now:

import maialib as ml
sampleScorePath = ml.getSampleScorePath(ml.SampleScore.Beethoven_Symphony_5th)
score = ml.Score(sampleScorePath)

❓ FAQ

What is MusicXML?

MusicXML is the standard file format for sheet music, like .docx for documents or .pdf for portable documents. It contains all musical information: notes, rhythms, dynamics, articulations, and layout. Most notation software (MuseScore, Finale, Sibelius) can export to MusicXML.

Where can I find MusicXML files?

Many sources offer free MusicXML downloads:

  • MuseScore.com - Largest free sheet music library
  • IMSLP - Public domain classical music
  • MusicXML.com - Sample files
  • Export from your own notation software

What if I don't have a MusicXML file?

You have several options:

  1. Convert from MIDI: Import MIDI files into MuseScore (free) and export as MusicXML
  2. Scan PDF scores: Use OMR (Optical Music Recognition) software:
  3. Use included examples: Maialib comes with 7 classical works ready to analyze!

Do I need programming experience?

Beginner-friendly: If you've never programmed before, start with our interactive tutorials. Basic Python knowledge helps, but you can learn as you go. Most common tasks require just 3-5 lines of code.

Intermediate users: If you know Python basics, you'll be productive immediately.

Advanced users: Full C++ source code available for custom extensions.

Can I use Maialib for commercial projects?

Yes! Maialib is licensed under GPL-3.0, which allows commercial use. However:

  • ✅ You can use Maialib in commercial research, analysis, or composition
  • ✅ You can sell music created or analyzed with Maialib
  • ⚠️ If you distribute software that uses Maialib, you must also license it under GPL-3.0
  • 📖 See license details below

How do I cite Maialib in my research?

@software{maialib2024,
  author = {Maia, Nycholas},
  title = {Maialib: Music Analysis Library},
  year = {2024},
  url = {https://github.com/nyckmaia/maialib},
  version = {1.0}
}

Text citation: "Analysis performed using Maialib (Maia, 2024), a Python library for computational musicology."

Does Maialib work with MIDI files?

Not directly. Maialib is designed for MusicXML, which contains more musical information than MIDI (articulations, dynamics, score layout). However, you can:

  1. Convert MIDI → MusicXML using MuseScore
  2. Load the MusicXML file into Maialib
  3. Export back to MIDI if needed

How is this different from notation software like MuseScore or Finale?

Notation Software (MuseScore, Finale, Sibelius):

  • Visual editing of scores
  • Playback and engraving
  • Manual analysis

Maialib:

  • Programmatic analysis at scale
  • Statistical and computational musicology
  • Batch processing hundreds of scores
  • Algorithmic composition
  • Integration with data science tools

Use both together! Edit scores in MuseScore, analyze them with Maialib.

What Python version do I need?

Maialib supports Python 3.8 through 3.14. Check your version:

python --version

Can I contribute to Maialib?

Absolutely! We welcome:

  • 🐛 Bug reports and fixes
  • ✨ Feature requests and implementations
  • 📚 Documentation improvements
  • 🌍 Translation help
  • 🎵 Example scores and tutorials

See CONTRIBUTING.md to get started.

Is there a community?

Yes! Connect with other Maialib users:


🤝 Community & Support

Get Help

Share Your Work

Built something cool with Maialib? We'd love to hear about it!

  • Share in GitHub Discussions
  • Tag #maialib on social media
  • Submit your project to our showcase

🌟 Contributing

We welcome contributions from musicians, programmers, and researchers!

Ways to contribute:

  • 🐛 Report bugs or suggest features in Issues
  • 📝 Improve documentation or tutorials
  • 🎵 Share example scores or analysis notebooks
  • 💻 Submit code improvements via Pull Requests

Getting started:

  1. Fork the repository
  2. Make your improvements
  3. Submit a Pull Request

See CONTRIBUTING.md for detailed guidelines.


📖 Citation

If you use Maialib in your research, please cite:

@software{maialib2022,
  author = {Maia, Nycholas},
  title = {Maialib: Music Analysis Library for Computational Musicology},
  year = {2022},
  publisher = {GitHub},
  url = {https://github.com/nyckmaia/maialib},
  version = {1.10.0}
}

Text format:

Maia, N. (2022). Maialib: Music Analysis Library for Computational Musicology (Version 1.10.0) [Computer software]. https://github.com/nyckmaia/maialib


⚖️ License

Maialib is licensed under the GNU General Public License v3.0.

What this means in plain language:

You CAN:

  • Use Maialib for personal projects, research, and commercial work
  • Modify the source code
  • Distribute modified versions
  • Use it in academic publications

⚠️ You MUST:

  • Keep the same GPL-3.0 license if you distribute modified versions
  • Provide source code if you distribute software that includes Maialib
  • Give credit to the original authors

📚 For academic use: Simply cite Maialib in your publications (see Citation)

🎵 For creative work: Music you create or analyze with Maialib is yours - the license only applies to the software itself.

Questions about licensing? Contact us


📖 Glossary

Click to expand - Terms for non-programmers
  • API: Application Programming Interface - the set of functions and commands available in Maialib
  • DataFrame: A table-like data structure (like Excel spreadsheets) used for organizing and analyzing data
  • MusicXML: Standard file format for musical notation, readable by most music software
  • MIDI: Musical Instrument Digital Interface - a simpler music format focusing on performance data
  • Python Package: Pre-built software you install with one command (pip install)
  • pip: Python's package installer - the tool used to install Maialib
  • Transpose: Shift all notes up or down by a specific interval
  • Chord Quality: The type of chord (major, minor, diminished, augmented, etc.)
  • Pitch Class: The note name without octave (C, D, E, etc.)
  • Harmonic Analysis: Studying chords and their relationships in music
  • Melodic Contour: The shape of a melody (ascending, descending, etc.)
  • Dissonance: Musical tension or roughness between simultaneous notes

Made with ❤️ for musicians and researchers

⭐ Star us on GitHub | 🐛 Report Issues | 💬 Join Discussions

Project details


Download files

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

Source Distributions

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

Built Distributions

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

maialib-1.10.3-pp310-pypy310_pp73-win_amd64.whl (2.6 MB view details)

Uploaded PyPyWindows x86-64

maialib-1.10.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

maialib-1.10.3-pp39-pypy39_pp73-win_amd64.whl (2.6 MB view details)

Uploaded PyPyWindows x86-64

maialib-1.10.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

maialib-1.10.3-pp38-pypy38_pp73-win_amd64.whl (2.6 MB view details)

Uploaded PyPyWindows x86-64

maialib-1.10.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

maialib-1.10.3-cp312-cp312-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.12Windows x86-64

maialib-1.10.3-cp312-cp312-musllinux_1_2_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

maialib-1.10.3-cp312-cp312-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

maialib-1.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

maialib-1.10.3-cp312-cp312-macosx_10_15_universal2.whl (4.4 MB view details)

Uploaded CPython 3.12macOS 10.15+ universal2 (ARM64, x86-64)

maialib-1.10.3-cp311-cp311-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.11Windows x86-64

maialib-1.10.3-cp311-cp311-musllinux_1_2_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

maialib-1.10.3-cp311-cp311-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

maialib-1.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

maialib-1.10.3-cp311-cp311-macosx_10_15_universal2.whl (4.4 MB view details)

Uploaded CPython 3.11macOS 10.15+ universal2 (ARM64, x86-64)

maialib-1.10.3-cp310-cp310-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.10Windows x86-64

maialib-1.10.3-cp310-cp310-musllinux_1_2_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

maialib-1.10.3-cp310-cp310-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

maialib-1.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

maialib-1.10.3-cp310-cp310-macosx_10_15_universal2.whl (4.4 MB view details)

Uploaded CPython 3.10macOS 10.15+ universal2 (ARM64, x86-64)

maialib-1.10.3-cp39-cp39-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.9Windows x86-64

maialib-1.10.3-cp39-cp39-musllinux_1_2_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

maialib-1.10.3-cp39-cp39-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ i686

maialib-1.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

maialib-1.10.3-cp39-cp39-macosx_10_15_universal2.whl (4.4 MB view details)

Uploaded CPython 3.9macOS 10.15+ universal2 (ARM64, x86-64)

maialib-1.10.3-cp38-cp38-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.8Windows x86-64

maialib-1.10.3-cp38-cp38-musllinux_1_2_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

maialib-1.10.3-cp38-cp38-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ i686

maialib-1.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

maialib-1.10.3-cp38-cp38-macosx_10_15_universal2.whl (4.4 MB view details)

Uploaded CPython 3.8macOS 10.15+ universal2 (ARM64, x86-64)

File details

Details for the file maialib-1.10.3-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 e842a051e6c7f72f157bc856908b3ffc517218a1ea5e7c5c74e54ca4fb0dc975
MD5 008b87ee77c9d4dadb7ce506fe90325c
BLAKE2b-256 5c4c12ce8b02269efaa9cce310f40c10a880c96321d42598474bec899e2477f1

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c23258e5fe70d683c65dc1a26df89018d263dcf34dd44160384b103932a85d24
MD5 68affb1814b937b574eca187b5164a6b
BLAKE2b-256 b6ea16b88babedbe5152799c1aa81098f17be701eda32089a34f89cadf912de4

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 6978e259bb9c1aca4d5f68094a61d459520f32d8db0d3c262f553196ef34c338
MD5 8147e13b4c2742b357a3d0cd03e86704
BLAKE2b-256 a46d6021c26a17ea94d15a0d0b2399d773082fc412ff18b18775edc4e483f290

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bf15ac3fe2cc50af8f4cb2538ad266a3b2bf3182ab2749d5b484eba2bfbde689
MD5 37d25650c02e67d8fd257b8ff5c81ce7
BLAKE2b-256 43b5f5918fee09cb08b0dda540f933fa552d5325af201624ce66da22a8dea543

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-pp38-pypy38_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-pp38-pypy38_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 872fac8612891db4b1e3836f9937cd70a3aa93e503326bb09bf85aeccbec8926
MD5 467eb0e8bc43d468675aefffcc563d2e
BLAKE2b-256 a473ae31e360fb63ffc577fa758a785d4e2327fbf95b47907b4ed1caae09a03e

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 388ea06cf47bb03e42e942e31e51d7146ef1d5b1413e3815a15836eac023090b
MD5 b4fa2dec5fb2490b8890498426c32a8b
BLAKE2b-256 74c0ec0aec4ed43a04e24e343a0e0fa0ab36ac74489d8ada43ba47515433ef55

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: maialib-1.10.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for maialib-1.10.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 655e54061841d60e9dfec45cf1c4054d858f5c6b16b2d9ebda786005a4056481
MD5 5ed75b5b2362e841e1694788cd5b2913
BLAKE2b-256 5372b78590a40a7e29d42b31a710cb1a5b13429c73a0b19a861acc230ff4951f

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cac06feed692c54b19f212596890aa91a82717b36e73e17d802fe4ab2586ca1e
MD5 45cf7a911489085e5a94fdfd2b256ead
BLAKE2b-256 14eb5c807262752ff8fb1302498ab553166e593c30efdfa8f81fab462bb680bf

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 7692e54a7a56080b83ce87781ebcd37db322d12dbd85737d2920e0e89c5f7462
MD5 4d392fcb3ef2095212fe2403f7a1b22b
BLAKE2b-256 f8f41a74aff24be1e724ef05d341c49a4cec94c329ca229507573e75a7918bce

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 579a32be1fb8ee01ac86e5dda328f6c995a48bc181e2fd8a88de264609066067
MD5 c4c38f20440fd7bef64907cdbebde1f5
BLAKE2b-256 9fe0a5edbdf0623b676c5e2d187bed3d80f8eafb77b582d3ad3203f4109c7a1f

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp312-cp312-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp312-cp312-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 02600156fb6831aecfd7060783b441ae167dd25b4c285074d086101f8b8e1e5d
MD5 4bfb1564f11bd289e0c09978d7b15c5d
BLAKE2b-256 dc9b6212f6aa2b56e7683d8e9ffcdbe1db113ebca0813d06d73fb8f5ded21134

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: maialib-1.10.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for maialib-1.10.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 958862af9f35e3125d8de203e491db4c763c5612f272f54d971701a9e0b0ecdc
MD5 696f76513f5781ed2ac6b436e24bc4d5
BLAKE2b-256 89dd2ca175ed54fd5a3005d6b2a2be2535a07ea32d71f9de01d10991c33142ee

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ab7b7dc11170ce48e4cf9c970c589ad747c70aa9d575b8963ff6bd688b8cc32d
MD5 edaef850f4908424dab7b7ac1d28dcfa
BLAKE2b-256 e47d53aa3589a9a1a0a2a32038c14e2b6fb01e8bfd450a081955079eefc1f884

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 1977fbd85965ab070505a0a534fd2ebd71059068dd6860aea8483234b411cda6
MD5 587e5254ad9fd2e8ce5f30fb08df0d69
BLAKE2b-256 02ee3e45640ad01ec4d995ec75059e981c7a02d7a94b1bd8ca20be86b9890af9

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 643b837b301d575fa2356d1918f0416ac542091a43444b986a5ab14e2b4e9092
MD5 6c208d7856d3fa37db41de29af816d59
BLAKE2b-256 5246a4a2814bf12e6231b5708113ac4060158f5a77642cce8c3c643811298f09

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp311-cp311-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp311-cp311-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 15112efc909caa1008d10b08d7d2cde2a182b9a9cea22c093f698e25e2d3d63c
MD5 244fbae0dca96ed59d701a50ea28d9bb
BLAKE2b-256 7c0ff748a736ec0e7f09f5f8333df0d6ae07627da26dbed8b7644aef71fd541a

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: maialib-1.10.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for maialib-1.10.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 269746e6c69c143a5a9849ef668152e35d5377b1cf9150d95a63acc05dad6918
MD5 f78897b38c8be95935832e1f1cbc58c2
BLAKE2b-256 d6b6697e05295c33764d0b51270dc0d2f614bb7c2756becb81ca56005cf3f15d

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a5539f80c79768c85821cc2281bae48ac3beec69dcd08ac8ad3dca61a311e584
MD5 6b667c0f7854700d17d9917869d8c1ca
BLAKE2b-256 29943c4090d6c5d7ac8016e0e8090d437dbfc5db5721f9b28ceb186ecbe1650d

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 aee722116ac11bf936b656d1ba680f6535ce33f9f2180922565c241797a5f79c
MD5 5c23c8e77fb6401626e3bb33a486c22a
BLAKE2b-256 38a3141ec6097b7b69fe68d53265e1599be5f5e229a0d9ee3e10a4775433992b

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e1e036e711f304e50b98bb675facaa1870261e4beebad6a5dd6e9d1ee22f0ee3
MD5 de039534569b9df6a3952595c2dfbd8f
BLAKE2b-256 64e6404ef57b74bc26dbda71573a9ae3940a78b2cdc77a991f15efc2aacd28c3

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp310-cp310-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp310-cp310-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 d930fbef47682fe1e8d925993e34365ca6270aa2cfebe7e0c21c780f70af1c26
MD5 6fec578d05873084daa01b3f484c1708
BLAKE2b-256 ffeb9b6d443ba21346f6b38153a626e573c4e7f68fc645c9477231dff194b5eb

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: maialib-1.10.3-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for maialib-1.10.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8646818f76ff8b0b90fa5907476d7b384ff0c6b8292432e6b75961c5fac0d092
MD5 dd948ff6c7c1cc8308af028f68d3e240
BLAKE2b-256 0037bc85e84dafeac381d52ba1975cf8132790bad5664d80d80d9b7342113d03

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8608b7ee360171c0b88fee9d9812db99a5c3d0ca269de745e8f765232bffa8d6
MD5 296b3137a758fc927b73227223480685
BLAKE2b-256 1638179f4145cee6adbcecdb3661f0a7eec6873ca2d2cc8f2684f0c6b2a654cb

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp39-cp39-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 7b1c911a0702a6720b1272e2de577c153442e5a2ce578d094f3a1c91533482d6
MD5 38f3aea1928453f69d1c711d2b842f3a
BLAKE2b-256 8b58f3fa6aaca236e84e79785f7684fbf90814dfcf943ce7e861341f1c8d4086

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b117e347f05132e7617a53c3e8f448dde88ea65ea07cbd962c067125729e267b
MD5 5b6fadf4874c7e0fd83e451335d1e5a7
BLAKE2b-256 49c18ea381a3d92796af807f09ed902de416eb90021194d14eaea6c774aca90a

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp39-cp39-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp39-cp39-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 4670bd5b8c4be20e72b98d5b084ad74cee6893554624707a5549bdd44b2d65f4
MD5 22abf72524742b7df3e5f9d171a3749f
BLAKE2b-256 322ea6a1e824456514adaad8cfc2b513028ff63795da3fcda8a80fc8cddd54bb

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: maialib-1.10.3-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for maialib-1.10.3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 6e1dbd910376ecf531d84effedea0bab1c31e6eecc868beb337862d0ac1518ea
MD5 8e0312d1a5e1ff90745268a9f6dcc163
BLAKE2b-256 0ab9daf8fe9712b3389e750a5e7248190276bea922845240b89080d165f0f18e

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 aae5832a0dfe72f75ef0d1285d845894e3f545678c1a2b7b8141bd7178c1d9ee
MD5 42dc7f3fb7abeb391b1205d88f44dec6
BLAKE2b-256 c789bc51ab9c5a255089ccf8946f06f131e16fb66df75ef3fe4307c6299039e1

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp38-cp38-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 be9897d1f51f484d83b0986ffc55e3bcd938cfd2ad0a0f467594e6e73974acdf
MD5 7bde4e5169353fd3207a581f49d4da11
BLAKE2b-256 f996a2440399e6dc48bd7a614a28a0a28e8a5eba50cbcddc93e074e031dd85ee

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d1eb64b1ae49573d66591bf82a3b0616db0ce994072bb427fb04cd58157dba2
MD5 df343f855c74c123b2075e53eb0f8419
BLAKE2b-256 becded0dca350b79626d75338dadd0028258a4773191510738489ea50d40e958

See more details on using hashes here.

File details

Details for the file maialib-1.10.3-cp38-cp38-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for maialib-1.10.3-cp38-cp38-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 8ad6fb3036b335eb95779820db7c101988714f40c2a03ccf51b3ed7c74f48e60
MD5 8fd5aec302c97e9f41f2dab23fed4c6d
BLAKE2b-256 42f0a28223c2462365b0749f4d8afec95083c28001008e90351872a670c96ad5

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