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.
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.
CellularSheaves.NetworkSheaves.Pushforwards.fiber_section_basis — Method
fiber_section_basis(F, verts::Vector{Int}, fedges::Vector{Tuple{Int,Int}}) -> MatrixCompute 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.
CellularSheaves.NetworkSheaves.Pushforwards.pushforward_sheaf — Method
pushforward_sheaf(hom::GraphHomomorphism, F) -> EuclideanSheafConstruct 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).
CellularSheaves.NetworkSheaves.Pushforwards.pushforward_transfer_map — Method
pushforward_transfer_map(hom::GraphHomomorphism, F) -> MatrixConstruct 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).