Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Property checking levels #8

Open
jim22k opened this issue Apr 24, 2020 · 0 comments
Open

Property checking levels #8

jim22k opened this issue Apr 24, 2020 · 0 comments

Comments

@jim22k
Copy link
Member

jim22k commented Apr 24, 2020

In the 2020-04-22 meeting, property checking levels were discussed. I want to expand on that idea a bit more.

First, let's separate formal properties from informal properties.

Formal properties

  • Are part of the struct
  • Have multiple enumerated values, including the default Unknown
    • Might be simple: Unknown, True, False
    • Might be more complicated: Unknown, RealValues, NonNegative, StrictlyPositive

Informal properties

  • Not part of the graph struct (although could be added in a future release)
  • Always have an implied value of Unknown

LAGraph algorithms can indicate required property values (both formal and informal) in their description. Descriptor bits control property checking. There is one descriptor bit for formal properties and a separate one for informal properties.

Formal property checking levels

  1. No checking performed. Property values ignored.
  2. Raise an error if the property is not satisfied. Unknown is assumed to be a satisfied property.
  3. Raise an error if the property is not satisfied or Unknown.
  4. If property is Unknown, calculate the property. Raise an error if the property is not satisfied.
  5. Recalculate the property. Raise an error if the property is not satisfied.
  6. Recalculate the property. Raise an error if the property is not satisfied or if the property changes and was not originally Unknown.

Informal property checking levels

  1. No checking performed.
  2. Calculate the property. Raise an error if the property is not satisfied.

While all levels are useful in different situations, I think the two most common modes will be Run Fast (formal=0, informal=0) and Check as Needed (formal=3, informal=1).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant