CMR  1.3.0
Classes | Typedefs | Functions
seymour_internal.h File Reference
#include <time.h>
#include "densematrix.h"
#include <cmr/matroid.h>
#include <cmr/seymour.h>
#include <cmr/series_parallel.h>

Go to the source code of this file.

Classes

struct  _CMR_SEYMOUR_NODE
 
struct  DecompositionTask
 
struct  DecompositionQueue
 

Typedefs

typedef struct DecompositionTask DecompositionTask
 
typedef struct DecompositionQueue DecompositionQueue
 

Functions

char * CMRseymourConsistency (CMR_SEYMOUR_NODE *node, bool recurse)
 Checks a Seymour decomposition node for consistency. More...
 
CMR_EXPORT CMR_ERROR CMRseymourPrintChild (CMR *cmr, CMR_SEYMOUR_NODE *child, CMR_SEYMOUR_NODE *parent, size_t childIndex, FILE *stream, size_t indent, bool printChildren, bool printParentElements, bool printMatrices, bool printGraphs, bool printReductions, bool printPivots)
 Prints the decomposition child to stream. More...
 
CMR_ERROR CMRseymourAddMinor (CMR *cmr, CMR_SEYMOUR_NODE *node, CMR_MINOR *minor)
 Adds a minor to a Seymour decomposition node. More...
 
CMR_ERROR CMRseymourSetNumChildren (CMR *cmr, CMR_SEYMOUR_NODE *node, size_t numChildren)
 Sets the number of children and allocates memory accordingly. More...
 
CMR_ERROR CMRseymourUpdateOneSum (CMR *cmr, CMR_SEYMOUR_NODE *node, size_t numChildren)
 Initialize an existing unknown decomposition node as a 1-sum with numChildren children. More...
 
CMR_ERROR CMRseymourCreateChildFromMatrices (CMR *cmr, CMR_SEYMOUR_NODE *parent, size_t childIndex, CMR_CHRMAT *matrix, CMR_CHRMAT *transpose, CMR_ELEMENT *rowsToParent, CMR_ELEMENT *columnsToParent)
 Creates a decomposition node as a child. More...
 
CMR_ERROR CMRseymourUpdateViolator (CMR *cmr, CMR_SEYMOUR_NODE *node, CMR_SUBMAT *violator)
 Initialize an existing unknown decomposition node to be irregular with a violator submatrix. More...
 
CMR_ERROR CMRseymourUpdateSeriesParallel (CMR *cmr, CMR_SEYMOUR_NODE *node, CMR_SUBMAT *reducedSubmatrix)
 Updates an existing unknown Seymour decomposition node to be a series-parallel node. More...
 
CMR_ERROR CMRseymourUpdateTwoSum (CMR *cmr, CMR_SEYMOUR_NODE *node, CMR_SEPA *separation)
 Initialize an existing unknown decomposition node as a 2-separation node according to the given separation. More...
 
CMR_ERROR CMRseymourUpdatePivots (CMR *cmr, CMR_SEYMOUR_NODE *node, size_t numPivots, size_t *pivotRows, size_t *pivotColumns, CMR_CHRMAT *matrix, CMR_CHRMAT *transpose)
 Initialize an existing unknown decomposition node as a pivot node according to the given arrays of pivots. More...
 
CMR_ERROR CMRseymourUpdateThreeSumInit (CMR *cmr, CMR_SEYMOUR_NODE *node)
 Initialize an existing unknown decomposition node as a 3-sum node. More...
 
CMR_ERROR CMRseymourUpdateThreeSumCreateWideFirstChild (CMR *cmr, CMR_SEYMOUR_NODE *node, size_t *rowsToChild, size_t *columnsToChild, size_t numChildBaseRows, size_t numChildBaseColumns, size_t extraRow, size_t extraColumn1, size_t extraColumn2, int8_t extraEntry)
 Creates wide first child of an initialized 3-sum node. More...
 
CMR_ERROR CMRseymourUpdateThreeSumCreateWideSecondChild (CMR *cmr, CMR_SEYMOUR_NODE *node, size_t *rowsToChild, size_t *columnsToChild, size_t numChildBaseRows, size_t numChildBaseColumns, size_t extraRow, size_t extraColumn1, size_t extraColumn2, int8_t extraEntry)
 Creates wide second child of an initialized 3-sum node. More...
 
CMR_ERROR CMRseymourUpdateThreeSumCreateMixedFirstChild (CMR *cmr, CMR_SEYMOUR_NODE *node, size_t *rowsToChild, size_t *columnsToChild, size_t numChildBaseRows, size_t numChildBaseColumns, size_t extraRow1, size_t extraRow2, int8_t extraEntry)
 Creates mixed first child of an initialized 3-sum node. More...
 
CMR_ERROR CMRseymourUpdateThreeSumCreateMixedSecondChild (CMR *cmr, CMR_SEYMOUR_NODE *node, size_t *rowsToChild, size_t *columnsToChild, size_t numChildBaseRows, size_t numChildBaseColumns, size_t extraColumn1, size_t extraColumn2, int8_t extraEntry)
 Creates mixed second child of an initialized 3-sum node. More...
 
CMR_ERROR CMRseymourSetAttributes (CMR_SEYMOUR_NODE *node)
 Set regularity and (co)graphicness attributes of a decomposition tree. More...
 
CMR_ERROR CMRregularityTaskCreateRoot (CMR *cmr, CMR_SEYMOUR_NODE *dec, DecompositionTask **ptask, CMR_SEYMOUR_PARAMS *params, CMR_SEYMOUR_STATS *stats, clock_t startClock, double timeLimit)
 Creates a decomposition task for the root of the decomposition. More...
 
CMR_ERROR CMRregularityTaskFree (CMR *cmr, DecompositionTask **ptask)
 Frees a decomposition task. More...
 
CMR_ERROR CMRregularityQueueCreate (CMR *cmr, DecompositionQueue **pqueue)
 Initializes a decomposition queue. More...
 
CMR_ERROR CMRregularityQueueFree (CMR *cmr, DecompositionQueue **pqueue)
 Frees the decomposition queue. More...
 
bool CMRregularityQueueEmpty (DecompositionQueue *queue)
 Returns whether a queue is empty. More...
 
DecompositionTaskCMRregularityQueueRemove (DecompositionQueue *queue)
 Removes a task from a decomposition queue. More...
 
void CMRregularityQueueAdd (DecompositionQueue *queue, DecompositionTask *task)
 Adds a task to a decomposition queue. More...
 
CMR_ERROR CMRregularityDecomposeThreeSum (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue, CMR_SEPA *separation)
 Applies a 3-sum decomposition. More...
 
CMR_ERROR CMRregularityNestedMinorSequenceSearchThreeSeparation (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Searches for 3-separations along the sequence of nested minors and decomposes as a 3-sum. More...
 
CMR_ERROR CMRregularityNestedMinorSequenceGraphicness (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Tests each minor of the sequence of nested 3-connected minors for graphicness. More...
 
CMR_ERROR CMRregularityNestedMinorSequenceCographicness (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Tests each minor of the sequence of nested 3-connected minors for graphicness. More...
 
CMR_ERROR CMRregularityExtendNestedMinorSequence (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Extends an incomplete sequence of nested 3-connected minors for the matrix of a decomposition node. More...
 
CMR_ERROR CMRregularityTestR10 (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Tests matrix for representing \( R_{10} \). More...
 
CMR_ERROR CMRregularityInitNestedMinorSequence (CMR *cmr, DecompositionTask *task, CMR_SUBMAT *wheelSubmatrix)
 Initializes a sequence of nested minors with one minor, for a given wheelSubmatrix. More...
 
CMR_ERROR CMRregularityDecomposeSeriesParallel (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Splits off series-parallel elements from the matrix of the decomposition node. More...
 
CMR_ERROR CMRregularityTestGraphicness (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Tests matrix for graphicness/network and stores it in dec. More...
 
CMR_ERROR CMRregularityTestCographicness (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Tests matrix for cographicness/conetwork and stores it in dec. More...
 
CMR_ERROR CMRregularitySearchOneSum (CMR *cmr, DecompositionTask *task, DecompositionQueue *queue)
 Performs a 1-sum decomposition of matrix and stores it in dec. More...
 
CMR_ERROR CMRseymourDecompose (CMR *cmr, CMR_CHRMAT *matrix, bool ternary, CMR_SEYMOUR_NODE **proot, CMR_SEYMOUR_PARAMS *params, CMR_SEYMOUR_STATS *stats, double timeLimit)
 Tests ternary or binary linear matroid for regularity. More...
 
CMR_ERROR CMRregularityCompleteDecomposition (CMR *cmr, CMR_SEYMOUR_NODE *subtree, CMR_SEYMOUR_PARAMS *params, CMR_SEYMOUR_STATS *stats, double timeLimit)
 Replaces the subtree of a matroid decomposition tree by a new one. More...
 
CMR_ERROR CMRregularityRefineDecomposition (CMR *cmr, size_t numNodes, CMR_SEYMOUR_NODE **nodes, CMR_SEYMOUR_PARAMS *params, CMR_SEYMOUR_STATS *stats, double timeLimit)
 Replaces the subtrees of several nodes of a matroid decomposition tree by new ones. More...
 

Typedef Documentation

◆ DecompositionQueue

◆ DecompositionTask

Function Documentation

◆ CMRregularityCompleteDecomposition()

CMR_ERROR CMRregularityCompleteDecomposition ( CMR cmr,
CMR_SEYMOUR_NODE subtree,
CMR_SEYMOUR_PARAMS params,
CMR_SEYMOUR_STATS stats,
double  timeLimit 
)

Replaces the subtree of a matroid decomposition tree by a new one.

Parameters
cmrCMR environment.
subtreeDecomposition node of the subtree root.
paramsParameters for the computation.
statsStatistics for the computation (may be NULL).
timeLimitTime limit to impose.

◆ CMRregularityDecomposeSeriesParallel()

CMR_ERROR CMRregularityDecomposeSeriesParallel ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Splits off series-parallel elements from the matrix of the decomposition node.

In case the matrix is Series-Parallel Matrices, then the node is declared to be planar.

In case the matrix does not admit series-parallel reductions, then the node remains remain unchanged. Otherwise, a child node is created whose matrix is the series-parallel-reduced one. For that child node, a 2-separation may be found, and corresponding children will be created.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRregularityDecomposeThreeSum()

CMR_ERROR CMRregularityDecomposeThreeSum ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue,
CMR_SEPA separation 
)

Applies a 3-sum decomposition.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.
separation3-separation.

◆ CMRregularityExtendNestedMinorSequence()

CMR_ERROR CMRregularityExtendNestedMinorSequence ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Extends an incomplete sequence of nested 3-connected minors for the matrix of a decomposition node.

In case the matrix is not 3-connected, a 2-separation is applied to dec and the function terminates, filling the relevant variables of dec.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRregularityInitNestedMinorSequence()

CMR_ERROR CMRregularityInitNestedMinorSequence ( CMR cmr,
DecompositionTask task,
CMR_SUBMAT wheelSubmatrix 
)

Initializes a sequence of nested minors with one minor, for a given wheelSubmatrix.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
wheelSubmatrixWheel submatrix of task->dec.

◆ CMRregularityNestedMinorSequenceCographicness()

CMR_ERROR CMRregularityNestedMinorSequenceCographicness ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Tests each minor of the sequence of nested 3-connected minors for graphicness.

Sets task->dec->CMRregularityNestedMinorSequenceCographicness accordingly.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRregularityNestedMinorSequenceGraphicness()

CMR_ERROR CMRregularityNestedMinorSequenceGraphicness ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Tests each minor of the sequence of nested 3-connected minors for graphicness.

Sets task->dec->CMRregularityNestedMinorSequenceGraphicness accordingly.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRregularityNestedMinorSequenceSearchThreeSeparation()

CMR_ERROR CMRregularityNestedMinorSequenceSearchThreeSeparation ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Searches for 3-separations along the sequence of nested minors and decomposes as a 3-sum.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRregularityQueueAdd()

void CMRregularityQueueAdd ( DecompositionQueue queue,
DecompositionTask task 
)

Adds a task to a decomposition queue.

Parameters
queueQueue.
taskTask.

◆ CMRregularityQueueCreate()

CMR_ERROR CMRregularityQueueCreate ( CMR cmr,
DecompositionQueue **  pqueue 
)

Initializes a decomposition queue.

Parameters
cmrCMR environment.
pqueuePointer for storing the queue.

◆ CMRregularityQueueEmpty()

bool CMRregularityQueueEmpty ( DecompositionQueue queue)

Returns whether a queue is empty.

Parameters
queueQueue.

◆ CMRregularityQueueFree()

CMR_ERROR CMRregularityQueueFree ( CMR cmr,
DecompositionQueue **  pqueue 
)

Frees the decomposition queue.

Parameters
cmrCMR environment.
pqueuePointer to queue.

◆ CMRregularityQueueRemove()

DecompositionTask* CMRregularityQueueRemove ( DecompositionQueue queue)

Removes a task from a decomposition queue.

Parameters
queueQueue.

◆ CMRregularityRefineDecomposition()

CMR_ERROR CMRregularityRefineDecomposition ( CMR cmr,
size_t  numNodes,
CMR_SEYMOUR_NODE **  nodes,
CMR_SEYMOUR_PARAMS params,
CMR_SEYMOUR_STATS stats,
double  timeLimit 
)

Replaces the subtrees of several nodes of a matroid decomposition tree by new ones.

Parameters
cmrCMR environment.
numNodesNumber of nodes to refine.
nodesArray of decomposition nodes to refine.
paramsParameters for the computation.
statsStatistics for the computation (may be NULL).
timeLimitTime limit to impose.

◆ CMRregularitySearchOneSum()

CMR_ERROR CMRregularitySearchOneSum ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Performs a 1-sum decomposition of matrix and stores it in dec.

If matrix is 1-connected, then dec remains unchanged. Otherwise, dec will become a CMR_SEYMOUR_NODE_TYPE_ONE_SUM node with children that are initialized to the 1-connected components. In this case, the matrix and transpose members of the child nodes are set.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRregularityTaskCreateRoot()

CMR_ERROR CMRregularityTaskCreateRoot ( CMR cmr,
CMR_SEYMOUR_NODE dec,
DecompositionTask **  ptask,
CMR_SEYMOUR_PARAMS params,
CMR_SEYMOUR_STATS stats,
clock_t  startClock,
double  timeLimit 
)

Creates a decomposition task for the root of the decomposition.

Parameters
cmrCMR environment.
decDecomposition node.
ptaskPointer for storing the new task.
paramsParameters for the computation.
statsStatistics for the computation (may be NULL).
startClockClock for the start time.
timeLimitTime limit to impose.

◆ CMRregularityTaskFree()

CMR_ERROR CMRregularityTaskFree ( CMR cmr,
DecompositionTask **  ptask 
)

Frees a decomposition task.

Parameters
cmrCMR environment.
ptaskPointer to task.

◆ CMRregularityTestCographicness()

CMR_ERROR CMRregularityTestCographicness ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Tests matrix for cographicness/conetwork and stores it in dec.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRregularityTestGraphicness()

CMR_ERROR CMRregularityTestGraphicness ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Tests matrix for graphicness/network and stores it in dec.

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRregularityTestR10()

CMR_ERROR CMRregularityTestR10 ( CMR cmr,
DecompositionTask task,
DecompositionQueue queue 
)

Tests matrix for representing \( R_{10} \).

Parameters
cmrCMR environment.
taskTask to be processed; already removed from the list of unprocessed tasks.
queueQueue of unprocessed nodes.

◆ CMRseymourAddMinor()

CMR_ERROR CMRseymourAddMinor ( CMR cmr,
CMR_SEYMOUR_NODE node,
CMR_MINOR minor 
)

Adds a minor to a Seymour decomposition node.

Does not copy the minor.

Parameters
cmrCMR environment.
nodeSeymour decomposition node.
minorMinor to be added.

◆ CMRseymourConsistency()

char* CMRseymourConsistency ( CMR_SEYMOUR_NODE node,
bool  recurse 
)

Checks a Seymour decomposition node for consistency.

Checks all requirements defined in Representation of Matroids.

Returns
NULL if consistent. Otherwise, an explanation string is returned, which must freed with free().
See also
CMRdbgConsistencyAssert() for checking the returned string and aborting in case of inconsistency.
Parameters
nodeSeymour decomposition node.
recurseWhether all (grand-)children shall be checked, too.

◆ CMRseymourCreateChildFromMatrices()

CMR_ERROR CMRseymourCreateChildFromMatrices ( CMR cmr,
CMR_SEYMOUR_NODE parent,
size_t  childIndex,
CMR_CHRMAT matrix,
CMR_CHRMAT transpose,
CMR_ELEMENT rowsToParent,
CMR_ELEMENT columnsToParent 
)

Creates a decomposition node as a child.

Copies matrix and transpose into the node.

Parameters
cmrCMR environment.
parentSeymour decomposition parent node.
childIndexChild index of parent.
matrixThe matrix corresponding to this node.
transposeThe transpose matrix corresponding to this node.
rowsToParentArray for mapping rows to elements of parent.
columnsToParentArray for mapping columns to elements of parent.

◆ CMRseymourDecompose()

CMR_ERROR CMRseymourDecompose ( CMR cmr,
CMR_CHRMAT matrix,
bool  ternary,
CMR_SEYMOUR_NODE **  proot,
CMR_SEYMOUR_PARAMS params,
CMR_SEYMOUR_STATS stats,
double  timeLimit 
)

Tests ternary or binary linear matroid for regularity.

If pdec is not NULL, *pdec will be a (partial) decomposition tree.

If pminor is not NULL and matrix is not regular, then an \( F_7 \) or \( F_7^\star \) minor or a submatrix with non-ternary determinant is searched. This causes additional computational effort!

Parameters
cmrCMR environment.
matrixInput matrix.
ternaryWhether the matrix shall be considered ternary.
prootPointer for storing the root of the Seymour decomposition.
paramsParameters for the computation.
statsStatistics for the computation (may be NULL).
timeLimitTime limit to impose.

◆ CMRseymourPrintChild()

CMR_EXPORT CMR_ERROR CMRseymourPrintChild ( CMR cmr,
CMR_SEYMOUR_NODE child,
CMR_SEYMOUR_NODE parent,
size_t  childIndex,
FILE *  stream,
size_t  indent,
bool  printChildren,
bool  printParentElements,
bool  printMatrices,
bool  printGraphs,
bool  printReductions,
bool  printPivots 
)

Prints the decomposition child to stream.

Parameters
cmrCMR environment.
childSeymour decomposition child node.
parentSeymour decomposition parent node.
childIndexIndex of child as a child of parent.
streamStream to write to.
indentIndentation of this node.
printChildrenWhether to recurse.
printParentElementsWhether to print mapping of rows/columns to parent elements (if parent is not NULL).
printMatricesWhether to print matrices.
printGraphsWhether to print graphs.
printReductionsWhether to print series-parallel reductions.
printPivotsWhether to print pivots.

◆ CMRseymourSetAttributes()

CMR_ERROR CMRseymourSetAttributes ( CMR_SEYMOUR_NODE node)

Set regularity and (co)graphicness attributes of a decomposition tree.

Parameters
nodeSeymour decomposition node.

◆ CMRseymourSetNumChildren()

CMR_ERROR CMRseymourSetNumChildren ( CMR cmr,
CMR_SEYMOUR_NODE node,
size_t  numChildren 
)

Sets the number of children and allocates memory accordingly.

Parameters
cmrCMR environment.
nodeSeymour decomposition node.
numChildrenNumber of children.

◆ CMRseymourUpdateOneSum()

CMR_ERROR CMRseymourUpdateOneSum ( CMR cmr,
CMR_SEYMOUR_NODE node,
size_t  numChildren 
)

Initialize an existing unknown decomposition node as a 1-sum with numChildren children.

Parameters
cmrCMR environment.
nodeSeymour decomposition node.
numChildrenNumber of child nodes.

◆ CMRseymourUpdatePivots()

CMR_ERROR CMRseymourUpdatePivots ( CMR cmr,
CMR_SEYMOUR_NODE node,
size_t  numPivots,
size_t *  pivotRows,
size_t *  pivotColumns,
CMR_CHRMAT matrix,
CMR_CHRMAT transpose 
)

Initialize an existing unknown decomposition node as a pivot node according to the given arrays of pivots.

The unique child node will be of type CMR_SEYMOUR_NODE_TYPE_UNKNOWN.

Parameters
cmrCMR environment.
nodeSeymour decomposition node.
numPivotsNumber of pivots.
pivotRowsArray with pivot rows.
pivotColumnsArray with pivot columns.
matrixNew matrix.
transposeTranspose of matrix.

◆ CMRseymourUpdateSeriesParallel()

CMR_ERROR CMRseymourUpdateSeriesParallel ( CMR cmr,
CMR_SEYMOUR_NODE node,
CMR_SUBMAT reducedSubmatrix 
)

Updates an existing unknown Seymour decomposition node to be a series-parallel node.

Parameters
cmrCMR environment.
nodeSeymour decomposition node.
reducedSubmatrixSP-reduced submatrix.

◆ CMRseymourUpdateThreeSumCreateMixedFirstChild()

CMR_ERROR CMRseymourUpdateThreeSumCreateMixedFirstChild ( CMR cmr,
CMR_SEYMOUR_NODE node,
size_t *  rowsToChild,
size_t *  columnsToChild,
size_t  numChildBaseRows,
size_t  numChildBaseColumns,
size_t  extraRow1,
size_t  extraRow2,
int8_t  extraEntry 
)

Creates mixed first child of an initialized 3-sum node.

A nonzero extraEntry indicates the bottom-right nonzero entry.

Parameters
cmrCMR environment.
nodeSeymour decomposition node (initialized with CMRseymourUpdateThreeSumInit).
rowsToChildArray mapping rows to child rows.
columnsToChildArray mapping columns to child columns.
numChildBaseRowsNumber of base rows of this child.
numChildBaseColumnsNumber of base rows of this child.
extraRow1Index of the first extra row.
extraRow2Index of the second extra row.
extraEntrySign of the extra entry.

◆ CMRseymourUpdateThreeSumCreateMixedSecondChild()

CMR_ERROR CMRseymourUpdateThreeSumCreateMixedSecondChild ( CMR cmr,
CMR_SEYMOUR_NODE node,
size_t *  rowsToChild,
size_t *  columnsToChild,
size_t  numChildBaseRows,
size_t  numChildBaseColumns,
size_t  extraColumn1,
size_t  extraColumn2,
int8_t  extraEntry 
)

Creates mixed second child of an initialized 3-sum node.

A nonzero extraEntry indicates the top-left nonzero entry.

Parameters
cmrCMR environment.
nodeSeymour decomposition node (initialized with CMRseymourUpdateThreeSumInit).
rowsToChildArray mapping rows to child rows.
columnsToChildArray mapping columns to child columns.
numChildBaseRowsNumber of base rows of this child.
numChildBaseColumnsNumber of base rows of this child.
extraColumn1Index of the first extra column.
extraColumn2Index of the second extra column.
extraEntrySign of the extra entry.

◆ CMRseymourUpdateThreeSumCreateWideFirstChild()

CMR_ERROR CMRseymourUpdateThreeSumCreateWideFirstChild ( CMR cmr,
CMR_SEYMOUR_NODE node,
size_t *  rowsToChild,
size_t *  columnsToChild,
size_t  numChildBaseRows,
size_t  numChildBaseColumns,
size_t  extraRow,
size_t  extraColumn1,
size_t  extraColumn2,
int8_t  extraEntry 
)

Creates wide first child of an initialized 3-sum node.

A nonzero extraEntry indicates the bottom-right nonzero entry.

Parameters
cmrCMR environment.
nodeSeymour decomposition node (initialized with CMRseymourUpdateThreeSumInit).
rowsToChildArray mapping rows to child rows.
columnsToChildArray mapping columns to child columns.
numChildBaseRowsNumber of base rows of this child.
numChildBaseColumnsNumber of base rows of this child.
extraRowIndex of the extra row.
extraColumn1Index of 1st extra column.
extraColumn2Index of 2nd extra column, parallel to extraColumn1; equality is allowed.
extraEntrySign of the extra entry.

◆ CMRseymourUpdateThreeSumCreateWideSecondChild()

CMR_ERROR CMRseymourUpdateThreeSumCreateWideSecondChild ( CMR cmr,
CMR_SEYMOUR_NODE node,
size_t *  rowsToChild,
size_t *  columnsToChild,
size_t  numChildBaseRows,
size_t  numChildBaseColumns,
size_t  extraRow,
size_t  extraColumn1,
size_t  extraColumn2,
int8_t  extraEntry 
)

Creates wide second child of an initialized 3-sum node.

A nonzero extraEntry indicates the bottom-right nonzero entry.

Parameters
cmrCMR environment.
nodeSeymour decomposition node (initialized with CMRseymourUpdateThreeSumInit).
rowsToChildArray mapping rows to child rows.
columnsToChildArray mapping columns to child columns.
numChildBaseRowsNumber of base rows of this child.
numChildBaseColumnsNumber of base rows of this child.
extraRowIndex of the extra row.
extraColumn1Index of 1st extra column.
extraColumn2Index of 2nd extra column, parallel to extraColumn1; equality is allowed.
extraEntrySign of the extra entry, if known.

◆ CMRseymourUpdateThreeSumInit()

CMR_ERROR CMRseymourUpdateThreeSumInit ( CMR cmr,
CMR_SEYMOUR_NODE node 
)

Initialize an existing unknown decomposition node as a 3-sum node.

The two child nodes remain uninitialized.

Parameters
cmrCMR environment.
nodeSeymour decomposition node.

◆ CMRseymourUpdateTwoSum()

CMR_ERROR CMRseymourUpdateTwoSum ( CMR cmr,
CMR_SEYMOUR_NODE node,
CMR_SEPA separation 
)

Initialize an existing unknown decomposition node as a 2-separation node according to the given separation.

The two child nodes will be of type CMR_SEYMOUR_NODE_TYPE_UNKNOWN.

Parameters
cmrCMR environment.
nodeSeymour decomposition node.
separation2-separation.

◆ CMRseymourUpdateViolator()

CMR_ERROR CMRseymourUpdateViolator ( CMR cmr,
CMR_SEYMOUR_NODE node,
CMR_SUBMAT violator 
)

Initialize an existing unknown decomposition node to be irregular with a violator submatrix.

Parameters
cmrCMR environment.
nodeSeymour decomposition node.
violatorSubmatrix. Is not copied.