Model

class pyAgrum.BayesNet(*args)

BayesNet represents a Bayesian network.

BayesNet(name=’’) -> BayesNet
Parameters:
  • name (str) – the name of the Bayes Net
BayesNet(source) -> BayesNet
Parameters:
  • source (pyAgrum.BayesNet) – the Bayesian network to copy
add(self, var)

add(self, name, nbrmod) -> int add(self, var, aContent) -> int add(self, var, id) -> int add(self, var, aContent, id) -> int

Add a variable to the pyAgrum.BayesNet.

Parameters:
  • variable (pyAgrum.DiscreteVariable) – the variable added
  • name (str) – the variable name
  • nbrmod (int) – the number of modalities for the new variable
  • id (int) – the variable forced id in the pyAgrum.BayesNet
Returns:

the id of the new node

Return type:

int

Raises:
  • gum.DuplicateLabel – If variable.name() is already used in this pyAgrum.BayesNet.
  • gum.NotAllowed – If nbrmod is less than 2
  • gum.DuplicateElement – If id is already used.
addAMPLITUDE(self, var)

Others aggregators

Parameters:variable (pyAgrum.DiscreteVariable) – the variable to be added
Returns:the id of the added value
Return type:int
addAND(self, var)

Add a variable, it’s associate node and an AND implementation.

The id of the new variable is automatically generated.

Parameters:variable (pyAgrum.DiscreteVariable) – The variable added by copy.
Returns:the id of the added variable.
Return type:int
Raises:gum.SizeError – If variable.domainSize()>2
addArc(self, tail, head)

addArc(self, tail, head)

Add an arc in the BN, and update arc.head’s CPT.

Parameters:
  • head – a variable’s id (int)
  • tail – a variable’s id (int)
  • head – a variable’s name (str)
  • tail – a variable’s name (str)
Raises:
  • gum.InvalidEdge – If arc.tail and/or arc.head are not in the BN.
  • gum.DuplicateElement – If the arc already exists.
addCOUNT(self, var, value=1)

Others aggregators

Parameters:variable (pyAgrum.DiscreteVariable) – the variable to be added
Returns:the id of the added value
Return type:int
addEXISTS(self, var, value=1)

Others aggregators

Parameters:variable (pyAgrum.DiscreteVariable) – the variable to be added
Returns:the id of the added value
Return type:int
addFORALL(self, var, value=1)

Others aggregators

Parameters:variable (pyAgrum.DiscreteVariable) – the variable to be added
Returns:the id of the added variable.
Return type:int
addLogit(self, var, external_weight, id)

addLogit(self, var, external_weight) -> int

Add a variable, its associate node and a Logit implementation.

(The id of the new variable can be automatically generated.)

Parameters:
  • variable (pyAgrum.DiscreteVariable) – The variable added by copy
  • externalWeight (double) – the added external weight
  • id (int) – The proposed id for the variable.
Returns:

the id of the added variable.

Return type:

int

Raises:

gum.DuplicateElement – If id is already used

addMAX(self, var)

Others aggregators

Parameters:variable (pyAgrum.DiscreteVariable) – the variable to be added
Returns:the id of the added value
Return type:int
addMEDIAN(self, var)

Others aggregators

Parameters:variable (pyAgrum.DiscreteVariable) – the variable to be added
Returns:the id of the added value
Return type:int
addMIN(self, var)

Others aggregators

Parameters:variable (pyAgrum.DiscreteVariable) – the variable to be added
Returns:the id of the added value
Return type:int
addNoisyAND(self, var, external_weight, id)

addNoisyAND(self, var, external_weight) -> int

Add a variable, its associate node and a noisyAND implementation.

(The id of the new variable can be automatically generated.)

Parameters:
  • variable (pyAgrum.DiscreteVariable) – The variable added by copy
  • externalWeight (double) – the added external weight
  • id (int) – The proposed id for the variable.
Returns:

the id of the added variable.

Return type:

int

Raises:

gum.DuplicateElement – If id is already used

addNoisyOR(self, var, external_weight)

addNoisyOR(self, var, external_weight, id) -> int

Add a variable, it’s associate node and a noisyOR implementation.

Since it seems that the ‘classical’ noisyOR is the Compound noisyOR, we keep the addNoisyOR as an alias for addNoisyORCompound.

(The id of the new variable can be automatically generated.)

Parameters:
  • variable (pyAgrum.DiscreteVariable) – The variable added by copy
  • externalWeight (double) – the added external weight
  • id (int) – The proposed id for the variable.
Returns:

the id of the added variable.

Return type:

int

Raises:

gum.DuplicateElement – If id is already used

addNoisyORCompound(self, var, external_weight)

addNoisyORCompound(self, var, external_weight, id) -> int

Add a variable, it’s associate node and a noisyOR implementation.

Since it seems that the ‘classical’ noisyOR is the Compound noisyOR, we keep the addNoisyOR as an alias for addNoisyORCompound.

(The id of the new variable can be automatically generated.)

Parameters:
  • variable (pyAgrum.DiscreteVariable) – The variable added by copy
  • externalWeight (double) – the added external weight
  • id (int) – The proposed id for the variable.
Returns:

the id of the added variable.

Return type:

int

Raises:

gum.DuplicateElement – If id is already used

addNoisyORNet(self, var, external_weight)

addNoisyORNet(self, var, external_weight, id) -> int

Add a variable, its associate node and a noisyOR implementation.

Since it seems that the ‘classical’ noisyOR is the Compound noisyOR, we keep the addNoisyOR as an alias for addNoisyORCompound.

(The id of the new variable can be automatically generated.)

Parameters:
  • variable (pyAgrum.DiscreteVariable) – The variable added by copy
  • externalWeight (double) – the added external weight
  • id (int) – The proposed id for the variable.
Returns:

the id of the added variable.

Return type:

int

addOR(self, var)

Add a variable, it’s associate node and an OR implementation.

The id of the new variable is automatically generated.

Warning

If parents are not boolean, all value>1 is True

Parameters:variable (pyAgrum.DiscreteVariable) – The variable added by copy
Returns:the id of the added variable.
Return type:int
Raises:gum.SizeError – If variable.domainSize()>2
addSUM(self, var)

Others aggregators

Parameters:variable (pyAgrum.DiscreteVariable) – the variable to be added
Returns:the id of the added value
Return type:int
addStructureListener(whenNodeAdded=None, whenNodeDeleted=None, whenArcAdded=None, whenArcDeleted=None)

Add the listeners in parameters to the list of existing ones.

Parameters:
  • whenNodeAdded (lambda expression) – a function for when a node is added
  • whenNodeDeleted (lambda expression) – a function for when a node is removed
  • whenArcAdded (lambda expression) – a function for when an arc is added
  • whenArcDeleted (lambda expression) – a function for when an arc is removed
addWeightedArc(self, tail, head, causalWeight)

addWeightedArc(self, tail, head, causalWeight)

Add an arc in the BN, and update arc.head’s CPT.

Parameters:
  • head – a variable’s id (int)
  • tail – a variable’s id (int)
  • head – a variable’s name (str)
  • tail – a variable’s name (str)
  • causalWeight (double) – the added causal weight
Raises:
  • gum.InvalidArc – If arc.tail and/or arc.head are not in the BN.
  • gum.InvalidArc – If variable in arc.head is not a NoisyOR variable.
ancestors(self, norid)
arcs(self)
Returns:The lisf of arcs in the IBayesNet
Return type:list
beginTopologyTransformation(self)

When inserting/removing arcs, node CPTs change their dimension with a cost in time. begin Multiple Change for all CPTs These functions delay the CPTs change to be done just once at the end of a sequence of topology modification, begins a sequence of insertions/deletions of arcs without changing the dimensions of the CPTs.

changePotential(self, id, newPot)

changePotential(self, name, newPot)

change the CPT associated to nodeId to newPot delete the old CPT associated to nodeId.

Parameters:
  • newPot (pyAgrum.Potential) – the new potential
  • NodeId (int) – the id of the node
  • name (str) – the name of the variable
Raises:

gum.NotAllowed – If newPot has not the same signature as __probaMap[NodeId]

changeVariableLabel(self, id, old_label, new_label)

changeVariableLabel(self, name, old_label, new_label)

change the label of the variable associated to nodeId to the new value.

Parameters:
  • id (int) – the id of the node
  • name (str) – the name of the variable
  • old_label (str) – the new label
  • new_label (str) – the new label
Raises:

gum.NotFound – if id/name is not a variable or if old_label does not exist.

changeVariableName(self, id, new_name)

changeVariableName(self, name, new_name)

Changes a variable’s name in the pyAgrum.BayesNet.

This will change the pyAgrum.DiscreteVariable names in the pyAgrum.BayesNet.

Parameters:
  • new_name (str) – the new name of the variable
  • NodeId (int) – the id of the node
  • name (str) – the name of the variable
Raises:
  • gum.DuplicateLabel – If new_name is already used in this BayesNet.
  • gum.NotFound – If no variable matches id.
children(self, norid)
Parameters:id (int) – the id of the parent
Returns:the set of all the children
Return type:Set
clear(self)

Clear the whole BayesNet

completeInstantiation(self)
connectedComponents()

connected components from a graph/BN

Compute the connected components of a pyAgrum’s graph or Bayesian Network (more generally an object that has nodes, children/parents or neighbours methods)

The firstly visited node for each component is called a ‘root’ and is used as a key for the component. This root has been arbitrarily chosen during the algorithm.

Returns:dict of connected components (as set of nodeIds (int)) with a nodeId (root) of each component as key.
Return type:dict(int,Set[int])
cpt(self, varId)

cpt(self, name) -> Potential

Returns the CPT of a variable.

Parameters:
  • VarId (int) – A variable’s id in the pyAgrum.BayesNet.
  • name (str) – A variable’s name in the pyAgrum.BayesNet.
Returns:

The variable’s CPT.

Return type:

pyAgrum.Potential

Raises:

gum.NotFound – If no variable’s id matches varId.

dag(self)
Returns:a constant reference to the dag of this BayesNet.
Return type:pyAgrum.DAG
descendants(self, norid)
dim(self)

Returns the dimension (the number of free parameters) in this BayesNet.

Returns:the dimension of the BayesNet
Return type:int
empty(self)
endTopologyTransformation(self)

Terminates a sequence of insertions/deletions of arcs by adjusting all CPTs dimensions. End Multiple Change for all CPTs.

Returns:
Return type:pyAgrum.BayesNet
erase(self, varId)

erase(self, name) erase(self, var)

Remove a variable from the pyAgrum.BayesNet.

Removes the corresponding variable from the pyAgrum.BayesNet and from all of it’s children pyAgrum.Potential.

If no variable matches the given id, then nothing is done.

Parameters:
  • id (int) – The variable’s id to remove.
  • name (str) – The variable’s name to remove.
  • var (pyAgrum.DiscreteVariable) – A reference on the variable to remove.
eraseArc(self, arc)

eraseArc(self, tail, head) eraseArc(self, tail, head)

Removes an arc in the BN, and update head’s CTP.

If (tail, head) doesn’t exist, the nothing happens.

Parameters:
  • arc (pyAgrum.Arc) – The arc to be removed.
  • head – a variable’s id (int)
  • tail – a variable’s id (int)
  • head – a variable’s name (str)
  • tail – a variable’s name (str)
exists(self, node)
existsArc(self, tail, head)

existsArc(self, nametail, namehead) -> bool

family(self, norid)
static fastPrototype(dotlike, domainSize=2)
Create a Bayesian network with a dot-like syntax which specifies:
  • the structure ‘a->b->c;b->d<-e;’.
  • the type of the variables with different syntax:
    • by default, a variable is a gum.RangeVariable using the default domain size (second argument)
    • with ‘a[10]’, the variable is a gum.RangeVariable using 10 as domain size (from 0 to 9)
    • with ‘a[3,7]’, the variable is a gum.RangeVariable using a domainSize from 3 to 7
    • with ‘a[1,3.14,5,6.2]’, the variable is a gum.DiscretizedVariable using the given ticks (at least 3 values)
    • with ‘a{top|middle|bottom}’, the variable is a gum.LabelizedVariable using the given labels.
    • with ‘a{-1|5|0|3}’, the variable is a gum.IntegerVariable using the sorted given values.

Note

  • If the dot-like string contains such a specification more than once for a variable, the first specification will be used.
  • the CPTs are randomly generated.
  • see also pyAgrum.fastBN.

Examples

>>> import pyAgrum as gum
>>> bn=gum.BayesNet.fastPrototype('A->B[1,3]<-C{yes|No}->D[2,4]<-E[1,2.5,3.9]',6)
Parameters:
  • dotlike (str) – the string containing the specification
  • domainSize (int) – the default domain size for variables
Returns:

the resulting Bayesian network

Return type:

pyAgrum.BayesNet

generateCPT(self, node)

generateCPT(self, name)

Randomly generate CPT for a given node in a given structure.

Parameters:
  • node (int) – The variable’s id.
  • name (str) – The variable’s name.
generateCPTs(self)

Randomly generates CPTs for a given structure.

hasSameStructure(self, other)
Parameters:pyAgrum.DAGmodel – a direct acyclic model
Returns:True if all the named node are the same and all the named arcs are the same
Return type:bool
idFromName(self, name)

Returns a variable’s id given its name in the graph.

Parameters:name (str) – The variable’s name from which the id is returned.
Returns:The variable’s node id.
Return type:int
Raises:gum.NotFound – If name does not match a variable in the graph
ids(self, names)
isIndependent(self, X, Y, Z)

isIndependent(self, X, Y) -> bool

jointProbability(self, i)
Parameters:i (pyAgrum.instantiation) – an instantiation of the variables
Returns:a parameter of the joint probability for the BayesNet
Return type:double

Warning

a variable not present in the instantiation is assumed to be instantiated to 0

loadBIF(self, name, l=(PyObject *) 0)

Load a BIF file.

Parameters:
  • name (str) – the file’s name
  • l (list) – list of functions to execute
Raises:
  • gum.IOError – If file not found
  • gum.FatalError – If file is not valid
loadBIFXML(self, name, l=(PyObject *) 0)

Load a BIFXML file.

Parameters:
  • name (str) – the name’s file
  • l (list) – list of functions to execute
Raises:
  • gum.IOError – If file not found
  • gum.FatalError – If file is not valid
loadDSL(self, name, l=(PyObject *) 0)

Load a DSL file.

Parameters:
  • name (str) – the file’s name
  • l (list) – list of functions to execute
Raises:
  • gum.IOError – If file not found
  • gum.FatalError – If file is not valid
loadNET(self, name, l=(PyObject *) 0)

Load a NET file.

Parameters:
  • name (str) – the name’s file
  • l (list) – list of functions to execute
Raises:
  • gum.IOError – If file not found
  • gum.FatalError – If file is not valid
loadO3PRM(self, name, system="", classpath="", l=(PyObject *) 0)

Load an O3PRM file.

Warning

The O3PRM language is the only language allowing to manipulate not only DiscretizedVariable but also RangeVariable and LabelizedVariable.

Parameters:
  • name (str) – the file’s name
  • system (str) – the system’s name
  • classpath (str) – the classpath
  • l (list) – list of functions to execute
Raises:
  • gum.IOError – If file not found
  • gum.FatalError – If file is not valid
loadUAI(self, name, l=(PyObject *) 0)

Load an UAI file.

Parameters:
  • name (str) – the name’s file
  • l (list) – list of functions to execute
Raises:
  • gum.IOError – If file not found
  • gum.FatalError – If file is not valid
log10DomainSize(self)
log2JointProbability(self, i)
Parameters:i (pyAgrum.instantiation) – an instantiation of the variables
Returns:a parameter of the log joint probability for the BayesNet
Return type:double

Warning

a variable not present in the instantiation is assumed to be instantiated to 0

maxNonOneParam(self)
Returns:The biggest value (not equal to 1) in the CPTs of the BayesNet
Return type:double
maxParam(self)
Returns:the biggest value in the CPTs of the BayesNet
Return type:double
maxVarDomainSize(self)
Returns:the biggest domain size among the variables of the BayesNet
Return type:int
minNonZeroParam(self)
Returns:the smallest value (not equal to 0) in the CPTs of the IBayesNet
Return type:double
minParam(self)
Returns:the smallest value in the CPTs of the IBayesNet
Return type:double
minimalCondSet(self, target, list)

minimalCondSet(self, targets, list) -> PyObject *

Returns, given one or many targets and a list of variables, the minimal set of those needed to calculate the target/targets.

Parameters:
  • target (int) – The id of the target
  • targets (list) – The ids of the targets
  • list (list) – The list of available variables
Returns:

The minimal set of variables

Return type:

Set

moralGraph(self, clear=True)

Returns the moral graph of the BayesNet, formed by adding edges between all pairs of nodes that have a common child, and then making all edges in the graph undirected.

Returns:The moral graph
Return type:pyAgrum.UndiGraph
moralizedAncestralGraph(self, nodes)
names(self)
Returns:The names of the graph variables
Return type:list
nodeId(self, var)
Parameters:var (pyAgrum.DiscreteVariable) – a variable
Returns:the id of the variable
Return type:int
Raises:gum.IndexError – If the graph does not contain the variable
nodes(self)
Returns:the set of ids
Return type:set
nodeset(self, names)
parents(self, norid)
Parameters:id – The id of the child node
Returns:the set of the parents ids.
Return type:Set
property(self, name)
propertyWithDefault(self, name, byDefault)
reverseArc(self, tail, head)

reverseArc(self, tail, head) reverseArc(self, arc)

Reverses an arc while preserving the same joint distribution.

Parameters:
  • tail – (int) the id of the tail variable
  • head – (int) the id of the head variable
  • tail – (str) the name of the tail variable
  • head – (str) the name of the head variable
  • arc (pyAgrum.Arc) – an arc
Raises:

gum.InvalidArc – If the arc does not exsit or if its reversal would induce a directed cycle.

saveBIF(self, name)

Save the BayesNet in a BIF file.

Parameters:name (str) – the file’s name
saveBIFXML(self, name)

Save the BayesNet in a BIFXML file.

Parameters:name (str) – the file’s name
saveDSL(self, name)

Save the BayesNet in a DSL file.

Parameters:name (str) – the file’s name
saveNET(self, name)

Save the BayesNet in a NET file.

Parameters:name (str) – the file’s name
saveO3PRM(self, name)

Save the BayesNet in an O3PRM file.

Warning

The O3PRM language is the only language allowing to manipulate not only DiscretizedVariable but also RangeVariable and LabelizedVariable.

Parameters:name (str) – the file’s name
saveUAI(self, name)

Save the BayesNet in an UAI file.

Parameters:name (str) – the file’s name
setProperty(self, name, value)
size(self)
Returns:the number of nodes in the graph
Return type:int
sizeArcs(self)
Returns:the number of arcs in the graph
Return type:int
toDot(self)
Returns:a friendly display of the graph in DOT format
Return type:str
topologicalOrder(self, clear=True)
Returns:the list of the nodes Ids in a topological order
Return type:List
Raises:gum.InvalidDirectedCycle – If this graph contains cycles
variable(self, id)

variable(self, name) -> DiscreteVariable

Parameters:
  • id (int) – a variable’s id
  • name (str) – a variable’s name
Returns:

the variable

Return type:

pyAgrum.DiscreteVariable

Raises:

gum.IndexError – If the graph does not contain the variable

variableFromName(self, name)
Parameters:name (str) – a variable’s name
Returns:the variable
Return type:pyAgrum.DiscreteVariable
Raises:gum.IndexError – If the graph does not contain the variable
variableNodeMap(self)
Returns:the variable node map
Return type:pyAgrum.variableNodeMap