# qml.math¶

This package contains unified functions for framework-agnostic tensor and array manipulation. Given the input tensor-like object, the call is dispatched to the corresponding array manipulation framework, allowing for end-to-end differentiation to be preserved.

Warning

These functions are experimental, and only a subset of common functionality is supported. Furthermore, the names and behaviour of these functions may differ from similar functions in common frameworks; please refer to the function docstrings for more details.

The following frameworks are currently supported:

• NumPy

 add(*args[, like]) Add arguments element-wise. allclose(a, b[, rtol, atol]) Returns True if two arrays are element-wise equal within a tolerance. allequal(tensor1, tensor2, **kwargs) Returns True if two tensors are element-wise equal along a given axis. array(*args[, like]) Creates an array or tensor object of the target framework. block_diag(values[, like]) Combine a sequence of 2D tensors to form a block diagonal tensor. cast(tensor, dtype) Casts the given tensor to a new type. cast_like(tensor1, tensor2) Casts a tensor to the same dtype as another. concatenate(values[, axis, like]) Concatenate a sequence of tensors along the specified axis. convert_like(tensor1, tensor2) Convert a tensor to the same type as another. cov_matrix(prob, obs[, wires, diag_approx]) Calculate the covariance matrix of a list of commuting observables, given the joint probability distribution of the system in the shared eigenbasis. detach(tensor[, like]) Detach a tensor from its trace and return just its numerical values. diag(values[, k, like]) Construct a diagonal tensor from a list of scalars. dm_from_state_vector(state[, check_state, …]) Convenience function to compute a (full) density matrix from a state vector. dot(tensor1, tensor2[, like]) Returns the matrix or dot product of two tensors. einsum(indices, *operands[, like, optimize]) Evaluates the Einstein summation convention on the operands. expand_matrix(mat, wires[, wire_order, …]) Re-express a matrix acting on a subspace defined by a set of wire labels according to a global wire order. expectation_value(operator_matrix, state_vector) Compute the expectation value of an operator with respect to a pure state. eye(*args[, like]) Creates an identity array or tensor object of the target framework. fidelity(state0, state1[, check_state, c_dtype]) Compute the fidelity for two states (given as density matrices) acting on quantum systems with the same size. fidelity_statevector(state0, state1[, …]) Compute the fidelity for two states (given as state vectors) acting on quantum systems with the same size. frobenius_inner_product(A, B[, normalize, like]) Frobenius inner product between two matrices. An interface independent way of getting the name of the datatype. get_interface(*values) Determines the correct framework to dispatch to given a tensor-like object or a sequence of tensor-like objects. get_deep_interface(value) Given a deep data structure with interface-specific scalars at the bottom, return their interface name. get_trainable_indices(values[, like]) Returns a set containing the trainable indices of a sequence of values. in_backprop(tensor[, interface]) Returns True if the tensor is considered to be in a backpropagation environment, it works for Autograd, TensorFlow and Jax. is_abstract(tensor[, like]) Returns True if the tensor is considered abstract. is_independent(func, interface, args[, …]) Test whether a function is independent of its input arguments, both numerically and analytically. iscomplex(tensor[, like]) Return True if the tensor has a non-zero complex component. marginal_prob(prob, axis) Compute the marginal probability given a joint probability distribution expressed as a tensor. max_entropy(state, indices[, base, …]) Compute the maximum entropy of a density matrix on a given subsystem. min_entropy(state, indices[, base, …]) Compute the minimum entropy from a density matrix. multi_dispatch([argnum, tensor_list]) Decorater to dispatch arguments handled by the interface. mutual_info(state, indices0, indices1[, …]) Compute the mutual information between two subsystems given a state: ones_like(tensor[, dtype]) Returns a tensor of all ones with the same shape and dtype as the input tensor. partial_trace(matrix, indices[, c_dtype]) Compute the reduced density matrix by tracing out the provided indices. purity(state, indices[, check_state, c_dtype]) Computes the purity of a density matrix. reduce_dm(density_matrix, indices[, …]) Compute the density matrix from a state represented with a density matrix. reduce_statevector(state, indices[, …]) Compute the density matrix from a state vector. relative_entropy(state0, state1[, base, …]) Compute the quantum relative entropy of one state with respect to another. requires_grad(tensor[, interface]) Returns True if the tensor is considered trainable. sqrt_matrix(density_matrix) Compute the square root matrix of a density matrix where $$\rho = \sqrt{\rho} \times \sqrt{\rho}$$ scatter_element_add(tensor, index, value[, like]) In-place addition of a multidimensional value over various indices of a tensor. stack(values[, axis, like]) Stack a sequence of tensors along the specified axis. svd(tensor[, like]) Compute the singular value decomposition of a tensor in each interface. tensordot(tensor1, tensor2[, axes, like]) Returns the tensor product of two tensors. trace_distance(state0, state1[, …]) Compute the trace distance between two quantum states. unwrap(values[, max_depth]) Unwrap a sequence of objects to NumPy arrays. vn_entropy(state, indices[, base, …]) Compute the Von Neumann entropy from a density matrix on a given subsystem. vn_entanglement_entropy(state, indices0, …) Compute the Von Neumann entanglement entropy between two subsystems in a given state. where(condition[, x, y]) Returns elements chosen from x or y depending on a boolean tensor condition, or the indices of entries satisfying the condition.