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.2-pp310-pypy310_pp73-win_amd64.whl (2.6 MB view details)

Uploaded PyPyWindows x86-64

maialib-1.10.2-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.2-pp39-pypy39_pp73-win_amd64.whl (2.6 MB view details)

Uploaded PyPyWindows x86-64

maialib-1.10.2-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.2-pp38-pypy38_pp73-win_amd64.whl (2.6 MB view details)

Uploaded PyPyWindows x86-64

maialib-1.10.2-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.2-cp312-cp312-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.12Windows x86-64

maialib-1.10.2-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.2-cp312-cp312-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

maialib-1.10.2-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.2-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.2-cp311-cp311-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.11Windows x86-64

maialib-1.10.2-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.2-cp311-cp311-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

maialib-1.10.2-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.2-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.2-cp310-cp310-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.10Windows x86-64

maialib-1.10.2-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.2-cp310-cp310-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

maialib-1.10.2-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.2-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.2-cp39-cp39-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.9Windows x86-64

maialib-1.10.2-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.2-cp39-cp39-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ i686

maialib-1.10.2-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.2-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.2-cp38-cp38-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.8Windows x86-64

maialib-1.10.2-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.2-cp38-cp38-musllinux_1_2_i686.whl (4.3 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ i686

maialib-1.10.2-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.2-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.2-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for maialib-1.10.2-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 aaaeb6fc468d560b572d634bb38f5037c5e5ab5045af1e22fed18c140b045eca
MD5 a43d4c6f46583b1c03ea8f3518e60af7
BLAKE2b-256 44141d72e84155f19d6066d64217849541049a919707e2a0165c747da6d05d10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f919cb687b6cccf2d70959fac152f3d8a4a07fd60d5ac815cdda86cdfb0c016c
MD5 3a0aab2ad6d26144823344a6c00e2de0
BLAKE2b-256 c710f3e2bbcf5057b07b43785f7673cb4ecd8866118c9dc404974cf7cb40c85f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 176f2bb15315af43b3556dcfb8cb4e81422fcef8a271c0f810c3c6b2c30eb959
MD5 9dcd71961522aa27876bc4f1dcaab621
BLAKE2b-256 ebfd9d6d16583909bd041ecb84709ff34816561e6d1b1c31265dd093cec2ec00

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cc999e313e559f6c098a8463a98493ccb3dfc24562eb312b6391a918195e2268
MD5 d74ecbcc07e41acf9408a8fdc372afc3
BLAKE2b-256 4713ea0098f8a02ddce50724adb29309c13d0bea2b4218a954f55e4ae7b20f21

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-pp38-pypy38_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 c4955f9ef5397a957ac58e2c59fda7efea2a15487f353f34f26acf84517753a0
MD5 d60aaec76085f4f7e1d30dc20240222e
BLAKE2b-256 5ea2bed20c4b1279d1eac05120ab080b6294756020f071c5f9f03780b90c3c6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a0e38462d5436576b879b66ab7b06aeaebb3a10004e4e9d9d6a1a5008cb3909b
MD5 d4f9bb50072b480114c15ea302fec9d0
BLAKE2b-256 4db053d0c322a34385aea8368231bec4210ebf0792a746eb783d16729be66bf0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maialib-1.10.2-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.7

File hashes

Hashes for maialib-1.10.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c8af3224d95a825086569ecc6001ad25f2745f42fa82e3eb75941a00b6ecd3bb
MD5 0bbc24fb63463cd2fe445df82afa0807
BLAKE2b-256 02ee81264b86ae1fbd5a13e3a15e4557b0d9e07e12e349e84fd4f79cd88b7705

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c4bd61caa1d403848c6836044fec5243f96d82f9d9dbfaee183c13b0940919eb
MD5 1aa27cba72a23e14e31a5dc80e762f0b
BLAKE2b-256 b13f7a221576c028daeab6f52617b87f95305187493cfca21747949652e20e13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 308bf3bd5868f8522bd37e5ade4c9a3d9eae2165da60b729d6f76bbe682c6369
MD5 c8acc18ee3a836b23721fc7d5b1eed9e
BLAKE2b-256 908c036e1e3a7b7a85a8cea0c03518a63ca9d615d841ffcd4f0491104f7f0a8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 47e812d791f308ac33615d16e72c10ad697d6d36ad314b5322f112e9a36d252e
MD5 cd45c642fc5e57d34a76f3b9db5fa478
BLAKE2b-256 b5be3595a15d0748888649948334574c207dc723e2f8aa9e6fed3ecadb2cb909

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp312-cp312-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 6757a39f3d38c754286d194a945effd90d5f808736c20f18d89c3851da9167f7
MD5 0e81c991ee093d05fec192138e1db413
BLAKE2b-256 e58b82ab8457cbee312db850de25c97f6771ef39de5a534e8e68c10b4d4013a9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maialib-1.10.2-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.7

File hashes

Hashes for maialib-1.10.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1c24034c84a86e37b4b7681ab81b552cdf135cd55d746ad5ac2623ed229ef2ed
MD5 34c72a6fa8b41f55af412c744fde80f4
BLAKE2b-256 9ab3e79dae6aa5898159864aa57ed8d8fe8884ad23ab205ecb09d0c1022f6f0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 35476533af7f54ca670b6e72cdcec5886e7f7bd4ae5ee4279d6179761ba86c69
MD5 9e192965bef1a66b855f33a497cfa8ad
BLAKE2b-256 91ee3e1174af928bc4de08bdd7e158cb36ae9d46fe6104689c4879415799b1c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 20fddcea2687206fdfb03d36e45bb73d3db671e82e8184c677a5ffe7adb23759
MD5 b78ba7d4dda73e808cfd3174a4bb698e
BLAKE2b-256 094b896455df938ae70405ffef130fce0cdcc870ce0b73ac446b8def2fbbf1e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 525d997e334d3b32b69ba957aca85d338f0b43700eec9f636c1dc7c429a4a456
MD5 30b4ad53de32d5d2627eae8dc3490904
BLAKE2b-256 4d6732e8f510f58d48ba8be3e36fb523c9b84731c1fb43a657d976e994c73a10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp311-cp311-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 dc79b3c380928214528fb437fad26498213f0912049cbd724f93b01ac7c94a7f
MD5 cb945111d1cf2992b7b50d61db4ba7e7
BLAKE2b-256 7b94fba17e00a93b5297d10cb2146258cd7da4b1e3a4c4bb1bf1c7d2944bc00b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maialib-1.10.2-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.7

File hashes

Hashes for maialib-1.10.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 71ab09f5e8c7662240d795b1c7ae9067e0a6fd53260f8511f94b6edda62bbd9c
MD5 d383c6f72cdafd64522382ba973cccce
BLAKE2b-256 848e8ba2dc560f2dab94c7482dc09f911815c9e98104369650da816674e8586b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e2d981e398147fd6f4f5b5f63f21991e5d0bf11c552509248480d1d6e59ee61a
MD5 f3374c52bcb96653a8aeb84c7851b997
BLAKE2b-256 77b8266029b883b5c04491561a4a8f4fe1c5e0a50c05185cc905b851bd57d6b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 803fb9afed4cd8cc266f714367cc78ab739aae684fc42655d29a59ae050483e2
MD5 2318f455d3c6a371bc52245ce1658322
BLAKE2b-256 498f0d845381e911ee66e87b001a0f10fd1426955ec5e3810b1a9c09ef1c1dab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5852811e127642d7c0b2b4ce8d759c84fc1c8f5de3134527a592b07eb83252eb
MD5 930ad0bd68aacc81ec2034eecd488dc5
BLAKE2b-256 0a41bc8f031d087bd591f5ba289d10fd906932fe313551c708f1ad65c921ac02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp310-cp310-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 fe010f556788a65264aa1957cedf96d3ad4fa871d1ac097e3ec3eb42e076c3f7
MD5 18f9f363096d96ddce3f7651dafd77f8
BLAKE2b-256 c575db702e1f84c9d4d2ab1cec1243e9baa5ba9ce884ad4068526acd48dfa56c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maialib-1.10.2-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.7

File hashes

Hashes for maialib-1.10.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1e47ffbf472dc55757d5a59be1a1c90c7770aae37a0b492af1615333047b5560
MD5 f29ec6d12131e1d4dec71d3f895ae0fc
BLAKE2b-256 59c5bd0f874ce921b4728d8c0f2c54b9078f379164f6f6d41223b22827266699

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 95cfb7c4b081c2dfa8537e68bc1f0f6dc08adcd776d9b5dc4be376e339a00134
MD5 19cbd95587aed6abb5f2d71b8e86ab0c
BLAKE2b-256 5f5a0a51b333157183b7cb18947b713426f2b6a8fcea56fa7b3dbdaf0ebd6181

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 ca96eaed22051fc8a16fc9d63c4adb400f02caaa99a668e6dd4d2b85fc18ff36
MD5 6c8c4cb4bece6bf5b53f40f030bd23cf
BLAKE2b-256 18ef83e8d197ddfb57efd69164d165d84c1c970ae280d6b15cb51e9c5d2348f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 38703ab37fd6cb19c54457f0349770ce56ca37fbbbd7932c431cc0cd19ef6618
MD5 6f0e8d1116a24e46c68fd03fe7a180aa
BLAKE2b-256 01528f3f5bfba627ca7c3802d09e5fb576d2f93495f561a6b2c7c564ac4912e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp39-cp39-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 0aa7a859245746403c073b99307769206f9eb9f05f9fc44491315c2a080df4ab
MD5 397acddf2216632f5c2008c83e8be146
BLAKE2b-256 689e8a5c5fc9c94cdb338b44df76f26c847874a76ffefed6a8e9c9a0ed3e441c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maialib-1.10.2-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.7

File hashes

Hashes for maialib-1.10.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 93bc7f4cacc0986c71b1569667dbf04e1debe7b74bfe839c81b007a569cf5954
MD5 01b6321cecd1705bebf059dcf0cfcd6c
BLAKE2b-256 d02b503d591d62e29ccb7e9855b06d50446e064a366e811ad08fe06bce255aff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 348f68ffce4f2bf7f8019c0251edeeffb098f909e3cc7cc1c3310c9c597afd76
MD5 b5ca00ee4d020ca4e06b740c94e1d046
BLAKE2b-256 2b292a2dcf299130160260e5b27c6b6f477a46d0b67c892ca1841d3dff207d39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 72c2ecdd40e0b3c68fb6000ce79efec7469fe020dc9bbdc43c5eda0e0dfab3da
MD5 5da1c72ad52af6df64a310f584e8f461
BLAKE2b-256 c4c6a157f7a20a8dba706119ce744ff33af9351eec96a8f49e11986646efd7b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1b3b15ece288be29a6bb384e29857067d82e2edd8234448e2203c7fc3c3195b7
MD5 f694101710137abb455ebe24f59b1259
BLAKE2b-256 a95c6ac2a3b16016a84ae882c8656bbdb672dffba6488a3bac3c6b6b413c334d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maialib-1.10.2-cp38-cp38-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 7d6449b9654c5b164232b756a08aec0ffca8cce53662636866e3abf6e059f82e
MD5 8650851d295890f2fa2c795b8bc217d9
BLAKE2b-256 b7f3c0f6d61d6ecffd7dafd62044e76926a013e9b790880ea03aa8d4ec57043b

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