UNPKG

ts-quantum

Version:

TypeScript library for quantum mechanics calculations and utilities

71 lines 2.78 kB
"use strict"; /** * Multi-type quantum composition operations */ Object.defineProperty(exports, "__esModule", { value: true }); exports.partialTrace = exports.bipartiteSplit = exports.composeOperators = exports.composeStates = exports.composeSpaces = void 0; const stateVector_1 = require("./stateVector"); const validation_1 = require("../utils/validation"); /** * Composes multiple Hilbert spaces via tensor product */ function composeSpaces(spaces) { if (spaces.length === 0) { throw new Error('Empty spaces array'); } return spaces.reduce((acc, space) => acc.tensorProduct(space)); } exports.composeSpaces = composeSpaces; /** * Composes multiple state vectors via tensor product */ function composeStates(states) { if (states.length === 0) { throw new Error('Empty states array'); } // Convert to StateVector instances if needed and use tensorProduct const stateVectors = states.map(state => state instanceof stateVector_1.StateVector ? state : new stateVector_1.StateVector(state.dimension, state.amplitudes, state.basis)); return stateVectors.reduce((acc, state) => acc.tensorProduct(state)); } exports.composeStates = composeStates; /** * Composes multiple operators via tensor product */ function composeOperators(operators) { if (operators.length === 0) { throw new Error('Empty operators array'); } const [first, ...rest] = operators; return rest.reduce((acc, op) => acc.tensorProduct(op), first); } exports.composeOperators = composeOperators; /** * Creates a bipartite split of a Hilbert space */ function bipartiteSplit(space, firstDimension) { const totalDim = space.dimension; if (totalDim % firstDimension !== 0) { throw new Error('First dimension must divide total dimension'); } const secondDimension = totalDim / firstDimension; return space.decompose([firstDimension, secondDimension]); } exports.bipartiteSplit = bipartiteSplit; /** * Wrapper for partial trace operation that handles composite systems. * This function provides a convenient interface for performing partial trace * operations on composite quantum systems. * * @param operator - The quantum operator to perform partial trace on * @param dims - Array of dimensions for each subsystem * @param traceOutIndices - Indices of subsystems to trace out * @returns Reduced operator after tracing out specified subsystems */ function partialTrace(operator, dims, traceOutIndices) { // Use standardized validation (0, validation_1.validatePartialTrace)(dims, operator.dimension, traceOutIndices); // Delegate to operator's implementation return operator.partialTrace(dims, traceOutIndices); } exports.partialTrace = partialTrace; //# sourceMappingURL=composite.js.map