# -*- coding: utf-8 -*- """ Created on Fri Jul 1 16:44:59 2022 @author: timof """ import math as m import numpy as np from numba import njit log2 = np.log2 @njit def digit(num, pos): return (num%(2**(pos)))//2**(pos-1) @njit def binstr(num,size): return np.array([digit(num,pos) for pos in range(size,0,-1)], dtype=np.bool_) @njit def binint(state): return int(sum(2**np.linspace(len(state)-1,0, len(state))*state)) @njit def binpart(state, num, part, part_comp): num_str = binstr(num, len(part_comp)) num_dict = {pos:num_str[numpos] for numpos, pos in enumerate(part_comp)} num_state = [sta if pos in part else num_dict[pos] for pos, sta in enumerate(state)] num_state = np.array(num_state) [num_state[pos] for pos in range(len(state))] return int(sum(2**np.linspace(len(num_state)-1,0, len(num_state))*num_state)) q = np.array([True,True,True,True,True,True,True,True]) print(binpart(q, 1, list(range(6)), [6,7]))