MCPcopy
hub / github.com/google/mangle / evalStrata

Method evalStrata

engine/seminaivebottomup.go:247–308  ·  view source on GitHub ↗

evalStrata runs the evaluation for the layers.

()

Source from the content-addressed store, hash-verified

245
246// evalStrata runs the evaluation for the layers.
247func (e *engine) evalStrata() error {
248 predicateAllowList := *e.options.predicateAllowList
249 for i, fact := range e.programInfo.InitialFacts {
250 if !predicateAllowList(fact.Predicate) {
251 continue
252 }
253 f, err := functional.EvalAtom(fact, nil)
254 if err != nil {
255 return err
256 }
257
258 interval := e.programInfo.InitialFactTimes[i]
259 if interval != nil && e.temporalStore != nil {
260 if _, err := e.temporalStore.Add(f, *interval); err != nil {
261 return err
262 }
263 } else {
264 e.store.Add(f)
265 }
266 }
267 for i := 0; i < len(e.strata); i++ {
268 stratumEdbPredicates := make(map[ast.PredicateSym]struct{})
269 for j := 0; j < i; j++ {
270 for _, sym := range e.stats.Strata[j] {
271 stratumEdbPredicates[sym] = struct{}{}
272 }
273 }
274 stratumIdbPredicates := make(map[ast.PredicateSym]struct{})
275 var stratumRules []ast.Clause
276 stratumDecls := make(map[ast.PredicateSym]*ast.Decl)
277 for _, sym := range e.stats.Strata[i] {
278 stratumIdbPredicates[sym] = struct{}{}
279 stratumRules = append(stratumRules, e.predToRules[sym]...)
280 stratumDecls[sym] = e.predToDecl[sym]
281 }
282 stratifiedProgram := rewrite.Rewrite(analysis.Program{stratumEdbPredicates, stratumIdbPredicates, stratumRules})
283 start := time.Now()
284 var temporalDeltaStore factstore.TemporalFactStore
285 if e.temporalStore != nil {
286 temporalDeltaStore = factstore.NewTemporalStore()
287 }
288
289 e := engine{
290 store: e.store,
291 deltaStore: factstore.NewMultiIndexedArrayInMemoryStore(),
292 temporalStore: e.temporalStore,
293 temporalDeltaStore: temporalDeltaStore,
294 evalTime: e.evalTime,
295 programInfo: &analysis.ProgramInfo{stratifiedProgram.EdbPredicates, stratifiedProgram.IdbPredicates, nil, nil, stratifiedProgram.Rules, stratumDecls, nil},
296 predToStratum: e.predToStratum,
297 predToRules: e.predToRules,
298 predToDecl: e.predToDecl,
299 stats: e.stats,
300 options: e.options,
301 }
302 if err := e.eval(); err != nil {
303 return err
304 }

Callers 1

Calls 6

evalMethod · 0.95
EvalAtomFunction · 0.92
RewriteFunction · 0.92
NewTemporalStoreFunction · 0.92
AddMethod · 0.65

Tested by

no test coverage detected