How to use Execute method of NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine class

Best NBi code snippet using NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine.Execute

SummarizeEngineTest.cs

Source:SummarizeEngineTest.cs Github

copy

Full Screen

...19 private IResultSet Build()20 {21 var args = new ObjectsResultSetResolverArgs(new[] { new object[] { "alpha", 1 }, new object[] { "alpha", 2 }, new object[] { "beta", 3 }, new object[] { "alpha", 4 } });22 var resolver = new ObjectsResultSetResolver(args);23 var rs = resolver.Execute();24 rs.Columns[0].ColumnName = "keyColumn";25 rs.Columns[1].ColumnName = "valueColumn";26 return rs;27 }28 private IResultSet BuildLarge(int count)29 {30 var values = new List<object>();31 for (int i = 0; i < count; i++)32 values.Add(new object[] { i % 2 == 0 ? "alpha" : "beta", 1 });33 var args = new ObjectsResultSetResolverArgs(values);34 var resolver = new ObjectsResultSetResolver(args);35 var rs = resolver.Execute();36 rs.Columns[0].ColumnName = "keyColumn";37 rs.Columns[1].ColumnName = "valueColumn";38 return rs;39 }40 [Test]41 public void Execute_SingleKeySingleAggregation_ExpectedResultSet()42 {43 var rs = Build();44 var args = new SummarizeArgs(45 new List<ColumnAggregationArgs>()46 { new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Sum, ColumnType.Numeric, null) },47 new List<IColumnDefinitionLight>()48 { Mock.Of<IColumnDefinitionLight>(x => x.Identifier == new ColumnNameIdentifier("keyColumn") && x.Type == ColumnType.Text) }49 );50 var summarize = new SummarizeEngine(args);51 var result = summarize.Execute(rs);52 Assert.That(result, Is.Not.Null);53 Assert.That(result.Columns.Count, Is.EqualTo(2));54 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["keyColumn"] as string == "alpha"));55 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["keyColumn"] as string == "beta"));56 Assert.That(result.Rows.Count, Is.EqualTo(2));57 Assert.That(Convert.ToInt32(result.Rows.Cast<DataRow>().Single(x => x["keyColumn"] as string == "alpha")["valueColumn"]) == 7);58 Assert.That(Convert.ToInt32(result.Rows.Cast<DataRow>().Single(x => x["keyColumn"] as string == "beta")["valueColumn"]) == 3);59 }60 [Test]61 public void Execute_MultipleKeySingleAggregation_ExpectedResultSet()62 {63 var rs = new ObjectsResultSetResolver(64 new ObjectsResultSetResolverArgs(65 new[] { new object[] { "alpha", "foo", 1 }, new object[] { "alpha", "foo", 2 }, new object[] { "beta", "foo", 3 }, new object[] { "alpha", "bar", 4 } })66 ).Execute();67 rs.Columns[0].ColumnName = "ColumnA";68 rs.Columns[1].ColumnName = "ColumnB";69 rs.Columns[2].ColumnName = "valueColumn";70 var args = new SummarizeArgs(71 new List<ColumnAggregationArgs>()72 { new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Sum, ColumnType.Numeric, null) },73 new List<IColumnDefinitionLight>()74 {75 Mock.Of<IColumnDefinitionLight>(x => x.Identifier == new ColumnNameIdentifier("ColumnA") && x.Type == ColumnType.Text),76 Mock.Of<IColumnDefinitionLight>(x => x.Identifier == new ColumnNameIdentifier("ColumnB") && x.Type == ColumnType.Text)77 }78 );79 var summarize = new SummarizeEngine(args);80 var result = summarize.Execute(rs);81 Assert.That(result, Is.Not.Null);82 Assert.That(result.Columns.Count, Is.EqualTo(3));83 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["ColumnA"] as string == "alpha" && x["ColumnB"] as string == "foo"));84 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["ColumnA"] as string == "beta" && x["ColumnB"] as string == "foo"));85 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["ColumnA"] as string == "alpha" && x["ColumnB"] as string == "bar"));86 Assert.That(result.Rows.Count, Is.EqualTo(3));87 }88 [Test]89 public void Execute_MultipleKeyNonAlphabeticalOrderSingleAggregation_ExpectedResultSet()90 {91 var rs = new ObjectsResultSetResolver(92 new ObjectsResultSetResolverArgs(93 new[] { new object[] { "alpha", "foo", 1 }, new object[] { "alpha", "foo", 2 }, new object[] { "beta", "foo", 3 }, new object[] { "alpha", "bar", 4 } })94 ).Execute();95 rs.Columns[0].ColumnName = "ColumnB";96 rs.Columns[1].ColumnName = "ColumnA";97 rs.Columns[2].ColumnName = "valueColumn";98 var args = new SummarizeArgs(99 new List<ColumnAggregationArgs>()100 { new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Sum, ColumnType.Numeric, null) },101 new List<IColumnDefinitionLight>()102 {103 Mock.Of<IColumnDefinitionLight>(x => x.Identifier == new ColumnNameIdentifier("ColumnB") && x.Type == ColumnType.Text),104 Mock.Of<IColumnDefinitionLight>(x => x.Identifier == new ColumnNameIdentifier("ColumnA") && x.Type == ColumnType.Text),105 }106 );107 var summarize = new SummarizeEngine(args);108 var result = summarize.Execute(rs);109 Assert.That(result, Is.Not.Null);110 Assert.That(result.Columns.Count, Is.EqualTo(3));111 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["ColumnB"] as string == "alpha" && x["ColumnA"] as string == "foo"));112 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["ColumnB"] as string == "beta" && x["ColumnA"] as string == "foo"));113 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["ColumnB"] as string == "alpha" && x["ColumnA"] as string == "bar"));114 Assert.That(result.Rows.Count, Is.EqualTo(3));115 }116 [Test]117 public void Execute_SingleKeyMultipleAggregations_ExpectedResultSet()118 {119 var rs = Build();120 var args = new SummarizeArgs(121 new List<ColumnAggregationArgs>()122 {123 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Sum, ColumnType.Numeric, null),124 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Min, ColumnType.Numeric, null),125 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Max, ColumnType.Numeric, null),126 },127 new List<IColumnDefinitionLight>()128 { Mock.Of<IColumnDefinitionLight>(x => x.Identifier == new ColumnNameIdentifier("keyColumn") && x.Type == ColumnType.Text) }129 );130 var summarize = new SummarizeEngine(args);131 var result = summarize.Execute(rs);132 Assert.That(result, Is.Not.Null);133 Assert.That(result.Columns.Count, Is.EqualTo(4));134 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["keyColumn"] as string == "alpha"));135 Assert.That(result.Rows.Cast<DataRow>().Any(x => x["keyColumn"] as string == "beta"));136 Assert.That(result.Rows.Count, Is.EqualTo(2));137 Assert.That(Convert.ToInt32(result.Rows.Cast<DataRow>().Single(x => x["keyColumn"] as string == "alpha")["valueColumn_Sum"]) == 7);138 Assert.That(Convert.ToInt32(result.Rows.Cast<DataRow>().Single(x => x["keyColumn"] as string == "alpha")["valueColumn_Min"]) == 1);139 Assert.That(Convert.ToInt32(result.Rows.Cast<DataRow>().Single(x => x["keyColumn"] as string == "alpha")["valueColumn_Max"]) == 4);140 Assert.That(Convert.ToInt32(result.Rows.Cast<DataRow>().Single(x => x["keyColumn"] as string == "beta").ItemArray.Skip(1).Distinct().Single()) == 3);141 }142 [Test]143 public void Execute_NoKeySingleAggregations_ExpectedResultSet()144 {145 var rs = Build();146 var args = new SummarizeArgs(147 new List<ColumnAggregationArgs>()148 {149 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Sum, ColumnType.Numeric, null),150 },151 new List<IColumnDefinitionLight>()152 );153 var summarize = new SummarizeEngine(args);154 var result = summarize.Execute(rs);155 Assert.That(result, Is.Not.Null);156 Assert.That(result.Columns.Count, Is.EqualTo(1));157 Assert.That(result.Rows.Count, Is.EqualTo(1));158 Assert.That(Convert.ToInt32(result.Rows[0][0]) == 10);159 }160 [Test]161 public void Execute_NoKeyMultipleAggregations_ExpectedResultSet()162 {163 var rs = Build();164 var args = new SummarizeArgs(165 new List<ColumnAggregationArgs>()166 {167 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Sum, ColumnType.Numeric, null),168 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Min, ColumnType.Numeric, null),169 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Max, ColumnType.Numeric, null),170 },171 new List<IColumnDefinitionLight>()172 );173 var summarize = new SummarizeEngine(args);174 var result = summarize.Execute(rs);175 Assert.That(result, Is.Not.Null);176 Assert.That(result.Columns.Count, Is.EqualTo(3));177 Assert.That(result.Rows.Count, Is.EqualTo(1));178 Assert.That(Convert.ToInt32(result.Rows[0][0]) == 10);179 Assert.That(Convert.ToInt32(result.Rows[0][1]) == 1);180 Assert.That(Convert.ToInt32(result.Rows[0][2]) == 4);181 }182 [Test]183 [TestCase(100)]184 [TestCase(1000)]185 [TestCase(10000)]186 [TestCase(100000)]187 [Retry(3)]188 public void Execute_LargeResultSet_ExpectedPerformance(int count)189 {190 var rs = BuildLarge(count);191 var args = new SummarizeArgs(192 new List<ColumnAggregationArgs>()193 {194 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Sum, ColumnType.Numeric, null),195 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Min, ColumnType.Numeric, null),196 new ColumnAggregationArgs(new ColumnNameIdentifier("valueColumn"), AggregationFunctionType.Max, ColumnType.Numeric, null),197 },198 new List<IColumnDefinitionLight>()199 { Mock.Of<IColumnDefinitionLight>(x => x.Identifier == new ColumnNameIdentifier("keyColumn") && x.Type == ColumnType.Text) }200 );201 var summarize = new SummarizeEngine(args);202 var stopWatch = new Stopwatch();203 stopWatch.Start();204 var result = summarize.Execute(rs);205 stopWatch.Stop();206 Assert.That(stopWatch.Elapsed.TotalSeconds, Is.LessThan(10));207 }208 }209}...

Full Screen

Full Screen

SummarizeEngine.cs

Source:SummarizeEngine.cs Github

copy

Full Screen

...15 {16 private SummarizeArgs Args { get; }17 public SummarizeEngine(SummarizeArgs args)18 => Args = args;19 public IResultSet Execute(IResultSet rs)20 {21 using (var dataTable = new DataTable())22 {23 foreach (var groupBy in Args.GroupBys)24 {25 var column = groupBy.Identifier.GetColumn(rs.Table);26 dataTable.Columns.Add(new DataColumn(column.ColumnName, column.DataType));27 }28 var factory = new AggregationFactory();29 var aggregations = new List<Aggregation>();30 foreach (var aggregation in Args.Aggregations)31 {32 var columnName = ExtractColumnName(rs, aggregation);33 dataTable.Columns.Add(new DataColumn(columnName, MapType(aggregation.Function, aggregation.ColumnType)));34 aggregations.Add(factory.Instantiate(aggregation));35 }36 var groupbyFactory = new GroupByFactory();37 var groupbyEngine = groupbyFactory.Instantiate(new ColumnGroupByArgs(Args.GroupBys, Context.None));38 var groups = groupbyEngine.Execute(rs);39 foreach (var group in groups)40 {41 var values = new List<object>();42 values.AddRange(group.Key.Members);43 foreach (var aggregation in aggregations.Zip(Args.Aggregations, (x, y) => new { Implementation = x, Definition = y }))44 {45 var inputs = new List<object>();46 foreach (DataRow groupRow in group.Value.Rows)47 if (aggregation.Definition.Identifier == null)48 inputs.Add(1);49 else50 inputs.Add(groupRow.GetValue(aggregation.Definition.Identifier));51 var aggrResult = aggregation.Implementation.Execute(inputs);52 values.Add(aggrResult);53 }54 var row = dataTable.NewRow();55 row.ItemArray = values.ToArray();56 dataTable.Rows.Add(row);57 }58 dataTable.AcceptChanges();59 rs.Load(dataTable);60 }61 return rs;62 }63 private string ExtractColumnName(IResultSet rs, ColumnAggregationArgs aggregation)64 {65 if (aggregation.Identifier == null)...

Full Screen

Full Screen

Execute

Using AI Code Generation

copy

Full Screen

1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using NBi.Core.ResultSet;7using NBi.Core.ResultSet.Alteration.Summarization;8using NBi.Core.ResultSet.Alteration.Summarization.Aggregation;9using NBi.Core.ResultSet.Alteration.Summarization.Functions;10using NBi.Core.ResultSet.Alteration.Summarization.Strategies;11using NBi.Core.ResultSet.Resolver;12{13 {14 public static void Execute()15 {16 var rs = new ResultSet();17 rs.LoadSample();18 var engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine(rs);19 var definition = new NBi.Core.ResultSet.Alteration.Summarization.SummarizationDefinition();20 definition.Strategy = new FirstStrategy();21 var aggregation = new AggregationDefinition();22 aggregation.Function = new SumFunction();23 aggregation.Target = new ColumnTarget("Column 1");24 definition.Aggregations.Add(aggregation);25 var rs2 = engine.Execute(definition);26 }27 }28}29using System;30using System.Collections.Generic;31using System.Linq;32using System.Text;33using System.Threading.Tasks;34using NBi.Core.ResultSet;35using NBi.Core.ResultSet.Alteration.Summarization;36using NBi.Core.ResultSet.Alteration.Summarization.Aggregation;37using NBi.Core.ResultSet.Alteration.Summarization.Functions;38using NBi.Core.ResultSet.Alteration.Summarization.Strategies;39using NBi.Core.ResultSet.Resolver;40{41 {42 public static void Execute()43 {44 var rs = new ResultSet();45 rs.LoadSample();46 var engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine(rs);47 var definition = new NBi.Core.ResultSet.Alteration.Summarization.SummarizationDefinition();48 definition.Strategy = new FirstStrategy();

Full Screen

Full Screen

Execute

Using AI Code Generation

copy

Full Screen

1using System;2using System.Collections.Generic;3using System.Data;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7using NBi.Core.ResultSet.Alteration.Summarization;8using NBi.Core.ResultSet;9using NBi.Core.Calculation;10using NBi.Core.Calculation.Predicate.Text;11{12 {13 static void Main(string[] args)14 {15 var rs = new ResultSet();16 rs.Columns.Add(new DataColumn("col1", typeof(string)));17 rs.Columns.Add(new DataColumn("col2", typeof(string)));18 rs.Columns.Add(new DataColumn("col3", typeof(string)));19 rs.Columns.Add(new DataColumn("col4", typeof(string)));20 rs.Columns.Add(new DataColumn("col5", typeof(string)));21 var r1 = rs.NewRow();22 r1["col1"] = "A";23 r1["col2"] = "B";24 r1["col3"] = "C";25 r1["col4"] = "D";26 r1["col5"] = "E";27 rs.LoadDataRow(r1.ItemArray, false);28 var r2 = rs.NewRow();29 r2["col1"] = "A";30 r2["col2"] = "B";31 r2["col3"] = "C";32 r2["col4"] = "D";33 r2["col5"] = "E";34 rs.LoadDataRow(r2.ItemArray, false);35 var r3 = rs.NewRow();36 r3["col1"] = "A";37 r3["col2"] = "B";38 r3["col3"] = "C";39 r3["col4"] = "D";40 r3["col5"] = "E";41 rs.LoadDataRow(r3.ItemArray, false);42 var r4 = rs.NewRow();43 r4["col1"] = "A";44 r4["col2"] = "B";45 r4["col3"] = "C";46 r4["col4"] = "D";47 r4["col5"] = "E";48 rs.LoadDataRow(r4.ItemArray, false);49 var r5 = rs.NewRow();50 r5["col1"] = "A";51 r5["col2"] = "B";52 r5["col3"] = "C";

Full Screen

Full Screen

Execute

Using AI Code Generation

copy

Full Screen

1using NBi.Core.ResultSet.Alteration.Summarization;2using NBi.Core.ResultSet;3using System;4using System.Collections.Generic;5using System.Linq;6using System.Text;7using System.Threading.Tasks;8{9 {10 static void Main(string[] args)11 {12 var engine = new SummarizeEngine();13 var result = engine.Execute(new ResultSet(), new SummarizeArgs());14 }15 }16}17using NBi.Core.ResultSet.Alteration.Summarization;18using NBi.Core.ResultSet;19using System;20using System.Collections.Generic;21using System.Linq;22using System.Text;23using System.Threading.Tasks;24{25 {26 static void Main(string[] args)27 {28 var engine = new SummarizeEngine();29 var result = engine.Execute(new ResultSet(), new SummarizeArgs());30 }31 }32}33using NBi.Core.ResultSet.Alteration.Summarization;34using NBi.Core.ResultSet;35using System;36using System.Collections.Generic;37using System.Linq;38using System.Text;39using System.Threading.Tasks;40{41 {42 static void Main(string[] args)43 {44 var engine = new SummarizeEngine();45 var result = engine.Execute(new ResultSet(), new SummarizeArgs());46 }47 }48}49using NBi.Core.ResultSet.Alteration.Summarization;50using NBi.Core.ResultSet;51using System;52using System.Collections.Generic;53using System.Linq;54using System.Text;55using System.Threading.Tasks;56{57 {58 static void Main(string[] args)59 {60 var engine = new SummarizeEngine();61 var result = engine.Execute(new ResultSet(), new SummarizeArgs());62 }63 }64}65using NBi.Core.ResultSet.Alteration.Summarization;66using NBi.Core.ResultSet;67using System;

Full Screen

Full Screen

Execute

Using AI Code Generation

copy

Full Screen

1NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine();2engine.Execute(resultSet, "column1", "column2");3NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine();4engine.Execute(resultSet, "column1", "column2");5NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine();6engine.Execute(resultSet, "column1", "column2");7NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine();8engine.Execute(resultSet, "column1", "column2");9NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine();10engine.Execute(resultSet, "column1", "column2");11NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine();12engine.Execute(resultSet, "column1", "column2");13NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine engine = new NBi.Core.ResultSet.Alteration.Summarization.SummarizeEngine();14engine.Execute(resultSet, "column1", "column2");

Full Screen

Full Screen

Execute

Using AI Code Generation

copy

Full Screen

1using NBi.Core.ResultSet.Alteration.Summarization;2using System.Data;3using System;4using System.Collections.Generic;5using System.Linq;6using System.Text;7using System.Threading.Tasks;8using NBi.Core.ResultSet;9using NBi.Core.ResultSet.Resolver;10using NBi.Core.Query.Resolver;11using NBi.Core.Query;12using NBi.Core.Calculation;13using NBi.Core.Calculation.Grouping;14using NBi.Core.Calculation.Predicate;15using NBi.Core.Calculation.Ranking;16using NBi.Core.Calculation.Ranking.Percentile;17using NBi.Core.Calculation.Ranking.Window;18using NBi.Core.Calculation.Ranking.Window.Neighbor;19using NBi.Core.Calculation.Ranking.Window.Neighbor.Position;20using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Relative;21using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute;22using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity;23using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot;24using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position;25using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position.Sliding;26using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position.Sliding.Window;27using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position.Sliding.Window.Position;28using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position.Sliding.Window.Position.Relative;29using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position.Sliding.Window.Position.Relative.Position;30using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position.Sliding.Window.Position.Relative.Position.Position;31using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position.Sliding.Window.Position.Relative.Position.Position.Position;32using NBi.Core.Calculation.Ranking.Window.Neighbor.Position.Absolute.Proximity.Pivot.Position.Sliding.Window.Position.Relative.Position.Position.Position.Position;

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run NBi automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in SummarizeEngine

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful