Memory management and manual allocation library for Python using C
Project description
🧠 memtool — Control de memoria manual en Python con C
memtool es un framework experimental que permite trabajar con arrays en Python controlando directamente la memoria mediante punteros escritos en C. Proporciona acceso de bajo nivel a la memoria, permitiendo realizar operaciones como reserva, lectura, escritura, escalado, relleno, producto punto y conversión directa a NumPy, todo con rendimiento casi nativo.
✨ Características principales
- Acceso manual a memoria con punteros desde Python
- Tipos soportados:
int,float,double - Operaciones:
malloc,set,get,free,sum,scale,fill,dot,to_numpy() - Sin garbage collector → control total de recursos
- Compatible con
NumPysin copia de memoria - Clases
IntArray,FloatArray,DoubleArraycon estilo Pythonic
⚡ Motivación
Python es muy fácil de usar, pero lento para ciertas tareas. NumPy es rápido, pero no ofrece control sobre la memoria. memtool busca combinar lo mejor de ambos mundos:
💡 "Velocidad y control de C, con la interfaz amigable de Python."
Ideal para ciencia de datos, ingeniería de datos, procesamiento por lotes, o microservicios que requieren rendimiento extremo.
📂 Instalación (modo desarrollo)
git clone https://github.com/tuusuario/memtool.git
cd memtool
python3 setup.py build
python3 setup.py install --user # o usa venv
📃 Ejemplo rápido
from memtool import IntArray
arr = IntArray(5, init_sequence=True) # [0, 1, 2, 3, 4]
print(arr.sum()) # 10
arr.scale(2) # [0, 2, 4, 6, 8]
arr.fill(1) # [1, 1, 1, 1, 1]
print(arr.dot(arr)) # 5
np_arr = arr.to_numpy()
print(np_arr) # [1 1 1 1 1]
📈 Benchmark (suma de 10M de elementos)
[Python puro] ≈ 0.18s
[NumPy] ≈ 0.010s
[memtool (C)] ≈ 0.020s
memtool está muy cerca de NumPy en rendimiento, pero con control total sobre la memoria.
🌐 Uso avanzado con NumPy y FastAPI
Puedes usar to_numpy() para convertir directamente un puntero a np.ndarray:
np_arr = arr.to_numpy()
plt.plot(np_arr) # o guardarlo como CSV, usar con pandas, etc.
Y también podrías integrarlo en un microservicio con FastAPI:
@app.post("/dot")
def producto_punto(data: List[int]):
a = IntArray(len(data), init_sequence=True)
b = IntArray(len(data), init_sequence=True)
return {"dot": a.dot(b)}
📄 Clases disponibles
IntArray(size, init_sequence=False)
FloatArray(size, init_sequence=False)
DoubleArray(size, init_sequence=False)
Cada una soporta:
set(index, value)/get(index)/ indexado[]sum()scale(factor)fill(value)dot(other)to_numpy()free()
🌐 Estado actual
📅 Roadmap futuro
- 🔄 Compatibilidad con
float16yint64 - 🔄 Interfaz para
pandas.SeriesyDataFrame - 🔄 Validaciones avanzadas y manejo de errores
- 🔄 Extensiones con funciones vectoriales en C
👥 Autor
Desarrollado por [tu nombre o usuario de GitHub] con el objetivo de experimentar y crear una alternativa de alto rendimiento para tareas críticas con arrays en Python.
🏆 Licencia
MIT License. Libre para usar, modificar, aprender o contribuir.
🚀 Si te gustó este proyecto, ⭐ dale una estrella en GitHub y compartilo. Es solo el comienzo. 🚀
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
File details
Details for the file memtool-0.1.0.tar.gz.
File metadata
- Download URL: memtool-0.1.0.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b56814391b7cb14c1b72fd57e237261b9b170f4b5eb2dc4fc3939131ff0b363a
|
|
| MD5 |
1539480cbd3b047a0794db663c8b23f7
|
|
| BLAKE2b-256 |
f8ff057bd083455554722a710dda13039ea59e7a4c11564d355838260e773a0d
|