Source code for mercurial.tests.foundations.test_transition

"""Test level transition operator."""

import numpy as np

from mercurial.core.patterns import Constraints, Pattern, StabilityRegime
from mercurial.hierarchy.transition import LevelTransitionOperator

# Create a low-level pattern (e.g., quantum fluctuations)
low_state = np.random.normal(0, 0.1, size=(100, 1))
low_pattern = Pattern(low_state, Constraints(), StabilityRegime(), "quantum")


# Target constraints for macroscopic level (e.g., positivity)
[docs] def positivity(v): return np.sum(np.maximum(0, -v.flatten())) # penalize negative values
macro_constraints = Constraints(inequality=[positivity]) # Transition operator trans = LevelTransitionOperator(coupling_strength=0.2) # Apply transition from low level (≈2) to macroscopic level (≈7) # We don't know exact levels, so use current_level=None macro_pattern = trans.apply_transition( low_pattern, target_level=7, target_constraints=macro_constraints, current_level=2 ) print("Source pattern (low level):") print(f" Shape: {low_pattern.V.shape}") print(f" Mean: {np.mean(low_pattern.V):.4f}, Std: {np.std(low_pattern.V):.4f}") print(f" Min: {np.min(low_pattern.V):.4f}, Max: {np.max(low_pattern.V):.4f}") print("\nTransferred pattern (macroscopic level):") print(f" Shape: {macro_pattern.V.shape}") print(f" Mean: {np.mean(macro_pattern.V):.4f}, Std: {np.std(macro_pattern.V):.4f}") print(f" Min: {np.min(macro_pattern.V):.4f}, Max: {np.max(macro_pattern.V):.4f}") # Check positivity constraint violation = macro_constraints.violation_norm(macro_pattern.V.flatten()) print(f"\nConstraint violation after transition: {violation:.6f}")