Multi-mode (fast/aggressive/ultra) JSON compressor with advanced reversible transform pipelines
Project description
UltraCompress Module
Compression JSON multi-mode (fast / aggressive / ultra) avec chaînes de transformations réversibles (maps, delta, MTF, RLE, internage + BPE, front-coding, packing / bit-packing d'entiers, zigzag, GCD scaling, affine / décimal normalisation, segmentation numérique, déduplication de sous-arbres, colonnes améliorées...) et sélection automatique du meilleur backend (multi-niveaux Zstandard, Brotli, LZMA) pour obtenir des réductions >95% (souvent >99%) sur des structures répétitives complexes — tout en garantissant un round‑trip exact et l'ordre original.
Installation
pip install ultracompress_module
Modes
| Mode | Objectif | Vitesse | Recherche backend | Transformations explorées |
|---|---|---|---|---|
fast (défaut) |
Bonne compression rapide | ⚡ | zstd (niveau unique ou choisi), fallback lzma/brotli si meilleur | Sous-ensemble sûr (maps, delta, mtf, rle, int pack basique) |
aggressive |
Ratio plus élevé | ⚡➜🐢 | zstd multi-niveaux + brotli (9/11) + lzma extrême | Ajoute exploration large int packing, colonnes simples, internage chaîne |
ultra |
Maximum de réduction | 🐢 | Large panel zstd (niveaux étendus + dict si dispo) + brotli + lzma | Active recherche combinatoire (intern+BPE, front-coding, subtree dedup robuste, colonnes améliorées, bit/zigzag pack, GCD/affine/decimal/segbit cascade, variantes pipelines >100) |
Tous les pipelines sont strictement lossless et l'ordre des éléments est préservé. Le moteur évalue plusieurs variantes et conserve le plus petit résultat final.
Utilisation basique (fichiers)
from ultracompress_module import compress, decompress
# Compresser un fichier JSON (mode rapide: compresse le texte brut)
compress("input.json", "output.uc", preserve_text=True)
# Mode structuré (transformations maps/delta/mtf/rle pour meilleur ratio)
compress("input.json", "output_struct.uc", preserve_text=False, preproc_opts={
'maps': True, 'delta': True, 'mtf': True, 'rle': True
})
"""Fast (défaut) vs aggressive vs ultra"""
# Mode agressif (plus de recherche backend + transformations)
compress("input.json", "output_aggr.uc", preserve_text=False, preproc_opts={
'maps': True, 'delta': True, 'mtf': True, 'rle': True
}, mode='aggressive')
# Mode ultra (exploration maximale, meilleur ratio, plus lent sur gros fichiers)
compress("input.json", "output_ultra.uc", preserve_text=False, preproc_opts={
'maps': True, 'delta': True, 'mtf': True, 'rle': True
}, mode='ultra')
# Décompresser
decompress("output.uc", "reconstruit.json", preserve_text=True)
Utilisation en mémoire (aucun fichier intermédiaire)
from ultracompress_module import compress_text, decompress_bytes
json_text = '{"hello": "world", "nums": [1,1,1,2,2,3,3,3,3], "nested": {"a":1,"b":1}}'
# Texte brut (fast) -> idéal si on veut exactement la chaîne identique (espaces, ordre etc.)
blob_fast = compress_text(json_text, preserve_text=True) # bytes .uc
restored_text = decompress_bytes(blob_fast) # str identique
# Structuré agressif (objet Python à la restauration) :
blob_aggr = compress_text(json_text, preserve_text=False, preproc_opts={'maps': True}, mode='aggressive')
obj = decompress_bytes(blob_aggr, preserve_text=False) # objet Python identique
# Structuré ultra (max ratio) :
blob_ultra = compress_text(json_text, preserve_text=False, preproc_opts={'maps': True}, mode='ultra')
obj_ultra = decompress_bytes(blob_ultra, preserve_text=False)
CLI
Après installation, une commande ultracompress est disponible :
ultracompress compress input.json output.uc # fast par défaut
ultracompress compress --mode aggressive input.json output_aggr.uc
ultracompress compress --mode ultra input.json output_ultra.uc
ultracompress decompress output_ultra.uc restored.json --mode ultra # (mode requis pour hints quand structuré)
# Compression texte brut (préserver format exact)
ultracompress compress --mode fast --preserve-text input.json out_text.uc
# Optimisation automatique (essaie plusieurs entrées / pipelines internes)
ultracompress optimize input.json best.uc
Sous-commandes additionnelles :
build-maps: génèremaps_keys.json/maps_values.jsondepuis un corpus.train-dict: entraîne un dictionnaire Zstandard (placé danszstd_dict).optimize: essaie plusieurs stratégies de pipeline complètes.fast-optimize: sous-ensemble plus rapide.inspect: affiche un aperçu (taille, hex, base64, tentative de décodage structuré/texte) d'un fichier.uc.
Exemple :
ultracompress inspect sample.uc --max-bytes 96
Afficher l'aide :
ultracompress --help
Bench (exemple indicatif)
Sur un jeu mixte (structures imbriquées, listes d'entiers, chaînes répétitives) :
| Dataset | Taille JSON | fast | aggressive | ultra | Gain ultra |
|---|---|---|---|---|---|
| nested_medium | 120 KB | 18.2 KB | 9.7 KB | 5.3 KB | 95.6% |
| numeric_arrays | 200 KB | 21.5 KB | 8.4 KB | 3.1 KB | 98.4% |
| repetitive_strings | 85 KB | 9.1 KB | 4.0 KB | 0.6 KB | 99.3% |
(Les chiffres fluctuent selon contenu / machine; lancer vos propres mesures via un script bench.)
Exemples complets
Voir examples/example_usage.py pour un script autonome qui montre :
- Compression en mémoire (texte vs structuré) sur les trois modes.
- Compression de fichiers (fast/aggressive/ultra) et restauration.
- Utilisation de
benchmark_ratiopour comparer rapidement les tailles.
Exécution :
python examples/example_usage.py
API auto-détection rapide
Pour simplifier selon le type passé (texte JSON, objet Python ou chemin de fichier) :
from ultracompress_module import auto_compress, auto_decompress
data = {"users": [{"id": i, "name": f"u{i}"} for i in range(10)]}
meta = auto_compress(data, mode='aggressive') # retourne AutoCompressed
print(meta.original_len, '->', meta.compressed_len)
restored = auto_decompress(meta.blob, return_text=False)
assert restored == data
json_text = '{"a":1,"b":[1,2,3]}'
meta_text = auto_compress(json_text, mode='fast')
restored_txt = auto_decompress(meta_text.blob, return_text=True)
assert restored_txt == json_text
Garantie d'intégrité
Chaque transformation est entièrement réversible. Une suite de tests valide le round‑trip (fast/aggressive/ultra, texte & structuré). Si une variante ne réduit pas la taille ou échoue à valider sa reconstruction intermédiaire, elle est écartée.
Limites / Conseils
- Pour de très petits fichiers (<200 octets) le surcoût d'entête peut réduire l'intérêt : rester en
fast. ultrapeut explorer >100 pipelines; sur de gros JSON (multi-MB) prévoir plus de temps CPU.- Fournir un dictionnaire Zstandard entraîné (
train-dict) peut encore améliorer les ratios. preserve_text=Truedésactive les optimisations structurelles (on compresse la chaîne brute après éventuel mapping minimal) afin de garantir l'exactitude byte‑à‑byte.
Licence
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Notes version 0.3.0:
- Nouveau mode
ultra: exploration combinatoire étendue (internage + BPE, front-coding, subtree dedup robuste, colonnes avancées, cascades numériques GCD/affine/decimal/segbit, bit/zigzag pack, multi-niveaux zstd élargis) → gains >95% fréquents. - Sélection dynamique du meilleur pipeline parmi >100 variantes lorsque pertinent.
- Ajout des transforms numériques avancées (mise à l'échelle GCD, détection affine, normalisation décimale, bit-packing segmenté) et amélioration de la réversibilité.
- CLI : option
--mode {fast,aggressive,ultra}pourcompress&decompress. - Documentation enrichie (table de modes, benchs, conseils).
Notes version 0.2.0:
- Ajout du mode
aggressive: essaie plusieurs niveaux Zstandard (3,6,9,15,19), Brotli (9/11), LZMA extrême et choisit le meilleur ratio. - Transformation optionnelle d'emballage d'entiers (
int packing) pour grandes listes d'entiers (>=8) non négatifs. - Décompression des conteneurs structurés : auto-détection zstd -> lzma -> brotli (si installé) sans champ de méthode stocké (compat rétro).
- API fonctionnelle en mémoire stable (
compress_text,compress_object, etc.).
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 ultracompress_module-0.3.1.tar.gz.
File metadata
- Download URL: ultracompress_module-0.3.1.tar.gz
- Upload date:
- Size: 34.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e1b360b5a903261830d02ac23bfbee04200d0d5713679d08a3283f32c26e656
|
|
| MD5 |
af36b135b4a24911e35131b8e2553a4c
|
|
| BLAKE2b-256 |
11b8a265ec1f0170b35c84dd9cff35caa4e33fe1d5d911c706ab78d722a29ba4
|
File details
Details for the file ultracompress_module-0.3.1-py3-none-any.whl.
File metadata
- Download URL: ultracompress_module-0.3.1-py3-none-any.whl
- Upload date:
- Size: 29.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d767f9931c284f96c8486d3cac153a8003c6a48347f89a32a78727a288399fcf
|
|
| MD5 |
2194919f01aae40eac9a86442dea9ab7
|
|
| BLAKE2b-256 |
2676d38d8e82efd0d23b5e568984a23453b74c3f80052166bd90b9792439590f
|