public static ISorterCompParaPoolWorkflowBuilder UpdateAndTrack ( ISorterCompParaPoolWorkflowBuilder builder, IReadOnlyList <int> seeds, bool mergeWithPrev, ISorterCompParaPoolWorkflowTracker tracker ) { IEntity <ISorterCompParaPoolWorkflow> curWorkflowEntity = builder.Entity; foreach (var seed in seeds) { tracker.TrackItem(curWorkflowEntity.Value); curWorkflowEntity = Entity.Make ( guid: curWorkflowEntity.Guid.Add(seed), val: curWorkflowEntity.Value.Step(seed) ); } return(new SorterCompParaPoolWorkflowBuilderImpl( guid: builder.Guid.Add(seeds), inputEntities: InputEntityOptions(builder, mergeWithPrev), entity: curWorkflowEntity, seeds: mergeWithPrev ? builder.Seeds.Concat(seeds).ToList() : seeds.ToList() )); }
public static IReadOnlyDictionary <string, IEntity> InputEntityOptions(ISorterCompParaPoolWorkflowBuilder builder, bool mergeWithPrev) { return(mergeWithPrev ? builder.InputEntities : builder.ToEntityDictionary()); }
public static ISorterCompParaPoolWorkflowBuilder Update ( ISorterCompParaPoolWorkflowBuilder builder, IReadOnlyList <int> seeds, bool mergeWithPrev ) { return(new SorterCompParaPoolWorkflowBuilderImpl( guid: builder.Guid.Add(seeds), inputEntities: InputEntityOptions(builder, mergeWithPrev), entity: seeds.Aggregate ( builder.Entity, (current, seed) => { var newWorkflow = Entity.Make( guid: builder.Guid.Add(seed), val: current.Value.Step(seed) ); return newWorkflow; } ), seeds: mergeWithPrev?builder.Seeds.Concat(seeds).ToList() : seeds.ToList() )); }
public static IReadOnlyDictionary <string, IEntity> ToEntityDictionary(this ISorterCompParaPoolWorkflowBuilder sorterCompParaPoolWorkflowBuilder) { var dict = new Dictionary <string, IEntity>(); dict[SorterCompParaPoolWorkflowParts.AllParts.ToString()] = sorterCompParaPoolWorkflowBuilder.Entity; return(dict); }
public void TestUpdateWithMergeAndTrack2() { ISorterCompParaPoolWorkflowTracker tracker = SorterCompParaPoolWorkflowTracker.Make(); var builder = SorterCompParaPoolWorkflowBuilder.Make ( workFlowGuid: Guid.NewGuid(), repository: TestRepository.EntityRepository, switchableGroupGuid: TestRepository.SwitchableGroupLayerGuid, sorterGroupGuid: TestRepository.SorterLayerGuid, scpParamsGuid: TestRepository.SorterCompParaPoolParamsGuid ); ISorterCompParaPoolWorkflowBuilder updatedBuilder = builder; for (var i = 0; i < 1000; i++) { var seeds = Rando.Fast(i * 17).ToIntEnumerator().Take(5).ToList(); updatedBuilder = SorterCompParaPoolWorkflowBuilder.UpdateAndTrack( builder: updatedBuilder, seeds: seeds, mergeWithPrev: true, tracker: tracker ); var bsetResult = tracker.SorterPoolStats .GenomeStatses .OrderBy(t => t.ReferenceResult.Cast <ISorterEval>().SwitchUseCount) .First().ReferenceResult .Cast <ISorterEval>(); var averageScore = tracker.SorterPoolStats .GenomeStatses.Average(t => t.ReferenceResult.Cast <ISorterEval>().SwitchUseCount); System.Diagnostics.Debug.WriteLine("{0}\t{1}\t{2}\t{3}", bsetResult.SwitchUseCount, bsetResult.Success, averageScore, i); System.Diagnostics.Debug.WriteLine(tracker.PoolReport); tracker = tracker.Trim(1000); } Assert.AreEqual(updatedBuilder.InputEntities.Count, 3); Assert.IsNotNull(updatedBuilder.Entity); Assert.AreEqual(updatedBuilder.Seeds.Count(), 25); }