UNPKG

ts-quantum

Version:

TypeScript library for quantum mechanics calculations and utilities

142 lines 5.29 kB
"use strict"; /** * Common quantum states implementation */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createMinusState = exports.createPlusState = exports.createWState = exports.createGHZState = exports.createBellState = exports.createBasisState = exports.computationalBasis = void 0; const stateVector_1 = require("./stateVector"); const math = __importStar(require("mathjs")); /** * Creates computational basis states for multi-qubit system */ function computationalBasis(numQubits) { if (numQubits < 1) { throw new Error('Number of qubits must be positive'); } const dimension = 2 ** numQubits; const basis = []; for (let i = 0; i < dimension; i++) { const state = new stateVector_1.StateVector(dimension); state.setState(i, math.complex(1, 0)); basis.push(state); } return basis; } exports.computationalBasis = computationalBasis; /** * Creates a specific computational basis state |index⟩ */ function createBasisState(dimension, index) { if (index < 0 || index >= dimension) { throw new Error(`Index ${index} out of bounds for dimension ${dimension}`); } const state = new stateVector_1.StateVector(dimension); state.setState(index, math.complex(1, 0)); return state; } exports.createBasisState = createBasisState; /** * Creates a Bell state */ function createBellState(type) { // Create two-qubit state space const state = new stateVector_1.StateVector(4); switch (type) { case 'Phi+': // |00⟩ + |11⟩)/√2 state.setState(0, math.complex(1 / Math.sqrt(2), 0)); state.setState(3, math.complex(1 / Math.sqrt(2), 0)); break; case 'Phi-': // |00⟩ - |11⟩)/√2 state.setState(0, math.complex(1 / Math.sqrt(2), 0)); state.setState(3, math.complex(-1 / Math.sqrt(2), 0)); break; case 'Psi+': // |01⟩ + |10⟩)/√2 state.setState(1, math.complex(1 / Math.sqrt(2), 0)); state.setState(2, math.complex(1 / Math.sqrt(2), 0)); break; case 'Psi-': // |01⟩ - |10⟩)/√2 state.setState(1, math.complex(1 / Math.sqrt(2), 0)); state.setState(2, math.complex(-1 / Math.sqrt(2), 0)); break; } return state; } exports.createBellState = createBellState; /** * Creates a GHZ state (|000...0⟩ + |111...1⟩)/√2 */ function createGHZState(numQubits) { if (numQubits < 2) { throw new Error('GHZ state requires at least 2 qubits'); } const dimension = 2 ** numQubits; const state = new stateVector_1.StateVector(dimension); // Set first and last computational basis states state.setState(0, math.complex(1 / Math.sqrt(2), 0)); state.setState(dimension - 1, math.complex(1 / Math.sqrt(2), 0)); return state; } exports.createGHZState = createGHZState; /** * Creates a W state |W_n⟩ = (|100...0⟩ + |010...0⟩ + ... + |000...1⟩)/√n */ function createWState(numQubits) { if (numQubits < 2) { throw new Error('W state requires at least 2 qubits'); } const dimension = 2 ** numQubits; const state = new stateVector_1.StateVector(dimension); const amplitude = math.complex(1 / Math.sqrt(numQubits), 0); // Set states with exactly one 1 for (let i = 0; i < numQubits; i++) { const index = 2 ** i; // Position of single 1 in binary representation state.setState(index, amplitude); } return state; } exports.createWState = createWState; /** * Creates a single-qubit |+⟩ state (|0⟩ + |1⟩)/√2 */ function createPlusState() { const state = new stateVector_1.StateVector(2); const amplitude = math.complex(1 / Math.sqrt(2), 0); state.setState(0, amplitude); state.setState(1, amplitude); return state; } exports.createPlusState = createPlusState; /** * Creates a single-qubit |-⟩ state (|0⟩ - |1⟩)/√2 */ function createMinusState() { const state = new stateVector_1.StateVector(2); state.setState(0, math.complex(1 / Math.sqrt(2), 0)); state.setState(1, math.complex(-1 / Math.sqrt(2), 0)); return state; } exports.createMinusState = createMinusState; //# sourceMappingURL=states.js.map