|
|
|
|
|
|
|
|
"""
|
|
|
Quantum LIMIT-Graph v2.0 Setup Script
|
|
|
|
|
|
Automated setup and configuration for quantum-enhanced AI research agent.
|
|
|
"""
|
|
|
|
|
|
import os
|
|
|
import sys
|
|
|
import subprocess
|
|
|
import logging
|
|
|
from pathlib import Path
|
|
|
from typing import Dict, List, Optional
|
|
|
|
|
|
|
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class QuantumSetup:
|
|
|
"""Setup manager for Quantum LIMIT-Graph v2.0."""
|
|
|
|
|
|
def __init__(self):
|
|
|
self.project_root = Path(__file__).parent
|
|
|
self.requirements_file = self.project_root / "requirements.txt"
|
|
|
self.config_dir = self.project_root / "config"
|
|
|
|
|
|
def check_python_version(self) -> bool:
|
|
|
"""Check if Python version is compatible."""
|
|
|
version = sys.version_info
|
|
|
if version.major < 3 or (version.major == 3 and version.minor < 8):
|
|
|
logger.error("Python 3.8+ is required for Quantum LIMIT-Graph v2.0")
|
|
|
return False
|
|
|
|
|
|
logger.info(f"β Python {version.major}.{version.minor}.{version.micro} is compatible")
|
|
|
return True
|
|
|
|
|
|
def install_quantum_dependencies(self) -> bool:
|
|
|
"""Install quantum computing dependencies."""
|
|
|
logger.info("Installing quantum computing dependencies...")
|
|
|
|
|
|
try:
|
|
|
|
|
|
quantum_packages = [
|
|
|
"qiskit>=0.45.0",
|
|
|
"qiskit-aer>=0.13.0",
|
|
|
"qiskit-algorithms>=0.2.0",
|
|
|
"pennylane>=0.32.0",
|
|
|
"cirq-core>=1.2.0",
|
|
|
"lambeq>=0.3.4"
|
|
|
]
|
|
|
|
|
|
for package in quantum_packages:
|
|
|
logger.info(f"Installing {package}...")
|
|
|
result = subprocess.run([
|
|
|
sys.executable, "-m", "pip", "install", package
|
|
|
], capture_output=True, text=True)
|
|
|
|
|
|
if result.returncode != 0:
|
|
|
logger.error(f"Failed to install {package}: {result.stderr}")
|
|
|
return False
|
|
|
|
|
|
logger.info(f"β {package} installed successfully")
|
|
|
|
|
|
return True
|
|
|
|
|
|
except Exception as e:
|
|
|
logger.error(f"Error installing quantum dependencies: {e}")
|
|
|
return False
|
|
|
|
|
|
def install_requirements(self) -> bool:
|
|
|
"""Install all requirements from requirements.txt."""
|
|
|
if not self.requirements_file.exists():
|
|
|
logger.error(f"Requirements file not found: {self.requirements_file}")
|
|
|
return False
|
|
|
|
|
|
logger.info("Installing all requirements...")
|
|
|
|
|
|
try:
|
|
|
result = subprocess.run([
|
|
|
sys.executable, "-m", "pip", "install", "-r", str(self.requirements_file)
|
|
|
], capture_output=True, text=True)
|
|
|
|
|
|
if result.returncode != 0:
|
|
|
logger.error(f"Failed to install requirements: {result.stderr}")
|
|
|
return False
|
|
|
|
|
|
logger.info("β All requirements installed successfully")
|
|
|
return True
|
|
|
|
|
|
except Exception as e:
|
|
|
logger.error(f"Error installing requirements: {e}")
|
|
|
return False
|
|
|
|
|
|
def verify_quantum_installation(self) -> bool:
|
|
|
"""Verify quantum computing packages are working."""
|
|
|
logger.info("Verifying quantum installations...")
|
|
|
|
|
|
|
|
|
try:
|
|
|
import qiskit
|
|
|
from qiskit import QuantumCircuit
|
|
|
from qiskit_aer import AerSimulator
|
|
|
|
|
|
|
|
|
qc = QuantumCircuit(2)
|
|
|
qc.h(0)
|
|
|
qc.cx(0, 1)
|
|
|
qc.measure_all()
|
|
|
|
|
|
|
|
|
simulator = AerSimulator()
|
|
|
job = simulator.run(qc, shots=100)
|
|
|
result = job.result()
|
|
|
|
|
|
logger.info(f"β Qiskit {qiskit.__version__} working correctly")
|
|
|
|
|
|
except Exception as e:
|
|
|
logger.error(f"Qiskit verification failed: {e}")
|
|
|
return False
|
|
|
|
|
|
|
|
|
try:
|
|
|
import pennylane as qml
|
|
|
|
|
|
|
|
|
dev = qml.device('default.qubit', wires=2)
|
|
|
|
|
|
@qml.qnode(dev)
|
|
|
def test_circuit():
|
|
|
qml.Hadamard(wires=0)
|
|
|
qml.CNOT(wires=[0, 1])
|
|
|
return qml.expval(qml.PauliZ(0))
|
|
|
|
|
|
result = test_circuit()
|
|
|
logger.info(f"β PennyLane {qml.__version__} working correctly")
|
|
|
|
|
|
except Exception as e:
|
|
|
logger.error(f"PennyLane verification failed: {e}")
|
|
|
return False
|
|
|
|
|
|
|
|
|
try:
|
|
|
import cirq
|
|
|
|
|
|
|
|
|
qubit = cirq.GridQubit(0, 0)
|
|
|
circuit = cirq.Circuit(cirq.H(qubit))
|
|
|
|
|
|
logger.info(f"β Cirq {cirq.__version__} working correctly")
|
|
|
|
|
|
except Exception as e:
|
|
|
logger.error(f"Cirq verification failed: {e}")
|
|
|
return False
|
|
|
|
|
|
|
|
|
try:
|
|
|
import lambeq
|
|
|
from lambeq import AtomicType
|
|
|
|
|
|
|
|
|
noun_type = AtomicType.NOUN
|
|
|
logger.info(f"β Lambeq {lambeq.__version__} working correctly")
|
|
|
|
|
|
except Exception as e:
|
|
|
logger.error(f"Lambeq verification failed: {e}")
|
|
|
return False
|
|
|
|
|
|
logger.info("β
All quantum packages verified successfully")
|
|
|
return True
|
|
|
|
|
|
def create_config_files(self) -> bool:
|
|
|
"""Create configuration files for quantum components."""
|
|
|
logger.info("Creating configuration files...")
|
|
|
|
|
|
try:
|
|
|
|
|
|
self.config_dir.mkdir(exist_ok=True)
|
|
|
|
|
|
|
|
|
quantum_config = {
|
|
|
"quantum_backend": "qiskit_aer",
|
|
|
"max_qubits": 24,
|
|
|
"default_languages": ["indonesian", "arabic", "spanish", "english"],
|
|
|
"components": {
|
|
|
"semantic_graph": {
|
|
|
"enabled": True,
|
|
|
"max_qubits": 20
|
|
|
},
|
|
|
"policy_optimizer": {
|
|
|
"enabled": True,
|
|
|
"num_qubits": 16,
|
|
|
"num_layers": 3
|
|
|
},
|
|
|
"context_engine": {
|
|
|
"enabled": True,
|
|
|
"max_context_qubits": 20,
|
|
|
"cultural_dimensions": 8
|
|
|
},
|
|
|
"benchmark_harness": {
|
|
|
"enabled": True,
|
|
|
"max_qubits": 24
|
|
|
},
|
|
|
"provenance_tracker": {
|
|
|
"enabled": True,
|
|
|
"max_qubits": 20,
|
|
|
"hash_precision": 256
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
config_file = self.config_dir / "quantum_config.json"
|
|
|
with open(config_file, 'w') as f:
|
|
|
import json
|
|
|
json.dump(quantum_config, f, indent=2)
|
|
|
|
|
|
logger.info(f"β Created quantum configuration: {config_file}")
|
|
|
|
|
|
|
|
|
env_template = """# Quantum LIMIT-Graph v2.0 Environment Variables
|
|
|
|
|
|
# Quantum Computing Backend
|
|
|
QUANTUM_BACKEND=qiskit_aer
|
|
|
|
|
|
# Optional: IBM Quantum Access
|
|
|
# IBMQ_TOKEN=your_ibm_quantum_token_here
|
|
|
|
|
|
# Optional: Google Quantum AI
|
|
|
# GOOGLE_QUANTUM_PROJECT=your_google_project_id
|
|
|
|
|
|
# Optional: Rigetti Quantum Computing
|
|
|
# RIGETTI_API_KEY=your_rigetti_api_key
|
|
|
|
|
|
# Optional: Amazon Braket
|
|
|
# AWS_ACCESS_KEY_ID=your_aws_access_key
|
|
|
# AWS_SECRET_ACCESS_KEY=your_aws_secret_key
|
|
|
# AWS_DEFAULT_REGION=us-east-1
|
|
|
|
|
|
# Logging Level
|
|
|
LOG_LEVEL=INFO
|
|
|
|
|
|
# Session Configuration
|
|
|
MAX_QUBITS=24
|
|
|
DEFAULT_LANGUAGES=indonesian,arabic,spanish,english
|
|
|
"""
|
|
|
|
|
|
env_file = self.config_dir / ".env.template"
|
|
|
with open(env_file, 'w') as f:
|
|
|
f.write(env_template)
|
|
|
|
|
|
logger.info(f"β Created environment template: {env_file}")
|
|
|
|
|
|
return True
|
|
|
|
|
|
except Exception as e:
|
|
|
logger.error(f"Error creating config files: {e}")
|
|
|
return False
|
|
|
|
|
|
def run_quantum_tests(self) -> bool:
|
|
|
"""Run basic quantum functionality tests."""
|
|
|
logger.info("Running quantum functionality tests...")
|
|
|
|
|
|
try:
|
|
|
|
|
|
from quantum_integration import QuantumLimitGraph
|
|
|
|
|
|
|
|
|
quantum_agent = QuantumLimitGraph(
|
|
|
languages=['english', 'spanish'],
|
|
|
max_qubits=8,
|
|
|
enable_quantum_walks=True,
|
|
|
enable_quantum_rlhf=False,
|
|
|
enable_quantum_context=True,
|
|
|
enable_quantum_benchmarking=False,
|
|
|
enable_quantum_provenance=True
|
|
|
)
|
|
|
|
|
|
|
|
|
test_query = "quantum semantic processing test"
|
|
|
results = quantum_agent.quantum_research(
|
|
|
test_query,
|
|
|
languages=['english'],
|
|
|
research_depth='quick'
|
|
|
)
|
|
|
|
|
|
if results and 'synthesis' in results:
|
|
|
logger.info("β Basic quantum research functionality working")
|
|
|
else:
|
|
|
logger.error("Quantum research test failed")
|
|
|
return False
|
|
|
|
|
|
|
|
|
status = quantum_agent.get_quantum_system_status()
|
|
|
if status and 'session_id' in status:
|
|
|
logger.info("β Quantum system status working")
|
|
|
else:
|
|
|
logger.error("Quantum system status test failed")
|
|
|
return False
|
|
|
|
|
|
logger.info("β
All quantum functionality tests passed")
|
|
|
return True
|
|
|
|
|
|
except Exception as e:
|
|
|
logger.error(f"Quantum functionality tests failed: {e}")
|
|
|
return False
|
|
|
|
|
|
def setup_complete(self) -> bool:
|
|
|
"""Complete setup process."""
|
|
|
logger.info("π Starting Quantum LIMIT-Graph v2.0 Setup...")
|
|
|
|
|
|
|
|
|
if not self.check_python_version():
|
|
|
return False
|
|
|
|
|
|
|
|
|
if not self.install_requirements():
|
|
|
return False
|
|
|
|
|
|
|
|
|
if not self.verify_quantum_installation():
|
|
|
return False
|
|
|
|
|
|
|
|
|
if not self.create_config_files():
|
|
|
return False
|
|
|
|
|
|
|
|
|
if not self.run_quantum_tests():
|
|
|
return False
|
|
|
|
|
|
logger.info("β
Quantum LIMIT-Graph v2.0 setup completed successfully!")
|
|
|
logger.info("")
|
|
|
logger.info("Next steps:")
|
|
|
logger.info("1. Review configuration files in ./config/")
|
|
|
logger.info("2. Set up environment variables (copy .env.template to .env)")
|
|
|
logger.info("3. Run: python -c 'from quantum_integration import QuantumLimitGraph; print(\"Ready!\")'")
|
|
|
logger.info("4. See README.md for usage examples")
|
|
|
|
|
|
return True
|
|
|
|
|
|
def main():
|
|
|
"""Main setup function."""
|
|
|
setup = QuantumSetup()
|
|
|
success = setup.setup_complete()
|
|
|
|
|
|
if not success:
|
|
|
logger.error("β Setup failed. Please check the errors above.")
|
|
|
sys.exit(1)
|
|
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
main() |