uslap-query / Code_files /archive /test_safe_script.py
uslap's picture
Upload folder using huggingface_hub
7cc8e29 verified
Raw
History Blame Contribute Delete
10.2 kB
#!/usr/bin/env python3
"""
Test script to verify the safe accelerated growth script works with current Excel file
"""
import openpyxl
from pathlib import Path
import shutil
import time
def test_file_operations():
"""Test basic file operations on the current Excel file"""
filepath = Path('USLaP_Final_Data_Consolidated_Master.xlsx')
print(f"Testing file: {filepath.name}")
print(f"File size: {filepath.stat().st_size:,} bytes")
# 1. Test if we can load the file
try:
wb = openpyxl.load_workbook(filepath, data_only=True, read_only=True)
print(f"✓ File loads successfully")
print(f" Sheets: {wb.sheetnames}")
wb.close()
except Exception as e:
print(f"✗ Error loading file: {e}")
return False
# 2. Test if we can create a backup
timestamp = time.strftime("%Y%m%d_%H%M%S")
backup_path = filepath.parent / f"{filepath.stem}_test_backup_{timestamp}{filepath.suffix}"
try:
shutil.copy2(filepath, backup_path)
print(f"✓ Backup created: {backup_path.name}")
# Verify backup
wb_backup = openpyxl.load_workbook(backup_path, data_only=True, read_only=True)
print(f"✓ Backup loads successfully")
wb_backup.close()
# Clean up test backup
backup_path.unlink()
print(f"✓ Test backup cleaned up")
except Exception as e:
print(f"✗ Error creating backup: {e}")
return False
# 3. Test if we can add a new sheet
try:
# Load workbook for editing
wb_edit = openpyxl.load_workbook(filepath)
# Check if A1_ENTRIES exists
if 'A1_ENTRIES' not in wb_edit.sheetnames:
print(" A1_ENTRIES sheet doesn't exist, will create it")
ws = wb_edit.create_sheet('A1_ENTRIES')
# 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)
print(f"✓ Created A1_ENTRIES sheet with headers")
# Add a test entry
test_entry = {
'ENTRY_ID': 'TEST001',
'SCORE': 10,
'EN_TERM': 'Test entry',
'AR_WORD': 'اختبار',
'ROOT_ID': 'R001',
'ROOT_LETTERS': '—',
'QUR_MEANING': 'Test entry for verification',
'PATTERN': 'A',
'NETWORK_ID': 'N08',
'PHONETIC_CHAIN': '→'.join(['✓'] * 3),
'INVERSION_TYPE': 'DIVINE',
'SOURCE_FORM': 'test:001',
'FOUNDATION_REF': 'TEST_REF'
}
next_row = ws.max_row + 1
ws.cell(row=next_row, column=1, value=test_entry['ENTRY_ID'])
ws.cell(row=next_row, column=2, value=test_entry['SCORE'])
ws.cell(row=next_row, column=3, value=test_entry['EN_TERM'])
ws.cell(row=next_row, column=4, value=test_entry['AR_WORD'])
ws.cell(row=next_row, column=5, value=test_entry['ROOT_ID'])
ws.cell(row=next_row, column=6, value=test_entry['ROOT_LETTERS'])
ws.cell(row=next_row, column=7, value=test_entry['QUR_MEANING'])
ws.cell(row=next_row, column=8, value=test_entry['PATTERN'])
ws.cell(row=next_row, column=9, value=test_entry['NETWORK_ID'])
ws.cell(row=next_row, column=10, value=test_entry['PHONETIC_CHAIN'])
ws.cell(row=next_row, column=11, value=test_entry['INVERSION_TYPE'])
ws.cell(row=next_row, column=12, value=test_entry['SOURCE_FORM'])
ws.cell(row=next_row, column=13, value=test_entry['FOUNDATION_REF'])
print(f"✓ Added test entry to row {next_row}")
# Save to temp file first (safe write)
temp_file = filepath.parent / f"temp_{filepath.name}"
wb_edit.save(temp_file)
# Verify temp file
test_wb = openpyxl.load_workbook(temp_file, read_only=True)
test_wb.close()
# Replace original with temp file
shutil.move(temp_file, filepath)
print(f"✓ Successfully saved changes using safe write pattern")
# Verify the file still loads
wb_final = openpyxl.load_workbook(filepath, data_only=True, read_only=True)
if 'A1_ENTRIES' in wb_final.sheetnames:
ws_final = wb_final['A1_ENTRIES']
print(f"✓ A1_ENTRIES sheet exists with {ws_final.max_row} rows")
wb_final.close()
except Exception as e:
print(f"✗ Error modifying file: {e}")
import traceback
traceback.print_exc()
return False
return True
def test_simple_growth():
"""Test a simple growth cycle without modifying the original file"""
print("\n" + "="*60)
print("Testing simple growth cycle on COPY of file")
print("="*60)
original = Path('USLaP_Final_Data_Consolidated_Master.xlsx')
test_copy = Path('USLaP_TEST_COPY.xlsx')
# Create test copy
try:
shutil.copy2(original, test_copy)
print(f"✓ Created test copy: {test_copy.name}")
except Exception as e:
print(f"✗ Error creating test copy: {e}")
return False
try:
# Load and modify test copy
wb = openpyxl.load_workbook(test_copy)
# Create or get A1_ENTRIES sheet
if 'A1_ENTRIES' not in wb.sheetnames:
ws = wb.create_sheet('A1_ENTRIES')
# 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)
print(f"✓ Created A1_ENTRIES sheet in test copy")
# Add some test entries
test_entries = []
for i in range(1, 6):
test_entries.append({
'ENTRY_ID': f'TEST{i:03d}',
'SCORE': 8 + i,
'EN_TERM': f'Test ratio {i}/3',
'AR_WORD': f'نسبة {i}/3',
'ROOT_ID': f'R{i:03d}',
'ROOT_LETTERS': '—',
'QUR_MEANING': f'Test divine ratio {i}/3',
'PATTERN': 'A',
'NETWORK_ID': 'N08',
'PHONETIC_CHAIN': '→'.join(['✓'] * 3),
'INVERSION_TYPE': 'DIVINE',
'SOURCE_FORM': f'test:ratio_{i}/3',
'FOUNDATION_REF': f'TEST_REF_{i}'
})
ws = wb['A1_ENTRIES']
next_row = ws.max_row + 1
for entry in test_entries:
ws.cell(row=next_row, column=1, value=entry['ENTRY_ID'])
ws.cell(row=next_row, column=2, value=entry['SCORE'])
ws.cell(row=next_row, column=3, value=entry['EN_TERM'])
ws.cell(row=next_row, column=4, value=entry['AR_WORD'])
ws.cell(row=next_row, column=5, value=entry['ROOT_ID'])
ws.cell(row=next_row, column=6, value=entry['ROOT_LETTERS'])
ws.cell(row=next_row, column=7, value=entry['QUR_MEANING'])
ws.cell(row=next_row, column=8, value=entry['PATTERN'])
ws.cell(row=next_row, column=9, value=entry['NETWORK_ID'])
ws.cell(row=next_row, column=10, value=entry['PHONETIC_CHAIN'])
ws.cell(row=next_row, column=11, value=entry['INVERSION_TYPE'])
ws.cell(row=next_row, column=12, value=entry['SOURCE_FORM'])
ws.cell(row=next_row, column=13, value=entry['FOUNDATION_REF'])
next_row += 1
# Save test copy
wb.save(test_copy)
print(f"✓ Added {len(test_entries)} test entries to A1_ENTRIES sheet")
# Verify the test copy
wb_check = openpyxl.load_workbook(test_copy, data_only=True, read_only=True)
ws_check = wb_check['A1_ENTRIES']
print(f"✓ Test copy verified: A1_ENTRIES has {ws_check.max_row} rows")
wb_check.close()
# Clean up test copy
test_copy.unlink()
print(f"✓ Test copy cleaned up")
return True
except Exception as e:
print(f"✗ Error in simple growth test: {e}")
import traceback
traceback.print_exc()
# Clean up test copy if it exists
if test_copy.exists():
try:
test_copy.unlink()
except:
pass
return False
if __name__ == "__main__":
print("="*60)
print("TESTING USLaP SAFE SCRIPT COMPATIBILITY")
print("="*60)
# Test 1: Basic file operations
print("\nTest 1: Basic file operations")
print("-" * 40)
test1_passed = test_file_operations()
# Test 2: Simple growth on copy
print("\nTest 2: Simple growth on copy")
print("-" * 40)
test2_passed = test_simple_growth()
print("\n" + "="*60)
print("TEST RESULTS")
print("="*60)
print(f"Test 1 (File operations): {'✓ PASSED' if test1_passed else '✗ FAILED'}")
print(f"Test 2 (Simple growth): {'✓ PASSED' if test2_passed else '✗ FAILED'}")
if test1_passed and test2_passed:
print("\n✅ All tests passed! The safe script should work.")
print("\nRecommendation: Run uslap_accelerated_safe.py with small cycles first:")
print(" python3 uslap_accelerated_safe.py USLaP_Final_Data_Consolidated_Master.xlsx 5")
print("\nThis will run 5 safe cycles (creates backup first).")
else:
print("\n❌ Some tests failed. Check the errors above.")
print("="*60)