| |
|
| |
|
| | """
|
| | 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() |