Ejemplo n.º 1
0
 def __add__(self, obj) -> "optplan.Sum":
     if isinstance(obj, optplan.Sum):
         return obj.__add__(self)
     if isinstance(obj, optplan.Constant):
         return optplan.Sum(functions=[self, obj])
     if isinstance(obj, (numbers.Number, optplan.ComplexNumber)):
         return optplan.Sum(functions=[self, optplan.make_constant(obj)])
     if isinstance(obj, Function):
         return optplan.Sum(functions=[self, obj])
     raise TypeError("Attempting to add node with type {}".format(type(obj)))
Ejemplo n.º 2
0
def test_sum_add_to_sum():
    var1 = optplan.Parameter()
    var2 = optplan.Parameter()
    var3 = optplan.Parameter()
    var4 = optplan.Parameter()
    sum1 = optplan.Sum(functions=[var1, var2])
    sum2 = optplan.Sum(functions=[var3, var4])
    sum3 = sum1 + sum2

    assert isinstance(sum3, optplan.Sum)
    assert sum3.functions == [var1, var2, var3, var4]
Ejemplo n.º 3
0
def test_validate_references_nested_raises_value_error():
    with pytest.raises(ValueError, match="Expected type"):
        optplan.validate_references(
            optplan.Sum(functions=[
                optplan.Power(
                    function=optplan.Sum(functions=[
                        optplan.make_constant(2),
                        optplan.SimulationSpace()
                    ])),
                optplan.make_constant(2)
            ]))
Ejemplo n.º 4
0
def test_sum_add_bad_node_raise_type_error():
    var1 = optplan.Parameter()
    var2 = optplan.Parameter()
    sum1 = optplan.Sum(functions=[var1, var2])

    with pytest.raises(TypeError, match="add a node"):
        sum1 + optplan.SimulationSpace()
Ejemplo n.º 5
0
def test_sum_add_to_fun():
    var1 = optplan.Parameter()
    var2 = optplan.Parameter()
    var3 = optplan.Parameter()
    sum1 = optplan.Sum(functions=[var1, var2])
    sum2 = sum1 + var3

    assert isinstance(sum2, optplan.Sum)
    assert sum2.functions == [var1, var2, var3]
Ejemplo n.º 6
0
def test_sum_add_to_value():
    var1 = optplan.Parameter()
    var2 = optplan.Parameter()
    sum1 = optplan.Sum(functions=[var1, var2])
    sum2 = sum1 + 3

    assert isinstance(sum2, optplan.Sum)
    assert var1 in sum2.functions
    assert var2 in sum2.functions
    assert sum2.functions[-1].value.real == 3
    assert sum2.functions[-1].value.imag == 0
Ejemplo n.º 7
0
def test_dumps():
    plan = optplan.OptimizationPlan(
        nodes=[
            optplan.Sum(
                functions=[
                    optplan.Constant(value=optplan.ComplexNumber(real=2)),
                    optplan.Constant(value=optplan.ComplexNumber(real=3)),
                ],)
        ],)

    plan_dict = json.loads(optplan.dumps(plan))
Ejemplo n.º 8
0
def test_dumps_duplicate_name_raises_value_error():
    plan = optplan.OptimizationPlan(
        nodes=[
            optplan.Sum(
                functions=[
                    optplan.Constant(
                        name="const", value=optplan.ComplexNumber(real=2)),
                    optplan.Constant(
                        name="const", value=optplan.ComplexNumber(real=3)),
                ],)
        ],)

    with pytest.raises(ValueError, match="Nonunique name found"):
        optplan.dumps(plan)
Ejemplo n.º 9
0
def test_custom_function_node():

    @optplan.register_node_type(optplan.NodeMetaType.OPTPLAN_NODE)
    class CustomOp(optplan.Function):
        type = schema_utils.polymorphic_model_type("custom_op")
        int_val = types.IntType()

    plan = optplan.OptimizationPlan(
        nodes=[
            optplan.Sum(
                functions=[
                    optplan.Constant(value=optplan.ComplexNumber(real=2)),
                    CustomOp(int_val=3),
                ],)
        ],)

    optplan.loads(optplan.dumps(plan))
Ejemplo n.º 10
0
def test_validate_references_lists_raises_value_error():
    with pytest.raises(ValueError, match="Expected type"):
        optplan.validate_references(
            optplan.Sum(functions=[optplan.SimulationSpace()]))
Ejemplo n.º 11
0
def test_problem_node_bad_name_raises_value_error():
    with pytest.raises(ValueError, match="cannot start with two underscores"):
        optplan.Sum(name="__doubleunderscore")