Source code for blind_transpiler.global_value_store


[docs] class GlobalVariablesAndFunctions: def __init__(self): self.epsilon_precision = 1e-10 self.M = self._define_M_using_epsilon_precision(self.epsilon_precision) # variables for classifition (not using rightnow) - Note first is taken as default self.blinding_format = ['qhe','fdqc','ssdqc','ubqc'] self.random_key_style = ['rand','rand_fix','all_1','all_0'] self.circuit_const_type = ['complete', 'client_only', 'server_only','encrypt_only'] self.instr_type = ['client', 'enc', 'dec', 'compute', 'swap', 'trap' , 'measure'] self.qhe_client_basis = ['x','z','swap','measure'] self.qhe_server_basis = ['h', 's', 'cx','cz','ccx', 't', 'rz'] self.qhe_compute_space = 1 self.ssdqc_client_basis = ['x','z','swap','measure'] self.ssdqc_server_basis = ['h', 's', 'sdg' ,'cx','cz','ccx', 't', 'tdg'] self.ssdqc_compute_space = 3 self.fdqc_client_basis = ['x','z','swap','measure'] self.fdqc_server_basis = ['h', 's', 'sdg', 'cx','cz','ccx', 't', 'tdg'] # self.fdqc_server_basis = ['h', 's', 't', 'sdg', 'tdg'] self.fdqc_compute_space = 11 self.ubqc_client_basis = ['x','z','swap','measure'] self.ubqc_server_basis = ['h','cz', 'rz'] self.ubqc_compute_space = 4 # Note following identities have been used to find key size of tdg and sdg # sdq = s.s.s = z.s # tdg = t^7 = s.s.s.t = z.s.t self.qhe_key_map = {'h': 2, 's': 2, 'cx': 4, 'cz': 4, 'ccx': 18, 't': 4, 'rz': self._define_M2_using_epsilon_precision(self.epsilon_precision)} # rz = 2 is temporary fix self.ssdqc_key_map = {'h': 6, 's': 6, 'sdg':6, 'cx': 6, 'cz': 6, 'ccx': 18, 't': 8, 'tdg': 8+6} self.fdqc_key_map = {'h': 2, 's': 2, 'sdg':2, 'cx': 4, 'cz': 4, 'ccx': 18, 't': 4, 'tdg':6} self.ubqc_key_map = {'h': self._define_M2_using_epsilon_precision(self.epsilon_precision), 'cz': self._define_M2_using_epsilon_precision(self.epsilon_precision), 'rz': self._define_M2_using_epsilon_precision(self.epsilon_precision)} # rz needs 2m keys # micro management settings self.optimization_level = 0 # sets the transpilation level to the least available self.recursion_degree = 5 # sets recursion to highest in solovay kitaev pass def _define_M_using_epsilon_precision(self, epsilon): from math import log, ceil,pi return ceil(log(pi/epsilon)) def _define_M2_using_epsilon_precision(self, epsilon): from math import log, ceil,pi return (ceil(log(pi/epsilon)))**2