MCPcopy Create free account
hub / github.com/ciphermodelabs/ciphercore / evaluate_graph

Method evaluate_graph

ciphercore-base/src/evaluators.rs:62–140  ·  view source on GitHub ↗
(&mut self, graph: Graph, inputs_values: Vec<Value>)

Source from the content-addressed store, hash-verified

60 }
61
62 fn evaluate_graph(&mut self, graph: Graph, inputs_values: Vec<Value>) -> Result<Value> {
63 graph.get_context().check_finalized()?;
64 let mut num_input_nodes = 0;
65 let nodes = graph.get_nodes();
66
67 for node in nodes.iter() {
68 if node.get_operation().is_input() {
69 num_input_nodes += 1;
70 }
71 }
72 if num_input_nodes != inputs_values.len() {
73 return Err(runtime_error!(
74 "Incorrect number of inputs for evaluation: {} expected, but {} provided",
75 num_input_nodes,
76 inputs_values.len()
77 ));
78 }
79
80 let mut node_option_values: Vec<Option<Value>> = vec![];
81
82 let num_nodes = nodes.len();
83 let mut to_consume_option = vec![0; num_nodes];
84 for node in nodes.iter() {
85 for dep in node.get_node_dependencies() {
86 to_consume_option[dep.get_id() as usize] += 1;
87 }
88 }
89
90 let output_node = graph.get_output_node()?;
91 let output_id = output_node.get_id() as usize;
92 let mut update_consumed_option_nodes = |node: Node, values: &mut [Option<Value>]| {
93 for dep in node.get_node_dependencies() {
94 let dep_id = dep.get_id() as usize;
95 to_consume_option[dep_id] -= 1;
96 if to_consume_option[dep_id] == 0 && dep_id != output_id {
97 values[dep_id] = None;
98 }
99 }
100 };
101 let mut input_id: u64 = 0;
102 for node in nodes.iter() {
103 let mut dependencies_values = vec![];
104 for dependency in node.get_node_dependencies() {
105 let node_value = node_option_values[dependency.get_id() as usize].clone();
106 match node_value {
107 Some(value) => dependencies_values.push(value.clone()),
108 None => {
109 panic!("Dependency is already removed. Shouldn't be here.");
110 }
111 }
112 }
113 match node.get_operation() {
114 Operation::Input(t) => {
115 if !inputs_values[input_id as usize].check_type(t.clone())? {
116 return Err(runtime_error!(
117 "Invalid input type. Type is {:?}, value is {:?}.",
118 t,
119 inputs_values[input_id as usize]

Callers 5

evaluate_call_iterateMethod · 0.80
evaluate_contextMethod · 0.80
get_evaluator_resultFunction · 0.80
stress_testFunction · 0.80

Implementers 1

simple_evaluator.rsciphercore-base/src/evaluators/simple_

Calls 13

is_inputMethod · 0.80
get_node_dependenciesMethod · 0.80
cloneMethod · 0.80
check_typeMethod · 0.80
evaluate_call_iterateMethod · 0.80
evaluate_nodeMethod · 0.80
check_finalizedMethod · 0.45
get_contextMethod · 0.45
get_nodesMethod · 0.45
get_operationMethod · 0.45
get_idMethod · 0.45
get_output_nodeMethod · 0.45

Tested by

no test coverage detected