def fit_piecewise_linear_trace(cls, tr): ranges = TraceApproximator.find_levels(tr.data_pts_np) pieces = [] for r0, r1 in ranges: x = np.mean(tr.data_pts[r0:r1]) p = TracePieceFunctionFlat(time_window=(tr.time_pts[r0], tr.time_pts[r1]), x=x) pieces.append(p) tr = TracePiecewise(pieces, name=tr.name, comment=tr.comment, tags=tr.tags) return tr
def _clone_piecewise(tr): tr_new = TracePiecewise(pieces = [copy.copy(piece) for piece in tr.pieces]) copy_trace_attrs(tr, tr_new, comment='+(cloned)') return tr_new
def do_op_piecewise_pow_scalar(lhs, rhs): pieces = [PiecewiseOperationLHS.visit(lhs_piece=piece, operator_type=operator.__pow__, rhs_scalar=rhs) for piece in lhs.pieces] return TracePiecewise(pieces)
def do_div(cls, lhs, rhs): return TracePiecewise( [PiecewiseOperationLHS.visit(lhs_piece=piece, operator_type=operator.__div__, rhs_scalar=rhs) for piece in lhs.pieces] )
def do_mul(cls, lhs, rhs): return TracePiecewise( [PiecewiseOperationRHS.visit(rhs_piece=piece, operator_type=operator.__mul__, lhs_scalar=lhs) for piece in rhs.pieces] )