Skip to content

Better mechanism to control SetterFlags #3

Open
@PMeira

Description

@PMeira

Currently this is an advanced feature, and users need to leave the comfort of the Python properties, using instead the setter methods in order to pass both a value and the flags.

Some context, from the tests:

    alt.Clear()
    ls = alt.LoadShape.new('test_shape')
    with pt.raises(DSSException):
        ls.PMult = [1.0, 2.0, 3.0]

    ls._set_PMult([1.0, 2.0, 3.0], SetterFlags.ImplicitSizes)
    assert tuple(ls.PMult) == (1.0, 2.0, 3.0)

    ls.end_edit()

Some possible alternatives:

  • Use a context manager in Python to keep the flags used in a block, use these flags on each Python function (when passing to the C API) and reset them later. This could be combined with the Edit context manager later.
with alt.with_setter_flags(SetterFlags.ImplicitSizes):
    ls = alt.LoadShape.new('test_shape')
    ls.PMult = [1.0, 2.0, 3.0]
    assert tuple(ls.PMult) == (1.0, 2.0, 3.0)
    ls.end_edit()
  • Introduce a pair of API functions to control some default flags, expose it as a property. For this, we wouldn't need to change much of the Python code, but would require consuming the default flags on the engine:
    alt.DefaultSetterFlags = SetterFlags.ImplicitSizes
#...
    ls = alt.LoadShape.new('test_shape')
    ls.PMult = [1.0, 2.0, 3.0]
    assert tuple(ls.PMult) == (1.0, 2.0, 3.0)
    ls.end_edit()

Other examples include using SetterFlags.AvoidFullRecalc to minimize Yprim and SystemY changes for loads and generators. This is valid for both individual and batch operations.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions