Module pyqec.experiments
Expand source code
from math import sqrt
class Statistics:
def __init__(self):
self.number_of_successes = 0
self.number_of_failures = 0
def add_failure(self):
self.number_of_failures += 1
def add_success(self):
self.number_of_successes += 1
def sample_size(self):
return self.number_of_failures + self.number_of_successes
def failure_rate(self):
return self.number_of_failures / self.sample_size()
def success_rate(self):
return self.number_of_successes / self.sample_size()
def uncertainty(self):
assert(self.sample_size != 0)
return sqrt(
self.failure_rate()
* self.success_rate()
/ self.sample_size()
)
class ClassicalExperiment:
def __init__(self, code, decoder, noise):
self.code = code
self.decoder = decoder
self.noise = noise
def run_once(self):
error = self.noise.sample_error_of_length(self.code.block_size())
correction = self.decoder.decode(error)
return error == correction
def run_while(self, condition):
stats = Statistics()
while condition(stats):
if self.run_once():
stats.add_success()
else:
stats.add_failure()
return stats
def run_n_times(self, number_of_iterations):
self.run_while(lambda s: s.sample_size() < number_of_iterations)
Classes
class ClassicalExperiment (code, decoder, noise)
-
Expand source code
class ClassicalExperiment: def __init__(self, code, decoder, noise): self.code = code self.decoder = decoder self.noise = noise def run_once(self): error = self.noise.sample_error_of_length(self.code.block_size()) correction = self.decoder.decode(error) return error == correction def run_while(self, condition): stats = Statistics() while condition(stats): if self.run_once(): stats.add_success() else: stats.add_failure() return stats def run_n_times(self, number_of_iterations): self.run_while(lambda s: s.sample_size() < number_of_iterations)
Methods
def run_n_times(self, number_of_iterations)
-
Expand source code
def run_n_times(self, number_of_iterations): self.run_while(lambda s: s.sample_size() < number_of_iterations)
def run_once(self)
-
Expand source code
def run_once(self): error = self.noise.sample_error_of_length(self.code.block_size()) correction = self.decoder.decode(error) return error == correction
def run_while(self, condition)
-
Expand source code
def run_while(self, condition): stats = Statistics() while condition(stats): if self.run_once(): stats.add_success() else: stats.add_failure() return stats
class Statistics
-
Expand source code
class Statistics: def __init__(self): self.number_of_successes = 0 self.number_of_failures = 0 def add_failure(self): self.number_of_failures += 1 def add_success(self): self.number_of_successes += 1 def sample_size(self): return self.number_of_failures + self.number_of_successes def failure_rate(self): return self.number_of_failures / self.sample_size() def success_rate(self): return self.number_of_successes / self.sample_size() def uncertainty(self): assert(self.sample_size != 0) return sqrt( self.failure_rate() * self.success_rate() / self.sample_size() )
Methods
def add_failure(self)
-
Expand source code
def add_failure(self): self.number_of_failures += 1
def add_success(self)
-
Expand source code
def add_success(self): self.number_of_successes += 1
def failure_rate(self)
-
Expand source code
def failure_rate(self): return self.number_of_failures / self.sample_size()
def sample_size(self)
-
Expand source code
def sample_size(self): return self.number_of_failures + self.number_of_successes
def success_rate(self)
-
Expand source code
def success_rate(self): return self.number_of_successes / self.sample_size()
def uncertainty(self)
-
Expand source code
def uncertainty(self): assert(self.sample_size != 0) return sqrt( self.failure_rate() * self.success_rate() / self.sample_size() )