Source code for qailab.utils
 1""" Utility functions """
 2import itertools
 3import numpy as np
 4
 5
[docs]
 6def number_to_bit_tuple(number: int, size: int) -> tuple[int, ...]:
 7    """Changes number to tuple of bits.
 8
 9    Args:
10        number (int): number
11
12    Returns:
13        tuple[int]: tuple with bits
14    """
15    bits = list(map(int, bin(int(number))[2:]))
16    bits = [0] * (size - len(bits)) + bits
17    return tuple(map(int, bits)) 
18
19
[docs]
20def distribution_to_array(distribution: dict[tuple[int, ...], float]) -> np.ndarray:
21    """Changes the distribution into the one dimensional array with size 2^n of respective values for each permutation.
22
23    Args:
24        distribution (dict[tuple[int, ...], float]): the distribution in given format.
25
26    Returns:
27        np.ndarray: one dimensional array of given distribution.
28    """
29    size = len(next(iter(distribution.keys())))
30    array = np.zeros((2**size,))
31    for ind, combination in enumerate(itertools.product((0, 1), repeat=size)):
32        array[ind] = distribution[combination]
33    return array