Module rpps.serial.file

Wrapper for processing files

Functions

def read_f16(path, count, offset)
Expand source code
def read_f16(path, count, offset):
    samps = np.fromfile(path, offset=offset, count=count, dtype=np.float16)
    return formats.from_f16(samps)
def read_f32(path, count, offset)
Expand source code
def read_f32(path, count, offset):
    samps = np.fromfile(path, offset=offset, count=count, dtype=np.float32)
    return formats.from_f32(samps)
def read_i16(path, count, offset)
Expand source code
def read_i16(path, count, offset):
    samps = np.fromfile(path, offset=offset, count=count, dtype=np.int16)
    return formats.from_i16(samps)
def read_i8(path, count, offset)
Expand source code
def read_i8(path, count, offset):
    samps = np.fromfile(path, offset=offset, count=count, dtype=np.int8)
    return formats.from_i8(samps)

Classes

class File (fmt, path)
Expand source code
class File:
    def __init__(self, fmt, path):
        self.fmt = Formats[fmt]
        self.path = path
        self.cur_samp = 0
        self.max_samp = os.path.getsize(path) // self.fmt.size

    def __str__(self):
        return f"File ({self.cur_samp}/{self.max_samp},{self.fmt.name}): {self.path}"

    def read(self, count):
        count *= 2
        if self.cur_samp + count > self.max_samp:
            raise err.Overflow(f"{self.cur_samp}+{count} > {self.max_samp}")
        samps = self.fmt.read(self.path, count, self.cur_samp)
        self.cur_samp += count
        return samps

    def __call__(self, count):
        return self.iter(count)

    def iter(self, count):
        while self.cur_samp + count <= self.max_samp:
            yield self.read(count)

    @property
    def percent(self):
        return self.cur_samp/self.max_samp

Instance variables

prop percent
Expand source code
@property
def percent(self):
    return self.cur_samp/self.max_samp

Methods

def iter(self, count)
Expand source code
def iter(self, count):
    while self.cur_samp + count <= self.max_samp:
        yield self.read(count)
def read(self, count)
Expand source code
def read(self, count):
    count *= 2
    if self.cur_samp + count > self.max_samp:
        raise err.Overflow(f"{self.cur_samp}+{count} > {self.max_samp}")
    samps = self.fmt.read(self.path, count, self.cur_samp)
    self.cur_samp += count
    return samps
class Formats (*args, **kwds)
Expand source code
class Formats(Enum):
    i8  = (2, read_i8)
    i16 = (4, read_i16)
    f16 = (4, read_f16)
    f32 = (8, read_f32)

    @property
    def size(self):
        return self.value[0]

    def read(self, path, count, offset):
        return self.value[1](path, count, offset*self.size)

Create a collection of name/value pairs.

Example enumeration:

>>> class Color(Enum):
...     RED = 1
...     BLUE = 2
...     GREEN = 3

Access them by:

  • attribute access:

Color.RED

  • value lookup:

Color(1)

  • name lookup:

Color['RED']

Enumerations can be iterated over, and know how many members they have:

>>> len(Color)
3
>>> list(Color)
[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]

Methods can be added to enumerations, and members can have their own attributes – see the documentation for details.

Ancestors

  • enum.Enum

Class variables

var f16
var f32
var i16
var i8

Instance variables

prop size
Expand source code
@property
def size(self):
    return self.value[0]

Methods

def read(self, path, count, offset)
Expand source code
def read(self, path, count, offset):
    return self.value[1](path, count, offset*self.size)