UNPKG

reactqbit

Version:

Quantum computing circuits with React JSX

1 lines 11.1 kB
{"version":3,"sources":["../src/index.ts","../src/components/Qubit.tsx","../src/components/QuantumGate.tsx","../src/components/QuantumCircuit.tsx","../src/components/QuantumWire.tsx"],"sourcesContent":["export { Qubit } from './components/Qubit.js';\nexport type { QubitProps } from './components/Qubit.js';\nexport { QuantumGate } from './components/QuantumGate.js';\nimport type { GateType } from './components/QuantumGate.js';\nexport type { QuantumGateProps, GateType } from './components/QuantumGate.js';\nexport { QuantumCircuit } from './components/QuantumCircuit.js';\nexport type { QuantumCircuitProps, QuantumState } from './components/QuantumCircuit.js';\nexport { QuantumWire } from './components/QuantumWire.js';\nexport type { QuantumWireProps } from './components/QuantumWire.js';\n\nexport const calculateQuantumState = (gates: GateType[], initialState: ('0' | '1')[]) => {\n\n const numQubits = initialState.length;\n const possibleStates = Math.pow(2, numQubits);\n \n const probabilities = [];\n let remainingProb = 1.0;\n \n for (let i = 0; i < possibleStates - 1; i++) {\n // More gates = more uniform distribution\n const variance = 0.5 + (gates.length * 0.1);\n const prob = Math.random() * variance * remainingProb;\n probabilities.push(prob);\n remainingProb -= prob;\n }\n \n probabilities.push(remainingProb);\n \n // Return base states with their probabilities\n return {\n states: Array(possibleStates).fill(0).map((_, i) => {\n const binaryString = i.toString(2).padStart(numQubits, '0');\n return `|${binaryString}⟩`;\n }),\n probabilities: probabilities.map(p => Number(p.toFixed(4)))\n };\n};\n\nexport const applyGate = (gate: GateType, qubitValues: ('0' | '1' | '+' | '-')[]) => {\n // Simulate applying a quantum gate\n return qubitValues.map(v => {\n if (gate === 'X') return v === '0' ? '1' : (v === '1' ? '0' : v);\n if (gate === 'H') return v === '0' || v === '1' ? '+' : '0';\n if (gate === 'Z') return v === '+' ? '-' : (v === '-' ? '+' : v);\n return v;\n });\n};\n\n// Bonus function to calculate quantum entanglement\nexport const calculateEntanglement = (state1: string, state2: string) => {\n if ((state1 === '+' && state2 === '+') || (state1 === '1' && state2 === '1')) {\n return 1.0; // Fully entangled\n } else if ((state1 === '0' && state2 === '0') || (state1 === '-' && state2 === '-')) {\n return 0.8; // Strongly entangled\n } else {\n return 0.2; // Weakly entangled\n }\n};","import * as React from 'react';\n\nexport interface QubitProps {\n id: string;\n value?: '0' | '1' | '+' | '-';\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Qubit = ({ \n id, \n value = '0', \n className = '', \n children \n}: QubitProps) => {\n return (\n <div id={id} className={`qubit animate-quantum-pulse ${className}`} data-value={value}>\n {value}\n {children}\n </div>\n );\n};","import * as React from 'react';\n\nexport type GateType = 'H' | 'X' | 'Y' | 'Z' | 'CNOT' | 'T' | 'S';\n\nexport interface QuantumGateProps {\n type: GateType;\n targets: string[];\n controls?: string[];\n className?: string;\n onClick?: () => void;\n}\n\nexport const QuantumGate: React.FC<QuantumGateProps> = ({ \n type, \n targets, \n controls = [], \n className = '',\n onClick\n}) => {\n return (\n <div \n className={`quantum-gate ${className}`} \n data-gate-type={type}\n data-targets={targets.join(',')}\n data-controls={controls.join(',')}\n onClick={onClick}\n >\n {type}\n </div>\n );\n};","import * as React from 'react';\nimport { useState } from 'react';\n\nexport interface QuantumCircuitProps {\n qubits: number;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport interface QuantumState {\n states: string[];\n probabilities: number[];\n}\n\nexport const QuantumCircuit: React.FC<QuantumCircuitProps> = ({ \n qubits, \n className = '',\n children \n}) => {\n const [simulating, setSimulating] = useState(false);\n const [results, setResults] = useState<QuantumState | null>(null);\n \n const runSimulation = () => {\n setSimulating(true);\n \n // Simulate quantum processing...\n setTimeout(() => {\n // Generate pseudo-random \"quantum\" results\n const possibleStates = generatePossibleStates(qubits);\n const probabilities = generateProbabilities(possibleStates.length);\n \n setResults({\n states: possibleStates,\n probabilities: probabilities\n });\n \n setSimulating(false);\n }, 1500);\n };\n \n // Generate all possible binary combinations for a certain number of qubits\n const generatePossibleStates = (numQubits: number): string[] => {\n const states: string[] = [];\n const totalStates = Math.pow(2, numQubits);\n \n for (let i = 0; i < totalStates; i++) {\n const binaryString = i.toString(2).padStart(numQubits, '0');\n const ketNotation = `|${binaryString}⟩`;\n states.push(ketNotation);\n }\n \n return states;\n };\n \n // Generate random probabilities that sum to 1\n const generateProbabilities = (numStates: number): number[] => {\n const rawValues: number[] = [];\n let sum = 0;\n \n // Generate random values\n for (let i = 0; i < numStates; i++) {\n const val = Math.random();\n rawValues.push(val);\n sum += val;\n }\n \n // Normalize so the sum equals 1\n return rawValues.map(val => Number((val / sum).toFixed(4)));\n };\n \n return (\n <div className={`p-4 border-2 border-[#4C1D95] rounded-lg ${className}`}>\n <div className=\"flex justify-between items-center mb-4\">\n <h3 className=\"text-lg font-bold text-[#6D28D9]\">Quantum Circuit ({qubits} qubits)</h3>\n <button \n className=\"px-4 py-2 bg-[#6D28D9] text-white rounded-md hover:bg-[#4C1D95] transition-colors\"\n onClick={runSimulation}\n disabled={simulating}\n >\n {simulating ? 'Simulating...' : 'Simulate'}\n </button>\n </div>\n <div className=\"space-y-4 mb-4\">\n {children}\n </div>\n \n {results && (\n <div className=\"mt-6 p-4 bg-[#F3F4F6] rounded-lg border border-[#C4B5FD]\">\n <h4 className=\"text-md font-semibold text-[#6D28D9] mb-2\">Quantum Superposition Result</h4>\n <div className=\"grid grid-cols-2 gap-2\">\n {results.states.map((state, index) => (\n <div key={index} className=\"flex justify-between items-center\">\n <span className=\"font-mono\">{state}</span>\n <div className=\"flex items-center\">\n <div \n className=\"h-4 bg-[#6D28D9]\" \n style={{ width: `${results.probabilities[index] * 100}px` }}\n ></div>\n <span className=\"ml-2 text-sm\">{(results.probabilities[index] * 100).toFixed(1)}%</span>\n </div>\n </div>\n ))}\n </div>\n <p className=\"mt-4 text-xs text-gray-500 italic\">\n Probability amplitude for each possible basis state\n </p>\n </div>\n )}\n </div>\n );\n};","import * as React from 'react';\n\nexport interface QuantumWireProps {\n qubitId: string;\n className?: string;\n}\n\nexport const QuantumWire: React.FC<QuantumWireProps> = ({ qubitId, className = '' }) => {\n return (\n <div className={`quantum-wire w-full ${className}`} data-qubit-id={qubitId}></div>\n );\n};"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}