def _extslice(self, node): value = self.visit(node.value) for dim in node.slice.dims: lower = (self.visit(dim.lower) if dim.lower is not None else None) upper = (self.visit(dim.upper) if dim.upper is not None else None) step = (self.visit(dim.step) if dim.step is not None else None) lower = vtypes.raw_value(optimize(lower)) upper = vtypes.raw_value(optimize(upper)) step = vtypes.raw_value(optimize(step)) value = value[lower:upper:step] return value
def _slice(self, node): value = self.visit(node.value) lower = (self.visit(node.slice.lower) if node.slice.lower is not None else None) upper = (self.visit(node.slice.upper) if node.slice.upper is not None else None) step = (self.visit(node.slice.step) if node.slice.step is not None else None) lower = vtypes.raw_value(optimize(lower)) upper = vtypes.raw_value(optimize(upper)) step = vtypes.raw_value(optimize(step)) return value[lower:upper:step]
def _slice(self, node): value = self.visit(node.value) lower = (self.visit(node.slice.lower) if node.slice.lower is not None else None) upper = (self.visit(node.slice.upper) if node.slice.upper is not None else None) step = (self.visit(node.slice.step) if node.slice.step is not None else None) lower = vtypes.raw_value(optimize(lower)) upper = vtypes.raw_value(optimize(upper)) step = vtypes.raw_value(optimize(step)) return value[lower:upper:step]
def _extslice(self, node): value = self.visit(node.value) for dim in node.slice.dims: lower = (self.visit(dim.lower) if dim.lower is not None else None) upper = (self.visit(dim.upper) if dim.upper is not None else None) step = (self.visit(dim.step) if dim.step is not None else None) lower = vtypes.raw_value(optimize(lower)) upper = vtypes.raw_value(optimize(upper)) step = vtypes.raw_value(optimize(step)) value = value[lower:upper:step] return value
def FixedConst(fsm, value, point=0, signed=True, raw=False): point = vtypes.raw_value(point) signed = vtypes.raw_value(signed) raw = vtypes.raw_value(raw) if (isinstance(value, fxd._FixedConstant) and value.orig_value is not None): value = value.orig_value elif isinstance(value, fxd._FixedBase): value = fxd.write_adjust(value, point) value = vtypes.raw_value(value) raw = True elif not raw: value = vtypes.raw_value(value) if not isinstance(value, (int, bool, float)): raise TypeError("value must be int, bool, or float") if not isinstance(point, int): raise TypeError("point must be int") return fxd.FixedConst(value, point, signed, raw)
def visit_Subscript(self, node): if isinstance(node.slice, ast.Slice): return self._subscript_slice(node) if isinstance(node.slice, ast.ExtSlice): return self._subscript_extslice(node) if isinstance(node.slice, ast.Index): return self._subscript_index(node) value = self.visit(node.value) index = self.visit(node.slice) index = vtypes.raw_value(optimize(index)) return value[index]
def FixedConst(fsm, value, point=0, signed=True, raw=False): point = vtypes.raw_value(point) signed = vtypes.raw_value(signed) raw = vtypes.raw_value(raw) if (isinstance(value, fxd._FixedConstant) and value.orig_value is not None): value = value.orig_value elif isinstance(value, fxd._FixedBase): value = fxd.write_adjust(value, point) value = vtypes.raw_value(value) raw = True elif not raw: value = vtypes.raw_value(value) if not isinstance(value, (int, bool, float)): raise TypeError("value must be int, bool, or float") if not isinstance(point, int): raise TypeError("point must be int") return fxd.FixedConst(value, point, signed, raw)
def fixed_to_real(fsm, value, point, signed=True): point = vtypes.raw_value(point) signed = vtypes.raw_value(signed) return fxd.fixed_to_real(value, point, signed)
def fixed_to_int(fsm, value, point): point = vtypes.raw_value(point) return fxd.fixed_to_int(value, point)
def reinterpret_cast_to_fixed(fsm, value, point, signed=True): point = vtypes.raw_value(point) signed = vtypes.raw_value(signed) return fxd.reinterpret_cast_to_fixed(value, point, signed)
def cast_to_fixed(fsm, value, point, signed=True): point = vtypes.raw_value(point) signed = vtypes.raw_value(signed) cv = fxd.write_adjust(value, point) return fxd.reinterpret_cast_to_fixed(cv, point, signed)
def cast_to_fixed(fsm, value, point, signed=True): point = vtypes.raw_value(point) signed = vtypes.raw_value(signed) cv = fxd.write_adjust(value, point) return fxd.reinterpret_cast_to_fixed(cv, point, signed)
def _index(self, node): value = self.visit(node.value) index = self.visit(node.slice.value) index = vtypes.raw_value(optimize(index)) return value[index]
def fixed_to_real(fsm, value, point, signed=True): point = vtypes.raw_value(point) signed = vtypes.raw_value(signed) return fxd.fixed_to_real(value, point, signed)
def fixed_to_int(fsm, value, point): point = vtypes.raw_value(point) return fxd.fixed_to_int(value, point)
def reinterpret_cast_to_fixed(fsm, value, point, signed=True): point = vtypes.raw_value(point) signed = vtypes.raw_value(signed) return fxd.reinterpret_cast_to_fixed(value, point, signed)
def _index(self, node): value = self.visit(node.value) index = self.visit(node.slice.value) index = vtypes.raw_value(optimize(index)) return value[index]
def FixedConst(fsm, value, point=0, signed=True, raw=False): point = vtypes.raw_value(point) return fixed.FixedConst(value, point, signed, raw)