01_anti_heh


import numpy as np
import sys
import os
import time
import matplotlib.pyplot as plt



from antinature.core.molecular_data import MolecularData
from antinature.core.basis import MixedMatterBasis
from antinature.core.integral_engine import AntinatureIntegralEngine
from antinature.core.hamiltonian import AntinatureHamiltonian
from antinature.core.scf import AntinatureSCF
from antinature.core.correlation import AntinatureCorrelation
Warning: Unroller pass not available in this Qiskit version. Using alternatives.
Qiskit successfully imported.
Primitives (Estimator) available.

def run_anti_heh_ion():

    print("\n=== Anti-Helium Hydride Ion (anti-HeH+) Analysis ===\n")
    
    # Create anti-HeH+ system
    # The atoms list represents the nuclei positions, but they're anti-nuclei
    anti_heh_data = MolecularData(
        atoms=[
            ('He', np.array([0.0, 0.0, 0.0])),
            ('H', np.array([0.0, 0.0, 1.46]))  # ~1.46 Bohr ≈ 0.77 Å bond distance
        ],
        n_electrons=0,       # No electrons in antimatter system
        n_positrons=2,       # 2 positrons (equivalent to 2 electrons in normal HeH+)
        charge=0,            # Overall neutral (2 positrons balance -2 from anti-He, anti-H)
        name="Anti-HeH+",
        description="Anti-helium hydride ion (anti-HeH+) with exotic antimatter composition"
    )
    
    # Print molecular information
    print(f"Molecule: {anti_heh_data.name}")
    print(f"Description: {anti_heh_data.description}")
    print(f"Formula: {anti_heh_data.get_formula()}")
    print(f"Number of positrons: {anti_heh_data.n_positrons}")
    print(f"Nuclear repulsion energy: {anti_heh_data.get_nuclear_repulsion_energy():.8f} Hartree")
    
    # Create a basis set (use minimal for simplicity)
    basis = MixedMatterBasis()
    basis.create_for_molecule(
        atoms=anti_heh_data.atoms,
        e_quality='none',     # No electron basis needed
        p_quality='minimal'   # Minimal positron basis
    )
    
    # Print basis information
    p_basis_info = basis.positron_basis.get_function_types() if basis.positron_basis else {}
    print("\nBasis set information:")
    print(f"Positron basis functions: {len(basis.positron_basis) if basis.positron_basis else 0}")
    print(f"Positron function types: {p_basis_info}")
    
    # Create integral engine
    engine = AntinatureIntegralEngine()
    
    # Create Hamiltonian
    print("\nBuilding Hamiltonian...")
    t_start = time.time()
    hamiltonian = AntinatureHamiltonian(
        molecular_data=anti_heh_data,
        basis_set=basis,
        integral_engine=engine,
        include_relativistic=True  # Include relativistic effects for antimatter
    )
    
    # Build the Hamiltonian matrices
    h_matrices = hamiltonian.build_hamiltonian()
    t_hamiltonian = time.time() - t_start
    print(f"Hamiltonian built in {t_hamiltonian:.3f} seconds")
    
    # Create SCF solver
    print("\nStarting SCF calculation...")
    t_start = time.time()
    scf = AntinatureSCF(
        hamiltonian=h_matrices,
        basis_set=basis,
        molecular_data=anti_heh_data,
        max_iterations=50,
        convergence_threshold=1e-6,
        use_diis=True,
        damping_factor=0.5,
        print_level=1
    )
    
    # Run SCF calculation
    scf_results = scf.solve_scf()
    t_scf = time.time() - t_start
    print(f"SCF completed in {t_scf:.3f} seconds")
    
    # Print SCF results
    print(f"\nSCF energy: {scf_results['energy']:.10f} Hartree")
    print(f"Convergence: {scf_results['converged']}")
    print(f"Iterations: {scf_results['iterations']}")
    
    # Try correlation calculations
    print("\nStarting correlation calculations...")
    t_start = time.time()
    try:
        # Create correlation object
        corr = AntinatureCorrelation(
            scf_result=scf_results,
            hamiltonian=h_matrices,
            basis_set=basis,
            molecular_data=anti_heh_data,
            method="MP2"  # Use MP2 for correlation
        )
        
        # Run correlation calculation
        corr_results = corr.compute_correlation()
        t_corr = time.time() - t_start
        print(f"Correlation completed in {t_corr:.3f} seconds")
        
        # Print correlation results
        print(f"\nMP2 correlation energy: {corr_results['correlation_energy']:.10f} Hartree")
        print(f"Total MP2 energy: {corr_results['total_energy']:.10f} Hartree")
        
    except Exception as e:
        print(f"\nError in correlation calculation: {e}")
    
    # Visualize the system
    print("\nVisualizing anti-HeH+ system...")
    anti_heh_data.visualize(show_bonds=True)
    
    return {
        'molecule': anti_heh_data,
        'scf_results': scf_results,
        'correlation_results': corr_results if 'corr_results' in locals() else None
    }

def main():
    """Run all anti-HeH+ examples."""
    results = run_anti_heh_ion()
    
    # Save results plot
    plt.figure(figsize=(10, 6))
    plt.title("Anti-HeH+ Energy Levels")
    plt.xlabel("Orbital")
    plt.ylabel("Energy (Hartree)")
    
    # Plot positron energies if available
    if 'E_positron' in results['scf_results']:
        energies = results['scf_results']['E_positron']
        plt.plot(range(len(energies)), energies, 'ro-', label='Positron Orbitals')
        plt.legend()
    
    # Save the plot
    os.makedirs('results', exist_ok=True)
    plt.savefig(os.path.join('results', 'anti_heh_energies.png'))
    print(f"Results saved to results/anti_heh_energies.png")

if __name__ == "__main__":
    main() 

=== Anti-Helium Hydride Ion (anti-HeH+) Analysis ===

Molecule: Anti-HeH+
Description: Anti-helium hydride ion (anti-HeH+) with exotic antimatter composition
Formula: HHe(e+2)
Number of positrons: 2
Nuclear repulsion energy: 1.36986301 Hartree

Basis set information:
Positron basis functions: 2
Positron function types: {'s': 2}

Building Hamiltonian...
Hamiltonian built in 0.001 seconds

Starting SCF calculation...
Warning: Empty electron basis set or Hamiltonian matrix.
Iteration 1: Energy = 6.3009860453, ΔE = 6.3009860453, Error = 0.0000000000
Iteration 2: Energy = 6.3006864840, ΔE = 0.0002995614, Error = 0.0000000000
Iteration 3: Energy = 6.3004692209, ΔE = 0.0002172630, Error = 0.0000000000
Iteration 4: Energy = 6.3003255183, ΔE = 0.0001437026, Error = 0.0211447725
Warning: DIIS extrapolation failed, using standard update
Iteration 5: Energy = 6.3002402510, ΔE = 0.0000852673, Error = 0.0152474524
Warning: DIIS extrapolation failed, using standard update
Iteration 6: Energy = 6.3001792168, ΔE = 0.0000610342, Error = 0.0076167459
Warning: DIIS extrapolation failed, using standard update
Iteration 7: Energy = 6.3001441565, ΔE = 0.0000350604, Error = 0.0038170618
Warning: DIIS extrapolation failed, using standard update
Iteration 8: Energy = 6.3001254942, ΔE = 0.0000186623, Error = 0.0019188945
Warning: DIIS extrapolation failed, using standard update
Iteration 9: Energy = 6.3001158840, ΔE = 0.0000096102, Error = 0.0009699861
Warning: DIIS extrapolation failed, using standard update
Iteration 10: Energy = 6.3001110055, ΔE = 0.0000048785, Error = 0.0004859624
Warning: DIIS extrapolation failed, using standard update
Iteration 11: Energy = 6.3001085477, ΔE = 0.0000024578, Error = 0.0002431387
Warning: DIIS extrapolation failed, using standard update
Iteration 12: Energy = 6.3001073142, ΔE = 0.0000012334, Error = 0.0001225461
Warning: DIIS extrapolation failed, using standard update
Iteration 13: Energy = 6.3001066963, ΔE = 0.0000006179, Error = 0.0000613053
Warning: DIIS extrapolation failed, using standard update
Iteration 14: Energy = 6.3001063871, ΔE = 0.0000003092, Error = 0.0000306237
Warning: DIIS extrapolation failed, using standard update
Iteration 15: Energy = 6.3001062324, ΔE = 0.0000001547, Error = 0.0000153062
Warning: DIIS extrapolation failed, using standard update
Iteration 16: Energy = 6.3001061550, ΔE = 0.0000000774, Error = 0.0000076520
SCF converged in 16 iterations!
SCF converged in 16 iterations
Final energy: 6.3001061550 Hartree
Calculation time: 0.01 seconds
SCF completed in 0.014 seconds

SCF energy: 6.3001061550 Hartree
Convergence: True
Iterations: 16

Starting correlation calculations...

Error in correlation calculation: AntinatureCorrelation.__init__() got an unexpected keyword argument 'molecular_data'

Visualizing anti-HeH+ system...
/workspace/.pyenv_mirror/user/current/lib/python3.12/site-packages/antinature/core/basis.py:253: UserWarning: No basis parameters available for He with quality none
  warnings.warn(
/workspace/.pyenv_mirror/user/current/lib/python3.12/site-packages/antinature/core/basis.py:253: UserWarning: No basis parameters available for H with quality none
  warnings.warn(
Notebook output
Results saved to results/anti_heh_energies.png
Notebook output