use computegraph::graph::Graph;
use computegraph::{GraphOperation, LocalValueId};
pub struct LinearizedGraph<Op: GraphOperation> {
graph: Graph<Op>,
tangent_inputs: Vec<(Op::InputKey, LocalValueId)>,
tangent_outputs: Vec<Option<LocalValueId>>,
}
impl<Op: GraphOperation> LinearizedGraph<Op> {
pub(crate) fn from_parts(
graph: Graph<Op>,
tangent_inputs: Vec<(Op::InputKey, LocalValueId)>,
tangent_outputs: Vec<Option<LocalValueId>>,
) -> Self {
Self {
graph,
tangent_inputs,
tangent_outputs,
}
}
pub fn as_graph(&self) -> &Graph<Op> {
&self.graph
}
pub fn into_graph(self) -> Graph<Op> {
self.graph
}
pub fn tangent_inputs(&self) -> &[(Op::InputKey, LocalValueId)] {
&self.tangent_inputs
}
pub fn tangent_outputs(&self) -> &[Option<LocalValueId>] {
&self.tangent_outputs
}
}