Graph Operations#

union(other)#

Computes the union of two geometric graphs.

The union contains all edges present in either graph. Both graphs must be defined on the same point set.

Parameters#

  • other (GeometricGraph): Another geometric graph with the same vertices.

Returns#

  • GeometricGraph: A new graph containing the union of edges.

Raises#

  • TypeError: If other is not a GeometricGraph.

  • ValueError: If graphs don’t have the same point sets.

Example#

from proximitygraphs.proximitygraphs import GG, RNG
from proximitygraphs.points import SetPoints

points = SetPoints.uniform_square(n=50, seed=1)

gabriel = GG(points)
rng = RNG(points)

# Union combines edges from both graphs
union_graph = gabriel.union(rng)
print(f"Gabriel: {gabriel.m} edges")
print(f"RNG: {rng.m} edges")
print(f"Union: {union_graph.m} edges")

union_graph.draw(figsize=(8, 8))

intersection(other)#

Computes the intersection of two geometric graphs.

The intersection contains only edges present in both graphs.

Parameters#

  • other (GeometricGraph): Another geometric graph with the same vertices.

Returns#

  • GeometricGraph: A new graph containing only common edges.

Raises#

  • TypeError: If other is not a GeometricGraph.

  • ValueError: If graphs don’t have the same point sets.

Example#

from proximitygraphs.proximitygraphs import GG, DelaunayG
from proximitygraphs.points import SetPoints

points = SetPoints.uniform_square(n=50, seed=1)

gabriel = GG(points)
delaunay = DelaunayG(points)

# Intersection contains only shared edges
intersection_graph = gabriel.intersection(delaunay)
print(f"Gabriel: {gabriel.m} edges")
print(f"Delaunay: {delaunay.m} edges")
print(f"Intersection: {intersection_graph.m} edges")

difference(other)#

Computes the difference of two geometric graphs (self - other).

The result contains edges in self but not in other.

Parameters#

  • other (GeometricGraph): Another geometric graph with the same vertices.

Returns#

  • GeometricGraph: A new graph with edges from self minus edges from other.

Raises#

  • TypeError: If other is not a GeometricGraph.

  • ValueError: If graphs don’t have the same point sets.

Example#

from proximitygraphs.proximitygraphs import DelaunayG, GG
from proximitygraphs.points import SetPoints

points = SetPoints.uniform_square(n=50, seed=1)

delaunay = DelaunayG(points)
gabriel = GG(points)

# Find edges in Delaunay but not in Gabriel
diff_graph = delaunay.difference(gabriel)
print(f"Delaunay: {delaunay.m} edges")
print(f"Gabriel: {gabriel.m} edges")
print(f"Difference: {diff_graph.m} edges")

symmetric_difference(other)#

Computes the symmetric difference of two geometric graphs.

The result contains edges present in exactly one of the two graphs.

Parameters#

  • other (GeometricGraph): Another geometric graph with the same vertices.

Returns#

  • GeometricGraph: A new graph with edges in one graph but not both.

Raises#

  • TypeError: If other is not a GeometricGraph.

  • ValueError: If graphs don’t have the same point sets.

Example#

from proximitygraphs.proximitygraphs import GG, RNG
from proximitygraphs.points import SetPoints

points = SetPoints.uniform_square(n=50, seed=1)

gabriel = GG(points)
rng = RNG(points)

# Symmetric difference: edges in exactly one graph
sym_diff = gabriel.symmetric_difference(rng)
print(f"Gabriel: {gabriel.m} edges")
print(f"RNG: {rng.m} edges")
print(f"Symmetric difference: {sym_diff.m} edges")

recovering(other, distance="R")#

Computes a recovery distance metric between two graphs.

This measures the dissimilarity between two graphs based on their edge sets.

Parameters#

  • other (GeometricGraph): Another geometric graph to compare.

  • distance (str, optional): Distance metric to use. Currently only “R” is supported, which computes the ratio |symmetric_difference| / |union|. Default “R”.

Returns#

  • float: Distance value between 0 (identical) and 1 (completely different).

Raises#

  • TypeError: If other is not a GeometricGraph.

  • NotImplementedError: If distance type is not supported.

Example#

from proximitygraphs.proximitygraphs import GG, RNG, DelaunayG
from proximitygraphs.points import SetPoints

points = SetPoints.uniform_square(n=100, seed=1)

gabriel = GG(points)
rng = RNG(points)
delaunay = DelaunayG(points)

# Compare graphs using recovery distance
print(f"Distance Gabriel-RNG: {gabriel.recovering(rng):.4f}")
print(f"Distance Gabriel-Delaunay: {gabriel.recovering(delaunay):.4f}")
print(f"Distance RNG-Delaunay: {rng.recovering(delaunay):.4f}")