Pushforwards

The Pushforward module provides tools for moving sheaves across graph homomorphisms, computing transfer maps, and constructing fiber‑basis representations. The most frequently used functions are documented below.

CellularSheaves.NetworkSheaves.Pushforwards — Module

Module for the pushforward of a cellular sheaf along a graph homomorphism.

Given a graph homomorphism φ : G → H and a cellular sheaf F on G, the pushforward $\varphi_* F$ is a cellular sheaf on H whose space of global sections is isomorphic to that of F.

This module provides:

  • fiber_section_basis — basis for the global sections of the restriction of F to a single fiber.
  • all_fiber_bases — collects the fiber-section bases for all target vertices.
  • pushforward_sheaf — construct the pushforward sheaf $\varphi_* F$.
  • pushforward_transfer_map — construct the linear map $T : C^0(F) \to C^0(\varphi_* F)$ that sends every global section of F to the corresponding global section of $\varphi_* F$.

See the CellularSheaves.NetworkSheaves.GraphHomomorphisms module for the underlying combinatorial representation of graph homomorphisms.

source
CellularSheaves.NetworkSheaves.Pushforwards.all_fiber_bases — Method
all_fiber_bases(hom::GraphHomomorphism, F) -> Vector{Matrix}

Return a Vector of fiber-section basis matrices, one per target vertex of hom. Entry tv is the result of fiber_section_basis(F, fiber_vertices(hom, tv), fiber_edges(hom, g, tv)) where g = underlying_graph(F) is derived from F internally.

source
CellularSheaves.NetworkSheaves.Pushforwards.fiber_section_basis — Method
fiber_section_basis(F, verts::Vector{Int}, fedges::Vector{Tuple{Int,Int}}) -> Matrix

Compute a basis for the space of global sections of the sub-sheaf of F restricted to the sub-graph induced by verts (with fedges as edge set).

Returns an (total_fiber_stalk_dim × k) matrix whose k columns span the fiber's global-section space. The basis is computed via nullspace_ldlt applied to the fiber coboundary operator.

The rows of the returned matrix are ordered to match the concatenation of the vertex stalks F(v) for v ∈ verts, in the order given by verts.

source
CellularSheaves.NetworkSheaves.Pushforwards.pushforward_sheaf — Method
pushforward_sheaf(hom::GraphHomomorphism, F) -> EuclideanSheaf

Construct the pushforward sheaf $\varphi_* F$ of the cellular sheaf F along the graph homomorphism hom : G → H.

Vertex stalks. The stalk $(\varphi_* F)(v)$ at a target vertex v is (isomorphic to) the space of global sections of F restricted to the fiber $\varphi^{-1}(v)$; a basis for this space is computed via fiber_section_basis (which calls nullspace_ldlt).

Edge stalks and restriction maps. For each target edge $(p, q)$, all source cross-edges mapping to $(p, q)$ contribute to a single combined edge stalk via direct sum. That is, if cross-edges $e_1, e_2, \ldots$ all satisfy $\varphi(\text{src}(e_i)) = p$ and $\varphi(\text{dst}(e_i)) = q$, the edge stalk of $\varphi_* F$ at $(p, q)$ is $F(e_1) \oplus F(e_2) \oplus \cdots$, and the restriction maps are the vertical concatenations of the per-edge pushforward restriction maps.

This ensures correctness when the edge map induced by hom is not injective (multiple source edges mapping to the same target edge pair).

source
CellularSheaves.NetworkSheaves.Pushforwards.pushforward_transfer_map — Method
pushforward_transfer_map(hom::GraphHomomorphism, F) -> Matrix

Construct the linear transfer map $T : C^0(F) \to C^0(\varphi_* F)$ that sends every global section of F to the corresponding global section of the pushforward sheaf $\varphi_* F$.

The map is built fiber-by-fiber: for each target vertex tv, T restricts a 0-cochain of F to the rows belonging to $\varphi^{-1}(\text{tv})$, then expresses those rows in the fiber-basis coordinates via a pseudoinverse.

Concretely, if $B_{\text{tv}}$ is the fiber-basis matrix (columns = global sections of the restriction of F to fiber tv), then

\[T[\text{rows of }tv, \text{cols of fiber}(tv)] = B_{\text{tv}}^+\]

where $B^+$ denotes the Moore–Penrose pseudoinverse.

The identity $d_{\varphi_* F} \circ T \circ s = 0$ holds for every global section $s$ of F (up to floating-point rounding).

source