# General Functions

In Hilbert Space, nobody can hear you scream...

### Hilbert Space

The primary mathematical object in quantum theory is the Hilbert space. We consider only finite-dimensional Hilbert spaces, denoted by
$\mathcal{H}$
. Although we will be considering finite-dimensional spaces exclusively, we note here that many of the statements and claims extend directly to the case of separable, infinite-dimensional Hilbert spaces, especially for operationally-defined tasks and information quantities.
A
$d$
-dimensional Hilbert space
$(1 \le d < \infty)$
is defined to be a complex vector space equipped with an inner product. We use the notation
$|\psi\rangle$
to denote a vector in
$\mathcal{H}$
. More generally, a Hilbert space is a "complete inner product" space.
Completeness is an issue that pops up only in infinite-dimensional spaces, so all finite-dimensional inner-product spaces are Hilbert spaces.

### Bra-Ket Notation

A ket is of the form
$|v\rangle }$
. Mathematically it denotes a vector,
${\boldsymbol {v}}$
, in an abstract (complex) vector space
$V$
, and physically it represents a state of some quantum system. An example of a Ket can be
$|r\rangle } = \begin{bmatrix} x \\ y\\ z\end{bmatrix}$
represents a vector
$\vec{r} } = \begin{bmatrix} x \\ y\\ z\end{bmatrix$
.
A bra is of the form
$\langle f|$
. Mathematically it denotes a linear form
$f:V\to \mathbb {C}$
, i.e. a linear map that maps each vector in
$V$
to a number in the complex plane
$\mathbb {C}$
. Letting the linear functional
$\langle f|$
act on a vector
$|v\rangle$
is written as
$\langle f|v\rangle \in \mathbb {C}$
. The bra is similar to the ket, but the values are in a row, and each element is the complex conjugate of the ket's elements.
In the simple case where we consider the vector space
$\mathbb {C} ^{n}$
, a ket can be identified with a column vector, and a bra as a row vector.

#### Meaning :

$\langle A| }=\begin{bmatrix}A_1&A_2&A_3&\dots\end{bmatrix$
&
$|B\rangle }=\begin{bmatrix}B_1\\B_2\\B_3\\\vdots\end{bmatrix$

#### Example:

$|0\rangle }=\begin{bmatrix}1\\0\end{bmatrix$
, for two dimensional Hilbert Space ,
Defining a basis state
$|0\rangle$
, we can use the ket module like this:
from qutipy.general_functions import ket
# Defining a ket 0 in a 2Dimensional Hilbert space,
# The first argument takes a dimension of the Hilbert space,
# while the secind argument takes the ket value.
v = ket(2,0)
Here we have defined the ket v for
$|v\rangle } = \begin{bmatrix} 1 \\ 0 \end{bmatrix$
. In numpy, defining the same would need one to define the matrix manually, just as shown in the Overview section.

### Partial Transpose

The Partial Transpose plays an important role in quantum information theory due to its connection with entanglement. In fact, it leads to a sufficient condition for a bipartite state to be entangled.
Given quantum systems
$A$
and
$B$
, the partial transpose on
$B$
is denoted by
$T_B\equiv id_A \otimes T_B$
, and it is defined as,
$T_B(X_{AB}) := \sum\limits^{d_B-1}_{j, j'=0} (\mathbf{1}_A \otimes \ket{i}\bra{i'}_B) X_{AB} (\mathbf{1}_A \otimes \ket{i}\bra{i'}_B)$
partial_transpose(...) is a function that computes the partial transpose of a matrix. The transposition may be taken on any subset of the subsystems on which the matrix acts.
Defining a state X with [ ... ]
import numpy as np
X = np.array(
[
[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]
]
)
Now we can apply the partial_transpose function over our state X :
from qutipy.general_functions import partial_transpose
pt = partial_transpose(X, , X.shape)