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.PushforwardsModule

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_basesMethod
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_basisMethod
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_sheafMethod
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_mapMethod
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