# Some useful functions for the matroid class.¶

sage: from sage.matroids.advanced import *


AUTHORS:

• Stefan van Zwam (2011-06-24): initial version
sage.matroids.utilities.get_nonisomorphic_matroids(MSet)

Return non-isomorphic members of the matroids in set MSet.

sage: from sage.matroids.advanced import *


INPUT:

• MSet – an iterable whose members are matroids.

OUTPUT:

A list containing one representative of each isomorphism class of members of MSet.

EXAMPLES:

sage: from sage.matroids.advanced import *
sage: L = matroids.Uniform(3, 5).extensions()
sage: len(list(L))
32
sage: len(get_nonisomorphic_matroids(L))
5

sage.matroids.utilities.make_regular_matroid_from_matroid(matroid)

Attempt to construct a regular representation of a matroid.

INPUT:

• matroid – a matroid.

OUTPUT:

Return a $$(0, 1, -1)$$-matrix over the integers such that, if the input is a regular matroid, then the output is a totally unimodular matrix representing that matroid.

EXAMPLES:

sage: from sage.matroids.utilities import make_regular_matroid_from_matroid
sage: make_regular_matroid_from_matroid(
....:               matroids.CompleteGraphic(6)).is_isomorphic(
....:                                     matroids.CompleteGraphic(6))
True

sage.matroids.utilities.newlabel(groundset)

Create a new element label different from the labels in groundset.

INPUT:

• groundset – A set of objects.

OUTPUT:

A string not in the set groundset.

sage: from sage.matroids.advanced import *


ALGORITHM:

1. Create a set of all one-character alphanumeric strings.
2. Remove the string representation of each existing element from this list.
3. If the list is nonempty, return any element.
4. Otherwise, return the concatenation of the strings of each existing element, preceded by ‘e’.

EXAMPLES:

sage: from sage.matroids.advanced import newlabel
sage: S = set(['a', 42, 'b'])
sage: newlabel(S) in S
False

sage: S = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
sage: t = newlabel(S)
sage: len(t)
63
sage: t[0]
'e'

sage.matroids.utilities.sanitize_contractions_deletions(matroid, contractions, deletions)

Return a fixed version of sets contractions and deletions.

INPUT:

• matroid – a Matroid instance.
• contractions – a subset of the groundset.
• deletions – a subset of the groundset.

OUTPUT:

An independent set C and a coindependent set D such that

matroid / contractions \ deletions == matroid / C \ D

Raise an error if either is not a subset of the groundset of matroid or if they are not disjoint.

This function is used by the Matroid.minor() method.

EXAMPLES:

sage: from sage.matroids.utilities import setprint
sage: from sage.matroids.utilities import sanitize_contractions_deletions
sage: M = matroids.named_matroids.Fano()
sage: setprint(sanitize_contractions_deletions(M, 'abc', 'defg'))
[{'a', 'b', 'c'}, {'d', 'e', 'f', 'g'}]
sage: setprint(sanitize_contractions_deletions(M, 'defg', 'abc'))
[{'d', 'e', 'g'}, {'a', 'b', 'c', 'f'}]
sage: setprint(sanitize_contractions_deletions(M, [1, 2, 3], 'efg'))
Traceback (most recent call last):
...
ValueError: input contractions is not a subset of the groundset.
sage: setprint(sanitize_contractions_deletions(M, 'efg', [1, 2, 3]))
Traceback (most recent call last):
...
ValueError: input deletions is not a subset of the groundset.
Traceback (most recent call last):
...
ValueError: contraction and deletion sets are not disjoint.

sage.matroids.utilities.setprint(X)

Print nested data structures nicely.

Python’s data structures set and frozenset do not print nicely. This function can be used as replacement for print to overcome this. For direct access to setprint, run:

sage: from sage.matroids.advanced import *


Note

This function will be redundant when Sage moves to Python 3, since the default print will suffice then.

INPUT:

• X – Any Python object

OUTPUT:

None. However, the function prints a nice representation of X.

EXAMPLES:

Output looks much better:

sage: from sage.matroids.advanced import setprint
sage: L = [{1, 2, 3}, {1, 2, 4}, {2, 3, 4}, {4, 1, 3}]
sage: print(L)
[set([1, 2, 3]), set([1, 2, 4]), set([2, 3, 4]), set([1, 3, 4])]
sage: setprint(L)
[{1, 2, 3}, {1, 2, 4}, {2, 3, 4}, {1, 3, 4}]


Note that for iterables, the effect can be undesirable:

sage: from sage.matroids.advanced import setprint
sage: M = matroids.named_matroids.Fano().delete('efg')
sage: M.bases()
Iterator over a system of subsets
sage: setprint(M.bases())
[{'a', 'b', 'c'}, {'a', 'c', 'd'}, {'a', 'b', 'd'}]


An exception was made for subclasses of SageObject:

sage: from sage.matroids.advanced import setprint
sage: G = graphs.PetersenGraph()
sage: list(G)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sage: setprint(G)
Petersen graph: Graph on 10 vertices

sage.matroids.utilities.setprint_s(X, toplevel=False)

Create the string for use by setprint().

INPUT:

• X – any Python object
• toplevel – (default: False) indicates whether this is a recursion or not.

OUTPUT:

A string representation of the object, with nice notation for sets and frozensets.

EXAMPLES:

sage: from sage.matroids.utilities import setprint_s
sage: L = [{1, 2, 3}, {1, 2, 4}, {2, 3, 4}, {4, 1, 3}]
sage: setprint_s(L)
'[{1, 2, 3}, {1, 2, 4}, {2, 3, 4}, {1, 3, 4}]'


The toplevel argument only affects strings, to mimic print‘s behavior:

sage: X = 'abcd'
sage: setprint_s(X)
"'abcd'"
sage: setprint_s(X, toplevel=True)
'abcd'