EquivalenceClasses

Usage

use EquivalenceClasses;

Provides an abstraction used to efficiently compute equivalence classes. An equivalence class is a set where all elements of that set are equivalent to each other. The cmpType is used to determine the equivalence class associated with a keyType. For example, if the keyType is a hyperedge, the cmpType is the set of vertices that are incident in it. Each equivalence class has what is known as a candidate, which is an arbitrarily chosen leader for an equivalence class, making it easy to select which keyType to keep based on duplicate cmpType.

class Equivalence
type keyType
type cmpType
var eqclassesDom: domain(cmpType)
var eqclasses: [eqclassesDom] keyType
var candidatesDom: domain(keyType)
var candidates: [candidatesDom] domain(keyType)
proc init(type keyType)
proc init(type keyType, type cmpType)
iter getEquivalenceClasses(): keyType
iter getEquivalenceClasses(param tag: iterKind): keyType
iter getCandidates(key: keyType): keyType
iter getCandidates(key: keyType, param tag: iterKind): keyType
proc add(key: keyType)
proc add(key: keyType, cmp: cmpType)

Adds ‘key’ to an equivalence class, or making it the candidate if no current equivalence class exists.

proc add(other: this.type)

Adds another equivalence class to this one.

proc reduction()
proc readWriteThis(f)
class ReduceEQClass: ReduceScanOp
type keyType
type cmpType
var value: unmanaged keyTypeEquivalencecmpType
proc init(eq: unmanaged ?keyTypeEquivalence?cmpType)
proc init(type keyType, type cmpType)
proc identity
proc accumulate(x)
proc accumulateOntoState(ref state, x)
proc combine(x)
proc generate()
proc clone()
proc main()