An open-source data manipulation software for experimental sciences
Project description
DataManip
A powerful, user-friendly data manipulation application for experimental sciences. Perform calculations with formulas, units, uncertainty propagation, derivatives, and visualization—all in one place.
📖 Release Notes | 🗺️ Roadmap | 🤝 Contributing
✨ Key Features
- 5 Column Types: Data, Calculated, Derivative, Range, Uncertainty
- Formula Engine: NumPy functions, custom functions, unit-aware calculations (pint)
- Automatic Uncertainty Propagation: Symbolic differentiation with SymPy
- High Performance: 3x speedup with lazy evaluation, caching, and parallel execution
- Plotting with Error Bars: Multiple series, X/Y uncertainties, statistics (histogram/box plot)
- Workspace Management: Save/load complete workspaces with all studies
- Undo/Redo: 50-step history for column operations
- Constants System: Numeric, calculated, and function constants (workspace-level)
📦 Installation
Option 1: Install from PyPI (Recommended)
# Using pip
pip install datamanip
# Using uv (faster)
uv pip install datamanip
# Run directly with uvx (no installation)
uvx datamanip
# Launch the application
python -m datamanip
# or simply:
datamanip
Option 2: Development Setup
# Clone the repository
git clone https://github.com/brian-sinquin/DataManip.git
cd DataManip
# Install dependencies and run with uv
uv sync
uv run datamanip
📚 Documentation
- RELEASE_NOTES.md - Complete feature list and v0.2.0 details
- ROADMAP.md - Development roadmap from v0.3.0 to v1.0.0
- CONTRIBUTING.md - How to contribute to DataManip
🧮 Uncertainty Propagation
DataManip automatically calculates propagated uncertainties using the standard error propagation formula:
$$\delta f = \sqrt{\sum_i \left(\frac{\partial f}{\partial x_i} \cdot \delta x_i\right)^2}$$
Where:
- $\delta f$ = combined uncertainty of result
- $\frac{\partial f}{\partial x_i}$ = partial derivatives (calculated symbolically using SymPy)
- $\delta x_i$ = uncertainties of input variables
🚀 Quick Examples
# See examples/ directory for 8 complete demonstrations
examples/
├── 01_basic_introduction.dmw # Getting started
├── 02_constants_and_formulas.dmw # Formula engine basics
├── 03_ranges_and_derivatives.dmw # Numerical differentiation
├── 04_uncertainty_propagation.dmw # Error analysis
├── 05_custom_functions.dmw # User-defined functions
├── 06_calculated_constants.dmw # Dynamic constants
├── 07_advanced_kinematics.dmw # Physics with units
└── 08_photoelectric_effect.dmw # Complete experiment
# Open an example
datamanip examples/01_basic_introduction.dmw
🧪 Testing
# Run all tests
uv run pytest tests/unit/ -v
# Generate coverage report
uv run pytest --cov=src --cov-report=html
# Test by layer
uv run pytest tests/unit/core/ -v
uv run pytest tests/unit/studies/ -v
uv run pytest tests/unit/ui/ -v
📄 License
MIT License - See LICENSE for details
🙏 Acknowledgments
Built with ❤️ for experimental scientists worldwide.
Contributors: See assets/contributors.json
Made with PySide6 • pandas • NumPy • matplotlib • sympy • pint
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 datamanip-0.2.2.tar.gz.
File metadata
- Download URL: datamanip-0.2.2.tar.gz
- Upload date:
- Size: 97.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30fddf263cca96a98d2ac43551dcdaf6a83aca1eaa44bfa72905729d5cc4a120
|
|
| MD5 |
c6fd9cc4fd29ed99efd5ddbe5c4d9070
|
|
| BLAKE2b-256 |
28a55b3747c3f907b971ce45aec0212e606cda7ab82362528f3fcb3fc6f6b105
|
Provenance
The following attestation bundles were made for datamanip-0.2.2.tar.gz:
Publisher:
publish.yml on brian-sinquin/DataManip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
datamanip-0.2.2.tar.gz -
Subject digest:
30fddf263cca96a98d2ac43551dcdaf6a83aca1eaa44bfa72905729d5cc4a120 - Sigstore transparency entry: 723519467
- Sigstore integration time:
-
Permalink:
brian-sinquin/DataManip@c7d1a80eae7d6cde79e85d683098ac2b336a0f0b -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/brian-sinquin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c7d1a80eae7d6cde79e85d683098ac2b336a0f0b -
Trigger Event:
release
-
Statement type:
File details
Details for the file datamanip-0.2.2-py3-none-any.whl.
File metadata
- Download URL: datamanip-0.2.2-py3-none-any.whl
- Upload date:
- Size: 110.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7f64c7af3849b791dea7073531062210ec56d5130a0fd5b78a61e46f336286b
|
|
| MD5 |
4c174c18c0a0250ee5c4760d7fc568d1
|
|
| BLAKE2b-256 |
784f94a1b30552bdd8018d8dd90c14cfeed3c81bae498d8c08bf700ed4f038e5
|
Provenance
The following attestation bundles were made for datamanip-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on brian-sinquin/DataManip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
datamanip-0.2.2-py3-none-any.whl -
Subject digest:
f7f64c7af3849b791dea7073531062210ec56d5130a0fd5b78a61e46f336286b - Sigstore transparency entry: 723519496
- Sigstore integration time:
-
Permalink:
brian-sinquin/DataManip@c7d1a80eae7d6cde79e85d683098ac2b336a0f0b -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/brian-sinquin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c7d1a80eae7d6cde79e85d683098ac2b336a0f0b -
Trigger Event:
release
-
Statement type: