diff --git a/src/UglyToad.PdfPig.DocumentLayoutAnalysis/KdTree.cs b/src/UglyToad.PdfPig.DocumentLayoutAnalysis/KdTree.cs index 8e75be44..7fedbac2 100644 --- a/src/UglyToad.PdfPig.DocumentLayoutAnalysis/KdTree.cs +++ b/src/UglyToad.PdfPig.DocumentLayoutAnalysis/KdTree.cs @@ -7,37 +7,77 @@ // for kd-tree with line segments, see https://stackoverflow.com/questions/14376679/how-to-represent-line-segments-in-kd-tree - internal class KdTree : KdTree + /// + /// K-D tree data structure of . + /// + public class KdTree : KdTree { - public KdTree(PdfPoint[] candidates) : base(candidates, p => p) + /// + /// K-D tree data structure of . + /// + /// The points used to build the tree. + public KdTree(PdfPoint[] points) : base(points, p => p) { } - public PdfPoint FindNearestNeighbours(PdfPoint pivot, Func distanceMeasure, out int index, out double distance) + /// + /// Get the nearest neighbour to the pivot point. + /// Only returns 1 neighbour, even if equidistant points are found. + /// + /// The point for which to find the nearest neighbour. + /// The distance measure used, e.g. the Euclidian distance. + /// The nearest neighbour's index (returns -1 if not found). + /// The distance between the pivot and the nearest neighbour (returns if not found). + /// The nearest neighbour's point. + public PdfPoint FindNearestNeighbour(PdfPoint pivot, Func distanceMeasure, out int index, out double distance) { return FindNearestNeighbour(pivot, p => p, distanceMeasure, out index, out distance); } + /// + /// Get the k nearest neighbours to the pivot point. + /// Might return more than k neighbours if points are equidistant. + /// Use if only looking for the (single) closest point. + /// + /// The point for which to find the nearest neighbour. + /// The number of neighbours to return. Might return more than k neighbours if points are equidistant. + /// The distance measure used, e.g. the Euclidian distance. + /// Returns a list of tuples of the k nearest neighbours. Tuples are (element, index, distance). public IReadOnlyList<(PdfPoint, int, double)> FindNearestNeighbours(PdfPoint pivot, int k, Func distanceMeasure) { return FindNearestNeighbours(pivot, k, p => p, distanceMeasure); } } - internal class KdTree + /// + /// K-D tree data structure. + /// + /// + public class KdTree { - private readonly KdTreeNode Root; + /// + /// The root of the tree. + /// + public readonly KdTreeNode Root; + /// + /// Number of elements in the tree. + /// public readonly int Count; - public KdTree(IReadOnlyList candidates, Func candidatesPointFunc) + /// + /// K-D tree data structure. + /// + /// The elements used to build the tree. + /// The function that converts the candidate elements into a . + public KdTree(IReadOnlyList elements, Func elementsPointFunc) { - if (candidates == null || candidates.Count == 0) + if (elements == null || elements.Count == 0) { - throw new ArgumentException("KdTree(): candidates cannot be null or empty.", nameof(candidates)); + throw new ArgumentException("KdTree(): candidates cannot be null or empty.", nameof(elements)); } - Count = candidates.Count; - Root = BuildTree(Enumerable.Range(0, candidates.Count).Zip(candidates, (e, p) => (e, candidatesPointFunc(p), p)).ToArray(), 0); + Count = elements.Count; + Root = BuildTree(Enumerable.Range(0, elements.Count).Zip(elements, (e, p) => (e, elementsPointFunc(p), p)).ToArray(), 0); } private KdTreeNode BuildTree((int, PdfPoint, T)[] P, int depth) @@ -76,10 +116,11 @@ #region NN /// /// Get the nearest neighbour to the pivot element. + /// Only returns 1 neighbour, even if equidistant points are found. /// /// The element for which to find the nearest neighbour. - /// - /// + /// The function that converts the pivot element into a . + /// The distance measure used, e.g. the Euclidian distance. /// The nearest neighbour's index (returns -1 if not found). /// The distance between the pivot and the nearest neighbour (returns if not found). /// The nearest neighbour's element. @@ -161,36 +202,21 @@ #endregion #region k-NN - /***************************************************************************** - * WARNING: k-nearest neighbours algo will need more checks and tests. - *****************************************************************************/ - /// - /// Get the k nearest neighbours to the pivot element. If elements are equidistant, they are counted as one. + /// Get the k nearest neighbours to the pivot element. + /// Might return more than k neighbours if points are equidistant. + /// Use if only looking for the (single) closest point. /// /// The element for which to find the k nearest neighbours. - /// The number of neighbours to return. If elements are equidistant, they are counted as one. - /// - /// + /// The number of neighbours to return. Might return more than k neighbours if points are equidistant. + /// The function that converts the pivot element into a . + /// The distance measure used, e.g. the Euclidian distance. /// Returns a list of tuples of the k nearest neighbours. Tuples are (element, index, distance). public IReadOnlyList<(T, int, double)> FindNearestNeighbours(T pivot, int k, Func pivotPointFunc, Func distanceMeasure) { - if (k == 1) - { - // if only 1 neighbour required, use default to avoid creating KNearestNeighboursQueue - var nn = FindNearestNeighbour(pivot, pivotPointFunc, distanceMeasure, out int index, out double distance); - if (index == -1) - { - return EmptyArray<(T, int, double)>.Instance; - } - return new List<(T, int, double)>() { (nn, index, distance) }; - } - else - { - var kdTreeNodes = new KNearestNeighboursQueue(k); - FindNearestNeighbours(Root, pivot, k, pivotPointFunc, distanceMeasure, kdTreeNodes); - return kdTreeNodes.SelectMany(n => n.Value.Select(e => (e.Element, e.Index, n.Key))).ToList(); - } + var kdTreeNodes = new KNearestNeighboursQueue(k); + FindNearestNeighbours(Root, pivot, k, pivotPointFunc, distanceMeasure, kdTreeNodes); + return kdTreeNodes.SelectMany(n => n.Value.Select(e => (e.Element, e.Index, n.Key))).ToList(); } private static (KdTreeNode, double) FindNearestNeighbours(KdTreeNode node, T pivot, int k, @@ -324,33 +350,57 @@ } #endregion - private class KdTreeLeaf : KdTreeNode + /// + /// K-D tree leaf. + /// + /// + public class KdTreeLeaf : KdTreeNode { + /// + /// Return true if leaf. + /// public override bool IsLeaf => true; - public KdTreeLeaf((int, PdfPoint, Q) point, int depth) + internal KdTreeLeaf((int, PdfPoint, Q) point, int depth) : base(null, null, point, depth) { } + /// public override string ToString() { return "Leaf->" + Value.ToString(); } } - private class KdTreeNode + /// + /// K-D tree node. + /// + /// + public class KdTreeNode { /// - /// Split value. + /// Split value (X or Y axis). /// public double L => IsAxisCutX ? Value.X : Value.Y; + /// + /// Split point. + /// public PdfPoint Value { get; } + /// + /// Left child. + /// public KdTreeNode LeftChild { get; internal set; } + /// + /// Right child. + /// public KdTreeNode RightChild { get; internal set; } + /// + /// The node's element. + /// public Q Element { get; } /// @@ -358,13 +408,22 @@ /// public bool IsAxisCutX { get; } + /// + /// The element's depth in the tree. + /// public int Depth { get; } + /// + /// Return true if leaf. + /// public virtual bool IsLeaf => false; + /// + /// The index of the element in the original array. + /// public int Index { get; } - public KdTreeNode(KdTreeNode leftChild, KdTreeNode rightChild, (int, PdfPoint, Q) point, int depth) + internal KdTreeNode(KdTreeNode leftChild, KdTreeNode rightChild, (int, PdfPoint, Q) point, int depth) { LeftChild = leftChild; RightChild = rightChild; @@ -375,6 +434,9 @@ Index = point.Item1; } + /// + /// Get the leaves. + /// public IEnumerable> GetLeaves() { var leaves = new List>(); @@ -397,6 +459,7 @@ } } + /// public override string ToString() { return "Node->" + Value.ToString(); diff --git a/src/UglyToad.PdfPig.DocumentLayoutAnalysis/MathExtensions.cs b/src/UglyToad.PdfPig.DocumentLayoutAnalysis/MathExtensions.cs index ec2d621d..91a75c3c 100644 --- a/src/UglyToad.PdfPig.DocumentLayoutAnalysis/MathExtensions.cs +++ b/src/UglyToad.PdfPig.DocumentLayoutAnalysis/MathExtensions.cs @@ -15,7 +15,10 @@ public static float Mode(this IEnumerable array) { if (array == null || array.Count() == 0) return float.NaN; - return array.GroupBy(v => v).OrderByDescending(g => g.Count()).First().Key; + var sorted = array.GroupBy(v => v).Select(v => (v.Count(), v.Key)).OrderByDescending(g => g.Item1); + var mode = sorted.First(); + if (mode.Item1 == sorted.ElementAt(1).Item1) return float.NaN; + return mode.Key; } /// @@ -25,7 +28,10 @@ public static double Mode(this IEnumerable array) { if (array == null || array.Count() == 0) return double.NaN; - return array.GroupBy(v => v).OrderByDescending(g => g.Count()).First().Key; + var sorted = array.GroupBy(v => v).Select(v => (v.Count(), v.Key)).OrderByDescending(g => g.Item1); + var mode = sorted.First(); + if (mode.Item1 == sorted.ElementAt(1).Item1) return double.NaN; + return mode.Key; } } } diff --git a/src/UglyToad.PdfPig.Tests/Dla/DistancesTest.cs b/src/UglyToad.PdfPig.Tests/Dla/DistancesTest.cs new file mode 100644 index 00000000..a082c4b2 --- /dev/null +++ b/src/UglyToad.PdfPig.Tests/Dla/DistancesTest.cs @@ -0,0 +1,2160 @@ +namespace UglyToad.PdfPig.Tests.Dla +{ + using System.Collections.Generic; + using UglyToad.PdfPig.Core; + using UglyToad.PdfPig.DocumentLayoutAnalysis; + using Xunit; + + public class DistancesTest + { + private static readonly DoubleComparer DoubleComparer = new DoubleComparer(3); + private static readonly DoubleComparer PreciseDoubleComparer = new DoubleComparer(6); + private static readonly PointComparer PointComparer = new PointComparer(DoubleComparer); + + #region data + public static IEnumerable EuclidianData => new[] + { + new object[] + { + new PdfPoint[] { new PdfPoint(90.24731618468236, 43.62633399359473), new PdfPoint(17.867565576085088, 32.782007019386505) }, + 73.18762003020919 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(13.627332330999254, 28.760810187860784), new PdfPoint(28.538521888838975, 6.860016267231284) }, + 26.49506271711223 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(83.20241900630643, 30.048081721926245), new PdfPoint(21.050613919520867, 14.275737478929319) }, + 64.12186614927377 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(92.74165668368347, 10.60166880206096), new PdfPoint(25.50019785058163, 84.94703259873214) }, + 100.24293942250056 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(74.69197005265674, 0.5711367286566627), new PdfPoint(98.68842479477402, 59.382403563089895) }, + 63.518461464848066 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(61.799567302485855, 22.60713445056737), new PdfPoint(69.68800242511132, 10.002666105022119) }, + 14.869432771888889 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(88.27381018119712, 20.355927229812632), new PdfPoint(51.91217721059409, 12.42297674102737) }, + 37.21693237958179 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(9.946350487828582, 96.24071961273519), new PdfPoint(51.20155336677473, 18.573338983915566) }, + 87.94437888986967 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(42.301542152342975, 71.0268278467597), new PdfPoint(80.4504756172487, 87.90945935396925) }, + 41.71767456508127 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(39.95911735743669, 22.74415307389599), new PdfPoint(70.62190359768381, 98.23485710771425) }, + 81.48038325595083 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(15.943401937436875, 22.53576245617849), new PdfPoint(43.04225532992619, 75.04469166380504) }, + 59.08921645883593 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(24.152990800462494, 64.3114455750943), new PdfPoint(44.294468993306566, 19.817062027798972) }, + 48.840856985178284 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(47.59045953366275, 13.240845723750505), new PdfPoint(16.885076072066774, 15.297667751552623) }, + 30.77419520276207 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(31.373930332993982, 24.45115692077967), new PdfPoint(70.40782520265239, 49.446688270114606) }, + 46.35106833861686 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(88.32120049243754, 99.81493006270648), new PdfPoint(97.82614545254702, 81.47516521939245) }, + 20.656499054843923 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(93.71954549212276, 55.234799778128384), new PdfPoint(50.06779158577621, 80.3730200804847) }, + 50.37266857205443 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(8.73334808529217, 67.19972798998957), new PdfPoint(72.72416222695476, 34.441901201360004) }, + 71.88810409536936 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(79.830367302578, 9.526648563088969), new PdfPoint(6.878665033094277, 98.51835165479757) }, + 115.0716041566216 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(5.806425575524088, 83.93169607719445), new PdfPoint(88.56126998149352, 43.756118978818336) }, + 91.99152823952744 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(37.43763207255889, 73.08296154461291), new PdfPoint(33.4413729503136, 57.205058709610434) }, + 16.373084175252643 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(41.361597162194094, 65.73426325987248), new PdfPoint(6.8084552897003, 11.124170302635816) }, + 64.62338482359705 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(86.75927573545114, 16.928446468389634), new PdfPoint(35.27441726089222, 49.83229364362667) }, + 61.10117683872149 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(30.200855348008005, 74.79043110034802), new PdfPoint(95.80978993300026, 39.211085961681924) }, + 74.63526041941648 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(25.33003573407783, 62.880521872416395), new PdfPoint(1.6705451917022773, 16.96539545382022) }, + 51.65239904167498 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(34.34672262867002, 42.592356106882576), new PdfPoint(24.884072231116605, 56.921225819817614) }, + 17.17143732471411 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(89.15412704412817, 88.37164183511403), new PdfPoint(32.24873371134047, 28.369922087872702) }, + 82.69480130567923 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(1.6979610201725892, 95.9922092929919), new PdfPoint(49.91245873025015, 40.832278805031784) }, + 73.26155690996245 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(48.90824911848486, 65.13487817644688), new PdfPoint(67.48974924537539, 3.1710836677055987) }, + 64.68990629833334 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(39.01916076290532, 71.43956063039772), new PdfPoint(12.771604391474977, 88.93023701541115) }, + 31.54136927713634 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(35.53493153839554, 95.27197941751596), new PdfPoint(2.25203272174751, 41.400926327157585) }, + 63.32331098974091 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(61.64068343406692, 23.783528785242524), new PdfPoint(77.68625727524413, 11.583231979117414) }, + 20.15707523551512 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(70.30906976644967, 1.6843723692948176), new PdfPoint(81.58717227813773, 4.127326855154512) }, + 11.539654365886639 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(35.68337931255373, 28.41802941403554), new PdfPoint(95.2404209242609, 59.71568369346354) }, + 67.27989572623622 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(39.74445757391695, 99.71644975081914), new PdfPoint(70.96398334625921, 9.625584109629848) }, + 95.34685554033108 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(33.898334948931485, 82.7825409624103), new PdfPoint(73.33986079897382, 50.827163063638444) }, + 50.76199501628037 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(26.38908676855435, 19.15840409585945), new PdfPoint(79.56799377408514, 9.373983722285972) }, + 54.07153624921056 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(4.997237985523606, 78.27744089700448), new PdfPoint(59.27194112325094, 45.06972335577788) }, + 63.62779192291933 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(71.6114238593777, 33.68267014606593), new PdfPoint(9.445719602277213, 67.13435203688017) }, + 70.59454516537032 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(19.700099189941444, 29.06218425839088), new PdfPoint(0.5747505456697666, 75.38420837889997) }, + 50.114956643560724 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(58.54063193676983, 41.94296650986596), new PdfPoint(42.42348694981069, 42.3583678287077) }, + 16.122497349553434 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(17.27398234672155, 26.763957901428782), new PdfPoint(17.629856654704078, 56.57030697641846) }, + 29.80847348830899 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(26.704741739583802, 96.5307695578557), new PdfPoint(51.139875585966266, 3.1130453335804664) }, + 96.56058701837601 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(80.97308909849835, 12.66996068839984), new PdfPoint(6.347790990980096, 16.738022365996063) }, + 74.73609732551395 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(2.733042773877803, 85.46094868883816), new PdfPoint(33.47818064008603, 98.71145031132569) }, + 33.478938090382975 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(31.2206484509314, 68.38456425109752), new PdfPoint(88.17262375584501, 0.45503247522938883) }, + 88.6450719353319 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(93.02088156942999, 60.99908828891976), new PdfPoint(41.90474685733957, 74.8348089753393) }, + 52.95551335618599 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(15.124600788662379, 70.68720338234709), new PdfPoint(3.742125301631316, 39.035370762528764) }, + 33.6362788727567 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(39.134481749810355, 4.168696596047572), new PdfPoint(47.49515391224099, 95.30869770344592) }, + 91.52267828721041 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(14.238558714720451, 26.63995786876604), new PdfPoint(10.271140335465113, 50.48739363609522) }, + 24.175206333616764 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(60.19767687864217, 31.507288390211585), new PdfPoint(63.22540364896469, 54.95067048104667) }, + 23.638089881642614 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(82.47536307247728, 23.852070401207847), new PdfPoint(24.845915091528436, 59.815612436573204) }, + 67.93032923752378 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(5.742728826305854, 10.903672462879587), new PdfPoint(29.204847044936677, 21.100674279909203) }, + 25.58221720964611 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(3.551670072889057, 14.833377691522553), new PdfPoint(74.34887291197923, 80.8728910714494) }, + 96.8166372959566 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(94.19197094248776, 98.1800091084427), new PdfPoint(55.24422709632566, 17.546024652353864) }, + 89.54756389746755 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(97.32046530484425, 39.91828413905122), new PdfPoint(73.36550952894059, 3.0216750962359096) }, + 43.99090434491953 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(75.30662201059035, 16.227576984011172), new PdfPoint(41.23452001384679, 49.52660040083659) }, + 47.64171591148648 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(10.227995841944237, 36.333203271013204), new PdfPoint(64.57740556223257, 56.78645558747897) }, + 58.070593825660026 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(61.8843345601259, 98.90253698002944), new PdfPoint(7.464538114608644, 68.07922474356367) }, + 62.542711984676465 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(10.763720008792854, 59.88290260856495), new PdfPoint(33.26292295943708, 25.305968171820194) }, + 41.25261844364819 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(94.50079442689776, 0.8521090400356868), new PdfPoint(33.51973816084174, 55.47829840170898) }, + 81.8700787070666 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(22.386725604121438, 50.58310214504864), new PdfPoint(19.497236521021566, 37.40935541896238) }, + 13.486910319432761 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(45.09635767101632, 42.80625865728352), new PdfPoint(39.01248617420825, 43.98355705279392) }, + 6.196734938800033 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(26.182628275203346, 94.62747241592761), new PdfPoint(8.360071736282249, 99.59185794913034) }, + 18.501044438228664 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(29.97897147246704, 80.08418606709093), new PdfPoint(32.04043118442645, 76.24486477446655) }, + 4.357752188001366 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(35.8112901139053, 67.76454909162265), new PdfPoint(61.73679921962242, 51.32758591963669) }, + 30.69699953917067 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(9.644780647487405, 73.55059322771153), new PdfPoint(46.05697096179101, 64.727450759043) }, + 37.465923804271625 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(81.987078811042, 10.352711104586154), new PdfPoint(91.69622794776302, 88.51146333341543) }, + 78.75949547150881 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(92.01315061759333, 27.35699967088153), new PdfPoint(12.07668230534178, 52.095415256010604) }, + 83.67692735693724 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(63.61138211234814, 85.19421787134476), new PdfPoint(22.765515898869292, 53.93107729970329) }, + 51.437036706361965 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(90.74007025591781, 31.581966767039738), new PdfPoint(37.1124848514539, 86.47293221309077) }, + 76.7394032027396 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(39.72679938841179, 20.980138000591186), new PdfPoint(58.097947880117886, 23.10303240878907) }, + 18.49339821592216 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(5.056386645802091, 31.279204232435298), new PdfPoint(76.75600356726612, 38.934105575632586) }, + 72.10709106085736 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(71.72428487818497, 53.16820074599994), new PdfPoint(0.8898222526278476, 89.17613290648421) }, + 79.46126272546572 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(54.71647740684196, 22.524622848155595), new PdfPoint(37.606136053148866, 61.73707642171146) }, + 42.78294399054574 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(42.997364184142796, 28.274287607577374), new PdfPoint(5.852482990006158, 76.40064211716911) }, + 60.79381709770679 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(55.285066632631896, 96.37862407767048), new PdfPoint(2.000803550578245, 33.18340213435689) }, + 82.66104746893889 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(84.77090973513978, 8.13025899097768), new PdfPoint(15.811882378486652, 97.17863857198556) }, + 112.62753375608867 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(17.939326786505116, 35.281822803148756), new PdfPoint(42.3606826157656, 16.42361535611624) }, + 30.855058072456572 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(14.568679725909295, 75.38162460991344), new PdfPoint(56.60665118057867, 30.428712898784227) }, + 61.54636719849658 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(67.72913939938444, 37.739605602697665), new PdfPoint(88.83780242246732, 54.29301553080329) }, + 26.825194032289353 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(65.99152943385094, 29.065217642231623), new PdfPoint(19.248750759536136, 79.17228904177894) }, + 68.52449169775221 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(23.014615369743662, 21.541826200519807), new PdfPoint(78.06602159560883, 42.29495596230271) }, + 58.83323654495497 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(1.0855294673421612, 71.01022976841567), new PdfPoint(45.39011236513827, 9.125469029688759) }, + 76.1092614432512 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(28.93485823606332, 46.75539001120076), new PdfPoint(89.6713132806724, 1.877796690728084) }, + 75.51764928560443 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(96.59071666295883, 60.65058901026655), new PdfPoint(39.206764132730974, 43.44639574639725) }, + 59.90744756582448 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(68.29423794078235, 14.03993514647295), new PdfPoint(6.659410893460061, 87.58301493441265) }, + 95.95538801885277 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(91.03885795164902, 4.933753645735561), new PdfPoint(47.43758554074618, 97.06867025844417) }, + 101.93092668606779 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(9.988817563057351, 47.791168962377384), new PdfPoint(71.52111441522695, 4.611956350561908) }, + 75.17092494894476 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(72.89560859775959, 92.63406809396697), new PdfPoint(55.862241631215284, 14.865554963645945) }, + 79.61204195797188 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(92.69901042291939, 25.628532709733577), new PdfPoint(88.88007394261508, 67.22400086739043) }, + 41.77041114347864 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(33.05641258924978, 1.6321819899129286), new PdfPoint(50.503160353959366, 72.36201473733382) }, + 72.84983354849572 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(14.805520633087566, 60.23990885476642), new PdfPoint(30.63889821579131, 1.350859662558035) }, + 60.980455561096 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(34.07870266161323, 88.0794919577899), new PdfPoint(70.28642242911268, 44.44642375209944) }, + 56.69959093154205 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(28.106939194873746, 57.32513906188531), new PdfPoint(88.23200994206371, 47.40255953473576) }, + 60.93834356812799 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(53.60536047603453, 40.05848957824367), new PdfPoint(54.602584690938485, 23.68515592064754) }, + 16.40367371041503 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(95.24374516806434, 77.59835075641364), new PdfPoint(70.90557859705416, 53.93935496858071) }, + 33.9425166086272 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(78.3463467754132, 31.083870293342063), new PdfPoint(96.23666352602075, 20.627574083113753) }, + 20.721910237068013 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(37.12436686768523, 23.2470996387125), new PdfPoint(52.06498372192044, 52.54754420105103) }, + 32.88978691836922 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(14.6211909036702, 76.42782535094904), new PdfPoint(14.874046969748955, 36.414019307054815) }, + 40.01460496254509 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(76.43647869323469, 20.677823843278254), new PdfPoint(36.769831469565474, 70.2055187268171) }, + 63.45419972266568 + } + }; + + public static IEnumerable WeightedEuclideanData => new[] + { + new object[] + { + new PdfPoint[] { new PdfPoint(43.182404514617176, 53.723843115384454), new PdfPoint(3.3930306043331138, 27.56680709356495) }, + new double[] { 0.34761155125391696, 0.5129726636319278 }, + 30.021786400055273 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(73.84245684124295, 83.51529427574104), new PdfPoint(21.54450118942893, 79.20113290957588) }, + new double[] { 0.7322934909554959, 0.34687568015593506 }, + 44.825601158916854 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(37.896653587276106, 4.676038435630514), new PdfPoint(34.9439253392839, 21.638957550046555) }, + new double[] { 0.6701978551153961, 0.12919929786833662 }, + 6.558892930575253 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(84.25801042031625, 56.37145462636576), new PdfPoint(50.32376878777948, 6.1361935108459225) }, + new double[] { 0.8796492977302619, 0.5490232080318501 }, + 48.97397031018029 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(42.88190299424798, 12.492484242494262), new PdfPoint(24.1625964961651, 79.51406362235376) }, + new double[] { 0.7044908288283627, 0.9936113455894524 }, + 68.62985723127218 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(20.602779608772437, 42.46715852270634), new PdfPoint(18.174521592823833, 30.221589235411084) }, + new double[] { 0.2504478432687812, 0.26606251155135485 }, + 6.432253030622112 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(73.51986108860086, 94.46596712749573), new PdfPoint(21.509680804932753, 78.62888698821733) }, + new double[] { 0.15632913198437193, 0.7444124168543208 }, + 24.689833816575828 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(51.55252660243651, 8.696156027694924), new PdfPoint(93.18517587899751, 63.04850102014191) }, + new double[] { 0.6049211859542131, 0.9647465182222988 }, + 62.4381985575342 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(30.21848335895927, 62.01463223631216), new PdfPoint(9.634525776912728, 27.825583554230782) }, + new double[] { 0.8027978642286271, 0.166726356941435 }, + 23.130712209662537 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(65.05762360469711, 32.65631137261622), new PdfPoint(48.01521252147326, 19.98891384302437) }, + new double[] { 0.5240447566021588, 0.024050225750602894 }, + 12.492586124209046 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(86.3293404517169, 19.175633842867423), new PdfPoint(53.271415046061264, 32.89429524681111) }, + new double[] { 0.14421686634792308, 0.5904187520987152 }, + 16.392736167902033 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(27.457817853198875, 47.448657769062784), new PdfPoint(71.15889209419977, 85.70061999588773) }, + new double[] { 0.900522855837039, 0.1903068726952547 }, + 44.701940217255824 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(64.83866796682987, 79.58165065607992), new PdfPoint(48.13162069138664, 46.40166383877515) }, + new double[] { 0.8714574058833098, 0.9259041071928826 }, + 35.53286401086945 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(53.30653375326978, 92.8625736497561), new PdfPoint(82.27493833520515, 24.281678776051695) }, + new double[] { 0.07040920374145287, 0.25354045693115 }, + 35.377562641312686 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(88.51627151942432, 6.998984511993955), new PdfPoint(67.87198325112047, 2.7962536590712794) }, + new double[] { 0.32260966005866376, 0.9708895838296442 }, + 12.435461283590856 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(36.743038571368224, 59.8337600229277), new PdfPoint(35.64040302194742, 56.3416920424788) }, + new double[] { 0.7374568890684818, 0.35688819825626683 }, + 2.2910021521147033 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(45.27268635494111, 89.09746774627624), new PdfPoint(56.77422246509257, 54.61327497118052) }, + new double[] { 0.795649545331861, 0.33303587511333954 }, + 22.38940724547447 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(47.037465271811826, 57.21682538219054), new PdfPoint(56.99273647692446, 32.02947019163149) }, + new double[] { 0.6581356704173641, 0.7394074875314698 }, + 23.115111017333888 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(60.964568495488955, 97.45910458584241), new PdfPoint(37.82634706209216, 90.43777343855321) }, + new double[] { 0.7753419138764276, 0.2538662890378435 }, + 20.678874022381937 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(1.507816848536414, 40.089655722905206), new PdfPoint(79.04213533420982, 61.29185593008626) }, + new double[] { 0.4491771104236736, 0.22784032541212518 }, + 52.94035981680709 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(36.37910297303968, 18.193555274039262), new PdfPoint(91.15466020166491, 85.85957341341609) }, + new double[] { 0.3052135498189964, 0.3223157143508947 }, + 48.90332072146686 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(79.20741576963412, 19.42364609506846), new PdfPoint(1.713066679977826, 53.06873779395372) }, + new double[] { 0.7838549107088932, 0.7535887215850894 }, + 74.56808004990535 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(81.51595818963746, 59.30709024627407), new PdfPoint(25.558340164637617, 61.977530710335394) }, + new double[] { 0.8356225471152203, 0.8585263463854019 }, + 51.212006983582334 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(85.2932730956128, 20.86191563326203), new PdfPoint(47.682665361201956, 37.66976087735959) }, + new double[] { 0.36214415597915106, 0.3657929461349514 }, + 24.811523379570282 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(43.509581169918285, 15.417008065675386), new PdfPoint(65.96527585499304, 39.0153945028804) }, + new double[] { 0.7325993691413879, 0.49827352824887217 }, + 25.434223668702632 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(10.90771181698733, 11.800155130527179), new PdfPoint(22.462360083283073, 41.528647922391535) }, + new double[] { 0.07158506783066576, 0.07037045636842043 }, + 8.470510492538954 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(79.27146814563454, 81.68579534396734), new PdfPoint(43.27976627143214, 16.184382141158416) }, + new double[] { 0.9330237425602634, 0.4612023715260829 }, + 56.45706548411637 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(81.94084197082734, 73.77559534509864), new PdfPoint(47.6578904565224, 53.105550670184165) }, + new double[] { 0.18776510815355918, 0.4889985502860148 }, + 20.7270168208576 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(21.286655400310718, 41.827500093800865), new PdfPoint(30.808244563937627, 13.638275341006922) }, + new double[] { 0.8962456732642891, 0.9264681773667247 }, + 28.591184803793016 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(33.78152682660658, 44.158678172468726), new PdfPoint(91.85337130454569, 84.09610553733049) }, + new double[] { 0.3577571791129047, 0.6169322962139128 }, + 46.802610761010605 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(3.388201633711907, 42.16103029115421), new PdfPoint(51.9291842681901, 68.48232819729803) }, + new double[] { 0.13974294254511688, 0.5848878568164848 }, + 27.101340793929875 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(59.48180649187928, 27.31858623680905), new PdfPoint(64.63020023464131, 65.24882836977916) }, + new double[] { 0.27611650351633377, 0.7662781290683103 }, + 33.3131442702799 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(70.75991343495718, 65.50017099660197), new PdfPoint(15.609933830591839, 22.902302945831778) }, + new double[] { 0.07987531560885708, 0.01399300188637742 }, + 16.38089705655407 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(31.94473221745361, 18.61692538519876), new PdfPoint(61.552148192348454, 85.83227867776296) }, + new double[] { 0.7613870121579395, 0.07308377684838896 }, + 31.58506960716091 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(45.84364167933228, 40.37547892038721), new PdfPoint(42.61282689436702, 60.929761375074484) }, + new double[] { 0.5517337470063279, 0.30404253201779463 }, + 11.584926783250198 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(30.609097319810495, 36.22011355077181), new PdfPoint(53.58065145816467, 88.58342084286058) }, + new double[] { 0.6165613403167299, 0.20275705975402813 }, + 29.686655044030037 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(11.220454019745107, 74.6916587063666), new PdfPoint(93.47534180341599, 85.14870589995813) }, + new double[] { 0.9348214454710079, 0.5363851826580573 }, + 79.89700115316103 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(31.718504984864772, 30.40590697044462), new PdfPoint(53.90080251769821, 82.05587152527684) }, + new double[] { 0.4571100445160645, 0.6331364176024251 }, + 43.74874766734203 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(99.47163562093412, 39.154096812266495), new PdfPoint(91.66424523421138, 59.168541158275445) }, + new double[] { 0.17586135910540956, 0.6302336451850356 }, + 16.22274365925583 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(20.2135535460801, 49.53638586834629), new PdfPoint(24.945975209291383, 82.22842470861112) }, + new double[] { 0.36044759383738423, 0.9561252186963417 }, + 32.09283249022183 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(98.02805681886497, 86.73209614140276), new PdfPoint(32.07674808646165, 36.59014734535081) }, + new double[] { 0.9484803625034408, 0.08838534995731318 }, + 65.93713949741122 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(27.996973786675994, 79.43572326933925), new PdfPoint(48.25779290166763, 86.18181497796209) }, + new double[] { 0.5742969026258793, 0.25695045329675903 }, + 15.730323730554423 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(96.87713820990285, 22.328033311776963), new PdfPoint(29.742202859774903, 38.736886174518524) }, + new double[] { 0.4800858147342638, 0.9759086919892536 }, + 49.260109760197736 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(96.92934825367855, 98.9884076287911), new PdfPoint(65.42567095847741, 47.35379914182888) }, + new double[] { 0.4648383061572542, 0.1441282662065675 }, + 29.079350087166517 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(93.33554919357977, 75.29050666168905), new PdfPoint(6.126451600544447, 99.95703145897636) }, + new double[] { 0.7942724709681851, 0.63177107789588 }, + 80.15718458738291 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(39.046802362461634, 67.06455121914985), new PdfPoint(76.17903106915162, 17.156092843185366) }, + new double[] { 0.4280532393348885, 0.14861674977777017 }, + 30.990054782588523 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(62.3272593947105, 35.79012414739397), new PdfPoint(52.36533842332707, 13.901621776517592) }, + new double[] { 0.5735026857973633, 0.7097396162613753 }, + 19.92373510914352 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(86.56524839698827, 10.74765517726165), new PdfPoint(37.50854890574746, 84.37760856549112) }, + new double[] { 0.8105297727958675, 0.5885192616865264 }, + 71.70194579237302 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(83.11377683515076, 57.43005087066818), new PdfPoint(16.558647937431214, 58.38401772597568) }, + new double[] { 0.017140370145589, 0.1964493377625991 }, + 8.723732508695852 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(16.488235471535685, 40.94309362090976), new PdfPoint(88.4046043115408, 8.886895070245703) }, + new double[] { 0.3281424394347694, 0.19534658386139647 }, + 43.56465358623818 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(69.33173897868781, 28.049681151606897), new PdfPoint(45.87984620672392, 18.086487563732057) }, + new double[] { 0.05481260678513333, 0.6996745919523291 }, + 9.979970555783801 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(97.8075655925026, 71.63920731673262), new PdfPoint(82.38832209559578, 20.420358571629926) }, + new double[] { 0.8974765130568136, 0.7987431260463899 }, + 48.04973385624452 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(74.71035113361695, 75.51638203372252), new PdfPoint(43.77741495534478, 26.454397399213313) }, + new double[] { 0.3440636846460098, 0.5730780865363092 }, + 41.3359406993389 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(99.39149571037454, 73.66374283672987), new PdfPoint(30.431764865427947, 33.888233811011084) }, + new double[] { 0.2290467159991193, 0.16317869418005349 }, + 36.70670924504519 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(96.06004646773668, 45.650788538214215), new PdfPoint(75.42365997141293, 14.096288747659669) }, + new double[] { 0.9955744626531466, 0.4647882510799719 }, + 29.778501528755687 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(56.748659378234024, 41.242955268359495), new PdfPoint(51.98993301466416, 29.860385112946396) }, + new double[] { 0.24021000881512644, 0.06280491528900067 }, + 3.6846787246051296 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(75.57831346578048, 26.27036380630895), new PdfPoint(41.38295951936305, 10.493842391270958) }, + new double[] { 0.2789045533941795, 0.8108096359388034 }, + 22.97691669213719 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(1.537425706690676, 56.75977724131729), new PdfPoint(57.34054617848201, 25.281082417225743) }, + new double[] { 0.21918206031913, 0.6656671173061652 }, + 36.63530244095203 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(11.433060804657625, 30.136723941098076), new PdfPoint(39.114232902337285, 41.693047526138315) }, + new double[] { 0.7075215906513742, 0.9492376684195137 }, + 25.863214731926572 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(43.64828975090095, 27.61162115836622), new PdfPoint(52.04562591714949, 33.62242974074901) }, + new double[] { 0.7824315482189858, 0.8918957453363134 }, + 9.348657254989888 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(23.197228709051878, 39.70165900394454), new PdfPoint(21.658622967356898, 62.932955382463284) }, + new double[] { 0.7123270820911787, 0.7608269156404319 }, + 20.30515594401933 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(38.80334105174317, 61.511545901749884), new PdfPoint(75.10648035017779, 7.295425670384659) }, + new double[] { 0.3539712178141595, 0.8773494800670871 }, + 55.18491892060525 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(73.1688237126947, 41.23592471915518), new PdfPoint(43.52192786093527, 53.110058660378854) }, + new double[] { 0.9100573901478963, 0.5044492428043307 }, + 29.512866121285597 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(82.08392928322395, 64.31087019408514), new PdfPoint(52.31323534174951, 43.415348377568854) }, + new double[] { 0.6121048691093244, 0.5323855644175843 }, + 27.838044094299097 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(96.3913840705588, 62.415163965439255), new PdfPoint(35.23200419347637, 39.60080175738051) }, + new double[] { 0.8123349145153583, 0.5103113080736199 }, + 57.48155112015711 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(95.55194605557199, 61.274878987700795), new PdfPoint(9.872303067845213, 53.109186496315075) }, + new double[] { 0.39994849610514704, 0.26644552003519284 }, + 54.34876811370422 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(58.16454587655691, 44.27103201840323), new PdfPoint(52.61148819933717, 73.16051536895833) }, + new double[] { 0.3242204809496424, 0.9399593671029692 }, + 28.186699160566924 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(39.27230354280464, 69.96392894332428), new PdfPoint(93.64288221720275, 90.8813285250839) }, + new double[] { 0.4317159521750946, 0.8385660327916159 }, + 40.53548479594234 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(6.028218612921766, 92.28249711944844), new PdfPoint(86.89444144782719, 78.01785402333229) }, + new double[] { 0.4431516292387626, 0.9581597807478263 }, + 55.61374133395936 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(54.92130401827322, 28.99378253456821), new PdfPoint(45.13742719746163, 97.30730475503564) }, + new double[] { 0.3188223355004387, 0.4883276449080678 }, + 48.0563822144909 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(32.268018901069375, 81.41851836473141), new PdfPoint(54.35752358235123, 62.540609603883446) }, + new double[] { 0.9101580338420697, 0.4705514663118632 }, + 24.734614511025498 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(31.037882065791024, 17.256315605621918), new PdfPoint(47.55823563431243, 2.2242251754150177) }, + new double[] { 0.7389893743229036, 0.23508100924751485 }, + 15.962653392377986 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(92.96545041274639, 36.46317576752287), new PdfPoint(66.29677256321442, 40.476874876792365) }, + new double[] { 0.9664552610357512, 0.9626933061840279 }, + 26.51168650401405 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(73.84188613970119, 3.1208787873849397), new PdfPoint(17.2478922108122, 82.58378940577553) }, + new double[] { 0.6287766378079861, 0.5994653351929345 }, + 76.1520363923115 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(98.39672235266586, 42.0282093451268), new PdfPoint(38.763299356806705, 93.87681792398747) }, + new double[] { 0.07567394716307108, 0.7207771225254921 }, + 46.97613195199875 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(8.143995444811425, 92.19425274899163), new PdfPoint(8.609680795960728, 74.31465214379264) }, + new double[] { 0.15953027992806146, 0.4736707695874741 }, + 12.306816144372634 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(58.93506339562141, 44.66757692409396), new PdfPoint(97.7398163873153, 86.6502417018157) }, + new double[] { 0.8611067206485159, 0.6225551836351352 }, + 48.927937997850314 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(45.26166589388102, 6.546023931685174), new PdfPoint(28.95707478012117, 99.20905396483187) }, + new double[] { 0.24865152341237784, 0.24053974978478188 }, + 46.16796383017308 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(70.99184698481156, 80.59925379881058), new PdfPoint(56.518278661882725, 11.376940939895363) }, + new double[] { 0.17499915074250705, 0.8582859081058546 }, + 64.41531405130326 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(87.92692991588102, 53.75036538525363), new PdfPoint(97.96468827019336, 82.52208094062715) }, + new double[] { 0.8777134351973265, 0.2536327348702676 }, + 17.274129190515396 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(99.4822062406802, 41.54148333815147), new PdfPoint(84.45518423651059, 73.14559728174417) }, + new double[] { 0.2828264200544862, 0.4469922959708781 }, + 22.59049092668876 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(41.854572656507635, 64.98871464159075), new PdfPoint(31.81558499096202, 74.32583651758068) }, + new double[] { 0.8515073901292015, 0.99948840666966 }, + 13.151168857557241 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(59.72389163510703, 96.65882084095013), new PdfPoint(77.10913600860067, 99.18003822649447) }, + new double[] { 0.3433737659164865, 0.49972290664880603 }, + 10.342151726893803 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(25.302637359422995, 29.383813066648823), new PdfPoint(52.84587115642042, 78.52696918658933) }, + new double[] { 0.16534574750091358, 0.6870580040611346 }, + 42.24589317594554 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(3.888063677940168, 54.17714114090026), new PdfPoint(68.29615810533683, 71.47289764474036) }, + new double[] { 0.3299097164348803, 0.8923490679059086 }, + 40.441791306327595 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(99.1556919505891, 94.29753952039171), new PdfPoint(62.64512115426586, 31.430970740223618) }, + new double[] { 0.8764364704320418, 0.6481879083477506 }, + 61.07438661865755 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(24.151166818575387, 19.873799356329247), new PdfPoint(77.31241363620555, 38.85347022662117) }, + new double[] { 0.43390749253426086, 0.5391618844284266 }, + 37.68945479322134 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(28.205228648784242, 40.108163919266026), new PdfPoint(81.53642059740082, 9.913005005183795) }, + new double[] { 0.8451744812906116, 0.1437359576718935 }, + 50.34788703961236 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(4.936395350784939, 48.84566277072055), new PdfPoint(50.964991419966324, 84.46292302345998) }, + new double[] { 0.6757301675748483, 0.9337792720061786 }, + 51.14885775576711 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(43.00419938151381, 55.722441846185724), new PdfPoint(52.59589412614377, 2.134052686672183) }, + new double[] { 0.5219345274582874, 0.0820582932792513 }, + 16.84239777271094 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(20.32950409621951, 31.473426807364923), new PdfPoint(47.49011085352349, 56.424964496227545) }, + new double[] { 0.522628856472827, 0.5721287022118767 }, + 27.2348674158037 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(12.748778536668759, 80.53171919654852), new PdfPoint(81.09071363503946, 5.9381022469796925) }, + new double[] { 0.9498311861704639, 0.2395137114284972 }, + 75.95396407019084 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(76.17319208657186, 24.93618462546461), new PdfPoint(53.10025668713026, 60.531394169345084) }, + new double[] { 0.5357720219288672, 0.3133763715777024 }, + 26.120443696969353 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(98.08523728603436, 82.83746783458766), new PdfPoint(47.42113535042345, 85.43736133423441) }, + new double[] { 0.9718208273404012, 0.08135490934244416 }, + 49.95066961729753 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(45.05460100017014, 17.86227799168675), new PdfPoint(2.9476106233295885, 3.8389896321498806) }, + new double[] { 0.5611866839253695, 0.6510610772614032 }, + 33.51143224165087 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(82.92981278777084, 21.606190512021193), new PdfPoint(73.80999399467322, 66.72858006205608) }, + new double[] { 0.694908737255397, 0.581436723876394 }, + 35.23661385399278 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(51.78980370685202, 22.553400313471073), new PdfPoint(68.63345256693609, 69.21110605564596) }, + new double[] { 0.30368246359588835, 0.4197625427272158 }, + 31.622077728766158 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(66.16195959298788, 38.1986525964413), new PdfPoint(82.12093549745403, 45.63167431616989) }, + new double[] { 0.030744473029656327, 0.7112830100965338 }, + 6.8650221331738726 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(29.288330144353804, 19.90152686683585), new PdfPoint(22.641284657060712, 47.999168607785734) }, + new double[] { 0.8179673989239096, 0.6017524346962801 }, + 22.609962825026148 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(30.8089632790534, 73.10830509824271), new PdfPoint(72.36655811605044, 4.345586689033343) }, + new double[] { 0.7367304229916434, 0.0627969405162665 }, + 39.61416100814953 + } + }; + + public static IEnumerable ManhattanData => new[] + { + new object[] + { + new PdfPoint[] { new PdfPoint(98.31028086405155, 71.41286167359823), new PdfPoint(8.520494388407762, 24.459081332221732) }, + 136.74356681702028 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(80.37553666527263, 42.56431739855909), new PdfPoint(64.8412084956269, 16.95362776630095) }, + 41.145017801903876 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(49.2710512585456, 70.34544328514963), new PdfPoint(24.232351348255964, 11.265059118847509) }, + 84.11908407659175 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(81.09400141846052, 47.012739518606516), new PdfPoint(42.024248186489864, 69.61568059464469) }, + 61.67269430800883 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(44.06154700294406, 48.15601389227875), new PdfPoint(49.1600051021766, 82.21859339802802) }, + 39.16103760498181 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(28.096097449045697, 95.00013087149667), new PdfPoint(76.29039997438234, 12.28736104914525) }, + 130.90707234768806 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(50.30487767979175, 8.940072323128835), new PdfPoint(92.67843980278924, 75.96533282615546) }, + 109.39882262602413 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(19.00779863367599, 75.60440570810721), new PdfPoint(21.298939307878793, 93.42357987787084) }, + 20.11031484396643 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(71.56810305931288, 3.3973375701299213), new PdfPoint(29.815286790846287, 95.16472908385313) }, + 133.5202077821898 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(8.25344818567222, 21.56716192469692), new PdfPoint(58.866686040068686, 52.18035094748926) }, + 81.2264268771888 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(66.15541572742991, 56.76631788862886), new PdfPoint(1.7397342748868394, 34.59904891883436) }, + 86.58295042233757 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(91.66699176741876, 96.3298342377653), new PdfPoint(58.64041524782142, 6.2232580885963955) }, + 123.13315266876624 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(63.03154450804016, 32.991747619710644), new PdfPoint(88.82698809362523, 15.286720923988184) }, + 43.50047028130753 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(64.53015535414762, 48.298513693111275), new PdfPoint(77.6915403251356, 96.91573666739748) }, + 61.77860794527419 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(94.72526480912629, 99.38354629751768), new PdfPoint(56.53130742487021, 2.627492785615504) }, + 134.95001089615826 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(85.33671538059849, 15.43698113995412), new PdfPoint(8.275747510014142, 94.20156307009307) }, + 155.8255498007233 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(66.31421796006745, 17.98612509501162), new PdfPoint(33.49021795975978, 89.0085205254106) }, + 103.84639543070665 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(25.883150352077333, 72.86865690119674), new PdfPoint(17.716996713814346, 23.509304073508307) }, + 57.52550646595142 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(93.10705872855762, 22.843093894278432), new PdfPoint(98.79790933808064, 63.563193569778676) }, + 46.41095028502327 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(90.5408621130074, 39.05170368329062), new PdfPoint(79.77879954605899, 29.19423450160433) }, + 20.619531748634703 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(55.69449971207353, 30.302336366651485), new PdfPoint(55.65748725723053, 1.8619998585335695) }, + 28.477348962960917 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(44.1570320002465, 59.307531272875345), new PdfPoint(93.10814668116721, 93.56027945305176) }, + 83.20386286109712 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(12.40100846740917, 78.17666856600684), new PdfPoint(0.19483289745906296, 68.54746682975302) }, + 21.835377306203924 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(87.92709928843715, 13.04278008523495), new PdfPoint(62.65280973153951, 92.49487197056806) }, + 104.72638144223075 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(86.52459326755739, 40.69324143514436), new PdfPoint(51.04163579452188, 51.66808508490045) }, + 46.4578011227916 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(33.51298944432207, 25.830636646057158), new PdfPoint(75.46518151064959, 91.35549704177652) }, + 107.47705246204687 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(88.1400886561084, 4.125788739590696), new PdfPoint(85.30148662356203, 60.58608035065932) }, + 59.298893643615 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(1.0905749031125178, 52.30615532376073), new PdfPoint(2.2476727003424735, 44.91822420411289) }, + 8.545028916877794 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(53.369769201982386, 94.64770581346322), new PdfPoint(88.73651176910599, 55.8282338810349) }, + 74.18621449955192 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(1.6626858904726038, 81.2969472428702), new PdfPoint(70.82237199630096, 9.236767238355803) }, + 141.21986611034276 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(57.088540008052966, 82.46248802199958), new PdfPoint(40.94992621459188, 63.502813662388114) }, + 35.098288153072545 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(80.91019339604507, 54.3952636017656), new PdfPoint(39.91091192753484, 69.33585170549613) }, + 55.93986957224076 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(91.03067247042856, 91.65920893476488), new PdfPoint(42.90216685491273, 95.4786928780688) }, + 51.94798955881975 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(50.881652494506014, 27.765384050931306), new PdfPoint(38.3895657106228, 28.724018523900853) }, + 13.450721256852763 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(4.5674474817646304, 74.0031061768295), new PdfPoint(25.92660362771575, 9.49670464961997) }, + 85.86555767316065 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(84.04454050797084, 53.51864481339068), new PdfPoint(56.01428239109764, 49.93745673695585) }, + 31.611446193308026 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(56.46046026934914, 75.11421058387852), new PdfPoint(6.19920566697335, 8.979165930736555) }, + 116.39629925551776 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(64.98307759950606, 71.45233437781435), new PdfPoint(52.04911042086551, 66.2948985640898) }, + 18.091402992365097 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(54.80513188587884, 25.69697229513448), new PdfPoint(30.29444892930152, 16.230108067035896) }, + 33.977547184675906 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(16.51591077595017, 95.4787158857551), new PdfPoint(71.65804430221002, 83.2192924296896) }, + 67.40155698232533 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(90.73455704858245, 14.238466564905817), new PdfPoint(7.465435482794525, 61.28735510279184) }, + 130.31801010367394 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(6.786258211158902, 67.05366021450293), new PdfPoint(75.42028126667847, 87.33454969863855) }, + 88.9149125396552 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(37.5733959145657, 34.669875274927655), new PdfPoint(30.517320037944096, 39.41900581115182) }, + 11.80520641284577 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(24.711028083392993, 93.47175488320937), new PdfPoint(5.960767657165822, 12.657645959606755) }, + 99.56436934982979 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(55.98960481262034, 42.200096959815255), new PdfPoint(84.32769129720324, 59.41113079827088) }, + 45.54912032303853 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(84.08976116221814, 42.52501081331095), new PdfPoint(98.54783334258454, 46.76793772899147) }, + 18.70099909604692 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(95.45641575782206, 78.68740199253257), new PdfPoint(78.59999655555782, 74.61511155500692) }, + 20.928709639789886 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(48.46555875014703, 86.4559814348131), new PdfPoint(56.388582424222676, 5.019193688707546) }, + 89.35981142018119 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(64.98900033439119, 0.45808817226621334), new PdfPoint(34.887817180687605, 28.702483842178907) }, + 58.34557882361628 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(5.342552428587988, 97.40665691301854), new PdfPoint(38.365708837054136, 68.39275410900449) }, + 62.0370592124802 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(52.06884475498755, 63.55088286341204), new PdfPoint(64.42078065774773, 40.718370243553025) }, + 35.18444852261919 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(73.76090851050823, 67.41778011667391), new PdfPoint(23.32457269196241, 43.587768765511456) }, + 74.26634716970827 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(5.591360946408807, 61.658705090162556), new PdfPoint(85.04514260969314, 98.51912430813375) }, + 116.31420088125553 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(91.44599149697437, 4.2030317490844515), new PdfPoint(45.9823591113872, 27.221621768937965) }, + 68.4822224054407 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(75.66227474950094, 92.35130522949882), new PdfPoint(37.0797185021092, 21.561016386419773) }, + 109.37284509047079 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(59.83690079991539, 88.13825027782673), new PdfPoint(98.87135070597783, 94.4622090803936) }, + 45.35840870862932 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(50.578296766998776, 12.226595426147968), new PdfPoint(97.57998848317094, 88.08860181253041) }, + 122.86369810255461 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(82.69023235389898, 33.342852652558484), new PdfPoint(4.4999792001447325, 83.18876811351126) }, + 128.036168614707 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(50.88188971008082, 27.13272267263055), new PdfPoint(50.07636306820354, 42.97256140722085) }, + 16.64536537646758 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(35.961515310664375, 13.815103097310633), new PdfPoint(91.39132063877125, 5.8702991535304445) }, + 63.37460927188706 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(71.97608210414027, 90.68282411111058), new PdfPoint(53.05902965075383, 59.17726933937338) }, + 50.42260722512364 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(45.34252873870223, 69.95951070281912), new PdfPoint(97.1680023177814, 10.423570724792263) }, + 111.36141355710603 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(11.563630954307058, 86.73137084909389), new PdfPoint(88.3320100428436, 12.946634014881319) }, + 150.5531159227491 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(30.95920769838655, 55.339956750703415), new PdfPoint(66.49353560719601, 21.089794614270463) }, + 69.7844900452424 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(54.1424467040507, 3.0125185468788285), new PdfPoint(29.247728849084854, 25.304748551013112) }, + 47.18694785910013 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(51.50831652035066, 50.23460729031534), new PdfPoint(57.26868796565141, 18.65130989920575) }, + 37.34366883641034 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(21.945495456598085, 21.772555866972898), new PdfPoint(54.15236426981463, 64.3348399112023) }, + 74.76915285744595 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(80.00390615586804, 49.76978885900284), new PdfPoint(62.96191944559156, 65.33303380922983) }, + 32.60523166050347 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(10.188088699998321, 91.18895717313092), new PdfPoint(66.30336158408379, 75.93431307788818) }, + 71.36991697932821 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(73.13683786985845, 99.17695858310161), new PdfPoint(66.4231872188596, 19.178939031026545) }, + 86.71167020307392 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(62.642697350844834, 15.05748097346611), new PdfPoint(51.78518710107176, 43.062539006082524) }, + 38.86256828238949 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(97.91524189555085, 53.36239931242955), new PdfPoint(8.477424740647743, 95.8479188914125) }, + 131.92333673388606 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(55.49741452385234, 44.37960024756884), new PdfPoint(82.73206152999416, 32.90646336432002) }, + 38.70778388939063 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(23.347808381194035, 87.6853785894334), new PdfPoint(12.996014764926866, 34.68326153268328) }, + 63.35391067301728 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(61.89329522120652, 57.17171642780339), new PdfPoint(60.49416471162344, 65.19149311226427) }, + 9.41890719404396 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(27.373292399099014, 28.886477956386326), new PdfPoint(10.292743873112897, 36.070288354645506) }, + 24.264358924245297 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(51.025958488711765, 65.33221184908226), new PdfPoint(32.615609870031626, 53.69382959071294) }, + 30.048730877049458 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(50.96820053822875, 73.90554053213604), new PdfPoint(72.67650861487111, 60.68253348417889) }, + 34.931315124599514 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(25.74092217712167, 41.284067672651915), new PdfPoint(6.925901260561074, 82.99278467455069) }, + 60.523737918459375 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(67.43659906411821, 23.4560458202423), new PdfPoint(82.90858445505333, 45.533238869798176) }, + 37.54917844049099 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(1.7436563737518451, 89.61930761116818), new PdfPoint(45.42878811213147, 94.40805586130807) }, + 48.47387998851951 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(47.518364996013915, 94.35923908826759), new PdfPoint(82.6875958678608, 83.60796256931705) }, + 45.92050739079741 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(93.1111147556186, 74.67435782885174), new PdfPoint(9.220159612167611, 1.92327440548421) }, + 156.64203856681854 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(58.761888058008324, 74.31086798688808), new PdfPoint(73.29868519238025, 93.3793461376124) }, + 33.60527528509624 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(82.1414588955533, 72.66028694542108), new PdfPoint(22.105273227578614, 3.763140051025915) }, + 128.93333256236986 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(86.46511935470944, 35.72164214235971), new PdfPoint(25.227524405843937, 31.255680447799516) }, + 65.7035566434257 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(71.56340245351811, 33.06200911987518), new PdfPoint(61.56092351253598, 35.25061168887491) }, + 12.191081509981863 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(94.85037789634605, 46.11142621381378), new PdfPoint(83.23022768218932, 44.95580926601661) }, + 12.775767161953894 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(86.54789013633707, 62.18067734306021), new PdfPoint(81.67442285514242, 65.21616696640878) }, + 7.908956904543217 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(9.471106833299793, 41.284563469094714), new PdfPoint(37.652618741738344, 88.08276418618436) }, + 74.97971262552821 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(74.33947490467499, 21.349171610958805), new PdfPoint(36.95263538216007, 90.58723563734458) }, + 106.62490354890069 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(78.98656364939777, 68.0250617210901), new PdfPoint(85.03683096885037, 57.80499382871557) }, + 16.27033521182713 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(85.71438334952354, 93.8429462465407), new PdfPoint(70.15969889240748, 21.1362364898653) }, + 88.26139421379148 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(41.57742052603941, 88.68540869219946), new PdfPoint(78.08634596682104, 40.34395101451887) }, + 84.85038311846222 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(96.49424108681877, 26.448955532356276), new PdfPoint(23.194916947717637, 7.288119213103073) }, + 92.46016045835435 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(27.39120214213613, 32.72675758567733), new PdfPoint(87.35579544468504, 39.87980542599764) }, + 67.11764114286922 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(10.525329230026426, 20.086942634243478), new PdfPoint(31.567701881100497, 11.164253270854662) }, + 29.965062014462887 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(62.70226199104806, 73.0988038163783), new PdfPoint(65.86893962458483, 68.00541347247822) }, + 8.260067977436833 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(10.505543038484245, 75.59518396483298), new PdfPoint(5.23969310754564, 76.76053964047921) }, + 6.43120560658483 + }, + new object[] + { + new PdfPoint[] { new PdfPoint(21.534176925749893, 23.127039946195936), new PdfPoint(10.172323325460287, 12.335644203864248) }, + 22.153249342621294 + } + }; + + public static IEnumerable MinimumEditDistanceData => new[] + { + new object[] + { + new string[] { "Z3s5m6oqk6", "KLPEcPp" }, + 10 + }, + new object[] + { + new string[] { "GUbBY", "6HSAoFTQG" }, + 9 + }, + new object[] + { + new string[] { "woC277mh", "eb8V0lrH" }, + 8 + }, + new object[] + { + new string[] { "x0IZH", "zuUbWxEnbCs" }, + 10 + }, + new object[] + { + new string[] { "ZfKKXdp", "eIzHt" }, + 7 + }, + new object[] + { + new string[] { "bIDDOS", "iYOEovRn" }, + 8 + }, + new object[] + { + new string[] { "cfHptoT3pEw3", "ry2pk1oGmX2C" }, + 11 + }, + new object[] + { + new string[] { "d1uUHMfZOG", "UE5ViSu" }, + 9 + }, + new object[] + { + new string[] { "jyFMb0iB", "KliI4F" }, + 8 + }, + new object[] + { + new string[] { "mYglaOe1KP1r", "tC42ap" }, + 11 + }, + new object[] + { + new string[] { "AhV8bFw6MfN9vV", "4voRvizWl" }, + 14 + }, + new object[] + { + new string[] { "CLHhvEWqVDnB", "mnKRw" }, + 12 + }, + new object[] + { + new string[] { "IscuqMU", "l8S" }, + 7 + }, + new object[] + { + new string[] { "qMuzOgbQt8bj", "VPhne7U0cyRNa" }, + 13 + }, + new object[] + { + new string[] { "rbCKBc1LFcGj", "Br5TZhBE" }, + 11 + }, + new object[] + { + new string[] { "Bqb", "VUsZJCpUnyX8p" }, + 13 + }, + new object[] + { + new string[] { "nJu7IIKzd", "OmTR" }, + 9 + }, + new object[] + { + new string[] { "ooxo", "HVAccKsc4" }, + 9 + }, + new object[] + { + new string[] { "lv0", "Z0ZNpJ96G" }, + 9 + }, + new object[] + { + new string[] { "fiyQ2sSF", "v6iw" }, + 8 + }, + new object[] + { + new string[] { "4N6ITKcXp", "v7xW9W" }, + 9 + }, + new object[] + { + new string[] { "xhcpSZESbsugNT", "hzosTTb" }, + 12 + }, + new object[] + { + new string[] { "EVgAJxbsSSxQZk", "XOuKXtaq" }, + 14 + }, + new object[] + { + new string[] { "B1XR5NyS", "6bjWJ5sdfHr3" }, + 11 + }, + new object[] + { + new string[] { "Qem1OzsMTvT8k", "x1OVG3dcL" }, + 11 + }, + new object[] + { + new string[] { "y6z1C", "via" }, + 5 + }, + new object[] + { + new string[] { "7LYRUcR10sO", "vf8H" }, + 11 + }, + new object[] + { + new string[] { "g9yzib4qCn", "ZV13wOEzdkG" }, + 11 + }, + new object[] + { + new string[] { "fyx8CSRZBrkZYX", "gtp2Di6Ouyia1t" }, + 14 + }, + new object[] + { + new string[] { "wlK1cAQ7Ulm6N", "U2ibeDS" }, + 13 + }, + new object[] + { + new string[] { "eaRHq0C7", "NyiDzGPBlJ" }, + 10 + }, + new object[] + { + new string[] { "ANKO0", "Op6U1a6yyv" }, + 10 + }, + new object[] + { + new string[] { "CBYnnb", "BYq3C" }, + 4 + }, + new object[] + { + new string[] { "7Vv6r4", "bD0Vtuy14" }, + 7 + }, + new object[] + { + new string[] { "Xd2UCrxXUtTc", "j5ChvLsO9c8g" }, + 12 + }, + new object[] + { + new string[] { "bRCyFTKkEn5", "n9PUYjmj" }, + 11 + }, + new object[] + { + new string[] { "45iPgzqb9hdOt", "FtFas" }, + 13 + }, + new object[] + { + new string[] { "TRwZZco16BK306", "0XInOMMGx22Zg" }, + 14 + }, + new object[] + { + new string[] { "rEl1P4vdeadl", "wnZQ2" }, + 12 + }, + new object[] + { + new string[] { "qvl9jo", "08V0I0OxYHn" }, + 11 + }, + new object[] + { + new string[] { "eTB1zjUc", "CzmBBtqSki" }, + 9 + }, + new object[] + { + new string[] { "laU", "RJC1Mz3NT" }, + 9 + }, + new object[] + { + new string[] { "DRlZXjpeshNq5l", "mkLQdXrES8" }, + 14 + }, + new object[] + { + new string[] { "B9woVuWF5P5", "C7O" }, + 11 + }, + new object[] + { + new string[] { "eA5", "gBfiKu" }, + 6 + }, + new object[] + { + new string[] { "a4OIKcx8prUU4A", "75PrmwrFAIxju" }, + 14 + }, + new object[] + { + new string[] { "nOH9d", "OvE8yYnRuuDc6" }, + 12 + }, + new object[] + { + new string[] { "794HCdIq1aZq7F", "L2jQFw" }, + 14 + }, + new object[] + { + new string[] { "2HVM5IBeSRD", "9w1Ov0HXajxl" }, + 12 + }, + new object[] + { + new string[] { "EMKB", "NtcNFmn" }, + 7 + }, + new object[] + { + new string[] { "7EjPg9IZVds3no", "eVqST" }, + 13 + }, + new object[] + { + new string[] { "EBbVk46ihD", "0dKvkrlf4" }, + 9 + }, + new object[] + { + new string[] { "tKnKi", "Wf8yN" }, + 5 + }, + new object[] + { + new string[] { "Mr6LGdc3", "uQENO1" }, + 8 + }, + new object[] + { + new string[] { "uND5m", "TWOXOArcic" }, + 10 + }, + new object[] + { + new string[] { "LrCcPCRtZ", "Kw17" }, + 9 + }, + new object[] + { + new string[] { "syREw7QRE", "rmKfH7" }, + 8 + }, + new object[] + { + new string[] { "kk0p4", "FIAUGApDjcH" }, + 10 + }, + new object[] + { + new string[] { "SAknj5", "MurNYeqhG" }, + 9 + }, + new object[] + { + new string[] { "IWlrcCtHF9nGAf", "I5L" }, + 13 + }, + new object[] + { + new string[] { "Us2V", "SbyDkKQsL" }, + 9 + }, + new object[] + { + new string[] { "AQueooT9VF", "Sgi1l8" }, + 10 + }, + new object[] + { + new string[] { "oSbE8y9w7Wm", "780UU" }, + 10 + }, + new object[] + { + new string[] { "F0WqwhGiN8ErKu", "epq" }, + 13 + }, + new object[] + { + new string[] { "CDo549T", "gTGBTj" }, + 7 + }, + new object[] + { + new string[] { "xeQsm447DXXq", "aTqlElz" }, + 12 + }, + new object[] + { + new string[] { "XORSGJAJf3J", "9FVjNLSa" }, + 11 + }, + new object[] + { + new string[] { "hSWlP", "mi8" }, + 5 + }, + new object[] + { + new string[] { "FtHCl8Dvi", "xZd3sKv" }, + 8 + }, + new object[] + { + new string[] { "TIpyP9eeDvbyTw", "M5R9U5" }, + 13 + }, + new object[] + { + new string[] { "ZzRqRqYW7QYuk1", "SavA6lLOit8Sy" }, + 14 + }, + new object[] + { + new string[] { "XTF", "6p9" }, + 3 + }, + new object[] + { + new string[] { "WDjD", "NdYfRf2GP2tKF9" }, + 14 + }, + new object[] + { + new string[] { "uq9esED2QOaKJ", "tCqtupjk8wQIyh" }, + 13 + }, + new object[] + { + new string[] { "tHtjoVqmTutOfq", "vEv8z" }, + 14 + }, + new object[] + { + new string[] { "X7ZGzZuQJ3yta", "UPUmpyC" }, + 12 + }, + new object[] + { + new string[] { "5nMhWh45", "9YiG04" }, + 7 + }, + new object[] + { + new string[] { "tzsHZHiU", "ZQFfAxBODxkK60" }, + 14 + }, + new object[] + { + new string[] { "uQnO1q9roZ", "1oOw7np" }, + 9 + }, + new object[] + { + new string[] { "Ppfvxhs", "eIu2x2m" }, + 6 + }, + new object[] + { + new string[] { "7AcoYYp2IcPZE", "hq1G51qKapEWp" }, + 13 + }, + new object[] + { + new string[] { "llsM3lrgXi", "s3XlsL5OlfmzZ1" }, + 11 + }, + new object[] + { + new string[] { "AtVBrs", "bEbjZ3imy" }, + 9 + }, + new object[] + { + new string[] { "oKxV", "JwjWNcanzPR" }, + 11 + }, + new object[] + { + new string[] { "4EKNcPEEi1Fab", "CZsX" }, + 13 + }, + new object[] + { + new string[] { "NZM3", "k3XPjpNHu" }, + 9 + }, + new object[] + { + new string[] { "Codhp5IJ0", "SPz5P927" }, + 9 + }, + new object[] + { + new string[] { "14N392TSkCl3", "uEyWaMll" }, + 11 + }, + new object[] + { + new string[] { "CLpF0a", "pUk" }, + 5 + }, + new object[] + { + new string[] { "O9M", "ubWtM" }, + 4 + }, + new object[] + { + new string[] { "ql63d2w", "lMMy9BlHHhUf3" }, + 12 + }, + new object[] + { + new string[] { "PBIfV40u90ag", "Ey4b2Api" }, + 11 + }, + new object[] + { + new string[] { "xkIH6da", "lzNQVvyrKJsNY3" }, + 14 + }, + new object[] + { + new string[] { "0fCPJeNpUE8", "DC99R8jKK3" }, + 10 + }, + new object[] + { + new string[] { "ScVznclEA9sK", "TjN9Jm" }, + 11 + }, + new object[] + { + new string[] { "1ccBZgl", "uswIZDlgAHsXk" }, + 11 + }, + new object[] + { + new string[] { "mMm", "zJJbEkzLYUMhY" }, + 12 + }, + new object[] + { + new string[] { "FT7FQK", "kPAkvw1MEfN" }, + 11 + }, + new object[] + { + new string[] { "hXO5ZiAzMlIir", "dInrj" }, + 12 + }, + new object[] + { + new string[] { "bDeLrRpy2LeCPb", "ZErT" }, + 13 + } + }; + #endregion + + [Theory] + [MemberData(nameof(EuclidianData))] + public void Euclidian(PdfPoint[] points, double expected) + { + Assert.Equal(expected, Distances.Euclidean(points[0], points[1]), PreciseDoubleComparer); + } + + [Theory] + [MemberData(nameof(WeightedEuclideanData))] + public void WeightedEuclidean(PdfPoint[] points, double[] weights, double expected) + { + Assert.Equal(expected, Distances.WeightedEuclidean(points[0], points[1], weights[0], weights[1]), PreciseDoubleComparer); + } + + [Theory] + [MemberData(nameof(ManhattanData))] + public void Manhattan(PdfPoint[] points, double expected) + { + Assert.Equal(expected, Distances.Manhattan(points[0], points[1]), PreciseDoubleComparer); + } + + [Theory] + [MemberData(nameof(MinimumEditDistanceData))] + public void MinimumEditDistance(string[] strings, int expected) + { + Assert.Equal(expected, Distances.MinimumEditDistance(strings[0], strings[1])); + } + } +} diff --git a/src/UglyToad.PdfPig.Tests/Dla/KdTreeTests.cs b/src/UglyToad.PdfPig.Tests/Dla/KdTreeTests.cs new file mode 100644 index 00000000..3714f4aa --- /dev/null +++ b/src/UglyToad.PdfPig.Tests/Dla/KdTreeTests.cs @@ -0,0 +1,6815 @@ +namespace UglyToad.PdfPig.Tests.Dla +{ + using System.Collections.Generic; + using UglyToad.PdfPig.Core; + using UglyToad.PdfPig.DocumentLayoutAnalysis; + using Xunit; + + public class KdTreeTests + { + private static readonly DoubleComparer DoubleComparer = new DoubleComparer(3); + private static readonly DoubleComparer PreciseDoubleComparer = new DoubleComparer(6); + private static readonly PointComparer PointComparer = new PointComparer(DoubleComparer); + + #region data + public static PdfPoint[] Tree1 = new PdfPoint[] + { + new PdfPoint(51, 75), + new PdfPoint(25, 40), + new PdfPoint(10, 30), + new PdfPoint(1, 10), + new PdfPoint(35, 90), + new PdfPoint(50, 50), + new PdfPoint(70, 70), + new PdfPoint(55, 1), + new PdfPoint(60, 80) + }; + + public static IEnumerable DataTree1 => new[] + { + new object[] + { + new PdfPoint(51, 49), + new object[] + { + 1.4142135623730951, + 5, + new PdfPoint(50, 50) + } + }, + new object[] + { + new PdfPoint(28.189524796700038, 75.60283789175995), + new object[] + { + 15.926733791512522, + 4, + new PdfPoint(35, 90), + } + }, + new object[] + { + new PdfPoint(43.26688589899484, 8.035369191312736), + new object[] + { + 13.680730468994646, + 7, + new PdfPoint(55, 1), + } + }, + new object[] + { + new PdfPoint(82.22662843535518, 70.12992266643707), + new object[] + { + 12.227318708346896, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(76.29751404813953, 74.63310544916789), + new object[] + { + 7.8182062705983855, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(50.895502833937776, 61.76937358125091), + new object[] + { + 11.80339272500231, + 5, + new PdfPoint(50, 50), + } + }, + new object[] + { + new PdfPoint(42.9552821543992, 74.01081889822333), + new object[] + { + 8.105304711572543, + 0, + new PdfPoint(51, 75), + } + }, + new object[] + { + new PdfPoint(55.51285821663918, 76.33782834155515), + new object[] + { + 4.706981405843449, + 0, + new PdfPoint(51, 75), + } + }, + new object[] + { + new PdfPoint(4.3199936890310315, 98.54112120917016), + new object[] + { + 31.846719434673833, + 4, + new PdfPoint(35, 90), + } + }, + new object[] + { + new PdfPoint(21.569550153382444, 37.56786718125442), + new object[] + { + 4.205146394381262, + 1, + new PdfPoint(25, 40), + } + }, + new object[] + { + new PdfPoint(95.70493339772732, 65.77875848107642), + new object[] + { + 26.04923186857304, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(87.23320341806003, 56.082576505219414), + new object[] + { + 22.151252262147768, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(95.64105363103229, 87.41037179209023), + new object[] + { + 30.99330052202065, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(31.9581372373153, 85.00443296498887), + new object[] + { + 5.848813475252715, + 4, + new PdfPoint(35, 90), + } + }, + new object[] + { + new PdfPoint(36.17227123238111, 79.38086715887763), + new object[] + { + 10.68364180135556, + 4, + new PdfPoint(35, 90), + } + }, + new object[] + { + new PdfPoint(97.45057198438961, 0.1038719192212767), + new object[] + { + 42.46002952588474, + 7, + new PdfPoint(55, 1), + } + }, + new object[] + { + new PdfPoint(49.936342420193036, 26.674269408896535), + new object[] + { + 23.3258174539759, + 5, + new PdfPoint(50, 50), + } + }, + new object[] + { + new PdfPoint(96.58603550736572, 5.478651527669465), + new object[] + { + 41.826506771737215, + 7, + new PdfPoint(55, 1), + } + }, + new object[] + { + new PdfPoint(33.82105876943279, 99.91438503275373), + new object[] + { + 9.984234222153567, + 4, + new PdfPoint(35, 90), + } + }, + new object[] + { + new PdfPoint(40.95742737577155, 81.48724148079593), + new object[] + { + 10.390283852901893, + 4, + new PdfPoint(35, 90), + } + }, + new object[] + { + new PdfPoint(65.32548187684739, 91.29488761267328), + new object[] + { + 12.487403389157823, + 8, + new PdfPoint(60, 80), + } + }, + new object[] + { + new PdfPoint(95.72487295050016, 17.00011169070058), + new object[] + { + 43.75521512859093, + 7, + new PdfPoint(55, 1), + } + }, + new object[] + { + new PdfPoint(76.84590618203656, 90.69206464298559), + new object[] + { + 19.952563780721515, + 8, + new PdfPoint(60, 80), + } + }, + new object[] + { + new PdfPoint(27.727148118788257, 46.59561305641292), + new object[] + { + 7.137187713079637, + 1, + new PdfPoint(25, 40), + } + }, + new object[] + { + new PdfPoint(51.92233547390256, 48.53466193663921), + new object[] + { + 2.4171448682605097, + 5, + new PdfPoint(50, 50), + } + }, + new object[] + { + new PdfPoint(74.85516050981272, 96.58650922810423), + new object[] + { + 22.26629924676048, + 8, + new PdfPoint(60, 80), + } + }, + new object[] + { + new PdfPoint(83.16610264969573, 97.29274249477987), + new object[] + { + 28.908601747006117, + 8, + new PdfPoint(60, 80), + } + }, + new object[] + { + new PdfPoint(71.98380721011306, 96.58511553469276), + new object[] + { + 20.46161510116601, + 8, + new PdfPoint(60, 80), + } + }, + new object[] + { + new PdfPoint(98.51219383024967, 32.70778133798633), + new object[] + { + 46.943101407439705, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(8.09276417067899, 51.21666984962398), + new object[] + { + 20.28961078738919, + 1, + new PdfPoint(25, 40), + } + }, + new object[] + { + new PdfPoint(61.41570675706768, 78.62680876706933), + new object[] + { + 1.9722778161822772, + 8, + new PdfPoint(60, 80), + } + }, + new object[] + { + new PdfPoint(54.00356297008202, 36.88821236457238), + new object[] + { + 13.709394277354654, + 5, + new PdfPoint(50, 50), + } + }, + new object[] + { + new PdfPoint(21.85770655063177, 16.016459205926083), + new object[] + { + 18.334247128814017, + 2, + new PdfPoint(10, 30), + } + }, + new object[] + { + new PdfPoint(27.683193240146863, 55.85996630126125), + new object[] + { + 16.085336708975426, + 1, + new PdfPoint(25, 40), + } + }, + new object[] + { + new PdfPoint(65.54133757456142, 92.08898521546233), + new object[] + { + 13.298495616230923, + 8, + new PdfPoint(60, 80), + } + }, + new object[] + { + new PdfPoint(24.861338264089227, 20.46892423497547), + new object[] + { + 17.65504970931321, + 2, + new PdfPoint(10, 30), + } + }, + new object[] + { + new PdfPoint(54.88661497017837, 4.925311272555266), + new object[] + { + 3.92694852925743, + 7, + new PdfPoint(55, 1), + } + }, + new object[] + { + new PdfPoint(27.79457376217088, 54.31806138769485), + new object[] + { + 14.58823239511943, + 1, + new PdfPoint(25, 40), + } + }, + new object[] + { + new PdfPoint(0.7501079718312487, 80.59920809402051), + new object[] + { + 35.51661572279581, + 4, + new PdfPoint(35, 90), + } + }, + new object[] + { + new PdfPoint(89.56921087453362, 16.96508157736404), + new object[] + { + 38.07773851294037, + 7, + new PdfPoint(55, 1), + } + }, + new object[] + { + new PdfPoint(5.3978925878381485, 59.8520804896729), + new object[] + { + 27.898883754845496, + 1, + new PdfPoint(25, 40), + } + }, + new object[] + { + new PdfPoint(25.97829935047318, 1.9752285215369203), + new object[] + { + 26.23570840902535, + 3, + new PdfPoint(1, 10), + } + }, + new object[] + { + new PdfPoint(62.572023839684796, 39.52157530571068), + new object[] + { + 16.366220318066574, + 5, + new PdfPoint(50, 50), + } + }, + new object[] + { + new PdfPoint(81.17046822810447, 92.91856347287415), + new object[] + { + 24.800766262352845, + 8, + new PdfPoint(60, 80), + } + }, + new object[] + { + new PdfPoint(72.71721419976534, 53.943166291078306), + new object[] + { + 16.285120870394863, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(77.0888492617333, 55.48826101878681), + new object[] + { + 16.150614604851395, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(58.21541870080057, 11.40938709274073), + new object[] + { + 10.894689397498917, + 7, + new PdfPoint(55, 1), + } + }, + new object[] + { + new PdfPoint(92.47344710876337, 10.739546752843566), + new object[] + { + 38.718445335061055, + 7, + new PdfPoint(55, 1), + } + }, + new object[] + { + new PdfPoint(98.99910001507719, 94.33068443488959), + new object[] + { + 37.854061958456036, + 6, + new PdfPoint(70, 70), + } + }, + new object[] + { + new PdfPoint(0.29975539175036703, 35.105628826864496), + new object[] + { + 10.961851630887265, + 2, + new PdfPoint(10, 30), + } + }, + new object[] + { + new PdfPoint(69.86806543596909, 86.99952741106358), + new object[] + { + 12.09843375924331, + 8, + new PdfPoint(60, 80), + } + } + }; + + public static IEnumerable DataTreeK1 => new[] + { + new object[] + { + new PdfPoint(57.28490719962775, 71.58006710449683), + new object[] + { + new object[] + { + 7.155137980338146, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 8.846863787773017, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 12.812891827249272, + 6, + new PdfPoint(70, 70), + }, + } + }, + new object[] + { + new PdfPoint(57.6366179124611, 99.23965351255829), + new object[] + { + new object[] + { + 19.38426790402455, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 24.449696675968916, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 25.13176276596767, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(73.90499795029336, 90.88238489014321), + new object[] + { + new object[] + { + 17.657159139988515, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 21.24436413950479, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 27.87273005827726, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(23.565146028832896, 75.26741657423868), + new object[] + { + new object[] + { + 18.64952813716565, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 27.43615723900563, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 35.29659300470031, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(26.939537622638365, 12.273123896672733), + new object[] + { + new object[] + { + 24.51917762184319, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 26.038945914262655, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 27.79463014035068, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(83.86699657545552, 96.41621467187889), + new object[] + { + new object[] + { + 28.967665243958084, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 29.83471118704662, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 39.228735829274505, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(66.43635368261755, 7.7006684896940625), + new object[] + { + new object[] + { + 13.254778148377245, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 45.380471224953766, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 52.537779002576954, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(37.3870248673188, 57.9719767606922), + new object[] + { + new object[] + { + 14.921111056843282, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 21.800611629066815, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 21.827284158832835, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(28.21563125325024, 51.82289295570881), + new object[] + { + new object[] + { + 12.252390876846393, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 21.860504578402132, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 28.42618298172852, + 2, + new PdfPoint(10, 30), + }, + } + }, + new object[] + { + new PdfPoint(40.64586336533863, 54.586928359658906), + new object[] + { + new object[] + { + 10.418242843999996, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 21.39092142514358, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 22.888897728875776, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(22.971155983334967, 41.71022847164334), + new object[] + { + new object[] + { + 2.6535051289147757, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 17.475134860769824, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 28.271517838092137, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(46.16350096686003, 0.026010364849260448), + new object[] + { + new object[] + { + 8.890015240260544, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 45.230671236732974, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 46.25172741450487, + 3, + new PdfPoint(1, 10), + }, + } + }, + new object[] + { + new PdfPoint(30.810311156595372, 57.2429846701653), + new object[] + { + new object[] + { + 18.195610351730775, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 20.51109418921715, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 26.88745300353832, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(8.49831703999272, 7.098709173582418), + new object[] + { + new object[] + { + 8.040040229482686, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 22.95047217877084, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 36.80761441002533, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(45.59952054686074, 21.5904374552803), + new object[] + { + new object[] + { + 22.634821151241802, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 27.62702010439208, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 28.74834714205047, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(75.87075134690805, 58.59787314401566), + new object[] + { + new object[] + { + 12.824750220459736, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 26.644545075400142, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 27.262046839042196, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(8.963229075823397, 94.18880408311563), + new object[] + { + new object[] + { + 26.37156650267053, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 46.20930979653228, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 52.972390428183594, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(57.181014731701026, 9.603539673394279), + new object[] + { + new object[] + { + 8.875681391958942, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 41.02975724393135, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 44.26694601560936, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(54.645113285069115, 27.785970730398834), + new object[] + { + new object[] + { + 22.694496553610147, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 26.788321570233126, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 32.062676941940694, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(11.149446927742158, 88.54384340073094), + new object[] + { + new object[] + { + 23.89496335829337, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 42.089218028235706, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 49.59207391833591, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(99.50678603018885, 74.5426364401791), + new object[] + { + new object[] + { + 29.854412867430348, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 39.881937759582165, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 48.50894219011971, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(24.209348883557468, 41.95277654538159), + new object[] + { + new object[] + { + 2.106766580360595, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 18.568103372140087, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 27.016948205499066, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(71.52714336370258, 2.423670062161676), + new object[] + { + new object[] + { + 16.58834844733717, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 52.21996813246304, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 59.805983322605925, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(64.29355652488779, 17.6151418970531), + new object[] + { + new object[] + { + 19.037676673914117, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 35.39893773092871, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 45.222399943652036, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(2.3569761133599876, 34.0132529249903), + new object[] + { + new object[] + { + 8.632613345429817, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 23.42109457884254, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 24.051563363153438, + 3, + new PdfPoint(1, 10), + }, + } + }, + new object[] + { + new PdfPoint(47.10705238689328, 14.985277112050543), + new object[] + { + new object[] + { + 16.058847963789056, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 33.383500810995635, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 35.134028587852995, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(73.44870263360212, 44.499915917034315), + new object[] + { + new object[] + { + 24.08511117098677, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 25.73223344549272, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 37.87082490519413, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(37.15926087979008, 21.563350867442598), + new object[] + { + new object[] + { + 22.08523616309826, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 27.223948487553027, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 28.439453231776056, + 2, + new PdfPoint(10, 30), + }, + } + }, + new object[] + { + new PdfPoint(19.784956200369862, 49.74041414042939), + new object[] + { + new object[] + { + 11.048635637902876, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 22.032460558884953, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 30.216158866276444, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(91.46918827031537, 10.458352581834374), + new object[] + { + new object[] + { + 37.675749848649346, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 57.29952404986787, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 63.29402675020287, + 6, + new PdfPoint(70, 70), + }, + } + }, + new object[] + { + new PdfPoint(19.900141743444067, 33.68929824559639), + new object[] + { + new object[] + { + 8.113785236866608, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 10.565213111208138, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 30.305085535122533, + 3, + new PdfPoint(1, 10), + }, + } + }, + new object[] + { + new PdfPoint(99.56220935020619, 63.18918949351682), + new object[] + { + new object[] + { + 30.3366339830351, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 42.985715750170165, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 49.97782930253481, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(0.9575689831946121, 56.0195244568354), + new object[] + { + new object[] + { + 27.545983584790353, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 28.890546083814222, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 46.01954401799804, + 3, + new PdfPoint(1, 10), + }, + } + }, + new object[] + { + new PdfPoint(13.763956851598868, 20.74365587257857), + new object[] + { + new object[] + { + 9.992360971559586, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 16.68366674379076, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 22.294740518481255, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(89.66047561920547, 70.74342301744882), + new object[] + { + new object[] + { + 19.67452615328373, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 31.071337779236003, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 38.894097530493816, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(51.22041417582528, 90.11643810630143), + new object[] + { + new object[] + { + 13.39490377728326, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 15.118044960594169, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 16.220832095423244, + 4, + new PdfPoint(35, 90), + }, + } + }, + new object[] + { + new PdfPoint(13.94537026257473, 3.2534322160761575), + new object[] + { + new object[] + { + 14.597903551477287, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 27.035991469314418, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 38.37336423262986, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(35.907000931452906, 67.29871186609165), + new object[] + { + new object[] + { + 16.94427513364443, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 22.31273302336873, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 22.719399939883633, + 4, + new PdfPoint(35, 90), + }, + } + }, + new object[] + { + new PdfPoint(53.72385478058551, 34.1117586202502), + new object[] + { + new object[] + { + 16.318802301887334, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 29.321173578190265, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 33.13634116112924, + 7, + new PdfPoint(55, 1), + }, + } + }, + new object[] + { + new PdfPoint(56.01158219636303, 50.713431740553794), + new object[] + { + new object[] + { + 6.053767864070984, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 23.825355146888903, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 24.79825304193105, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(85.73666685032894, 4.105238234975095), + new object[] + { + new object[] + { + 30.89312534471159, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 58.167332026144976, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 67.74778455143482, + 6, + new PdfPoint(70, 70), + }, + } + }, + new object[] + { + new PdfPoint(70.07227672522, 85.08222783289746), + new object[] + { + new object[] + { + 11.281834876246238, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 15.08240101338097, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 21.573202301879537, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(1.845180225020826, 95.15703279645201), + new object[] + { + new object[] + { + 33.55349551946908, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 53.12722727818502, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 59.82009650377246, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(77.65420415473436, 0.6457892186903513), + new object[] + { + new object[] + { + 22.656973124448452, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 56.573784823694346, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 65.73598041703032, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(6.219304325291253, 47.10473454603812), + new object[] + { + new object[] + { + 17.517579846405475, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 20.0796360274705, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 37.47002086164296, + 3, + new PdfPoint(1, 10), + }, + } + }, + new object[] + { + new PdfPoint(27.466544481255152, 5.23970743977279), + new object[] + { + new object[] + { + 26.891232066181203, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 27.857966400610902, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 30.301027437757085, + 2, + new PdfPoint(10, 30), + }, + } + }, + new object[] + { + new PdfPoint(40.721106407631716, 91.17894863211862), + new object[] + { + new object[] + { + 5.841316495843984, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 19.168047170329135, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 22.285525137752657, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(93.71967627569863, 69.92495107460142), + new object[] + { + new object[] + { + 23.71979500259528, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 35.1926580267403, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 43.02007511262245, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(34.80623433831922, 74.52400508825515), + new object[] + { + new object[] + { + 15.477207876099586, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 16.200759780375687, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 25.78201598962232, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(54.410107977828574, 53.02534528663537), + new object[] + { + new object[] + { + 5.348061936764951, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 22.23767717618116, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 23.04742145882954, + 6, + new PdfPoint(70, 70), + }, + } + }, + new object[] + { + new PdfPoint(75.35946634265616, 43.898478778156736), + new object[] + { + new object[] + { + 26.083157293642856, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 26.646074562163907, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 39.23306055946167, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(28.68967491589185, 76.26518874260796), + new object[] + { + new object[] + { + 15.115066752856489, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 22.346169871210755, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 31.53228935553006, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(23.173766410901152, 5.938703009992585), + new object[] + { + new object[] + { + 22.54262739980084, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 27.43162653380815, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 32.20714100768327, + 7, + new PdfPoint(55, 1), + }, + } + }, + new object[] + { + new PdfPoint(45.15121045936782, 84.92310113698109), + new object[] + { + new object[] + { + 11.3499769099193, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 11.518518796501736, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 15.64364010155348, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(79.34435328880231, 64.36582210296166), + new object[] + { + new object[] + { + 10.91150305693152, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 24.872304329881437, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 30.27355451390367, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(32.71323906831667, 16.467670083297026), + new object[] + { + new object[] + { + 24.764179942682542, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 26.43889524827013, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 27.128371322873924, + 7, + new PdfPoint(55, 1), + }, + } + }, + new object[] + { + new PdfPoint(7.574147517126595, 2.618810847471864), + new object[] + { + new object[] + { + 9.884400279346279, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 27.488439018525362, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 41.24334658113903, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(20.43354407406556, 85.31844765600553), + new object[] + { + new object[] + { + 15.300280082134142, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 32.261100258698846, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 39.922303540860256, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(22.34600206444981, 74.86048890604329), + new object[] + { + new object[] + { + 19.731407955768056, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 28.654337560583244, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 34.96136999332652, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(63.55251564207386, 87.87501150557617), + new object[] + { + new object[] + { + 8.639222974326827, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 17.981422919591974, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 19.002265414160036, + 6, + new PdfPoint(70, 70), + }, + } + }, + new object[] + { + new PdfPoint(66.56676934427253, 22.618060969910626), + new object[] + { + new object[] + { + 24.51796714987554, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 32.003569043996634, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 45.05472359437686, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(37.37365602876168, 82.29816768422216), + new object[] + { + new object[] + { + 8.059309149253208, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 15.457700397197755, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 22.74275744516473, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(49.32206363274456, 34.6288799996447), + new object[] + { + new object[] + { + 15.386062777181502, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 24.908065147929335, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 34.104846157417356, + 7, + new PdfPoint(55, 1), + }, + } + }, + new object[] + { + new PdfPoint(47.912171617799714, 26.464204062460027), + new object[] + { + new object[] + { + 23.628218675284096, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 26.432234103649463, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 26.611752665058166, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(62.98919203656388, 8.505042849821665), + new object[] + { + new object[] + { + 10.961425891495823, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 43.48046203362921, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 49.34684425049385, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(22.813112421361513, 91.33114676735282), + new object[] + { + new object[] + { + 12.259371132754197, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 32.576172060382156, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 38.874921155541756, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(83.79195528008587, 61.61229643727948), + new object[] + { + new object[] + { + 16.142230375755485, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 30.06933285525455, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 35.41952763341757, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(40.57648596422233, 88.72604856926107), + new object[] + { + new object[] + { + 5.720152791407797, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 17.23525613908212, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 21.293586384898983, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(23.963796491024425, 39.78301198290163), + new object[] + { + new object[] + { + 1.0586791353274034, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 17.049778177452716, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 27.969103262391588, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(66.61803420364912, 81.92497907966498), + new object[] + { + new object[] + { + 6.892308842312381, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 12.395274046915407, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 17.084446951544887, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(99.22597668831827, 95.16802163222447), + new object[] + { + new object[] + { + 38.569249749849185, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 42.056463562550256, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 52.27326203806389, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(54.91457415134011, 20.76613744667287), + new object[] + { + new object[] + { + 19.766322043728387, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 29.64408471981961, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 35.56435315560098, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(37.99829204035451, 49.05561293919847), + new object[] + { + new object[] + { + 12.038806455343792, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 15.84170829396003, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 29.019917812230187, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(44.13914280799433, 96.26313880094763), + new object[] + { + new object[] + { + 11.07929776226139, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 22.34261473233293, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 22.716876425338192, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(68.45663600770705, 53.9590240469649), + new object[] + { + new object[] + { + 16.115051409739802, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 18.876474356336637, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 27.339656357785035, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(12.707495686246627, 54.33094645334382), + new object[] + { + new object[] + { + 18.880722670286037, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 24.4811251417603, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 37.54314817876952, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(58.52082047274562, 57.34835769135233), + new object[] + { + new object[] + { + 11.25178840401906, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 17.08319688246026, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 19.18705857539686, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(99.15392575500378, 16.024553135770216), + new object[] + { + new object[] + { + 46.64017963631754, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 59.75315394816014, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 61.34574354526617, + 6, + new PdfPoint(70, 70), + }, + } + }, + new object[] + { + new PdfPoint(9.14386712267613, 18.48796945342841), + new object[] + { + new object[] + { + 11.543821326096149, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 11.76300119672437, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 26.724228858097668, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(20.364409084676716, 42.516138522943194), + new object[] + { + new object[] + { + 5.274434206705637, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 16.250375355665845, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 30.56593580291902, + 5, + new PdfPoint(50, 50), + }, + } + }, + new object[] + { + new PdfPoint(71.41826096965676, 51.52054502261746), + new object[] + { + new object[] + { + 18.533799406467093, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 21.472167103721244, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 30.68315562943202, + 8, + new PdfPoint(60, 80), + }, + } + }, + new object[] + { + new PdfPoint(66.76607506217822, 41.47325322334792), + new object[] + { + new object[] + { + 18.809749694872096, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 28.7094679881515, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 37.048776933820484, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(75.22106099331124, 78.49278018746351), + new object[] + { + new object[] + { + 9.96929251293435, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 15.295502911817039, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 24.471602094665585, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(20.23368754320779, 18.77886105160098), + new object[] + { + new object[] + { + 15.186912788031798, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 21.142448719887277, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 21.749815463654638, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(26.22566842248103, 2.1646330467549713), + new object[] + { + new object[] + { + 26.414528628256093, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 28.79789103157728, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 32.21924842664868, + 2, + new PdfPoint(10, 30), + }, + } + }, + new object[] + { + new PdfPoint(73.433313570979, 20.353343954336044), + new object[] + { + new object[] + { + 26.727120522437016, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 37.78947471989696, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 49.765229815536166, + 6, + new PdfPoint(70, 70), + }, + } + }, + new object[] + { + new PdfPoint(56.567534506738085, 29.559840241162306), + new object[] + { + new object[] + { + 21.46934187309903, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 28.602825717584764, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 33.24915293092673, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(58.883110628279766, 29.544477814049795), + new object[] + { + new object[] + { + 22.301077156365295, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 28.807390750087734, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 35.45959855989831, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(10.578350777330447, 76.09626135135599), + new object[] + { + new object[] + { + 28.102151148353634, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 38.87060650217747, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 40.43651214967753, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(52.351579782397785, 29.629467324272664), + new object[] + { + new object[] + { + 20.505816954363393, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 28.75170480024794, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 29.251613025117088, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(5.635680496099216, 31.218456664234452), + new object[] + { + new object[] + { + 4.531216323984779, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 21.262463949577448, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 21.718941891213532, + 3, + new PdfPoint(1, 10), + }, + } + }, + new object[] + { + new PdfPoint(70.54093686797465, 63.05914799333128), + new object[] + { + new object[] + { + 6.961899114006998, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 19.952539105749896, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 22.900483844743007, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(16.722031960407623, 61.0191629618462), + new object[] + { + new object[] + { + 22.59048398067558, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 31.739158535322147, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 34.263289846253635, + 4, + new PdfPoint(35, 90), + }, + } + }, + new object[] + { + new PdfPoint(2.44084138208438, 6.372760538234356), + new object[] + { + new object[] + { + 3.902933512284925, + 3, + new PdfPoint(1, 10), + }, + new object[] + { + 24.807001503495414, + 2, + new PdfPoint(10, 30), + }, + new object[] + { + 40.49329415307187, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(97.04197763063725, 76.19402759440892), + new object[] + { + new object[] + { + 27.742287793478468, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 37.236991456624835, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 46.05745765927936, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(3.1014335951180305, 93.45996261954107), + new object[] + { + new object[] + { + 32.08566471206863, + 4, + new PdfPoint(35, 90), + }, + new object[] + { + 51.3326687749404, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 57.77122825309978, + 1, + new PdfPoint(25, 40), + }, + } + }, + new object[] + { + new PdfPoint(94.23480523412653, 20.79954962662124), + new object[] + { + new object[] + { + 43.94760638734355, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 53.00362531100362, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 54.84532889571684, + 6, + new PdfPoint(70, 70), + }, + } + }, + new object[] + { + new PdfPoint(92.12116656208707, 68.7190578812228), + new object[] + { + new object[] + { + 22.158222464341684, + 6, + new PdfPoint(70, 70), + }, + new object[] + { + 34.04451492379561, + 8, + new PdfPoint(60, 80), + }, + new object[] + { + 41.59808376988461, + 0, + new PdfPoint(51, 75), + }, + } + }, + new object[] + { + new PdfPoint(37.35531423574498, 8.63839212418782), + new object[] + { + new object[] + { + 19.227063477352917, + 7, + new PdfPoint(55, 1), + }, + new object[] + { + 33.7076287866739, + 1, + new PdfPoint(25, 40), + }, + new object[] + { + 34.7078018315236, + 2, + new PdfPoint(10, 30), + }, + } + }, + new object[] + { + new PdfPoint(51.71954908303077, 51.41808119631073), + new object[] + { + new object[] + { + 2.228856955545159, + 5, + new PdfPoint(50, 50), + }, + new object[] + { + 23.592893958704682, + 0, + new PdfPoint(51, 75), + }, + new object[] + { + 26.066503259060696, + 6, + new PdfPoint(70, 70), + }, + } + } + }; + + + public static PdfPoint[] Tree2 = new PdfPoint[] + { + new PdfPoint(82.45353838109239, 62.415005093558115), + new PdfPoint(16.445674398013832, 7.051331644986569), + new PdfPoint(35.583597244228336, 27.46872033901967), + new PdfPoint(63.8245554804822, 44.89509346225664), + new PdfPoint(0.7742372570967326, 6.938583013317256), + new PdfPoint(65.40181734760978, 22.29324720161768), + new PdfPoint(97.13960454465617, 50.25370334786503), + new PdfPoint(19.15551535520754, 45.53805856543256), + new PdfPoint(80.59123120177551, 25.51233282470693), + new PdfPoint(5.021252133213605, 56.04912906205743), + new PdfPoint(24.41810676553939, 79.31739454102991), + new PdfPoint(98.12630738875605, 12.483472098628233), + new PdfPoint(82.48631571672695, 29.34364176375367), + new PdfPoint(35.803655214742406, 5.16089154047169), + new PdfPoint(1.813800375443253, 47.255096977735214), + new PdfPoint(80.11998397458856, 25.99984035749021), + new PdfPoint(90.26397977468233, 88.93339150438577), + new PdfPoint(8.254965696884042, 8.97868520394496), + new PdfPoint(14.158071542303697, 98.52077265281578), + new PdfPoint(70.71899728005727, 9.70650341683359), + new PdfPoint(58.60508497220939, 69.22169822597527), + new PdfPoint(15.143510163282482, 66.19892308162831), + new PdfPoint(16.49098129875618, 61.44894011847811), + new PdfPoint(59.31519405414486, 64.30374393065894), + new PdfPoint(58.880198617023936, 69.74930498275906), + new PdfPoint(58.78888045620321, 4.76405876739463), + new PdfPoint(11.228694290441743, 12.860145308234605), + new PdfPoint(80.62371302859762, 81.02375037506395), + new PdfPoint(90.87481745321885, 8.048659530077462), + new PdfPoint(86.97060905691454, 53.23733886383501), + new PdfPoint(79.77968787046065, 62.69132229661655), + new PdfPoint(97.45369858932968, 33.575350634376086), + new PdfPoint(55.68259729639997, 78.53266468780453), + new PdfPoint(84.80993603153726, 40.80973096746926), + new PdfPoint(52.89633110070122, 15.424096971651757), + new PdfPoint(31.112041569584935, 55.44209995586027), + new PdfPoint(49.53804959253269, 92.63065004232082), + new PdfPoint(92.45607820110665, 72.66951564303699), + new PdfPoint(24.636942156010523, 22.044633809864933), + new PdfPoint(99.76982890678676, 52.90800974490838), + new PdfPoint(82.61099784649278, 17.85771383958713), + new PdfPoint(74.16588992664359, 81.00550169213861), + new PdfPoint(13.34483441571791, 47.0726836958395), + new PdfPoint(47.945049322341525, 9.252548969452246), + new PdfPoint(82.78544384909999, 85.53384162961818), + new PdfPoint(86.41791572882465, 84.5461317010868), + new PdfPoint(67.53711275495073, 90.39020510040851), + new PdfPoint(62.56803790975437, 46.05914229645705), + new PdfPoint(71.56130305322326, 8.098723357173876), + new PdfPoint(37.970724110053844, 36.503310666941424), + new PdfPoint(18.3788032374675, 19.84795034896214), + new PdfPoint(18.13308334914272, 1.2881803099952127), + new PdfPoint(81.60160120456186, 59.00242318333139), + new PdfPoint(37.57869607184197, 27.967241358959505), + new PdfPoint(97.7460348272766, 5.634112362720456), + new PdfPoint(84.9666796464414, 68.61319827025679), + new PdfPoint(29.725739779656745, 38.277277199189065), + new PdfPoint(15.448731011261907, 30.373061794712797), + new PdfPoint(70.09436264721477, 86.01779473250726), + new PdfPoint(71.14819197800337, 52.17424240997747), + new PdfPoint(43.017566199578106, 57.09185921458071), + new PdfPoint(33.433656443618766, 3.2699185921492235), + new PdfPoint(2.4884293540186175, 29.514037079380717), + new PdfPoint(72.74747856539602, 44.441442049411116), + new PdfPoint(15.264247773398054, 0.8939481426395335), + new PdfPoint(82.27200991589356, 79.74763514660499), + new PdfPoint(34.43836768761709, 85.52303143204219), + new PdfPoint(91.90691599722378, 96.20420265233045), + new PdfPoint(10.747687004702266, 72.62390777764313), + new PdfPoint(18.204503055467892, 62.00619128580146), + new PdfPoint(91.00755813085259, 81.62926984298593), + new PdfPoint(52.97863363490906, 68.26721122337617), + new PdfPoint(84.97188896260866, 40.483497230772926), + new PdfPoint(82.04208148460329, 71.99786553392418), + new PdfPoint(75.03458936225277, 45.61844875850991), + new PdfPoint(62.777729239709636, 93.54972672515291), + new PdfPoint(70.36073331446983, 3.9743344551363857), + new PdfPoint(84.64548329605812, 44.580018552016185), + new PdfPoint(44.866927314279856, 7.669932380951572), + new PdfPoint(90.03637785608008, 39.71900281528301), + new PdfPoint(63.98092485758994, 24.420561596263646), + new PdfPoint(11.201209707090698, 49.55375920684947), + new PdfPoint(99.66377946738517, 22.268044551668787), + new PdfPoint(57.19140901930086, 6.016576988006017), + new PdfPoint(42.195134616764996, 62.54652068319705), + new PdfPoint(49.61310425442538, 20.010647167526496), + new PdfPoint(52.44257355334966, 84.19422038812934), + new PdfPoint(67.0752294529232, 39.24937886844233), + new PdfPoint(43.03278016511083, 4.6357991376672185), + new PdfPoint(49.42598643546282, 18.91930873569896), + new PdfPoint(93.45285655237589, 26.040139241642603), + new PdfPoint(99.36796037285181, 90.9895050206579), + new PdfPoint(69.38884149074713, 6.0366785105100185), + new PdfPoint(99.69679458529599, 47.806517636673476), + new PdfPoint(80.69475374791655, 21.854199922464968), + new PdfPoint(89.04717161055198, 88.20721990563409), + new PdfPoint(46.898436066324166, 25.173429288152636), + new PdfPoint(8.420107657979937, 68.0080815210619), + new PdfPoint(28.000497306010118, 81.20161949340638), + new PdfPoint(24.103817108644833, 21.163820177769633) + }; + + public static IEnumerable DataTree2 => new[] + { + new object[] + { + new PdfPoint(87.37822238977932, 47.13424664374255), + new object[] + { + 3.7405807168027154, + 77, + new PdfPoint(84.64548329605812, 44.580018552016185), + } + }, + new object[] + { + new PdfPoint(74.5026032549824, 69.93356102115371), + new object[] + { + 7.816974165006036, + 73, + new PdfPoint(82.04208148460329, 71.99786553392418), + } + }, + new object[] + { + new PdfPoint(54.01419184925133, 71.12439211149801), + new object[] + { + 3.039056340830242, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + } + }, + new object[] + { + new PdfPoint(53.56967860131475, 54.19173302307295), + new object[] + { + 10.943391067925589, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(33.62320720050764, 38.388295379543614), + new object[] + { + 3.899048259891558, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + } + }, + new object[] + { + new PdfPoint(67.71643075209577, 98.50616915055454), + new object[] + { + 6.996934624874407, + 75, + new PdfPoint(62.777729239709636, 93.54972672515291), + } + }, + new object[] + { + new PdfPoint(62.853776192101186, 77.58809088626217), + new object[] + { + 7.233120102743402, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + } + }, + new object[] + { + new PdfPoint(39.1710541173474, 6.731437418177089), + new object[] + { + 3.7156412263891623, + 13, + new PdfPoint(35.803655214742406, 5.16089154047169), + } + }, + new object[] + { + new PdfPoint(9.500054562360727, 40.24933325499364), + new object[] + { + 7.832014004033237, + 42, + new PdfPoint(13.34483441571791, 47.0726836958395), + } + }, + new object[] + { + new PdfPoint(4.158440156246623, 15.800929441459854), + new object[] + { + 7.657460730577243, + 26, + new PdfPoint(11.228694290441743, 12.860145308234605), + } + }, + new object[] + { + new PdfPoint(70.38603008213099, 37.92398478562566), + new object[] + { + 3.5662403566120062, + 87, + new PdfPoint(67.0752294529232, 39.24937886844233), + } + }, + new object[] + { + new PdfPoint(36.49654657133572, 22.300307481532634), + new object[] + { + 5.24842528186342, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + } + }, + new object[] + { + new PdfPoint(44.448096442616745, 76.71337511467348), + new object[] + { + 10.948730989453496, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + } + }, + new object[] + { + new PdfPoint(18.520340417793502, 44.31476289468993), + new object[] + { + 1.378368419246679, + 7, + new PdfPoint(19.15551535520754, 45.53805856543256), + } + }, + new object[] + { + new PdfPoint(68.27767536726084, 94.51997472754229), + new object[] + { + 4.195644188434987, + 46, + new PdfPoint(67.53711275495073, 90.39020510040851), + } + }, + new object[] + { + new PdfPoint(80.9852186456766, 37.41169774270004), + new object[] + { + 5.032841375488803, + 72, + new PdfPoint(84.97188896260866, 40.483497230772926), + } + }, + new object[] + { + new PdfPoint(57.035762190811745, 39.26879178691382), + new object[] + { + 8.758706221403711, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(12.085443471887913, 97.92593979377935), + new object[] + { + 2.1562961875551574, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + } + }, + new object[] + { + new PdfPoint(77.27841905993205, 42.15685387387795), + new object[] + { + 4.125216461895987, + 74, + new PdfPoint(75.03458936225277, 45.61844875850991), + } + }, + new object[] + { + new PdfPoint(85.87212254856951, 56.063370792337665), + new object[] + { + 3.032017326786329, + 29, + new PdfPoint(86.97060905691454, 53.23733886383501), + } + }, + new object[] + { + new PdfPoint(12.121061998950344, 88.5888682638655), + new object[] + { + 10.138645504748764, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + } + }, + new object[] + { + new PdfPoint(87.40498458296966, 51.58451776586178), + new object[] + { + 1.7089469504759578, + 29, + new PdfPoint(86.97060905691454, 53.23733886383501), + } + }, + new object[] + { + new PdfPoint(55.13592516333022, 41.86805042798852), + new object[] + { + 8.532382488232894, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(46.67110223109417, 55.89363812932652), + new object[] + { + 3.8450044606910225, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(16.092850368369838, 39.120936314989095), + new object[] + { + 7.110511570818105, + 7, + new PdfPoint(19.15551535520754, 45.53805856543256), + } + }, + new object[] + { + new PdfPoint(60.44407078486588, 51.23153354793123), + new object[] + { + 5.591499584720878, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(16.3698062506329, 73.24470440615686), + new object[] + { + 5.656289708761183, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + } + }, + new object[] + { + new PdfPoint(23.603385764313224, 35.368200010880244), + new object[] + { + 6.7783441028566624, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + } + }, + new object[] + { + new PdfPoint(55.00466410944499, 87.18171359059261), + new object[] + { + 3.9356605103079088, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + } + }, + new object[] + { + new PdfPoint(79.35386322733488, 71.45043817963591), + new object[] + { + 2.7433909868872557, + 73, + new PdfPoint(82.04208148460329, 71.99786553392418), + } + }, + new object[] + { + new PdfPoint(92.04745240854216, 81.04432394243022), + new object[] + { + 1.193122715963635, + 70, + new PdfPoint(91.00755813085259, 81.62926984298593), + } + }, + new object[] + { + new PdfPoint(38.38165092946303, 48.26803735488079), + new object[] + { + 9.967524396930479, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(76.69366761932686, 86.37384253935019), + new object[] + { + 5.9336956035398005, + 41, + new PdfPoint(74.16588992664359, 81.00550169213861), + } + }, + new object[] + { + new PdfPoint(26.857001817848914, 72.32337753974622), + new object[] + { + 7.407056290485798, + 10, + new PdfPoint(24.41810676553939, 79.31739454102991), + } + }, + new object[] + { + new PdfPoint(67.72139867299835, 92.06400298246639), + new object[] + { + 1.6839123045966824, + 46, + new PdfPoint(67.53711275495073, 90.39020510040851), + } + }, + new object[] + { + new PdfPoint(60.07059131774799, 65.14826966545107), + new object[] + { + 1.1330704932109386, + 23, + new PdfPoint(59.31519405414486, 64.30374393065894), + } + }, + new object[] + { + new PdfPoint(98.18469148101073, 19.636669855162936), + new object[] + { + 3.018581465663707, + 82, + new PdfPoint(99.66377946738517, 22.268044551668787), + } + }, + new object[] + { + new PdfPoint(13.315505500931046, 2.219169876084226), + new object[] + { + 2.3566520929687598, + 64, + new PdfPoint(15.264247773398054, 0.8939481426395335), + } + }, + new object[] + { + new PdfPoint(9.499232323084716, 53.073137917110024), + new object[] + { + 3.9093162473638645, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + } + }, + new object[] + { + new PdfPoint(68.33664969059441, 84.3521765566152), + new object[] + { + 2.4215364431973803, + 58, + new PdfPoint(70.09436264721477, 86.01779473250726), + } + }, + new object[] + { + new PdfPoint(68.17553361331473, 88.07665773162144), + new object[] + { + 2.4000172124415697, + 46, + new PdfPoint(67.53711275495073, 90.39020510040851), + } + }, + new object[] + { + new PdfPoint(49.166278548969665, 1.397572786085366), + new object[] + { + 6.93584258247533, + 88, + new PdfPoint(43.03278016511083, 4.6357991376672185), + } + }, + new object[] + { + new PdfPoint(24.727638210913018, 32.081396611116276), + new object[] + { + 7.960524829000644, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + } + }, + new object[] + { + new PdfPoint(88.42089809955208, 39.026696182483356), + new object[] + { + 1.7575731329222621, + 79, + new PdfPoint(90.03637785608008, 39.71900281528301), + } + }, + new object[] + { + new PdfPoint(51.42556152624328, 15.448878446223556), + new object[] + { + 1.470978335201828, + 34, + new PdfPoint(52.89633110070122, 15.424096971651757), + } + }, + new object[] + { + new PdfPoint(19.693229959708034, 2.7893290005286175), + new object[] + { + 2.1650646266448024, + 51, + new PdfPoint(18.13308334914272, 1.2881803099952127), + } + }, + new object[] + { + new PdfPoint(9.279840978602271, 29.123265376879715), + new object[] + { + 6.294219198683488, + 57, + new PdfPoint(15.448731011261907, 30.373061794712797), + } + }, + new object[] + { + new PdfPoint(78.20191411050928, 81.43682258294183), + new object[] + { + 2.4567740328680956, + 27, + new PdfPoint(80.62371302859762, 81.02375037506395), + } + }, + new object[] + { + new PdfPoint(40.537261184519394, 72.9327512887614), + new object[] + { + 10.517715080249477, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + } + }, + new object[] + { + new PdfPoint(7.386788690671264, 3.4978575051093697), + new object[] + { + 5.549162421342523, + 17, + new PdfPoint(8.254965696884042, 8.97868520394496), + } + }, + new object[] + { + new PdfPoint(26.05756081867855, 84.20846377940514), + new object[] + { + 3.579960160958175, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + } + }, + new object[] + { + new PdfPoint(74.3139313663137, 31.084939962251912), + new object[] + { + 7.718062249062456, + 15, + new PdfPoint(80.11998397458856, 25.99984035749021), + } + }, + new object[] + { + new PdfPoint(27.08914433160744, 37.16399756733006), + new object[] + { + 2.8619970467116924, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + } + }, + new object[] + { + new PdfPoint(70.85333147347784, 5.242611226453819), + new object[] + { + 1.3605803595971302, + 76, + new PdfPoint(70.36073331446983, 3.9743344551363857), + } + }, + new object[] + { + new PdfPoint(51.77204458863274, 52.932206910888034), + new object[] + { + 9.69245062675278, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(13.471218812546915, 11.31698816247696), + new object[] + { + 2.7221774756150476, + 26, + new PdfPoint(11.228694290441743, 12.860145308234605), + } + }, + new object[] + { + new PdfPoint(23.382642351306295, 64.21491294035737), + new object[] + { + 5.629527326020367, + 69, + new PdfPoint(18.204503055467892, 62.00619128580146), + } + }, + new object[] + { + new PdfPoint(21.987233262429573, 11.042886413409592), + new object[] + { + 6.829449766789799, + 1, + new PdfPoint(16.445674398013832, 7.051331644986569), + } + }, + new object[] + { + new PdfPoint(44.65334716075204, 56.72809804882697), + new object[] + { + 1.6757391022022616, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(14.413577866791204, 65.20588702038663), + new object[] + { + 1.2324454456029377, + 21, + new PdfPoint(15.143510163282482, 66.19892308162831), + } + }, + new object[] + { + new PdfPoint(1.496525343024535, 34.243471455041515), + new object[] + { + 4.83233101936407, + 62, + new PdfPoint(2.4884293540186175, 29.514037079380717), + } + }, + new object[] + { + new PdfPoint(60.37475135874306, 86.38587789183474), + new object[] + { + 7.556125515305361, + 75, + new PdfPoint(62.777729239709636, 93.54972672515291), + } + }, + new object[] + { + new PdfPoint(87.96474891454915, 60.71664437764912), + new object[] + { + 5.766963730198733, + 0, + new PdfPoint(82.45353838109239, 62.415005093558115), + } + }, + new object[] + { + new PdfPoint(93.90443153077325, 3.5656814220870303), + new object[] + { + 4.363063424232462, + 54, + new PdfPoint(97.7460348272766, 5.634112362720456), + } + }, + new object[] + { + new PdfPoint(56.99120651646804, 81.00351342714225), + new object[] + { + 2.7959884805796307, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + } + }, + new object[] + { + new PdfPoint(76.89422069517484, 54.17932624450519), + new object[] + { + 6.085820174967678, + 59, + new PdfPoint(71.14819197800337, 52.17424240997747), + } + }, + new object[] + { + new PdfPoint(63.45013931565355, 80.49930589119406), + new object[] + { + 8.012639180927806, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + } + }, + new object[] + { + new PdfPoint(31.33405794501082, 30.022880285076926), + new object[] + { + 4.958055796946755, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + } + }, + new object[] + { + new PdfPoint(59.209873769066554, 46.30109565207685), + new object[] + { + 3.366869142407712, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(78.79398195705156, 78.45536064489083), + new object[] + { + 3.153496725896489, + 27, + new PdfPoint(80.62371302859762, 81.02375037506395), + } + }, + new object[] + { + new PdfPoint(85.57104507254752, 24.654183310002807), + new object[] + { + 5.053213509947922, + 8, + new PdfPoint(80.59123120177551, 25.51233282470693), + } + }, + new object[] + { + new PdfPoint(78.95708936964519, 12.704872047938153), + new object[] + { + 6.31686834491134, + 40, + new PdfPoint(82.61099784649278, 17.85771383958713), + } + }, + new object[] + { + new PdfPoint(13.174935980071456, 88.82914034992214), + new object[] + { + 9.741370141218182, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + } + }, + new object[] + { + new PdfPoint(55.623046798666124, 96.84465577887713), + new object[] + { + 7.4016913841622145, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + } + }, + new object[] + { + new PdfPoint(8.430144926873329, 97.99469494927773), + new object[] + { + 5.75203451501427, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + } + }, + new object[] + { + new PdfPoint(43.22581030476383, 49.88363608992273), + new object[] + { + 7.211230562268732, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(52.462469277256375, 74.30081146714733), + new object[] + { + 5.317688044710818, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + } + }, + new object[] + { + new PdfPoint(2.0752344418159763, 84.50188522953496), + new object[] + { + 14.707065710166793, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + } + }, + new object[] + { + new PdfPoint(87.72047866413772, 86.93785567990162), + new object[] + { + 1.8361371712469572, + 95, + new PdfPoint(89.04717161055198, 88.20721990563409), + } + }, + new object[] + { + new PdfPoint(85.69225991285919, 6.507776800176323), + new object[] + { + 5.40677558683976, + 28, + new PdfPoint(90.87481745321885, 8.048659530077462), + } + }, + new object[] + { + new PdfPoint(95.701988137853, 51.80572553493597), + new object[] + { + 2.11554101881059, + 6, + new PdfPoint(97.13960454465617, 50.25370334786503), + } + }, + new object[] + { + new PdfPoint(77.4844196684514, 50.073882954946704), + new object[] + { + 5.084541514035221, + 74, + new PdfPoint(75.03458936225277, 45.61844875850991), + } + }, + new object[] + { + new PdfPoint(93.83858926824583, 78.54914176983279), + new object[] + { + 4.183530356997088, + 70, + new PdfPoint(91.00755813085259, 81.62926984298593), + } + }, + new object[] + { + new PdfPoint(69.60341179436881, 2.118953273473234), + new object[] + { + 2.003989823845886, + 76, + new PdfPoint(70.36073331446983, 3.9743344551363857), + } + }, + new object[] + { + new PdfPoint(21.036323077268815, 30.797805649614528), + new object[] + { + 5.603712380054862, + 57, + new PdfPoint(15.448731011261907, 30.373061794712797), + } + }, + new object[] + { + new PdfPoint(67.01310772132939, 11.758224733999745), + new object[] + { + 4.235938831569964, + 19, + new PdfPoint(70.71899728005727, 9.70650341683359), + } + }, + new object[] + { + new PdfPoint(58.40755345770724, 54.22645743167164), + new object[] + { + 9.16595152690823, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(49.248852518964966, 70.66641193673007), + new object[] + { + 4.434797767182969, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + } + }, + new object[] + { + new PdfPoint(2.7054302324065804, 31.088830779825305), + new object[] + { + 1.5896743629376124, + 62, + new PdfPoint(2.4884293540186175, 29.514037079380717), + } + }, + new object[] + { + new PdfPoint(30.842485871231062, 31.67560039456263), + new object[] + { + 6.3384522442698294, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + } + }, + new object[] + { + new PdfPoint(55.56502506452341, 65.54856266577112), + new object[] + { + 3.75239531592163, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + } + }, + new object[] + { + new PdfPoint(1.267016931392484, 79.30364358908852), + new object[] + { + 11.59749867642406, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + } + }, + new object[] + { + new PdfPoint(85.80159109593838, 72.9274073673635), + new object[] + { + 3.8727200438238047, + 73, + new PdfPoint(82.04208148460329, 71.99786553392418), + } + }, + new object[] + { + new PdfPoint(31.687705038346536, 73.64980455511628), + new object[] + { + 8.403892534033446, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + } + }, + new object[] + { + new PdfPoint(9.155398598534447, 51.101027419495416), + new object[] + { + 2.565030606787517, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + } + }, + new object[] + { + new PdfPoint(95.78765937402926, 29.508025935639814), + new object[] + { + 4.180615066997134, + 90, + new PdfPoint(93.45285655237589, 26.040139241642603), + } + }, + new object[] + { + new PdfPoint(67.92396367960997, 22.903155180355462), + new object[] + { + 2.5948429360078844, + 5, + new PdfPoint(65.40181734760978, 22.29324720161768), + } + }, + new object[] + { + new PdfPoint(38.49112754016583, 70.52567748005846), + new object[] + { + 8.79696604588175, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + } + }, + new object[] + { + new PdfPoint(59.65725942551804, 65.37065649962103), + new object[] + { + 1.120406688708154, + 23, + new PdfPoint(59.31519405414486, 64.30374393065894), + } + }, + new object[] + { + new PdfPoint(45.15904139251526, 74.24820871457037), + new object[] + { + 9.844711972778917, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + } + } + }; + + public static IEnumerable DataTreeK2 => new[] + { + // k = 3 + new object[] + { + new PdfPoint(90.33048545330094, 47.33938084378586), + new object[] + { + new object[] + { + 6.319282378964871, + 77, + new PdfPoint(84.64548329605812, 44.580018552016185), + }, + new object[] + { + 6.787833100869266, + 29, + new PdfPoint(86.97060905691454, 53.23733886383501), + }, + new object[] + { + 7.406576703041731, + 6, + new PdfPoint(97.13960454465617, 50.25370334786503), + }, + } + }, + new object[] + { + new PdfPoint(94.00419687661137, 1.6606574220328518), + new object[] + { + new object[] + { + 5.457993716991005, + 54, + new PdfPoint(97.7460348272766, 5.634112362720456), + }, + new object[] + { + 7.11333863301438, + 28, + new PdfPoint(90.87481745321885, 8.048659530077462), + }, + new object[] + { + 11.581239683136776, + 11, + new PdfPoint(98.12630738875605, 12.483472098628233), + }, + } + }, + new object[] + { + new PdfPoint(85.52978116794068, 97.43823054363845), + new object[] + { + new object[] + { + 6.495434817422279, + 67, + new PdfPoint(91.90691599722378, 96.20420265233045), + }, + new object[] + { + 9.733700402810387, + 16, + new PdfPoint(90.26397977468233, 88.93339150438577), + }, + new object[] + { + 9.878440814456654, + 95, + new PdfPoint(89.04717161055198, 88.20721990563409), + }, + } + }, + new object[] + { + new PdfPoint(22.62162567299718, 79.83427737771372), + new object[] + { + new object[] + { + 1.8693614371543983, + 10, + new PdfPoint(24.41810676553939, 79.31739454102991), + }, + new object[] + { + 5.549944549793103, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + }, + new object[] + { + 13.114774665647976, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + } + }, + new object[] + { + new PdfPoint(7.692210312894288, 89.82892292381919), + new object[] + { + new object[] + { + 10.833079578284183, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + }, + new object[] + { + 17.47422341605857, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + }, + new object[] + { + 19.75469162216385, + 10, + new PdfPoint(24.41810676553939, 79.31739454102991), + }, + } + }, + new object[] + { + new PdfPoint(34.94017096790447, 92.33233895331428), + new object[] + { + new object[] + { + 6.827772363762564, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + new object[] + { + 13.116858855258087, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + }, + new object[] + { + 14.60092633517482, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + }, + } + }, + new object[] + { + new PdfPoint(55.63755197233502, 33.336503157598464), + new object[] + { + new object[] + { + 11.95859196631113, + 96, + new PdfPoint(46.898436066324166, 25.173429288152636), + }, + new object[] + { + 12.210892065182815, + 80, + new PdfPoint(63.98092485758994, 24.420561596263646), + }, + new object[] + { + 12.87565785976939, + 87, + new PdfPoint(67.0752294529232, 39.24937886844233), + }, + } + }, + new object[] + { + new PdfPoint(81.20904836792344, 64.08948679068317), + new object[] + { + new object[] + { + 1.9994837794229934, + 30, + new PdfPoint(79.77968787046065, 62.69132229661655), + }, + new object[] + { + 2.0862991987929322, + 0, + new PdfPoint(82.45353838109239, 62.415005093558115), + }, + new object[] + { + 5.102187165794271, + 52, + new PdfPoint(81.60160120456186, 59.00242318333139), + }, + } + }, + new object[] + { + new PdfPoint(71.52680243530935, 60.971051107521035), + new object[] + { + new object[] + { + 8.430269922710929, + 30, + new PdfPoint(79.77968787046065, 62.69132229661655), + }, + new object[] + { + 8.804952534770395, + 59, + new PdfPoint(71.14819197800337, 52.17424240997747), + }, + new object[] + { + 10.265333221324632, + 52, + new PdfPoint(81.60160120456186, 59.00242318333139), + }, + } + }, + new object[] + { + new PdfPoint(29.27291899970018, 12.928347645791094), + new object[] + { + new object[] + { + 9.723303049123018, + 99, + new PdfPoint(24.103817108644833, 21.163820177769633), + }, + new object[] + { + 10.14809784435131, + 13, + new PdfPoint(35.803655214742406, 5.16089154047169), + }, + new object[] + { + 10.227363038462595, + 38, + new PdfPoint(24.636942156010523, 22.044633809864933), + }, + } + }, + new object[] + { + new PdfPoint(46.78746330316932, 67.20315193481265), + new object[] + { + new object[] + { + 6.281943349489286, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + }, + new object[] + { + 6.540160347995691, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + }, + new object[] + { + 10.791217014122221, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + }, + } + }, + new object[] + { + new PdfPoint(89.49370609342411, 49.19740999815338), + new object[] + { + new object[] + { + 4.763091842008821, + 29, + new PdfPoint(86.97060905691454, 53.23733886383501), + }, + new object[] + { + 6.695189919618434, + 77, + new PdfPoint(84.64548329605812, 44.580018552016185), + }, + new object[] + { + 7.718517912604583, + 6, + new PdfPoint(97.13960454465617, 50.25370334786503), + }, + } + }, + new object[] + { + new PdfPoint(50.085173044511734, 76.09967482070661), + new object[] + { + new object[] + { + 6.103326793563302, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + }, + new object[] + { + 8.34982635697827, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + }, + new object[] + { + 8.430836560042678, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + }, + } + }, + new object[] + { + new PdfPoint(51.41806121874436, 6.185936468302689), + new object[] + { + new object[] + { + 4.63313326645828, + 43, + new PdfPoint(47.945049322341525, 9.252548969452246), + }, + new object[] + { + 5.775831321961968, + 83, + new PdfPoint(57.19140901930086, 6.016576988006017), + }, + new object[] + { + 6.717112422982287, + 78, + new PdfPoint(44.866927314279856, 7.669932380951572), + }, + } + }, + new object[] + { + new PdfPoint(44.84550779030454, 6.558735867057342), + new object[] + { + new object[] + { + 1.1114029370565919, + 78, + new PdfPoint(44.866927314279856, 7.669932380951572), + }, + new object[] + { + 2.6426628820903373, + 88, + new PdfPoint(43.03278016511083, 4.6357991376672185), + }, + new object[] + { + 4.106554119874308, + 43, + new PdfPoint(47.945049322341525, 9.252548969452246), + }, + } + }, + new object[] + { + new PdfPoint(61.96609728269268, 15.51346888405012), + new object[] + { + new object[] + { + 7.600629342352724, + 5, + new PdfPoint(65.40181734760978, 22.29324720161768), + }, + new object[] + { + 9.070206499012121, + 34, + new PdfPoint(52.89633110070122, 15.424096971651757), + }, + new object[] + { + 9.132131774155129, + 80, + new PdfPoint(63.98092485758994, 24.420561596263646), + }, + } + }, + new object[] + { + new PdfPoint(69.5760144871494, 76.4622356528522), + new object[] + { + new object[] + { + 6.458190369895054, + 41, + new PdfPoint(74.16588992664359, 81.00550169213861), + }, + new object[] + { + 9.569607836260653, + 58, + new PdfPoint(70.09436264721477, 86.01779473250726), + }, + new object[] + { + 11.952366277171725, + 27, + new PdfPoint(80.62371302859762, 81.02375037506395), + }, + } + }, + new object[] + { + new PdfPoint(82.98110145635202, 52.72268932669417), + new object[] + { + new object[] + { + 4.022565728614683, + 29, + new PdfPoint(86.97060905691454, 53.23733886383501), + }, + new object[] + { + 6.429469515822035, + 52, + new PdfPoint(81.60160120456186, 59.00242318333139), + }, + new object[] + { + 8.311032081103916, + 77, + new PdfPoint(84.64548329605812, 44.580018552016185), + }, + } + }, + new object[] + { + new PdfPoint(50.69508238708692, 87.63717989744282), + new object[] + { + new object[] + { + 3.861048505126353, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + }, + new object[] + { + 5.125765208772435, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + }, + new object[] + { + 10.381112761797503, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + }, + } + }, + new object[] + { + new PdfPoint(45.394375588571556, 61.05494327358284), + new object[] + { + new object[] + { + 3.529864864914409, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + }, + new object[] + { + 4.6211749729180625, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + }, + new object[] + { + 10.4660297674453, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + }, + } + }, + new object[] + { + new PdfPoint(21.560319619569214, 46.112818457615276), + new object[] + { + new object[] + { + 2.4725356384800556, + 7, + new PdfPoint(19.15551535520754, 45.53805856543256), + }, + new object[] + { + 8.271368593543086, + 42, + new PdfPoint(13.34483441571791, 47.0726836958395), + }, + new object[] + { + 10.915641594452936, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + }, + } + }, + new object[] + { + new PdfPoint(13.31631815615828, 49.618965383452654), + new object[] + { + new object[] + { + 2.116113323237742, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + }, + new object[] + { + 2.5464413619271418, + 42, + new PdfPoint(13.34483441571791, 47.0726836958395), + }, + new object[] + { + 7.1239051360014365, + 7, + new PdfPoint(19.15551535520754, 45.53805856543256), + }, + } + }, + new object[] + { + new PdfPoint(78.68697517856405, 37.95356900539214), + new object[] + { + new object[] + { + 6.75635336262533, + 33, + new PdfPoint(84.80993603153726, 40.80973096746926), + }, + new object[] + { + 6.775003918703829, + 72, + new PdfPoint(84.97188896260866, 40.483497230772926), + }, + new object[] + { + 8.49060090811873, + 74, + new PdfPoint(75.03458936225277, 45.61844875850991), + }, + } + }, + new object[] + { + new PdfPoint(40.25217869763216, 47.69662857204957), + new object[] + { + new object[] + { + 9.793759587731104, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + }, + new object[] + { + 11.423458353755956, + 49, + new PdfPoint(37.970724110053844, 36.503310666941424), + }, + new object[] + { + 11.98058569840965, + 35, + new PdfPoint(31.112041569584935, 55.44209995586027), + }, + } + }, + new object[] + { + new PdfPoint(54.1283188372334, 86.53269307585674), + new object[] + { + new object[] + { + 2.8827403062682038, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + }, + new object[] + { + 7.632538955268626, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + }, + new object[] + { + 8.149615680403004, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + }, + } + }, + new object[] + { + new PdfPoint(81.21021662298843, 89.2711165353666), + new object[] + { + new object[] + { + 4.055682992421869, + 44, + new PdfPoint(82.78544384909999, 85.53384162961818), + }, + new object[] + { + 7.031757366483974, + 45, + new PdfPoint(86.41791572882465, 84.5461317010868), + }, + new object[] + { + 7.908839327983186, + 95, + new PdfPoint(89.04717161055198, 88.20721990563409), + }, + } + }, + new object[] + { + new PdfPoint(41.04671360406829, 96.94952583007202), + new object[] + { + new object[] + { + 9.526566797068826, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + }, + new object[] + { + 13.199810982725637, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + new object[] + { + 17.104485987625814, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + }, + } + }, + new object[] + { + new PdfPoint(20.268880198632655, 20.520060156880948), + new object[] + { + new object[] + { + 2.0060215634503926, + 50, + new PdfPoint(18.3788032374675, 19.84795034896214), + }, + new object[] + { + 3.888594613516348, + 99, + new PdfPoint(24.103817108644833, 21.163820177769633), + }, + new object[] + { + 4.626477070824485, + 38, + new PdfPoint(24.636942156010523, 22.044633809864933), + }, + } + }, + new object[] + { + new PdfPoint(38.68584315271796, 74.86521565365805), + new object[] + { + new object[] + { + 11.473015514354003, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + new object[] + { + 12.422826952193041, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + }, + new object[] + { + 12.808800582212788, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + }, + } + }, + new object[] + { + new PdfPoint(67.4231014401171, 82.7767352052507), + new object[] + { + new object[] + { + 4.200012297096924, + 58, + new PdfPoint(70.09436264721477, 86.01779473250726), + }, + new object[] + { + 6.971546796228628, + 41, + new PdfPoint(74.16588992664359, 81.00550169213861), + }, + new object[] + { + 7.61432350405368, + 46, + new PdfPoint(67.53711275495073, 90.39020510040851), + }, + } + }, + new object[] + { + new PdfPoint(14.38235206959435, 13.07129438479172), + new object[] + { + new object[] + { + 3.160718481696952, + 26, + new PdfPoint(11.228694290441743, 12.860145308234605), + }, + new object[] + { + 6.363744999573501, + 1, + new PdfPoint(16.445674398013832, 7.051331644986569), + }, + new object[] + { + 7.3684675250439415, + 17, + new PdfPoint(8.254965696884042, 8.97868520394496), + }, + } + }, + new object[] + { + new PdfPoint(52.14368788446655, 22.1218586105557), + new object[] + { + new object[] + { + 3.2956133368175657, + 85, + new PdfPoint(49.61310425442538, 20.010647167526496), + }, + new object[] + { + 4.200265094831746, + 89, + new PdfPoint(49.42598643546282, 18.91930873569896), + }, + new object[] + { + 6.0683399901534365, + 96, + new PdfPoint(46.898436066324166, 25.173429288152636), + }, + } + }, + new object[] + { + new PdfPoint(86.29153320726485, 95.11424407263593), + new object[] + { + new object[] + { + 5.720186498989052, + 67, + new PdfPoint(91.90691599722378, 96.20420265233045), + }, + new object[] + { + 7.347330821559044, + 16, + new PdfPoint(90.26397977468233, 88.93339150438577), + }, + new object[] + { + 7.43643233366769, + 95, + new PdfPoint(89.04717161055198, 88.20721990563409), + }, + } + }, + new object[] + { + new PdfPoint(81.89614459928313, 66.58499042641813), + new object[] + { + new object[] + { + 3.6799201803348827, + 55, + new PdfPoint(84.9666796464414, 68.61319827025679), + }, + new object[] + { + 4.207073270608355, + 0, + new PdfPoint(82.45353838109239, 62.415005093558115), + }, + new object[] + { + 4.431708540733531, + 30, + new PdfPoint(79.77968787046065, 62.69132229661655), + }, + } + }, + new object[] + { + new PdfPoint(46.050742000044394, 44.44807688975785), + new object[] + { + new object[] + { + 11.331637103162638, + 49, + new PdfPoint(37.970724110053844, 36.503310666941424), + }, + new object[] + { + 13.002514638101248, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + }, + new object[] + { + 16.595680037696102, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + }, + } + }, + new object[] + { + new PdfPoint(2.4117277982407592, 98.30730212163033), + new object[] + { + new object[] + { + 11.748283322314418, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + }, + new object[] + { + 27.00231399196269, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + }, + new object[] + { + 29.067117249085932, + 10, + new PdfPoint(24.41810676553939, 79.31739454102991), + }, + } + }, + new object[] + { + new PdfPoint(39.07511433748291, 61.28307901688501), + new object[] + { + new object[] + { + 3.3661270604813507, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + }, + new object[] + { + 5.754063791457791, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + }, + new object[] + { + 9.875604502923744, + 35, + new PdfPoint(31.112041569584935, 55.44209995586027), + }, + } + }, + new object[] + { + new PdfPoint(9.49024018298229, 59.73883570183125), + new object[] + { + new object[] + { + 5.795324777487998, + 9, + new PdfPoint(5.021252133213605, 56.04912906205743), + }, + new object[] + { + 7.206582635751992, + 22, + new PdfPoint(16.49098129875618, 61.44894011847811), + }, + new object[] + { + 8.338201846917082, + 97, + new PdfPoint(8.420107657979937, 68.0080815210619), + }, + } + }, + new object[] + { + new PdfPoint(12.96964790803895, 56.98374692967552), + new object[] + { + new object[] + { + 5.686628092455948, + 22, + new PdfPoint(16.49098129875618, 61.44894011847811), + }, + new object[] + { + 7.25456102910056, + 69, + new PdfPoint(18.204503055467892, 62.00619128580146), + }, + new object[] + { + 7.637544843201832, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + }, + } + }, + new object[] + { + new PdfPoint(13.307937277045156, 52.91717446722356), + new object[] + { + new object[] + { + 3.968735726616667, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + }, + new object[] + { + 5.844607238783087, + 42, + new PdfPoint(13.34483441571791, 47.0726836958395), + }, + new object[] + { + 8.858797336947017, + 9, + new PdfPoint(5.021252133213605, 56.04912906205743), + }, + } + }, + new object[] + { + new PdfPoint(26.36175597577918, 31.381877739024254), + new object[] + { + new object[] + { + 7.672217459639145, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + }, + new object[] + { + 9.495214947829645, + 38, + new PdfPoint(24.636942156010523, 22.044633809864933), + }, + new object[] + { + 10.01774212173994, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + }, + } + }, + new object[] + { + new PdfPoint(71.51791012620515, 60.383581685691176), + new object[] + { + new object[] + { + 8.21766042452993, + 59, + new PdfPoint(71.14819197800337, 52.17424240997747), + }, + new object[] + { + 8.578032304834814, + 30, + new PdfPoint(79.77968787046065, 62.69132229661655), + }, + new object[] + { + 10.17783987751681, + 52, + new PdfPoint(81.60160120456186, 59.00242318333139), + }, + } + }, + new object[] + { + new PdfPoint(13.820958137480366, 45.57166856903693), + new object[] + { + new object[] + { + 1.5747190890171712, + 42, + new PdfPoint(13.34483441571791, 47.0726836958395), + }, + new object[] + { + 4.766563509099969, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + }, + new object[] + { + 5.334663095411686, + 7, + new PdfPoint(19.15551535520754, 45.53805856543256), + }, + } + }, + new object[] + { + new PdfPoint(62.60837807772033, 59.51480363049938), + new object[] + { + new object[] + { + 5.8119712844804265, + 23, + new PdfPoint(59.31519405414486, 64.30374393065894), + }, + new object[] + { + 10.500007541726367, + 20, + new PdfPoint(58.60508497220939, 69.22169822597527), + }, + new object[] + { + 10.892398267625163, + 24, + new PdfPoint(58.880198617023936, 69.74930498275906), + }, + } + }, + new object[] + { + new PdfPoint(54.246412695504056, 33.090909319980845), + new object[] + { + new object[] + { + 10.801817004438293, + 96, + new PdfPoint(46.898436066324166, 25.173429288152636), + }, + new object[] + { + 13.035937123351204, + 80, + new PdfPoint(63.98092485758994, 24.420561596263646), + }, + new object[] + { + 13.876628015735688, + 85, + new PdfPoint(49.61310425442538, 20.010647167526496), + }, + } + }, + new object[] + { + new PdfPoint(37.59119855061173, 20.84553738123185), + new object[] + { + new object[] + { + 6.920766973227989, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + }, + new object[] + { + 7.1217149520573555, + 53, + new PdfPoint(37.57869607184197, 27.967241358959505), + }, + new object[] + { + 10.264273892091708, + 96, + new PdfPoint(46.898436066324166, 25.173429288152636), + }, + } + }, + new object[] + { + new PdfPoint(60.2394597901307, 52.39882244517341), + new object[] + { + new object[] + { + 6.753800444728761, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + }, + new object[] + { + 8.316180599171837, + 3, + new PdfPoint(63.8245554804822, 44.89509346225664), + }, + new object[] + { + 10.911043677803592, + 59, + new PdfPoint(71.14819197800337, 52.17424240997747), + }, + } + }, + new object[] + { + new PdfPoint(69.05917872300058, 14.344285937634815), + new object[] + { + new object[] + { + 4.92585265234346, + 19, + new PdfPoint(70.71899728005727, 9.70650341683359), + }, + new object[] + { + 6.728125898818047, + 48, + new PdfPoint(71.56130305322326, 8.098723357173876), + }, + new object[] + { + 8.314145698967357, + 92, + new PdfPoint(69.38884149074713, 6.0366785105100185), + }, + } + }, + new object[] + { + new PdfPoint(51.331730724820865, 96.31696159244558), + new object[] + { + new object[] + { + 4.099534711270266, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + }, + new object[] + { + 11.775757759634676, + 75, + new PdfPoint(62.777729239709636, 93.54972672515291), + }, + new object[] + { + 12.173529730383077, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + }, + } + }, + new object[] + { + new PdfPoint(80.9218188849778, 57.661185428982684), + new object[] + { + new object[] + { + 1.5036697495492302, + 52, + new PdfPoint(81.60160120456186, 59.00242318333139), + }, + new object[] + { + 4.994493569730729, + 0, + new PdfPoint(82.45353838109239, 62.415005093558115), + }, + new object[] + { + 5.1581721725288885, + 30, + new PdfPoint(79.77968787046065, 62.69132229661655), + }, + } + }, + new object[] + { + new PdfPoint(4.784694797817046, 62.959677091870205), + new object[] + { + new object[] + { + 6.221142495114544, + 97, + new PdfPoint(8.420107657979937, 68.0080815210619), + }, + new object[] + { + 6.9145956819816385, + 9, + new PdfPoint(5.021252133213605, 56.04912906205743), + }, + new object[] + { + 10.853468125809684, + 21, + new PdfPoint(15.143510163282482, 66.19892308162831), + }, + } + }, + new object[] + { + new PdfPoint(82.41590594603949, 28.680736275752395), + new object[] + { + new object[] + { + 0.6666342489180029, + 12, + new PdfPoint(82.48631571672695, 29.34364176375367), + }, + new object[] + { + 3.5296544623441446, + 15, + new PdfPoint(80.11998397458856, 25.99984035749021), + }, + new object[] + { + 3.65625742405422, + 8, + new PdfPoint(80.59123120177551, 25.51233282470693), + }, + } + }, + new object[] + { + new PdfPoint(58.93828314851418, 41.6374695944503), + new object[] + { + new object[] + { + 5.72069131402993, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + }, + new object[] + { + 5.8726289314290705, + 3, + new PdfPoint(63.8245554804822, 44.89509346225664), + }, + new object[] + { + 8.480145781558287, + 87, + new PdfPoint(67.0752294529232, 39.24937886844233), + }, + } + }, + new object[] + { + new PdfPoint(87.95455074935215, 32.292861392280614), + new object[] + { + new object[] + { + 6.212848846488876, + 12, + new PdfPoint(82.48631571672695, 29.34364176375367), + }, + new object[] + { + 7.712430261385789, + 79, + new PdfPoint(90.03637785608008, 39.71900281528301), + }, + new object[] + { + 8.326337790207875, + 90, + new PdfPoint(93.45285655237589, 26.040139241642603), + }, + } + }, + new object[] + { + new PdfPoint(79.20389918634515, 25.654064891808016), + new object[] + { + new object[] + { + 0.9791690415442634, + 15, + new PdfPoint(80.11998397458856, 25.99984035749021), + }, + new object[] + { + 1.3945530107825985, + 8, + new PdfPoint(80.59123120177551, 25.51233282470693), + }, + new object[] + { + 4.081864905775139, + 94, + new PdfPoint(80.69475374791655, 21.854199922464968), + }, + } + }, + new object[] + { + new PdfPoint(63.37032482613486, 52.83441603652857), + new object[] + { + new object[] + { + 6.822609365125496, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + }, + new object[] + { + 7.805834141801166, + 59, + new PdfPoint(71.14819197800337, 52.17424240997747), + }, + new object[] + { + 7.952305855894424, + 3, + new PdfPoint(63.8245554804822, 44.89509346225664), + }, + } + }, + new object[] + { + new PdfPoint(66.0404611511353, 76.6960457458976), + new object[] + { + new object[] + { + 9.197499841720573, + 41, + new PdfPoint(74.16588992664359, 81.00550169213861), + }, + new object[] + { + 9.976300255487988, + 24, + new PdfPoint(58.880198617023936, 69.74930498275906), + }, + new object[] + { + 10.165093285812645, + 58, + new PdfPoint(70.09436264721477, 86.01779473250726), + }, + } + }, + new object[] + { + new PdfPoint(73.6630405559061, 20.85637324912446), + new object[] + { + new object[] + { + 7.10215801603454, + 94, + new PdfPoint(80.69475374791655, 21.854199922464968), + }, + new object[] + { + 8.25514216757696, + 15, + new PdfPoint(80.11998397458856, 25.99984035749021), + }, + new object[] + { + 8.347322037334528, + 8, + new PdfPoint(80.59123120177551, 25.51233282470693), + }, + } + }, + new object[] + { + new PdfPoint(97.68962763674809, 43.53575778881722), + new object[] + { + new object[] + { + 4.718909708545427, + 93, + new PdfPoint(99.69679458529599, 47.806517636673476), + }, + new object[] + { + 6.740424165893753, + 6, + new PdfPoint(97.13960454465617, 50.25370334786503), + }, + new object[] + { + 8.55218397447652, + 79, + new PdfPoint(90.03637785608008, 39.71900281528301), + }, + } + }, + new object[] + { + new PdfPoint(3.9643845233934605, 49.339573111296765), + new object[] + { + new object[] + { + 2.995004662567729, + 14, + new PdfPoint(1.813800375443253, 47.255096977735214), + }, + new object[] + { + 6.792283136109303, + 9, + new PdfPoint(5.021252133213605, 56.04912906205743), + }, + new object[] + { + 7.239994089978434, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + }, + } + }, + new object[] + { + new PdfPoint(70.73913716966032, 10.028007391201522), + new object[] + { + new object[] + { + 0.3221341656633137, + 19, + new PdfPoint(70.71899728005727, 9.70650341683359), + }, + new object[] + { + 2.0971632325712752, + 48, + new PdfPoint(71.56130305322326, 8.098723357173876), + }, + new object[] + { + 4.2135501248156215, + 92, + new PdfPoint(69.38884149074713, 6.0366785105100185), + }, + } + }, + new object[] + { + new PdfPoint(79.28915979507235, 54.70843490604055), + new object[] + { + new object[] + { + 4.877060651440881, + 52, + new PdfPoint(81.60160120456186, 59.00242318333139), + }, + new object[] + { + 7.82104764898212, + 29, + new PdfPoint(86.97060905691454, 53.23733886383501), + }, + new object[] + { + 7.997944041024629, + 30, + new PdfPoint(79.77968787046065, 62.69132229661655), + }, + } + }, + new object[] + { + new PdfPoint(87.95765064513492, 76.78785901003045), + new object[] + { + new object[] + { + 5.721992181478006, + 70, + new PdfPoint(91.00755813085259, 81.62926984298593), + }, + new object[] + { + 6.098901750707647, + 37, + new PdfPoint(92.45607820110665, 72.66951564303699), + }, + new object[] + { + 6.409897446967801, + 65, + new PdfPoint(82.27200991589356, 79.74763514660499), + }, + } + }, + new object[] + { + new PdfPoint(8.309511701427963, 39.13056340529091), + new object[] + { + new object[] + { + 9.403815690802748, + 42, + new PdfPoint(13.34483441571791, 47.0726836958395), + }, + new object[] + { + 10.40203400303521, + 14, + new PdfPoint(1.813800375443253, 47.255096977735214), + }, + new object[] + { + 10.816881624275172, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + }, + } + }, + new object[] + { + new PdfPoint(39.732285598197045, 75.85998020600681), + new object[] + { + new object[] + { + 11.018172527281603, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + new object[] + { + 12.890615455027152, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + }, + new object[] + { + 13.53934377116391, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + }, + } + }, + new object[] + { + new PdfPoint(42.52668278329558, 59.630604107901206), + new object[] + { + new object[] + { + 2.5857672288398494, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + }, + new object[] + { + 2.9347050381281665, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + }, + new object[] + { + 12.158848673678182, + 35, + new PdfPoint(31.112041569584935, 55.44209995586027), + }, + } + }, + new object[] + { + new PdfPoint(11.91848255296697, 43.04840499795828), + new object[] + { + new object[] + { + 4.269578278307316, + 42, + new PdfPoint(13.34483441571791, 47.0726836958395), + }, + new object[] + { + 6.544777591222621, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + }, + new object[] + { + 7.6533011613775805, + 7, + new PdfPoint(19.15551535520754, 45.53805856543256), + }, + } + }, + new object[] + { + new PdfPoint(45.884180750302804, 84.54782622509595), + new object[] + { + new object[] + { + 6.567918486628291, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + }, + new object[] + { + 8.870332483989317, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + }, + new object[] + { + 11.487282614334951, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + } + }, + new object[] + { + new PdfPoint(55.67904148326467, 33.58226552458229), + new object[] + { + new object[] + { + 12.157613184301322, + 96, + new PdfPoint(46.898436066324166, 25.173429288152636), + }, + new object[] + { + 12.363579030000482, + 80, + new PdfPoint(63.98092485758994, 24.420561596263646), + }, + new object[] + { + 12.727500693064066, + 87, + new PdfPoint(67.0752294529232, 39.24937886844233), + }, + } + }, + new object[] + { + new PdfPoint(62.05241890629847, 18.690682757200527), + new object[] + { + new object[] + { + 4.919038574237582, + 5, + new PdfPoint(65.40181734760978, 22.29324720161768), + }, + new object[] + { + 6.045713085692203, + 80, + new PdfPoint(63.98092485758994, 24.420561596263646), + }, + new object[] + { + 9.721343867910239, + 34, + new PdfPoint(52.89633110070122, 15.424096971651757), + }, + } + }, + new object[] + { + new PdfPoint(11.707658570636525, 65.12592360890554), + new object[] + { + new object[] + { + 3.5995005257884185, + 21, + new PdfPoint(15.143510163282482, 66.19892308162831), + }, + new object[] + { + 4.372050461043956, + 97, + new PdfPoint(8.420107657979937, 68.0080815210619), + }, + new object[] + { + 6.033273067765282, + 22, + new PdfPoint(16.49098129875618, 61.44894011847811), + }, + } + }, + new object[] + { + new PdfPoint(33.90020310829871, 47.7313194477634), + new object[] + { + new object[] + { + 8.199389051021392, + 35, + new PdfPoint(31.112041569584935, 55.44209995586027), + }, + new object[] + { + 10.334653304296424, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + }, + new object[] + { + 11.943086804002764, + 49, + new PdfPoint(37.970724110053844, 36.503310666941424), + }, + } + }, + new object[] + { + new PdfPoint(42.15217638961487, 22.384017040998284), + new object[] + { + new object[] + { + 5.505252183445487, + 96, + new PdfPoint(46.898436066324166, 25.173429288152636), + }, + new object[] + { + 7.217278988769222, + 53, + new PdfPoint(37.57869607184197, 27.967241358959505), + }, + new object[] + { + 7.829324949202796, + 85, + new PdfPoint(49.61310425442538, 20.010647167526496), + }, + } + }, + new object[] + { + new PdfPoint(59.752335901407626, 57.2509255780393), + new object[] + { + new object[] + { + 7.066352645437156, + 23, + new PdfPoint(59.31519405414486, 64.30374393065894), + }, + new object[] + { + 11.540545516643135, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + }, + new object[] + { + 12.025621916687646, + 20, + new PdfPoint(58.60508497220939, 69.22169822597527), + }, + } + }, + new object[] + { + new PdfPoint(97.9181308204627, 34.375867392622084), + new object[] + { + new object[] + { + 0.9254860223406257, + 31, + new PdfPoint(97.45369858932968, 33.575350634376086), + }, + new object[] + { + 9.456375526398574, + 90, + new PdfPoint(93.45285655237589, 26.040139241642603), + }, + new object[] + { + 9.522138727011285, + 79, + new PdfPoint(90.03637785608008, 39.71900281528301), + }, + } + }, + new object[] + { + new PdfPoint(68.84376255969894, 78.95185188531323), + new object[] + { + new object[] + { + 5.704604915246542, + 41, + new PdfPoint(74.16588992664359, 81.00550169213861), + }, + new object[] + { + 7.175761206917839, + 58, + new PdfPoint(70.09436264721477, 86.01779473250726), + }, + new object[] + { + 11.512743286703174, + 46, + new PdfPoint(67.53711275495073, 90.39020510040851), + }, + } + }, + new object[] + { + new PdfPoint(36.86160352788826, 13.756241445424322), + new object[] + { + new object[] + { + 8.660213312722579, + 13, + new PdfPoint(35.803655214742406, 5.16089154047169), + }, + new object[] + { + 10.05626008778861, + 78, + new PdfPoint(44.866927314279856, 7.669932380951572), + }, + new object[] + { + 11.012079230414543, + 88, + new PdfPoint(43.03278016511083, 4.6357991376672185), + }, + } + }, + new object[] + { + new PdfPoint(0.6887485300444696, 90.80035635580387), + new object[] + { + new object[] + { + 15.52506007098662, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + }, + new object[] + { + 20.774155245195235, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + }, + new object[] + { + 24.067856284005092, + 97, + new PdfPoint(8.420107657979937, 68.0080815210619), + }, + } + }, + new object[] + { + new PdfPoint(37.792743719353716, 82.90805938696141), + new object[] + { + new object[] + { + 4.253224348519968, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + new object[] + { + 9.939820266481515, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + }, + new object[] + { + 13.848241320909453, + 10, + new PdfPoint(24.41810676553939, 79.31739454102991), + }, + } + }, + new object[] + { + new PdfPoint(28.425825069053435, 93.38421306346834), + new object[] + { + new object[] + { + 9.896910900999169, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + new object[] + { + 12.190015988477223, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + }, + new object[] + { + 14.62659185673608, + 10, + new PdfPoint(24.41810676553939, 79.31739454102991), + }, + } + }, + new object[] + { + new PdfPoint(48.45367432788545, 3.2912155909772367), + new object[] + { + new object[] + { + 5.585158765696226, + 88, + new PdfPoint(43.03278016511083, 4.6357991376672185), + }, + new object[] + { + 5.660204489805277, + 78, + new PdfPoint(44.866927314279856, 7.669932380951572), + }, + new object[] + { + 5.982992148213537, + 43, + new PdfPoint(47.945049322341525, 9.252548969452246), + }, + } + }, + new object[] + { + new PdfPoint(41.681865022692435, 82.6132344499873), + new object[] + { + new object[] + { + 7.806098392924558, + 66, + new PdfPoint(34.43836768761709, 85.52303143204219), + }, + new object[] + { + 10.876229338256989, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + }, + new object[] + { + 12.7306029372109, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + }, + } + }, + new object[] + { + new PdfPoint(7.175621818812649, 4.404267177041543), + new object[] + { + new object[] + { + 4.700030158625489, + 17, + new PdfPoint(8.254965696884042, 8.97868520394496), + }, + new object[] + { + 6.884800728051085, + 4, + new PdfPoint(0.7742372570967326, 6.938583013317256), + }, + new object[] + { + 8.81749451695195, + 64, + new PdfPoint(15.264247773398054, 0.8939481426395335), + }, + } + }, + new object[] + { + new PdfPoint(67.06375058678753, 2.0706332172362285), + new object[] + { + new object[] + { + 3.807121420419626, + 76, + new PdfPoint(70.36073331446983, 3.9743344551363857), + }, + new object[] + { + 4.597343034838145, + 92, + new PdfPoint(69.38884149074713, 6.0366785105100185), + }, + new object[] + { + 7.521027118921692, + 48, + new PdfPoint(71.56130305322326, 8.098723357173876), + }, + } + }, + new object[] + { + new PdfPoint(21.17990951913106, 20.77232612239539), + new object[] + { + new object[] + { + 2.949689300873121, + 50, + new PdfPoint(18.3788032374675, 19.84795034896214), + }, + new object[] + { + 2.9500005402388694, + 99, + new PdfPoint(24.103817108644833, 21.163820177769633), + }, + new object[] + { + 3.683726578350228, + 38, + new PdfPoint(24.636942156010523, 22.044633809864933), + }, + } + }, + new object[] + { + new PdfPoint(83.4783024984307, 24.393830521827052), + new object[] + { + new object[] + { + 3.0961634442512573, + 8, + new PdfPoint(80.59123120177551, 25.51233282470693), + }, + new object[] + { + 3.7225758420518424, + 15, + new PdfPoint(80.11998397458856, 25.99984035749021), + }, + new object[] + { + 3.768005736156072, + 94, + new PdfPoint(80.69475374791655, 21.854199922464968), + }, + } + }, + new object[] + { + new PdfPoint(67.94892501031262, 58.40285832426694), + new object[] + { + new object[] + { + 7.002211460552816, + 59, + new PdfPoint(71.14819197800337, 52.17424240997747), + }, + new object[] + { + 10.457617375062723, + 23, + new PdfPoint(59.31519405414486, 64.30374393065894), + }, + new object[] + { + 12.58403246559697, + 30, + new PdfPoint(79.77968787046065, 62.69132229661655), + }, + } + }, + new object[] + { + new PdfPoint(70.30054809098338, 38.229402533712175), + new object[] + { + new object[] + { + 3.3827550961350985, + 87, + new PdfPoint(67.0752294529232, 39.24937886844233), + }, + new object[] + { + 6.676593719196517, + 63, + new PdfPoint(72.74747856539602, 44.441442049411116), + }, + new object[] + { + 8.77548579112744, + 74, + new PdfPoint(75.03458936225277, 45.61844875850991), + }, + } + }, + new object[] + { + new PdfPoint(6.666591704963154, 10.002159844611135), + new object[] + { + new object[] + { + 1.8895587522745774, + 17, + new PdfPoint(8.254965696884042, 8.97868520394496), + }, + new object[] + { + 5.383387494014664, + 26, + new PdfPoint(11.228694290441743, 12.860145308234605), + }, + new object[] + { + 6.641185431873729, + 4, + new PdfPoint(0.7742372570967326, 6.938583013317256), + }, + } + }, + new object[] + { + new PdfPoint(37.737895538821185, 56.99302071734109), + new object[] + { + new object[] + { + 5.280595736713236, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + }, + new object[] + { + 6.8049464384399085, + 35, + new PdfPoint(31.112041569584935, 55.44209995586027), + }, + new object[] + { + 7.120979010551258, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + }, + } + }, + new object[] + { + new PdfPoint(46.09269243297545, 55.527895517428725), + new object[] + { + new object[] + { + 3.449983158993363, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + }, + new object[] + { + 8.028203793393617, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + }, + new object[] + { + 14.481241345005133, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + }, + } + }, + new object[] + { + new PdfPoint(53.61166019135128, 29.402010229671795), + new object[] + { + new object[] + { + 7.933994891088919, + 96, + new PdfPoint(46.898436066324166, 25.173429288152636), + }, + new object[] + { + 10.207161689017788, + 85, + new PdfPoint(49.61310425442538, 20.010647167526496), + }, + new object[] + { + 11.287466296847745, + 89, + new PdfPoint(49.42598643546282, 18.91930873569896), + }, + } + }, + new object[] + { + new PdfPoint(44.192808857614644, 34.74442504823799), + new object[] + { + new object[] + { + 6.465911940748226, + 49, + new PdfPoint(37.970724110053844, 36.503310666941424), + }, + new object[] + { + 9.469778598317067, + 53, + new PdfPoint(37.57869607184197, 27.967241358959505), + }, + new object[] + { + 9.946073518332808, + 96, + new PdfPoint(46.898436066324166, 25.173429288152636), + }, + } + }, + new object[] + { + new PdfPoint(87.18609487820613, 36.034544097040076), + new object[] + { + new object[] + { + 4.658256014904542, + 79, + new PdfPoint(90.03637785608008, 39.71900281528301), + }, + new object[] + { + 4.96949613369587, + 72, + new PdfPoint(84.97188896260866, 40.483497230772926), + }, + new object[] + { + 5.333717325854641, + 33, + new PdfPoint(84.80993603153726, 40.80973096746926), + }, + } + }, + new object[] + { + new PdfPoint(72.26195709778688, 9.598162829344847), + new object[] + { + new object[] + { + 1.5467587665908336, + 19, + new PdfPoint(70.71899728005727, 9.70650341683359), + }, + new object[] + { + 1.6550633887763093, + 48, + new PdfPoint(71.56130305322326, 8.098723357173876), + }, + new object[] + { + 4.575911258396712, + 92, + new PdfPoint(69.38884149074713, 6.0366785105100185), + }, + } + }, + new object[] + { + new PdfPoint(34.1612429164763, 19.22222038671292), + new object[] + { + new object[] + { + 8.368264652666655, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + }, + new object[] + { + 9.389056282404074, + 53, + new PdfPoint(37.57869607184197, 27.967241358959505), + }, + new object[] + { + 9.933696316427113, + 38, + new PdfPoint(24.636942156010523, 22.044633809864933), + }, + } + }, + new object[] + { + new PdfPoint(71.38391153141247, 13.520311281559493), + new object[] + { + new object[] + { + 3.871335866429107, + 19, + new PdfPoint(70.71899728005727, 9.70650341683359), + }, + new object[] + { + 5.424489227001405, + 48, + new PdfPoint(71.56130305322326, 8.098723357173876), + }, + new object[] + { + 7.745002512529356, + 92, + new PdfPoint(69.38884149074713, 6.0366785105100185), + }, + } + }, + new object[] + { + new PdfPoint(98.937208620892, 67.26912373356589), + new object[] + { + new object[] + { + 8.43618896742764, + 37, + new PdfPoint(92.45607820110665, 72.66951564303699), + }, + new object[] + { + 14.035035311182662, + 55, + new PdfPoint(84.9666796464414, 68.61319827025679), + }, + new object[] + { + 14.3852303261261, + 39, + new PdfPoint(99.76982890678676, 52.90800974490838), + }, + } + }, + new object[] + { + new PdfPoint(89.80071239640789, 2.42574224851011), + new object[] + { + new object[] + { + 5.724587358789773, + 28, + new PdfPoint(90.87481745321885, 8.048659530077462), + }, + new object[] + { + 8.568651429497155, + 54, + new PdfPoint(97.7460348272766, 5.634112362720456), + }, + new object[] + { + 13.056548614184756, + 11, + new PdfPoint(98.12630738875605, 12.483472098628233), + }, + } + }, + new object[] + { + new PdfPoint(4.9811550769006345, 11.349911276229651), + new object[] + { + new object[] + { + 4.042344500583644, + 17, + new PdfPoint(8.254965696884042, 8.97868520394496), + }, + new object[] + { + 6.095734130172781, + 4, + new PdfPoint(0.7742372570967326, 6.938583013317256), + }, + new object[] + { + 6.4274841933807805, + 26, + new PdfPoint(11.228694290441743, 12.860145308234605), + }, + } + } + }; + #endregion + + [Fact] + public void BuildTree() + { + // wiki example + var candidates = new[] + { + new PdfPoint(2, 3), + new PdfPoint(4, 7), + new PdfPoint(5, 4), + new PdfPoint(7, 2), + new PdfPoint(8, 1), + new PdfPoint(9, 6) + }; + + // root + KdTree kdTree = new KdTree(candidates); + + Assert.Equal(new PdfPoint(7, 2), kdTree.Root.Element, PointComparer); + Assert.Equal(0, kdTree.Root.Depth); + Assert.Equal(3, kdTree.Root.Index); + Assert.False(kdTree.Root.IsLeaf); + Assert.True(kdTree.Root.IsAxisCutX); + + // root -> left side + Assert.Equal(new PdfPoint(5, 4), kdTree.Root.LeftChild.Element, PointComparer); + Assert.Equal(1, kdTree.Root.LeftChild.Depth); + Assert.Equal(2, kdTree.Root.LeftChild.Index); + Assert.False(kdTree.Root.LeftChild.IsLeaf); + Assert.False(kdTree.Root.LeftChild.IsAxisCutX); + + // root -> left side -> left side + Assert.Equal(new PdfPoint(2, 3), kdTree.Root.LeftChild.LeftChild.Element, PointComparer); + Assert.Equal(2, kdTree.Root.LeftChild.LeftChild.Depth); + Assert.Equal(0, kdTree.Root.LeftChild.LeftChild.Index); + Assert.True(kdTree.Root.LeftChild.LeftChild.IsLeaf); + Assert.True(kdTree.Root.LeftChild.LeftChild.IsAxisCutX); + + Assert.Null(kdTree.Root.LeftChild.LeftChild.LeftChild); + Assert.Null(kdTree.Root.LeftChild.LeftChild.RightChild); + + // root -> left side -> right side + Assert.Equal(new PdfPoint(4, 7), kdTree.Root.LeftChild.RightChild.Element, PointComparer); + Assert.Equal(2, kdTree.Root.LeftChild.RightChild.Depth); + Assert.Equal(1, kdTree.Root.LeftChild.RightChild.Index); + Assert.True(kdTree.Root.LeftChild.RightChild.IsLeaf); + Assert.True(kdTree.Root.LeftChild.RightChild.IsAxisCutX); + + Assert.Null(kdTree.Root.LeftChild.RightChild.LeftChild); + Assert.Null(kdTree.Root.LeftChild.RightChild.RightChild); + + // root -> right side + Assert.Equal(new PdfPoint(9, 6), kdTree.Root.RightChild.Element, PointComparer); + Assert.Equal(1, kdTree.Root.RightChild.Depth); + Assert.Equal(5, kdTree.Root.RightChild.Index); + Assert.False(kdTree.Root.RightChild.IsLeaf); + Assert.False(kdTree.Root.RightChild.IsAxisCutX); + + // root -> right side -> left side + Assert.Equal(new PdfPoint(8, 1), kdTree.Root.RightChild.LeftChild.Element, PointComparer); + Assert.Equal(2, kdTree.Root.RightChild.LeftChild.Depth); + Assert.Equal(4, kdTree.Root.RightChild.LeftChild.Index); + Assert.True(kdTree.Root.RightChild.LeftChild.IsLeaf); + Assert.True(kdTree.Root.RightChild.LeftChild.IsAxisCutX); + + Assert.Null(kdTree.Root.RightChild.LeftChild.RightChild); + Assert.Null(kdTree.Root.RightChild.LeftChild.LeftChild); + + // root -> right side -> right side + Assert.Null(kdTree.Root.RightChild.RightChild); + + } + + [Theory] + [MemberData(nameof(DataTree1))] + public void FindNearestNeighbour1(PdfPoint point, object[] expected) + { + KdTree kdTree = new KdTree(Tree1); + + var nn = kdTree.FindNearestNeighbour(point, Distances.Euclidean, out int index, out double distance); + + var expectedDistance = (double)expected[0]; + var expectedIndex = (int)expected[1]; + var expectedPoint = (PdfPoint)expected[2]; + + Assert.Equal(expectedDistance, distance, PreciseDoubleComparer); + Assert.Equal(expectedIndex, index); + Assert.Equal(expectedPoint, nn, PointComparer); + } + + [Theory] + [MemberData(nameof(DataTreeK1))] + public void FindNearestNeighbourK1(PdfPoint point, object[] expectedArr) + { + KdTree kdTree = new KdTree(Tree1); + + var nn = kdTree.FindNearestNeighbours(point, 3, Distances.Euclidean); + + for (int i = 0; i < 3; i++) + { + var expected = (object[])expectedArr[i]; + + var expectedDistance = (double)expected[0]; + var expectedIndex = (int)expected[1]; + var expectedPoint = (PdfPoint)expected[2]; + + var result = nn[i]; + + Assert.Equal(expectedDistance, result.Item3, PreciseDoubleComparer); + Assert.Equal(expectedIndex, result.Item2); + Assert.Equal(expectedPoint, result.Item1, PointComparer); + } + } + + [Theory] + [MemberData(nameof(DataTree2))] + public void FindNearestNeighbour2(PdfPoint point, object[] expected) + { + KdTree kdTree = new KdTree(Tree2); + + var nn = kdTree.FindNearestNeighbour(point, Distances.Euclidean, out int index, out double distance); + + var expectedDistance = (double)expected[0]; + var expectedIndex = (int)expected[1]; + var expectedPoint = (PdfPoint)expected[2]; + + Assert.Equal(expectedDistance, distance, PreciseDoubleComparer); + Assert.Equal(expectedIndex, index); + Assert.Equal(expectedPoint, nn, PointComparer); + } + + [Theory] + [MemberData(nameof(DataTreeK2))] + public void FindNearestNeighbourK2(PdfPoint point, object[] expectedArr) + { + KdTree kdTree = new KdTree(Tree2); + + var nn = kdTree.FindNearestNeighbours(point, 3, Distances.Euclidean); + + for (int i = 0; i < 3; i++) + { + var expected = (object[])expectedArr[i]; + + var expectedDistance = (double)expected[0]; + var expectedIndex = (int)expected[1]; + var expectedPoint = (PdfPoint)expected[2]; + + var result = nn[i]; + + Assert.Equal(expectedDistance, result.Item3, PreciseDoubleComparer); + Assert.Equal(expectedIndex, result.Item2); + Assert.Equal(expectedPoint, result.Item1, PointComparer); + } + } + } +} diff --git a/src/UglyToad.PdfPig.Tests/Dla/MathExtensionsTests.cs b/src/UglyToad.PdfPig.Tests/Dla/MathExtensionsTests.cs new file mode 100644 index 00000000..20996f61 --- /dev/null +++ b/src/UglyToad.PdfPig.Tests/Dla/MathExtensionsTests.cs @@ -0,0 +1,185 @@ +namespace UglyToad.PdfPig.Tests.Dla +{ + using System.Collections.Generic; + using UglyToad.PdfPig.DocumentLayoutAnalysis; + using Xunit; + + public class MathExtensionsTests + { + private static readonly DoubleComparer DoubleComparer = new DoubleComparer(3); + private static readonly DoubleComparer PreciseDoubleComparer = new DoubleComparer(6); + private static readonly PointComparer PointComparer = new PointComparer(DoubleComparer); + + #region data + public static IEnumerable ModeData => new[] + { + new object[] + { + new double[] { 5, 18, 9, 4, 7, 13, 16, 7, 13, 11, 14, 4, 1, 13, 17, 17, 8, 3, 19, 8, 5, 17, 13, 16, 16, 12, 4, 7, 1, 0, 14, 19, 13, 15, 18, 0, 18, 15, 16, 0, 3, 18, 12, 4, 12, 19, 7, 3, 4, 5, 18, 5, 14, 3, 3, 11, 7, 2, 9, 19, 14, 18, 5, 5, 8, 0, 4, 11, 9, 4, 12, 0, 4, 10, 5, 17, 12, 2, 0, 12, 17, 18, 17, 17, 3, 16, 18, 12, 9, 9, 16, 5, 10, 1, 7, 15, 4, 14, 3, 12, 19, 19, 17, 3, 2, 7, 12, 2, 19, 18, 3, 7, 5, 6, 6, 10, 6, 15, 8, 3, 0, 5, 17, 11, 7, 5, 9, 17, 18, 10, 18, 8, 7, 8, 18, 12, 8, 2, 17, 19, 8, 6, 19, 0, 4, 17, 2, 8, 12, 14, 13, 10, 15, 2, 3, 19, 16, 17, 9, 6, 9, 11, 1, 18, 10, 4, 19, 7, 13, 3, 9, 3, 14, 15, 9, 19, 10, 4, 15, 4, 18, 15, 0, 1, 13, 15, 5, 1, 19, 0, 7, 6, 0, 7, 7, 15, 1, 12, 3, 0, 17, 18, 5, 15, 7, 18, 3, 5, 8, 3, 19, 12, 19, 6, 8, 13, 6, 13, 9, 11, 11, 2, 8, 4, 4, 7, 0, 0, 15, 8, 9, 3, 5, 18, 19, 18, 11, 6, 7, 10, 14, 4, 15, 12, 9, 5, 2, 6, 15, 19, 1, 16, 4, 10, 10, 12, 6, 2, 12, 11, 15, 10, 12, 3, 15, 0, 7, 17, 7, 17, 7, 16, 11, 17, 6, 14, 4, 5, 17, 6, 3, 17, 9, 13, 3, 14, 16, 5, 15, 12, 0, 10, 10, 1, 7, 6, 19, 6, 2, 17, 3, 6, 3, 4, 1, 15, 2, 16, 6, 6, 9, 9, 9, 5, 9, 12, 17, 18, 12, 19, 16, 1, 0, 19, 8, 15, 1, 10, 5, 18, 4, 0, 8, 1, 8, 8, 18, 2, 1, 19, 1, 7, 12, 9, 18, 17, 2, 10, 7, 18, 8, 4, 6, 13, 17, 19, 9, 2, 1, 11, 19, 4, 15, 3, 7, 3, 6, 10, 15, 0, 12, 11, 2, 3, 14, 3, 8, 15, 8, 3, 5, 6, 19, 17, 7, 5, 6, 5, 18, 3, 17, 6, 1, 12, 0, 18, 10, 7, 2, 9 }, + 3 + }, + new object[] + { + new double[] { 12, 19, 18, 7, 2, 7, 13, 6, 15, 1, 15, 0, 4, 11, 8, 14, 3, 1, 17, 16, 13, 6, 15, 10, 6, 19, 14, 6, 3, 15, 15, 6, 14, 12, 15, 2, 1, 10, 1, 9, 5, 1, 16, 2, 11, 18, 5, 9, 18, 0, 5, 19, 10, 15, 18, 17, 3, 17, 8, 12, 7, 8, 4, 4, 3, 6, 9, 8, 6, 12, 10, 12, 14, 9, 10, 16, 12, 3, 18, 4, 12, 9, 1, 6, 6, 9, 13, 16, 15, 7, 18, 13, 9, 2, 13, 3, 6, 13, 6, 13, 6, 4, 10, 8, 2, 3, 12, 13, 2, 18, 15, 0, 17, 2, 3, 11, 4, 0, 10, 2, 15, 16, 0, 3, 2, 19, 6, 6, 18, 3, 8, 0, 0, 1, 6, 11, 15, 17, 16, 8, 15, 3, 19, 14, 19, 3, 16, 11, 0, 16, 19, 2, 4, 9, 15, 8, 12, 4, 3, 3, 19, 5, 2, 6, 4, 7, 16, 14, 18, 10, 13, 8, 18, 3, 11, 10, 3, 16, 5, 16, 11, 11, 13, 11, 14, 10, 19, 3, 4, 17, 0, 16, 10, 14, 8, 2, 12, 2, 7, 12, 18, 9, 9, 2, 9, 9, 15, 5, 11, 11, 4, 11, 2, 13, 1, 2, 7, 16, 16, 4, 12, 15, 5, 9, 15, 19, 18, 6, 6, 10, 16, 16, 4, 13, 12, 12, 6, 14, 16, 9, 6, 15, 9, 13, 17, 17, 3, 9, 14, 10, 18, 4, 6, 12, 4, 0, 11, 14, 18, 1, 8, 7, 19, 1, 7, 12, 13, 0, 16, 8, 6, 11, 1, 15, 19, 17, 2, 5, 7, 4, 18, 18, 14, 2, 3, 10, 18, 18, 11, 5, 6, 19, 4, 17, 12, 11, 2, 12, 7, 3, 18, 7, 14, 6, 14, 2, 5, 7, 0, 17, 10, 19, 5, 17, 16, 17, 17, 0, 7, 16, 7, 7, 13, 15, 12, 6, 12, 13, 6, 19, 11, 0, 7, 12, 18, 4, 10, 14, 15, 3, 5, 9, 12, 17, 6, 15, 19, 9, 10, 4, 19, 11, 3, 15, 16, 13, 7, 8, 7, 19, 4, 5, 6, 6, 2, 14, 17, 4, 1, 2, 13, 0, 3, 0, 15, 12, 1, 12, 15, 15, 18, 3, 8, 10, 10, 16, 6, 8, 12, 2, 0, 7, 3, 8, 9, 12, 1, 3, 14, 0 }, + 6 + }, + new object[] + { + new double[] { 17, 11, 7, 19, 17, 5, 17, 8, 10, 9, 7, 4, 4, 9, 19, 2, 3, 6, 7, 18, 2, 6, 19, 1, 15, 13, 5, 16, 6, 10, 0, 8, 7, 14, 1, 19, 0, 11, 5, 6, 3, 1, 16, 3, 11, 2, 7, 8, 17, 16, 5, 5, 4, 10, 17, 10, 14, 14, 18, 8, 16, 19, 3, 18, 3, 19, 7, 8, 8, 8, 18, 0, 10, 3, 4, 11, 5, 11, 2, 7, 16, 0, 0, 13, 2, 3, 7, 7, 11, 5, 10, 11, 9, 10, 12, 15, 16, 19, 0, 4, 0, 12, 1, 18, 17, 8, 8, 9, 8, 15, 17, 15, 6, 1, 17, 12, 4, 17, 12, 7, 8, 8, 8, 14, 17, 19, 19, 1, 15, 5, 11, 0, 4, 19, 16, 14, 0, 17, 11, 2, 1, 16, 0, 3, 18, 3, 2, 11, 12, 8, 13, 6, 8, 16, 4, 15, 1, 15, 6, 15, 19, 10, 14, 1, 0, 3, 3, 11, 19, 4, 2, 5, 10, 18, 15, 1, 14, 18, 19, 10, 14, 19, 9, 1, 0, 16, 10, 8, 19, 8, 17, 9, 3, 7, 0, 4, 13, 4, 3, 13, 13, 14, 8, 6, 4, 17, 9, 10, 0, 8, 14, 3, 18, 17, 9, 9, 14, 14, 8, 15, 12, 12, 9, 17, 13, 2, 12, 5, 12, 5, 5, 19, 1, 16, 8, 3, 1, 13, 15, 9, 8, 4, 15, 15, 15, 9, 18, 7, 4, 13, 15, 19, 3, 5, 17, 16, 19, 8, 15, 9, 4, 17, 4, 6, 0, 9, 5, 17, 12, 14, 16, 8, 9, 8, 12, 4, 18, 13, 1, 11, 4, 19, 11, 3, 8, 8, 15, 10, 14, 19, 18, 6, 10, 5, 1, 12, 16, 3, 6, 4, 15, 4, 3, 4, 12, 18, 16, 17, 17, 16, 13, 15, 9, 15, 13, 18, 8, 19, 11, 2, 3, 18, 2, 2, 18, 5, 16, 4, 9, 4, 18, 2, 8, 17, 0, 0, 15, 8, 4, 1, 9, 1, 12, 0, 16, 8, 5, 7, 10, 7, 5, 14, 9, 3, 7, 2, 16, 4, 14, 2, 17, 8, 10, 15, 11, 17, 4, 14, 13, 6, 14, 2, 15, 0, 14, 8, 6, 6, 1, 7, 10, 12, 1, 5, 1, 3, 7, 5, 4, 17, 9, 16, 10, 6, 4, 3, 10, 18, 8, 5 }, + 8 + }, + new object[] + { + new double[] { 5, 17, 12, 4, 5, 0, 9, 18, 4, 6, 11, 8, 13, 15, 7, 15, 12, 11, 14, 8, 11, 1, 3, 16, 9, 12, 13, 19, 8, 14, 2, 13, 17, 15, 0, 16, 4, 11, 11, 12, 3, 7, 17, 1, 18, 8, 14, 9, 8, 18, 10, 4, 0, 19, 19, 4, 0, 4, 7, 10, 8, 14, 7, 2, 17, 15, 18, 2, 10, 11, 7, 7, 16, 3, 5, 10, 15, 16, 15, 13, 0, 9, 9, 13, 9, 0, 5, 13, 18, 12, 4, 1, 17, 13, 0, 11, 9, 3, 12, 5, 4, 8, 5, 8, 10, 3, 17, 14, 17, 9, 10, 12, 19, 7, 17, 0, 13, 13, 17, 2, 12, 9, 13, 13, 3, 12, 12, 16, 15, 7, 12, 3, 8, 17, 6, 18, 1, 17, 6, 16, 4, 8, 16, 0, 2, 11, 4, 4, 5, 13, 3, 14, 17, 0, 15, 19, 13, 15, 7, 6, 9, 8, 6, 8, 0, 18, 7, 12, 1, 13, 14, 18, 13, 14, 13, 7, 19, 6, 1, 18, 17, 9, 19, 0, 6, 18, 12, 9, 5, 7, 17, 6, 7, 10, 15, 16, 10, 14, 7, 10, 9, 18, 14, 18, 18, 2, 18, 6, 5, 6, 12, 4, 0, 11, 13, 10, 15, 3, 19, 17, 12, 19, 12, 9, 15, 19, 13, 11, 14, 17, 8, 3, 11, 19, 10, 2, 3, 4, 7, 16, 13, 12, 2, 8, 7, 13, 19, 15, 5, 4, 12, 7, 13, 11, 6, 4, 8, 2, 16, 2, 6, 13, 2, 7, 5, 18, 17, 3, 8, 18, 13, 6, 4, 2, 12, 17, 8, 6, 12, 18, 15, 13, 4, 1, 3, 9, 11, 12, 1, 4, 8, 4, 9, 3, 17, 16, 6, 0, 19, 13, 8, 17, 3, 16, 13, 0, 16, 0, 15, 5, 8, 4, 8, 13, 1, 13, 4, 2, 16, 11, 2, 0, 0, 2, 5, 0, 7, 10, 19, 4, 13, 17, 18, 5, 0, 1, 14, 7, 13, 9, 12, 18, 1, 7, 13, 14, 4, 4, 7, 2, 19, 3, 8, 0, 11, 18, 4, 10, 14, 11, 16, 10, 17, 11, 8, 16, 1, 15, 0, 0, 14, 9, 19, 15, 11, 16, 1, 6, 8, 18, 0, 18, 3, 14, 13, 12, 9, 12, 11, 18, 18, 4, 3, 9, 7, 3, 5, 2, 18, 18 }, + 13 + }, + new object[] + { + new double[] { 6, 8, 15, 18, 5, 6, 8, 5, 16, 0, 7, 19, 0, 16, 13, 15, 19, 4, 16, 3, 11, 10, 8, 1, 10, 14, 18, 6, 17, 9, 3, 14, 16, 8, 7, 19, 11, 0, 3, 10, 10, 1, 5, 13, 8, 17, 14, 8, 10, 5, 15, 19, 17, 13, 14, 18, 13, 16, 16, 5, 14, 11, 15, 11, 0, 5, 3, 16, 5, 8, 18, 9, 7, 3, 18, 8, 6, 5, 1, 5, 16, 4, 5, 13, 15, 10, 14, 19, 15, 1, 12, 1, 16, 6, 18, 0, 11, 9, 4, 5, 17, 11, 18, 5, 13, 4, 0, 14, 13, 0, 1, 10, 14, 7, 15, 12, 1, 13, 11, 1, 9, 5, 18, 12, 12, 6, 1, 0, 7, 10, 2, 3, 5, 11, 8, 8, 17, 19, 2, 7, 12, 9, 0, 17, 17, 11, 19, 4, 10, 2, 16, 15, 6, 9, 0, 5, 5, 16, 16, 9, 2, 8, 5, 15, 13, 15, 0, 9, 4, 11, 18, 13, 18, 11, 7, 12, 1, 1, 5, 16, 7, 12, 6, 0, 2, 1, 14, 7, 13, 0, 18, 0, 16, 5, 14, 13, 2, 4, 4, 17, 11, 13, 5, 10, 19, 14, 10, 4, 9, 9, 4, 0, 3, 4, 0, 2, 16, 14, 2, 18, 17, 16, 13, 11, 6, 17, 8, 10, 6, 18, 9, 6, 0, 14, 0, 19, 3, 17, 18, 9, 19, 1, 4, 17, 2, 5, 11, 4, 2, 5, 2, 15, 11, 9, 14, 19, 5, 19, 4, 14, 11, 2, 13, 2, 19, 8, 8, 13, 15, 17, 9, 7, 4, 19, 11, 6, 10, 12, 5, 1, 10, 6, 7, 10, 6, 16, 14, 12, 14, 15, 6, 2, 19, 4, 1, 18, 11, 10, 7, 1, 1, 10, 3, 16, 13, 0, 12, 15, 4, 17, 17, 0, 9, 19, 15, 12, 12, 12, 18, 8, 0, 4, 7, 7, 1, 3, 2, 13, 19, 19, 16, 4, 10, 16, 2, 6, 9, 18, 2, 5, 1, 16, 1, 11, 16, 18, 13, 13, 6, 1, 18, 16, 2, 6, 3, 12, 5, 1, 7, 15, 14, 8, 15, 14, 15, 13, 6, 13, 15, 5, 1, 6, 7, 17, 13, 12, 6, 15, 4, 12, 13, 14, 8, 19, 13, 1, 2, 9, 0, 19, 13, 13, 0, 12, 8, 2, 7, 14, 9, 5 }, + 5 + }, + new object[] + { + new double[] { 7, 11, 3, 3, 12, 8, 9, 3, 14, 17, 8, 18, 17, 11, 10, 18, 17, 16, 3, 4, 12, 3, 6, 7, 17, 6, 3, 13, 2, 3, 6, 15, 7, 16, 2, 14, 10, 0, 5, 10, 17, 14, 12, 4, 9, 19, 16, 17, 1, 3, 8, 19, 0, 1, 16, 12, 17, 2, 1, 3, 1, 14, 18, 17, 6, 15, 9, 4, 1, 15, 18, 1, 7, 11, 7, 6, 13, 9, 5, 10, 8, 1, 5, 15, 10, 18, 6, 19, 9, 4, 19, 0, 10, 6, 14, 11, 17, 4, 1, 1, 13, 0, 0, 16, 14, 0, 9, 8, 10, 2, 14, 19, 2, 13, 11, 5, 14, 7, 3, 10, 1, 19, 18, 0, 12, 2, 11, 6, 5, 15, 8, 9, 5, 17, 0, 6, 4, 16, 8, 1, 3, 6, 7, 14, 4, 19, 3, 12, 15, 16, 3, 9, 4, 6, 17, 19, 11, 2, 4, 10, 7, 8, 2, 5, 15, 17, 2, 18, 19, 11, 1, 3, 19, 8, 16, 8, 14, 3, 6, 3, 0, 2, 7, 0, 5, 13, 15, 4, 14, 4, 16, 7, 3, 5, 6, 4, 16, 5, 14, 19, 5, 16, 9, 3, 7, 7, 11, 2, 19, 13, 18, 14, 12, 2, 17, 18, 12, 8, 16, 16, 6, 13, 0, 10, 3, 17, 6, 18, 0, 0, 16, 19, 3, 19, 14, 10, 18, 0, 13, 8, 16, 11, 9, 16, 1, 7, 15, 0, 7, 3, 3, 16, 5, 4, 17, 3, 14, 1, 6, 12, 2, 12, 3, 19, 13, 4, 12, 1, 1, 8, 11, 1, 16, 4, 9, 19, 12, 8, 19, 15, 0, 15, 0, 7, 6, 12, 3, 1, 10, 12, 10, 7, 15, 12, 4, 12, 11, 14, 4, 11, 11, 4, 1, 10, 8, 12, 7, 17, 15, 13, 10, 14, 4, 9, 2, 16, 11, 13, 4, 2, 3, 9, 10, 1, 15, 10, 1, 19, 13, 5, 14, 3, 8, 18, 19, 5, 7, 13, 4, 5, 9, 16, 12, 12, 5, 5, 2, 16, 1, 17, 18, 18, 19, 4, 10, 17, 2, 3, 18, 15, 16, 6, 14, 8, 1, 5, 18, 19, 15, 4, 7, 17, 14, 3, 14, 14, 18, 1, 17, 13, 16, 12, 12, 9, 3, 16, 19, 16, 7, 1, 6, 16, 5, 2, 9, 18, 18, 9, 6, 2 }, + 3 + }, + new object[] + { + new double[] { 13, 4, 19, 1, 12, 2, 9, 1, 17, 10, 16, 0, 5, 1, 19, 2, 3, 1, 7, 0, 19, 11, 18, 8, 18, 10, 9, 6, 18, 11, 15, 3, 11, 4, 19, 11, 8, 19, 1, 12, 8, 2, 19, 17, 15, 7, 6, 7, 7, 9, 3, 6, 15, 9, 19, 19, 6, 0, 7, 0, 19, 11, 18, 1, 3, 10, 12, 11, 19, 0, 16, 7, 7, 9, 19, 2, 9, 4, 2, 7, 12, 9, 8, 18, 18, 13, 13, 6, 5, 1, 19, 9, 0, 5, 10, 16, 18, 7, 0, 7, 5, 11, 3, 0, 14, 17, 4, 3, 1, 2, 19, 15, 0, 9, 13, 8, 4, 4, 19, 16, 1, 17, 15, 17, 9, 8, 1, 2, 18, 3, 18, 1, 9, 10, 3, 17, 18, 1, 9, 12, 8, 10, 11, 19, 7, 3, 9, 2, 6, 4, 10, 18, 17, 9, 10, 13, 12, 11, 14, 2, 7, 10, 15, 4, 2, 11, 5, 18, 3, 12, 0, 6, 18, 16, 19, 11, 17, 8, 11, 5, 3, 5, 5, 19, 2, 0, 17, 9, 15, 0, 6, 9, 13, 19, 10, 3, 2, 9, 13, 7, 12, 18, 18, 5, 17, 0, 7, 14, 17, 7, 8, 8, 8, 8, 12, 4, 6, 6, 1, 8, 6, 17, 14, 7, 7, 9, 5, 0, 10, 14, 4, 1, 8, 4, 9, 11, 5, 10, 2, 11, 10, 19, 11, 14, 15, 0, 7, 0, 18, 12, 14, 16, 18, 12, 14, 2, 8, 1, 2, 4, 0, 17, 2, 19, 16, 10, 7, 5, 10, 14, 18, 5, 1, 9, 14, 19, 6, 15, 13, 1, 19, 12, 0, 19, 5, 12, 15, 6, 19, 0, 0, 1, 15, 1, 10, 5, 10, 11, 5, 13, 17, 18, 11, 3, 11, 1, 1, 14, 11, 8, 12, 15, 11, 13, 9, 7, 0, 11, 4, 18, 2, 13, 7, 16, 2, 4, 5, 7, 10, 2, 18, 10, 3, 16, 17, 14, 16, 11, 12, 9, 18, 4, 8, 10, 4, 16, 19, 1, 4, 9, 0, 13, 5, 11, 5, 8, 11, 8, 6, 0, 9, 8, 5, 19, 5, 19, 12, 11, 7, 11, 13, 7, 3, 5, 15, 2, 5, 5, 4, 10, 9, 13, 13, 0, 14, 13, 15, 14, 14, 16, 5, 6, 19, 9, 16, 8, 10, 6, 10, 19 }, + 19 + }, + new object[] + { + new double[] { 7, 11, 8, 18, 11, 16, 16, 0, 12, 17, 4, 9, 1, 1, 1, 14, 15, 3, 8, 4, 2, 6, 14, 2, 1, 16, 5, 19, 11, 16, 16, 16, 12, 15, 3, 13, 17, 1, 9, 17, 2, 14, 1, 8, 18, 17, 13, 5, 7, 9, 17, 7, 17, 17, 0, 13, 2, 16, 5, 9, 14, 1, 2, 11, 14, 1, 4, 13, 19, 12, 12, 9, 3, 3, 3, 14, 18, 9, 7, 14, 13, 7, 10, 14, 1, 12, 16, 15, 14, 8, 1, 17, 16, 1, 1, 15, 1, 17, 6, 18, 6, 8, 6, 10, 0, 14, 1, 6, 7, 4, 4, 13, 19, 14, 3, 12, 3, 9, 12, 19, 1, 1, 10, 0, 1, 19, 16, 8, 12, 7, 9, 2, 7, 11, 12, 11, 2, 17, 14, 4, 9, 3, 13, 3, 1, 8, 14, 2, 9, 16, 9, 3, 11, 19, 6, 15, 8, 6, 19, 10, 14, 0, 13, 10, 5, 4, 9, 0, 5, 6, 11, 16, 6, 6, 19, 7, 9, 15, 7, 8, 5, 12, 19, 11, 13, 1, 0, 18, 2, 0, 1, 13, 13, 15, 18, 9, 19, 18, 4, 17, 9, 18, 14, 17, 11, 9, 4, 18, 3, 13, 13, 0, 15, 14, 9, 15, 17, 8, 9, 9, 7, 7, 0, 6, 14, 12, 10, 8, 17, 18, 9, 9, 2, 6, 13, 3, 9, 17, 4, 19, 7, 9, 4, 7, 10, 12, 16, 19, 18, 16, 10, 6, 17, 0, 11, 2, 12, 8, 2, 16, 5, 5, 10, 16, 0, 19, 2, 8, 17, 18, 8, 19, 19, 7, 1, 12, 7, 10, 1, 1, 15, 1, 17, 6, 16, 18, 13, 12, 19, 19, 16, 1, 6, 15, 13, 4, 5, 17, 10, 1, 16, 13, 19, 19, 8, 3, 10, 19, 14, 4, 14, 13, 12, 15, 16, 0, 17, 9, 13, 7, 15, 16, 16, 1, 3, 5, 3, 13, 4, 6, 0, 1, 9, 2, 4, 3, 1, 13, 12, 6, 18, 18, 16, 11, 19, 7, 10, 12, 18, 12, 19, 14, 15, 7, 15, 8, 1, 7, 2, 13, 6, 19, 19, 4, 17, 8, 13, 18, 15, 0, 8, 15, 3, 18, 0, 0, 5, 16, 7, 14, 16, 16, 0, 10, 5, 1, 6, 4, 18, 8, 14, 18, 9, 18, 1, 15, 11, 1, 1, 11 }, + 1 + }, + new object[] + { + new double[] { 17, 5, 5, 8, 5, 18, 19, 5, 9, 4, 10, 7, 4, 7, 1, 2, 3, 1, 0, 1, 6, 17, 3, 19, 14, 3, 12, 19, 6, 19, 9, 7, 15, 9, 15, 13, 13, 10, 1, 2, 19, 8, 8, 7, 5, 6, 2, 12, 19, 18, 10, 12, 10, 18, 0, 12, 11, 5, 6, 5, 15, 5, 11, 16, 14, 12, 18, 10, 5, 16, 10, 18, 2, 10, 1, 11, 11, 6, 9, 18, 2, 4, 14, 4, 17, 2, 18, 16, 9, 13, 19, 12, 1, 11, 2, 11, 18, 8, 17, 16, 4, 18, 2, 16, 4, 3, 14, 19, 13, 1, 1, 19, 4, 2, 3, 12, 7, 10, 4, 11, 0, 17, 4, 9, 8, 0, 5, 7, 12, 5, 10, 18, 15, 10, 12, 5, 2, 13, 4, 1, 17, 13, 3, 0, 16, 4, 10, 7, 18, 0, 19, 16, 13, 1, 11, 19, 15, 7, 11, 11, 17, 10, 7, 1, 15, 11, 8, 15, 9, 15, 10, 8, 13, 9, 17, 17, 15, 17, 12, 12, 0, 11, 8, 12, 15, 19, 17, 2, 0, 2, 10, 1, 6, 8, 6, 15, 7, 0, 8, 14, 2, 1, 14, 18, 4, 3, 17, 14, 2, 2, 14, 9, 4, 16, 11, 11, 4, 9, 17, 1, 19, 19, 1, 14, 19, 17, 19, 5, 9, 3, 4, 13, 13, 17, 18, 2, 5, 19, 1, 3, 7, 15, 11, 3, 11, 13, 9, 15, 14, 0, 15, 14, 11, 7, 1, 1, 12, 11, 14, 10, 19, 9, 18, 2, 4, 8, 16, 4, 18, 6, 5, 10, 0, 11, 12, 4, 4, 1, 4, 10, 12, 9, 12, 1, 7, 11, 8, 1, 11, 12, 4, 3, 7, 15, 5, 4, 14, 0, 4, 14, 18, 15, 10, 6, 13, 4, 16, 1, 11, 0, 3, 9, 2, 2, 13, 2, 1, 5, 3, 13, 10, 13, 14, 7, 4, 8, 8, 13, 4, 1, 5, 11, 13, 14, 18, 12, 7, 13, 16, 2, 1, 6, 5, 17, 17, 1, 7, 18, 2, 1, 5, 14, 2, 11, 10, 18, 16, 14, 7, 16, 13, 3, 2, 4, 19, 1, 2, 5, 9, 11, 4, 18, 18, 9, 12, 4, 7, 15, 17, 19, 19, 1, 5, 13, 6, 1, 6, 6, 0, 11, 9, 5, 13, 8, 9, 14, 9, 3, 3, 1 }, + 1 + }, + new object[] + { + new double[] { 15, 14, 16, 4, 11, 7, 2, 10, 3, 2, 8, 8, 16, 15, 4, 5, 5, 7, 16, 2, 2, 5, 17, 15, 13, 16, 18, 18, 3, 3, 10, 17, 1, 0, 10, 14, 8, 13, 18, 6, 4, 8, 11, 18, 0, 1, 3, 14, 9, 14, 11, 8, 18, 4, 13, 4, 9, 7, 0, 1, 12, 6, 19, 19, 10, 6, 8, 11, 18, 9, 0, 1, 10, 4, 13, 8, 5, 0, 10, 11, 12, 10, 1, 4, 18, 12, 5, 9, 15, 5, 16, 10, 1, 17, 1, 19, 13, 3, 13, 14, 12, 12, 9, 15, 10, 1, 1, 11, 0, 16, 8, 19, 2, 6, 5, 17, 1, 10, 19, 19, 12, 12, 6, 18, 10, 1, 16, 13, 14, 5, 4, 13, 4, 9, 8, 8, 0, 8, 3, 11, 8, 16, 2, 19, 7, 10, 18, 8, 15, 13, 10, 2, 11, 2, 10, 18, 11, 18, 15, 3, 19, 13, 2, 5, 17, 7, 1, 6, 11, 6, 11, 6, 1, 1, 9, 6, 8, 9, 3, 16, 1, 15, 16, 11, 5, 11, 17, 18, 6, 6, 14, 17, 1, 14, 13, 4, 13, 15, 14, 15, 19, 19, 13, 5, 13, 2, 14, 9, 14, 12, 3, 9, 1, 12, 9, 11, 14, 7, 18, 19, 16, 0, 15, 19, 10, 10, 5, 11, 1, 5, 4, 11, 2, 11, 10, 4, 15, 1, 1, 18, 10, 7, 16, 4, 8, 3, 9, 7, 13, 1, 16, 12, 16, 6, 7, 16, 19, 4, 5, 13, 17, 8, 7, 17, 6, 14, 19, 9, 16, 0, 7, 14, 16, 6, 4, 16, 11, 3, 11, 2, 9, 9, 1, 7, 7, 6, 8, 10, 1, 15, 3, 10, 14, 17, 7, 13, 2, 4, 14, 11, 10, 12, 10, 5, 19, 4, 14, 11, 9, 17, 3, 3, 4, 3, 19, 5, 17, 3, 9, 7, 5, 12, 8, 19, 18, 17, 7, 10, 0, 11, 17, 15, 9, 14, 18, 18, 10, 11, 9, 5, 1, 13, 5, 13, 3, 15, 4, 7, 12, 14, 19, 4, 19, 17, 15, 15, 7, 0, 11, 17, 5, 1, 13, 10, 12, 18, 18, 6, 1, 15, 19, 8, 17, 11, 12, 18, 9, 14, 19, 13, 1, 13, 5, 1, 3, 6, 17, 15, 1, 18, 15, 6, 15, 7, 6, 10, 13, 12, 11, 10 }, + 1 + }, + new object[] + { + new double[] { 16, 12, 4, 6, 4, 16, 5, 4, 1, 11, 10, 2, 19, 2, 14, 5, 16, 1, 18, 1, 1, 2, 18, 0, 1, 5, 7, 17, 2, 13, 17, 18, 12, 7, 15, 18, 12, 14, 3, 15, 13, 7, 7, 16, 12, 4, 18, 14, 0, 8, 1, 16, 5, 6, 5, 7, 2, 16, 19, 16, 14, 2, 0, 12, 6, 3, 8, 10, 9, 18, 18, 14, 12, 14, 2, 15, 8, 3, 8, 9, 15, 18, 13, 17, 11, 0, 11, 6, 7, 10, 4, 16, 8, 17, 12, 7, 13, 3, 14, 7, 7, 2, 2, 11, 7, 17, 17, 12, 19, 11, 4, 10, 10, 10, 9, 6, 19, 1, 7, 0, 18, 13, 13, 8, 0, 9, 0, 17, 0, 3, 12, 10, 9, 13, 3, 19, 11, 18, 17, 4, 18, 0, 12, 12, 14, 13, 8, 6, 6, 16, 12, 7, 12, 8, 16, 18, 2, 14, 16, 9, 7, 3, 13, 6, 4, 0, 4, 3, 1, 12, 16, 6, 0, 0, 5, 17, 3, 17, 4, 16, 2, 2, 10, 4, 2, 8, 8, 12, 0, 5, 18, 0, 6, 3, 14, 2, 15, 11, 2, 18, 14, 12, 7, 13, 1, 17, 0, 9, 17, 16, 3, 5, 2, 5, 8, 5, 13, 13, 2, 12, 5, 6, 9, 18, 4, 16, 15, 4, 11, 7, 11, 4, 16, 10, 16, 0, 13, 4, 1, 13, 14, 8, 0, 6, 15, 10, 5, 0, 2, 4, 18, 8, 8, 4, 18, 2, 3, 17, 10, 5, 18, 2, 19, 9, 8, 10, 10, 6, 19, 14, 1, 1, 1, 15, 13, 2, 12, 15, 14, 0, 16, 16, 0, 16, 14, 10, 14, 15, 7, 17, 11, 15, 12, 12, 14, 6, 6, 11, 15, 16, 12, 18, 7, 19, 7, 14, 1, 13, 18, 1, 17, 7, 13, 17, 3, 10, 9, 19, 16, 13, 0, 5, 6, 3, 6, 12, 17, 19, 11, 5, 16, 15, 1, 7, 13, 11, 16, 2, 19, 12, 6, 6, 19, 15, 9, 9, 10, 12, 4, 15, 7, 3, 6, 12, 11, 11, 16, 3, 3, 14, 10, 17, 16, 10, 9, 13, 12, 17, 9, 9, 16, 4, 12, 6, 5, 16, 0, 15, 16, 9, 4, 6, 15, 1, 3, 15, 13, 5, 19, 11, 7, 17, 13, 6, 18, 14, 8, 4, 6, 4 }, + 16 + }, + new object[] + { + new double[] { 9, 1, 16, 19, 18, 3, 11, 9, 15, 18, 8, 8, 8, 12, 10, 6, 3, 5, 3, 18, 16, 3, 8, 6, 7, 16, 10, 10, 1, 15, 9, 17, 19, 3, 19, 7, 0, 9, 18, 6, 6, 14, 2, 17, 15, 12, 14, 17, 0, 13, 13, 8, 9, 15, 18, 0, 13, 6, 10, 13, 10, 3, 13, 7, 3, 9, 3, 6, 14, 2, 18, 2, 12, 15, 5, 1, 9, 16, 1, 8, 18, 2, 13, 8, 12, 18, 14, 15, 0, 4, 2, 4, 2, 6, 13, 12, 18, 7, 12, 6, 14, 3, 6, 12, 10, 8, 1, 12, 1, 15, 9, 19, 12, 7, 12, 9, 9, 16, 19, 2, 4, 13, 9, 12, 16, 9, 19, 1, 13, 16, 5, 7, 9, 14, 5, 4, 14, 3, 3, 13, 17, 16, 18, 5, 9, 19, 3, 17, 19, 4, 2, 4, 7, 0, 2, 17, 6, 9, 16, 17, 18, 19, 18, 6, 14, 2, 19, 19, 17, 2, 12, 9, 1, 16, 13, 1, 1, 18, 19, 10, 13, 8, 0, 13, 14, 5, 17, 7, 6, 18, 9, 9, 4, 1, 5, 10, 14, 8, 15, 18, 5, 15, 17, 11, 14, 3, 14, 16, 14, 16, 1, 8, 5, 0, 12, 15, 17, 5, 5, 18, 4, 13, 8, 18, 1, 15, 12, 14, 12, 16, 11, 16, 8, 7, 16, 13, 16, 9, 4, 16, 12, 2, 4, 12, 13, 9, 15, 14, 13, 11, 16, 14, 13, 7, 16, 13, 4, 4, 4, 10, 14, 7, 11, 5, 4, 14, 7, 9, 0, 12, 15, 15, 8, 14, 1, 5, 19, 19, 18, 16, 6, 18, 13, 3, 4, 10, 10, 1, 11, 8, 6, 1, 5, 8, 6, 11, 8, 18, 14, 6, 1, 15, 18, 5, 15, 8, 15, 8, 11, 14, 18, 11, 9, 13, 16, 16, 9, 11, 1, 19, 4, 15, 6, 14, 4, 11, 8, 0, 10, 12, 7, 12, 19, 15, 17, 15, 2, 5, 7, 6, 14, 4, 9, 5, 11, 13, 5, 10, 5, 3, 11, 5, 10, 0, 12, 19, 10, 4, 11, 1, 5, 2, 15, 15, 13, 4, 9, 16, 12, 13, 17, 18, 3, 11, 10, 2, 19, 18, 0, 16, 19, 12, 11, 17, 15, 1, 16, 8, 3, 16, 12, 17, 11, 2, 16, 10, 16, 12, 7, 13 }, + 16 + }, + new object[] + { + new double[] { 4, 13, 13, 11, 5, 9, 4, 4, 17, 19, 7, 2, 8, 5, 17, 1, 11, 10, 18, 19, 7, 19, 16, 13, 19, 12, 10, 15, 8, 5, 19, 11, 12, 13, 5, 1, 7, 18, 10, 15, 10, 5, 7, 7, 1, 10, 13, 1, 15, 6, 8, 16, 17, 0, 3, 0, 15, 14, 6, 12, 6, 0, 3, 9, 5, 1, 15, 12, 11, 16, 3, 17, 1, 2, 8, 2, 8, 12, 14, 15, 16, 13, 0, 1, 7, 9, 0, 3, 6, 3, 2, 6, 1, 16, 1, 10, 8, 2, 2, 9, 15, 9, 13, 17, 15, 13, 18, 2, 13, 15, 16, 6, 18, 2, 12, 1, 16, 15, 2, 12, 6, 6, 18, 10, 14, 0, 18, 12, 10, 17, 0, 6, 5, 14, 4, 4, 16, 16, 18, 9, 1, 7, 18, 0, 15, 7, 10, 3, 8, 19, 0, 7, 4, 3, 3, 6, 19, 4, 8, 16, 4, 0, 1, 16, 5, 14, 17, 10, 9, 17, 15, 7, 16, 5, 16, 15, 12, 3, 2, 7, 4, 13, 6, 0, 17, 16, 3, 12, 8, 10, 7, 0, 6, 17, 10, 9, 16, 2, 1, 8, 19, 6, 17, 0, 5, 3, 17, 4, 7, 14, 11, 16, 9, 2, 5, 10, 9, 0, 16, 10, 16, 0, 6, 17, 7, 13, 14, 9, 10, 16, 4, 18, 6, 13, 8, 9, 12, 13, 5, 13, 6, 7, 14, 5, 19, 9, 11, 14, 8, 10, 6, 19, 7, 9, 7, 10, 15, 14, 10, 2, 18, 12, 14, 3, 7, 8, 0, 8, 10, 11, 12, 3, 18, 6, 15, 14, 13, 14, 17, 11, 10, 14, 19, 4, 2, 18, 9, 7, 1, 14, 15, 6, 5, 15, 2, 12, 17, 19, 12, 16, 3, 6, 14, 15, 5, 13, 4, 6, 0, 12, 12, 5, 7, 19, 3, 10, 5, 7, 7, 8, 2, 10, 19, 18, 13, 1, 18, 15, 5, 9, 3, 3, 4, 0, 11, 16, 13, 16, 5, 18, 2, 7, 2, 1, 11, 17, 16, 17, 15, 8, 12, 19, 12, 10, 11, 14, 9, 0, 6, 9, 1, 0, 7, 3, 3, 2, 7, 12, 9, 15, 13, 7, 7, 16, 4, 4, 12, 8, 6, 5, 5, 11, 11, 10, 5, 16, 17, 12, 2, 1, 15, 6, 2, 13, 15, 12, 14, 16, 17, 6 }, + 7 + }, + new object[] + { + new double[] { 15, 16, 7, 3, 12, 12, 3, 11, 10, 12, 3, 5, 4, 7, 1, 4, 11, 8, 9, 14, 2, 1, 2, 7, 9, 0, 17, 10, 0, 7, 8, 16, 9, 2, 11, 16, 11, 11, 15, 14, 9, 17, 5, 2, 5, 8, 13, 12, 4, 3, 9, 7, 12, 10, 1, 16, 10, 19, 13, 9, 4, 18, 9, 2, 9, 10, 16, 9, 1, 10, 14, 16, 7, 4, 10, 3, 4, 14, 19, 16, 4, 8, 7, 11, 1, 17, 19, 7, 9, 12, 5, 5, 2, 11, 4, 10, 0, 3, 11, 12, 11, 9, 16, 10, 8, 3, 7, 8, 10, 6, 7, 17, 9, 17, 5, 16, 15, 12, 8, 8, 3, 15, 1, 0, 19, 18, 13, 18, 16, 0, 1, 6, 3, 12, 5, 6, 5, 12, 10, 13, 2, 10, 4, 18, 16, 1, 12, 8, 14, 13, 18, 3, 2, 5, 7, 3, 15, 14, 3, 11, 9, 2, 0, 15, 12, 10, 12, 6, 7, 11, 4, 2, 11, 1, 18, 16, 18, 12, 15, 5, 9, 0, 17, 3, 17, 18, 15, 0, 2, 14, 18, 0, 3, 4, 14, 15, 5, 14, 7, 10, 11, 10, 0, 6, 4, 18, 17, 16, 11, 18, 7, 19, 11, 19, 1, 19, 17, 0, 19, 9, 4, 8, 4, 1, 10, 14, 13, 7, 17, 5, 10, 9, 15, 15, 15, 3, 12, 9, 19, 18, 7, 7, 3, 18, 17, 10, 12, 9, 18, 16, 19, 8, 17, 4, 5, 16, 6, 18, 5, 5, 11, 3, 19, 19, 2, 6, 5, 7, 12, 5, 15, 16, 14, 9, 7, 5, 13, 9, 8, 10, 15, 5, 5, 19, 19, 16, 10, 17, 1, 8, 12, 2, 14, 2, 6, 19, 1, 6, 12, 4, 5, 5, 8, 9, 14, 11, 17, 1, 3, 16, 9, 8, 13, 4, 3, 11, 17, 2, 6, 8, 13, 9, 5, 7, 13, 13, 4, 16, 18, 2, 5, 8, 14, 4, 11, 14, 11, 19, 4, 8, 0, 10, 17, 2, 5, 5, 18, 3, 14, 19, 16, 2, 6, 18, 1, 2, 0, 8, 5, 2, 18, 1, 4, 7, 6, 6, 1, 14, 1, 2, 19, 1, 18, 10, 15, 1, 17, 0, 17, 14, 5, 14, 16, 16, 12, 10, 7, 16, 1, 19, 6, 16, 3, 6, 1, 13, 13, 12, 7, 10 }, + 5 + }, + new object[] + { + new double[] { 15, 13, 18, 7, 10, 11, 7, 19, 3, 0, 10, 15, 4, 12, 18, 16, 6, 15, 16, 3, 13, 4, 13, 14, 17, 3, 18, 8, 19, 15, 12, 18, 0, 12, 6, 17, 4, 15, 1, 7, 11, 3, 12, 8, 11, 3, 3, 8, 11, 16, 5, 13, 16, 8, 0, 14, 15, 0, 17, 9, 5, 9, 1, 9, 10, 14, 16, 1, 1, 15, 2, 11, 19, 17, 4, 10, 9, 13, 1, 13, 9, 2, 14, 19, 6, 13, 8, 19, 4, 0, 19, 16, 7, 8, 14, 8, 13, 13, 16, 12, 11, 15, 1, 7, 18, 14, 8, 15, 10, 3, 6, 19, 8, 12, 19, 7, 7, 0, 15, 13, 5, 14, 18, 9, 17, 16, 10, 3, 1, 11, 7, 17, 0, 1, 11, 3, 7, 6, 14, 17, 14, 18, 16, 4, 13, 13, 5, 19, 13, 13, 4, 11, 8, 13, 5, 5, 18, 14, 17, 5, 8, 12, 18, 4, 11, 2, 11, 2, 16, 10, 12, 15, 15, 2, 16, 0, 6, 9, 5, 9, 13, 2, 10, 15, 14, 15, 1, 10, 9, 9, 3, 18, 8, 8, 9, 19, 7, 9, 13, 15, 3, 12, 14, 14, 10, 16, 4, 11, 12, 13, 8, 15, 2, 6, 5, 18, 12, 19, 11, 9, 4, 1, 5, 8, 1, 18, 10, 4, 2, 5, 19, 3, 9, 17, 16, 9, 18, 2, 15, 15, 7, 6, 18, 1, 6, 8, 4, 5, 13, 0, 2, 10, 12, 10, 2, 6, 17, 8, 16, 5, 11, 14, 12, 4, 8, 12, 5, 18, 8, 2, 10, 13, 1, 9, 7, 9, 7, 18, 12, 17, 13, 6, 0, 1, 1, 13, 4, 5, 15, 4, 3, 17, 16, 11, 10, 14, 3, 12, 13, 13, 12, 13, 10, 12, 14, 15, 3, 0, 13, 14, 2, 14, 5, 17, 19, 11, 2, 19, 19, 14, 10, 16, 17, 16, 13, 9, 10, 5, 0, 0, 16, 1, 5, 0, 13, 19, 6, 8, 0, 6, 6, 2, 2, 18, 19, 2, 18, 6, 4, 14, 13, 15, 15, 10, 6, 14, 3, 7, 8, 14, 14, 3, 11, 4, 7, 17, 2, 18, 10, 15, 3, 19, 18, 5, 8, 10, 10, 1, 4, 7, 18, 10, 8, 18, 4, 15, 3, 3, 15, 17, 8, 18, 19, 16, 5, 19, 16, 19, 5, 16 }, + 13 + }, + new object[] + { + new double[] { 13, 1, 7, 17, 6, 17, 6, 17, 14, 15, 16, 2, 10, 0, 7, 9, 13, 9, 14, 11, 3, 17, 14, 11, 1, 8, 0, 11, 11, 8, 10, 15, 3, 12, 13, 9, 4, 13, 0, 19, 8, 19, 7, 6, 0, 9, 12, 9, 10, 1, 17, 6, 11, 4, 11, 14, 10, 5, 19, 16, 10, 12, 10, 17, 15, 3, 10, 13, 10, 2, 6, 12, 6, 7, 1, 2, 0, 3, 12, 8, 6, 18, 1, 17, 18, 4, 13, 5, 3, 13, 19, 14, 9, 3, 15, 7, 11, 1, 4, 5, 17, 4, 5, 3, 4, 1, 12, 4, 6, 18, 17, 15, 5, 9, 9, 10, 14, 18, 15, 12, 15, 12, 10, 2, 5, 4, 1, 14, 10, 5, 6, 5, 0, 10, 12, 1, 1, 11, 9, 7, 8, 10, 16, 6, 17, 1, 6, 9, 10, 6, 15, 18, 4, 8, 12, 18, 14, 18, 4, 8, 14, 1, 11, 5, 9, 15, 4, 19, 18, 16, 15, 6, 12, 15, 6, 15, 12, 17, 12, 4, 10, 0, 14, 17, 11, 5, 13, 13, 13, 16, 19, 7, 1, 7, 2, 17, 15, 3, 14, 12, 14, 15, 1, 8, 9, 11, 9, 16, 16, 19, 3, 10, 12, 9, 5, 13, 17, 4, 18, 5, 18, 8, 18, 11, 3, 0, 11, 14, 10, 7, 4, 1, 19, 7, 6, 18, 19, 4, 3, 15, 16, 2, 1, 9, 4, 4, 0, 14, 18, 16, 15, 4, 4, 15, 7, 12, 3, 5, 17, 6, 0, 14, 9, 8, 17, 10, 15, 11, 2, 19, 12, 13, 11, 17, 4, 5, 6, 12, 18, 5, 6, 3, 17, 12, 0, 9, 2, 5, 12, 2, 14, 13, 3, 10, 5, 5, 11, 0, 10, 4, 17, 16, 7, 16, 14, 6, 3, 1, 14, 10, 9, 16, 9, 18, 15, 10, 4, 10, 18, 8, 9, 10, 3, 3, 19, 7, 13, 5, 4, 17, 11, 5, 3, 12, 18, 10, 7, 6, 5, 10, 15, 6, 15, 13, 19, 19, 3, 18, 11, 10, 3, 18, 19, 2, 14, 2, 6, 18, 2, 15, 15, 13, 12, 17, 15, 6, 5, 0, 8, 15, 17, 15, 3, 5, 15, 0, 2, 7, 12, 8, 8, 15, 0, 2, 3, 11, 2, 16, 8, 18, 0, 5, 6, 8, 5, 17, 19, 0, 5, 9 }, + 15 + }, + }; + + public static IEnumerable ModeDataNaN => new[] + { + new object[] + { + new double[] { 2, 16, 7, 17, 14, 19, 18, 6, 17, 15, 5, 8, 17, 5, 15, 13, 2, 16, 15, 16, 15, 3, 14, 9, 13, 14, 0, 19, 19, 7, 15, 3, 8, 6, 2, 11, 3, 19, 5, 15, 18, 9, 15, 16, 5, 1, 5, 17, 7, 11, 16, 1, 16, 18, 1, 2, 5, 3, 16, 4, 15, 16, 0, 12, 7, 8, 2, 3, 9, 2, 3, 19, 13, 3, 12, 14, 5, 16, 14, 7, 13, 18, 6, 0, 9, 1, 4, 14, 1, 2, 3, 7, 7, 17, 7, 0, 6, 19, 1, 18, 6, 7, 0, 5, 14, 5, 5, 8, 0, 2, 3, 4, 3, 16, 2, 4, 4, 17, 12, 16, 15, 9, 19, 12, 13, 9, 8, 14, 9, 8, 1, 1, 7, 10, 2, 4, 0, 1, 11, 1, 2, 3, 15, 9, 9, 1, 6, 16, 2, 9, 10, 11, 7, 8, 14, 14, 19, 9, 8, 4, 7, 4, 5, 2, 1, 1, 16, 10, 4, 9, 8, 0, 6, 4, 14, 12, 4, 7, 4, 9, 12, 4, 15, 11, 11, 5, 18, 10, 15, 19, 0, 10, 10, 4, 1, 15, 15, 5, 18, 2, 4, 6, 16, 14, 6, 17, 13, 7, 11, 3, 0, 15, 12, 13, 16, 17, 18, 10, 2, 18, 5, 15, 1, 10, 17, 1, 4, 15, 17, 10, 11, 17, 1, 12, 4, 18, 19, 4, 3, 8, 10, 4, 2, 15, 15, 6, 8, 19, 0, 17, 11, 6, 19, 4, 11, 17, 6, 2, 13, 4, 9, 9, 8, 13, 19, 6, 1, 4, 0, 18, 2, 0, 19, 19, 3, 4, 10, 0, 8, 12, 7, 10, 7, 11, 19, 18, 11, 16, 3, 18, 15, 16, 1, 10, 18, 14, 12, 19, 1, 19, 8, 7, 8, 17, 0, 19, 6, 9, 9, 9, 9, 3, 2, 1, 15, 15, 8, 13, 5, 13, 1, 1, 11, 16, 6, 5, 12, 12, 11, 10, 1, 4, 18, 14, 2, 18, 3, 0, 9, 2, 8, 18, 10, 5, 14, 8, 3, 4, 4, 6, 2, 7, 8, 16, 14, 1, 18, 13, 0, 2, 8, 7, 2, 10, 11, 13, 18, 17, 17, 5, 7, 10, 1, 17, 9, 15, 7, 14, 18, 17, 6, 11, 4, 7, 8, 0, 5, 12, 17, 15, 6, 0, 3, 2, 1, 3, 6, 9, 0, 8 } + }, + new object[] + { + new double[] { 14, 12, 18, 19, 6, 13, 12, 2, 16, 19, 11, 11, 14, 9, 3, 11, 1, 18, 11, 18, 5, 5, 15, 2, 6, 12, 9, 4, 3, 5, 1, 9, 14, 17, 6, 7, 13, 2, 2, 4, 4, 3, 2, 18, 16, 2, 4, 8, 1, 11, 16, 3, 10, 8, 18, 1, 9, 1, 17, 6, 16, 10, 10, 10, 14, 3, 3, 2, 13, 1, 4, 1, 0, 1, 13, 3, 16, 6, 18, 12, 9, 14, 8, 0, 8, 3, 18, 4, 19, 10, 10, 6, 6, 0, 17, 16, 2, 5, 16, 8, 0, 12, 5, 1, 14, 16, 10, 1, 18, 7, 4, 9, 3, 0, 17, 15, 7, 14, 10, 0, 13, 16, 5, 9, 10, 10, 8, 15, 10, 9, 2, 4, 12, 5, 6, 13, 4, 18, 16, 17, 12, 9, 17, 4, 6, 16, 18, 15, 5, 16, 7, 6, 5, 10, 12, 6, 7, 15, 3, 7, 0, 15, 19, 10, 15, 3, 12, 6, 11, 16, 2, 6, 3, 2, 0, 14, 11, 18, 1, 1, 9, 8, 2, 4, 18, 15, 17, 13, 4, 0, 7, 15, 0, 18, 7, 6, 1, 0, 19, 18, 1, 8, 13, 0, 0, 17, 8, 4, 1, 15, 19, 8, 11, 8, 18, 2, 16, 9, 15, 17, 0, 15, 3, 18, 14, 8, 15, 19, 7, 6, 2, 14, 6, 6, 9, 17, 10, 1, 1, 3, 17, 6, 1, 19, 8, 0, 9, 7, 4, 19, 11, 9, 1, 0, 11, 14, 10, 3, 19, 15, 8, 15, 8, 1, 3, 8, 18, 14, 0, 8, 3, 5, 16, 4, 6, 3, 4, 7, 14, 9, 8, 0, 2, 4, 7, 4, 4, 4, 12, 18, 3, 11, 10, 12, 10, 13, 19, 16, 17, 18, 3, 11, 18, 13, 11, 0, 4, 10, 2, 1, 3, 0, 1, 18, 18, 16, 4, 15, 16, 1, 0, 11, 9, 5, 19, 16, 0, 17, 16, 19, 6, 12, 13, 12, 17, 2, 2, 4, 5, 11, 13, 17, 19, 2, 15, 14, 1, 9, 4, 18, 4, 17, 12, 9, 9, 10, 17, 15, 9, 8, 14, 9, 3, 9, 15, 17, 6, 8, 11, 7, 7, 17, 2, 3, 18, 10, 3, 14, 8, 10, 1, 16, 12, 19, 7, 14, 12, 6, 10, 3, 16, 1, 4, 2, 17, 18, 12, 9, 12, 5 } + }, + new object[] + { + new double[] { 10, 9, 7, 8, 18, 5, 17, 18, 11, 16, 19, 4, 7, 2, 12, 18, 13, 13, 7, 1, 11, 6, 16, 17, 6, 3, 3, 19, 1, 0, 16, 10, 0, 9, 13, 8, 5, 1, 16, 6, 11, 18, 12, 11, 7, 4, 11, 14, 11, 9, 14, 16, 9, 3, 0, 10, 9, 2, 9, 10, 16, 10, 8, 6, 13, 17, 9, 1, 17, 4, 12, 5, 7, 11, 15, 18, 8, 7, 12, 4, 16, 17, 3, 9, 19, 18, 7, 14, 3, 7, 13, 16, 5, 14, 14, 10, 15, 7, 1, 8, 15, 15, 18, 17, 14, 12, 16, 2, 5, 19, 0, 10, 11, 16, 1, 4, 18, 3, 8, 19, 12, 1, 0, 12, 7, 19, 14, 13, 2, 12, 15, 8, 14, 3, 8, 18, 1, 9, 15, 3, 0, 11, 2, 18, 3, 3, 9, 2, 0, 5, 14, 1, 0, 17, 8, 6, 8, 0, 9, 13, 17, 6, 7, 17, 4, 18, 3, 5, 6, 16, 5, 3, 3, 8, 19, 2, 13, 4, 2, 17, 18, 16, 6, 13, 6, 9, 18, 7, 4, 14, 19, 6, 17, 10, 3, 17, 17, 13, 15, 14, 12, 19, 5, 19, 15, 9, 9, 7, 19, 1, 9, 16, 1, 10, 12, 13, 12, 2, 6, 12, 10, 1, 3, 13, 4, 0, 17, 5, 12, 1, 18, 3, 18, 10, 4, 10, 8, 13, 11, 14, 13, 12, 16, 12, 6, 10, 19, 11, 19, 18, 0, 18, 0, 11, 12, 18, 6, 9, 18, 13, 13, 11, 12, 19, 10, 14, 12, 4, 8, 8, 14, 12, 1, 19, 1, 15, 10, 8, 17, 4, 5, 1, 13, 2, 11, 12, 8, 10, 18, 8, 19, 10, 16, 1, 12, 2, 10, 4, 4, 4, 11, 14, 16, 3, 16, 5, 6, 6, 10, 4, 6, 18, 9, 16, 6, 0, 2, 7, 2, 5, 19, 13, 2, 12, 11, 16, 9, 10, 17, 9, 15, 7, 18, 1, 9, 15, 9, 13, 17, 4, 16, 15, 9, 0, 1, 2, 18, 11, 3, 3, 17, 12, 3, 8, 18, 11, 7, 9, 11, 6, 5, 11, 2, 11, 19, 19, 9, 17, 3, 17, 7, 6, 6, 19, 1, 1, 12, 5, 18, 12, 17, 18, 11, 16, 13, 12, 8, 8, 4, 6, 18, 3, 5, 9, 17, 1, 14, 12, 9, 13 } + }, + new object[] + { + new double[] { 4, 16, 9, 19, 2, 11, 4, 7, 0, 11, 4, 0, 11, 8, 16, 8, 8, 5, 13, 8, 6, 19, 14, 19, 0, 1, 17, 19, 2, 14, 17, 9, 0, 5, 9, 9, 1, 9, 15, 8, 10, 2, 3, 9, 9, 17, 4, 5, 0, 6, 6, 1, 6, 8, 12, 12, 16, 18, 8, 12, 17, 13, 11, 11, 11, 3, 4, 1, 11, 17, 11, 14, 1, 11, 14, 15, 15, 13, 15, 4, 12, 11, 0, 14, 13, 17, 1, 18, 16, 17, 6, 17, 13, 7, 7, 11, 1, 19, 1, 4, 11, 13, 17, 14, 8, 8, 4, 9, 1, 11, 2, 3, 9, 2, 5, 16, 3, 8, 4, 4, 7, 6, 7, 7, 13, 4, 8, 12, 13, 12, 3, 1, 1, 4, 19, 4, 12, 16, 7, 15, 7, 0, 3, 4, 7, 19, 11, 2, 10, 19, 12, 7, 17, 5, 6, 1, 12, 14, 1, 13, 7, 12, 18, 9, 11, 16, 18, 8, 8, 7, 19, 4, 2, 12, 11, 11, 10, 0, 0, 6, 12, 10, 19, 14, 16, 6, 1, 8, 18, 5, 5, 0, 3, 10, 13, 9, 1, 14, 6, 13, 1, 14, 7, 3, 5, 15, 13, 5, 19, 14, 14, 0, 11, 13, 11, 2, 0, 11, 9, 9, 12, 3, 5, 14, 18, 2, 13, 15, 17, 19, 7, 1, 10, 11, 8, 11, 5, 12, 13, 11, 12, 8, 2, 2, 11, 18, 19, 9, 4, 5, 14, 12, 10, 0, 6, 15, 8, 14, 4, 9, 4, 2, 18, 16, 14, 14, 8, 14, 0, 1, 18, 6, 3, 8, 14, 3, 10, 5, 1, 19, 4, 14, 3, 1, 3, 8, 4, 13, 15, 2, 1, 1, 19, 3, 12, 8, 17, 9, 2, 19, 5, 10, 7, 0, 1, 0, 5, 6, 6, 11, 5, 0, 7, 6, 6, 17, 10, 3, 15, 8, 18, 10, 19, 4, 9, 13, 15, 1, 5, 17, 3, 4, 1, 13, 10, 1, 5, 7, 8, 18, 4, 3, 7, 14, 11, 10, 19, 0, 10, 18, 8, 17, 4, 15, 18, 7, 6, 3, 11, 17, 8, 10, 19, 11, 5, 8, 9, 12, 12, 3, 0, 0, 19, 12, 3, 18, 13, 9, 15, 8, 9, 6, 16, 8, 16, 13, 12, 7, 19, 0, 16, 16, 18, 8, 7, 10, 4, 17, 11, 16 } + }, + new object[] + { + new double[] { 17, 1, 14, 15, 18, 3, 15, 8, 2, 7, 18, 10, 19, 12, 4, 13, 5, 7, 2, 12, 0, 2, 16, 14, 10, 10, 18, 1, 7, 12, 0, 6, 14, 0, 12, 9, 18, 2, 17, 18, 5, 9, 19, 0, 16, 4, 12, 2, 5, 10, 10, 15, 19, 6, 9, 15, 0, 7, 7, 8, 19, 4, 14, 0, 9, 19, 18, 18, 9, 11, 4, 6, 11, 1, 13, 17, 11, 10, 15, 15, 0, 9, 9, 1, 9, 5, 2, 2, 7, 15, 5, 12, 5, 3, 10, 11, 11, 18, 8, 16, 13, 17, 16, 11, 1, 10, 17, 12, 19, 11, 0, 4, 11, 2, 6, 2, 6, 5, 4, 14, 17, 8, 11, 15, 14, 5, 10, 8, 11, 4, 1, 10, 17, 12, 19, 7, 4, 5, 12, 9, 18, 3, 10, 0, 8, 6, 19, 11, 1, 17, 12, 12, 3, 3, 4, 6, 4, 1, 18, 5, 15, 18, 4, 14, 12, 16, 6, 15, 2, 5, 13, 19, 3, 13, 12, 18, 19, 11, 14, 2, 1, 10, 2, 9, 10, 2, 5, 3, 12, 5, 18, 11, 7, 2, 2, 10, 14, 6, 19, 10, 7, 14, 14, 15, 19, 13, 14, 0, 2, 19, 6, 9, 10, 10, 18, 2, 17, 3, 15, 6, 2, 8, 6, 7, 10, 15, 0, 2, 19, 15, 3, 5, 13, 10, 13, 18, 17, 17, 11, 1, 17, 7, 16, 10, 11, 15, 2, 10, 13, 3, 9, 16, 16, 5, 9, 8, 2, 16, 15, 14, 1, 0, 1, 15, 19, 9, 5, 7, 11, 1, 17, 0, 1, 8, 3, 2, 11, 8, 16, 16, 5, 13, 7, 12, 16, 1, 4, 18, 11, 17, 1, 14, 19, 6, 8, 9, 16, 16, 16, 15, 8, 11, 10, 11, 8, 8, 15, 3, 19, 3, 17, 17, 14, 10, 0, 18, 13, 18, 11, 7, 18, 14, 11, 1, 7, 0, 6, 4, 11, 13, 17, 5, 3, 14, 2, 15, 3, 13, 10, 2, 6, 17, 4, 5, 1, 18, 16, 13, 10, 6, 8, 6, 14, 6, 19, 6, 7, 13, 6, 3, 3, 14, 11, 9, 17, 1, 19, 9, 18, 8, 17, 15, 9, 8, 0, 14, 14, 6, 14, 18, 9, 16, 10, 9, 15, 4, 1, 13, 2, 15, 4, 1, 7, 3, 6, 7, 9, 2, 13, 6 } + }, + new object[] + { + new double[] { 11, 5, 3, 6, 9, 4, 14, 17, 5, 15, 5, 11, 6, 1, 10, 14, 2, 9, 15, 10, 0, 6, 13, 1, 18, 5, 13, 3, 16, 12, 12, 16, 4, 8, 6, 9, 17, 2, 16, 12, 0, 11, 8, 7, 3, 4, 5, 18, 0, 6, 3, 9, 9, 13, 19, 9, 17, 17, 16, 2, 0, 16, 11, 3, 12, 1, 7, 11, 14, 15, 4, 17, 0, 14, 18, 3, 15, 1, 6, 5, 17, 2, 11, 11, 0, 6, 14, 5, 1, 2, 5, 17, 14, 14, 11, 0, 19, 13, 17, 14, 15, 19, 13, 14, 17, 18, 7, 1, 1, 14, 11, 0, 19, 4, 15, 11, 19, 15, 16, 5, 18, 10, 0, 1, 9, 3, 15, 17, 6, 17, 0, 11, 16, 5, 12, 10, 14, 10, 17, 9, 15, 9, 10, 6, 17, 18, 7, 17, 15, 16, 16, 0, 10, 8, 16, 10, 0, 7, 16, 5, 11, 2, 8, 8, 12, 9, 19, 0, 3, 15, 13, 6, 3, 4, 5, 16, 1, 0, 17, 2, 0, 2, 19, 18, 9, 14, 1, 19, 14, 10, 12, 15, 18, 3, 6, 1, 14, 4, 12, 6, 5, 19, 0, 0, 5, 12, 10, 3, 12, 4, 3, 6, 19, 7, 7, 19, 18, 10, 1, 8, 6, 13, 11, 8, 10, 5, 0, 4, 16, 6, 11, 7, 16, 16, 1, 4, 11, 18, 19, 4, 0, 11, 7, 7, 15, 5, 1, 7, 10, 6, 19, 4, 7, 9, 13, 5, 3, 9, 0, 11, 11, 7, 18, 2, 13, 16, 19, 8, 15, 9, 14, 3, 19, 13, 10, 6, 17, 14, 0, 18, 7, 10, 14, 17, 12, 19, 7, 16, 3, 3, 8, 11, 14, 1, 12, 19, 9, 17, 10, 13, 1, 5, 10, 12, 13, 9, 1, 10, 5, 14, 17, 10, 2, 0, 7, 13, 18, 8, 19, 13, 9, 10, 18, 18, 2, 1, 10, 15, 9, 17, 10, 12, 7, 10, 7, 19, 10, 4, 3, 18, 14, 9, 3, 9, 11, 4, 16, 17, 3, 11, 14, 9, 4, 18, 4, 18, 15, 0, 5, 2, 1, 2, 17, 17, 1, 14, 12, 15, 12, 12, 6, 12, 3, 12, 12, 2, 16, 12, 7, 11, 7, 18, 18, 13, 6, 3, 0, 0, 6, 15, 6, 4, 5, 13, 3, 10, 9, 12, 13, 3 } + }, + new object[] + { + new double[] { 9, 14, 7, 5, 2, 16, 13, 4, 10, 0, 6, 19, 3, 1, 0, 19, 10, 10, 1, 14, 6, 13, 12, 4, 19, 1, 11, 17, 6, 7, 0, 9, 0, 18, 12, 8, 5, 17, 16, 11, 3, 15, 7, 19, 10, 12, 2, 0, 5, 17, 17, 3, 11, 0, 6, 11, 3, 8, 6, 6, 10, 1, 18, 6, 1, 18, 12, 3, 5, 7, 10, 0, 14, 16, 11, 8, 13, 11, 18, 1, 15, 19, 7, 2, 6, 9, 14, 0, 16, 3, 4, 6, 1, 3, 6, 16, 4, 11, 13, 9, 0, 7, 8, 9, 10, 14, 1, 14, 7, 9, 5, 2, 1, 13, 12, 10, 12, 19, 17, 12, 6, 4, 17, 3, 18, 0, 1, 8, 13, 11, 0, 19, 2, 3, 5, 6, 11, 11, 11, 5, 7, 12, 13, 6, 1, 3, 12, 4, 4, 19, 12, 12, 7, 17, 12, 18, 5, 5, 18, 18, 10, 14, 17, 4, 16, 4, 18, 6, 16, 9, 11, 2, 3, 0, 1, 5, 2, 19, 14, 8, 1, 4, 12, 19, 5, 18, 6, 7, 12, 1, 5, 7, 12, 16, 18, 9, 2, 11, 11, 1, 8, 10, 7, 4, 9, 13, 0, 12, 15, 5, 15, 13, 17, 19, 9, 0, 3, 4, 16, 17, 11, 6, 12, 3, 14, 7, 8, 4, 4, 3, 17, 9, 9, 15, 0, 6, 14, 17, 11, 9, 10, 16, 9, 0, 17, 6, 19, 9, 19, 3, 4, 12, 17, 8, 6, 19, 7, 15, 4, 3, 8, 15, 2, 17, 17, 11, 4, 19, 2, 3, 12, 9, 5, 18, 14, 5, 15, 10, 10, 17, 6, 19, 0, 15, 18, 2, 7, 13, 18, 9, 14, 5, 10, 1, 16, 4, 0, 15, 1, 18, 16, 5, 7, 4, 6, 19, 12, 3, 2, 10, 0, 13, 8, 17, 19, 9, 7, 4, 11, 8, 6, 9, 2, 4, 1, 9, 17, 14, 18, 15, 7, 3, 0, 18, 0, 10, 0, 9, 19, 16, 10, 1, 17, 3, 9, 11, 19, 1, 3, 12, 10, 12, 14, 8, 12, 18, 18, 2, 9, 2, 2, 5, 13, 19, 14, 8, 10, 17, 1, 4, 4, 1, 12, 9, 7, 1, 5, 3, 9, 4, 3, 14, 8, 0, 18, 3, 9, 15, 7, 15, 12, 8, 12, 8, 15, 16, 0, 11, 10, 1 } + }, + new object[] + { + new double[] { 18, 10, 16, 0, 11, 17, 1, 16, 8, 14, 0, 4, 13, 12, 9, 17, 14, 8, 18, 14, 3, 6, 11, 17, 13, 14, 11, 10, 13, 7, 0, 13, 8, 12, 4, 8, 1, 5, 4, 13, 11, 17, 9, 5, 1, 3, 10, 15, 15, 0, 1, 11, 2, 0, 0, 19, 10, 19, 9, 15, 4, 15, 14, 5, 19, 7, 5, 11, 15, 3, 6, 8, 12, 9, 14, 7, 13, 4, 2, 15, 17, 19, 18, 8, 16, 7, 2, 19, 17, 15, 13, 14, 2, 8, 7, 16, 2, 5, 17, 13, 8, 15, 1, 3, 14, 6, 19, 19, 11, 14, 11, 14, 4, 13, 7, 19, 18, 0, 19, 2, 19, 18, 8, 8, 0, 2, 4, 17, 7, 4, 1, 18, 11, 3, 16, 5, 1, 14, 18, 4, 7, 2, 19, 15, 10, 11, 8, 16, 18, 15, 10, 6, 8, 11, 1, 15, 13, 16, 6, 14, 1, 0, 0, 2, 2, 2, 10, 4, 8, 18, 6, 1, 0, 8, 15, 0, 13, 11, 0, 2, 8, 15, 4, 17, 6, 17, 14, 15, 9, 18, 10, 19, 3, 7, 12, 2, 6, 2, 2, 17, 14, 18, 0, 7, 15, 7, 16, 6, 10, 10, 14, 6, 1, 5, 2, 7, 13, 6, 11, 5, 3, 0, 3, 9, 15, 15, 1, 10, 8, 17, 17, 3, 15, 12, 15, 6, 3, 0, 8, 17, 18, 7, 19, 5, 17, 16, 1, 19, 19, 14, 11, 17, 14, 1, 15, 16, 5, 15, 12, 14, 17, 19, 9, 3, 8, 6, 5, 0, 7, 15, 6, 18, 2, 7, 3, 15, 8, 5, 10, 3, 19, 0, 4, 18, 4, 3, 12, 12, 17, 3, 13, 8, 1, 12, 11, 1, 8, 14, 1, 19, 13, 4, 17, 8, 5, 14, 13, 17, 19, 12, 17, 13, 11, 17, 12, 3, 17, 19, 0, 14, 13, 7, 11, 1, 0, 3, 7, 1, 13, 10, 10, 12, 0, 1, 15, 4, 7, 6, 2, 13, 13, 2, 6, 4, 14, 9, 18, 16, 17, 1, 10, 8, 5, 16, 9, 6, 6, 6, 6, 11, 8, 13, 19, 18, 6, 7, 4, 8, 11, 14, 4, 19, 6, 5, 11, 14, 9, 3, 0, 4, 12, 19, 13, 10, 14, 12, 1, 4, 0, 0, 14, 1, 17, 10, 19, 1, 10, 16, 7, 17 } + }, + new object[] + { + new double[] { 9, 4, 15, 11, 12, 18, 17, 2, 10, 8, 0, 0, 19, 19, 14, 2, 3, 5, 2, 1, 10, 4, 4, 4, 6, 6, 7, 0, 13, 18, 7, 8, 5, 8, 6, 16, 6, 18, 14, 19, 4, 12, 1, 15, 10, 2, 5, 6, 0, 18, 19, 19, 18, 17, 14, 14, 12, 3, 14, 17, 12, 2, 2, 9, 8, 16, 7, 12, 4, 14, 1, 19, 7, 17, 4, 0, 1, 10, 0, 5, 14, 0, 9, 6, 10, 11, 10, 19, 11, 5, 2, 7, 12, 12, 11, 19, 12, 18, 14, 18, 18, 13, 0, 1, 8, 19, 17, 5, 0, 0, 13, 1, 12, 1, 15, 12, 12, 5, 0, 0, 10, 15, 12, 12, 2, 2, 15, 11, 8, 11, 19, 2, 2, 5, 18, 15, 2, 12, 11, 15, 2, 11, 4, 7, 18, 15, 3, 1, 13, 7, 10, 11, 14, 7, 18, 13, 12, 6, 7, 19, 7, 9, 9, 17, 9, 1, 17, 14, 5, 11, 15, 2, 12, 15, 7, 6, 9, 16, 19, 1, 8, 15, 13, 13, 9, 8, 17, 8, 5, 9, 2, 18, 8, 4, 13, 8, 18, 16, 19, 16, 13, 14, 1, 0, 5, 8, 4, 7, 9, 17, 9, 6, 19, 3, 18, 15, 0, 5, 5, 13, 13, 5, 17, 11, 16, 7, 2, 1, 11, 5, 8, 8, 0, 10, 1, 11, 12, 9, 2, 12, 6, 13, 12, 9, 0, 9, 13, 4, 5, 9, 3, 19, 0, 8, 7, 18, 13, 0, 15, 4, 16, 2, 8, 11, 12, 8, 14, 3, 14, 1, 16, 6, 12, 11, 1, 2, 13, 2, 6, 8, 10, 6, 10, 15, 9, 6, 19, 0, 16, 12, 14, 1, 6, 4, 0, 14, 11, 18, 1, 15, 11, 10, 17, 5, 13, 11, 4, 8, 10, 18, 6, 1, 1, 4, 17, 16, 3, 4, 9, 0, 7, 4, 1, 0, 8, 5, 2, 18, 7, 13, 10, 14, 10, 18, 5, 6, 2, 4, 1, 15, 7, 1, 6, 10, 4, 12, 9, 6, 3, 4, 7, 14, 16, 9, 2, 12, 2, 16, 16, 8, 12, 12, 9, 3, 11, 6, 17, 14, 4, 10, 18, 9, 16, 8, 15, 16, 14, 3, 7, 15, 19, 7, 7, 15, 3, 1, 17, 14, 1, 16, 10, 3, 9, 1, 11, 18, 1, 8, 5, 10 } + }, + new object[] + { + new double[] { 13, 12, 0, 6, 18, 18, 11, 16, 10, 10, 10, 8, 6, 7, 17, 16, 4, 16, 8, 9, 11, 10, 5, 0, 12, 0, 14, 6, 2, 1, 13, 1, 9, 4, 16, 6, 19, 4, 14, 10, 18, 18, 7, 17, 8, 7, 13, 7, 12, 10, 11, 0, 15, 8, 15, 5, 19, 16, 2, 5, 6, 16, 3, 18, 3, 12, 15, 1, 5, 17, 17, 15, 18, 1, 7, 15, 9, 1, 18, 3, 10, 3, 19, 5, 11, 8, 7, 15, 7, 18, 14, 19, 12, 12, 15, 17, 14, 16, 2, 19, 6, 14, 7, 2, 6, 11, 8, 2, 6, 16, 0, 8, 10, 12, 7, 2, 19, 1, 10, 19, 16, 7, 10, 13, 2, 3, 5, 19, 5, 4, 18, 19, 10, 15, 19, 11, 1, 1, 0, 4, 1, 3, 18, 1, 15, 1, 14, 5, 15, 1, 4, 10, 8, 14, 1, 0, 15, 19, 18, 11, 13, 12, 3, 15, 1, 16, 4, 5, 15, 13, 9, 14, 1, 3, 15, 11, 4, 16, 8, 16, 8, 9, 13, 16, 19, 9, 3, 12, 11, 1, 8, 2, 10, 13, 11, 1, 14, 0, 13, 13, 10, 10, 9, 16, 12, 7, 15, 11, 19, 7, 19, 5, 5, 3, 11, 15, 14, 12, 18, 7, 7, 4, 10, 14, 17, 3, 15, 13, 19, 6, 1, 16, 19, 9, 6, 9, 5, 18, 8, 15, 17, 14, 4, 13, 13, 17, 11, 12, 4, 3, 11, 10, 7, 15, 13, 19, 4, 4, 3, 10, 7, 8, 9, 17, 10, 17, 6, 13, 1, 1, 3, 5, 14, 9, 10, 19, 5, 19, 5, 5, 18, 17, 4, 1, 7, 13, 8, 10, 18, 10, 12, 0, 16, 10, 12, 1, 14, 12, 9, 15, 18, 12, 1, 8, 7, 12, 0, 13, 18, 12, 16, 18, 14, 6, 2, 8, 19, 5, 0, 7, 12, 14, 13, 19, 7, 10, 11, 4, 9, 2, 11, 10, 9, 13, 18, 9, 12, 0, 12, 3, 1, 10, 4, 11, 19, 7, 2, 19, 8, 9, 0, 6, 3, 8, 10, 12, 2, 0, 1, 4, 2, 1, 2, 9, 5, 18, 9, 18, 2, 18, 3, 18, 16, 3, 6, 13, 2, 16, 9, 12, 11, 8, 2, 16, 5, 14, 8, 3, 7, 8, 16, 15, 1, 13, 7, 18, 17, 7, 12, 5 } + }, + new object[] + { + new double[] { 17, 14, 17, 11, 4, 18, 1, 14, 0, 11, 9, 6, 17, 19, 18, 15, 7, 8, 9, 7, 9, 19, 16, 3, 11, 12, 15, 11, 13, 1, 4, 19, 1, 13, 12, 12, 2, 19, 18, 4, 14, 12, 8, 0, 16, 8, 8, 9, 18, 15, 9, 5, 2, 5, 2, 6, 11, 12, 13, 5, 8, 5, 9, 17, 2, 12, 13, 8, 13, 12, 0, 16, 4, 3, 17, 14, 10, 9, 17, 0, 9, 8, 4, 2, 4, 8, 12, 8, 12, 12, 4, 14, 7, 5, 19, 13, 15, 13, 1, 2, 7, 1, 19, 10, 9, 17, 2, 13, 16, 17, 4, 1, 10, 18, 15, 3, 16, 2, 4, 7, 13, 11, 2, 16, 13, 2, 13, 9, 11, 7, 18, 13, 2, 14, 3, 18, 8, 1, 2, 8, 17, 17, 16, 15, 15, 9, 1, 15, 2, 18, 6, 12, 11, 5, 3, 12, 16, 1, 5, 1, 19, 15, 3, 15, 5, 5, 11, 5, 1, 4, 8, 15, 6, 14, 18, 13, 10, 7, 16, 7, 17, 10, 1, 8, 5, 8, 15, 15, 15, 2, 17, 2, 18, 18, 5, 7, 9, 13, 15, 6, 10, 18, 7, 18, 11, 2, 19, 2, 4, 15, 2, 18, 7, 6, 8, 15, 7, 15, 14, 6, 1, 8, 15, 6, 19, 16, 1, 9, 1, 10, 13, 6, 1, 10, 16, 9, 13, 19, 12, 12, 9, 0, 18, 10, 5, 0, 15, 4, 13, 19, 17, 1, 8, 16, 10, 3, 5, 11, 19, 12, 0, 15, 9, 2, 17, 17, 17, 16, 0, 18, 15, 18, 15, 9, 5, 1, 1, 0, 10, 9, 5, 2, 3, 16, 17, 3, 19, 13, 8, 17, 10, 8, 15, 2, 5, 6, 7, 6, 3, 6, 1, 2, 2, 10, 10, 19, 8, 16, 11, 17, 16, 12, 18, 1, 4, 6, 17, 12, 16, 0, 12, 18, 6, 12, 13, 19, 10, 11, 2, 12, 3, 12, 9, 5, 2, 16, 10, 12, 1, 6, 0, 12, 17, 1, 14, 7, 9, 18, 11, 19, 3, 11, 18, 4, 12, 10, 14, 17, 16, 0, 12, 9, 3, 5, 10, 14, 18, 17, 10, 17, 7, 7, 12, 10, 6, 13, 7, 19, 1, 14, 19, 13, 9, 18, 16, 8, 11, 6, 7, 10, 17, 18, 15, 10, 16, 9, 19, 8, 15, 16 } + }, + new object[] + { + new double[] { 15, 18, 18, 12, 3, 4, 4, 17, 0, 0, 17, 19, 13, 9, 13, 11, 10, 11, 8, 14, 0, 10, 16, 16, 19, 14, 14, 19, 3, 4, 16, 16, 5, 9, 7, 4, 19, 6, 4, 11, 15, 13, 12, 14, 11, 18, 1, 7, 17, 15, 19, 12, 17, 1, 8, 7, 9, 10, 17, 14, 3, 0, 17, 8, 18, 4, 17, 16, 9, 1, 13, 15, 1, 15, 0, 17, 0, 19, 5, 6, 5, 13, 13, 9, 16, 10, 1, 8, 15, 14, 2, 9, 15, 9, 16, 10, 16, 17, 15, 19, 8, 0, 15, 10, 0, 7, 18, 10, 7, 3, 7, 10, 9, 1, 14, 2, 14, 11, 12, 6, 13, 15, 8, 13, 1, 0, 7, 15, 18, 15, 13, 19, 5, 1, 5, 8, 4, 17, 6, 4, 8, 2, 6, 6, 8, 1, 18, 16, 18, 15, 16, 15, 0, 15, 6, 2, 10, 17, 3, 19, 2, 5, 15, 13, 9, 6, 12, 13, 19, 1, 1, 12, 14, 7, 9, 18, 18, 3, 11, 0, 0, 19, 13, 15, 11, 8, 19, 2, 7, 9, 15, 18, 13, 3, 1, 11, 9, 12, 6, 17, 13, 12, 11, 14, 5, 19, 16, 19, 6, 7, 15, 13, 10, 4, 4, 17, 1, 6, 14, 13, 16, 19, 14, 17, 16, 12, 12, 13, 4, 12, 16, 12, 0, 5, 6, 7, 9, 2, 3, 11, 16, 14, 15, 5, 0, 19, 6, 3, 11, 19, 5, 8, 12, 0, 19, 7, 2, 5, 4, 2, 10, 17, 11, 1, 2, 4, 6, 17, 4, 19, 14, 8, 16, 0, 16, 17, 11, 17, 2, 7, 3, 16, 5, 8, 5, 0, 0, 4, 14, 8, 16, 5, 16, 17, 10, 4, 12, 9, 11, 12, 17, 4, 15, 2, 12, 10, 2, 7, 11, 9, 0, 12, 15, 14, 13, 12, 0, 18, 2, 19, 8, 9, 14, 17, 8, 5, 16, 4, 12, 11, 15, 1, 0, 3, 1, 8, 12, 15, 5, 1, 14, 15, 15, 18, 11, 16, 1, 11, 4, 2, 19, 19, 1, 1, 11, 8, 12, 4, 5, 17, 6, 17, 17, 2, 2, 12, 1, 5, 5, 14, 14, 16, 5, 15, 15, 15, 0, 1, 12, 2, 19, 14, 10, 9, 17, 10, 1, 17, 13, 17, 18, 14, 7, 18, 16, 17, 7, 17, 13, 0 } + }, + new object[] + { + new double[] { 3, 18, 8, 6, 5, 8, 4, 4, 15, 4, 13, 2, 14, 19, 16, 7, 7, 9, 4, 7, 10, 4, 15, 13, 18, 2, 14, 17, 14, 10, 11, 17, 0, 12, 5, 18, 18, 13, 2, 16, 3, 15, 9, 15, 19, 1, 7, 1, 14, 11, 19, 5, 11, 10, 8, 5, 15, 15, 8, 3, 18, 0, 3, 11, 14, 9, 9, 13, 14, 3, 16, 15, 17, 19, 6, 10, 10, 12, 14, 7, 6, 18, 12, 0, 18, 0, 13, 6, 6, 4, 3, 5, 5, 1, 16, 8, 8, 7, 9, 15, 4, 7, 2, 1, 16, 9, 5, 9, 13, 8, 14, 5, 0, 19, 3, 11, 11, 11, 15, 10, 0, 1, 19, 17, 12, 19, 17, 2, 15, 17, 6, 18, 7, 17, 16, 4, 15, 13, 14, 1, 2, 9, 15, 0, 18, 15, 17, 0, 11, 19, 7, 7, 19, 3, 15, 12, 6, 6, 16, 4, 19, 11, 18, 3, 18, 11, 4, 8, 8, 7, 18, 3, 3, 4, 9, 0, 13, 0, 2, 12, 11, 14, 0, 17, 7, 16, 13, 2, 3, 14, 7, 3, 16, 13, 13, 1, 12, 19, 2, 2, 0, 18, 7, 14, 11, 10, 12, 0, 18, 3, 0, 2, 3, 18, 4, 13, 12, 14, 3, 9, 5, 10, 5, 5, 1, 2, 1, 16, 16, 3, 7, 9, 17, 13, 18, 15, 1, 3, 12, 12, 5, 8, 13, 7, 9, 11, 13, 14, 3, 9, 14, 5, 2, 9, 6, 14, 2, 11, 19, 3, 2, 15, 13, 1, 2, 15, 13, 19, 4, 11, 0, 16, 9, 19, 7, 15, 2, 14, 0, 19, 10, 0, 16, 7, 16, 17, 9, 11, 15, 17, 5, 10, 15, 18, 11, 18, 10, 12, 6, 5, 9, 5, 4, 14, 2, 19, 18, 13, 19, 15, 17, 15, 6, 12, 9, 11, 11, 7, 7, 7, 14, 14, 15, 4, 19, 19, 10, 19, 12, 15, 12, 3, 12, 6, 5, 14, 18, 19, 6, 4, 12, 3, 19, 5, 11, 16, 10, 10, 8, 11, 2, 11, 18, 8, 7, 1, 9, 3, 11, 2, 15, 13, 8, 10, 3, 19, 13, 10, 15, 5, 0, 10, 18, 11, 4, 18, 6, 5, 3, 14, 6, 11, 13, 1, 0, 10, 16, 12, 6, 6, 0, 13, 6, 3, 5, 0, 16, 16, 13, 18 } + }, + new object[] + { + new double[] { 9, 2, 11, 19, 16, 12, 2, 15, 0, 10, 12, 1, 15, 8, 8, 5, 9, 8, 7, 18, 4, 18, 16, 2, 5, 14, 17, 8, 4, 3, 8, 6, 7, 1, 9, 10, 10, 10, 8, 2, 2, 9, 11, 1, 15, 3, 8, 14, 13, 13, 7, 7, 1, 11, 10, 2, 9, 16, 0, 19, 13, 19, 6, 17, 7, 9, 5, 8, 18, 10, 15, 3, 18, 6, 1, 9, 6, 6, 13, 1, 2, 1, 14, 6, 2, 7, 18, 6, 7, 6, 6, 9, 15, 15, 6, 15, 19, 4, 11, 15, 10, 3, 8, 1, 3, 4, 3, 17, 8, 13, 15, 3, 1, 1, 15, 16, 9, 12, 10, 13, 16, 2, 8, 1, 18, 13, 1, 15, 4, 5, 5, 18, 5, 0, 4, 5, 19, 13, 12, 10, 17, 5, 6, 6, 9, 8, 3, 7, 8, 7, 11, 2, 4, 3, 14, 17, 15, 3, 17, 19, 16, 2, 18, 1, 14, 5, 8, 0, 11, 15, 15, 2, 3, 4, 4, 10, 7, 5, 13, 18, 11, 2, 1, 16, 4, 2, 1, 8, 1, 13, 15, 15, 18, 19, 2, 2, 14, 13, 19, 14, 9, 14, 1, 19, 16, 9, 0, 17, 2, 6, 1, 6, 8, 4, 15, 13, 0, 7, 8, 16, 0, 0, 4, 17, 9, 6, 19, 3, 12, 14, 3, 12, 9, 9, 4, 13, 9, 9, 3, 2, 19, 16, 12, 6, 5, 3, 13, 15, 10, 17, 14, 17, 15, 8, 18, 6, 17, 9, 5, 17, 19, 16, 8, 1, 17, 2, 17, 11, 19, 10, 17, 14, 19, 16, 2, 0, 0, 5, 6, 13, 11, 10, 14, 3, 1, 11, 14, 9, 8, 4, 14, 3, 11, 13, 19, 15, 5, 8, 11, 5, 2, 19, 9, 16, 2, 18, 5, 19, 6, 4, 9, 15, 4, 4, 1, 17, 5, 9, 11, 6, 14, 18, 0, 8, 12, 15, 1, 4, 6, 8, 13, 9, 17, 9, 14, 14, 6, 17, 1, 12, 11, 2, 18, 0, 0, 18, 19, 6, 18, 19, 3, 2, 12, 9, 17, 3, 1, 3, 18, 6, 2, 4, 4, 10, 3, 16, 11, 14, 17, 11, 15, 3, 18, 15, 17, 19, 8, 19, 16, 5, 7, 11, 10, 13, 7, 6, 13, 12, 6, 19, 12, 0, 2, 1, 8, 5, 12, 7, 7, 12 } + }, + new object[] + { + new double[] { 9, 3, 10, 4, 2, 4, 16, 16, 4, 7, 7, 17, 13, 16, 15, 15, 10, 6, 9, 14, 0, 11, 4, 2, 6, 18, 14, 3, 17, 16, 3, 6, 14, 9, 15, 5, 5, 8, 4, 11, 8, 14, 14, 19, 8, 9, 5, 18, 4, 9, 12, 16, 9, 10, 18, 1, 7, 6, 6, 13, 8, 13, 7, 15, 5, 13, 3, 5, 6, 19, 9, 9, 5, 16, 18, 3, 17, 9, 9, 13, 10, 13, 16, 4, 14, 15, 12, 2, 6, 2, 16, 8, 1, 3, 11, 17, 3, 0, 8, 13, 3, 16, 6, 0, 17, 16, 7, 3, 4, 15, 5, 9, 6, 5, 4, 7, 14, 18, 4, 13, 5, 15, 3, 15, 5, 2, 14, 18, 16, 1, 19, 17, 19, 16, 11, 7, 15, 14, 17, 16, 0, 18, 5, 2, 18, 7, 3, 19, 5, 14, 19, 18, 19, 13, 10, 18, 16, 19, 3, 2, 11, 7, 11, 0, 6, 15, 8, 9, 7, 12, 1, 13, 14, 12, 17, 19, 15, 11, 10, 4, 0, 4, 5, 4, 2, 10, 6, 14, 11, 18, 10, 19, 12, 1, 2, 18, 10, 13, 4, 6, 14, 6, 14, 8, 8, 6, 9, 0, 14, 4, 5, 13, 0, 17, 9, 5, 17, 3, 12, 5, 9, 13, 4, 2, 8, 19, 18, 8, 12, 6, 6, 14, 2, 9, 13, 7, 18, 16, 11, 10, 8, 2, 11, 9, 7, 8, 13, 5, 19, 5, 17, 4, 6, 17, 11, 5, 17, 6, 10, 12, 3, 15, 10, 2, 16, 18, 1, 3, 9, 16, 13, 16, 15, 15, 0, 0, 0, 15, 3, 13, 16, 14, 16, 8, 1, 6, 0, 19, 9, 11, 5, 19, 6, 15, 8, 1, 15, 7, 3, 15, 12, 14, 11, 19, 15, 3, 9, 4, 3, 7, 4, 3, 14, 14, 1, 18, 5, 1, 4, 11, 2, 2, 5, 8, 4, 6, 17, 0, 18, 2, 2, 14, 8, 15, 7, 17, 12, 16, 10, 2, 13, 11, 0, 2, 7, 2, 13, 15, 1, 12, 12, 2, 6, 10, 19, 8, 9, 18, 9, 16, 6, 0, 8, 16, 6, 8, 13, 10, 16, 3, 2, 14, 7, 17, 5, 6, 18, 10, 3, 5, 18, 11, 18, 4, 2, 5, 9, 12, 2, 19, 8, 2, 16, 9, 17, 9, 12, 1, 7, 0 } + }, + new object[] + { + new double[] { 18, 9, 7, 2, 5, 16, 13, 0, 4, 17, 1, 3, 0, 3, 8, 11, 3, 8, 1, 6, 17, 5, 14, 7, 6, 19, 16, 17, 9, 6, 11, 5, 7, 19, 11, 6, 1, 16, 9, 12, 2, 9, 2, 19, 16, 13, 9, 12, 5, 18, 15, 7, 8, 19, 15, 13, 4, 10, 4, 1, 17, 16, 10, 2, 15, 12, 17, 12, 16, 12, 10, 7, 16, 1, 16, 19, 15, 19, 4, 5, 16, 16, 16, 13, 8, 0, 14, 16, 13, 11, 16, 17, 3, 9, 13, 18, 1, 8, 2, 17, 14, 5, 14, 1, 4, 13, 3, 4, 8, 19, 15, 6, 9, 16, 6, 2, 5, 2, 18, 0, 4, 0, 11, 7, 7, 4, 3, 6, 4, 12, 10, 6, 2, 1, 12, 3, 1, 13, 4, 12, 17, 18, 19, 10, 2, 8, 11, 12, 19, 6, 19, 2, 0, 14, 16, 16, 12, 6, 15, 10, 15, 17, 7, 5, 4, 1, 15, 10, 18, 0, 15, 0, 11, 15, 10, 18, 3, 10, 17, 3, 6, 6, 8, 17, 10, 15, 15, 7, 2, 17, 11, 10, 16, 0, 15, 16, 5, 13, 2, 11, 10, 0, 8, 19, 14, 9, 16, 12, 11, 18, 14, 16, 18, 2, 12, 14, 15, 13, 10, 1, 15, 15, 8, 1, 1, 6, 6, 12, 5, 9, 10, 18, 15, 7, 8, 2, 15, 8, 12, 7, 17, 14, 0, 7, 15, 12, 7, 5, 14, 1, 3, 14, 15, 2, 13, 2, 8, 17, 0, 0, 8, 15, 14, 4, 14, 17, 3, 17, 9, 6, 2, 16, 7, 8, 14, 18, 6, 0, 1, 0, 0, 13, 13, 11, 4, 18, 19, 8, 19, 7, 10, 15, 11, 13, 1, 9, 1, 19, 6, 1, 8, 8, 17, 13, 12, 18, 1, 19, 0, 3, 2, 3, 11, 4, 17, 10, 14, 3, 6, 2, 13, 6, 2, 5, 18, 15, 2, 14, 10, 4, 13, 7, 0, 5, 7, 2, 1, 12, 2, 12, 17, 16, 12, 2, 14, 4, 6, 14, 12, 11, 11, 13, 10, 3, 16, 15, 1, 4, 6, 16, 0, 17, 17, 19, 9, 1, 5, 1, 1, 15, 17, 16, 3, 7, 6, 15, 13, 15, 13, 13, 5, 11, 5, 14, 17, 7, 2, 6, 11, 8, 2, 2, 1, 12, 5, 14, 9, 5, 18, 17 } + }, + new object[] + { + new double[] { 5, 14, 12, 16, 9, 6, 12, 17, 12, 17, 5, 5, 14, 1, 10, 13, 0, 11, 15, 9, 12, 4, 17, 11, 19, 8, 7, 2, 14, 12, 12, 16, 4, 4, 4, 18, 9, 6, 9, 7, 17, 8, 0, 10, 19, 13, 15, 10, 13, 17, 0, 12, 18, 17, 2, 12, 11, 2, 13, 13, 12, 12, 4, 11, 7, 6, 10, 0, 0, 2, 0, 13, 19, 17, 3, 1, 5, 11, 16, 11, 5, 2, 10, 10, 0, 9, 8, 18, 13, 2, 4, 8, 5, 9, 17, 2, 4, 18, 8, 5, 16, 18, 6, 4, 2, 0, 3, 3, 5, 0, 1, 17, 18, 2, 3, 3, 1, 13, 5, 12, 14, 14, 0, 18, 3, 6, 1, 16, 17, 9, 12, 16, 9, 3, 19, 9, 18, 1, 4, 4, 3, 12, 17, 9, 15, 18, 8, 4, 16, 14, 10, 7, 11, 17, 12, 4, 19, 2, 13, 10, 12, 6, 4, 19, 7, 19, 8, 0, 18, 11, 0, 6, 11, 7, 17, 9, 17, 14, 18, 5, 8, 9, 10, 6, 15, 16, 8, 5, 13, 16, 7, 5, 1, 3, 18, 19, 5, 15, 3, 11, 11, 11, 8, 7, 7, 11, 4, 15, 12, 3, 18, 15, 1, 0, 17, 9, 7, 1, 0, 14, 14, 9, 3, 19, 1, 15, 5, 14, 8, 12, 13, 3, 4, 17, 3, 3, 19, 4, 14, 5, 9, 13, 18, 9, 18, 5, 13, 7, 14, 4, 17, 16, 15, 8, 10, 8, 0, 10, 12, 18, 9, 15, 3, 2, 0, 13, 17, 16, 9, 18, 6, 7, 18, 9, 11, 1, 6, 10, 0, 10, 19, 0, 8, 15, 10, 15, 8, 18, 12, 1, 19, 5, 10, 14, 9, 11, 1, 12, 2, 12, 16, 5, 13, 4, 12, 14, 6, 3, 11, 13, 4, 3, 17, 10, 13, 14, 18, 15, 5, 14, 15, 6, 9, 16, 0, 7, 13, 15, 10, 2, 10, 3, 4, 8, 19, 15, 12, 12, 16, 5, 18, 1, 3, 7, 8, 16, 7, 5, 13, 15, 3, 12, 4, 7, 10, 10, 13, 9, 1, 14, 2, 0, 8, 1, 5, 1, 11, 16, 16, 9, 18, 1, 13, 9, 9, 14, 3, 13, 16, 0, 17, 16, 12, 12, 1, 10, 3, 13, 5, 1, 19, 9, 7, 9, 6, 0, 7, 14, 18, 18 } + } + }; + #endregion + + [Theory] + [MemberData(nameof(ModeData))] + public void Mode(double[] data, double expected) + { + Assert.Equal(expected, data.Mode(), PreciseDoubleComparer); + } + + [Theory] + [MemberData(nameof(ModeDataNaN))] + public void ModeNaN(double[] data) + { + Assert.Equal(double.NaN, data.Mode()); + } + } +} diff --git a/src/UglyToad.PdfPig.Tests/UglyToad.PdfPig.Tests.csproj b/src/UglyToad.PdfPig.Tests/UglyToad.PdfPig.Tests.csproj index 8604cd12..ef59c67f 100644 --- a/src/UglyToad.PdfPig.Tests/UglyToad.PdfPig.Tests.csproj +++ b/src/UglyToad.PdfPig.Tests/UglyToad.PdfPig.Tests.csproj @@ -99,6 +99,7 @@ +