uslap-query / Code_files /archive /uslap_accelerated_safe_final.py
uslap's picture
Upload folder using huggingface_hub
7cc8e29 verified
Raw
History Blame Contribute Delete
13.4 kB
#!/usr/bin/env python3
"""
USLaP SAFE ACCELERATED FOREST GROWTH - FINAL VERSION
Safe accelerated growth with automatic backups and corruption protection
Usage:
python3 uslap_accelerated_safe_final.py [cycles=10] [entries_per_cycle=10]
Example:
python3 uslap_accelerated_safe_final.py 5 10 # 5 cycles, 10 entries per cycle
python3 uslap_accelerated_safe_final.py 100 # 100 cycles, default 10 entries per cycle
python3 uslap_accelerated_safe_final.py # Default: 10 cycles, 10 entries per cycle
"""
import openpyxl
from pathlib import Path
from datetime import datetime
import time
import shutil
import sys
import os
# ============================================================================
# SAFE FILE HANDLER
# ============================================================================
class SafeFileHandler:
"""Handles file operations safely with backups"""
def __init__(self, filepath):
self.filepath = Path(filepath)
self.backup_path = None
def create_backup(self):
"""Create a timestamped backup before starting operations"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
backup_name = f"{self.filepath.stem}_backup_{timestamp}{self.filepath.suffix}"
self.backup_path = self.filepath.parent / backup_name
try:
shutil.copy2(self.filepath, self.backup_path)
print(f"📁 Created backup: {self.backup_path.name}")
return True
except Exception as e:
print(f"❌ Failed to create backup: {e}")
return False
def verify_file_integrity(self):
"""Verify the file can be loaded and has valid structure"""
try:
wb = openpyxl.load_workbook(self.filepath, data_only=True, read_only=True)
wb.close()
print(f"✅ File integrity check passed: {len(wb.sheetnames)} sheets")
return True
except Exception as e:
print(f"❌ File integrity check failed: {e}")
return False
def write_entries_safely(self, entries, sheet_name='A1_ENTRIES'):
"""Write entries with proper error handling and recovery"""
if not entries:
return 0
# Create temp file for safe writing
temp_file = self.filepath.parent / f"temp_{self.filepath.name}"
try:
# Load source workbook
wb = openpyxl.load_workbook(self.filepath)
# Get or create target sheet
if sheet_name in wb.sheetnames:
ws = wb[sheet_name]
else:
ws = wb.create_sheet(sheet_name)
# Add headers
headers = ['ENTRY_ID', 'SCORE', 'EN_TERM', 'AR_WORD', 'ROOT_ID',
'ROOT_LETTERS', 'QUR_MEANING', 'PATTERN', 'NETWORK_ID',
'PHONETIC_CHAIN', 'INVERSION_TYPE', 'SOURCE_FORM', 'FOUNDATION_REF']
for col, header in enumerate(headers, 1):
ws.cell(row=1, column=col, value=header)
# Find next empty row
next_row = ws.max_row + 1 if ws.max_row > 1 else 2
# Write entries
written_count = 0
for entry in entries:
try:
ws.cell(row=next_row, column=1, value=entry.get('ENTRY_ID', ''))
ws.cell(row=next_row, column=2, value=entry.get('SCORE', 0))
ws.cell(row=next_row, column=3, value=entry.get('EN_TERM', ''))
ws.cell(row=next_row, column=4, value=entry.get('AR_WORD', ''))
ws.cell(row=next_row, column=5, value=entry.get('ROOT_ID', ''))
ws.cell(row=next_row, column=6, value=entry.get('ROOT_LETTERS', '—'))
ws.cell(row=next_row, column=7, value=entry.get('QUR_MEANING', '—'))
ws.cell(row=next_row, column=8, value=entry.get('PATTERN', 'A'))
ws.cell(row=next_row, column=9, value=entry.get('NETWORK_ID', ''))
ws.cell(row=next_row, column=10, value=entry.get('PHONETIC_CHAIN', '—'))
ws.cell(row=next_row, column=11, value=entry.get('INVERSION_TYPE', 'HIDDEN'))
ws.cell(row=next_row, column=12, value=entry.get('SOURCE_FORM', '—'))
ws.cell(row=next_row, column=13, value=entry.get('FOUNDATION_REF', '—'))
next_row += 1
written_count += 1
except Exception as e:
print(f" ⚠️ Skipping entry due to error: {e}")
continue
# Save to temp file first
wb.save(temp_file)
# Verify temp file
try:
test_wb = openpyxl.load_workbook(temp_file, read_only=True)
test_wb.close()
# If verification passes, replace original
shutil.move(temp_file, self.filepath)
return written_count
except Exception as e:
print(f" ❌ Temp file verification failed: {e}")
if temp_file.exists():
temp_file.unlink()
return 0
except Exception as e:
print(f" ❌ Error during write operation: {e}")
return 0
finally:
# Clean up temp file if it exists
if temp_file.exists():
try:
temp_file.unlink()
except:
pass
# ============================================================================
# SIMPLE DATA GENERATOR
# ============================================================================
class SimpleGenerator:
"""Generates simple ratio entries for testing"""
def __init__(self):
self.next_id = 1000 # Start from a high number to avoid conflicts
def generate_ratio_entries(self, count=10):
"""Generate simple ratio entries"""
entries = []
# Common divine ratios from USLaP
ratios = [
(4, 3, 'musical fourth', 'N08'),
(5, 3, 'musical sixth', 'N08'),
(7, 3, 'maqam proportion', 'N08'),
(7, 5, 'prayer kernel', 'N06'),
(11, 5, 'dombra sacred', 'N16'),
(22, 7, 'circle perfect', 'N07'),
(28, 7, 'lunar perfect', 'N05'),
(99, 70, 'high precision √2', 'N05'),
(355, 113, 'high precision π', 'N05'),
(19, 7, 'growth constant', 'N10'),
]
for i, (num, den, name, network) in enumerate(ratios[:count]):
entry_id = f"F{self.next_id:04d}"
self.next_id += 1
entries.append({
'ENTRY_ID': entry_id,
'SCORE': 9,
'EN_TERM': f"{name} ({num}/{den})",
'AR_WORD': f"نسبة {num}/{den}",
'ROOT_ID': f"R{self.next_id}",
'ROOT_LETTERS': '—',
'QUR_MEANING': f"Divine ratio {num}/{den} — precise measure (Q54:49)",
'PATTERN': 'A',
'NETWORK_ID': network,
'PHONETIC_CHAIN': '→'.join(['✓'] * 3),
'INVERSION_TYPE': 'DIVINE',
'SOURCE_FORM': f"ratio:{num}/{den}",
'FOUNDATION_REF': f"Q54:49 + {den}-denominator"
})
return entries
# ============================================================================
# MAIN ACCELERATED GROWTH SYSTEM
# ============================================================================
def run_safe_growth(filepath, cycles=10, entries_per_cycle=10):
"""Run safe accelerated growth cycles"""
filepath = Path(filepath)
if not filepath.exists():
print(f"❌ File not found: {filepath}")
return False
print("\n" + "="*60)
print(f"🛡️ SAFE ACCELERATED GROWTH")
print("="*60)
print(f"📁 File: {filepath.name}")
print(f"📦 Size: {filepath.stat().st_size / 1024 / 1024:.2f} MB")
print(f"🚀 Cycles: {cycles}")
print(f"🌱 Entries per cycle: {entries_per_cycle}")
print("="*60)
# Initialize handlers
file_handler = SafeFileHandler(filepath)
generator = SimpleGenerator()
# Step 1: Create backup
print("\n📁 Step 1: Creating backup...")
if not file_handler.create_backup():
print("⚠️ Backup creation failed!")
response = input("Continue without backup? (y/n): ").strip().lower()
if response != 'y':
print("Aborted by user")
return False
# Step 2: Verify file integrity
print("\n✅ Step 2: Verifying file integrity...")
if not file_handler.verify_file_integrity():
print("⚠️ File integrity check failed!")
response = input("Continue anyway? (y/n): ").strip().lower()
if response != 'y':
print("Aborted by user")
return False
# Step 3: Run growth cycles
print("\n🚀 Step 3: Running growth cycles...")
start_time = time.time()
total_written = 0
for cycle in range(1, cycles + 1):
print(f"\n--- Cycle {cycle}/{cycles} ---")
try:
# Generate entries for this cycle
entries = generator.generate_ratio_entries(entries_per_cycle)
# Write entries safely
written = file_handler.write_entries_safely(entries, 'A1_ENTRIES')
total_written += written
# Progress tracking
elapsed = time.time() - start_time
avg_time = elapsed / cycle
remaining = avg_time * (cycles - cycle)
print(f" 📈 +{written} entries | Total: {total_written} | Elapsed: {elapsed:.1f}s | Remaining: {remaining:.1f}s")
# Safety pause between cycles
if cycle < cycles:
time.sleep(0.5) # Short pause for safety
except Exception as e:
print(f" ❌ Error in cycle {cycle}: {e}")
print(f" ⚠️ Skipping to next cycle...")
time.sleep(1.0)
continue
# Final summary
total_time = time.time() - start_time
print("\n" + "="*60)
print(f"✅ SAFE GROWTH COMPLETE")
print(f" Cycles completed: {cycles}")
print(f" Total entries added: {total_written}")
print(f" Total time: {total_time:.1f} seconds")
print(f" Average: {total_time/cycles:.1f} seconds per cycle")
if file_handler.backup_path and file_handler.backup_path.exists():
print(f" Backup saved: {file_handler.backup_path.name}")
# Final file check
final_size = filepath.stat().st_size if filepath.exists() else 0
print(f" Final file size: {final_size:,} bytes")
print("="*60)
return True
# ============================================================================
# COMMAND LINE INTERFACE
# ============================================================================
def main():
"""Main command line interface"""
# Default values
cycles = 10
entries_per_cycle = 10
filepath = "USLaP_Final_Data_Consolidated_Master.xlsx"
# Parse command line arguments
if len(sys.argv) > 1:
try:
cycles = int(sys.argv[1])
except ValueError:
print(f"⚠️ Invalid cycle count: {sys.argv[1]}. Using default: {cycles}")
if len(sys.argv) > 2:
try:
entries_per_cycle = int(sys.argv[2])
except ValueError:
print(f"⚠️ Invalid entries per cycle: {sys.argv[2]}. Using default: {entries_per_cycle}")
# Check if file exists
if not os.path.exists(filepath):
print(f"\n❌ File not found: {filepath}")
print("\nPlease provide the path to your USLaP Excel file:")
print(f" python3 {sys.argv[0]} /path/to/your/file.xlsx [cycles] [entries_per_cycle]")
print("\nOr place this script in the same folder as your file.")
return 1
# Show configuration
print(f"\n⚙️ Configuration:")
print(f" File: {filepath}")
print(f" Cycles: {cycles}")
print(f" Entries per cycle: {entries_per_cycle}")
print(f" Total entries to add: ~{cycles * entries_per_cycle}")
# Confirm with user
print(f"\n⚠️ This will modify {filepath} and create a backup.")
response = input("Continue? (y/n): ").strip().lower()
if response != 'y':
print("Operation cancelled")
return 0
# Run safe growth
try:
success = run_safe_growth(filepath, cycles, entries_per_cycle)
return 0 if success else 1
except KeyboardInterrupt:
print("\n\n👋 Operation interrupted by user")
return 1
except Exception as e:
print(f"\n❌ Unexpected error: {e}")
import traceback
traceback.print_exc()
return 1
# ============================================================================
# ENTRY POINT
# ============================================================================
if __name__ == "__main__":
sys.exit(main())