forked from M-Labs/artiq
language/scan: fix random scan, add explicit scan, specify what runs on host/device
This commit is contained in:
parent
deaa492566
commit
937ca853aa
|
@ -1,4 +1,6 @@
|
|||
from random import Random
|
||||
from random import Random, shuffle
|
||||
|
||||
from artiq.language.core import *
|
||||
|
||||
|
||||
class LinearScan:
|
||||
|
@ -7,28 +9,32 @@ class LinearScan:
|
|||
self.max = max
|
||||
self.npoints = npoints
|
||||
|
||||
@portable
|
||||
def _gen(self):
|
||||
r = self.max - self.min
|
||||
d = self.npoints - 1
|
||||
for i in range(self.npoints):
|
||||
yield r*i/d + self.min
|
||||
|
||||
@portable
|
||||
def __iter__(self):
|
||||
return self._gen()
|
||||
|
||||
|
||||
class RandomScan:
|
||||
def __init__(self, min, max, npoints, seed=0):
|
||||
self.min = min
|
||||
self.max = max
|
||||
self.npoints = npoints
|
||||
self.seed = 0
|
||||
|
||||
def _gen(self):
|
||||
prng = Random(self.seed)
|
||||
r = self.max - self.min
|
||||
for i in range(self.npoints):
|
||||
yield prng.random()*r + self.min
|
||||
self.sequence = list(LinearScan(min, max, npoints))
|
||||
shuffle(self.sequence, Random(seed).random)
|
||||
|
||||
@portable
|
||||
def __iter__(self):
|
||||
return self._gen()
|
||||
return iter(self.sequence)
|
||||
|
||||
|
||||
class ExplicitScan:
|
||||
def __init__(self, sequence):
|
||||
self.sequence = sequence
|
||||
|
||||
@portable
|
||||
def __iter__(self):
|
||||
return iter(self.sequence)
|
||||
|
|
Loading…
Reference in New Issue