use crate::graph::graph_classifier::{GraphClassifier, GraphValue};
use crate::pattern::Pattern;
use crate::pattern_graph::{from_patterns_with_policy, PatternGraph};
use crate::reconcile::{HasIdentity, Mergeable, ReconciliationPolicy, Refinable};
use crate::subject::Symbol;
pub fn unfold_graph<A, Extra, V>(
classifier: &GraphClassifier<Extra, V>,
policy: &ReconciliationPolicy<V::MergeStrategy>,
expand: impl Fn(A) -> Vec<Pattern<V>>,
seeds: Vec<A>,
) -> PatternGraph<Extra, V>
where
V: GraphValue<Id = Symbol>
+ HasIdentity<V, Symbol>
+ Mergeable
+ Refinable
+ PartialEq
+ Clone
+ 'static,
Extra: 'static,
{
let patterns: Vec<Pattern<V>> = seeds.into_iter().flat_map(expand).collect();
from_patterns_with_policy(classifier, policy, patterns)
}