A library for MMPP (Micro Magnetic Post Processing) simulation and analysis
Project description
๐งฒ MMPP - Micro Magnetic Post Processing
A powerful Python library for micromagnetic simulation analysis and visualization
๐ Documentation โข ๐ Getting Started โข ๐ฏ Features โข ๐ก Examples
๐ฏ Features
๐ฌ Advanced Analysis
|
โก High Performance
|
๐จ Rich Visualization
|
๐ ๏ธ Developer Friendly
|
๐ค Smart Auto-Selection โจ NEW!
|
|
๐ Quick Start
Installation
# Install from PyPI (recommended)
pip install mmpp
# Or install latest development version
pip install git+https://github.com/MateuszZelent/mmpp.git
Basic Usage
import mmpp
# ๐ Load simulation data
op = mmpp.MMPP('path/to/simulation.zarr')
# ๐ Single file analysis with auto-selection
result = op[0]
fft_analyzer = result.fft
# ๐ค Auto-dataset selection (NEW!) - automatically chooses largest m_z dataset
spectrum = fft_analyzer.spectrum() # Uses auto-selection
power_spectrum = fft_analyzer.power() # Uses auto-selection
# ๐ฏ Or specify dataset explicitly
spectrum = fft_analyzer.spectrum(dset='m_z5-8')
# โก Batch processing
batch = op[:] # Get all results
modes = batch.fft.modes.compute_modes(parallel=True) # Auto-selection in batch too
๐ค Smart Auto-Selection Feature
MMPP now includes intelligent dataset auto-selection that automatically chooses the best magnetization dataset for analysis:
# โจ NEW: Auto-selection API (recommended)
result = op[0]
fft_analyzer = result.fft
# No need to specify dataset - MMPP chooses the largest m_z dataset automatically
spectrum = fft_analyzer.spectrum()
power_spectrum = fft_analyzer.power()
modes = fft_analyzer.modes.compute_modes()
# ๐ Check which dataset was auto-selected
selected_dataset = result.get_largest_m_dataset()
print(f"Auto-selected dataset: {selected_dataset}") # e.g., "m_z5-8"
# ๐ Traditional API still works for manual control
spectrum = fft_analyzer.spectrum(dset='m_z5-8')
Benefits:
- ๐ฏ Simplified API: No need to remember dataset names
- ๐ Intelligent Selection: Automatically finds the best dataset
- ๐ Backward Compatible: Existing code continues to work
- ๐ Consistent Results: Always uses the dataset with most data points
๐ก Examples
๐ Batch Processing
Process multiple simulation files efficiently:
# ๐ Process all files in a directory
op = mmpp.MMPP('simulation_results/')
batch = op[:]
# โก Parallel FFT analysis with auto-selection (NEW!)
modes = batch.fft.modes.compute_modes(parallel=True) # Auto-selects best dataset
# ๏ฟฝ Or specify dataset explicitly for batch operations
modes = batch.fft.modes.compute_modes(dset='m_z5-8', parallel=True)
# ๐ Complete analysis in one call (NEW!)
results = batch.process(parallel=True, max_workers=4) # FFT + mode analysis
print(f"Processed {results['successful']}/{results['total']} files successfully")
๐ Advanced FFT Analysis
Comprehensive frequency domain analysis:
# ๐ค Auto-selection (NEW!) - Let MMPP choose the best dataset
spectrum = fft_analyzer.spectrum() # Automatically selects largest m_z dataset
power_spectrum = fft_analyzer.power()
frequencies = fft_analyzer.frequencies()
modes = fft_analyzer.modes.compute_modes()
# ๐ฏ Manual dataset selection (traditional approach)
spectrum = fft_analyzer.spectrum(dset='m_z5-8')
power_spectrum = fft_analyzer.power(dset='m_z5-8')
frequencies = fft_analyzer.frequencies(dset='m_z5-8')
modes = fft_analyzer.modes.compute_modes(dset='m_z5-8')
# ๐ฌ Plot mode visualizations at specific frequency
plot_result = fft_analyzer.plot_modes(frequency=10.5) # Auto-selection
plot_result = fft_analyzer.plot_modes(frequency=10.5, dset='m_z5-8') # Manual
๐จ Publication-Ready Visualizations
Create stunning plots with built-in themes:
# ๐ Custom styled plots
import mmpp.plotting as mplt
mplt.plot_spectrum(spectrum, style='publication')
# ๐จ Interactive visualizations
mplt.interactive_plot(data, colormap='viridis')
# ๐พ Export in multiple formats
mplt.save_figure('spectrum.png', dpi=300, format='png')
โก Performance Tips
๐ Optimize Your Workflow
Use Parallel Processing
# Enable parallel processing for batch operations
modes = batch.fft.modes.compute_modes(parallel=True)
# Control number of workers
modes = batch.fft.modes.compute_modes(parallel=True, max_workers=4)
Leverage Auto-Selection
# Let MMPP choose the optimal dataset automatically
spectrum = fft_analyzer.spectrum() # Faster than manual selection
Memory Management
# Process large datasets in chunks to manage memory usage
op = mmpp.MMPP('large_simulation_directory/')
batch_size = 50 # Process 50 results at a time
print(f"Total files: {len(op)}")
for i in range(0, len(op), batch_size):
chunk = op[i:i+batch_size]
results = chunk.process(parallel=True, max_workers=4)
chunk_num = i//batch_size + 1
total_chunks = (len(op) + batch_size - 1) // batch_size
print(f"Chunk {chunk_num}/{total_chunks}: {results['successful']}/{results['total']} successful "
f"({results['computation_time']:.1f}s)")
# Optional: Clear memory or save intermediate results
if results['failed'] > 0:
print(f"โ ๏ธ {results['failed']} files failed in chunk {chunk_num}")
Efficient Data Loading
# Load only what you need
result = op[0] # Single result
specific_results = op.find(solver=3, amp_values=0.0022) # Filtered results
๐ Benchmarks
Typical performance on a modern system (16GB RAM, 8-core CPU):
| Operation | Single File | Batch (10 files) | Parallel Batch |
|---|---|---|---|
| Load Data | ~0.1s | ~1.0s | ~0.3s |
| FFT Analysis | ~2.0s | ~20s | ~5s |
| Mode Computation | ~5.0s | ~50s | ~12s |
Performance varies significantly based on dataset size and system specifications.
๐ Documentation & Resources
| Resource | Description | Link |
|---|---|---|
| ๐ Documentation | Complete API reference and tutorials | GitHub Pages |
| ๐ Tutorials | Step-by-step guides and examples | Tutorials |
| ๐ฌ API Reference | Detailed function documentation | API Docs |
| ๐ Getting Started | Quick start guide | Getting Started |
| ๐๏ธ PyZFN Library | ZFN file format handling (dependency) | PyZFN by Mathieu Moalic |
๐๏ธ Build Documentation Locally
# Quick build and serve
./build_docs.sh --serve
# Manual build
cd docs
pip install sphinx sphinx-rtd-theme myst-parser sphinx-autodoc-typehints
sphinx-build -b html . _build
๐ง Installation Options
๐ฆ Standard Installation
pip install mmpp
๐ ๏ธ Development Installation
git clone https://github.com/MateuszZelent/mmpp.git
cd mmpp
pip install -e ".[dev]"
๐ฏ Optional Features
# Interactive Jupyter support
pip install mmpp[interactive]
# Enhanced plotting capabilities
pip install mmpp[plotting]
# Full development environment
pip install mmpp[dev]
๐ Requirements
Core Dependencies
- ๐ Python โฅ3.9
- ๐ข NumPy โฅ1.20.0
- ๐ผ Pandas โฅ1.3.0
- ๐ Matplotlib โฅ3.5.0
- ๐๏ธ PyZFN - ZFN file format handling (Mathieu Moalic)
- โก Zarr - High-performance data storage
- ๐จ Rich - Beautiful terminal output
- ๐ TQDM - Progress bars
Optional Dependencies
- ๐ช Jupyter Ecosystem (
itables,IPython,jupyter) - ๐ Enhanced Plotting (
cmocean,seaborn) - ๐งช Development Tools (
pytest,ruff,mypy)
๐ป System Requirements
Supported Platforms
- ๐ง Linux (Ubuntu 18.04+, CentOS 7+, etc.)
- ๐ macOS (10.14+)
- ๐ช Windows (10+)
Hardware Recommendations
- RAM: 8GB minimum, 16GB+ recommended for large datasets
- Storage: SSD recommended for better I/O performance
- CPU: Multi-core processor recommended for parallel operations
Python Compatibility
- โ Python 3.9 - Minimum supported version
- โ Python 3.10 - Fully supported
- โ Python 3.11 - Fully supported
- โ ๏ธ Python 3.12 - Beta support (some dependencies may vary)
๐ Additional Documentation
For developers and advanced users, additional documentation is available:
๐ฌ FFT Analysis Documentation
- Complete FFT API Analysis - Detailed technical analysis of FFT functionality
- FFT API Verification - Verification of all FFT examples and methods
- Detailed FFT Analysis - In-depth FFT implementation details
๐ ๏ธ Development Documentation
- Performance Optimization - Performance enhancement strategies
- Smart Legend Documentation - Advanced plotting features
- GitHub Pages Setup - Documentation deployment guide
- Workflow Fixes - Development workflow improvements
๐ค Contributing
We welcome contributions! Here's how you can help:
| Type | Description | Action |
|---|---|---|
| ๐ Bug Reports | Found an issue? | Open Issue |
| ๐ก Feature Requests | Have an idea? | Discussion |
| ๐ง Pull Requests | Want to contribute code? | Contributing Guide |
| ๐ Documentation | Improve the docs | Edit on GitHub |
๐ Quick Contribution Setup
# Fork and clone the repository
git clone https://github.com/MateuszZelent/mmpp.git
cd mmpp
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest tests/
# Check code style
ruff check mmpp/
ruff format --check mmpp/
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Built with โค๏ธ by MateuszZelent
- Powered by the amazing Python scientific computing ecosystem
- PyZFN integration: Utilizes components from PyZFN by Mathieu Moalic for efficient ZFN file handling
- Special thanks to all contributors and users
โญ Star this repo if you find it useful! โญ
Report Bug โข Request Feature โข Documentation
โ Frequently Asked Questions
๐ Q: How does auto-selection work?
A: MMPP automatically identifies and selects the largest magnetization dataset (m_z*) in your simulation files. This ensures you're always working with the most comprehensive data available.
๐ Q: Can I still use manual dataset selection?
A: Yes! The auto-selection feature is backward compatible. You can still specify datasets manually using the dset parameter in any method.
โก Q: How do I speed up batch processing?
A: Use the parallel=True parameter in batch operations:
batch.fft.modes.compute_modes(parallel=True)
๐ Q: I'm getting import errors. What should I do?
A: Make sure you have all dependencies installed:
pip install mmpp[dev] # For full functionality
๐ Q: What file formats does MMPP support?
A: MMPP primarily works with Zarr archives (.zarr) from micromagnetic simulations. The library is optimized for this format's high-performance capabilities.
๐ง Troubleshooting
Common Issues
Import Errors
# Problem: ModuleNotFoundError
# Solution: Install missing dependencies
pip install mmpp[dev]
Memory Issues with Large Datasets
# Problem: Out of memory errors
# Solution: Process data in chunks or use batch operations
batch_size = 10
for chunk in op.chunks(batch_size):
results = chunk.fft.modes.compute_modes()
Performance Issues
# Problem: Slow FFT computation
# Solution: Use parallel processing
modes = batch.fft.modes.compute_modes(parallel=True, max_workers=4)
Getting Help
If you encounter issues:
- Check the Documentation: GitHub Pages
- Search Issues: GitHub Issues
- Ask Questions: GitHub Discussions
- Contact: mateusz.zelent@amu.edu.pl
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 Distribution
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 mmpp-0.5.3.tar.gz.
File metadata
- Download URL: mmpp-0.5.3.tar.gz
- Upload date:
- Size: 9.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e1d609bb951faf261e0e71d160ec2a11c984d45204e468048081521b6b478f5
|
|
| MD5 |
5f189fc0d39f41df8d5558f407d50a89
|
|
| BLAKE2b-256 |
1251e192deff22cd2ae28a011462e1f3fcb1497f38f5f83c5622532335e62195
|
File details
Details for the file mmpp-0.5.3-py3-none-any.whl.
File metadata
- Download URL: mmpp-0.5.3-py3-none-any.whl
- Upload date:
- Size: 3.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
434917d95f722db6392a5aead7b2d55db0d7e16960b2e7428b80fff6acf1c2bb
|
|
| MD5 |
f9dd7131a838bc7081fad5e369f22773
|
|
| BLAKE2b-256 |
bc27bbc47dfc97113f69637b29763216467856b5bd0af15367dbc3b245508c00
|