Using symbolic computation to prove nonexistence of distance-regular graphs

A package for the Sage computer algebra system is developed for checking feasibility of a given intersection array for a distance-regular graph. We use this tool to show that there is no distance-regular graph with intersection array $\{(2r+1)(4r+1)(4t-1), 8r(4rt-r+2t), (r+t)(4r+1); 1, (r+t)(4r+1), 4r(2r+1)(4t-1)\}$ ($r, t \ge 1$), $\{135, 128, 16; 1, 16, 120\}$, $\{234, 165, 12; 1, 30, 198\}$ or $\{55, 54, 50, 35, 10; 1, 5, 20, 45, 55\}$. In all cases, the proofs rely on equality in the Krein condition, from which triple intersection numbers are determined. Further combinatorial arguments are then used to derive nonexistence.


Introduction
Distance-regular graphs were introduced around 1970 by N. Biggs [4]. As they are intimately linked to many other combinatorial objects, such as finite simple groups, finite geometries, and codes, a natural goal is trying to classify them.
Many distance-regular graphs are known, however constructing new ones has proved to be a difficult task. A number of feasibility conditions for distance-regular graphs have been found, which allows us to compile a list of feasible intersection arrays for small distance-regular graphs (or related structures, such as Q-polynomial association schemes), see Brouwer et al. [8,9,10] and Williford [63]. However, feasibility is no guarantee for existence, so proofs of nonexistence of distance-regular graphs with feasible intersection arrays are also a contribution to the classification. In certain cases, single intersection arrays have been ruled out [40,43], while other proofs may show nonexistence for a whole infinite family of feasible intersection arrays [18,37,58]. In this paper we give proofs of nonexistence for distance-regular graphs belonging to a two-parameter infinite family, as well as for graphs with intersection arrays We develop a package called sage-drg [60] for the Sage computer algebra system [54].
Sage is free open-source software written in the Python programming language [53], with many functionalities deriving from other free open-source software, such as Maxima [48], which Sage uses for symbolic computation. The sage-drg package is thus also free opensource software available under the MIT license, written in the Python programming language, making use of the Sage library. The package can be used to check for feasibility of a given intersection array against known feasibility conditions, see Van Dam, Koolen and Tanaka for an up-to-date survey [20]. Furthermore, using equality in the Krein condition (see Theorem 1), restrictions on triple intersection numbers can be derived. In this paper, we use them to derive some nonexistence results. The sage-drg package also includes Jupyter notebooks demonstrating its use to obtain these results, as well as the notebook jupyter/Demo.ipynb giving some general examples of use of the package. A more detailed description of the sage-drg package is given in Appendix A.
The results from Sections 3, 4 and 6 appeared in the author's PhD thesis [59], where computation was done using a Mathematica [64] notebook originally developed by M. Urlep. Thus, the sage-drg package can be seen as a move from closed-source proprietary software to free open-source software, which allows one to check all code for correctness, thus making the results verifiable.

Preliminaries
In this section we review some basic definitions and concepts. See Brouwer, Cohen and Neumaier [9] for further details.
Let Γ be a connected graph with diameter d and n vertices, and let ∂(u, v) denote the distance between the vertices u and v of Γ. The graph Γ is distance-regular if there exist constants p h ij (0 ≤ h, i, j ≤ d), called the intersection numbers, such that for any pair of vertices u, v at distance h, there are precisely p h ij vertices at distances i and j from u and v, respectively. In fact, all intersection numbers can be computed given only the intersection numbers b i = p i 1,i+1 and c i+1 = p i+1 1,i (0 ≤ i ≤ d − 1) [9, §4.1A]. These intersection numbers are usually gathered in the intersection array {b 0 , b 1 , . . . , b d−1 ; c 1 , c 2 , . . . , c d }. We also define the valency k = b 0 and a i = k − b i − c i (0 ≤ i ≤ d), where b d = c 0 = 0. A connected noncomplete strongly regular graph with parameters (v, k, λ, µ) is a distance-regular graph of diameter 2 with v vertices, valency k and intersection numbers a 1 = λ, c 2 = µ.
Let A i (0 ≤ i ≤ d) be a binary square matrix indexed with the vertices of a graph Γ of diameter d, with entry corresponding to vertices u and v equal to 1 precisely when ∂(u, v) = i. The matrix A = A 1 is the adjacency matrix of Γ. The graph Γ is called primitive if all A i (1 ≤ i ≤ d) are adjacency matrices of connected graphs. A distanceregular graph of valency k ≥ 3 that is not primitive is bipartite or antipodal (or both) [9,Thm. 4.2.1]. The spectrum of Γ is defined to be the spectrum of A (i.e., eigenvalues with multiplicities) and can be computed directly from the intersection array of Γ [9, §4.1B].
Suppose that Γ is distance-regular. Let M be the Bose-Mesner algebra, i.e., the algebra generated by A. The matrices {A i } d i=0 form a basis of M, which also has a second basis {E i } d i=0 consisting of projectors to the eigenspaces of A [9, §2.2]. Note that the indexing in this second basis depends on the ordering of eigenvalues. The descending ordering of eigenvalues is known as the natural ordering. We define the eigenmatrix P and dual eigenmatrix Q as (d + 1) The graph Γ is called formally self-dual [9, p. 49] if P = Q holds for some ordering of eigenvalues. The graph Γ is called Q-polynomial [9, §2.7] with respect to some ordering of eigenvalues if there exist real numbers z 0 , . . . , z d and polynomials q j of degree j such that where • represents entrywise multiplication of matrices. A formally self-dual distance-regular graph is also Q-polynomial with respect to the corresponding ordering of eigenvalues and In this paper, we will use the natural ordering for indexing, noting when a graph is Q-polynomial or formally self-dual for some other ordering.
For vertices u, v, w of the distance-regular graph Γ and integers i, j, h (0 ≤ i, j, h ≤ d) we denote by u v w i j h (or simply [i j h] when it is clear which triple (u, v, w) we have in mind) the number of vertices of Γ that are at distances i, j, h from u, v, w, respectively. We call these numbers triple intersection numbers. They have first been studied in the case of strongly regular graphs [15], and later also for distance-regular graphs, see for example [18,36,37,38,58]. Unlike the intersection numbers, these numbers may depend on the particular choice of vertices u, v, w and not only on their pairwise distances. We may however write down a system of 3d 2 linear Diophantine equations with d 3 triple intersection numbers as variables, thus relating them to the intersection numbers, cf. [37]: Furthermore, we can use the triangle inequality to conclude that certain triple intersection numbers must be zero. Moreover, the following theorem sometimes gives additional equations.
Together with integrality and nonnegativity of triple intersection numbers, we can use all of the above to either derive that the system of equations has no solution, or arrive at a small number of solutions, which gives us new information on the structure of the graph and may lead to proving its nonexistence.
3 A two-parameter family of primitive graphs of diameter 3 In [37], graphs meeting necessary conditions for the existence of extremal codes were studied. One of the families of primitive graphs of diameter 3 for which these conditions were met was {a(p + 1), (a + 1)p, c; 1, c, ap}, where a = a 3 , c = c 2 and p = p 3 33 . Graphs belonging to this family are Q-polynomial with respect to the natural ordering of eigenvalues precisely when the Krein parameter q 3 11 is zero, which is equivalent to Hence, p + 2 must divide 2a for c to be integral. If p = 2r − 1, then a = t(2r + 1) and c = r(r + t) for some positive integers r, t, which gives us the two-parameter family {2rt(2r + 1), (2r − 1)(2rt + t + 1), r(r + t); 1, r(r + t), t(4r 2 − 1)}.
There are also other feasible cases -for instance, when r = 2, we have, besides the cases from the two subfamilies above, feasible examples when t ∈ {4, 7, 196}. The case with r = 1 and t = 4 belonging to the first subfamily above is also listed in the list of feasible parameter sets for 3-class Q-polynomial association schemes by J. S. Williford [63]. We now prove that a graph ∆ with intersection array (4) does not exist. The proof parallels that of [37, Lems. 1, 3] -in fact, a significant part of the proof may be extended to the entire family (3), as it has been done in [59]. The computation needed to obtain the results in this section is illustrated in the jupyter/DRG-d3-2param.ipynb notebook included in the sage-drg package [60].
Proof. Let u be a vertex of ∆ at distance 3 from both v and w (such a vertex exists since p 3 33 = 4r > 0). We consider the triple intersection numbers [i j h] that correspond to (u, v, w). As q 3 11 = q 1 13 = q 1 31 = 0, Theorem 1 gives three additional equations to the system (1), allowing us to express its solution in terms of a single parameter α = [3 3 3]. Let us express the counts of vertices at distance 1 or 2 from one of u, v, w and at distance 3 from the other two vertices: For the values above to be nonnegative, we must have α = 4r − 1, which means that they are all zero. As the choice of u, v, w was arbitrary, this implies that any pair of vertices at distance 3 induces a set of 4r + 2 vertices pairwise at distance 3 -in the terminology of [37], this is a maximal 1-code in ∆. Since we have a 3 p 3 33 = 4r(2r + 1)(4t − 1) = c 3 , it follows by [37,Prop. 2] that u v w 3 3 3 = 1 holds.
Theorem 3. A distance-regular graph ∆ with intersection array (4) does not exist.
This intersection array can be obtained from (2) by setting a = 15, c = 16 and p = 8. The graph Λ has diameter 3 and 1360 vertices. It is not Q-polynomial, however its Krein parameter q 3 33 is zero. We show that such a graph does not exist. The computation needed to prove Theorem 4 is illustrated in the jupyter/DRG-135-128-16-1-16-120.ipynb notebook included in the sage-drg package [60].
Theorem 4. A distance-regular graph Λ with intersection array (5) does not exist.
Proof. Let u, v, w be three pairwise adjacent vertices of Λ (such vertices exist, since we have p 1 11 = 6 > 0). We consider triple intersection numbers [i j h] that correspond to (u, v, w). As q 3 33 = 0, Theorem 1 gives an additional equation to the system (1), allowing us to express its solution in terms of a single parameter α = [1 1 1]. In particular, we obtain Clearly, α must be a nonnegative integer. For [3 3 3] to be nonnegative, we must have α ∈ {0, 1, 2}. However, [3 3 3] is still nonintegral in these cases, showing that the graph Λ does not exist.

A primitive graph with diameter 3 and 1600 vertices
Let Ξ be a distance-regular graph with intersection array The graph Ξ has diameter 3 and 1600 vertices. The intersection array (6) has been found as an example of a feasible parameter set for a distance-regular graph which is formally self-dual for an ordering of eigenvalues distinct from the natural ordering -in fact, Ξ is Q-polynomial for the ordering 0, 2, 3, 1, so its Krein parameters q 1 22 , q 2 12 and q 2 21 are zero. The intersection array (6) is also listed in the list of feasible parameter sets for 3-class Q-polynomial association schemes by J. S. Williford [63]. We show that such a graph does not exist. The computation needed to prove Theorem 5 is illustrated in the jupyter/DRG-234-165-12-1- .ipynb notebook included in the sage-drg package [60].
Theorem 5. A distance-regular graph Ξ with intersection array (6) does not exist.
Proof. Let u, v, w be three vertices of Ξ that are pairwise at distance 3 (such vertices exist, since we have p 3 33 = 8 > 0). We consider triple intersection numbers [i j h] that correspond to (u, v, w). As q 1 22 = q 2 12 = q 2 21 = 0, Theorem 1 gives three additional equations to the system (1), allowing us to express its solution in terms of a single parameter α = [3 3 3]. In particular, we obtain Clearly, α must be nonnegative, but then we have [3 3 2] = [3 2 3] = [2 3 3] < 0, a contradiction. We conclude that the graph Ξ does not exist.  Figure 1: The partition of vertices of Σ by distance from a pair of vertices u, v at distance 2. The part that is at distance i from u and distance j from v has size p 2 ij . As the graph is bipartite, the intersection number p 2 ij is nonzero only when i + j is even. Moreover, there are no edges within each part. It is natural to consider [1 1 1] for w at distance 2 from both u and v, see Lemma 6.
This intersection array appears in the list of feasible intersection arrays for bipartite nonantipodal distance-regular graphs of diameter 5 by Brouwer et. al. [9, p. 418] as an open case. The existence of such a graph would give a counterexample to a conjecture by MacLean and Terwilliger [45], cf. Lang [44]. The computation needed to obtain the results in this section is illustrated in the jupyter/DRG-55-54-50-35-10-bipartite.ipynb notebook included in the sage-drg package [60].
The graph Σ has diameter 5 and 3500 vertices. The partition of Σ corresponding to two vertices at distance 2 is shown in Figure 1. The graph is Q-polynomial for the natural ordering of eigenvalues, see for example [9, p. 418]. Moreover, as the graph is bipartite, it is also Q-antipodal [9, Thm. 8.2.1]. Many Krein parameters are zero, in particular q 3 11 and q 4 11 due to the triangle inequality. We use this fact in the proof of the following statement.
Lemma 6. Let Σ be a distance-regular graph with intersection array (7), and u, v, w be vertices of Σ that are pairwise at distance 2. Then u v w 1 1 1 ≤ 1.
Proof. We consider the triple intersection numbers [i j h] that correspond to (u, v, w).
Since the graph Σ is bipartite, we have [i j h] = 0 whenever any of the sums i + j, j + h, h + i is odd. As q 3 11 = q 4 11 = 0, Theorem 1 gives us two additional equations to the system (1), thus allowing us to express the solution of the system in terms of a single parameter α = [1 1 1]. In particular, we obtain The integrality and nonnegativity of [5 5 5] now gives α ≤ 5/3 = 1.
Note. It can also be shown with a method similar to the one used in Lemma 6 that the graph [Σ 5 (u)] 2 for a vertex u ∈ V Σ (i.e., the graph of vertices at distance 5 from a vertex u, with adjacency corresponding to distance 2 in Σ) is strongly regular with parameters (v, k, λ, µ) = (210, 99, 48,45). A strongly regular graph with such parameters has been constructed by M. Klin [39].
Theorem 7. A distance-regular graph Σ with intersection array (7) does not exist.
Proof. Let u and v be vertices of Σ at distance 2, see Figure 1, and let {i j} denote the set of vertices at distances i and j from u and v, respectively. There are p 2 11 (k − 2) = 5 · 53 = 265 edges between the sets {1 1} and {2 2}. However, the cardinality of the latter set is p 2 22 = 243 < 265, so there is a vertex w ∈ {2 2} that has at least two neighbours in {1 1}, i.e., u v w 1 1 1 ≥ 2, which is in contradiction with Lemma 6. Hence, the graph Σ does not exist.

Acknowledgements
I would like to thank Michael Lang for bringing the intersection array (7) to my attention and for noticing some bugs and proposing new functionality for the sage-drg package.
Appendix A Description of the sage-drg package

A.1 Installation
The sage-drg package [60] can be installed by cloning the git repository or extracting the ZIP file and making sure that Sage sees the drg directory (e.g., by starting it from the package's root directory, or by copying or linking the drg directory into the package library used by the copy of Python in Sage's installation directory). Once Sage is run, the package can be imported.

sage: import drg
The central class is drg.DRGParameters, which can be given an intersection array in the form of two lists or tuples of the same length. Instead of an intersection array, parameters (k, λ, µ) for a strongly regular graph or classical parameters (d, b, α, β) (see [9, §6]) may also be specified. The intersection array (given in any of the forms above) may also contain variables. Substitution of variables is possible using the subs method. Note that the diameter must be constant.

A.2 Parameter computation
As a drg.DRGParameters object is being constructed, its intersection numbers are computed. If any of them is determined to be negative or nonintegral, 1 then an exception is thrown and the construction is aborted. Several other conditions are also checked, for example that the sequences {b i } d i=0 and {c i } d i=0 are non-ascending and non-descending, respectively, and that b j ≥ c i if i + j ≤ d [9, Prop. 4.1.6(ii)]. The handshake lemma is also checked for each subconstituent [9,Lem. 4.3.1]. If the graph is determined to be antipodal, then the covering index is also checked for integrality.
The number of vertices, their valency and the diameter of the graph can be obtained with the order, valency, and diameter methods. The entire array of intersection numbers can be obtained with the pTable method, which returns a drg.Array3D object implementing a three-dimensional array. The subsets of intersection numbers ii is the number of vertices at distance i from any vertex of the graph) can be obtained as tuples with the aTable, bTable, cTable, and kTable methods, respectively. There is also a method intersectionArray returning the entire intersection array as a pair of tuples. Eigenvalues are sorted in the decreasing order; if there is a variable in the intersection array, then the order is derived under the assumption that the variable takes a (large enough) positive value. If there is more than one variable, a warning is issued that the given ordering is not necessarily correct. This can be avoided by explicitly specifying an order of the variables using the set vars method (see the jupyter/DRG-d3-2param.ipynb notebook for an example). The ordering of eigenvalues (and thus the ordering of corresponding parameters) can also be changed later using the reorderEigenvalues method, which accepts an ordering of the indices of the nontrivial eigenvalues (i.e., integers from 1 to d).
Once the ordering of eigenvalues is determined, the cosine sequences and multiplicities of the eigenvalues can be computed using the cosineSequences and multiplicities methods. The multiplicities are checked to be integral. The eigenmatrix and dual eigenmatrix can be computed using the eigenmatrix and dualEigenmatrix methods. The is formallySelfDual method checks whether the two matrices are equal (using the current ordering of eigenvalues). The Krein parameters can be computed using the kreinParameters method, which returns a drg.Array3D object. The Krein parameters are checked to be nonnegative.  Classical parameters can be computed using the is classical method, which returns a list of all tuples of classical parameters, or False if the graph is not classical. The method genPoly parameters returns the tuple (g, s, t) if the parameters correspond to those of a collinearity graph of a generalized g-gon of order (s, t), or (False, None, None) if there is no such generalized g-gon. See [57] and [9, §6.5] for definitions of generalized polygons and some results. Note that the existence of a strongly regular graph for which (g, s, t) are defined does not imply the existence of a corresponding generalized quadrangle. A distance-regular graph Γ of diameter at least 3 has these parameters defined precisely when Γ is isomorphic to the collinearity graph of a corresponding generalized g-gon.
All the methods mentioned above store their results, so subsequent calls will not redo the computations. Note that one does not need to call the methods in the order given here -if some required computation has not been done before, it will be performed when needed. Where applicable, the methods above also take three named boolean parameters expand, factor, and simplify (all set to False by default), which control how the returned expression(s) will be manipulated. In the case when there are no variables in use, setting these parameters has no effect.

A.3 Parameters of derived graphs
In some cases, the parameters of a distance-regular graph imply the existence of another distance-regular graph which can be derived from the original graph. This is true for imprimitive graphs (i.e., antipodal or bipartite), but sometimes, new distance-regular graphs can be obtained by taking subgraphs or by merging classes.
The antipodality of a graph can be checked with the is antipodal method, which returns the covering index for antipodal graphs, and False otherwise. The parameters of the antipodal quotient of an antipodal graph can then be obtained with the antipodalQuotient method.
sage: q7. is antipodal () 2 sage: q7. antipodalQuotient () Parameters of a distance−regular graph with intersection array {7, 6, 5; 1, 2, 3} The bipartiteness of a graph can be checked with the is bipartite method. The parameters of the bipartite half of a bipartite graph can then be obtained with the bipartiteHalf method. In some cases, distance-regularity of the local graph can be established (for instance, for tight graphs, see [36]). In these cases, the parameters of the local graph can then be obtained with the localGraph method. Similarly, the distance-regularity of a subconstituent (i.e., a graph induced by vertices at a given distance from a vertex) can be established in certain cases. Their parameters can be obtained using the subconstituent method. Usually, distance-regularity is derived from triple intersection numbers (see Subsection A.5), which are not computed by default. To force this computation, the parameter compute can be set to True. sage: drg. DRGParameters ([204 , 175 , 48, 1], [1, 12, 175 , 204] Note that calling localGraph() is equivalent to calling subconstituent(1). The localGraph method also accepts the compute parameter.
The complement of a strongly regular graph is also strongly regular. If the complement is connected, its parameters can be obtained with the complementaryGraph method. Sometimes, merging classes of the underlying association scheme yields a new distanceregular graph. Its parameters (or the parameters of a connected component if the resulting graph is disconnected) can be obtained with the mergeClasses method, which takes the indices of classes which will be merged into the first class of the new scheme (i.e., the distances in the original graph which will correspond to adjacency in the new graph). sage: q7. mergeClasses (2,3,6) Parameters of a distance−regular graph with intersection array {63, 30, 1; 1, 30, 63} Note that mergeClasses (2) gives the parameters of the bipartite half for bipartite graphs, and of the complement for non-antipodal strongly regular graphs.
A dictionary mapping the merged indices to parameters of a new graphs for all possibilities can be obtained using the distanceGraphs method.
2graph. The check 2graph method checks conditions related to two-graphs, cf. [9,Thm. 1.5.6]. For strongly regular graphs with parameters (v, k, λ, µ), for which v = 2(2k − λ − µ) holds, it records the parameters (v − 1, 2(k − µ), k + λ − 2µ, k − µ) of a strongly regular graph to be checked for feasibility later. For Taylor graphs (i.e., antipodal double covers of diameter 3) for which a 1 > 0 holds, it checks whether a 1 is even and whether the number of vertices n is a multiple of 4, and then records the parameters (k, a 1 , (3a 1 − k − 1)/2, a 1 /2) of a strongly regular graph as those af the local graph to be checked for feasibility later, cf. [9,Thm. 1.5.3].
classical. The check classical method checks whether any of the classical parameters for the parameter set match some from a list of infinite families of classical paramters for which nonexistence of corresponding graphs has been proven. If so, the parameter set is reported as infeasible. Currently, the list only includes two sets of classical parameters: Huang, Pan and Weng [32], and • (d, b, α, β) = (d, −r, −r/(r − 1), r + r 2 ((−r) d−1 − 1)/(r 2 − 1)) with d ≥ 4, r ≥ 2, cf. De Bruyn and Vanhove [21].
Additionally, the method checks whether nonexistence can be derived from one of the following characterizations: • combinatorial. The check combinatorial method checks various combinatorial conditions: • a graph with b 1 = 1 must be a cycle or a cocktail party graph, • a handshake lemma for Pappus subgraphs, cf. Koolen [40] • Turán's theorem [9,Lem. 5.6.4], • a counting argument by Lambeck [43], • two lower bounds for the size of the last subconstituent [9, Props. 5.6.1, 5.6.3], • handshake lemmas for the numbers of edges and triangles [9,Lem. 4 conference. For a strongly regular graph with parameters (v, k, λ, µ), where k = 2µ and µ = k − λ − 1, the check conference method checks whether n ≡ 1 (mod 4) and n is a sum of two squares, cf. [ antipodal. For an antipodal cover of even diameter at least 4, the check antipodal method checks whether its quotient satisfies necessary conditions for the existence of a cover, cf. [9,Prop. 4.2.7].
genPoly. The check genPoly method checks conditions related to generalized polygons. First, it checks whether the conditions for the existence of cliques of size a 1 + 2 have been checked, and calls check combinatorial otherwise to obtain this information. If the existence of cliques has been established and the intersection array matches that of a collinearity graph of a generalized g-gon with parameter (s, t), then we know that we should indeed have such a graph, and the following conditions are checked: • Feit-Higman theorem [9, Thm. 6.5.1], • (s + t)|st(s + 1)(t + 1) for generalized quadrangles [52, 1.2.2], and An antipodal distance-regular r-cover of diameter 3 with k = (r − 1)(c 2 + 1) such that the existence of cliques of size a 1 + 2 has been established corresponds to the collinearity graph of a generalized quadrangle of order (s, t) = (r − 1, c 2 + 1) with a spread removed. Therefore, in this case, check genPoly checks for feasibility of such a generalized quadrangle (first two conditions above), and also checks whether it can contain a spread, see [9,Prop. 12.5.2] and [52, 1.8.3].
clawBound. For a strongly regular graph, the check clawBound method checks the claw bound, i.e., whether the graph must be the point graph of an infeasible partial geometry, cf. Brouwer and Van Lint [11].
terwilliger. The check terwilliger method checks conditions related to Terwilliger graphs and induced quadrangles, cf. [ secondEigenvalue. For a distance-regular graph with an eigenvalue equal to b 1 − 1, the check secondEigenvalue method checks whether the graph belongs to the classification given in [9,Thm. 4.4.11].
localEigenvalue. The check localEigenvalue method checks conditions related to the eigenvalues of the local graph. For a distance-regular graph of diameter 3 that is not the dodecahedron, the following conditions are checked: • general bounds for the second largest and smallest eigenvalue of the local graph [9, Thm. 4.4.3], • a bound on eigenvalues of the local graph of a non-bipartite graph by Jurišić and Koolen [34], • the fundamental bound by Jurišić, Koolen and Terwilliger [36], and • bounds on multiplicities of eigenvalues, see [9,Thm. 4.4.4], [29] and [30].
If equality is met in the bounds of the second or third point above, then the local graph is determined to be strongly regular and is thus stored as such to be checked for feasibility later.
absoluteBound. The check absoluteBound method checks the absolute bound on the multiplicities of eigenvalues [9,Thm. 2.3.3].
After running all the checks described above, the check feasbile method calls itself on all already derived graphs (antipodal quotient, bipartite half, complement, 2-graph derivation, subconstituents where applicable), and then also on each parameter set for distance-regular graphs obtained by merging classes. To avoid repetitions, a list of checked intersection arrays is maintained. This step can be skipped by setting the derived parameter to False.
If the parameter set is feasible (i.e., it passes all checks), then check feasible returns without error. Otherwise, a drg.InfeasibleError exception is thrown indicating the reason for nonexistence and providing a reference.

A.5 Partitions and triple intersection numbers
For a given parameter set, the distance partition corresponding to a vertex can be obtained with the distancePartition method, which returns a graph representing the distance partition.
sage: syl. distancePartition (1). show () Note that edges are shown between any pair of cells such that their distances from either of the initial vertices differ by at most 1. To show all the distance partitions corresponding to at most two vertices, the show distancePartitions method may be used (see below).
For a given triple of distances (U, V, W ) such that p W U V > 0, the method tripleEquations gives the solution to the system of equations (1) augmented by equations derived from Theorem 1 for each triple (i, j, h) (1 ≤ i, j, h ≤ d) such that q h ij = 0. The solution is returned as a drg.Array3D object. If the solution is not unique, one or more parameters will be present in the solution. Parameters may also be set explicitly by passing a params argument with a dictionary mapping the name of the parameter to the triple of distances it represents. If the appropriate triple intersection number is computed to be zero, an edge will not be shown in the distance partition.