Pineapple Graph

Author

Eric W. Weisstein
February 7, 2026

This notebook downloaded from https://mathworld.wolfram.com/notebooks/GraphTheory/PineappleGraph.nb.

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

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

Figure

GraphicsGrid[
StyleGraphs@Table[PineappleGraph[m,k,PlotLabel->"("<>ToString[m]<>", "<>ToString[k]<>")"],{m,3,5},{k,1,4}],
Dividers->All,
BaseStyle->InsetBoxOptions->{BaseStyle->Directive[LightDarkSwitched@Black,14,FontFamily->"Times"]}]

Sources

https://aimath.org/WWN/matrixspectrum/catalog2.html

http://admin.aimath.org/resources/graph-invariants/minimumrankoffamilies/#/crciclo

http://admin.aimath.org/resources/graph-invariants/minimumrankoffamilies/view/_id/5303cb962d62b7385f0be323

[DG+09] L. DeAlba, J. Grout, L. Hogben, R. Mikkelson, and K. Rasmussen. Universally optimal matrices and field independence of the minimum rank of a graph. Elec. J. Lin. Alg., 18: 403–419, 2009.

Embeddings

<<MathWorld`Graphs`

{"Pineapple",{3,1}}

Names

GraphData[{"Pineapple",{3,1}},"StandardName"]

GraphData[{"Pineapple",{3,1}},"StandardNames"]

HouseOfGraphs

hogid=GraphData[{"Pineapple",{3,1}},"NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

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

Wikidata

GraphData[{"Pineapple",{3,1}},"WikidataID"]

GraphData[{"Pineapple",{3,1}},"WikidataID","URL"]

Primary

GraphData[{"Pineapple",{3,1}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Pineapple",{3,1}},"Graph","All"]//StyleGraphs

CurvedEdge

GraphData[{"Pineapple",{3,1}},"Graph","CurvedEdge"]//StyleGraphs

Inexact

Select[GraphData[{"Pineapple",{3,1}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Degenerate

GraphData[{"Pineapple",{3,1}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"Pineapple",{3,1}},"Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData[{"Pineapple",{3,1}}]]

Default embedding

g0=GraphPlot[Graph[GraphData[{"Pineapple",{3,1}},"VertexList"],GraphData[{"Pineapple",{3,1}},"Edges"]]]

GeneralizedPetersen

GraphData[{"Pineapple",{3,1}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"Pineapple",{3,1}},"Graph","IGraph"]//StyleGraphs

CompleteKPartite

GraphData[{"Pineapple",{3,1}},"Graph","CompleteKPartite"]//StyleGraphs

Bipartite

GraphData[{"Pineapple",{3,1}},"Bipartite"]

GraphData[{"Pineapple",{3,1}},"Graph","Bipartite"]

Bipartite construction

GraphData[{"Pineapple",{3,1}},"Bipartite"]

g0=Graph[GraphData[{"Pineapple",{3,1}},"VertexList"],GraphData[{"Pineapple",{3,1}},"Edges"],GraphLayout->"BipartiteEmbedding"]

v=With[{n=Ceiling[GraphData[{"Pineapple",{3,1}},"V"]/2]},Flatten[Table[{i,j/n},{i,{-1,1}/2},{j,0,n}],1]];

g=FindCorrespondingGraph[g0,v]

RecognizeGraph@g

Bilateral

GraphData[{"Pineapple",{3,1}},"Graph","Bilateral"]//StyleGraphs

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

Circular

GraphData[{"Pineapple",{3,1}},"Graph","Circular"]//StyleGraphs

Circular construction All

GraphData[{"Pineapple",{3,1}},"Hamiltonian"]

GraphData[{"Pineapple",{3,1}},"LCF"]

GraphData[{"Pineapple",{3,1}},"HamiltonianCycleCount"]

Planar

GraphData[{"Pineapple",{3,1}},"Planar"]

GraphData[{"Pineapple",{3,1}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"Pineapple",{3,1}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"Pineapple",{3,1}}]],10]

PlanarGraphEmbeddings

GraphData[{"Pineapple",{3,1}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"Pineapple",{3,1}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"Pineapple",{3,1}},"CN"]

(gs=GraphData[{"Pineapple",{3,1}},"Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData[{"Pineapple",{3,1}},"RCN"]

GraphData[{"Pineapple",{3,1}},"Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"Pineapple",{3,1}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,1}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"Pineapple",{3,1}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,1}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"Pineapple",{3,1}},"Circulant"]

GraphData[{"Pineapple",{3,1}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"Pineapple",{3,1}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"Pineapple",{3,1}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"Pineapple",{3,1}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"Pineapple",{3,1}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"Pineapple",{3,1}},"Line"]

LineGraphQ[GraphData[{"Pineapple",{3,1}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"Pineapple",{3,1}}&]

RootGraph[GraphData[{"Pineapple",{3,1}}]]

RecognizeGraph[%]

GraphData[roots[[1]],"Graph","All"]

gs=LineGraph/@%

Halin

GraphData[{"Pineapple",{3,1}},"Halin"]

GraphData[{"Pineapple",{3,1}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"Pineapple",{3,1}},"Rigid"]

GraphData[{"Pineapple",{3,1}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"Pineapple",{3,1}},"Flexible"]

GraphData[{"Pineapple",{3,1}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"Pineapple",{3,1}},"LCF"]

GraphData[{"Pineapple",{3,1}},"HamiltonianCycleCount"]

GraphData[{"Pineapple",{3,1}},"LCFSignature"]

GraphData[{"Pineapple",{3,1}},"LCFNotations"]

GraphData[{"Pineapple",{3,1}},"Graph","LCF"]//StyleGraphs

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

UnitDistance

GraphData[{"Pineapple",{3,1}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Pineapple",{3,1}}],Debug->True]//Timing

GraphData[{"Pineapple",{3,1}},"Graph","UnitDistance"]//StyleGraphs

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

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,1}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,1}},"VertexList"],GraphData[{"Pineapple",{3,1}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData[{"Pineapple",{3,1}},"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[{"Pineapple",{3,1}}]<>".gz"]

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

lcf=LCFNotation/@nicelcfgs;

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@lcf;//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]

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData[{"Pineapple",{3,1}}],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[{"Pineapple",{3,1}}],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

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

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

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

Matchstick

GraphData[{"Pineapple",{3,1}},"Matchstick"]

GraphData[{"Pineapple",{3,1}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Pineapple",{3,1}},"Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

GraphData[{"Pineapple",{3,1}},"Graph",{"3D","All"}]

3D UnitDistance construction Random

GraphData[{"Pineapple",{3,1}},"Dimension"]

(g=UnitDistanceEmbeddingRefine[
Graph3D[
GraphData[{"Pineapple",{3,1}},"VertexList"],
GraphData[{"Pineapple",{3,1}},"EdgeList"]
],
WorkingPrecision->25])//Timing

EdgeLengths[g]

UnitDistanceGraphEmbeddingQ[g]

3D UnitDistance

GraphData[{"Pineapple",{3,1}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Pineapple",{3,1}},"Polyhedral"]

GraphData[{"Pineapple",{3,1}},"Graph",{"3D","Polyhedron"}]

{"Pineapple",{3,2}}

Names

GraphData[{"Pineapple",{3,2}},"StandardName"]

GraphData[{"Pineapple",{3,2}},"StandardNames"]

HouseOfGraphs

hogid=GraphData[{"Pineapple",{3,2}},"NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

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

Wikidata

GraphData[{"Pineapple",{3,2}},"WikidataID"]

GraphData[{"Pineapple",{3,2}},"WikidataID","URL"]

Primary

GraphData[{"Pineapple",{3,2}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Pineapple",{3,2}},"Graph","All"]//StyleGraphs

CurvedEdge

GraphData[{"Pineapple",{3,2}},"Graph","CurvedEdge"]//StyleGraphs

Inexact

Select[GraphData[{"Pineapple",{3,2}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Degenerate

GraphData[{"Pineapple",{3,2}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"Pineapple",{3,2}},"Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData[{"Pineapple",{3,2}}]]

Default embedding

g0=GraphPlot[Graph[GraphData[{"Pineapple",{3,2}},"VertexList"],GraphData[{"Pineapple",{3,2}},"Edges"]]]

GeneralizedPetersen

GraphData[{"Pineapple",{3,2}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"Pineapple",{3,2}},"Graph","IGraph"]//StyleGraphs

CompleteKPartite

GraphData[{"Pineapple",{3,2}},"Graph","CompleteKPartite"]//StyleGraphs

Bipartite

GraphData[{"Pineapple",{3,2}},"Bipartite"]

GraphData[{"Pineapple",{3,2}},"Graph","Bipartite"]

Bipartite construction

GraphData[{"Pineapple",{3,2}},"Bipartite"]

g0=Graph[GraphData[{"Pineapple",{3,2}},"VertexList"],GraphData[{"Pineapple",{3,2}},"Edges"],GraphLayout->"BipartiteEmbedding"]

v=With[{n=Ceiling[GraphData[{"Pineapple",{3,2}},"V"]/2]},Flatten[Table[{i,j/n},{i,{-1,1}/2},{j,0,n}],1]];

g=FindCorrespondingGraph[g0,v]

RecognizeGraph@g

Bilateral

GraphData[{"Pineapple",{3,2}},"Graph","Bilateral"]//StyleGraphs

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

Circular

GraphData[{"Pineapple",{3,2}},"Graph","Circular"]//StyleGraphs

Circular construction All

GraphData[{"Pineapple",{3,2}},"Hamiltonian"]

GraphData[{"Pineapple",{3,2}},"LCF"]

GraphData[{"Pineapple",{3,2}},"HamiltonianCycleCount"]

Planar

GraphData[{"Pineapple",{3,2}},"Planar"]

GraphData[{"Pineapple",{3,2}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"Pineapple",{3,2}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"Pineapple",{3,2}}]],10]

PlanarGraphEmbeddings

GraphData[{"Pineapple",{3,2}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"Pineapple",{3,2}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"Pineapple",{3,2}},"CN"]

(gs=GraphData[{"Pineapple",{3,2}},"Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData[{"Pineapple",{3,2}},"RCN"]

GraphData[{"Pineapple",{3,2}},"Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"Pineapple",{3,2}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,2}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"Pineapple",{3,2}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,2}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"Pineapple",{3,2}},"Circulant"]

GraphData[{"Pineapple",{3,2}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"Pineapple",{3,2}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"Pineapple",{3,2}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"Pineapple",{3,2}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"Pineapple",{3,2}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"Pineapple",{3,2}},"Line"]

LineGraphQ[GraphData[{"Pineapple",{3,2}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"Pineapple",{3,2}}&]

RootGraph[GraphData[{"Pineapple",{3,2}}]]

RecognizeGraph[%]

GraphData[roots[[1]],"Graph","All"]

gs=LineGraph/@%

Halin

GraphData[{"Pineapple",{3,2}},"Halin"]

GraphData[{"Pineapple",{3,2}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"Pineapple",{3,2}},"Rigid"]

GraphData[{"Pineapple",{3,2}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"Pineapple",{3,2}},"Flexible"]

GraphData[{"Pineapple",{3,2}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"Pineapple",{3,2}},"LCF"]

GraphData[{"Pineapple",{3,2}},"HamiltonianCycleCount"]

GraphData[{"Pineapple",{3,2}},"LCFSignature"]

GraphData[{"Pineapple",{3,2}},"LCFNotations"]

GraphData[{"Pineapple",{3,2}},"Graph","LCF"]//StyleGraphs

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

UnitDistance

GraphData[{"Pineapple",{3,2}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Pineapple",{3,2}}],Debug->True]//Timing

GraphData[{"Pineapple",{3,2}},"Graph","UnitDistance"]//StyleGraphs

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

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,2}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,2}},"VertexList"],GraphData[{"Pineapple",{3,2}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData[{"Pineapple",{3,2}},"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[{"Pineapple",{3,2}}]<>".gz"]

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

lcf=LCFNotation/@nicelcfgs;

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@lcf;//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]

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData[{"Pineapple",{3,2}}],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[{"Pineapple",{3,2}}],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

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

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

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

Matchstick

GraphData[{"Pineapple",{3,2}},"Matchstick"]

GraphData[{"Pineapple",{3,2}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Pineapple",{3,2}},"Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

GraphData[{"Pineapple",{3,2}},"Graph",{"3D","All"}]

3D UnitDistance construction Random

GraphData[{"Pineapple",{3,2}},"Dimension"]

(g=UnitDistanceEmbeddingRefine[
Graph3D[
GraphData[{"Pineapple",{3,2}},"VertexList"],
GraphData[{"Pineapple",{3,2}},"EdgeList"]
],
WorkingPrecision->25])//Timing

EdgeLengths[g]

UnitDistanceGraphEmbeddingQ[g]

3D UnitDistance

GraphData[{"Pineapple",{3,2}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Pineapple",{3,2}},"Polyhedral"]

GraphData[{"Pineapple",{3,2}},"Graph",{"3D","Polyhedron"}]

{"Pineapple",{3,3}}

Names

GraphData[{"Pineapple",{3,3}},"StandardName"]

GraphData[{"Pineapple",{3,3}},"StandardNames"]

HouseOfGraphs

hogid=GraphData[{"Pineapple",{3,3}},"NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

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

Wikidata

GraphData[{"Pineapple",{3,3}},"WikidataID"]

GraphData[{"Pineapple",{3,3}},"WikidataID","URL"]

Primary

GraphData[{"Pineapple",{3,3}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Pineapple",{3,3}},"Graph","All"]//StyleGraphs

CurvedEdge

GraphData[{"Pineapple",{3,3}},"Graph","CurvedEdge"]//StyleGraphs

Inexact

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

Degenerate

GraphData[{"Pineapple",{3,3}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"Pineapple",{3,3}},"Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData[{"Pineapple",{3,3}}]]

Default embedding

g0=GraphPlot[Graph[GraphData[{"Pineapple",{3,3}},"VertexList"],GraphData[{"Pineapple",{3,3}},"Edges"]]]

GeneralizedPetersen

GraphData[{"Pineapple",{3,3}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"Pineapple",{3,3}},"Graph","IGraph"]//StyleGraphs

CompleteKPartite

GraphData[{"Pineapple",{3,3}},"Graph","CompleteKPartite"]//StyleGraphs

Bipartite

GraphData[{"Pineapple",{3,3}},"Bipartite"]

GraphData[{"Pineapple",{3,3}},"Graph","Bipartite"]

Bipartite construction

GraphData[{"Pineapple",{3,3}},"Bipartite"]

g0=Graph[GraphData[{"Pineapple",{3,3}},"VertexList"],GraphData[{"Pineapple",{3,3}},"Edges"],GraphLayout->"BipartiteEmbedding"]

v=With[{n=Ceiling[GraphData[{"Pineapple",{3,3}},"V"]/2]},Flatten[Table[{i,j/n},{i,{-1,1}/2},{j,0,n}],1]];

g=FindCorrespondingGraph[g0,v]

RecognizeGraph@g

Bilateral

GraphData[{"Pineapple",{3,3}},"Graph","Bilateral"]//StyleGraphs

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

Circular

GraphData[{"Pineapple",{3,3}},"Graph","Circular"]//StyleGraphs

Circular construction All

GraphData[{"Pineapple",{3,3}},"Hamiltonian"]

GraphData[{"Pineapple",{3,3}},"LCF"]

GraphData[{"Pineapple",{3,3}},"HamiltonianCycleCount"]

Planar

GraphData[{"Pineapple",{3,3}},"Planar"]

GraphData[{"Pineapple",{3,3}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"Pineapple",{3,3}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"Pineapple",{3,3}}]],10]

PlanarGraphEmbeddings

GraphData[{"Pineapple",{3,3}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"Pineapple",{3,3}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"Pineapple",{3,3}},"CN"]

(gs=GraphData[{"Pineapple",{3,3}},"Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData[{"Pineapple",{3,3}},"RCN"]

GraphData[{"Pineapple",{3,3}},"Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"Pineapple",{3,3}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,3}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"Pineapple",{3,3}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,3}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"Pineapple",{3,3}},"Circulant"]

GraphData[{"Pineapple",{3,3}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"Pineapple",{3,3}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"Pineapple",{3,3}}]])//Timing

CirculantGraph1@@@ci

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

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"Pineapple",{3,3}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"Pineapple",{3,3}},"Line"]

LineGraphQ[GraphData[{"Pineapple",{3,3}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"Pineapple",{3,3}}&]

RootGraph[GraphData[{"Pineapple",{3,3}}]]

RecognizeGraph[%]

GraphData[roots[[1]],"Graph","All"]

gs=LineGraph/@%

Halin

GraphData[{"Pineapple",{3,3}},"Halin"]

GraphData[{"Pineapple",{3,3}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"Pineapple",{3,3}},"Rigid"]

GraphData[{"Pineapple",{3,3}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"Pineapple",{3,3}},"Flexible"]

GraphData[{"Pineapple",{3,3}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"Pineapple",{3,3}},"LCF"]

GraphData[{"Pineapple",{3,3}},"HamiltonianCycleCount"]

GraphData[{"Pineapple",{3,3}},"LCFSignature"]

GraphData[{"Pineapple",{3,3}},"LCFNotations"]

GraphData[{"Pineapple",{3,3}},"Graph","LCF"]//StyleGraphs

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

UnitDistance

GraphData[{"Pineapple",{3,3}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Pineapple",{3,3}}],Debug->True]//Timing

GraphData[{"Pineapple",{3,3}},"Graph","UnitDistance"]//StyleGraphs

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

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,3}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,3}},"VertexList"],GraphData[{"Pineapple",{3,3}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData[{"Pineapple",{3,3}},"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[{"Pineapple",{3,3}}]<>".gz"]

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

lcf=LCFNotation/@nicelcfgs;

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@lcf;//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]

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData[{"Pineapple",{3,3}}],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[{"Pineapple",{3,3}}],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

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

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

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

Matchstick

GraphData[{"Pineapple",{3,3}},"Matchstick"]

GraphData[{"Pineapple",{3,3}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Pineapple",{3,3}},"Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

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

3D UnitDistance construction Random

GraphData[{"Pineapple",{3,3}},"Dimension"]

(g=UnitDistanceEmbeddingRefine[
Graph3D[
GraphData[{"Pineapple",{3,3}},"VertexList"],
GraphData[{"Pineapple",{3,3}},"EdgeList"]
],
WorkingPrecision->25])//Timing

EdgeLengths[g]

UnitDistanceGraphEmbeddingQ[g]

3D UnitDistance

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

3D Polyhedron

GraphData[{"Pineapple",{3,3}},"Polyhedral"]

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

{"Pineapple",{3,4}}

Names

GraphData[{"Pineapple",{3,4}},"StandardName"]

GraphData[{"Pineapple",{3,4}},"StandardNames"]

HouseOfGraphs

hogid=GraphData[{"Pineapple",{3,4}},"NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

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

Wikidata

GraphData[{"Pineapple",{3,4}},"WikidataID"]

GraphData[{"Pineapple",{3,4}},"WikidataID","URL"]

Primary

GraphData[{"Pineapple",{3,4}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Pineapple",{3,4}},"Graph","All"]//StyleGraphs

CurvedEdge

GraphData[{"Pineapple",{3,4}},"Graph","CurvedEdge"]//StyleGraphs

Inexact

Select[GraphData[{"Pineapple",{3,4}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Degenerate

GraphData[{"Pineapple",{3,4}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"Pineapple",{3,4}},"Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData[{"Pineapple",{3,4}}]]

Default embedding

g0=GraphPlot[Graph[GraphData[{"Pineapple",{3,4}},"VertexList"],GraphData[{"Pineapple",{3,4}},"Edges"]]]

GeneralizedPetersen

GraphData[{"Pineapple",{3,4}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"Pineapple",{3,4}},"Graph","IGraph"]//StyleGraphs

CompleteKPartite

GraphData[{"Pineapple",{3,4}},"Graph","CompleteKPartite"]//StyleGraphs

Bipartite

GraphData[{"Pineapple",{3,4}},"Bipartite"]

GraphData[{"Pineapple",{3,4}},"Graph","Bipartite"]

Bipartite construction

GraphData[{"Pineapple",{3,4}},"Bipartite"]

g0=Graph[GraphData[{"Pineapple",{3,4}},"VertexList"],GraphData[{"Pineapple",{3,4}},"Edges"],GraphLayout->"BipartiteEmbedding"]

v=With[{n=Ceiling[GraphData[{"Pineapple",{3,4}},"V"]/2]},Flatten[Table[{i,j/n},{i,{-1,1}/2},{j,0,n}],1]];

g=FindCorrespondingGraph[g0,v]

RecognizeGraph@g

Bilateral

GraphData[{"Pineapple",{3,4}},"Graph","Bilateral"]//StyleGraphs

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

Circular

GraphData[{"Pineapple",{3,4}},"Graph","Circular"]//StyleGraphs

Circular construction All

GraphData[{"Pineapple",{3,4}},"Hamiltonian"]

GraphData[{"Pineapple",{3,4}},"LCF"]

GraphData[{"Pineapple",{3,4}},"HamiltonianCycleCount"]

Planar

GraphData[{"Pineapple",{3,4}},"Planar"]

GraphData[{"Pineapple",{3,4}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"Pineapple",{3,4}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"Pineapple",{3,4}}]],10]

PlanarGraphEmbeddings

GraphData[{"Pineapple",{3,4}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"Pineapple",{3,4}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"Pineapple",{3,4}},"CN"]

(gs=GraphData[{"Pineapple",{3,4}},"Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData[{"Pineapple",{3,4}},"RCN"]

GraphData[{"Pineapple",{3,4}},"Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"Pineapple",{3,4}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,4}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"Pineapple",{3,4}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,4}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"Pineapple",{3,4}},"Circulant"]

GraphData[{"Pineapple",{3,4}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"Pineapple",{3,4}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"Pineapple",{3,4}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"Pineapple",{3,4}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"Pineapple",{3,4}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"Pineapple",{3,4}},"Line"]

LineGraphQ[GraphData[{"Pineapple",{3,4}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"Pineapple",{3,4}}&]

RootGraph[GraphData[{"Pineapple",{3,4}}]]

RecognizeGraph[%]

GraphData[roots[[1]],"Graph","All"]

gs=LineGraph/@%

Halin

GraphData[{"Pineapple",{3,4}},"Halin"]

GraphData[{"Pineapple",{3,4}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"Pineapple",{3,4}},"Rigid"]

GraphData[{"Pineapple",{3,4}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"Pineapple",{3,4}},"Flexible"]

GraphData[{"Pineapple",{3,4}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"Pineapple",{3,4}},"LCF"]

GraphData[{"Pineapple",{3,4}},"HamiltonianCycleCount"]

GraphData[{"Pineapple",{3,4}},"LCFSignature"]

GraphData[{"Pineapple",{3,4}},"LCFNotations"]

GraphData[{"Pineapple",{3,4}},"Graph","LCF"]//StyleGraphs

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

UnitDistance

GraphData[{"Pineapple",{3,4}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Pineapple",{3,4}}],Debug->True]//Timing

GraphData[{"Pineapple",{3,4}},"Graph","UnitDistance"]//StyleGraphs

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

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,4}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,4}},"VertexList"],GraphData[{"Pineapple",{3,4}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData[{"Pineapple",{3,4}},"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[{"Pineapple",{3,4}}]<>".gz"]

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

lcf=LCFNotation/@nicelcfgs;

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@lcf;//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]

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData[{"Pineapple",{3,4}}],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[{"Pineapple",{3,4}}],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

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

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

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

Matchstick

GraphData[{"Pineapple",{3,4}},"Matchstick"]

GraphData[{"Pineapple",{3,4}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Pineapple",{3,4}},"Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

GraphData[{"Pineapple",{3,4}},"Graph",{"3D","All"}]

3D UnitDistance construction Random

GraphData[{"Pineapple",{3,4}},"Dimension"]

(g=UnitDistanceEmbeddingRefine[
Graph3D[
GraphData[{"Pineapple",{3,4}},"VertexList"],
GraphData[{"Pineapple",{3,4}},"EdgeList"]
],
WorkingPrecision->25])//Timing

EdgeLengths[g]

UnitDistanceGraphEmbeddingQ[g]

3D UnitDistance

GraphData[{"Pineapple",{3,4}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Pineapple",{3,4}},"Polyhedral"]

GraphData[{"Pineapple",{3,4}},"Graph",{"3D","Polyhedron"}]

{"Pineapple",{3,5}}

Names

GraphData[{"Pineapple",{3,5}},"StandardName"]

GraphData[{"Pineapple",{3,5}},"StandardNames"]

HouseOfGraphs

hogid=GraphData[{"Pineapple",{3,5}},"NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

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

Wikidata

GraphData[{"Pineapple",{3,5}},"WikidataID"]

GraphData[{"Pineapple",{3,5}},"WikidataID","URL"]

Primary

GraphData[{"Pineapple",{3,5}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Pineapple",{3,5}},"Graph","All"]//StyleGraphs

CurvedEdge

GraphData[{"Pineapple",{3,5}},"Graph","CurvedEdge"]//StyleGraphs

Inexact

Select[GraphData[{"Pineapple",{3,5}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Degenerate

GraphData[{"Pineapple",{3,5}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"Pineapple",{3,5}},"Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData[{"Pineapple",{3,5}}]]

Default embedding

g0=GraphPlot[Graph[GraphData[{"Pineapple",{3,5}},"VertexList"],GraphData[{"Pineapple",{3,5}},"Edges"]]]

GeneralizedPetersen

GraphData[{"Pineapple",{3,5}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"Pineapple",{3,5}},"Graph","IGraph"]//StyleGraphs

CompleteKPartite

GraphData[{"Pineapple",{3,5}},"Graph","CompleteKPartite"]//StyleGraphs

Bipartite

GraphData[{"Pineapple",{3,5}},"Bipartite"]

GraphData[{"Pineapple",{3,5}},"Graph","Bipartite"]

Bipartite construction

GraphData[{"Pineapple",{3,5}},"Bipartite"]

g0=Graph[GraphData[{"Pineapple",{3,5}},"VertexList"],GraphData[{"Pineapple",{3,5}},"Edges"],GraphLayout->"BipartiteEmbedding"]

v=With[{n=Ceiling[GraphData[{"Pineapple",{3,5}},"V"]/2]},Flatten[Table[{i,j/n},{i,{-1,1}/2},{j,0,n}],1]];

g=FindCorrespondingGraph[g0,v]

RecognizeGraph@g

Bilateral

GraphData[{"Pineapple",{3,5}},"Graph","Bilateral"]//StyleGraphs

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

Circular

GraphData[{"Pineapple",{3,5}},"Graph","Circular"]//StyleGraphs

Circular construction All

GraphData[{"Pineapple",{3,5}},"Hamiltonian"]

GraphData[{"Pineapple",{3,5}},"LCF"]

GraphData[{"Pineapple",{3,5}},"HamiltonianCycleCount"]

Planar

GraphData[{"Pineapple",{3,5}},"Planar"]

GraphData[{"Pineapple",{3,5}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"Pineapple",{3,5}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"Pineapple",{3,5}}]],10]

PlanarGraphEmbeddings

GraphData[{"Pineapple",{3,5}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"Pineapple",{3,5}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"Pineapple",{3,5}},"CN"]

(gs=GraphData[{"Pineapple",{3,5}},"Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData[{"Pineapple",{3,5}},"RCN"]

GraphData[{"Pineapple",{3,5}},"Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"Pineapple",{3,5}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,5}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"Pineapple",{3,5}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,5}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"Pineapple",{3,5}},"Circulant"]

GraphData[{"Pineapple",{3,5}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"Pineapple",{3,5}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"Pineapple",{3,5}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"Pineapple",{3,5}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"Pineapple",{3,5}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"Pineapple",{3,5}},"Line"]

LineGraphQ[GraphData[{"Pineapple",{3,5}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"Pineapple",{3,5}}&]

RootGraph[GraphData[{"Pineapple",{3,5}}]]

RecognizeGraph[%]

GraphData[roots[[1]],"Graph","All"]

gs=LineGraph/@%

Halin

GraphData[{"Pineapple",{3,5}},"Halin"]

GraphData[{"Pineapple",{3,5}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"Pineapple",{3,5}},"Rigid"]

GraphData[{"Pineapple",{3,5}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"Pineapple",{3,5}},"Flexible"]

GraphData[{"Pineapple",{3,5}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"Pineapple",{3,5}},"LCF"]

GraphData[{"Pineapple",{3,5}},"HamiltonianCycleCount"]

GraphData[{"Pineapple",{3,5}},"LCFSignature"]

GraphData[{"Pineapple",{3,5}},"LCFNotations"]

GraphData[{"Pineapple",{3,5}},"Graph","LCF"]//StyleGraphs

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

UnitDistance

GraphData[{"Pineapple",{3,5}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Pineapple",{3,5}}],Debug->True]//Timing

GraphData[{"Pineapple",{3,5}},"Graph","UnitDistance"]//StyleGraphs

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

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,5}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,5}},"VertexList"],GraphData[{"Pineapple",{3,5}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData[{"Pineapple",{3,5}},"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[{"Pineapple",{3,5}}]<>".gz"]

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

lcf=LCFNotation/@nicelcfgs;

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@lcf;//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]

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData[{"Pineapple",{3,5}}],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[{"Pineapple",{3,5}}],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

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

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

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

Matchstick

GraphData[{"Pineapple",{3,5}},"Matchstick"]

GraphData[{"Pineapple",{3,5}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Pineapple",{3,5}},"Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

GraphData[{"Pineapple",{3,5}},"Graph",{"3D","All"}]

3D UnitDistance construction Random

GraphData[{"Pineapple",{3,5}},"Dimension"]

(g=UnitDistanceEmbeddingRefine[
Graph3D[
GraphData[{"Pineapple",{3,5}},"VertexList"],
GraphData[{"Pineapple",{3,5}},"EdgeList"]
],
WorkingPrecision->25])//Timing

EdgeLengths[g]

UnitDistanceGraphEmbeddingQ[g]

3D UnitDistance

GraphData[{"Pineapple",{3,5}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Pineapple",{3,5}},"Polyhedral"]

GraphData[{"Pineapple",{3,5}},"Graph",{"3D","Polyhedron"}]

{"Pineapple",{3,6}}

Names

GraphData[{"Pineapple",{3,6}},"StandardName"]

GraphData[{"Pineapple",{3,6}},"StandardNames"]

HouseOfGraphs

hogid=GraphData[{"Pineapple",{3,6}},"NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

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

Wikidata

GraphData[{"Pineapple",{3,6}},"WikidataID"]

GraphData[{"Pineapple",{3,6}},"WikidataID","URL"]

Primary

GraphData[{"Pineapple",{3,6}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Pineapple",{3,6}},"Graph","All"]//StyleGraphs

CurvedEdge

GraphData[{"Pineapple",{3,6}},"Graph","CurvedEdge"]//StyleGraphs

Inexact

Select[GraphData[{"Pineapple",{3,6}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Degenerate

GraphData[{"Pineapple",{3,6}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"Pineapple",{3,6}},"Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData[{"Pineapple",{3,6}}]]

Default embedding

g0=GraphPlot[Graph[GraphData[{"Pineapple",{3,6}},"VertexList"],GraphData[{"Pineapple",{3,6}},"Edges"]]]

GeneralizedPetersen

GraphData[{"Pineapple",{3,6}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"Pineapple",{3,6}},"Graph","IGraph"]//StyleGraphs

CompleteKPartite

GraphData[{"Pineapple",{3,6}},"Graph","CompleteKPartite"]//StyleGraphs

Bipartite

GraphData[{"Pineapple",{3,6}},"Bipartite"]

GraphData[{"Pineapple",{3,6}},"Graph","Bipartite"]

Bipartite construction

GraphData[{"Pineapple",{3,6}},"Bipartite"]

g0=Graph[GraphData[{"Pineapple",{3,6}},"VertexList"],GraphData[{"Pineapple",{3,6}},"Edges"],GraphLayout->"BipartiteEmbedding"]

v=With[{n=Ceiling[GraphData[{"Pineapple",{3,6}},"V"]/2]},Flatten[Table[{i,j/n},{i,{-1,1}/2},{j,0,n}],1]];

g=FindCorrespondingGraph[g0,v]

RecognizeGraph@g

Bilateral

GraphData[{"Pineapple",{3,6}},"Graph","Bilateral"]//StyleGraphs

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

Circular

GraphData[{"Pineapple",{3,6}},"Graph","Circular"]//StyleGraphs

Circular construction All

GraphData[{"Pineapple",{3,6}},"Hamiltonian"]

GraphData[{"Pineapple",{3,6}},"LCF"]

GraphData[{"Pineapple",{3,6}},"HamiltonianCycleCount"]

Planar

GraphData[{"Pineapple",{3,6}},"Planar"]

GraphData[{"Pineapple",{3,6}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"Pineapple",{3,6}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"Pineapple",{3,6}}]],10]

PlanarGraphEmbeddings

GraphData[{"Pineapple",{3,6}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"Pineapple",{3,6}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"Pineapple",{3,6}},"CN"]

(gs=GraphData[{"Pineapple",{3,6}},"Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData[{"Pineapple",{3,6}},"RCN"]

GraphData[{"Pineapple",{3,6}},"Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"Pineapple",{3,6}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,6}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"Pineapple",{3,6}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,6}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"Pineapple",{3,6}},"Circulant"]

GraphData[{"Pineapple",{3,6}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"Pineapple",{3,6}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"Pineapple",{3,6}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"Pineapple",{3,6}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"Pineapple",{3,6}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"Pineapple",{3,6}},"Line"]

LineGraphQ[GraphData[{"Pineapple",{3,6}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"Pineapple",{3,6}}&]

RootGraph[GraphData[{"Pineapple",{3,6}}]]

RecognizeGraph[%]

GraphData[roots[[1]],"Graph","All"]

gs=LineGraph/@%

Halin

GraphData[{"Pineapple",{3,6}},"Halin"]

GraphData[{"Pineapple",{3,6}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"Pineapple",{3,6}},"Rigid"]

GraphData[{"Pineapple",{3,6}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"Pineapple",{3,6}},"Flexible"]

GraphData[{"Pineapple",{3,6}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"Pineapple",{3,6}},"LCF"]

GraphData[{"Pineapple",{3,6}},"HamiltonianCycleCount"]

GraphData[{"Pineapple",{3,6}},"LCFSignature"]

GraphData[{"Pineapple",{3,6}},"LCFNotations"]

GraphData[{"Pineapple",{3,6}},"Graph","LCF"]//StyleGraphs

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

UnitDistance

GraphData[{"Pineapple",{3,6}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Pineapple",{3,6}}],Debug->True]//Timing

GraphData[{"Pineapple",{3,6}},"Graph","UnitDistance"]//StyleGraphs

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

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,6}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,6}},"VertexList"],GraphData[{"Pineapple",{3,6}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData[{"Pineapple",{3,6}},"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[{"Pineapple",{3,6}}]<>".gz"]

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

lcf=LCFNotation/@nicelcfgs;

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@lcf;//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]

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData[{"Pineapple",{3,6}}],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[{"Pineapple",{3,6}}],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

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

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

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

Matchstick

GraphData[{"Pineapple",{3,6}},"Matchstick"]

GraphData[{"Pineapple",{3,6}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Pineapple",{3,6}},"Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

GraphData[{"Pineapple",{3,6}},"Graph",{"3D","All"}]

3D UnitDistance construction Random

GraphData[{"Pineapple",{3,6}},"Dimension"]

(g=UnitDistanceEmbeddingRefine[
Graph3D[
GraphData[{"Pineapple",{3,6}},"VertexList"],
GraphData[{"Pineapple",{3,6}},"EdgeList"]
],
WorkingPrecision->25])//Timing

EdgeLengths[g]

UnitDistanceGraphEmbeddingQ[g]

3D UnitDistance

GraphData[{"Pineapple",{3,6}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Pineapple",{3,6}},"Polyhedral"]

GraphData[{"Pineapple",{3,6}},"Graph",{"3D","Polyhedron"}]

{"Pineapple",{3,7}}

Names

GraphData[{"Pineapple",{3,7}},"StandardName"]

GraphData[{"Pineapple",{3,7}},"StandardNames"]

HouseOfGraphs

hogid=GraphData[{"Pineapple",{3,7}},"NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

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

Wikidata

GraphData[{"Pineapple",{3,7}},"WikidataID"]

GraphData[{"Pineapple",{3,7}},"WikidataID","URL"]

Primary

GraphData[{"Pineapple",{3,7}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Pineapple",{3,7}},"Graph","All"]//StyleGraphs

CurvedEdge

GraphData[{"Pineapple",{3,7}},"Graph","CurvedEdge"]//StyleGraphs

Inexact

Select[GraphData[{"Pineapple",{3,7}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Degenerate

GraphData[{"Pineapple",{3,7}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"Pineapple",{3,7}},"Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData[{"Pineapple",{3,7}}]]

Default embedding

g0=GraphPlot[Graph[GraphData[{"Pineapple",{3,7}},"VertexList"],GraphData[{"Pineapple",{3,7}},"Edges"]]]

GeneralizedPetersen

GraphData[{"Pineapple",{3,7}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"Pineapple",{3,7}},"Graph","IGraph"]//StyleGraphs

CompleteKPartite

GraphData[{"Pineapple",{3,7}},"Graph","CompleteKPartite"]//StyleGraphs

Bipartite

GraphData[{"Pineapple",{3,7}},"Bipartite"]

GraphData[{"Pineapple",{3,7}},"Graph","Bipartite"]

Bipartite construction

GraphData[{"Pineapple",{3,7}},"Bipartite"]

g0=Graph[GraphData[{"Pineapple",{3,7}},"VertexList"],GraphData[{"Pineapple",{3,7}},"Edges"],GraphLayout->"BipartiteEmbedding"]

v=With[{n=Ceiling[GraphData[{"Pineapple",{3,7}},"V"]/2]},Flatten[Table[{i,j/n},{i,{-1,1}/2},{j,0,n}],1]];

g=FindCorrespondingGraph[g0,v]

RecognizeGraph@g

Bilateral

GraphData[{"Pineapple",{3,7}},"Graph","Bilateral"]//StyleGraphs

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

Circular

GraphData[{"Pineapple",{3,7}},"Graph","Circular"]//StyleGraphs

Circular construction All

GraphData[{"Pineapple",{3,7}},"Hamiltonian"]

GraphData[{"Pineapple",{3,7}},"LCF"]

GraphData[{"Pineapple",{3,7}},"HamiltonianCycleCount"]

Planar

GraphData[{"Pineapple",{3,7}},"Planar"]

GraphData[{"Pineapple",{3,7}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"Pineapple",{3,7}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"Pineapple",{3,7}}]],10]

PlanarGraphEmbeddings

GraphData[{"Pineapple",{3,7}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"Pineapple",{3,7}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"Pineapple",{3,7}},"CN"]

(gs=GraphData[{"Pineapple",{3,7}},"Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData[{"Pineapple",{3,7}},"RCN"]

GraphData[{"Pineapple",{3,7}},"Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"Pineapple",{3,7}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,7}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"Pineapple",{3,7}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,7}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"Pineapple",{3,7}},"Circulant"]

GraphData[{"Pineapple",{3,7}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"Pineapple",{3,7}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"Pineapple",{3,7}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"Pineapple",{3,7}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"Pineapple",{3,7}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"Pineapple",{3,7}},"Line"]

LineGraphQ[GraphData[{"Pineapple",{3,7}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"Pineapple",{3,7}}&]

RootGraph[GraphData[{"Pineapple",{3,7}}]]

RecognizeGraph[%]

GraphData[roots[[1]],"Graph","All"]

gs=LineGraph/@%

Halin

GraphData[{"Pineapple",{3,7}},"Halin"]

GraphData[{"Pineapple",{3,7}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"Pineapple",{3,7}},"Rigid"]

GraphData[{"Pineapple",{3,7}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"Pineapple",{3,7}},"Flexible"]

GraphData[{"Pineapple",{3,7}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"Pineapple",{3,7}},"LCF"]

GraphData[{"Pineapple",{3,7}},"HamiltonianCycleCount"]

GraphData[{"Pineapple",{3,7}},"LCFSignature"]

GraphData[{"Pineapple",{3,7}},"LCFNotations"]

GraphData[{"Pineapple",{3,7}},"Graph","LCF"]//StyleGraphs

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

UnitDistance

GraphData[{"Pineapple",{3,7}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Pineapple",{3,7}}],Debug->True]//Timing

GraphData[{"Pineapple",{3,7}},"Graph","UnitDistance"]//StyleGraphs

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

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,7}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,7}},"VertexList"],GraphData[{"Pineapple",{3,7}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData[{"Pineapple",{3,7}},"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[{"Pineapple",{3,7}}]<>".gz"]

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

lcf=LCFNotation/@nicelcfgs;

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@lcf;//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]

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData[{"Pineapple",{3,7}}],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[{"Pineapple",{3,7}}],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

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

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

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

Matchstick

GraphData[{"Pineapple",{3,7}},"Matchstick"]

GraphData[{"Pineapple",{3,7}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Pineapple",{3,7}},"Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

GraphData[{"Pineapple",{3,7}},"Graph",{"3D","All"}]

3D UnitDistance construction Random

GraphData[{"Pineapple",{3,7}},"Dimension"]

(g=UnitDistanceEmbeddingRefine[
Graph3D[
GraphData[{"Pineapple",{3,7}},"VertexList"],
GraphData[{"Pineapple",{3,7}},"EdgeList"]
],
WorkingPrecision->25])//Timing

EdgeLengths[g]

UnitDistanceGraphEmbeddingQ[g]

3D UnitDistance

GraphData[{"Pineapple",{3,7}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Pineapple",{3,7}},"Polyhedral"]

GraphData[{"Pineapple",{3,7}},"Graph",{"3D","Polyhedron"}]

{"Pineapple",{3,8}}

Names

GraphData[{"Pineapple",{3,8}},"StandardName"]

GraphData[{"Pineapple",{3,8}},"StandardNames"]

HouseOfGraphs

hogid=GraphData[{"Pineapple",{3,8}},"NotationRules","HouseOfGraphs"]

HouseOfGraphsLookup[hogid]

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

Wikidata

GraphData[{"Pineapple",{3,8}},"WikidataID"]

GraphData[{"Pineapple",{3,8}},"WikidataID","URL"]

Primary

GraphData[{"Pineapple",{3,8}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Pineapple",{3,8}},"Graph","All"]//StyleGraphs

CurvedEdge

GraphData[{"Pineapple",{3,8}},"Graph","CurvedEdge"]//StyleGraphs

Inexact

Select[GraphData[{"Pineapple",{3,8}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Degenerate

GraphData[{"Pineapple",{3,8}},"Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData[{"Pineapple",{3,8}},"Graph","Degenerate"]//Column

Embeddings

GraphDataEmbeddings[GraphData[{"Pineapple",{3,8}}]]

Default embedding

g0=GraphPlot[Graph[GraphData[{"Pineapple",{3,8}},"VertexList"],GraphData[{"Pineapple",{3,8}},"Edges"]]]

GeneralizedPetersen

GraphData[{"Pineapple",{3,8}},"Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData[{"Pineapple",{3,8}},"Graph","IGraph"]//StyleGraphs

CompleteKPartite

GraphData[{"Pineapple",{3,8}},"Graph","CompleteKPartite"]//StyleGraphs

Bipartite

GraphData[{"Pineapple",{3,8}},"Bipartite"]

GraphData[{"Pineapple",{3,8}},"Graph","Bipartite"]

Bipartite construction

GraphData[{"Pineapple",{3,8}},"Bipartite"]

g0=Graph[GraphData[{"Pineapple",{3,8}},"VertexList"],GraphData[{"Pineapple",{3,8}},"Edges"],GraphLayout->"BipartiteEmbedding"]

v=With[{n=Ceiling[GraphData[{"Pineapple",{3,8}},"V"]/2]},Flatten[Table[{i,j/n},{i,{-1,1}/2},{j,0,n}],1]];

g=FindCorrespondingGraph[g0,v]

RecognizeGraph@g

Bilateral

GraphData[{"Pineapple",{3,8}},"Graph","Bilateral"]//StyleGraphs

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

Circular

GraphData[{"Pineapple",{3,8}},"Graph","Circular"]//StyleGraphs

Circular construction All

GraphData[{"Pineapple",{3,8}},"Hamiltonian"]

GraphData[{"Pineapple",{3,8}},"LCF"]

GraphData[{"Pineapple",{3,8}},"HamiltonianCycleCount"]

Planar

GraphData[{"Pineapple",{3,8}},"Planar"]

GraphData[{"Pineapple",{3,8}},"Graph","Planar"]//StyleGraphs

Planar construction

PlanarGraphEmbedding[GraphData[{"Pineapple",{3,8}}],GraphLayout->#]&/@{"TutteLayout","DavidsonHarelLayout"}

Table[PlanarGraphEmbedding[GraphData[{"Pineapple",{3,8}}]],10]

PlanarGraphEmbeddings

GraphData[{"Pineapple",{3,8}},"PlanarEmbeddingCount"]

(plemb=PlanarGraphEmbeddings[GraphData[{"Pineapple",{3,8}}],Debug->True])//Timing

Length[plemb]

MinimalCrossing

GraphData[{"Pineapple",{3,8}},"CN"]

(gs=GraphData[{"Pineapple",{3,8}},"Graph","MinimalCrossing"])//StyleGraphs

GraphCrossingCount/@gs

GraphCrossingDiagram/@gs

MinimalRectilinearCrossing

GraphData[{"Pineapple",{3,8}},"RCN"]

GraphData[{"Pineapple",{3,8}},"Graph","MinimalRectilinearCrossing"]//StyleGraphs

MinimalLocalCrossing

GraphData[{"Pineapple",{3,8}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,8}},"Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalRectilinearLocalCrossing

GraphData[{"Pineapple",{3,8}},{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData[{"Pineapple",{3,8}},"Graph","MinimalRectilinearLocalCrossing"]//StyleGraphs

Circulant

GraphData[{"Pineapple",{3,8}},"Circulant"]

GraphData[{"Pineapple",{3,8}},"Graph","Circulant"]//StyleGraphs

Circulant construction

GraphData[{"Pineapple",{3,8}},"NotationRules","Circulant"]

(ci=CirculantIndices[GraphData[{"Pineapple",{3,8}}]])//Timing

CirculantGraph1@@@ci

Cases[GraphData[{"Pineapple",{3,8}},"StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData[{"Pineapple",{3,8}},"ComplementGraph","Name"]

GraphData[compl,"Graph","All"]

gs=GraphComplement/@%

Select[%,!DegenerateGraphEmbeddingQ[#]&]

Line graph

GraphData[{"Pineapple",{3,8}},"Line"]

LineGraphQ[GraphData[{"Pineapple",{3,8}}]]//Timing

RootGraph

roots=Select[GraphData[All],GraphData[#,"LineGraph","Name"]==={"Pineapple",{3,8}}&]

RootGraph[GraphData[{"Pineapple",{3,8}}]]

RecognizeGraph[%]

GraphData[roots[[1]],"Graph","All"]

gs=LineGraph/@%

Halin

GraphData[{"Pineapple",{3,8}},"Halin"]

GraphData[{"Pineapple",{3,8}},"Graph","Halin"]//StyleGraphs

Rigid

GraphData[{"Pineapple",{3,8}},"Rigid"]

GraphData[{"Pineapple",{3,8}},"Graph","Rigid"]//StyleGraphs

Flexible

GraphData[{"Pineapple",{3,8}},"Flexible"]

GraphData[{"Pineapple",{3,8}},"Graph","Flexible"]//StyleGraphs

LCF

GraphData[{"Pineapple",{3,8}},"LCF"]

GraphData[{"Pineapple",{3,8}},"HamiltonianCycleCount"]

GraphData[{"Pineapple",{3,8}},"LCFSignature"]

GraphData[{"Pineapple",{3,8}},"LCFNotations"]

GraphData[{"Pineapple",{3,8}},"Graph","LCF"]//StyleGraphs

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

UnitDistance

GraphData[{"Pineapple",{3,8}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Pineapple",{3,8}}],Debug->True]//Timing

GraphData[{"Pineapple",{3,8}},"Graph","UnitDistance"]//StyleGraphs

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

UnitDistance by refinement of default embeddings

Graph[edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,8}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

Graph[vertex list, edge list]

(g=UnitDistanceEmbeddingRefine[Graph[GraphData[{"Pineapple",{3,8}},"VertexList"],GraphData[{"Pineapple",{3,8}},"EdgeList"]],MaxIterations->500])//Timing

UnitDistanceGraphEmbeddingQ[g]

UnitDistance by refinement of existing embeddings

gs=UnitDistanceEmbeddingRefine[#,MaxIterations->500]&/@Complement@@(GraphData[{"Pineapple",{3,8}},"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[{"Pineapple",{3,8}}]<>".gz"]

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

lcf=LCFNotation/@nicelcfgs;

gs=UnitDistanceEmbeddingRefine[LCFGraph@@#,MaxIterations->500]&/@lcf;//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]

UnitDistance by FindUnitDistanceEmbedding  (random embeddings returning on messages)

gs=FindUnitDistanceEmbedding[GraphData[{"Pineapple",{3,8}}],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[{"Pineapple",{3,8}}],"ReturnWithMessage"->False]//Quiet//Timing

UnitDistance by FindSubgraphUnitDistanceEmbedding

{$Version,DateString[]}

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

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

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

Matchstick

GraphData[{"Pineapple",{3,8}},"Matchstick"]

GraphData[{"Pineapple",{3,8}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Pineapple",{3,8}},"Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

GraphData[{"Pineapple",{3,8}},"Graph",{"3D","All"}]

3D UnitDistance construction Random

GraphData[{"Pineapple",{3,8}},"Dimension"]

(g=UnitDistanceEmbeddingRefine[
Graph3D[
GraphData[{"Pineapple",{3,8}},"VertexList"],
GraphData[{"Pineapple",{3,8}},"EdgeList"]
],
WorkingPrecision->25])//Timing

EdgeLengths[g]

UnitDistanceGraphEmbeddingQ[g]

3D UnitDistance

GraphData[{"Pineapple",{3,8}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Pineapple",{3,8}},"Polyhedral"]

GraphData[{"Pineapple",{3,8}},"Graph",{"3D","Polyhedron"}]

Construction

<<MathWorld`Graphs`

table=Flatten[
Table[{RecognizeGraph[PineappleGraph[m,k],"Cache"->"InternalOnly"],{m,k}},{m,3,20},{k,20}],
1];

rules=Rule@@@DeleteCases[table,{{},_}]

Take[table,5]

table=Flatten[
Table[{RecognizeGraph[PineappleGraph[m,k],"Cache"->"InternalOnly"],{m,k}},{m,3,8},{k,2,8}],
1];

new=Cases[
table,
{{},ind_}:>ind]

Length[new]

PineappleGraph@@@new

GraphData

GraphDataString

<<Mathworld`Graphs`

new

file=OpenWrite["~/pineapple.m"]

WriteString[
file,
GraphDataString[
PineappleGraph[##],
"StandardName"->{"Pineapple",{##}},
"Name"->"("<>ToString[#]<>","<>ToString[#2]<>")\[Hyphen]pineapple graph",
"Clases"->{"Pineapple"},
"NotationRules"->{"Pineapple"->{##}},
"MinimumRank"->3,
"MaximumNullity"->#+#2-3,
"ZeroForcingNumber"->#+#2-3,
"Information"->"PineappleGraph",
Debug->True,
TimeConstraint->10
]
]&@@@new

Close[file]