Source code for qupulse.expressions.protocol

"""This module contains the interface / protocol descriptions of ``Expression``, ``ExpressionScalar`` and
``ExpressionVector``."""

from typing import Mapping, Union, Sequence, Hashable, Any, Protocol
from numbers import Real

import numpy as np


[docs]class Ordered(Protocol): def __lt__(self, other): pass def __le__(self, other): pass def __gt__(self, other): pass def __ge__(self, other): pass
[docs]class Scalar(Protocol): def __add__(self, other): pass def __sub__(self, other): pass def __mul__(self, other): pass def __truediv__(self, other): pass def __floordiv__(self, other): pass def __ceil__(self): pass def __floor__(self): pass def __float__(self): pass def __int__(self): pass def __abs__(self): pass
[docs]class Expression(Hashable, Protocol): """This protocol defines how Expressions are allowed to be used in qupulse."""
[docs] def evaluate_in_scope(self, scope: Mapping) -> Union[Real, np.ndarray]: """Evaluate the expression by taking the variables from the given scope (typically of type Scope, but it can be any mapping.) Args: scope: Returns: """
[docs] def evaluate_symbolic(self, substitutions: Mapping[str, Any]) -> 'Expression': """Substitute a part of the expression for another"""
[docs] def evaluate_time_dependent(self, scope: Mapping) -> Union['Expression', Real, np.ndarray]: """Evaluate to a time dependent expression or a constant."""
@property def variables(self) -> Sequence[str]: """ Get all free variables in the expression. Returns: A collection of all free variables occurring in the expression. """ raise NotImplementedError()
[docs] @classmethod def make(cls, expression_or_dict, numpy_evaluation=None) -> 'Expression': """Backward compatible expression generation to allow creation from dict.""" raise NotImplementedError()
@property def underlying_expression(self) -> Any: """Return some internal unspecified representation""" raise NotImplementedError()
[docs] def get_serialization_data(self): raise NotImplementedError()
[docs]class ExpressionScalar(Expression, Scalar, Ordered, Protocol): pass
[docs]class ExpressionVector(Expression, Protocol): pass