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