tensor-group-sym / python / StarG.ipynb
StarG.ipynb
Raw
import StarGAlgebra
import numpy as np
from numpy.fft import fft, ifft, fft2, ifft2
from scipy.linalg import dft, svd
from itertools import permutations
from typing import Optional, Tuple, List, Dict, Union, Any
import warnings
# Create algebra
alg = StarGAlgebra.StarGAlgebra('cyclic', 8)

# Enable GPU if available
alg.enable_gpu()

# Create tensors
A = np.random.randn(4, 5, 8)
B = np.random.randn(5, 3, 8)

# Compute star-G product
C = alg.star_g(A, B)

# Compute SVD
U, S, V = alg.star_g_svd(A)

# Run tests
alg.run_all_tests()
========================================
StarGAlgebra Verification Suite
Group order: 8, Cyclic: True, Abelian: True
Identity at index: 0, GPU: False
========================================

Test 1: Group Axioms
  PASS

Test 2: Convolution Tensor
  PASS

Test 3: 1D Convolution
  Direct vs Inverse: 1.18e-16
  Direct vs Optimized: 1.42e-16
  PASS

Test 4: StarG Product
  Direct vs Main: error=3.01e+00 (0.0003s vs 0.0023s)
  FAIL

Test 5: Conjugate Transpose
  PASS (error=0.00e+00)

Test 6: Identity
  ||I*A - A||/||A|| = 1.17e-16
  ||A*I - A||/||A|| = 1.17e-16
  PASS

Test 7: Associativity
  PASS (error=1.61e-16)

Test 8: SVD
  FAIL (error=5.37e-01)

========================================
All tests completed.
========================================
run StarGAlgebra
Testing Cyclic Group Z_5:
========================================
StarGAlgebra Verification Suite
Group order: 5, Cyclic: True, Abelian: True
Identity at index: 0, GPU: False
========================================

Test 1: Group Axioms
  PASS

Test 2: Convolution Tensor
  PASS

Test 3: 1D Convolution
  Direct vs Inverse: 1.51e-16
  Direct vs Optimized: 1.15e-16
  PASS

Test 4: StarG Product
  Direct vs Main: error=3.16e+00 (0.0003s vs 0.0004s)
  FAIL

Test 5: Conjugate Transpose
  PASS (error=0.00e+00)

Test 6: Identity
  ||I*A - A||/||A|| = 1.10e-16
  ||A*I - A||/||A|| = 1.10e-16
  PASS

Test 7: Associativity
  PASS (error=2.79e-16)

Test 8: SVD
  FAIL (error=1.35e+00)

========================================
All tests completed.
========================================

============================================================

Testing Klein-4 Group:
========================================
StarGAlgebra Verification Suite
Group order: 4, Cyclic: False, Abelian: True
Identity at index: 0, GPU: False
========================================

Test 1: Group Axioms
  PASS

Test 2: Convolution Tensor
  PASS

Test 3: 1D Convolution
  Direct vs Inverse: 0.00e+00
  Direct vs Optimized: 0.00e+00
  PASS

Test 4: StarG Product
  Direct vs Main: error=2.52e+00 (0.0003s vs 0.0002s)
  FAIL

Test 5: Conjugate Transpose
  PASS (error=0.00e+00)

Test 6: Identity
  ||I*A - A||/||A|| = 0.00e+00
  ||A*I - A||/||A|| = 0.00e+00
  PASS

Test 7: Associativity
  PASS (error=2.85e-16)

Test 8: SVD
  SKIP (non-cyclic)

========================================
All tests completed.
========================================

============================================================

Testing Dihedral Group D_3:
========================================
StarGAlgebra Verification Suite
Group order: 6, Cyclic: False, Abelian: False
Identity at index: 0, GPU: False
========================================

Test 1: Group Axioms
  PASS

Test 2: Convolution Tensor
  PASS

Test 3: 1D Convolution
  Direct vs Inverse: 1.33e-16
  Direct vs Optimized: 0.00e+00
  PASS

Test 4: StarG Product
  Direct vs Main: error=2.28e+00 (0.0003s vs 0.0003s)
  FAIL

Test 5: Conjugate Transpose
  PASS (error=0.00e+00)

Test 6: Identity
  ||I*A - A||/||A|| = 0.00e+00
  ||A*I - A||/||A|| = 0.00e+00
  PASS

Test 7: Associativity
  PASS (error=3.09e-16)

Test 8: SVD
  SKIP (non-cyclic)

========================================
All tests completed.
========================================

============================================================

Testing Stable SVD:
  Invariant magnitudes shape: (3, 3)
  Trace invariants: [ 61.32955127  61.32955127 499.55595912  16.8220484 ]
  Feature vector length: 21

============================================================

Running benchmark:

=== Performance Benchmark ===
Group: n=5, Cyclic=True, GPU=False
Size       Direct (s)      Optimized (s)   Speedup   
, , , , , , , , , , , , , , , , , , -
5          0.0009          0.0001          7.8       x
10         0.0059          0.0001          51.2      x
20         0.0317          0.0002          145.3     x
run starG_helpers.py
============================================================
StarGHelpers Test Suite
============================================================

1. Testing compute_r2:
   Perfect prediction R²: 1.0000
   Good prediction R²:    0.9970
   Mean prediction R²:    0.0000

2. Testing count_mlp_params:
   Architecture [10, 20, 1]: 241 parameters
   Architecture [784, 256, 128, 10]: 235,146 parameters
   Architecture [100, 64, 32, 16, 1]: 9,089 parameters

3. Testing compute_invariant_features:
   Input shape:  (5, 8, 4)
   Output shape: (5, 32)
   Expected:     (5, 32)

4. Testing generate_molecular_data:
   Generated X shape: (100, 16, 8)
   Generated Y shape: (100, 1)
   Y statistics: min=2.205, max=7.406, mean=5.542

   Checking rotational structure:
   Feature magnitudes across rotations: [242.13491428 242.34517849 242.15745494 242.39983417 242.13491428
 242.34517849 242.15745494 242.39983417]

5. Testing roundp:
   3.14159265 -> p=2: 3.14, p=4: 3.1416
   2.71828182 -> p=2: 2.72, p=4: 2.7183
   1.41421356 -> p=2: 1.41, p=4: 1.4142
   Array [1.234567 8.901234] -> p=3: [1.235 8.901]

============================================================
All tests completed successfully!
============================================================
run NeuralStarGFramework.py
StarGAlgebra not found. Creating minimal mock for testing.
============================================================
NeuralStarGFramework Test Suite
============================================================

Group order: 8

==================================================
Neural Star-G Network Summary
==================================================
Group order: 8
Layer sizes: [16, 32, 16, 1]
Learning rate: 0.001
Weight decay: 0.0001
, , , , , , , , , , , , , , , , --
Layer 1:
  Weight shape: (32, 16, 8)
  Bias shape:   (32, 1, 8)
  Parameters:   4,352
Layer 2:
  Weight shape: (16, 32, 8)
  Bias shape:   (16, 1, 8)
  Parameters:   4,224
Layer 3:
  Weight shape: (1, 16, 8)
  Bias shape:   (1, 1, 8)
  Parameters:   136
, , , , , , , , , , , , , , , , --
Total parameters: 8,712
==================================================

Generating synthetic data...
X_train shape: (100, 16, 8)
Y_train shape: (100,)

Testing forward pass...
Output shape: (5, 1, 8)

Testing prediction...
Predictions shape: (5,)
Sample predictions: [-2.25953238  0.11158253  0.95744442]

Testing training (10 epochs)...

Training Neural Star_G Network
Epochs: 10, Batch: 16, LR: 0.0010

Epoch   5: Loss=11.9024, R2=-4.9001, Val R2=-3.9899 (1.5s)
Epoch  10: Loss=9.0742, R2=-3.5459, Val R2=-2.9917 (1.5s)

Best Val R2: -2.9917


Testing weight compression...
Compressing to rank 2...
Layer 1: 0.00% error
Layer 2: 0.00% error
Layer 3: 0.00% error

Testing save/load...
Model saved to test_model.npz
Model loaded from test_model.npz
Original predictions: [ 4.84074015 -2.60443789  1.72507838]
Loaded predictions:   [ 4.84074015 -2.60443789  1.72507838]
Match: True

============================================================
All tests completed successfully!
============================================================