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
No checking performed. Property values ignored.
Raise an error if the property is not satisfied. Unknown is assumed to be a satisfied property.
Raise an error if the property is not satisfied or Unknown.
If property is Unknown, calculate the property. Raise an error if the property is not satisfied.
Recalculate the property. Raise an error if the property is not satisfied.
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
No checking performed.
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).
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
Unknown
Unknown
,True
,False
Unknown
,RealValues
,NonNegative
,StrictlyPositive
Informal properties
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
Unknown
is assumed to be a satisfied property.Unknown
.Unknown
, calculate the property. Raise an error if the property is not satisfied.Unknown
.Informal property checking levels
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).