graphEmbeddings3D¶
Module AlgRealEmbeddings¶
-
class
graphEmbeddings3D.algRealEmbeddings.
AlgRealEmbeddings
(graph_type, num_phi=20, num_theta=20, factor_second=4, choice_from_clusters='center', window=None, name=None, edges=None, num_sols=None, allowedNumberOfMissing=0, moreSamplingSubgraphs=False)¶ This class implements the sampling procedure for obtaining edge lengths with many real embeddings.
The predefined graphs given by graph_type can be found in
graphEmbeddings3D.graphEmbedding.GraphEmbedding
. Another option is to use graph_type`=’edges’ and specify `edges of the graph and the number of complex embeddings of the graph by num_sols. The graph must contain the triangle 1,2,3. In this case, the keys of a dictionary with edge lengths, when the function findMoreEmbeddings is called, must match edges.num_phi and num_theta determine the number of samples of \(\varphi\) and \(\theta\) in the first phase of sampling. In the second phase, num_phi/factor_second and num_theta/factor_second values are sampled around the ones from the first phase with the highest number of real embeddings.
After sampling, edge lengths are selected from clusters by choice_from_clusters:
- ‘center’: center of the \((\varphi,\theta)\) cluster
- ‘closestToAverageLength’: average of lengths in cluster
name is used for temporary and results files.
For implementing a new graph, self._numAllSol must be set in the constructor to the maximal number of complex embeddings of the graph, and self._combinations contains all subgraphs suitable for sampling.
The parameter allowedNumberOfMissing indicates how many solutions can be lost in PHC computation without causing a recomputation.
If graph_type`=’edges’, then `moreSamplingSubgraphs indicates whether only subgraphs whose sampling preserves the coupler curve are used (False) or all that have necessary edges (True). Namely, whether deg(u)=4 or deg(u)>=4.
-
findMoreEmbeddings
(starting_lengths, required_num=None, combinations=None, allowed_repetition=1)¶ Edge lengts with required_num real embeddings are searched by linear approach from starting_lengths, namely, subgraphs given by combinations are used one by one.
If required_num==None, then self._numAllSol is used. Similarly, if combinations==None, then self._combinations are used.
The parameter allowed_repetition determines, how many times can be the whole list combinations used without increase of the number of real embeddings.
Results are saved in
../results
.
-
findMoreEmbeddings_tree
(starting_lengths, required_num=None, onlyOne=True, combinations=None)¶ Edge lengts with required_num real embeddings are searched by tree approach from starting_lengths, namely, trying all combinations of subgraphs given by combinations.
If required_num==None, then self._numAllSol is used. Similarly, if combinations==None, then self._combinations are used.
If onlyOne is True, then the algorithm stops if the first edge lengths with required_num real embeddings are found. Otherwise, the whole tree is traversed (extremely long!!!).
Results are saved in
../results
.
Module GraphEmbedding¶
-
class
graphEmbeddings3D.graphEmbedding.
GraphEmbedding
(lengths, graph_type, tmpFileName=None, window=None, num_sols=None, allowedNumberOfMissing=0)¶ This class implements the computation of spatial embeddings for a graph \(G\) with edge lengths \(\mathbb{d}\)
Arbitrary minimally rigid graphs with vertices labeled by 1, …, N are supported:
- use graph_type=’edges’
- The edges are taken from the dict lengths.
- The graph must contain the triangle 1,2,3.
Predefined graphs:
- \(G_{16}\)
- graph_type=’Max6vertices’
- edges: {(1, 3), (5, 6), (2, 6), (2, 3), (3, 5), (1, 2), (4, 6), (1, 5), (4, 5), (1, 6), (3, 4), (2, 4)}
- \(G_{48}\)
- graph_type=’Max7vertices’
- edges: {(2, 7), (4, 7), (1, 3), (4, 5), (1, 4), (5, 6), (2, 6), (1, 6), (3, 7), (1, 2), (6, 7), (5, 7), (1, 5), (2, 3), (3, 4)}
- \(G_{32a}\)
- graph_type=‘7vert32a’
- edges: {(4, 7), (1, 3), (5, 6), (1, 4), (1, 6), (3, 7), (2, 5), (3, 5), (1, 2), (6, 7), (5, 7), (3, 6), (2, 3), (3, 4), (2, 4)}
- \(G_{32b}\)
- graph_type=‘7vert32b’
- edges: {(2, 7), (4, 7), (2, 6), (4, 5), (1, 4), (5, 6), (1, 3), (2, 3), (3, 7), (2, 5), (1, 2), (6, 7), (1, 5), (3, 6), (3, 4)}
- \(G_{24}\)
- graph_type=‘7vert24’
- edges: {(2, 7), (4, 7), (2, 6), (5, 6), (1, 4), (1, 3), (2, 3), (3, 7), (2, 5), (1, 2), (4, 6), (5, 7), (1, 5), (3, 6), (3, 4)}
- \(G_{16a}\)
- graph_type=‘7vert16a’
- edges: {(4, 7), (1, 3), (5, 6), (1, 6), (3, 7), (2, 5), (3, 5), (1, 2), (4, 6), (5, 7), (3, 6), (1, 7), (2, 3), (3, 4), (2, 4)}
- \(G_{16b}\)
- graph_type=‘7vert16b’
- edges: {(2, 7), (4, 7), (2, 6), (4, 5), (1, 4), (1, 3), (2, 3), (3, 7), (2, 5), (3, 5), (1, 2), (6, 7), (4, 6), (1, 5), (3, 6)}
- \(G_{160}\)
- graph_type=’Max8vertices’, or ‘Max8vertices_distSyst’ for using distance system instead of sphere equations (faster but often inaccurate)
- edges: {(2, 7), (3, 2), (2, 6), (6, 8), (7, 8), (6, 1), (3, 1), (2, 8), (4, 7), (2, 1), (5, 8), (4, 3), (5, 1), (5, 4), (3, 7), (4, 1), (6, 5), (5, 7)}
- \(G_{128}\)
- graph_type=’Ring8vertices’
- edges: {(1, 2), (2, 7), (5, 6), (1, 3), (6, 7), (6, 8), (4, 8), (4, 5), (2, 8), (7, 8), (1, 4), (3, 8), (1, 5), (1, 6), (1, 7), (2, 3), (3, 4), (5, 8)}
Inputs:
- lengths is a dictionary with edge lengths of graph given by graph_type
- tmpFileName is used for temporary files used during computations. If None, random hash is used.
- num_sols must be specified if graph_type is ‘edges’. It is the number of complex embeddings of the graph.
- allowedNumberOfMissing indicates how many solutions can be lost in PHC computation without causing a recomputation.
-
findEmbeddings
(tolerance=1e-15, errorMsg=True, usePrev=True)¶ Compute embeddings of the graph compatible with the current edge lengths and fixed triangle and return them as dictionary {[‘real’]: listRealEmbeddings, [‘complex’]: listComplexEmbeddings}. Embeddings are considered real if the imaginary part of all coordinates is smaller than tolerance.
Package
phcpy
is used for the computation. If usePrev=True, then the solutions are tracked from ones from the previous call, if there was any.
-
getEdgeLength
(u, v=None)¶ Return length of edge uv.
-
getEmbedding
()¶ Return one of the real embeddings comaptible with the current edge lengths.
-
getEquations
()¶ Return sphere equations of the graph corresponding to current edge lengths.
-
getLengths
()¶ Return dictionary of edge lengths.
-
getPhiTheta
(uvwpc)¶ Return angles \(\phi\) and \(\theta\) in the subgraph \((u,v,w,p,c)\) given by 5-tuple uvwpc.
-
setEdgeLength
(Luv, u, v)¶ Set length of edge uv to Luv.
-
setLengths
(lengths)¶ Set edge lengths to lengths.
-
setPhiTheta
(uvwpc, phi, theta)¶ Set edge lengths so that the angles \(\phi\) and \(\theta\) in the subgraph \((u,v,w,p,c)\) given by 5-tuple uvwpc are phi and theta.
-
exception
graphEmbeddings3D.graphEmbedding.
TriangleInequalityError
(errorMsg)¶ Exception raised if a tringle inequality is violated.
-
graphEmbeddings3D.graphEmbedding.
getEdgeLengthsByEmbedding
(graph_type, vert_coordinates, edges=[])¶ Return edge lengths for graph_type obtained by taking corresponding distances of vertices given by vert_coordinates.