private static IEnumerable <IExampleSpace <ContextualValue <TProjection, TContext> > > ContextualizedUnfoldSubspaceInternal <TAccumulator, TContext, TProjection>( TContext context, IEnumerable <TAccumulator> accumulators, ContextualizedUnfoldFunctions <TAccumulator, TContext, TProjection> functions) { IExampleSpace <ContextualValue <TProjection, TContext> > GenerateNextExampleSpace( TAccumulator accumulator, TContext context0) { return(UnfoldInternal(accumulator, context0, functions)); } return(TraverseUnencountered(accumulators, context, functions.NextContext, GenerateNextExampleSpace).Select(exampleSpace => { var currentExample = exampleSpace.Current; var context0 = functions.NextContext(currentExample.Value.Value, currentExample.Value.Context); var exampleWithMoreContext = new Example <ContextualValue <TProjection, TContext> >( currentExample.Id, new ContextualValue <TProjection, TContext>(currentExample.Value.Value, context0), currentExample.Distance); return new ExampleSpace <ContextualValue <TProjection, TContext> >( exampleWithMoreContext, exampleSpace.Subspace); })); }
private static IExample <ContextualValue <TProjection, TContext> > CreateExample <TAccumulator, TContext, TProjection>( TAccumulator accumulator, TContext context, ContextualizedUnfoldFunctions <TAccumulator, TContext, TProjection> functions) { var id = functions.Identify(accumulator); var value = functions.Projection(accumulator); var distance = functions.Measure(accumulator); return(new Example <ContextualValue <TProjection, TContext> >( id, new ContextualValue <TProjection, TContext>(value, context), distance)); }
public static IExampleSpace <ContextualValue <TProjection, TContext> > UnfoldInternal <TAccumulator, TContext, TProjection>( TAccumulator accumulator, TContext context, ContextualizedUnfoldFunctions <TAccumulator, TContext, TProjection> functions) { var example = CreateExample(accumulator, context, functions); var context0 = functions.NextContext(example.Value.Value, context); var(context1, shrinks) = functions.Shrink(accumulator, context0); var subspace = ContextualizedUnfoldSubspaceInternal(context1, shrinks, functions); return(new ExampleSpace <ContextualValue <TProjection, TContext> >(example, subspace)); }
public static IExampleSpace <T> Unfold <T, TContext>( T rootValue, ContextualShrinker <T, TContext> contextualShrinker, MeasureFunc <T> measure, IdentifyFunc <T> identify) { var functions = new ContextualizedUnfoldFunctions <T, TContext, T>( contextualShrinker.ContextualShrink, measure, identify, x => x, contextualShrinker.ContextualTraverse); var contextualizedExampleSpace = UnfoldHelpers.UnfoldInternal( rootValue, contextualShrinker.RootContext, functions); return(contextualizedExampleSpace.Map(x => x.Value)); }