Heavy calculations almost done. Added script for automatization "fill_table_from_nb.py"

This commit is contained in:
Artyom Titov 2026-07-29 17:48:33 +03:00
commit 3585c75b2a
39 changed files with 125384 additions and 88606 deletions

56
automation/decompress.py Normal file
View file

@ -0,0 +1,56 @@
import base64
import zlib
def decompress_wolfram_data(compressed_str: str) -> str:
"""Декодирует и распаковывает строку CompressedData из Wolfram Mathematica."""
# 1. Удаляем пробелы, переносы строк и префикс версии (например, "1:")
cleaned_str = "".join(compressed_str.split())
if ":" in cleaned_str:
cleaned_str = cleaned_str.split(":", 1)[1]
# 2. Алфавиты: Wolfram использует отличный от стандартного Base64 набор символов
# Стандартный: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
wolfram_alphabet = (
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
)
standard_alphabet = (
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
)
# Создаем таблицу перевода символов из Wolfram в стандартный Base64
translation_table = str.maketrans(wolfram_alphabet, standard_alphabet)
standard_b64_str = cleaned_str.translate(translation_table)
# 3. Добавляем паддинг '=', если длина строки не кратна 4
padding_needed = len(standard_b64_str) % 4
if padding_needed:
standard_b64_str += "=" * (4 - padding_needed)
# 4. Декодируем из Base64 в байты
binary_data = base64.b64decode(standard_b64_str)
# 5. Распаковываем с помощью zlib (алгоритм Deflate)
decompressed_bytes = zlib.decompress(binary_data)
# Возвращаем результат в виде текстовой строки
return decompressed_bytes.decode("utf-8", errors="ignore")
# === ПРИМЕР ИСПОЛЬЗОВАНИЯ ===
if __name__ == "__main__":
# Пример сжатой строки из Mathematica (результат Compress["Hello World! This is Wolfram compression."])
wolfram_data = """
1:eJxVjDEOwjAMRaGSgYmJgYmBiaUrV65wAsbChMTgAtS9W9SptfS97+f79Wev
bX6fLhXF6Kx0Y9WSpM/fXstxmsv9uE3p2SgUizWclE3Z6p38g2bE9Y6g8w2VgG6A
"""
wolfram_data = input("Enter wolfram compressed data string:\n")
try:
result = decompress_wolfram_data(wolfram_data)
print("Успешно распаковано!")
print("-" * 30)
print(result)
print("-" * 30)
except Exception as e:
print(f"Ошибка при распаковке: {e}")