Spence Graph

Author

Eric W. Weisstein
November 10, 2025

This notebook downloaded from http://mathworld.wolfram.com/notebooks/GraphTheory/SpenceGraph.nb.

For more information, see Eric's MathWorld entry http://mathworld.wolfram.com/SpenceGraph.html.

©2025 Wolfram Research, Inc. except for portions noted otherwise

Figure

Symmetric

GraphicsGrid[StyleGraphs@Partition[,6],Dividers->All,ImageSize->700]

LCF

lcf=GroupBy[,Last[LCFNotation[#]]&];

Transpose[{Keys[lcf],Length/@Values[lcf]}]

lcfgraphs=Flatten[Partition[#,UpTo[8]]&/@Values[lcf],1];

GraphicsGrid[lcfgraphs//StyleGraphs,Dividers->All,ImageSize->700]

UnitDistance refinement

GraphData["SpenceGraph","Graph","UnitDistance"]

uddata=SortBy[{#,Max[Abs[EdgeLengths[#]-1]]}&/@Take[GraphData["SpenceGraph","Graph","All"],-7],Last]

GraphicsGrid[
Partition[
Show[StyleGraphs[#],PlotLabel->Style[Row[{Subscript[Row[{"Δ","e"}],"max"],"==",NumberForm[#2,{3,2}]}," "],Directive[FontFamily->"Times"]]]&@@@uddata,
UpTo[4]
],
Dividers->All,Alignment->Top,ImageSize->700]

Embeddings

<<MathWorld`Graphs`

Names

GraphData["SpenceGraph","StandardName"]

GraphData["SpenceGraph","StandardNames"]

HouseOfGraphs

hogid=GraphData["SpenceGraph","NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

HouseOfGraphsGraph[hogid]//StyleGraphs[#,ImageSize->Small]&

Primary

GraphData["SpenceGraph"]//StyleGraphs[#,ImageSize->Small]&

All

GraphData["SpenceGraph","Graph","All"]//StyleGraphs

CurvedEdge

GraphData["SpenceGraph","Graph","CurvedEdge"]//StyleGraphs

Inexact

Select[GraphData["SpenceGraph","Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Degenerate

GraphData["SpenceGraph","Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData["SpenceGraph","Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData["SpenceGraph"]]

Default embedding

RotateGraph[GraphPlot[Graph[GraphData["SpenceGraph","VertexList"],GraphData["SpenceGraph","Edges"]],GraphLayout->"HighDimensionalEmbedding"],.25]

v={};
g=Graph[Range@Length@v,UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

g=FindCorrespondingGraph[,v]

RecognizeGraph@g

GeneralizedPetersen

GraphData["SpenceGraph","Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData["SpenceGraph","Graph","IGraph"]//StyleGraphs

Bipartite embedding

GraphData["SpenceGraph","Bipartite"]

g=Graph[GraphData["SpenceGraph","VertexList"],GraphData["SpenceGraph","Edges"],GraphLayout->"BipartiteEmbedding"]

Bilateral

GraphData["SpenceGraph","Graph","Bilateral"]//StyleGraphs

Grid[DeleteCases[Monitor[{g=#,BilateralGraphEmbeddingTypes[#],GraphSymmetryGroup[#]}&/@GraphData["SpenceGraph","Graph","All"],g],{_,_,TransformationGroup[{}]}],Dividers->All,Alignment->{{Center,{Left}}}]//Quiet

Circular

GraphData["SpenceGraph","Graph","Circular"]//StyleGraphs

Circular construction

GraphData["SpenceGraph","Hamiltonian"]

GraphData["SpenceGraph","LCF"]

GraphData["SpenceGraph","HamiltonianCycleCount"]

Planar

GraphData["SpenceGraph","Planar"]

GraphData["SpenceGraph","Graph","Planar"]//StyleGraphs

MinimalCrossingNumber: "EmbeddingScheme" -> 1

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->1,TimeConstraint->1])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->1,TimeConstraint->10])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->1,TimeConstraint->60])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->1,TimeConstraint->3600])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->1,TimeConstraint->5 3600])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->1,TimeConstraint->86400])//AbsoluteTiming

MinimalCrossingNumber: "EmbeddingScheme" -> 2

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->2,TimeConstraint->1])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->2,TimeConstraint->10])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->2,TimeConstraint->60])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->2,TimeConstraint->3600])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->2,TimeConstraint->5 3600])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->2,TimeConstraint->86400])//AbsoluteTiming

MinimalCrossingNumber: "EmbeddingScheme" -> 3

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->3,TimeConstraint->1])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->3,TimeConstraint->10])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->3,TimeConstraint->60])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->3,TimeConstraint->3600])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->3,TimeConstraint->5 3600])//AbsoluteTiming

(cn=CrossingNumber[GraphData["SpenceGraph"],"EmbeddingScheme"->3,TimeConstraint->86400])//AbsoluteTiming

Quit

MinimalCrossingNumber crossings.uos.de

https://crossings.uos.de/job/new

ExportString[GraphData["SpenceGraph"],"DOT"]

MinimalCrossing

GraphData["SpenceGraph","CN"]

(gs=GraphData["SpenceGraph","Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData["SpenceGraph","RCN"]

GraphData["SpenceGraph","Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalCrossing construction Tutte

(cn=CrossingNumber[GraphData["SpenceGraph"],TimeConstraint->1])//AbsoluteTiming

(g=MinimalCrossingGraph[GraphData["SpenceGraph"],"CrossingNumber"->cn])//PolyhedralGraphQ//AbsoluteTiming

faces=ReverseSort@SymmetricallyDistinctFaces[g]

Tally[ReverseSort[Length/@faces]]

TutteGraphs=BilateralGraph[CenterGraph@IGLayoutTutte[g,"OuterFace"->#],"ReturnNonbilateralGraph"->True]&/@faces

TutteGraphsWithOuterCrossingPointCounts={
#,
Count[OuterFace[#],_?(GreaterThan[GraphData["SpenceGraph","V"]])]
}&/@TutteGraphs;

Cases[TutteGraphsWithOuterCrossingPointCounts,{g_,0}:>g]

Select[Cases[TutteGraphsWithOuterCrossingPointCounts,{g_,1}:>g],Length[OuterFace[#]]>3&]

TutteGraphsWithSymmetryGroups={
#,
GraphSymmetryGroup[
#,
AdditionalData->Join[Table[True,GraphData["SpenceGraph","V"]],Table[False,cn]],
SameTest->Equal
]
}&/@TutteGraphs;

DeleteCases[
TutteGraphsWithSymmetryGroups,
{_,TransformationGroup[{}]}
]

MinimalCrossing construction Random

(cn=CrossingNumber[GraphData["SpenceGraph"],TimeConstraint->1])//AbsoluteTiming

(RandomGraphs=Table[MinimalCrossingGraph[GraphData["SpenceGraph"],"CrossingNumber"->cn,RandomSeed->n],{n,1000}]//Union)//Timing

RandomGraphsWithOuterCrossingPointCounts={
#,
Count[OuterFace[#],_?(GreaterThan[GraphData["SpenceGraph","V"]])]
}&/@RandomGraphs;

Small numbers of crossing points on the boundary:

Cases[RandomGraphsWithOuterCrossingPointCounts,{g_,0}:>g]

Select[Cases[RandomGraphsWithOuterCrossingPointCounts,{g_,1}:>g],Length[OuterFace[#]]>3&]

Symmetric embeddings:

RandomGraphsWithSymmetryGroups={
#,
GraphSymmetryGroup[
#,
AdditionalData->Join[Table[True,GraphData["SpenceGraph","V"]],Table[False,cn]],
SameTest->Equal
]
}&/@RandomGraphs;

DeleteCases[
RandomGraphsWithSymmetryGroups,
{_,TransformationGroup[{}]}
]/.g_Graph:>BilateralGraph[CenterGraph@g,"ReturnNonbilateralGraph"->True]

v={};
g=Graph[Range[Length[v]],UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

RectilinearCrossingCount[g]

RectilinearLocalCrossingCount[g]

MinimalLocalCrossing

GraphData["SpenceGraph",{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData["SpenceGraph","Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData["SpenceGraph",{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData["SpenceGraph","Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

MinimaRectilinearlLocalCrossing construction

AdjacentCrossingsQ[g_Graph,cn_Integer]:=Module[{a=AdjacencyList[g],n=VertexCount[g]-cn},Max[Take[a,-cn]]>n]

(cn=CrossingNumber[GraphData["SpenceGraph"],TimeConstraint->10])//AbsoluteTiming

(gs=Select[Table[MinimalCrossingGraph[GraphData["SpenceGraph"],"CrossingNumber"->cn,RandomSeed->i],{i,20000}],!AdjacentCrossingsQ[#,cn]&]//Union)//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData["SpenceGraph","V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

(gs=Select[Table[MinimalCrossingGraph[GraphData["SpenceGraph"],"CrossingNumber"->(cn=XXX),RandomSeed->i],{i,20000}],!AdjacentCrossingsQ[#,cn]&]//Union)//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData["SpenceGraph","V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

Circulant

GraphData["SpenceGraph","Circulant"]

GraphData["SpenceGraph","Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData["SpenceGraph","NotationRules","Circulant"]

(ci=CirculantIndices[GraphData["SpenceGraph"]])//Timing

CirculantGraph1@@@ci

Cases[GraphData["SpenceGraph","StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData["SpenceGraph","ComplementGraph","Name"]

Line graph

GraphData["SpenceGraph","Line"]

LineGraphQ[GraphData["SpenceGraph"]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==="SpenceGraph"&]

RootGraph[GraphData["SpenceGraph"]]

Halin

GraphData["SpenceGraph","Halin"]

GraphData["SpenceGraph","Graph","Halin"]//StyleGraphs

Rigid

GraphData["SpenceGraph","Rigid"]

GraphData["SpenceGraph","Graph","Rigid"]//StyleGraphs

Flexible

GraphData["SpenceGraph","Flexible"]

GraphData["SpenceGraph","Graph","Flexible"]//StyleGraphs

LCF

GraphData["SpenceGraph","LCF"]

GraphData["SpenceGraph","HamiltonianCycleCount"]

GraphData["SpenceGraph","LCFSignature"]

GraphData["SpenceGraph","LCFNotations"]

GraphData["SpenceGraph","Graph","LCF"]//StyleGraphs

Tally[LCFNotation[#][[2]]&/@%]

LCF compute random

FindRandomLCFNotation[GraphData["SpenceGraph"],TimeConstraint->120]

LCF compute 10^5 [XXGB]

Tally[(lcf=LCF[,10^5])[[All,2]]]//Timing

MaxMemoryUsed[]/10.^9 "GB"

DeleteCases[lcf,{_,1}]

LCFGraph@@@DeleteCases[lcf,{_,1}]//StyleGraphs

Tally[LCFNotation[#][[-1]]&/@(gs=NiceLCFGraphs[lcf,3,2])]//Timing

Length[gs]

gs

BilateralGraphEmbeddingQ/@gs

LCF compute 10^6 [2.7 GB]

Tally[(lcf=LCF[,10^6])[[All,2]]]//Timing

MaxMemoryUsed[]/10.^9 "GB"

DeleteCases[lcf,{_,1}]

LCFGraph@@@DeleteCases[lcf,{_,1}]//StyleGraphs

Tally[LCFNotation[#][[-1]]&/@(gs=NiceLCFGraphs[lcf,3,2])]//Timing

Length[gs]

gs

BilateralGraphEmbeddingQ/@gs

LCF compute 10^7 [25.8 GB]

Tally[(lcf=LCF[,10^7])[[All,2]]]//Timing

MaxMemoryUsed[]/10.^9 "GB"

DeleteCases[lcf,{_,1}]

LCFGraph@@@DeleteCases[lcf,{_,1}]//StyleGraphs

Tally[LCFNotation[#][[-1]]&/@(gs=NiceLCFGraphs[lcf,3,2])]//Timing

Length[gs]

gs

BilateralGraphEmbeddingQ/@gs

LCF compute 10^8 [248 GB]

Tally[(lcf=LCF[,10^8])[[All,2]]]//Timing

MaxMemoryUsed[]/10.^9 "GB"

DeleteCases[lcf,{_,1}]

LCFGraph@@@DeleteCases[lcf,{_,1}]//StyleGraphs

Tally[LCFNotation[#][[-1]]&/@(gs=NiceLCFGraphs[lcf,3,2])]//Timing

Length[gs]

gs

BilateralGraphEmbeddingQ/@gs

Tally[LCFNotation[#][[-1]]&/@(gs=NiceLCFGraphs[lcf,4,3])]//Timing

Length[gs]

gs

LCF compute all

Divisors[GraphData["SpenceGraph","V"]]

Length[FindHamiltonianCycle[GraphData["SpenceGraph"],All][[All,All,1]]]//Timing

Tally[(lcf=LCF[GraphData["SpenceGraph"],All])[[All,2]]]//Timing

MaxMemoryUsed[]/10.^9 "GB"

DeleteCases[lcf,{_,1}]

LCFGraph@@@DeleteCases[lcf,{_,1}]//StyleGraphs

Tally[LCFNotation[#][[-1]]&/@(gs=NiceLCFGraphs[lcf,2,1])]//Timing

Length[gs]

gs

BilateralGraphEmbeddingQ/@gs

UnitDistance

GraphData["SpenceGraph","UnitDistance"]

UnitDistanceGraphQ[GraphData["SpenceGraph"],Debug->True]//Timing

GraphData["SpenceGraph","Graph","UnitDistance"]//StyleGraphs

Select[%,!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&]

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData["SpenceGraph","EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData["SpenceGraph","VertexList"],GraphData["SpenceGraph","EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData["SpenceGraph","Graph",#]&/@{"All","UnitDistance"})

TextGrid[
gdata=SortBy[
{#,DegenerateGraphEmbeddingQ[#],GraphSymmetryGroup[#],Max[Abs[EdgeLengths[#]-1]]}&/@gs,
Last
],
Dividers->All
]

Cases[gdata,{__,0.}]

Symmetric:

gs=Cases[
gdata,
{g_,_,sym:Except[TransformationGroup[{}]],diff_}:>{
HighlightGraph[g1=BilateralGraph[CenterGraph[g],"ReturnNonbilateralGraph"->True],Flatten[FindCoincidentVertices[g1]]],
sym,
diff
}]

UnitDistance by refinement of stored LCF embeddings

FileByteCount[file="/Volumes/GraphProperties/Properties/LCFNotations/"<>GraphNameToFileName["SpenceGraph"]<>".gz"]

Tally[(lcf=Import[file])[[All,-1]]]//Timing//AbsoluteTiming

Tally[(lcf=LCFNotation/@)[[All,-1]]]

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@Take[lcf,All];//Timing

gdata=SortBy[
{#,Max[Abs[EdgeLengths[#]-1]]}&/@gs,
Last
]

Cases[gdata,{g_?UnitDistanceGraphEmbeddingQ,_}:>g]

NondegenerateSymmetricGraphs=Select[
gdata,
And[
DegenerateGraphEmbeddingQ[#[[1]]]===False,
GraphSymmetryGroup[#[[1]]]=!=TransformationGroup[{}]
]&
]/.g_Graph:>CenterGraph[g]

gs=BilateralGraph[#,"ReturnNonbilateralGraph"->True]&/@{RotateGraph[,{5,13}],RotateGraph[,{30,31}],RotateGraph[,{7,15}],}

gs=UnlabelGraph/@{,,}

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData["SpenceGraph"],50,"ReturnWithMessage"->True];//Quiet//Timing

gdata=SortBy[
{#,Max[Abs[EdgeLengths[#]-1]]}&/@gs,
Last
]

Cases[gdata,{g_?UnitDistanceGraphEmbeddingQ,_}:>g]

SymmetricEmebddings=Select[gdata,GraphSymmetryGroup[#[[1]]]=!=TransformationGroup[{}]&]

UnitDistance by FindUnitDistanceEmbedding  (random embedding waiting until UD is found)

FindUnitDistanceEmbedding[GraphData["SpenceGraph"],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

{"SpenceGraph",l=FindSubgraphUnitDistanceEmbedding[GraphData["SpenceGraph"],TimeConstraint->300,"Results"->All]//Timing}

gs=SortBy[UniqueEmbeddings[l],Replace[RectilinearCrossingCount[#],Infinity->0]&]

Select[IndexGraph/@gs,!DegenerateGraphEmbeddingQ[#]&&GraphSymmetryGroup[#]=!=TransformationGroup[{}]&]//Timing

Matchstick

GraphData["SpenceGraph","Matchstick"]

GraphData["SpenceGraph","Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData["SpenceGraph","Edges"]]

3D construction

v={};
g=Graph[Range[Length[v]],UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

3D All

GraphData["SpenceGraph","Graph",{"3D","All"}]

3D UnitDistance

GraphData["SpenceGraph","Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData["SpenceGraph","Polyhedral"]

GraphData["SpenceGraph","Graph",{"3D","Polyhedron"}]

Properties

CospectralGraphNames

GraphData["SpenceGraph","CospectralGraphNames"]

DistanceRegular

GraphData["SpenceGraph","DistanceRegular"]

Quintic

GraphData["SpenceGraph","Quintic"]

Spectrum

GraphData["SpenceGraph","Spectrum"]//SpectrumForm

VertexDegreePolynomial

GraphData["SpenceGraph","VertexDegreePolynomial"]/.f_Function:>f[x]

Construction

Symmetric construction #2 from UD refinement with octagon + J84

Symmetric construction #1 from UD refinement with octagon + J84

g=LabelGraph@

rim={21,19,7,17,31,4,22,29};

ee=EdgeList[g];

clusters0=FindCoincidentVertices[g,Tolerance->.1]

clusters=RotateLeft[SortBy[clusters0,Mod[ArcTan@@GraphEmbedding[g][[#[[1]]]],2Pi]&],4]

gg=VertexContract[g,clusters]

RecognizeGraph@gg

VertexDelete[gg,rim]

RecognizeGraph@%

GraphPlot@UnlabelGraph@

3!^8

Length[perms=Permutations/@clusters]

Length[points=Transpose/@Tuples[perms]]//Timing

ByteCount[points]

points[[1]]

Table[circ[i]=With[{n=8,r=a},CirclePoints[{r,Pi/n-Pi/2-2Pi(i-1)/(3n)-Pi/n-Pi/(3n)},n]],{i,3}];

vertices[l_]:=Join[Thread[rim->CirclePoints[8]],Flatten[MapIndexed[#->circ[#2[[1]]][[#2[[2]]]]&,l,{2}],1]]

Solve[Lookup[vertices@sym,4][[2]]==Lookup[vertices@sym,27][[2]]]//FullSimplify

N[%]

Table[circ[i]=With[{n=8,r=Csc[((5 π)/24)] Sin[(π/8)]},CirclePoints[{r,Pi/n-Pi/2-2Pi(i-1)/(3n)-Pi/n-Pi/(3n)},n]],{i,3}];

Graphics[Point[Flatten[Table[circ[i],{i,3}],1]]]

vertices[l_]:=Join[Thread[rim->CirclePoints[8]],Flatten[MapIndexed[#->circ[#2[[1]]][[#2[[2]]]]&,l,{2}],1]]

Graphics[Point[vertices[points[[1]]][[All,2]]]]

With[{v=#},Graph[v[[All,1]],ee,VertexCoordinates->vertices@v]]&/@Take[points,10]

(sym=SelectFirst[
points,
GraphSymmetryGroup[Graph[#[[All,1]],ee,VertexCoordinates->vertices@#]]=!=TransformationGroup[{}]&
])//Timing

sym={{6,2,5,12,28,26,1,11},{10,8,24,13,25,15,14,20},{16,32,30,18,3,9,27,23}};

g=LabelGraph@Graph[Flatten[#],ee,VertexCoordinates->vertices@#]&@sym

DegenerateGraphEmbeddingTypes@g

GraphSymmetryGroup@g

Length[sym=Select[
points,
GraphSymmetryGroup[Graph[Flatten[#],ee,VertexCoordinates->vertices@#]]=!=TransformationGroup[{}]&
]];//Timing

Length[sym]

data={g=Graph[Flatten[#],ee,VertexCoordinates->vertices@#],GraphSymmetryGroup[g]}&/@sym;//Timing

Tally[data[[All,-1]]]

Cases[data,{g_,TransformationGroup[{Rotation[{0,0},(π/2)]}]}:>g]

Cases[data,{g_,TransformationGroup[{Rotation[{0,0},(π/4)]}]}:>g]

GroupBy[Cases[data,{g_,Symmetry`TransformationGroup[{_Symmetry`Reflection,_Symmetry`Rotation}]}],Last->First]

Length@Flatten@Values[%32]

Select[Cases[data,{g_,TransformationGroup[{_Reflection,_Rotation}]}],FreeQ[Rotation[{0,0},π]]]

%[[All,1]]

van Dam and Haemers 2003 (mentioned but not constructed)

"There are three distinct graphs having the spectrum of the Wells graph (van Dam and Haemers 2002)."

The above graph is the Brussels graph

House of Graphs (found by searching eigenvalue criteria and verifying matched graph has full desired spectrum)

DateString[]

g=Import["/Users/eww/Downloads/graph_54098.g6"]

VertexDegree[g]//Tally

RecognizeGraph@g

GraphSpectrum[g]//SpectrumForm

GraphData

GraphDataClassString

GraphDataClassString["SpenceGraph"]

GraphDataString

file="~/spence-graph.m"

WriteString[file,GraphDataString[,
"StandardName"->"SpenceGraph",
"Name"->"Spence graph",
"Classes"->{"NotDeterminedBySpectrum"},
"CospectralGraphNames"->{"BrusselsGraph","WellsGraph"},
"Information"->"SpenceGraph",
"Skip"->{"Arboricity","ConnectedInducedSubgraphPolynomial","ConstructionNumber","Cycles","CyclicEdgeConnectivity","DominatingSets","IndependentEdgeSets","IrredundancePolynomial","KTree","LinklesslyEmbeddable","MatchingGeneratingPolynomial","MinimumCyclicEdgeCuts","MinimumEdgeCuts","MinimumTotalDominatingSets","MinimumWeightFractionalEdgeColoring","MinimumVertexColorings","Minors","Perfect1Factorizations","ProjectivePlanar","Thickness","TotalDominationPolynomial","TuttePolynomial","VisibilityPolynomial"}
]]