From bd88cb581810b02f43459baf1ae34ba771d6c2b5 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 13 Aug 2017 06:19:05 +0530 Subject: [PATCH 001/251] Added Graphs --- pygorithm/data_structures/heap.py | 82 ------------------------------- tests/test_data_structure.py | 37 -------------- 2 files changed, 119 deletions(-) delete mode 100644 pygorithm/data_structures/heap.py diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py deleted file mode 100644 index d2945bd..0000000 --- a/pygorithm/data_structures/heap.py +++ /dev/null @@ -1,82 +0,0 @@ -# Author: ALLSTON MICKEY -# Contributed: OMKAR PATHAK -# Created On: 11th August 2017 - -from queue import Queue - -# min-heap implementation as priority queue -class Heap(Queue): - def parent_idx(self, idx): - return idx / 2 - - def left_child_idx(self, idx): - return (idx * 2) + 1 - - def right_child_idx(self, idx): - return (idx * 2) + 2 - - def insert(self, data): - super(Heap, self).enqueue(data) - if self.rear >= 1: # heap may need to be fixed - self.heapify_up() - - def heapify_up(self): - ''' - Start at the end of the tree (first enqueued item). - - Compare the rear item to its parent, swap if - the parent is larger than the child (min-heap property). - Repeat until the min-heap property is met. - ''' - child = self.rear - parent = self.parent_idx(child) - while self.queue[child] < self.queue[self.parent_idx(child)]: - # Swap (sift up) and update child:parent relation - self.queue[child], self.queue[parent] = self.queue[parent], self.queue[child] - child = parent - parent = self.parent_idx(child) - - def pop(self): - ''' Removes the lowest value element (highest priority) from the heap ''' - min = self.dequeue() - if self.rear >= 1: # heap may need to be fixed - self.heapify_down() - return min - - def favorite(self, parent): - ''' Determines which child has the highest priority by 3 cases ''' - left = self.left_child_idx(parent) - right = self.right_child_idx(parent) - - if left <= self.rear and right <= self.rear: # case 1: both nodes exist - if self.queue[left] <= self.queue[right]: - return left - else: - return right - elif left <= self.rear: # case 2: only left exists - return left - else: # case 3: no children (if left doesn't exist, neither can the right) - return None - - def heapify_down(self): - ''' - Select the root and sift down until min-heap property is met. - - While a favorite child exists, and that child is smaller - than the parent, swap them (sift down). - ''' - cur = ROOT = 0 # start at the root - fav = self.favorite(cur) # determine favorite child - while self.queue[fav] is not None: - if self.queue[cur] > self.queue[fav]: - # Swap (sift down) and update parent:favorite relation - fav = self.favorite(cur) - self.queue[cur], self.queue[fav] = self.queue[fav], self.queue[cur] - cur = fav - else: - return - - def get_code(self): - ''' returns the code for the current class ''' - import inspect - return inspect.getsource(Heap) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index f6901a6..6e798c5 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -4,13 +4,8 @@ stack, queue, linked_list, -<<<<<<< Updated upstream - tree) -======= tree, - heap, graph) ->>>>>>> Stashed changes class TestStack(unittest.TestCase): def test_stack(self): @@ -137,37 +132,6 @@ def test_binary_search_tree(self): self.assertTrue(root.find(8)) -<<<<<<< Updated upstream -======= -class TestHeap(unittest.TestCase): - def test_heap(self): - myHeap = heap.Heap(limit = 4) - myHeap.insert(2) # [2] - myHeap.insert(10) # [2, 10] - myHeap.insert(12) # [2, 10, 12] - myHeap.insert(3) # [2, 3, 10, 12] - - expectedResult = [2, 3, 10, 12] - self.assertEqual(myHeap.queue(), expectedResult) - - self.assertEqual(myHeap.pop(), 2) - expectedResult = [3, 10, 12] - self.assertEqual(myHeap.queue(), expectedResult) - - self.assertEqual(myHeap.pop(), 3) - expectedResult = [10, 12] - self.assertEqual(myHeap.queue(), expectedResult) - - self.assertEqual(myHeap.pop(), 10) - expectedResult = [12] - self.assertEqual(myHeap.queue(), expectedResult) - - self.assertEqual(myHeap.pop(), 12) - expectedResult = [] - self.assertEqual(myHeap.queue(), expectedResult) - - self.assertTrue(myHeap.is_empty()) - class TestGraph(unittest.TestCase): def test_topological_sort(self): myGraph = graph.TopologicalSort() @@ -182,6 +146,5 @@ def test_topological_sort(self): expectedResult = [5, 4, 2, 3, 1, 0] self.assertEqual(ans, expectedResult) ->>>>>>> Stashed changes if __name__ == '__main__': unittest.main() From 09af5d4b0ee209ae8256366026ebb5ed7ecdad68 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 13 Aug 2017 06:19:13 +0530 Subject: [PATCH 002/251] Added Graphs --- pygorithm/data_structures/graph.py | 60 ++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 pygorithm/data_structures/graph.py diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py new file mode 100644 index 0000000..56dcd11 --- /dev/null +++ b/pygorithm/data_structures/graph.py @@ -0,0 +1,60 @@ +# Author: OMKAR PATHAK +# Created On: 12th August 2017 + +class AdjacencyList(object): + def __init__(self): + self.graph = {} + self.count = 0 + + def print_graph(self): + for i in self.graph: + print(i,'->',' -> '.join([str(j) for j in self.graph[i]])) + + def add_edge(self, from_vertex, to_vertex): + ''' function to add an edge in the graph ''' + # check if vertex is already present + if from_vertex in self.graph.keys(): + self.graph[from_vertex].append(to_vertex) + self.count += 1 + else: + self.graph[from_vertex] = [to_vertex] + self.graph[to_vertex] = [] + self.count += 1 + + def get_code(self): + ''' returns the code for the current class ''' + import inspect + return inspect.getsource(AdjacencyList) + +class TopologicalSort(AdjacencyList): + def topological_sort(self): + visited = [False] * self.count # Marking all vertices as not visited + stack = [] # Stack for storing the vertex + for vertex in range(self.count): + # Call the recursive function only if not visited + if visited[vertex] == False: + self.topological_sort_rec(vertex, visited, stack) + + return stack + + # Recursive function for topological Sort + def topological_sort_rec(self, vertex, visited, stack): + + # Mark the current node in visited + visited[vertex] = True + + # mark all adjacent nodes of the current node + try: + for adjacent_node in self.graph[vertex]: + if visited[adjacent_node] == False: + self.topological_sort_rec(adjacent_node, visited, stack) + except KeyError: + return + + # Push current vertex to stack which stores the result + stack.insert(0,vertex) + + def get_code(self): + ''' returns the code for the current class ''' + import inspect + return inspect.getsource(TopologicalSort) From 098c360f716b78d26307221f61ad06e71a14a901 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 13 Aug 2017 06:54:09 +0530 Subject: [PATCH 003/251] Added functions to check cycle in directed and undirected graph --- pygorithm/data_structures/graph.py | 106 ++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 3 deletions(-) diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index 56dcd11..d1894cb 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -1,7 +1,7 @@ # Author: OMKAR PATHAK # Created On: 12th August 2017 -class AdjacencyList(object): +class Graph(object): def __init__(self): self.graph = {} self.count = 0 @@ -24,9 +24,9 @@ def add_edge(self, from_vertex, to_vertex): def get_code(self): ''' returns the code for the current class ''' import inspect - return inspect.getsource(AdjacencyList) + return inspect.getsource(Graph) -class TopologicalSort(AdjacencyList): +class TopologicalSort(Graph): def topological_sort(self): visited = [False] * self.count # Marking all vertices as not visited stack = [] # Stack for storing the vertex @@ -58,3 +58,103 @@ def get_code(self): ''' returns the code for the current class ''' import inspect return inspect.getsource(TopologicalSort) + +class CheckCycleDirected(object): + def __init__(self): + self.graph = {} + self.count = 0 + + def print_graph(self): + ''' for printing the contents of the graph ''' + for i in self.graph: + print(i,'->',' -> '.join([str(j) for j in self.graph[i]])) + + def add_edge(self, from_vertex, to_vertex): + ''' function to add an edge in the graph ''' + # check if vertex is already present + if from_vertex in self.graph.keys(): + self.graph[from_vertex].append(to_vertex) + self.count += 1 + else: + self.graph[from_vertex] = [to_vertex] + self.count += 1 + + def check_cycle(self): + ''' This function will return True if graph is cyclic else return False ''' + visited = [False] * len(self.graph) + stack = [False] * len(self.graph) + for vertex in range(len(self.graph)): + if visited[vertex] == False: + if self.check_cycle_rec(visited, stack, vertex) == True: + return True + return False + + def check_cycle_rec(self, visited, stack, vertex): + ''' Recursive function for finding the cycle ''' + # Mark the current node in visited and also add it to the stack + visited[vertex] = True + stack[vertex] = True + + # mark all adjacent nodes of the current node + for adjacentNode in self.graph[vertex]: + if visited[adjacentNode] == False: + if self.check_cycle_rec(visited, stack, adjacentNode) == True: + return True + elif stack[adjacentNode] == True: + return True + + # The node needs to be poped from + # recursion stack before function ends + stack[vertex] = False + return False + + def get_code(self): + ''' returns the code for the current class ''' + import inspect + return inspect.getsource(CheckCycleDirected) + +class CheckCycleUndirected(object): + def __init__(self): + self.graph = {} + self.count = 0 + + def print_graph(self): + ''' for printing the contents of the graph ''' + for i in self.graph: + print(i,'->',' -> '.join([str(j) for j in self.graph[i]])) + + def add_edge(self, fromVertex, toVertex): + ''' for adding the edge beween two vertices ''' + # check if vertex is already present, + if fromVertex in self.graph.keys() and toVertex in self.graph.keys(): + self.graph[fromVertex].append(toVertex) + self.graph[toVertex].append(fromVertex) + else: + # else make a new vertex + self.graph[fromVertex] = [toVertex] + self.graph[toVertex] = [fromVertex] + + def check_cycle(self): + ''' This function will return True if graph is cyclic else return False ''' + visited = [False] * len(self.graph) # Marking all vertices as not visited + for vertex in range(len(self.graph)): + # Call the recursive function only if not visited + if visited[vertex] == False: + if self.check_cycle_rec(visited, -1, vertex) == True: + return True + return False + + def check_cycle_rec(self, visited, parent, vertex): + ''' Recursive function for finding the cycle ''' + # Mark the current node in visited + visited[vertex] = True + + # mark all adjacent nodes of the current node + for adjacentNode in self.graph[vertex]: + if visited[adjacentNode] == False: + if self.check_cycle_rec(visited, vertex, adjacentNode) == True: + return True + elif parent != adjacentNode: + return True + + return False From d83c2b9b5f2772b0eab98b556b6b941417b19a40 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 13 Aug 2017 06:54:40 +0530 Subject: [PATCH 004/251] Added tests for checking cycles in directed and undirected graph --- tests/test_data_structure.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 6e798c5..63a52ea 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -146,5 +146,27 @@ def test_topological_sort(self): expectedResult = [5, 4, 2, 3, 1, 0] self.assertEqual(ans, expectedResult) + def test_cycle_in_directed_graph(self): + myGraph = graph.CheckCycleDirected() + myGraph.add_edge(0, 1) + myGraph.add_edge(0, 2) + myGraph.add_edge(1, 2) + myGraph.add_edge(2, 0) + myGraph.add_edge(2, 3) + myGraph.add_edge(3, 3) + + self.assertTrue(myGraph.check_cycle()) + + def test_cycle_in_undirected_graph(self): + myGraph = graph.CheckCycleUndirected() + myGraph.add_edge(0, 1) + myGraph.add_edge(0, 2) + myGraph.add_edge(1, 2) + myGraph.add_edge(2, 0) + myGraph.add_edge(2, 3) + myGraph.add_edge(3, 3) + + self.assertTrue(myGraph.check_cycle()) + if __name__ == '__main__': unittest.main() From 2a552ca5d1816a40a5bc4078cd8e7b7b27058b9b Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 13 Aug 2017 06:57:13 +0530 Subject: [PATCH 005/251] Added docstrings --- pygorithm/data_structures/graph.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index d1894cb..238405c 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -7,6 +7,7 @@ def __init__(self): self.count = 0 def print_graph(self): + ''' for printing the contents of the graph ''' for i in self.graph: print(i,'->',' -> '.join([str(j) for j in self.graph[i]])) @@ -28,6 +29,7 @@ def get_code(self): class TopologicalSort(Graph): def topological_sort(self): + ''' function for sorting graph elements using topological sort ''' visited = [False] * self.count # Marking all vertices as not visited stack = [] # Stack for storing the vertex for vertex in range(self.count): @@ -37,9 +39,8 @@ def topological_sort(self): return stack - # Recursive function for topological Sort def topological_sort_rec(self, vertex, visited, stack): - + ''' Recursive function for topological Sort ''' # Mark the current node in visited visited[vertex] = True From abb6e8dab77ad378d99825956d18204365431bf3 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 13 Aug 2017 11:32:34 +0530 Subject: [PATCH 006/251] Made some changes --- .../__pycache__/bubble_sort.cpython-35.pyc | Bin 1337 -> 1326 bytes .../__pycache__/bucket_sort.cpython-35.pyc | Bin 1763 -> 1785 bytes .../__pycache__/shell_sort.cpython-35.pyc | Bin 813 -> 837 bytes pygorithm/sorting/bucket_sort.py | 26 ++++++++-------- pygorithm/sorting/counting_sort.py | 14 ++++----- pygorithm/sorting/heap_sort.py | 28 +++++++++--------- pygorithm/sorting/merge_sort.py | 10 +++---- pygorithm/sorting/quick_sort.py | 14 ++++----- pygorithm/sorting/shell_sort.py | 16 +++++----- 9 files changed, 54 insertions(+), 54 deletions(-) diff --git a/pygorithm/sorting/__pycache__/bubble_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/bubble_sort.cpython-35.pyc index 812e2151fc11db7d1d273d05d982dcfcb5ca0067..df459d85766f9c3fcf7634b96a3201d35bad6fb6 100644 GIT binary patch delta 134 zcmV;10D1qp3a$zX77Yywe&LN-$FT`70V_){Xm4$0FK=yYVRCR`bZB8~FGO!+b!}yC zbaO99NmO$$aCv8Ma%psEZL>=Oi~#|tlh^`59v})JMsIQ;No{a)Z+2y5AVPIwVr*p~ oQ*Ux~Iv@&@PXkDkq60Sp0h8JTdjTMmRs@CtC6nC*Spx(N1s!!O)&Kwi delta 153 zcmZ3-wUdiejF*>ds%CrSi;bN6jKaqHrNu@1IhjfN1(hWk`FX~Arkj%)dl(r{PyWE< zXvU?00^IV86g+bait@`+Qxu#^lag{$6@v4NN~}=TP4;K@;6oNF;+Xu0MPl+MW*J77 Z$>*7?8I>n{v$Qd4Ouobt$;{5f3IN({C`$kU diff --git a/pygorithm/sorting/__pycache__/bucket_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/bucket_sort.cpython-35.pyc index 17b306441b829822580259e34e6f877e64fe00d4..7b40bf6687d031c0f0ed6548d5049f05978cdd4b 100644 GIT binary patch delta 74 zcmaFN`;(VbjF*>7_GN!$;6_e?(%jU%l45;# e&yZsMg39##qRf(v+|Am|3mF+%HlJq^VFCc8gc$Mw delta 52 zcmey#`d?!t!1{EeLa%)-X{rNu@1IhjfN1(hWk`FX~ArkkCa7cw%lpF diff --git a/pygorithm/sorting/__pycache__/shell_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/shell_sort.cpython-35.pyc index 3f45c70485cc869ecf1c43b91ea5544848a9ca10..ef060d49fc78c6030941eeabeaf539b790d65086 100644 GIT binary patch delta 67 zcmZ3>c9e}%jF*>7cW-y3#752#Mr|+sjQreG{rueQ#G-=4l8nS`eV6>?(%jU%l45;# W&yZsMg39##qRf(v+|31ydl>=NsTUyt delta 43 ycmX@gww8@kjF*>dm1cXS*hbC}MqwlU(&8fhoXjNsg36MN{5)el)6E@>dl>-?Z4EB~ diff --git a/pygorithm/sorting/bucket_sort.py b/pygorithm/sorting/bucket_sort.py index 4b5b743..f3cd55d 100644 --- a/pygorithm/sorting/bucket_sort.py +++ b/pygorithm/sorting/bucket_sort.py @@ -4,27 +4,27 @@ # Best O(n); Average O(n); Worst O(n) # bucket sort algorithm -def sort(myList, bucketSize = 5): +def sort(List, bucketSize = 5): from pygorithm.sorting import insertion_sort import math string = False - if(len(myList) == 0): + if(len(List) == 0): print('You don\'t have any elements in array!') - elif all(isinstance(element, str) for element in myList): + elif all(isinstance(element, str) for element in List): string = True - myList = [ord(element) for element in myList] + List = [ord(element) for element in List] - minValue = myList[0] - maxValue = myList[0] + minValue = List[0] + maxValue = List[0] # For finding minimum and maximum values - for i in range(0, len(myList)): - if myList[i] < minValue: - minValue = myList[i] - elif myList[i] > maxValue: - maxValue = myList[i] + for i in range(0, len(List)): + if List[i] < minValue: + minValue = List[i] + elif List[i] > maxValue: + maxValue = List[i] # Initialize buckets bucketCount = math.floor((maxValue - minValue) / bucketSize) + 1 @@ -33,8 +33,8 @@ def sort(myList, bucketSize = 5): buckets.append([]) # For putting values in buckets - for i in range(0, len(myList)): - buckets[math.floor((myList[i] - minValue) / bucketSize)].append(myList[i]) + for i in range(0, len(List)): + buckets[math.floor((List[i] - minValue) / bucketSize)].append(List[i]) # Sort buckets and place back into input array sortedArray = [] diff --git a/pygorithm/sorting/counting_sort.py b/pygorithm/sorting/counting_sort.py index 9c75216..8258340 100644 --- a/pygorithm/sorting/counting_sort.py +++ b/pygorithm/sorting/counting_sort.py @@ -4,25 +4,25 @@ # Best = Average = Worst = O(n + k) # counting sort algorithm -def sort(myList): +def sort(List): try: maxValue = 0 - for i in range(len(myList)): - if myList[i] > maxValue: - maxValue = myList[i] + for i in range(len(List)): + if List[i] > maxValue: + maxValue = List[i] buckets = [0] * (maxValue + 1) - for i in myList: + for i in List: buckets[i] += 1 i = 0 for j in range(maxValue + 1): for a in range(buckets[j]): - myList[i] = j + List[i] = j i += 1 - return myList + return List except TypeError: print('Counting Sort can only be applied to integers') diff --git a/pygorithm/sorting/heap_sort.py b/pygorithm/sorting/heap_sort.py index 85841d1..88ab798 100644 --- a/pygorithm/sorting/heap_sort.py +++ b/pygorithm/sorting/heap_sort.py @@ -4,33 +4,33 @@ # Best O(nlog(n)); Average O(nlog(n)); Worst O(nlog(n)) # heap sort algorithm -def sort(alist): - heapify(alist) # create the heap - end = len(alist) - 1 +def sort(List): + heapify(List) # create the heap + end = len(List) - 1 while end > 0: - alist[end], alist[0] = alist[0], alist[end] - shiftDown(alist, 0, end - 1) + List[end], List[0] = List[0], List[end] + shiftDown(List, 0, end - 1) end -= 1 - return alist + return List -def heapify(alist): +def heapify(List): ''' This function helps to maintain the heap property ''' - # start = (len(alist) - 2) // 2 (faster execution) - start = len(alist) // 2 + # start = (len(List) - 2) // 2 (faster execution) + start = len(List) // 2 while start >= 0: - shiftDown(alist, start, len(alist) - 1) + shiftDown(List, start, len(List) - 1) start -= 1 -def shiftDown(alist, start, end): +def shiftDown(List, start, end): root = start while root * 2 + 1 <= end: child = root * 2 + 1 # right child exists and is greater than left child - if child + 1 <= end and alist[child] < alist[child + 1]: + if child + 1 <= end and List[child] < List[child + 1]: child += 1 # if child is greater than root(parent), then swap their positions - if child <= end and alist[root] < alist[child]: - alist[root], alist[child] = alist[child], alist[root] + if child <= end and List[root] < List[child]: + List[root], List[child] = List[child], List[root] root = child else: return diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index f5dcd68..5044fbc 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -21,14 +21,14 @@ def merge(a,b): return c # Code for merge sort -def sort(x): +def sort(List): """ Function to sort an array using merge sort algorithm """ - if len(x) == 0 or len(x) == 1: - return x + if len(List) == 0 or len(List) == 1: + return List else: middle = len(x)//2 - a = sort(x[:middle]) - b = sort(x[middle:]) + a = sort(List[:middle]) + b = sort(List[middle:]) return merge(a,b) # time complexities diff --git a/pygorithm/sorting/quick_sort.py b/pygorithm/sorting/quick_sort.py index 45976b7..f462e6a 100644 --- a/pygorithm/sorting/quick_sort.py +++ b/pygorithm/sorting/quick_sort.py @@ -4,13 +4,13 @@ # Best = Average = O(nlog(n)), Worst = O(n ^ 2) # quick_sort algorithm -def sort(arr): - if len(arr) <= 1: - return arr - pivot = arr[len(arr) // 2] - left = [x for x in arr if x < pivot] - middle = [x for x in arr if x == pivot] - right = [x for x in arr if x > pivot] +def sort(List): + if len(List) <= 1: + return List + pivot = List[len(List) // 2] + left = [x for x in List if x < pivot] + middle = [x for x in List if x == pivot] + right = [x for x in List if x > pivot] return sort(left) + middle + sort(right) # time complexities diff --git a/pygorithm/sorting/shell_sort.py b/pygorithm/sorting/shell_sort.py index 96f7bda..af8da31 100644 --- a/pygorithm/sorting/shell_sort.py +++ b/pygorithm/sorting/shell_sort.py @@ -4,19 +4,19 @@ # Best Case O(n logn); Average Case O(depends on gap sequence); Worst Case O(n^2) # shell sort algorithm -def sort(myList): - gap = len(myList) // 2 +def sort(List): + gap = len(List) // 2 while gap > 0: - for i in range(gap, len(myList)): - currentItem = myList[i] + for i in range(gap, len(List)): + currentItem = List[i] j = i - while j >= gap and myList[j - gap] > currentItem: - myList[j] = myList[j - gap] + while j >= gap and List[j - gap] > currentItem: + List[j] = List[j - gap] j -= gap - myList[j] = currentItem + List[j] = currentItem gap //= 2 - return myList + return List # time complexities def time_complexities(): From 6426213f7b16a38b9cf41f77befd5b42eb3c16cd Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 13 Aug 2017 11:33:11 +0530 Subject: [PATCH 007/251] Modified docs for sorting --- docs/Sorting.rst | 171 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) diff --git a/docs/Sorting.rst b/docs/Sorting.rst index abcd41d..7af184c 100644 --- a/docs/Sorting.rst +++ b/docs/Sorting.rst @@ -69,3 +69,174 @@ Features # for printing the source code of bubble_sort print(bubble_sort.get_code()) + + +Bubble Sort +----------- + +* Functions and their uses + +.. function:: bubble_sort.sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +.. function:: bubble_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: bubble_sort.get_code() + +- **Return Value** : returns the code for the ``bubble_sort.sort()`` function + +* For improved Bubble sort + +.. function:: bubble_sort.improved_sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +Bucket Sort +----------- + +* Functions and their uses + +.. function:: bucket_sort.sort(List, bucketSize) + +- **List** : `list` or `array` to be sorted +- **bucketSize** : size of the bucket. Default is **5** +- **Return Value** : returns the sorted `list` + +.. function:: bucket_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: bucket_sort.get_code() + +- **Return Value** : returns the code for the ``bucket_sort.sort()`` function + +Counting Sort +------------- + +* Functions and their uses + +.. function:: counting_sort.sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +.. function:: counting_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: counting_sort.get_code() + +- **Return Value** : returns the code for the ``counting_sort.sort()`` function + +Heap Sort +--------- + +* Functions and their uses + +.. function:: heap_sort.sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +.. function:: heap_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: heap_sort.get_code() + +- **Return Value** : returns the code for the ``heap_sort.sort()`` function + +Insertion Sort +-------------- + +* Functions and their uses + +.. function:: insertion_sort.sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +.. function:: insertion_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: insertion_sort.get_code() + +- **Return Value** : returns the code for the ``insertion_sort.sort()`` function + +Merge Sort +---------- + +* Functions and their uses + +.. function:: merge_sort.sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +.. function:: merge_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: merge_sort.get_code() + +- **Return Value** : returns the code for the ``merge_sort.sort()`` function + +Quick Sort +---------- + +* Functions and their uses + +.. function:: quick_sort.sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +.. function:: quick_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: quick_sort.get_code() + +- **Return Value** : returns the code for the ``quick_sort.sort()`` function + +Selection Sort +-------------- + +* Functions and their uses + +.. function:: selection_sort.sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +.. function:: selection_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: selection_sort.get_code() + +- **Return Value** : returns the code for the ``selection_sort.sort()`` function + +Shell Sort +---------- + +* Functions and their uses + +.. function:: shell_sort.sort(List) + +- **List** : `list` or `array` to be sorted +- **Return Value** : returns the sorted `list` + +.. function:: shell_sort.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: shell_sort.get_code() + +- **Return Value** : returns the code for the ``shell_sort.sort()`` function From 908517a8a0cbec4833dbbb4031ca06d4e53fe88f Mon Sep 17 00:00:00 2001 From: Allston Mickey Date: Sun, 13 Aug 2017 00:18:43 -0700 Subject: [PATCH 008/251] Fix heap unit test --- pygorithm/data_structures/heap.py | 82 +++++++++++++++++++++++++++++++ tests/test_data_structure.py | 35 ++++++++++++- 2 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 pygorithm/data_structures/heap.py diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py new file mode 100644 index 0000000..d2945bd --- /dev/null +++ b/pygorithm/data_structures/heap.py @@ -0,0 +1,82 @@ +# Author: ALLSTON MICKEY +# Contributed: OMKAR PATHAK +# Created On: 11th August 2017 + +from queue import Queue + +# min-heap implementation as priority queue +class Heap(Queue): + def parent_idx(self, idx): + return idx / 2 + + def left_child_idx(self, idx): + return (idx * 2) + 1 + + def right_child_idx(self, idx): + return (idx * 2) + 2 + + def insert(self, data): + super(Heap, self).enqueue(data) + if self.rear >= 1: # heap may need to be fixed + self.heapify_up() + + def heapify_up(self): + ''' + Start at the end of the tree (first enqueued item). + + Compare the rear item to its parent, swap if + the parent is larger than the child (min-heap property). + Repeat until the min-heap property is met. + ''' + child = self.rear + parent = self.parent_idx(child) + while self.queue[child] < self.queue[self.parent_idx(child)]: + # Swap (sift up) and update child:parent relation + self.queue[child], self.queue[parent] = self.queue[parent], self.queue[child] + child = parent + parent = self.parent_idx(child) + + def pop(self): + ''' Removes the lowest value element (highest priority) from the heap ''' + min = self.dequeue() + if self.rear >= 1: # heap may need to be fixed + self.heapify_down() + return min + + def favorite(self, parent): + ''' Determines which child has the highest priority by 3 cases ''' + left = self.left_child_idx(parent) + right = self.right_child_idx(parent) + + if left <= self.rear and right <= self.rear: # case 1: both nodes exist + if self.queue[left] <= self.queue[right]: + return left + else: + return right + elif left <= self.rear: # case 2: only left exists + return left + else: # case 3: no children (if left doesn't exist, neither can the right) + return None + + def heapify_down(self): + ''' + Select the root and sift down until min-heap property is met. + + While a favorite child exists, and that child is smaller + than the parent, swap them (sift down). + ''' + cur = ROOT = 0 # start at the root + fav = self.favorite(cur) # determine favorite child + while self.queue[fav] is not None: + if self.queue[cur] > self.queue[fav]: + # Swap (sift down) and update parent:favorite relation + fav = self.favorite(cur) + self.queue[cur], self.queue[fav] = self.queue[fav], self.queue[cur] + cur = fav + else: + return + + def get_code(self): + ''' returns the code for the current class ''' + import inspect + return inspect.getsource(Heap) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 63a52ea..2e92f48 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -5,7 +5,8 @@ queue, linked_list, tree, - graph) + graph, + heap) class TestStack(unittest.TestCase): def test_stack(self): @@ -168,5 +169,37 @@ def test_cycle_in_undirected_graph(self): self.assertTrue(myGraph.check_cycle()) +class TestHeap(unittest.TestCase): + def test_heap(self): + myHeap = heap.Heap() + myHeap.insert(6) + myHeap.insert(3) + myHeap.insert(5) + myHeap.insert(12) + myHeap.insert(1) + + expectedResult = [1, 3, 5, 12, 6] + self.assertEqual(myHeap.queue, expectedResult) + + self.assertEqual(myHeap.pop(), 1) + expectedResult = [3, 5, 12, 6] + self.assertEqual(myHeap.queue, expectedResult) + + self.assertEqual(myHeap.pop(), 3) + expectedResult = [5, 12, 6] + self.assertEqual(myHeap.queue, expectedResult) + + self.assertEqual(myHeap.pop(), 5) + expectedResult = [6, 12] + self.assertEqual(myHeap.queue, expectedResult) + + self.assertEqual(myHeap.pop(), 6) + expectedResult = [12] + self.assertEqual(myHeap.queue, expectedResult) + + self.assertEqual(myHeap.pop(), 12) + expectedResult = [] + self.assertEqual(myHeap.queue, expectedResult) + if __name__ == '__main__': unittest.main() From 6a937b4e893366f450ad9b82e27f57c95291f0de Mon Sep 17 00:00:00 2001 From: Allston Mickey Date: Sun, 13 Aug 2017 00:21:47 -0700 Subject: [PATCH 009/251] Made tests PEP 263 compatible. --- tests/test_data_structure.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 2e92f48..27dfd24 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import unittest from pygorithm.data_structures import ( From 2d8a3b4dfbd9cfb6c5368c1b4a04e2bd07e97f18 Mon Sep 17 00:00:00 2001 From: Allston Mickey Date: Sun, 13 Aug 2017 00:34:32 -0700 Subject: [PATCH 010/251] Add Big O time complexity --- pygorithm/data_structures/heap.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py index d2945bd..73c8f49 100644 --- a/pygorithm/data_structures/heap.py +++ b/pygorithm/data_structures/heap.py @@ -22,11 +22,14 @@ def insert(self, data): def heapify_up(self): ''' - Start at the end of the tree (first enqueued item). + Start at the end of the tree (last enqueued item). Compare the rear item to its parent, swap if the parent is larger than the child (min-heap property). Repeat until the min-heap property is met. + + Best Case: O(1), item is inserted at correct position, no swaps needed + Worst Case: O(logn), item needs to be swapped throughout all levels of tree ''' child = self.rear parent = self.parent_idx(child) @@ -37,7 +40,7 @@ def heapify_up(self): parent = self.parent_idx(child) def pop(self): - ''' Removes the lowest value element (highest priority) from the heap ''' + ''' Removes the lowest value element (highest priority, at root) from the heap ''' min = self.dequeue() if self.rear >= 1: # heap may need to be fixed self.heapify_down() @@ -64,6 +67,9 @@ def heapify_down(self): While a favorite child exists, and that child is smaller than the parent, swap them (sift down). + + Best Case: O(1), item is inserted at correct position, no swaps needed + Worst Case: O(logn), item needs to be swapped throughout all levels of tree ''' cur = ROOT = 0 # start at the root fav = self.favorite(cur) # determine favorite child @@ -76,6 +82,9 @@ def heapify_down(self): else: return + def time_complexities(self): + return '''[Insert & Pop] Best Case: O(1), Worst Case: O(logn)''' + def get_code(self): ''' returns the code for the current class ''' import inspect From 3709b28cb90d1efa96a03b56248440ce1695132a Mon Sep 17 00:00:00 2001 From: Allston Mickey Date: Sun, 13 Aug 2017 01:09:59 -0700 Subject: [PATCH 011/251] Made Py 3.6 compatible --- pygorithm/data_structures/heap.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py index 73c8f49..eeff675 100644 --- a/pygorithm/data_structures/heap.py +++ b/pygorithm/data_structures/heap.py @@ -7,7 +7,7 @@ # min-heap implementation as priority queue class Heap(Queue): def parent_idx(self, idx): - return idx / 2 + return idx // 2 def left_child_idx(self, idx): return (idx * 2) + 1 @@ -16,7 +16,7 @@ def right_child_idx(self, idx): return (idx * 2) + 2 def insert(self, data): - super(Heap, self).enqueue(data) + super().enqueue(data) if self.rear >= 1: # heap may need to be fixed self.heapify_up() @@ -41,7 +41,7 @@ def heapify_up(self): def pop(self): ''' Removes the lowest value element (highest priority, at root) from the heap ''' - min = self.dequeue() + min = super().dequeue() if self.rear >= 1: # heap may need to be fixed self.heapify_down() return min From 11eebf295b9e645516704478c92c765b0846b3c0 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 14 Aug 2017 07:47:25 +0530 Subject: [PATCH 012/251] Updated Docs --- docs/Searching.rst | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/Searching.rst b/docs/Searching.rst index 812d2ba..2218e46 100644 --- a/docs/Searching.rst +++ b/docs/Searching.rst @@ -36,7 +36,7 @@ Features >>> from pygorithm.searching import modules >>> modules() - ['binary_search', 'breadth_first_search', 'depth_first_search', 'linear_search'] + ['binary_search', 'breadth_first_search', 'depth_first_search', 'linear_search', 'quick_select'] * For Searching: Remember ``search()`` function in `binary_search` module takes two parameters as a sorted list and the target element to be searched. @@ -121,7 +121,7 @@ Breadth First Search - **graph** : takes the graph data structures with edges and vertices - **startVertex** : it tells the function the vertex to start with -- **Return Value** : returns the bfs for the ``graph`` +- **Return Value** : returns the `set` of bfs for the ``graph`` .. function:: breadth_first_search.time_complexities() @@ -141,7 +141,7 @@ Depth First Search - **graph** : takes the graph data structures with edges and vertices - **start** : it tells the function the vertex to start with - **path** : returns the list containing the required dfs -- **Return Value** : returns the bfs for the ``graph`` +- **Return Value** : returns the `list` of dfs for the ``graph`` .. function:: breadth_first_search.time_complexities() @@ -150,3 +150,22 @@ Depth First Search .. function:: breadth_first_search.get_code() - **Return Value** : returns the code for the ``depth_first_search.search()`` function + +Quick Select Search +------------------ + +* Functions and their uses + +.. function:: quick_select.search(array, n) + +- **array** : an unsorted array +- **n** : nth number to be searched in the given `array` +- **Return Value** : returns the nth element + +.. function:: quick_select.time_complexities() + +- **Return Value** : returns time complexities + +.. function:: quick_select.get_code() + +- **Return Value** : returns the code for the ``quick_select.search()`` function From ab6c03a51812f0e1dc39d56e89ee2fb8ac9ad288 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 14 Aug 2017 07:47:38 +0530 Subject: [PATCH 013/251] Typo fixes --- pygorithm/data_structures/graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index 238405c..db55cb6 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -60,7 +60,7 @@ def get_code(self): import inspect return inspect.getsource(TopologicalSort) -class CheckCycleDirected(object): +class CheckCycleDirectedGraph(object): def __init__(self): self.graph = {} self.count = 0 @@ -114,7 +114,7 @@ def get_code(self): import inspect return inspect.getsource(CheckCycleDirected) -class CheckCycleUndirected(object): +class CheckCycleUndirectedGraph(object): def __init__(self): self.graph = {} self.count = 0 From 63e0c2e8e6229ffbe025388a339d57e0f25bbdb2 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 14 Aug 2017 07:48:00 +0530 Subject: [PATCH 014/251] Added tests for checking cycle in graph --- tests/test_data_structure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 63a52ea..ea94aea 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -147,7 +147,7 @@ def test_topological_sort(self): self.assertEqual(ans, expectedResult) def test_cycle_in_directed_graph(self): - myGraph = graph.CheckCycleDirected() + myGraph = graph.CheckCycleDirectedGraph() myGraph.add_edge(0, 1) myGraph.add_edge(0, 2) myGraph.add_edge(1, 2) @@ -158,7 +158,7 @@ def test_cycle_in_directed_graph(self): self.assertTrue(myGraph.check_cycle()) def test_cycle_in_undirected_graph(self): - myGraph = graph.CheckCycleUndirected() + myGraph = graph.CheckCycleUndirectedGraph() myGraph.add_edge(0, 1) myGraph.add_edge(0, 2) myGraph.add_edge(1, 2) From 139d5d7eadca7a762291c69dff239de4c2890732 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 14 Aug 2017 07:50:20 +0530 Subject: [PATCH 015/251] Typo fixes --- .../__pycache__/counting_sort.cpython-35.pyc | Bin 939 -> 961 bytes .../__pycache__/heap_sort.cpython-35.pyc | Bin 1296 -> 1319 bytes .../__pycache__/merge_sort.cpython-35.pyc | Bin 1166 -> 1196 bytes .../__pycache__/quick_sort.cpython-35.pyc | Bin 1129 -> 1154 bytes .../__pycache__/shell_sort.cpython-35.pyc | Bin 837 -> 835 bytes pygorithm/sorting/merge_sort.py | 2 +- 6 files changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/sorting/__pycache__/counting_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/counting_sort.cpython-35.pyc index a5a6cf2336ee61362530c126054e29ee04552bda..d674d59ee8fdfbda15595a390561f38338ffe48a 100644 GIT binary patch delta 188 zcmZ3@evqA0jF*>d;>-TXw2hq08JTXeOy0t%Y{1RH!0^jgKO;XkRX;yBJF%!Bu_Plg zTi+!=ximL5ucTPt-7}c`e`y3fz%Z7fe4TYrfCzIr2t6~D+K@m delta 210 zcmX@ezM7p=jF*>d>%xY}l8v0p8Cjy(aw{iqVpNvkVqjqSWvX9VT%@0qnWSG(S(1^T zXRK#BnUyJ+k!NxwQ-&x=Nf8>sJ^31w5+m>ApG={}JV1F(#v(pcW!ymSEspfmlKABO zlvHIPub2f$Ffj5k76|}pKTYN$kj^4r5CIawumdP|i^C>2KczG$)s7v=1Dn7j!NURo Dcl#(^ diff --git a/pygorithm/sorting/__pycache__/heap_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/heap_sort.cpython-35.pyc index d7a309db2f21988697e7fc6cf9e5522acdb0c2a6..1032c24dd898402f0f2c61287dedefeacb2f0b6a 100644 GIT binary patch delta 137 zcmbQhwVaDnjF*?|!OQ;0gpHg6jJ7O3nZ+fym{apoRx%WEFfcIu^3>1B&rQ|O&&^IO zDo8BJNX*uE$xklLP0cGQ)_3;|Db_EjOwTXMEXl~-Y|p67#CU6RGV?V?{>fG>F^mF} gr?Y6u3IWaW(_}5;0@6jyAc7S{@Pi1U$@f@{0K(ZO`~Uy| delta 114 zcmZ3^HGzv$jF*?|)WU|y@{ODVjB2cjIhn;Jx0qA&QdTk)aWF72{4&%pEiTf}$xPBO zs4U6I&okCD-5kcK%)}Tqxr+H3Bj4memKa9<$?I6OWCelh{WMvNxPWvKGl*aX5quy* JaPn6cBLHBP9V!3- diff --git a/pygorithm/sorting/__pycache__/merge_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/merge_sort.cpython-35.pyc index 5bc54a4c73617fc76e6729b5905ad0925ce7832b..d2e6c41694eb4e27737bb665b1b185fae6e37c84 100644 GIT binary patch delta 229 zcmeC>l<_NqUUmt`YY8KbtBenx(7s(yZMc4ARMVo63~w!TY#a%paAUP-aO zyJtwTenDk=eo>mKO0zxkH}giWGDcw|{nFwh{hZ7s{esGpjQl)fJ=4jn87HXLFfcST zGNdpwNYyejlrS;?`6(<6HH-|cObn7hnOY{G=;Q<@QAVc8WlT|G%tcHL3=Fqeit~#~ zinxGGO_p1X6_ejEDKYX+=4X}!lA6r(8TlulWKQAb1>lf_*H*o$41UDMr|+sjQreG{rueQ#G-=4l8nS`eV6>?(%jU%l45;# z&yZsMg39##qRf(v+|5OdZj5ZVSbQ>zOD6ASdd$c_c_DKQqu^u*7Lmz9EMmgK3=9l@ Tn#@I9K)Q$@L>mKO0zw(VIyZ4qp*>FX>pN$PG*vRL1jrsex9+O>E&ZFj<^MOIV13fx%Ccxrhr$7x94zp~)dEdH{tL7WDuC diff --git a/pygorithm/sorting/__pycache__/shell_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/shell_sort.cpython-35.pyc index ef060d49fc78c6030941eeabeaf539b790d65086..69bbc4f20b56d024d3ad1680a958c80ab330db29 100644 GIT binary patch delta 25 gcmX@gc9@M*jF*>7@pXSB+eS`ZMn;y+mW(`109BL)x&QzG delta 27 icmX@ic9e}%jF*>7cW-y3#70hCMrO9$%FX7CJWK#%e+G^K diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index 5044fbc..b30deba 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -26,7 +26,7 @@ def sort(List): if len(List) == 0 or len(List) == 1: return List else: - middle = len(x)//2 + middle = len(List)//2 a = sort(List[:middle]) b = sort(List[middle:]) return merge(a,b) From 95ec539e702a43b3411cb78a31b9512028f25e76 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 14 Aug 2017 07:54:57 +0530 Subject: [PATCH 016/251] Bug fixes, changed the queue DS to be used --- pygorithm/data_structures/heap.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py index eeff675..870f35e 100644 --- a/pygorithm/data_structures/heap.py +++ b/pygorithm/data_structures/heap.py @@ -2,10 +2,10 @@ # Contributed: OMKAR PATHAK # Created On: 11th August 2017 -from queue import Queue +from pygorithm.data_structures import queue # min-heap implementation as priority queue -class Heap(Queue): +class Heap(queue.Queue): def parent_idx(self, idx): return idx // 2 @@ -27,7 +27,7 @@ def heapify_up(self): Compare the rear item to its parent, swap if the parent is larger than the child (min-heap property). Repeat until the min-heap property is met. - + Best Case: O(1), item is inserted at correct position, no swaps needed Worst Case: O(logn), item needs to be swapped throughout all levels of tree ''' From a1b87fcf2fc1919a02964910eb16c248db36d60d Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 14 Aug 2017 07:55:10 +0530 Subject: [PATCH 017/251] Bug fixes, changed the queue DS to be used --- .../__pycache__/merge_sort.cpython-35.pyc | Bin 1196 -> 1193 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pygorithm/sorting/__pycache__/merge_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/merge_sort.cpython-35.pyc index d2e6c41694eb4e27737bb665b1b185fae6e37c84..169c4ece0f55df541231d3cf8d74c13750b54c99 100644 GIT binary patch delta 146 zcmZ3(xssDpjF*?|BFDr?fsLF-OsX{u49$!TDa;H~wTuiUj0`}23JXIGBSR|_gCtO< zmI)|2Ie|%(k!f-nQxqF>5fcLg!{nPxri{Fk`I#kwq$cxxM*hhsnNxUqfl@_WKthwT iNMLd!i^ya@7BLASpn#ty3s|BEtb`w=PH1usiva)yn;L8Y delta 149 zcmZ3Kr)$ From 301481d616bde6cc4d5e0d32635e2009f8bb88a6 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 14 Aug 2017 07:56:41 +0530 Subject: [PATCH 018/251] Updated TODO --- TODO.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index ebb47dd..50aa015 100644 --- a/TODO.md +++ b/TODO.md @@ -9,9 +9,9 @@ ### Graph -- [ ] Graph implementation -- [ ] Detect cycle in Graph -- [ ] Topological Sort +- [x] Graph implementation +- [x] Detect cycle in Graph +- [x] Topological Sort - [ ] Prim's Algorithm - [ ] Kruskal's Algorithm @@ -22,5 +22,5 @@ ### Heap -- [ ] Heap implementation -- [ ] Heap Sort +- [x] Heap implementation +- [x] Heap Sort From 660fb6aa32b598f1a542119292b5d1f4d69ca1be Mon Sep 17 00:00:00 2001 From: Michele De Vita Date: Mon, 14 Aug 2017 13:29:05 +0200 Subject: [PATCH 019/251] implemented krustal with relative unit test --- pygorithm/minimun_spanning_tree/__init__.py | 0 pygorithm/minimun_spanning_tree/kruskal.py | 51 +++++++++++++++++++++ tests/mst_weighted_graph_tests.py | 37 +++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 pygorithm/minimun_spanning_tree/__init__.py create mode 100644 pygorithm/minimun_spanning_tree/kruskal.py create mode 100644 tests/mst_weighted_graph_tests.py diff --git a/pygorithm/minimun_spanning_tree/__init__.py b/pygorithm/minimun_spanning_tree/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pygorithm/minimun_spanning_tree/kruskal.py b/pygorithm/minimun_spanning_tree/kruskal.py new file mode 100644 index 0000000..76d3ebb --- /dev/null +++ b/pygorithm/minimun_spanning_tree/kruskal.py @@ -0,0 +1,51 @@ +import copy + + +def get_nodes(edges_weighted: list): + return set(sum((edge for edge, weight in edges_weighted), ())) + + +def is_reversed(curr_edge, edge): + return curr_edge[0] == edge[1] and curr_edge[1] == edge[0] + + +def has_cycle(edges_w): + edges_w += [((b, a), weight) for (a, b), weight in edges_w] + for edge, weight in edges_w: + if rec_cycle_detector(edge, edge, copy.deepcopy(edges_w), 1): + return True + return False + + +def rec_cycle_detector(s_edge, curr_edge, edges_w, step=None): + if step > 2 and curr_edge[1] == s_edge[0]: + return True + neightbours = ((edge, weight) for edge, weight in edges_w if + curr_edge[1] == edge[0] and not is_reversed(curr_edge, edge)) + for neightbour in neightbours: + edges_w.remove(neightbour) + if rec_cycle_detector(s_edge, neightbour[0], edges_w, step + 1): + return True + return False + + +def vertex_of(edge_w: tuple) -> set: + return set(edge_w[0]) + + +def minimum_spanning_tree(edges_weighted: list): + """ + :param edges_weighted: A list of pair with first element the edge as tuple (e.g. (1,4)) + and the weight as second element + :return: + """ + edges_weighted.sort(key=lambda pair: pair[1]) + edges_list = [] + e_vertexes = set() + vertexes = get_nodes(edges_weighted) + while vertexes != e_vertexes: + edge_w = edges_weighted.pop(0) + if (len(edges_list) > 2 and not has_cycle(edges_list + [edge_w])) or len(edges_list) <= 2: + e_vertexes.update(vertex_of(edge_w)) + edges_list.append(edge_w) + return edges_list diff --git a/tests/mst_weighted_graph_tests.py b/tests/mst_weighted_graph_tests.py new file mode 100644 index 0000000..3a59ee4 --- /dev/null +++ b/tests/mst_weighted_graph_tests.py @@ -0,0 +1,37 @@ +import unittest + +from pygorithm.minimun_spanning_tree import kruskal + + +class KruskalTest(unittest.TestCase): + def test_get_nodes(self): + edge_weighted = [((1, 3), 5), ((2, 4), 10), ((4, 1), 4)] + nodes = kruskal.get_nodes(edge_weighted) + expected = {1, 2, 3, 4} + self.assertEqual(nodes, expected) + + def test_has_cycle(self): + edge_weighted = [((1, 3), 5), ((3, 4), 10), ((4, 1), 4)] + self.assertTrue(kruskal.has_cycle(edge_weighted)) + + def test_has_not_cycle(self): + edge_weighted = [((1, 3), 5), ((2, 4), 10), ((4, 1), 4)] + self.assertFalse(kruskal.has_cycle(edge_weighted)) + + def test_has_cycle_2(self): + edge_weighted = [((1, 3), 5), ((3, 2), 5), ((3, 4), 10), ((4, 1), 4)] + self.assertTrue(kruskal.has_cycle(edge_weighted)) + + def test_has_cycle_3(self): + edge_weighted = [((2, 3), 8), ((1, 4), 5), ((3, 5), 5), ((4, 6), 6), ((1, 2), 7), ((2, 5), 7)] + self.assertTrue(kruskal.has_cycle(edge_weighted)) + + def test_minimum_spanning_tree(self): + """ + test taken from the example at the following link: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm + """ + edge_weighted = [((1, 2), 7), ((2, 3), 8), ((1, 4), 5), ((2, 4), 9), + ((2, 5), 7), ((3, 5), 5), ((4, 6), 6), ((5, 6), 8), + ((5, 7), 9), ((6, 7), 11), ((4, 5), 15)] + expected = [((1, 4), 5), ((3, 5), 5), ((4, 6), 6), ((1, 2), 7), ((2, 5), 7), ((5, 7), 9)] + self.assertEqual(kruskal.minimum_spanning_tree(edge_weighted), expected) From 9dfebc61557796eefc6a1527e51f5684654e7e93 Mon Sep 17 00:00:00 2001 From: Michele De Vita Date: Mon, 14 Aug 2017 17:35:29 +0200 Subject: [PATCH 020/251] changed implementation of kruskal algorithm to union-find data structure to decrease time complexity. Write doc and adapt setup.py to pep8 style guide --- docs/Minumum spanning tree.rst | 25 ++++++++ docs/index.rst | 1 + pygorithm/minimun_spanning_tree/kruskal.py | 74 +++++++++++----------- setup.py | 18 +++--- tests/kruskal_mst_tests.py | 24 +++++++ tests/mst_weighted_graph_tests.py | 37 ----------- 6 files changed, 95 insertions(+), 84 deletions(-) create mode 100644 docs/Minumum spanning tree.rst create mode 100644 tests/kruskal_mst_tests.py delete mode 100644 tests/mst_weighted_graph_tests.py diff --git a/docs/Minumum spanning tree.rst b/docs/Minumum spanning tree.rst new file mode 100644 index 0000000..213cc5a --- /dev/null +++ b/docs/Minumum spanning tree.rst @@ -0,0 +1,25 @@ +======================= +Minimum spanning tree +======================= + + +Given a weighted connected graph (a graph with weights on the edges), the minimum spanning tree is a spanning tree that +minimize the weights of the edges. + + +========================== +Features +========================== + +* Algorithms implemented: + - Kruskal + +* To create the Minimum spanning tree use the *minimum_spanning_tree* function, it takes in input the list of weighted edges, that it is represented in python as a tuple composed by the edge, a tuple of two vertexes identified by numbers, and the weight, a number (e.g. ((2,5), 5)) + +* Code example: + +.. code-block:: python + + from pygorithm.minimum_spanning_tree import kruskal + edges_weighted = [((1,2), 4), ((2, 4), 5), ((1,3), 13), ((2, 3), 9), ((1, 4), 1)] + kruskal.minimum_spanning_tree(edges_weighted) #[((1, 4), 1), ((1, 2), 4), ((2, 3), 9)] \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index a9c0f2f..be5c22e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -15,6 +15,7 @@ Table of Contents: Sorting Searching + Minimum spanning tree ----------------- diff --git a/pygorithm/minimun_spanning_tree/kruskal.py b/pygorithm/minimun_spanning_tree/kruskal.py index 76d3ebb..500ee27 100644 --- a/pygorithm/minimun_spanning_tree/kruskal.py +++ b/pygorithm/minimun_spanning_tree/kruskal.py @@ -1,51 +1,49 @@ -import copy +""" +Kruskal algorithm for minimum spanning tree in a weighted graph with union–find data structure +""" +__author__ = "Michele De Vita " +__date__ = "14/07/2017" -def get_nodes(edges_weighted: list): +def get_vertexes(edges_weighted: list): return set(sum((edge for edge, weight in edges_weighted), ())) -def is_reversed(curr_edge, edge): - return curr_edge[0] == edge[1] and curr_edge[1] == edge[0] +def set_of(vertex, forest): + for tree in forest: + if vertex in tree: + return tree + return None -def has_cycle(edges_w): - edges_w += [((b, a), weight) for (a, b), weight in edges_w] - for edge, weight in edges_w: - if rec_cycle_detector(edge, edge, copy.deepcopy(edges_w), 1): - return True - return False - - -def rec_cycle_detector(s_edge, curr_edge, edges_w, step=None): - if step > 2 and curr_edge[1] == s_edge[0]: - return True - neightbours = ((edge, weight) for edge, weight in edges_w if - curr_edge[1] == edge[0] and not is_reversed(curr_edge, edge)) - for neightbour in neightbours: - edges_w.remove(neightbour) - if rec_cycle_detector(s_edge, neightbour[0], edges_w, step + 1): - return True - return False - - -def vertex_of(edge_w: tuple) -> set: - return set(edge_w[0]) +def union(u_set, v_set, forest): + forest.remove(u_set) + forest.remove(v_set) + forest.append(v_set + u_set) + return forest def minimum_spanning_tree(edges_weighted: list): """ - :param edges_weighted: A list of pair with first element the edge as tuple (e.g. (1,4)) - and the weight as second element - :return: + :param edges_weighted: A list of pair with first element the edge as tuple + and the weight as second element (e.g. ((1,4), 5) ) + :return: the list of edges explored """ edges_weighted.sort(key=lambda pair: pair[1]) - edges_list = [] - e_vertexes = set() - vertexes = get_nodes(edges_weighted) - while vertexes != e_vertexes: - edge_w = edges_weighted.pop(0) - if (len(edges_list) > 2 and not has_cycle(edges_list + [edge_w])) or len(edges_list) <= 2: - e_vertexes.update(vertex_of(edge_w)) - edges_list.append(edge_w) - return edges_list + edges_explored = [] + forest = [[v] for v in get_vertexes(edges_weighted)] + for (u, v), weight in edges_weighted: + u_set, v_set = set_of(u, forest), set_of(v, forest) + if u_set != v_set: + forest = union(u_set, v_set, forest) + edges_explored.append(((u, v), weight)) + return edges_explored + + +def time_complexities(): + return '''Worst case: O(E log(V)) where E in the number of edges and V the number of vertexes''' + + +def get_code(): + import inspect + return inspect.getsource(minimum_spanning_tree) diff --git a/setup.py b/setup.py index 7b14cc0..a4c0318 100644 --- a/setup.py +++ b/setup.py @@ -10,19 +10,19 @@ long_description = f.read() setup( - name = 'pygorithm', - version = '0.1.dev2', - description = 'A Python algorithms module for learning', - long_description = long_description, + name='pygorithm', + version='0.1.dev2', + description='A Python algorithms module for learning', + long_description=long_description, # The project's main homepage. url='https://github.com/OmkarPathak/pygorithms', # Author details - author = 'Omkar Pathak', - author_email = 'omkarpathak27@gmail.com', + author='Omkar Pathak', + author_email='omkarpathak27@gmail.com', # Choose your license - license = 'MIT', + license='MIT', # See https://pypi.python.org/pypi?%3Aaction=list_classifiers - classifiers = [ + classifiers=[ # Indicate who your project is intended for 'Intended Audience :: Developers', 'Topic :: Software Development :: Libraries', @@ -38,5 +38,5 @@ 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', ], - packages = find_packages() + packages=find_packages() ) diff --git a/tests/kruskal_mst_tests.py b/tests/kruskal_mst_tests.py new file mode 100644 index 0000000..b92eae6 --- /dev/null +++ b/tests/kruskal_mst_tests.py @@ -0,0 +1,24 @@ +import unittest + +from pygorithm.minimun_spanning_tree import kruskal + + +class KruskalTest(unittest.TestCase): + + def test_minimum_spanning_tree(self): + """ + test inspired from the example at the following link: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm + """ + edges_weighted = [((1, 2), 7), ((2, 3), 8), ((1, 4), 5), ((2, 4), 9), + ((2, 5), 7), ((3, 5), 5), ((4, 6), 6), ((5, 6), 8), + ((5, 7), 9), ((6, 7), 11), ((4, 5), 15)] + expected = [((1, 4), 5), ((3, 5), 5), ((4, 6), 6), ((1, 2), 7), ((2, 5), 7), ((5, 7), 9)] + self.assertEqual(kruskal.minimum_spanning_tree(edges_weighted), expected) + + def test_minimum_spanning_tree_2(self): + """ + Test inspired by the gif at the left of the page https://en.wikipedia.org/wiki/Kruskal%27s_algorithm + """ + edges_weighted = [((1,2), 3), ((1, 5), 1), ((2, 5), 4), ((2, 3), 5), ((3, 5), 6), ((3, 4), 2), ((4, 5), 7)] + expected = [((1, 5), 1), ((3, 4), 2), ((1, 2), 3), ((2, 3), 5)] + self.assertEqual(kruskal.minimum_spanning_tree(edges_weighted), expected) diff --git a/tests/mst_weighted_graph_tests.py b/tests/mst_weighted_graph_tests.py deleted file mode 100644 index 3a59ee4..0000000 --- a/tests/mst_weighted_graph_tests.py +++ /dev/null @@ -1,37 +0,0 @@ -import unittest - -from pygorithm.minimun_spanning_tree import kruskal - - -class KruskalTest(unittest.TestCase): - def test_get_nodes(self): - edge_weighted = [((1, 3), 5), ((2, 4), 10), ((4, 1), 4)] - nodes = kruskal.get_nodes(edge_weighted) - expected = {1, 2, 3, 4} - self.assertEqual(nodes, expected) - - def test_has_cycle(self): - edge_weighted = [((1, 3), 5), ((3, 4), 10), ((4, 1), 4)] - self.assertTrue(kruskal.has_cycle(edge_weighted)) - - def test_has_not_cycle(self): - edge_weighted = [((1, 3), 5), ((2, 4), 10), ((4, 1), 4)] - self.assertFalse(kruskal.has_cycle(edge_weighted)) - - def test_has_cycle_2(self): - edge_weighted = [((1, 3), 5), ((3, 2), 5), ((3, 4), 10), ((4, 1), 4)] - self.assertTrue(kruskal.has_cycle(edge_weighted)) - - def test_has_cycle_3(self): - edge_weighted = [((2, 3), 8), ((1, 4), 5), ((3, 5), 5), ((4, 6), 6), ((1, 2), 7), ((2, 5), 7)] - self.assertTrue(kruskal.has_cycle(edge_weighted)) - - def test_minimum_spanning_tree(self): - """ - test taken from the example at the following link: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm - """ - edge_weighted = [((1, 2), 7), ((2, 3), 8), ((1, 4), 5), ((2, 4), 9), - ((2, 5), 7), ((3, 5), 5), ((4, 6), 6), ((5, 6), 8), - ((5, 7), 9), ((6, 7), 11), ((4, 5), 15)] - expected = [((1, 4), 5), ((3, 5), 5), ((4, 6), 6), ((1, 2), 7), ((2, 5), 7), ((5, 7), 9)] - self.assertEqual(kruskal.minimum_spanning_tree(edge_weighted), expected) From d4bd356330c9bd638f13c8548202b872e1a12716 Mon Sep 17 00:00:00 2001 From: Michele De Vita Date: Mon, 14 Aug 2017 17:40:59 +0200 Subject: [PATCH 021/251] small change to doc --- docs/Minumum spanning tree.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Minumum spanning tree.rst b/docs/Minumum spanning tree.rst index 213cc5a..ffc6e12 100644 --- a/docs/Minumum spanning tree.rst +++ b/docs/Minumum spanning tree.rst @@ -3,7 +3,7 @@ Minimum spanning tree ======================= -Given a weighted connected graph (a graph with weights on the edges), the minimum spanning tree is a spanning tree that +Given a weighted connected undirected graph (weighted = graph with weights on the edges), the minimum spanning tree is a spanning tree that minimize the weights of the edges. From e1a6d735a0536d0f9cb495701e8786ebd358b471 Mon Sep 17 00:00:00 2001 From: dmytrostriletskyi Date: Tue, 15 Aug 2017 02:14:14 +0300 Subject: [PATCH 022/251] Fibonacci implementation (TODO) --- docs/Fibonacci.rst | 45 ++++++++++++++++++++++++++++++++ pygorithm/fibonacci/__init__.py | 2 ++ pygorithm/fibonacci/cache.py | 37 ++++++++++++++++++++++++++ pygorithm/fibonacci/recursion.py | 37 ++++++++++++++++++++++++++ tests/test_fibonacci.py | 32 +++++++++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100644 docs/Fibonacci.rst create mode 100644 pygorithm/fibonacci/__init__.py create mode 100644 pygorithm/fibonacci/cache.py create mode 100644 pygorithm/fibonacci/recursion.py create mode 100644 tests/test_fibonacci.py diff --git a/docs/Fibonacci.rst b/docs/Fibonacci.rst new file mode 100644 index 0000000..cdfe7ef --- /dev/null +++ b/docs/Fibonacci.rst @@ -0,0 +1,45 @@ +========= +Fibonacci +========= + +Learning fibonacci implementations in few ways! + +Quick Start Guide +----------------- + +.. code-block:: python + + from pygorithm.fibonacci import recursion as fib_recursion + + sequence = fib_recursion.get_sequence(10) + print(sequence) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] + +Features +-------- + +* Fibonacci implementations available: + - Recursion + - Cache (with save results of particular numbers) + +* Get the code used for any of the implementation + +.. code:: python + + from pygorithm.fibonacci import recursion as fib_recursion + + code = fib_recursion.get_code() + print(code) + +Implementations API +------------------- + +* Functions and their uses + +.. function:: get_sequence(number) + +- **number** : arbitrary integer, that need to be calculated in Fibonacci number type +- **Return Value** : return Fibonacci value by specified number as integer + +.. function:: get_code() + +- **Return Value** : returns the code for the ``get_sequence()`` function diff --git a/pygorithm/fibonacci/__init__.py b/pygorithm/fibonacci/__init__.py new file mode 100644 index 0000000..0c5f498 --- /dev/null +++ b/pygorithm/fibonacci/__init__.py @@ -0,0 +1,2 @@ +from pygorithm.fibonacci import cache +from pygorithm.fibonacci import recursion diff --git a/pygorithm/fibonacci/cache.py b/pygorithm/fibonacci/cache.py new file mode 100644 index 0000000..1bda6b5 --- /dev/null +++ b/pygorithm/fibonacci/cache.py @@ -0,0 +1,37 @@ +""" +Fibonacci implementation through cache. +""" + +import inspect + + +def get_sequence(n): + """ + Return Fibonacci sequence from zero to specified number. + """ + cache = {0: 0, 1: 1} + + def fib(n): + """ + Return Fibonacci value by specified number as integer. + """ + if n in cache: + return cache[n] + + cache[n] = fib(n - 1) + fib(n - 2) + + return cache[n] + + def sequence(n): + """ + Return sequence if Fibonacci values as list. + """ + return [fib(value) for value in range(n + 1)] + + return sequence(n) + +def get_code(): + """ + Return source code of Fibonacci sequence logic's implementation. + """ + return inspect.getsource(get_sequence) diff --git a/pygorithm/fibonacci/recursion.py b/pygorithm/fibonacci/recursion.py new file mode 100644 index 0000000..fa37560 --- /dev/null +++ b/pygorithm/fibonacci/recursion.py @@ -0,0 +1,37 @@ +""" +Fibonacci implementation through recursion. +""" + +import inspect + + +def get_sequence(n): + """ + Return Fibonacci sequence from zero to specified number as list. + """ + def fib(n): + """ + Return Fibonacci value by specified number as integer. + """ + if n == 0: + return 0 + + if n == 1: + return 1 + + return fib(n - 1) + fib(n - 2) + + def sequence(n): + """ + Return sequence if Fibonacci values as list. + """ + return [fib(value) for value in range(n + 1)] + + return sequence(n) + + +def get_code(): + """ + Return source code of Fibonacci sequence logic's implementation. + """ + return inspect.getsource(get_sequence) diff --git a/tests/test_fibonacci.py b/tests/test_fibonacci.py new file mode 100644 index 0000000..afbf712 --- /dev/null +++ b/tests/test_fibonacci.py @@ -0,0 +1,32 @@ +""" +Test for Fibonacci implementations logic. +""" + +import unittest + +from pygorithm.fibonacci import cache, recursion + + +class TestFibonacciImplementations(unittest.TestCase): + """ + Tests for Fibonacci implementations. + """ + + def test_implementations_same_result(self): + """ + Verify that all implementations have same result. + """ + fibonacci_implementations = [cache, recursion] + + for implementation in fibonacci_implementations: + result = getattr(implementation, 'get_sequence')(0) + self.assertEqual([0], result) + + result = getattr(implementation, 'get_sequence')(1) + self.assertEqual([0, 1], result) + + result = getattr(implementation, 'get_sequence')(10) + self.assertEqual([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55], result) + +if __name__ == '__main__': + unittest.main() From 091204927a72dddcd892d3474fa4f2664bf5288d Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 15 Aug 2017 07:32:54 +0530 Subject: [PATCH 023/251] Made few changes in the fibonnaci doc --- docs/Fibonacci.rst | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/Fibonacci.rst b/docs/Fibonacci.rst index cdfe7ef..3b27d8b 100644 --- a/docs/Fibonacci.rst +++ b/docs/Fibonacci.rst @@ -19,7 +19,7 @@ Features * Fibonacci implementations available: - Recursion - - Cache (with save results of particular numbers) + - Cache (which saves some recursions to avoid computation of same series again and again) * Get the code used for any of the implementation @@ -30,6 +30,14 @@ Features code = fib_recursion.get_code() print(code) +* To see all the available functions in a module there is a `modules()` function available. For example, + +.. code:: python + + >>> from pygorithm.fibonacci import modules + >>> modules() + ['cache', 'recursion'] + Implementations API ------------------- From c522beb28d817f32bfef88438ca3abd7b68993e6 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 15 Aug 2017 07:33:13 +0530 Subject: [PATCH 024/251] Added Fibonnaci.rst to the index page --- docs/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.rst b/docs/index.rst index a8545f4..f486a49 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -21,6 +21,7 @@ Quick Links Sorting Searching + Fibonacci Quick Start Guide ----------------- From 996a53c10ada3e2dec3d445eb5a09e1f536d9e3e Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 15 Aug 2017 07:34:05 +0530 Subject: [PATCH 025/251] Added fibonacci/modules.py for getting all the available modules --- pygorithm/fibonacci/__init__.py | 1 + pygorithm/fibonacci/modules.py | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 pygorithm/fibonacci/modules.py diff --git a/pygorithm/fibonacci/__init__.py b/pygorithm/fibonacci/__init__.py index 0c5f498..e316377 100644 --- a/pygorithm/fibonacci/__init__.py +++ b/pygorithm/fibonacci/__init__.py @@ -1,2 +1,3 @@ from pygorithm.fibonacci import cache from pygorithm.fibonacci import recursion +from . modules import modules diff --git a/pygorithm/fibonacci/modules.py b/pygorithm/fibonacci/modules.py new file mode 100644 index 0000000..820ce4f --- /dev/null +++ b/pygorithm/fibonacci/modules.py @@ -0,0 +1,13 @@ +import pkgutil +def modules(): + """ + Find all functions in pygorithm.data_structures + """ + import pygorithm.fibonacci + package = pygorithm.fibonacci + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules From 6e069945266425caab21a9dd0a5b6f682099d6ed Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 15 Aug 2017 08:04:53 +0530 Subject: [PATCH 026/251] Updated Searching.rst --- docs/Searching.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Searching.rst b/docs/Searching.rst index 2218e46..8eeb22f 100644 --- a/docs/Searching.rst +++ b/docs/Searching.rst @@ -80,6 +80,7 @@ Binary Search * Functions and their uses .. function:: binary_search.search(List, key) + :module: pygorithm.searching - **List** : *Sorted* list in which the key is to be searched - **key** : key to be searched in the list From 44543f5dd117fd70eb48d51db5265fe42fdec261 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 15 Aug 2017 08:30:55 +0530 Subject: [PATCH 027/251] Updated Docs --- docs/Data_Structure.rst | 71 +++++++++++++++++++++++++++++++++++++++++ docs/index.rst | 1 + 2 files changed, 72 insertions(+) create mode 100644 docs/Data_Structure.rst diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst new file mode 100644 index 0000000..f59f5d4 --- /dev/null +++ b/docs/Data_Structure.rst @@ -0,0 +1,71 @@ +=============== +Data Structures +=============== + +Implementing Data Structures purely in Python. + +Quick Start Guide +----------------- + +.. code-block:: python + + # import the required data structure + from pygorithm.data_structures import stack + + # create a stack with default stack size 10 + myStack = stack.Stack() + myStack.push(2) + + # print the contents of stack + print(myStack) + +Features +-------- + +* Data Structures implementations available: + - **Stack** + - Stack (data_structures.stack.Stack) + - Infix to Postfix conversion (data_structures.stack.InfixToPostfix) + - **Queue** + - Queue (data_structures.queue.Queue) + - Deque (data_structures.queue.Deque) + - **Linked List** + - Singly Linked List (data_structures.linked_list.SinglyLinkedList) + - Doubly Linked List (data_structures.linked_list.DoublyLinkedList) + - **Tree** + - Binary Tree (data_structures.tree.BinaryTree) + - Binary Seach Tree (data_structures.tree.BinarySearchTree) + - **Graph** + - Graph (data_structures.graph.Graph) + - Topological Sort (data_structures.graph.TopologicalSort) + - Check cycle in Directed Graph (data_structures.graph.CheckCycleDirectedGraph) + - Check cycle in Undirected Graph (data_structures.graph.CheckCycleUndirectedGraph) + - **Heap** + - Heap (data_structures.heap.Heap) + +* Get the code used for any of the implementation + +.. code:: python + + from pygorithm.data_structures.stack import Stack + + myStack = Stack() + print(myStack.get_code()) + +* To see all the available functions in a module there is a `modules()` function available. For example, + +.. code:: python + + >>> from pygorithm.data_structures import modules + >>> modules() + ['graph', 'heap', 'linked_list', 'queue', 'stack', 'tree'] + +Stack +----- + +.. automodule:: pygorithm.data_structures.stack + + Stack + ----- + .. autoclass:: Stack + :members: diff --git a/docs/index.rst b/docs/index.rst index f486a49..77bdeaf 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -21,6 +21,7 @@ Quick Links Sorting Searching + Data_Structure Fibonacci Quick Start Guide From c0a8a5074672f4c451adec036108fb8862bbd47d Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 15 Aug 2017 08:31:16 +0530 Subject: [PATCH 028/251] Added docstrings for documentation purposes --- pygorithm/data_structures/stack.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pygorithm/data_structures/stack.py b/pygorithm/data_structures/stack.py index 479f2ce..182e998 100644 --- a/pygorithm/data_structures/stack.py +++ b/pygorithm/data_structures/stack.py @@ -3,6 +3,20 @@ # stack implementation class Stack(object): + ''' + 1. `push`: pushes an item on to the stack + + myStack = Stack() + myStack.push(10) + print(myStack) + + 2. `pop`: pops the topmost item of the stack + + myStack = Stack() + myStack.push(10) + myStack.push(2) + print(myStack.pop()) + ''' def __init__(self, limit = 10): ''' @param : limit: the stack size From 46aaeb2d6f6390363f8180289370ac59970bbe8a Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 15 Aug 2017 08:36:27 +0530 Subject: [PATCH 029/251] Updated Docs --- docs/Data_Structure.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index f59f5d4..5109a03 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -69,3 +69,10 @@ Stack ----- .. autoclass:: Stack :members: + +.. automodule:: pygorithm.data_structures.stack + + Stack + ----- + .. autoclass:: InfixToPostfix + :members: From 3426259b316172e2f08ffcc130f3c5cbfa0cd1c7 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 15 Aug 2017 08:36:36 +0530 Subject: [PATCH 030/251] Added docstrings for documentation purposes --- pygorithm/data_structures/stack.py | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/pygorithm/data_structures/stack.py b/pygorithm/data_structures/stack.py index 182e998..f5a4281 100644 --- a/pygorithm/data_structures/stack.py +++ b/pygorithm/data_structures/stack.py @@ -4,18 +4,7 @@ # stack implementation class Stack(object): ''' - 1. `push`: pushes an item on to the stack - - myStack = Stack() - myStack.push(10) - print(myStack) - - 2. `pop`: pops the topmost item of the stack - - myStack = Stack() - myStack.push(10) - myStack.push(2) - print(myStack.pop()) + Python implementation of Stack ''' def __init__(self, limit = 10): ''' @@ -28,28 +17,36 @@ def __str__(self): return ' '.join([str(i) for i in self.stack]) def push(self, data): - ''' pushes an item into the stack ''' + ''' pushes an item into the stack + returns -1 if the stack is empty + ''' if len(self.stack) >= self.limit: return -1 # indicates stack overflow else: self.stack.append(data) def pop(self): - ''' pops the topmost item from the stack ''' + ''' pops the topmost item from the stack + returns -1 if the stack is empty + ''' if len(self.stack) <= 0: return -1 # indicates stack underflow else: return self.stack.pop() def peek(self): - ''' returns the topmost element of the stack ''' + ''' returns the topmost element of the stack + returns -1 if the stack is empty + ''' if len(self.stack) <= 0: return -1 # stack underflow else: return self.stack[len(self.stack) - 1] def is_empty(self): - ''' checks if the stack is empty ''' + ''' checks if the stack is empty + returns boolean value, True or False + ''' return self.size() == 0 def size(self): From f2c59c480658abc54074bef3a94bd93e2b75517d Mon Sep 17 00:00:00 2001 From: Emil 'Skeen' Madsen Date: Tue, 15 Aug 2017 07:58:03 +0200 Subject: [PATCH 031/251] Fixed worst case for shell sort --- pygorithm/sorting/shell_sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/sorting/shell_sort.py b/pygorithm/sorting/shell_sort.py index af8da31..a02edc1 100644 --- a/pygorithm/sorting/shell_sort.py +++ b/pygorithm/sorting/shell_sort.py @@ -20,7 +20,7 @@ def sort(List): # time complexities def time_complexities(): - return '''Best Case: O(nlogn), Average Case: O(depends on gap sequence), Worst Case: O(n)''' + return '''Best Case: O(nlogn), Average Case: O(depends on gap sequence), Worst Case: O(n ^ 2)''' # easily retrieve the source code of the sort function def get_code(): From b02c9039a82520d6abaad6eed21b148007fb121e Mon Sep 17 00:00:00 2001 From: dmytrostriletskyi Date: Wed, 16 Aug 2017 00:21:26 +0300 Subject: [PATCH 032/251] Fibonacci: golden ratio, generator --- docs/Fibonacci.rst | 6 ++- pygorithm/fibonacci/__init__.py | 6 ++- pygorithm/fibonacci/generator.py | 40 +++++++++++++++++++ pygorithm/fibonacci/goldenratio.py | 39 ++++++++++++++++++ .../fibonacci/{cache.py => memoization.py} | 3 +- pygorithm/fibonacci/modules.py | 21 ++++++---- pygorithm/fibonacci/recursion.py | 9 ++--- tests/test_fibonacci.py | 4 +- 8 files changed, 108 insertions(+), 20 deletions(-) create mode 100644 pygorithm/fibonacci/generator.py create mode 100644 pygorithm/fibonacci/goldenratio.py rename pygorithm/fibonacci/{cache.py => memoization.py} (92%) diff --git a/docs/Fibonacci.rst b/docs/Fibonacci.rst index 3b27d8b..cb6d2d5 100644 --- a/docs/Fibonacci.rst +++ b/docs/Fibonacci.rst @@ -18,8 +18,10 @@ Features -------- * Fibonacci implementations available: + - Generator + - Golden ratio + - Memorization (which saves some recursions to avoid computation of same series again and again) - Recursion - - Cache (which saves some recursions to avoid computation of same series again and again) * Get the code used for any of the implementation @@ -36,7 +38,7 @@ Features >>> from pygorithm.fibonacci import modules >>> modules() - ['cache', 'recursion'] + ['generator', 'goldenratio', 'memoization', 'recursion'] Implementations API ------------------- diff --git a/pygorithm/fibonacci/__init__.py b/pygorithm/fibonacci/__init__.py index e316377..d4cef98 100644 --- a/pygorithm/fibonacci/__init__.py +++ b/pygorithm/fibonacci/__init__.py @@ -1,3 +1,5 @@ -from pygorithm.fibonacci import cache +from pygorithm.fibonacci import generator +from pygorithm.fibonacci import goldenratio +from pygorithm.fibonacci import memoization +from pygorithm.fibonacci.modules import modules from pygorithm.fibonacci import recursion -from . modules import modules diff --git a/pygorithm/fibonacci/generator.py b/pygorithm/fibonacci/generator.py new file mode 100644 index 0000000..95b556d --- /dev/null +++ b/pygorithm/fibonacci/generator.py @@ -0,0 +1,40 @@ +""" +Fibonacci implementation through generator. +""" + +import inspect + + +def get_sequence(n): + """ + Return Fibonacci sequence from zero to specified number as list. + """ + def fib(): + """ + Return Fibonacci value by specified number as integer. + + Golden ratio — https://en.wikipedia.org/wiki/Golden_ratio + Fibonacci's relation to the golden ratio — https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression + """ + a, b = 0, 1 + + while True: + yield a + + a, b = b, a + b + + def sequence(n): + """ + Return sequence of Fibonacci values as list. + """ + f = fib() + return [f.__next__() for _ in range(n + 1)] + + return sequence(n) + + +def get_code(): + """ + Return source code of Fibonacci sequence logic's implementation. + """ + return inspect.getsource(get_sequence) diff --git a/pygorithm/fibonacci/goldenratio.py b/pygorithm/fibonacci/goldenratio.py new file mode 100644 index 0000000..08420d0 --- /dev/null +++ b/pygorithm/fibonacci/goldenratio.py @@ -0,0 +1,39 @@ +""" +Fibonacci implementation through golden ratio (math formula). +""" + +import inspect +import math + + +def get_sequence(n): + """ + Return Fibonacci sequence from zero to specified number as list. + """ + def fib(n): + """ + Return Fibonacci value by specified number as integer. + + Golden ratio — https://en.wikipedia.org/wiki/Golden_ratio + Fibonacci's relation to the golden ratio — https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression + """ + golden_ratio = (1 + math.sqrt(5)) / 2 + + val = (golden_ratio ** n - (1 - golden_ratio) ** n) / math.sqrt(5) + + return int(val) + + def sequence(n): + """ + Return sequence of Fibonacci values as list. + """ + return [fib(value) for value in range(n + 1)] + + return sequence(n) + + +def get_code(): + """ + Return source code of Fibonacci sequence logic's implementation. + """ + return inspect.getsource(get_sequence) diff --git a/pygorithm/fibonacci/cache.py b/pygorithm/fibonacci/memoization.py similarity index 92% rename from pygorithm/fibonacci/cache.py rename to pygorithm/fibonacci/memoization.py index 1bda6b5..ce6ce40 100644 --- a/pygorithm/fibonacci/cache.py +++ b/pygorithm/fibonacci/memoization.py @@ -24,12 +24,13 @@ def fib(n): def sequence(n): """ - Return sequence if Fibonacci values as list. + Return sequence of Fibonacci values as list. """ return [fib(value) for value in range(n + 1)] return sequence(n) + def get_code(): """ Return source code of Fibonacci sequence logic's implementation. diff --git a/pygorithm/fibonacci/modules.py b/pygorithm/fibonacci/modules.py index 820ce4f..3ec1157 100644 --- a/pygorithm/fibonacci/modules.py +++ b/pygorithm/fibonacci/modules.py @@ -1,13 +1,20 @@ +""" +Find all modules in Fibonacci logic. +""" + import pkgutil + +import pygorithm.fibonacci + + def modules(): """ - Find all functions in pygorithm.data_structures + Find all functions in `pygorithm.fibonacci`. """ - import pygorithm.fibonacci package = pygorithm.fibonacci - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() + + modules = sorted([ + modname for _, modname, __ in pkgutil.iter_modules(package.__path__) if modname != 'modules' + ]) + return modules diff --git a/pygorithm/fibonacci/recursion.py b/pygorithm/fibonacci/recursion.py index fa37560..a0c3451 100644 --- a/pygorithm/fibonacci/recursion.py +++ b/pygorithm/fibonacci/recursion.py @@ -13,17 +13,14 @@ def fib(n): """ Return Fibonacci value by specified number as integer. """ - if n == 0: - return 0 - - if n == 1: - return 1 + if n <= 1: + return n return fib(n - 1) + fib(n - 2) def sequence(n): """ - Return sequence if Fibonacci values as list. + Return sequence of Fibonacci values as list. """ return [fib(value) for value in range(n + 1)] diff --git a/tests/test_fibonacci.py b/tests/test_fibonacci.py index afbf712..f2dbb15 100644 --- a/tests/test_fibonacci.py +++ b/tests/test_fibonacci.py @@ -4,7 +4,7 @@ import unittest -from pygorithm.fibonacci import cache, recursion +from pygorithm.fibonacci import generator, goldenratio, memoization, recursion class TestFibonacciImplementations(unittest.TestCase): @@ -16,7 +16,7 @@ def test_implementations_same_result(self): """ Verify that all implementations have same result. """ - fibonacci_implementations = [cache, recursion] + fibonacci_implementations = [generator, goldenratio, memoization, recursion] for implementation in fibonacci_implementations: result = getattr(implementation, 'get_sequence')(0) From 033665f1382b785ea2ee28ac8760b70b1abd2093 Mon Sep 17 00:00:00 2001 From: Michele De Vita Date: Wed, 16 Aug 2017 02:18:51 +0200 Subject: [PATCH 033/251] Moved implentation of kruskal into WeightedGraph class into data_structures/graph.py and refactor relative tests. Changed some implementation details into Graph class to simplify the code into add_edge method. Changed some code in linked_list and modules to respect pep8 and make some methods (especially get_code()) static or class dependent --- pygorithm/data_structures/graph.py | 103 ++++++++++++++++++----- pygorithm/data_structures/heap.py | 19 +++-- pygorithm/data_structures/linked_list.py | 47 ++++++----- pygorithm/data_structures/modules.py | 3 +- tests/kruskal_mst_tests.py | 19 ----- tests/test_data_structure.py | 52 ++++++++++-- 6 files changed, 164 insertions(+), 79 deletions(-) diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index db55cb6..27505ba 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -1,40 +1,99 @@ # Author: OMKAR PATHAK # Created On: 12th August 2017 +from collections import defaultdict + class Graph(object): def __init__(self): - self.graph = {} + self.graph = defaultdict(list) self.count = 0 def print_graph(self): ''' for printing the contents of the graph ''' - for i in self.graph: - print(i,'->',' -> '.join([str(j) for j in self.graph[i]])) + for i in self.graph: + print(i, '->', ' -> '.join([str(j) for j in self.graph[i]])) def add_edge(self, from_vertex, to_vertex): ''' function to add an edge in the graph ''' # check if vertex is already present - if from_vertex in self.graph.keys(): - self.graph[from_vertex].append(to_vertex) - self.count += 1 - else: - self.graph[from_vertex] = [to_vertex] - self.graph[to_vertex] = [] - self.count += 1 + self.graph[from_vertex].append(to_vertex) + self.count += 1 def get_code(self): - ''' returns the code for the current class ''' + """ returns the code for the current class """ import inspect return inspect.getsource(Graph) + +class WeightedGraph: + """ + A graph with a numerical value (weight) on edges + """ + def __init__(self): + self.edges_weighted = [] + self.vertexes = set() + + def add_edge(self, u, v, weight): + """ + :param u: from vertex - type : integer + :param v: to vertex - type : integer + :param weight: weight of the edge - type : numeric + """ + edge = ((u, v), weight) + self.edges_weighted.append(edge) + self.vertexes.update((u, v)) + + def print_graph(self): + for (u, v), weight in self.edges_weighted: + print("%d -> %d weight: %d" % (u, v, weight)) + + def _set_of(self, vertex): + for tree in self.forest: + if vertex in tree: + return tree + return None + + def _union(self, u_set, v_set): + self.forest.remove(u_set) + self.forest.remove(v_set) + self.forest.append(v_set + u_set) + + def kruskal_mst(self): + """ + Kruskal algorithm for finding the minimum spanning tree of a weighted graph. + This version use a union-find data structure. + More detailed info here: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm + Author: Michele De Vita + """ + # sort by weight + self.edges_weighted.sort(key=lambda pair: pair[1]) + edges_explored = [] + self.forest = [[v] for v in self.vertexes] + for (u, v), weight in self.edges_weighted: + u_set, v_set = self._set_of(u), self._set_of(v) + if u_set != v_set: + self._union(u_set, v_set) + edges_explored.append(((u, v), weight)) + return edges_explored + + @staticmethod + def kruskal_complexity(): + return '''Worst case: O(E log(V)) where E in the number of edges and V the number of vertexes''' + + @classmethod + def kruskal_code(cls): + import inspect + return inspect.getsource(cls.kruskal_mst) + + class TopologicalSort(Graph): def topological_sort(self): ''' function for sorting graph elements using topological sort ''' - visited = [False] * self.count # Marking all vertices as not visited - stack = [] # Stack for storing the vertex + visited = [False] * self.count # Marking all vertices as not visited + stack = [] # Stack for storing the vertex for vertex in range(self.count): # Call the recursive function only if not visited - if visited[vertex] == False: + if not visited[vertex]: self.topological_sort_rec(vertex, visited, stack) return stack @@ -53,13 +112,14 @@ def topological_sort_rec(self, vertex, visited, stack): return # Push current vertex to stack which stores the result - stack.insert(0,vertex) + stack.insert(0, vertex) def get_code(self): ''' returns the code for the current class ''' import inspect return inspect.getsource(TopologicalSort) + class CheckCycleDirectedGraph(object): def __init__(self): self.graph = {} @@ -67,8 +127,8 @@ def __init__(self): def print_graph(self): ''' for printing the contents of the graph ''' - for i in self.graph: - print(i,'->',' -> '.join([str(j) for j in self.graph[i]])) + for i in self.graph: + print(i, '->', ' -> '.join([str(j) for j in self.graph[i]])) def add_edge(self, from_vertex, to_vertex): ''' function to add an edge in the graph ''' @@ -114,6 +174,7 @@ def get_code(self): import inspect return inspect.getsource(CheckCycleDirected) + class CheckCycleUndirectedGraph(object): def __init__(self): self.graph = {} @@ -121,11 +182,11 @@ def __init__(self): def print_graph(self): ''' for printing the contents of the graph ''' - for i in self.graph: - print(i,'->',' -> '.join([str(j) for j in self.graph[i]])) + for i in self.graph: + print(i, '->', ' -> '.join([str(j) for j in self.graph[i]])) def add_edge(self, fromVertex, toVertex): - ''' for adding the edge beween two vertices ''' + ''' for adding the edge between two vertices ''' # check if vertex is already present, if fromVertex in self.graph.keys() and toVertex in self.graph.keys(): self.graph[fromVertex].append(toVertex) @@ -137,7 +198,7 @@ def add_edge(self, fromVertex, toVertex): def check_cycle(self): ''' This function will return True if graph is cyclic else return False ''' - visited = [False] * len(self.graph) # Marking all vertices as not visited + visited = [False] * len(self.graph) # Marking all vertices as not visited for vertex in range(len(self.graph)): # Call the recursive function only if not visited if visited[vertex] == False: diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py index 870f35e..30ede32 100644 --- a/pygorithm/data_structures/heap.py +++ b/pygorithm/data_structures/heap.py @@ -4,6 +4,7 @@ from pygorithm.data_structures import queue + # min-heap implementation as priority queue class Heap(queue.Queue): def parent_idx(self, idx): @@ -17,7 +18,7 @@ def right_child_idx(self, idx): def insert(self, data): super().enqueue(data) - if self.rear >= 1: # heap may need to be fixed + if self.rear >= 1: # heap may need to be fixed self.heapify_up() def heapify_up(self): @@ -31,7 +32,7 @@ def heapify_up(self): Best Case: O(1), item is inserted at correct position, no swaps needed Worst Case: O(logn), item needs to be swapped throughout all levels of tree ''' - child = self.rear + child = self.rear parent = self.parent_idx(child) while self.queue[child] < self.queue[self.parent_idx(child)]: # Swap (sift up) and update child:parent relation @@ -42,23 +43,23 @@ def heapify_up(self): def pop(self): ''' Removes the lowest value element (highest priority, at root) from the heap ''' min = super().dequeue() - if self.rear >= 1: # heap may need to be fixed + if self.rear >= 1: # heap may need to be fixed self.heapify_down() return min def favorite(self, parent): ''' Determines which child has the highest priority by 3 cases ''' - left = self.left_child_idx(parent) + left = self.left_child_idx(parent) right = self.right_child_idx(parent) - if left <= self.rear and right <= self.rear: # case 1: both nodes exist + if left <= self.rear and right <= self.rear: # case 1: both nodes exist if self.queue[left] <= self.queue[right]: return left else: return right - elif left <= self.rear: # case 2: only left exists + elif left <= self.rear: # case 2: only left exists return left - else: # case 3: no children (if left doesn't exist, neither can the right) + else: # case 3: no children (if left doesn't exist, neither can the right) return None def heapify_down(self): @@ -71,8 +72,8 @@ def heapify_down(self): Best Case: O(1), item is inserted at correct position, no swaps needed Worst Case: O(logn), item needs to be swapped throughout all levels of tree ''' - cur = ROOT = 0 # start at the root - fav = self.favorite(cur) # determine favorite child + cur = ROOT = 0 # start at the root + fav = self.favorite(cur) # determine favorite child while self.queue[fav] is not None: if self.queue[cur] > self.queue[fav]: # Swap (sift down) and update parent:favorite relation diff --git a/pygorithm/data_structures/linked_list.py b/pygorithm/data_structures/linked_list.py index 826ffb6..ceb1fac 100644 --- a/pygorithm/data_structures/linked_list.py +++ b/pygorithm/data_structures/linked_list.py @@ -5,16 +5,18 @@ class Node(object): # Each node has its data and a pointer that points to next node in the Linked List - def __init__(self, data, next = None): + def __init__(self, data, next=None): ''' constructor ''' self.data = data self.next = next # easily retrieve the source code of the Node class - def get_code(self): + @classmethod + def get_code(cls): ''' return the code for the current class ''' import inspect - return inspect.getsource(Node) + return inspect.getsource(cls) + class SinglyLinkedList(object): # Defining the head of the linked list @@ -34,7 +36,7 @@ def get_data(self): ''' prints the elements in the linked list ''' temp = self.head List = [] - while(temp): + while (temp): # print(temp.data, end=' ') List.append(temp.data) temp = temp.next @@ -43,7 +45,7 @@ def get_data(self): def insert_at_start(self, data): ''' insert an item at the beginning of the linked list ''' - if self.head == None: + if self.head is None: newNode = Node(data) self.head = newNode else: @@ -62,7 +64,7 @@ def insert_at_end(self, data): ''' insert an item at the end of the linked list ''' newNode = Node(data) temp = self.head - while(temp.next != None): # get last node + while (temp.next != None): # get last node temp = temp.next temp.next = newNode @@ -70,17 +72,17 @@ def delete(self, data): ''' to delete specified element from the linked list ''' temp = self.head # if data/key is found in head node itself - if (temp is not None): - if(temp.data == data): + if temp is not None: + if temp.data == data: self.head = temp.next temp = None return else: # else _search all the nodes - while(temp.next != None): - if(temp.data == data): + while (temp.next != None): + if (temp.data == data): break - prev = temp #save current node as previous so that we can go on to next node + prev = temp # save current node as previous so that we can go on to next node temp = temp.next # node not found @@ -91,11 +93,13 @@ def delete(self, data): return # easily retrieve the source code of the SinglyLinkedList class - def get_code(self): + @staticmethod + def get_code(): ''' return the code for the current class ''' import inspect return inspect.getsource(SinglyLinkedList) + class DoublyLinkedList(object): def __init__(self): ''' constructor ''' @@ -105,7 +109,7 @@ def get_data(self): ''' prints the elements in the linked list ''' temp = self.head List = [] - while(temp): + while (temp): # print(temp.data, end=' ') List.append(temp.data) temp = temp.next @@ -127,7 +131,7 @@ def insert_at_end(self, data): ''' insert an element at the end of the linked list ''' newNode = Node(data) temp = self.head - while(temp.next != None): + while (temp.next != None): temp = temp.next temp.next = newNode newNode.previous = temp @@ -135,19 +139,19 @@ def insert_at_end(self, data): def delete(self, data): ''' to delete specified element from the linked list ''' temp = self.head - if(temp.next != None): + if (temp.next != None): # if head node is to be deleted - if(temp.data == data): + if (temp.data == data): temp.next.previous = None self.head = temp.next temp.next = None return else: - while(temp.next != None): - if(temp.data == data): + while (temp.next != None): + if (temp.data == data): break temp = temp.next - if(temp.next): + if (temp.next): # if element to be deleted is in between temp.previous.next = temp.next temp.next.previous = temp.previous @@ -159,11 +163,12 @@ def delete(self, data): temp.previous = None return - if (temp == None): + if temp is None: return # easily retrieve the source code of the DoublyLinkedList class - def get_code(self): + @staticmethod + def get_code(): ''' returns the code of the current class ''' import inspect return inspect.getsource(DoublyLinkedList) diff --git a/pygorithm/data_structures/modules.py b/pygorithm/data_structures/modules.py index 149924c..3c57c2e 100644 --- a/pygorithm/data_structures/modules.py +++ b/pygorithm/data_structures/modules.py @@ -1,4 +1,6 @@ import pkgutil + + def modules(): """ Find all functions in pygorithm.data_structures @@ -11,4 +13,3 @@ def modules(): modules.remove('modules') modules.sort() return modules - diff --git a/tests/kruskal_mst_tests.py b/tests/kruskal_mst_tests.py index b92eae6..fa75df5 100644 --- a/tests/kruskal_mst_tests.py +++ b/tests/kruskal_mst_tests.py @@ -3,22 +3,3 @@ from pygorithm.minimun_spanning_tree import kruskal -class KruskalTest(unittest.TestCase): - - def test_minimum_spanning_tree(self): - """ - test inspired from the example at the following link: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm - """ - edges_weighted = [((1, 2), 7), ((2, 3), 8), ((1, 4), 5), ((2, 4), 9), - ((2, 5), 7), ((3, 5), 5), ((4, 6), 6), ((5, 6), 8), - ((5, 7), 9), ((6, 7), 11), ((4, 5), 15)] - expected = [((1, 4), 5), ((3, 5), 5), ((4, 6), 6), ((1, 2), 7), ((2, 5), 7), ((5, 7), 9)] - self.assertEqual(kruskal.minimum_spanning_tree(edges_weighted), expected) - - def test_minimum_spanning_tree_2(self): - """ - Test inspired by the gif at the left of the page https://en.wikipedia.org/wiki/Kruskal%27s_algorithm - """ - edges_weighted = [((1,2), 3), ((1, 5), 1), ((2, 5), 4), ((2, 3), 5), ((3, 5), 6), ((3, 4), 2), ((4, 5), 7)] - expected = [((1, 5), 1), ((3, 4), 2), ((1, 2), 3), ((2, 3), 5)] - self.assertEqual(kruskal.minimum_spanning_tree(edges_weighted), expected) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index ed7f2cf..000be53 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -8,10 +8,12 @@ tree, graph, heap) +from pygorithm.data_structures.graph import WeightedGraph + class TestStack(unittest.TestCase): def test_stack(self): - myStack = stack.Stack() # create a stack with default stack size 10 + myStack = stack.Stack() # create a stack with default stack size 10 myStack.push(2) myStack.push(10) myStack.push(12) @@ -27,20 +29,48 @@ def test_stack(self): self.assertEqual(nullStack.peek(), -1) self.assertTrue(nullStack.is_empty()) + class TestInfixToPostfix(unittest.TestCase): def test_infix_to_postfix(self): myExp = 'a+b*(c^d-e)^(f+g*h)-i' myExp = [i for i in myExp] - myStack = stack.Stack(len(myExp)) # create a stack + myStack = stack.Stack(len(myExp)) # create a stack result = stack.InfixToPostfix(myExp, myStack) resultString = result.infix_to_postfix() expectedResult = 'a b c d ^ e - f g h * + ^ * + i -' self.assertTrue(resultString, expectedResult) + +class KruskalTest(unittest.TestCase): + def test_minimum_spanning_tree(self): + """ + test inspired from the example at the following link: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm + """ + edges_weighted = [((1, 2), 7), ((2, 3), 8), ((1, 4), 5), ((2, 4), 9), + ((2, 5), 7), ((3, 5), 5), ((4, 6), 6), ((5, 6), 8), + ((5, 7), 9), ((6, 7), 11), ((4, 5), 15)] + wgraph = WeightedGraph() + for (u, v), weight in edges_weighted: + wgraph.add_edge(u, v, weight) + expected = [((1, 4), 5), ((3, 5), 5), ((4, 6), 6), ((1, 2), 7), ((2, 5), 7), ((5, 7), 9)] + self.assertEqual(wgraph.kruskal_mst(), expected) + + def test_minimum_spanning_tree_2(self): + """ + Test inspired by the gif at the left of the page https://en.wikipedia.org/wiki/Kruskal%27s_algorithm + """ + edges_weighted = [((1, 2), 3), ((1, 5), 1), ((2, 5), 4), ((2, 3), 5), ((3, 5), 6), ((3, 4), 2), ((4, 5), 7)] + wgraph = WeightedGraph() + for (u, v), weight in edges_weighted: + wgraph.add_edge(u, v, weight) + expected = [((1, 5), 1), ((3, 4), 2), ((1, 2), 3), ((2, 3), 5)] + self.assertEqual(wgraph.kruskal_mst(), expected) + + class TestQueue(unittest.TestCase): def test_queue(self): - myQueue = queue.Queue() # create a queue with default queue size 10 + myQueue = queue.Queue() # create a queue with default queue size 10 myQueue.enqueue(2) myQueue.enqueue(10) myQueue.enqueue(12) @@ -55,14 +85,15 @@ def test_queue(self): def test_deque(self): myDeque = queue.Deque() - myDeque.insert_front(1) # 1 - myDeque.insert_rear(2) # 2 1 - myDeque.insert_front(3) # 2 1 3 - myDeque.insert_rear(10) # 10 2 1 3 + myDeque.insert_front(1) # 1 + myDeque.insert_rear(2) # 2 1 + myDeque.insert_front(3) # 2 1 3 + myDeque.insert_rear(10) # 10 2 1 3 self.assertEqual(myDeque.delete_rear(), 10) self.assertEqual(myDeque.delete_front(), 3) + class TestLinkedList(unittest.TestCase): def test_singly_linked_list(self): List = linked_list.SinglyLinkedList() @@ -91,6 +122,7 @@ def test_doubly_linked_list(self): expectedResult = [4, 1, 3] self.assertEqual(dll.get_data(), expectedResult) + class TestBinaryTree(unittest.TestCase): def test_binary_tree(self): root = tree.Node(1) @@ -109,6 +141,7 @@ def test_binary_tree(self): expectedResult = [4, 2, 3, 1] self.assertEqual(postorderTraversal, expectedResult) + class TestBinarySearchTree(unittest.TestCase): def test_binary_search_tree(self): root = tree.BinarySearchTree() @@ -134,6 +167,7 @@ def test_binary_search_tree(self): self.assertTrue(root.find(8)) + class TestGraph(unittest.TestCase): def test_topological_sort(self): myGraph = graph.TopologicalSort() @@ -170,6 +204,7 @@ def test_cycle_in_undirected_graph(self): self.assertTrue(myGraph.check_cycle()) + class TestHeap(unittest.TestCase): def test_heap(self): myHeap = heap.Heap() @@ -178,7 +213,7 @@ def test_heap(self): myHeap.insert(5) myHeap.insert(12) myHeap.insert(1) - + expectedResult = [1, 3, 5, 12, 6] self.assertEqual(myHeap.queue, expectedResult) @@ -202,5 +237,6 @@ def test_heap(self): expectedResult = [] self.assertEqual(myHeap.queue, expectedResult) + if __name__ == '__main__': unittest.main() From 75b755ada7eb8f0cff70c79b4321a0a79ad95a78 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 16 Aug 2017 06:18:53 +0530 Subject: [PATCH 034/251] Updated Docs --- docs/Data_Structure.rst | 8 ++++---- docs/conf.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 5109a03..578d3df 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -72,7 +72,7 @@ Stack .. automodule:: pygorithm.data_structures.stack - Stack - ----- - .. autoclass:: InfixToPostfix - :members: + Infix to Postfix + ---------------- + .. autoclass:: InfixToPostfix + :members: diff --git a/docs/conf.py b/docs/conf.py index 8a62ddc..0e28827 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,7 +12,7 @@ # -- General configuration ------------------------------------------------ project = u'pygorithm' -version = release = u'0.1.dev3' +version = release = u'0.1' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom From 5bd3d3133049998815228c445bd1b447502a4687 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 16 Aug 2017 06:20:34 +0530 Subject: [PATCH 035/251] Added updated setup.py, MANIFEST file and setup.cfg --- MANIFEST.in | 10 ++++++++++ setup.cfg | 5 +++++ setup.py | 18 +++++++++--------- 3 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 MANIFEST.in create mode 100644 setup.cfg diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..caeab8b --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,10 @@ +include LICENSE +include MANIFEST.in +include README.rst +include requirements.txt + +recursive-include pygorithm * + +recursive-exclude * __pycache__ +recursive-exclude * *.py[co] +recursive-exclude * *.orig diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..9c109d6 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,5 @@ +[bdist_wheel] +universal = 1 + +[wheel] +universal = 1 diff --git a/setup.py b/setup.py index 7b14cc0..a4b5fb6 100644 --- a/setup.py +++ b/setup.py @@ -10,19 +10,19 @@ long_description = f.read() setup( - name = 'pygorithm', - version = '0.1.dev2', - description = 'A Python algorithms module for learning', - long_description = long_description, + name='pygorithm', + version='0.1', + description='A Python algorithms module for learning', + long_description=long_description, # The project's main homepage. url='https://github.com/OmkarPathak/pygorithms', # Author details - author = 'Omkar Pathak', - author_email = 'omkarpathak27@gmail.com', + author='Omkar Pathak', + author_email='omkarpathak27@gmail.com', # Choose your license - license = 'MIT', + license='MIT', # See https://pypi.python.org/pypi?%3Aaction=list_classifiers - classifiers = [ + classifiers=[ # Indicate who your project is intended for 'Intended Audience :: Developers', 'Topic :: Software Development :: Libraries', @@ -38,5 +38,5 @@ 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', ], - packages = find_packages() + packages=find_packages() ) From 617bcd37d9883d084d7729ad6cc3d147d07596ab Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 16 Aug 2017 06:55:16 +0530 Subject: [PATCH 036/251] Updated docstrings for better code readability --- pygorithm/data_structures/graph.py | 27 +++++++++++++----------- pygorithm/data_structures/heap.py | 7 ++++-- pygorithm/data_structures/linked_list.py | 4 +++- pygorithm/data_structures/tree.py | 18 ++++++++++------ tests/kruskal_mst_tests.py | 5 ----- 5 files changed, 35 insertions(+), 26 deletions(-) delete mode 100644 tests/kruskal_mst_tests.py diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index 27505ba..4d337e8 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -2,8 +2,8 @@ # Created On: 12th August 2017 from collections import defaultdict - class Graph(object): + ''' class for creating a graph ''' def __init__(self): self.graph = defaultdict(list) self.count = 0 @@ -25,7 +25,7 @@ def get_code(self): return inspect.getsource(Graph) -class WeightedGraph: +class WeightedGraph(object): """ A graph with a numerical value (weight) on edges """ @@ -77,11 +77,12 @@ def kruskal_mst(self): return edges_explored @staticmethod - def kruskal_complexity(): + def kruskal_time_complexity(): return '''Worst case: O(E log(V)) where E in the number of edges and V the number of vertexes''' @classmethod def kruskal_code(cls): + ''' Returns the code for current class ''' import inspect return inspect.getsource(cls.kruskal_mst) @@ -94,11 +95,11 @@ def topological_sort(self): for vertex in range(self.count): # Call the recursive function only if not visited if not visited[vertex]: - self.topological_sort_rec(vertex, visited, stack) + self._topological_sort_rec(vertex, visited, stack) return stack - def topological_sort_rec(self, vertex, visited, stack): + def _topological_sort_rec(self, vertex, visited, stack): ''' Recursive function for topological Sort ''' # Mark the current node in visited visited[vertex] = True @@ -107,7 +108,7 @@ def topological_sort_rec(self, vertex, visited, stack): try: for adjacent_node in self.graph[vertex]: if visited[adjacent_node] == False: - self.topological_sort_rec(adjacent_node, visited, stack) + self._topological_sort_rec(adjacent_node, visited, stack) except KeyError: return @@ -121,6 +122,7 @@ def get_code(self): class CheckCycleDirectedGraph(object): + ''' Class to check cycle in directed graph ''' def __init__(self): self.graph = {} self.count = 0 @@ -146,11 +148,11 @@ def check_cycle(self): stack = [False] * len(self.graph) for vertex in range(len(self.graph)): if visited[vertex] == False: - if self.check_cycle_rec(visited, stack, vertex) == True: + if self._check_cycle_rec(visited, stack, vertex) == True: return True return False - def check_cycle_rec(self, visited, stack, vertex): + def _check_cycle_rec(self, visited, stack, vertex): ''' Recursive function for finding the cycle ''' # Mark the current node in visited and also add it to the stack visited[vertex] = True @@ -159,7 +161,7 @@ def check_cycle_rec(self, visited, stack, vertex): # mark all adjacent nodes of the current node for adjacentNode in self.graph[vertex]: if visited[adjacentNode] == False: - if self.check_cycle_rec(visited, stack, adjacentNode) == True: + if self._check_cycle_rec(visited, stack, adjacentNode) == True: return True elif stack[adjacentNode] == True: return True @@ -176,6 +178,7 @@ def get_code(self): class CheckCycleUndirectedGraph(object): + ''' Class to check cycle in undirected graph ''' def __init__(self): self.graph = {} self.count = 0 @@ -202,11 +205,11 @@ def check_cycle(self): for vertex in range(len(self.graph)): # Call the recursive function only if not visited if visited[vertex] == False: - if self.check_cycle_rec(visited, -1, vertex) == True: + if self._check_cycle_rec(visited, -1, vertex) == True: return True return False - def check_cycle_rec(self, visited, parent, vertex): + def _check_cycle_rec(self, visited, parent, vertex): ''' Recursive function for finding the cycle ''' # Mark the current node in visited visited[vertex] = True @@ -214,7 +217,7 @@ def check_cycle_rec(self, visited, parent, vertex): # mark all adjacent nodes of the current node for adjacentNode in self.graph[vertex]: if visited[adjacentNode] == False: - if self.check_cycle_rec(visited, vertex, adjacentNode) == True: + if self._check_cycle_rec(visited, vertex, adjacentNode) == True: return True elif parent != adjacentNode: return True diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py index 30ede32..b7700ab 100644 --- a/pygorithm/data_structures/heap.py +++ b/pygorithm/data_structures/heap.py @@ -4,19 +4,22 @@ from pygorithm.data_structures import queue - -# min-heap implementation as priority queue class Heap(queue.Queue): + ''' min-heap implementation as queue ''' def parent_idx(self, idx): + ''' retrieve the parent ''' return idx // 2 def left_child_idx(self, idx): + ''' retrieve the left child ''' return (idx * 2) + 1 def right_child_idx(self, idx): + ''' retrieve the right child ''' return (idx * 2) + 2 def insert(self, data): + ''' inserting an element in the heap ''' super().enqueue(data) if self.rear >= 1: # heap may need to be fixed self.heapify_up() diff --git a/pygorithm/data_structures/linked_list.py b/pygorithm/data_structures/linked_list.py index ceb1fac..02d162c 100644 --- a/pygorithm/data_structures/linked_list.py +++ b/pygorithm/data_structures/linked_list.py @@ -4,7 +4,9 @@ # Linked List and Node can be accomodated in separate classes for convenience class Node(object): - # Each node has its data and a pointer that points to next node in the Linked List + ''' Node class for creating a node for linked list. + Each node has its data and a pointer that points to next node in the Linked List + ''' def __init__(self, data, next=None): ''' constructor ''' self.data = data diff --git a/pygorithm/data_structures/tree.py b/pygorithm/data_structures/tree.py index b994d6f..6a6f40a 100644 --- a/pygorithm/data_structures/tree.py +++ b/pygorithm/data_structures/tree.py @@ -3,6 +3,9 @@ # Node class to create a node for binary tree class Node(object): + ''' Node class for creating a node for tree. + Each node has its data and a pointer that points to next node in the Linked List + ''' def __init__(self, data = None): self.left = None self.right = None @@ -38,17 +41,17 @@ def get_code(self): import inspect return inspect.getsource(Node) -# BinaryTree class to create a binary tree class BinaryTree(object): + ''' BinaryTree class to create a binary tree ''' def __init__(self): self._inorder = [] self._preorder = [] self._postorder = [] - # in this we traverse first to the leftmost node, then print its data and then traverse for rightmost node def inorder(self, root): ''' @type: root: Node object + in this we traverse first to the leftmost node, then print its data and then traverse for rightmost node ''' if root: self.inorder(root.get_left()) # traverse to leftmost child @@ -56,10 +59,10 @@ def inorder(self, root): self.inorder(root.get_right()) # traverse to rightmost child return self._inorder - # in this we first print the root node and then traverse towards leftmost node and then to the rightmost node def preorder(self, root): ''' @type: root: Node object + in this we first print the root node and then traverse towards leftmost node and then to the rightmost node ''' if root: self._preorder.append(root.get_data()) # get the data of current node @@ -67,10 +70,10 @@ def preorder(self, root): self.preorder(root.get_right()) # traverse to rightmost child return self._preorder - # in this we first traverse to the leftmost node and then to the rightmost node and then print the data def postorder(self, root): ''' @type: root: Node object + in this we first traverse to the leftmost node and then to the rightmost node and then print the data ''' if root: self.postorder(root.get_left()) # traverse to leftmost child @@ -85,6 +88,7 @@ def get_code(self): return inspect.getsource(BinaryTree) class BSTNode(object): + ''' class for creating a node for Binary Search tree ''' def __init__(self, data): self.data = data self.leftChild = None @@ -141,6 +145,7 @@ def insert(self, data): return True def min_val_bst_node(self, BSTNode): + ''' for returning the node with the lowest value ''' current = BSTNode # loop down to find the leftmost leaf @@ -196,6 +201,7 @@ def find(self, data): def inorder(self, root): ''' @type: root: Node object + in this we first traverse to the leftmost node and then print the data and then move to the rightmost child ''' if root: self.inorder(root.get_left()) # traverse to leftmost child @@ -203,10 +209,10 @@ def inorder(self, root): self.inorder(root.get_right()) # traverse to rightmost child return self._inorder - # in this we first print the root node and then traverse towards leftmost node and then to the rightmost node def preorder(self, root): ''' @type: root: Node object + in this we first print the root node and then traverse towards leftmost node and then to the rightmost node ''' if root: self._preorder.append(root.get_data()) # get the data of current node @@ -214,10 +220,10 @@ def preorder(self, root): self.preorder(root.get_right()) # traverse to rightmost child return self._preorder - # in this we first traverse to the leftmost node and then to the rightmost node and then print the data def postorder(self, root): ''' @type: root: Node object + in this we first traverse to the leftmost node and then to the rightmost node and then print the data ''' if root: self.postorder(root.get_left()) # traverse to leftmost child diff --git a/tests/kruskal_mst_tests.py b/tests/kruskal_mst_tests.py deleted file mode 100644 index fa75df5..0000000 --- a/tests/kruskal_mst_tests.py +++ /dev/null @@ -1,5 +0,0 @@ -import unittest - -from pygorithm.minimun_spanning_tree import kruskal - - From 539ce39d14e7531148fb4d707c966bbb84054e2a Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 16 Aug 2017 06:55:39 +0530 Subject: [PATCH 037/251] Updated Data_Structure.rst --- docs/Data_Structure.rst | 129 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 125 insertions(+), 4 deletions(-) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 578d3df..e9483cb 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -65,10 +65,10 @@ Stack .. automodule:: pygorithm.data_structures.stack - Stack - ----- - .. autoclass:: Stack - :members: + Stack + ----- + .. autoclass:: Stack + :members: .. automodule:: pygorithm.data_structures.stack @@ -76,3 +76,124 @@ Stack ---------------- .. autoclass:: InfixToPostfix :members: + + + +Queue +----- + +.. automodule:: pygorithm.data_structures.queue + + Queue + ----- + .. autoclass:: Queue + :members: + +.. automodule:: pygorithm.data_structures.queue + + Deque + ----- + .. autoclass:: Deque + :members: + + +Linked Lists +------------ + +.. automodule:: pygorithm.data_structures.linked_list + + Node + ---- + .. autoclass:: Node + :members: + +.. automodule:: pygorithm.data_structures.linked_list + + Singly Linked List + ------------------ + .. autoclass:: SinglyLinkedList + :members: + +.. automodule:: pygorithm.data_structures.linked_list + + Doubly Linked List + ------------------ + .. autoclass:: DoublyLinkedList + :members: + +Tree +---- + +.. automodule:: pygorithm.data_structures.tree + + Node + ---- + .. autoclass:: Node + :members: + +.. automodule:: pygorithm.data_structures.tree + + Binary Tree + ----------- + .. autoclass:: BinaryTree + :members: + +.. automodule:: pygorithm.data_structures.tree + + Binary Search Tree Node + ----------------------- + .. autoclass:: BSTNode + :members: + + Binary Search Tree + ------------------ + .. autoclass:: BinarySearchTree + :members: + +Graph +----- + +.. automodule:: pygorithm.data_structures.graph + + Graph + ----- + .. autoclass:: Graph + :members: + +.. automodule:: pygorithm.data_structures.graph + + Weighted Graph + -------------- + .. autoclass:: WeightedGraph + :members: + +.. automodule:: pygorithm.data_structures.graph + + Topological Sort + ---------------- + .. autoclass:: TopologicalSort + :members: + +.. automodule:: pygorithm.data_structures.graph + + Check Cycle in Directed Graph + ----------------------------- + .. autoclass:: CheckCycleDirectedGraph + :members: + +.. automodule:: pygorithm.data_structures.graph + + Check Cycle in Undirected Graph + ------------------------------- + .. autoclass:: CheckCycleUndirectedGraph + :members: + +Heap +---- + +.. automodule:: pygorithm.data_structures.heap + + Heap + ----- + .. autoclass:: Heap + :members: From dc6ed0cd76085e7f4d712bf9a41e7fd57e5e2189 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 16 Aug 2017 06:56:03 +0530 Subject: [PATCH 038/251] Made some changes in tests for data structures --- tests/test_data_structure.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 000be53..65ef642 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -8,7 +8,6 @@ tree, graph, heap) -from pygorithm.data_structures.graph import WeightedGraph class TestStack(unittest.TestCase): @@ -42,7 +41,7 @@ def test_infix_to_postfix(self): self.assertTrue(resultString, expectedResult) -class KruskalTest(unittest.TestCase): +class TestKruskal(unittest.TestCase): def test_minimum_spanning_tree(self): """ test inspired from the example at the following link: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm @@ -50,7 +49,7 @@ def test_minimum_spanning_tree(self): edges_weighted = [((1, 2), 7), ((2, 3), 8), ((1, 4), 5), ((2, 4), 9), ((2, 5), 7), ((3, 5), 5), ((4, 6), 6), ((5, 6), 8), ((5, 7), 9), ((6, 7), 11), ((4, 5), 15)] - wgraph = WeightedGraph() + wgraph = graph.WeightedGraph() for (u, v), weight in edges_weighted: wgraph.add_edge(u, v, weight) expected = [((1, 4), 5), ((3, 5), 5), ((4, 6), 6), ((1, 2), 7), ((2, 5), 7), ((5, 7), 9)] @@ -61,7 +60,7 @@ def test_minimum_spanning_tree_2(self): Test inspired by the gif at the left of the page https://en.wikipedia.org/wiki/Kruskal%27s_algorithm """ edges_weighted = [((1, 2), 3), ((1, 5), 1), ((2, 5), 4), ((2, 3), 5), ((3, 5), 6), ((3, 4), 2), ((4, 5), 7)] - wgraph = WeightedGraph() + wgraph = graph.WeightedGraph() for (u, v), weight in edges_weighted: wgraph.add_edge(u, v, weight) expected = [((1, 5), 1), ((3, 4), 2), ((1, 2), 3), ((2, 3), 5)] From 57934621189e214445d0e27f28e022264c0b600a Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 16 Aug 2017 07:15:36 +0530 Subject: [PATCH 039/251] Released 1.0 version --- docs/conf.py | 2 +- .../__pycache__/shell_sort.cpython-35.pyc | Bin 835 -> 839 bytes setup.py | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 0e28827..c118f4f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,7 +12,7 @@ # -- General configuration ------------------------------------------------ project = u'pygorithm' -version = release = u'0.1' +version = release = u'1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom diff --git a/pygorithm/sorting/__pycache__/shell_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/shell_sort.cpython-35.pyc index 69bbc4f20b56d024d3ad1680a958c80ab330db29..400bced7023a058e60b34acd00763b1d4dbd7390 100644 GIT binary patch delta 34 qcmX@icASk7@pXSB+eXfpjEw%1KQsDmc4cB>1OS8p2$}!@ diff --git a/setup.py b/setup.py index a4b5fb6..7543822 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ setup( name='pygorithm', - version='0.1', + version='1.0', description='A Python algorithms module for learning', long_description=long_description, # The project's main homepage. From 8be6e2dcfd0483c3f332960babb6c62508c75089 Mon Sep 17 00:00:00 2001 From: ashu01 Date: Wed, 16 Aug 2017 21:50:00 +0530 Subject: [PATCH 040/251] best case for Bubble sort --- pygorithm/sorting/bubble_sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/sorting/bubble_sort.py b/pygorithm/sorting/bubble_sort.py index 34cb9f7..3f9b559 100644 --- a/pygorithm/sorting/bubble_sort.py +++ b/pygorithm/sorting/bubble_sort.py @@ -26,7 +26,7 @@ def improved_sort(List): # time complexities def time_complexities(): - return '''Best Case: O(n ^ 2), Average Case: O(n ^ 2), Worst Case: O(n ^ 2) \n For Improved Bubble Sort: \n Best Case: O(n); Average Case: O(n * (n - 1) / 4); Worst Case: O(n ^ 2) ''' + return '''Best Case: O(n) , Average Case: O(n ^ 2), Worst Case: O(n ^ 2) \n For Improved Bubble Sort: \n Best Case: O(n); Average Case: O(n * (n - 1) / 4); Worst Case: O(n ^ 2) ''' # easily retrieve the source code of the sort function def get_code(): From 96d03a6831f60ac61a65ce17e1407322ab96e93c Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 17 Aug 2017 06:31:15 +0530 Subject: [PATCH 041/251] Created math module --- pygorithm/math/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 pygorithm/math/__init__.py diff --git a/pygorithm/math/__init__.py b/pygorithm/math/__init__.py new file mode 100644 index 0000000..05039ea --- /dev/null +++ b/pygorithm/math/__init__.py @@ -0,0 +1 @@ +from . modules import modules From 161a9835962f60122d1cd2b8e7f3cafd4d7ab739 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 17 Aug 2017 06:31:42 +0530 Subject: [PATCH 042/251] Implementation for finding LCM of List of numbers --- pygorithm/math/lcm.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 pygorithm/math/lcm.py diff --git a/pygorithm/math/lcm.py b/pygorithm/math/lcm.py new file mode 100644 index 0000000..9da4851 --- /dev/null +++ b/pygorithm/math/lcm.py @@ -0,0 +1,31 @@ +# Author : OMKAR PATHAK +# Created at: 16th August 2017 + +from functools import reduce # need this line if you're using Python3.x + +def lcm(List): + ''' function to find LCM for given list of elements + + :param List: List of which LCM is to be found out + ''' + def _lcm(a, b): + ''' helper function for finding LCM ''' + if a > b: + greater = a + else: + greater = b + + while True: + if greater % a == 0 and greater % b == 0: + lcm = greater + break + greater += 1 + + return lcm + + return reduce(lambda x, y: _lcm(x, y), List) + +def get_code(): + """ returns the code for the current class """ + import inspect + return inspect.getsource(lcm) From 1c3e41e85c7b6756484ad37cd6c9c2641405fc18 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 17 Aug 2017 06:32:09 +0530 Subject: [PATCH 043/251] Implementation of sieve of eratosthenes --- pygorithm/math/sieve_of_eratosthenes.py | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pygorithm/math/sieve_of_eratosthenes.py diff --git a/pygorithm/math/sieve_of_eratosthenes.py b/pygorithm/math/sieve_of_eratosthenes.py new file mode 100644 index 0000000..630df28 --- /dev/null +++ b/pygorithm/math/sieve_of_eratosthenes.py @@ -0,0 +1,41 @@ +# Author: OMKAR PATHAK +# Created at: 16th August 2017 + +# Sieve of Eratosthenes is one of the efficient algorithms to find all the prime numbers upto n, where n can be +# upto 10 million. This algorithm is very efficient and fast and hence is preferred by many competitive programmers. + +# Algo: +# 1. Create a list of consecutive integers from 2 to n: (2, 3, 4, …, n). +# 2. Initially, let p equal 2, the first prime number. +# 3. Starting from p, count up in increments of p and mark each of these numbers greater than p itself in the list. +# These numbers will be 2p, 3p, 4p, etc.; note that some of them may have already been marked. +# 4. Find the first number greater than p in the list that is not marked. If there was no such number, stop. Otherwise, +# let p now equal this number (which is the next prime), and repeat from step 3. +# When the algorithm terminates, all the numbers in the list that are not marked (i.e are True) are prime. + +def sieve_of_eratosthenes(n): + ''' function to find and print prime numbers upto the specified number + + :param n: upper limit for finding all primes less than this value + ''' + primes = [True] * (n + 1) + p = 2 # because p is the smallest prime + + while(p * p <= n): + # if p is not marked as False, this it is a prime + if(primes[p]) == True: + # mark all the multiples of number as False + for i in range(p * 2, n + 1, p): + primes[i] = False + + p += 1 + + # getting all primes + primes = [element for element in range(2, n) if primes[element]] + + return primes + +def get_code(): + """ returns the code for the current class """ + import inspect + return inspect.getsource(sieve_of_eratosthenes) From 2c1d1eb49416720d4cc6179daa80f263712688cc Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 17 Aug 2017 06:32:33 +0530 Subject: [PATCH 044/251] Added modules.py for listing the modules in math --- pygorithm/math/modules.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 pygorithm/math/modules.py diff --git a/pygorithm/math/modules.py b/pygorithm/math/modules.py new file mode 100644 index 0000000..c45ec3c --- /dev/null +++ b/pygorithm/math/modules.py @@ -0,0 +1,15 @@ +import pkgutil + + +def modules(): + """ + Find all functions in pygorithm.data_structures + """ + import pygorithm.math + package = pygorithm.math + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules From 9e8434382688c1b41f88f907fef173bc6c37777d Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 17 Aug 2017 06:32:52 +0530 Subject: [PATCH 045/251] Added tests for math --- tests/test_math.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/test_math.py diff --git a/tests/test_math.py b/tests/test_math.py new file mode 100644 index 0000000..b0022fd --- /dev/null +++ b/tests/test_math.py @@ -0,0 +1,16 @@ +import unittest + +from pygorithm.math import ( + lcm, + sieve_of_eratosthenes) + +class TestLCM(unittest.TestCase): + def test_lcm(self): + self.assertEqual(lcm.lcm([3, 12, 16]), 48) + +class TestSieveOfEratosthenes(unittest.TestCase): + def test_sieve_of_eratosthenes(self): + self.assertEqual(sieve_of_eratosthenes.sieve_of_eratosthenes(10), [2, 3, 5, 7]) + +if __name__ == '__main__': + unittest.main() From 62651e182701f39e5aa9dcaef01fb2ec83ca3264 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 17 Aug 2017 18:30:19 +0530 Subject: [PATCH 046/251] Fixed issue #31 --- pygorithm/data_structures/tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/data_structures/tree.py b/pygorithm/data_structures/tree.py index 6a6f40a..97ef6e1 100644 --- a/pygorithm/data_structures/tree.py +++ b/pygorithm/data_structures/tree.py @@ -157,7 +157,7 @@ def min_val_bst_node(self, BSTNode): def delete(self, data): ''' For deleting the BSTNode ''' if self is None: - return root + return None # if current BSTNode's data is less than that of root BSTNode, then only search in left subtree else right subtree if data < self.data: From d0895a631cfc1a5c3603a4c29f138438174f89e8 Mon Sep 17 00:00:00 2001 From: ashu01 Date: Thu, 17 Aug 2017 22:11:54 +0530 Subject: [PATCH 047/251] LCM USING GCD --- pygorithm/math/lcm_using_gcd.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 pygorithm/math/lcm_using_gcd.py diff --git a/pygorithm/math/lcm_using_gcd.py b/pygorithm/math/lcm_using_gcd.py new file mode 100644 index 0000000..8e99771 --- /dev/null +++ b/pygorithm/math/lcm_using_gcd.py @@ -0,0 +1,32 @@ +# Author: Ashutosh Gupta +# Created On: 8/17/2017 +# Time: 10:03 PM + + +def gcd(x, y): + """ + Function to find gcm (greatest common divisor) of two numbers + :param x: first number + :param y: second number + :return: gcd of x and y + """ + while y != 0: + (x, y) = (y, x % y) + return x + + +def lcm_using_gcd(List): + """ function to find LCM for given list of elements + + :param List: List of which LCM is to be found out + """ + lcm = List[0] + for element in List: + lcm = lcm * element / gcd(lcm, element) + + return lcm + +def get_code(): + """ returns the code for the current class """ + import inspect + return inspect.getsource(lcm_using_gcd) From e097bcde9bb65c47531c1f51df28bc04a9dbf9e1 Mon Sep 17 00:00:00 2001 From: ashu01 Date: Thu, 17 Aug 2017 22:12:47 +0530 Subject: [PATCH 048/251] test case for lcm using gcd --- tests/test_math.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_math.py b/tests/test_math.py index b0022fd..26e3c4d 100644 --- a/tests/test_math.py +++ b/tests/test_math.py @@ -2,12 +2,16 @@ from pygorithm.math import ( lcm, + lcm_using_gcd, sieve_of_eratosthenes) class TestLCM(unittest.TestCase): def test_lcm(self): self.assertEqual(lcm.lcm([3, 12, 16]), 48) + def test_lcm_using_gcd(self): + self.assertEqual(lcm_using_gcd.lcm_using_gcd([3, 12, 16]), 48) + class TestSieveOfEratosthenes(unittest.TestCase): def test_sieve_of_eratosthenes(self): self.assertEqual(sieve_of_eratosthenes.sieve_of_eratosthenes(10), [2, 3, 5, 7]) From 29ec0142e97345c382e0655020f13834d5f6fea8 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Thu, 17 Aug 2017 12:56:45 -0500 Subject: [PATCH 049/251] Updated sorting package and packages __init__.py. when users are using this from the command line, after importing the module or its packages they can call help() on the methods or packages. Update modular level __init__.py: - Added proper docstrings to top of files - optimized imports - added __version__, __author__, __maintainers__, __contributors__ - Added __all__ variable to list all modules in package Brought all files in sorting module to PEP8 compliance: - Added proper docstrings to top of files - Added proper docstrings to methods - removed camel casing from variable and method names, they are not PEP8 compliant Fixed sorting module __init__.py: - Added proper docstrings to top of file - Added __all__ variable to list all modules in package - optimized imports Example: ``` import pygorithm help(pygorithm) Help on package pygorithm: NAME pygorithm - Pygorithm DESCRIPTION A Python module to learn all the major algorithms on the go! Purely for educational purposes If you have found my software to be of any use to you, do consider helping me pay my internet bills. This would encourage me to create many such softwares :) PayPal -> https://paypal.me/omkarpathak27 INR - > https://www.instamojo.com/@omkarpathak/ PACKAGE CONTENTS data_structures (package) fibonacci (package) math (package) searching (package) sorting (package) DATA __all__ = ['data_structures', 'fibonacci', 'math', 'searching', 'sorti... __contributors__ = ['Mohamed Kiouaz', 'Ashutosh Gupta'] __maintainers__ = ['Omkar Pathak'] VERSION 1.0.0 AUTHOR Omkar Pathak FILE c:\users\doarni\dev\pygorithm\pygorithm\__init__.py ``` --- pygorithm/__init__.py | 33 +++++++++++ pygorithm/sorting/__init__.py | 23 +++++++- pygorithm/sorting/bubble_sort.py | 88 ++++++++++++++++++----------- pygorithm/sorting/bucket_sort.py | 85 ++++++++++++++++++---------- pygorithm/sorting/counting_sort.py | 65 +++++++++++++-------- pygorithm/sorting/heap_sort.py | 79 ++++++++++++++++++-------- pygorithm/sorting/insertion_sort.py | 52 ++++++++++++----- pygorithm/sorting/merge_sort.py | 68 +++++++++++++++------- pygorithm/sorting/modules.py | 7 +++ pygorithm/sorting/quick_sort.py | 53 +++++++++++------ pygorithm/sorting/selection_sort.py | 56 +++++++++++++----- pygorithm/sorting/shell_sort.py | 54 ++++++++++++------ 12 files changed, 473 insertions(+), 190 deletions(-) diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index e69de29..060e269 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -0,0 +1,33 @@ +""" +Pygorithm + +A Python module to learn all the major algorithms on the go! +Purely for educational purposes + +If you have found my software to be of any use to you, +do consider helping me pay my internet bills. +This would encourage me to create many such softwares :) + +PayPal -> https://paypal.me/omkarpathak27 +INR - > https://www.instamojo.com/@omkarpathak/ +""" +from pygorithm import data_structures +from pygorithm import fibonacci +from pygorithm import math +from pygorithm import searching +from pygorithm import sorting + +__version__ = '1.0.0' +__author__ = 'Omkar Pathak' + +# List maintainers here +__maintainers__ = ['Omkar Pathak'] +# List contributors here +__contributors__ = ['Mohamed Kiouaz', + 'Ashutosh Gupta'] + +__all__ = ['data_structures', + 'fibonacci', + 'math', + 'searching', + 'sorting'] diff --git a/pygorithm/sorting/__init__.py b/pygorithm/sorting/__init__.py index 05039ea..0dcc5dd 100644 --- a/pygorithm/sorting/__init__.py +++ b/pygorithm/sorting/__init__.py @@ -1 +1,22 @@ -from . modules import modules +""" +Collection of sorting methods +""" +from . import quick_sort +from . import bucket_sort +from . import bubble_sort +from . import heap_sort +from . import counting_sort +from . import insertion_sort +from . import merge_sort +from . import selection_sort +from . import shell_sort + +__all__ = ['bubble_sort', + 'bucket_sort', + 'counting_sort', + 'heap_sort', + 'insertion_sort', + 'merge_sort', + 'quick_sort', + 'selection_sort', + 'shell_sort'] diff --git a/pygorithm/sorting/bubble_sort.py b/pygorithm/sorting/bubble_sort.py index 3f9b559..96fd300 100644 --- a/pygorithm/sorting/bubble_sort.py +++ b/pygorithm/sorting/bubble_sort.py @@ -1,39 +1,63 @@ -# Author: OMKAR PATHAK -# Contributors: Mohamed Kiouaz -# Created On: 31st July 2017 - -# Best O(n); Average O(n*(n-1)/4); Worst O(n^2) - -# Bubble Sorting algorithm -def sort(List): - for i in range(len(List)): - for j in range(len(List) - 1, i, -1): - if List[j] < List[j - 1]: - List[j], List[j - 1] = List[j - 1], List[j] - return List - -# Improved Bubble Sorting algorithm -def improved_sort(List): - for i in range(len(List)): +""" +Author: OMKAR PATHAK +Contributors: Mohamed Kiouaz +Created On: 31st July 2017 + +Best O(n); Average O(n*(n-1)/4); Worst O(n^2) +""" +import inspect + + +def sort(_list): + """ + Bubble Sorting algorithm + + :param _list: list of values to sort + :return: sorted values + """ + for i in range(len(_list)): + for j in range(len(_list) - 1, i, -1): + if _list[j] < _list[j - 1]: + _list[j], _list[j - 1] = _list[j - 1], _list[j] + return _list + + +def improved_sort(_list): + """ + Improved Bubble Sorting algorithm + + :param _list: list of values to sort + :return: sorted values + """ + for i in range(len(_list)): stop = True - for j in range(len(List) - 1, i, -1): - if List[j] < List[j - 1]: + for j in range(len(_list) - 1, i, -1): + if _list[j] < _list[j - 1]: stop = False - List[j], List[j - 1] = List[j - 1], List[j] - if(stop == True): - return List - return List + _list[j], _list[j - 1] = _list[j - 1], _list[j] + if stop: + return _list + return _list + -# time complexities +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(n) , Average Case: O(n ^ 2), Worst Case: O(n ^ 2) \n For Improved Bubble Sort: \n Best Case: O(n); Average Case: O(n * (n - 1) / 4); Worst Case: O(n ^ 2) ''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(n), " \ + "Average Case: O(n ^ 2), " \ + "Worst Case: O(n ^ 2).\n\n" \ + "For Improved Bubble Sort:\nBest Case: O(n); Average Case: O(n * (n - 1) / 4); Worst Case: O(n ^ 2)" + -# easily retrieve the source code of the sort function def get_code(): - import inspect - return inspect.getsource(sort) + """ + easily retrieve the source code + of the sort function -# easily retrieve the source code of the sort function -def get_improved_code(): - import inspect - return inspect.getsource(improved_sort) + :return: source code + """ + return inspect.getsource(sort) diff --git a/pygorithm/sorting/bucket_sort.py b/pygorithm/sorting/bucket_sort.py index f3cd55d..4f6eb31 100644 --- a/pygorithm/sorting/bucket_sort.py +++ b/pygorithm/sorting/bucket_sort.py @@ -1,58 +1,83 @@ -# Author: OMKAR PATHAK -# Created On: 31st July 2017 +""" +Author: OMKAR PATHAK +Created On: 31st July 2017 -# Best O(n); Average O(n); Worst O(n) + - Best O(n) + - Average O(n) + - Worst O(n) +""" +import math +from pygorithm.sorting import insertion_sort +import inspect -# bucket sort algorithm -def sort(List, bucketSize = 5): - from pygorithm.sorting import insertion_sort - import math +def sort(_list, bucket_size=5): + """ + bucket sort algorithm + + :param _list: list of values to sort + :param bucket_size: Size of the bucket + :return: sorted values + """ string = False - if(len(List) == 0): - print('You don\'t have any elements in array!') - elif all(isinstance(element, str) for element in List): + if len(_list) == 0: + # print("You don\'t have any elements in array!") + raise ValueError("Array can not be empty.") + + elif all(isinstance(element, str) for element in _list): string = True - List = [ord(element) for element in List] + _list = [ord(element) for element in _list] - minValue = List[0] - maxValue = List[0] + min_value = _list[0] + max_value = _list[0] # For finding minimum and maximum values - for i in range(0, len(List)): - if List[i] < minValue: - minValue = List[i] - elif List[i] > maxValue: - maxValue = List[i] + for i in range(0, len(_list)): + if _list[i] < min_value: + min_value = _list[i] + elif _list[i] > max_value: + max_value = _list[i] # Initialize buckets - bucketCount = math.floor((maxValue - minValue) / bucketSize) + 1 + bucket_count = math.floor((max_value - min_value) / bucket_size) + 1 buckets = [] - for i in range(0, bucketCount): + for i in range(0, int(bucket_count)): buckets.append([]) # For putting values in buckets - for i in range(0, len(List)): - buckets[math.floor((List[i] - minValue) / bucketSize)].append(List[i]) + for i in range(0, len(_list)): + # TODO: floor expects floats but could be receiving int or slice + buckets[math.floor(float((_list[i] - min_value) / bucket_size))].append(_list[i]) # Sort buckets and place back into input array - sortedArray = [] + sorted_array = [] for i in range(0, len(buckets)): insertion_sort.sort(buckets[i]) for j in range(0, len(buckets[i])): - sortedArray.append(buckets[i][j]) + sorted_array.append(buckets[i][j]) if string: - return [chr(element) for element in sortedArray] + return [chr(element) for element in sorted_array] else: - return sortedArray + return sorted_array -# time complexities + +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(n), Average Case: O(n), Worst Case: O(n)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(n), Average Case: O(n), Worst Case: O(n)" + -# easily retrieve the source code of the sort function def get_code(): - import inspect + """ + easily retrieve the source code + of the sort function + + :return: source code + """ return inspect.getsource(sort) diff --git a/pygorithm/sorting/counting_sort.py b/pygorithm/sorting/counting_sort.py index 8258340..0c85827 100644 --- a/pygorithm/sorting/counting_sort.py +++ b/pygorithm/sorting/counting_sort.py @@ -1,37 +1,58 @@ -# Author: OMKAR PATHAK -# Created On: 31st July 2017 +""" +Author: OMKAR PATHAK +Created On: 31st July 2017 + + - Best = Average = Worst = O(n + k) +""" +import inspect -# Best = Average = Worst = O(n + k) # counting sort algorithm -def sort(List): +def sort(_list): + """ + counting sort algorithm + + :param _list: list of values to sort + :return: sorted values + """ try: - maxValue = 0 - for i in range(len(List)): - if List[i] > maxValue: - maxValue = List[i] + max_value = 0 + for i in range(len(_list)): + if _list[i] > max_value: + max_value = _list[i] - buckets = [0] * (maxValue + 1) + buckets = [0] * (max_value + 1) - for i in List: + for i in _list: buckets[i] += 1 - i = 0 - for j in range(maxValue + 1): - for a in range(buckets[j]): - List[i] = j - i += 1 - return List + for j in range(max_value + 1): + for a in range(buckets[j]): + _list[i] = j + i += 1 + + return _list - except TypeError: - print('Counting Sort can only be applied to integers') + except TypeError as error: + print('Counting Sort can only be applied to integers. {}'.format(error)) -# time complexities + +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(n + k), Average Case: O(n + k), Worst Case: O(n + k)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(n + k), Average Case: O(n + k), Worst Case: O(n + k)" + -# easily retrieve the source code of the sort function def get_code(): - import inspect + """ + easily retrieve the source code + of the sort function + + :return: source code + """ return inspect.getsource(sort) diff --git a/pygorithm/sorting/heap_sort.py b/pygorithm/sorting/heap_sort.py index 88ab798..9b02024 100644 --- a/pygorithm/sorting/heap_sort.py +++ b/pygorithm/sorting/heap_sort.py @@ -1,45 +1,78 @@ -# Author: OMKAR PATHAK -# Created On: 31st July 2017 +""" +Author: OMKAR PATHAK +Created On: 31st July 2017 -# Best O(nlog(n)); Average O(nlog(n)); Worst O(nlog(n)) + - Best O(nlog(n)) + - Average O(nlog(n)) + - Worst O(nlog(n)) -# heap sort algorithm -def sort(List): - heapify(List) # create the heap - end = len(List) - 1 +""" +import inspect + + +def sort(_list): + """ + heap sort algorithm + + :param _list: list of values to sort + :return: sorted values + """ + # TODO: Add description of how this works! + + # create the heap + heapify(_list) + end = len(_list) - 1 while end > 0: - List[end], List[0] = List[0], List[end] - shiftDown(List, 0, end - 1) + _list[end], _list[0] = _list[0], _list[end] + shift_down(_list, 0, end - 1) end -= 1 - return List + return _list + + +def heapify(_list): + """ + function helps to maintain the heap property + + :param _list: list of values to sort + :return: sorted values + """ -def heapify(List): - ''' This function helps to maintain the heap property ''' - # start = (len(List) - 2) // 2 (faster execution) - start = len(List) // 2 + start = len(_list) // 2 while start >= 0: - shiftDown(List, start, len(List) - 1) + shift_down(_list, start, len(_list) - 1) start -= 1 -def shiftDown(List, start, end): + +def shift_down(_list, start, end): root = start while root * 2 + 1 <= end: child = root * 2 + 1 # right child exists and is greater than left child - if child + 1 <= end and List[child] < List[child + 1]: + if child + 1 <= end and _list[child] < _list[child + 1]: child += 1 # if child is greater than root(parent), then swap their positions - if child <= end and List[root] < List[child]: - List[root], List[child] = List[child], List[root] + if child <= end and _list[root] < _list[child]: + _list[root], _list[child] = _list[child], _list[root] root = child else: return -# time complexities + +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(nlogn), Average Case: O(nlogn), Worst Case: O(nlogn)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(nlogn), Average Case: O(nlogn), Worst Case: O(nlogn)" + -# easily retrieve the source code of the sort function def get_code(): - import inspect + """ + easily retrieve the source code + of the sort function + + :return: source code + """ return inspect.getsource(sort) diff --git a/pygorithm/sorting/insertion_sort.py b/pygorithm/sorting/insertion_sort.py index 5730767..f23dc65 100644 --- a/pygorithm/sorting/insertion_sort.py +++ b/pygorithm/sorting/insertion_sort.py @@ -1,25 +1,47 @@ -# Author: OMKAR PATHAK -# Created On: 31st July 2017 +""" +Author: OMKAR PATHAK +Created On: 31st July 2017 -# Best O(n); Average O(n^2); Worst O(n^2) + - Best O(n) + - Average O(n^2) + - Worst O(n^2) +""" +import inspect -# insertion sort algorithm -def sort(List): - for i in range(1, len(List)): - currentNumber = List[i] + +def sort(_list): + """ + Insertion sort algorithm + + :param _list: list or values to sort + :return: sort values + """ + for i in range(1, len(_list)): + current_number = _list[i] for j in range(i - 1, -1, -1): - if List[j] > currentNumber : - List[j], List[j + 1] = List[j + 1], List[j] + if _list[j] > current_number: + _list[j], _list[j + 1] = _list[j + 1], _list[j] else: - List[j + 1] = currentNumber + _list[j + 1] = current_number break - return List + return _list + -# time complexities +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(n), Average Case: O(n ^ 2), Worst Case: O(n ^ 2)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(n), Average Case: O(n ^ 2), Worst Case: O(n ^ 2)" + -# easily retrieve the source code of the sort function def get_code(): - import inspect + """ + easily retrieve the source code + of the sort function + + :return: source code + """ return inspect.getsource(sort) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index b30deba..d07d51a 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -1,11 +1,22 @@ -# Author: OMKAR PATHAK -# Created On: 31st July 2017 +""" +Author: OMKAR PATHAK +Created On: 31st July 2017 -# Best = Average = Worst = O(nlog(n)) + - Best = Average = Worst = O(n log(n)) + +""" +import inspect -# merge function to merge the separated lists -def merge(a,b): - """ Function to merge two arrays """ + +def merge(a, b): + """ + Function to merge + two arrays / separated lists + + :param a: Array 1 + :param b: Array 2 + :return: merged arrays + """ c = [] while len(a) != 0 and len(b) != 0: if a[0] < b[0]: @@ -20,22 +31,39 @@ def merge(a,b): c += a return c -# Code for merge sort -def sort(List): - """ Function to sort an array using merge sort algorithm """ - if len(List) == 0 or len(List) == 1: - return List + +def sort(_list): + """ + Function to sort an array + using merge sort algorithm + + :param _list: list of values to sort + :return: sorted + """ + if len(_list) == 0 or len(_list) == 1: + return _list else: - middle = len(List)//2 - a = sort(List[:middle]) - b = sort(List[middle:]) - return merge(a,b) + middle = len(_list)//2 + a = sort(_list[:middle]) + b = sort(_list[middle:]) + return merge(a, b) + -# time complexities +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(nlogn), Average Case: O(nlogn), Worst Case: O(nlogn)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(nlogn), Average Case: O(nlogn), Worst Case: O(nlogn)" + -# easily retrieve the source code of the sort function def get_code(): - import inspect - return inspect.getsource(sort), inspect.getsource(merge) + """ + easily retrieve the source code + of the sort function + + :return: source code + """ + return inspect.getsource(sort) diff --git a/pygorithm/sorting/modules.py b/pygorithm/sorting/modules.py index 55f60c5..8d4598b 100644 --- a/pygorithm/sorting/modules.py +++ b/pygorithm/sorting/modules.py @@ -1,4 +1,11 @@ +""" +List all modules +""" import pkgutil + +# TODO: This can be moved to the __init__.py file in the __all__ +# TODO: See the __init__.py file + def modules(): """ Find all functions in pygorithm.sorting diff --git a/pygorithm/sorting/quick_sort.py b/pygorithm/sorting/quick_sort.py index f462e6a..f3b65df 100644 --- a/pygorithm/sorting/quick_sort.py +++ b/pygorithm/sorting/quick_sort.py @@ -1,23 +1,44 @@ -# Author: OMKAR PATHAK -# Created On: 31st July 2017 - -# Best = Average = O(nlog(n)), Worst = O(n ^ 2) - -# quick_sort algorithm -def sort(List): - if len(List) <= 1: - return List - pivot = List[len(List) // 2] - left = [x for x in List if x < pivot] - middle = [x for x in List if x == pivot] - right = [x for x in List if x > pivot] +""" +Author: OMKAR PATHAK +Created On: 31st July 2017 + + - Best = Average = O(n log(n)) + - Worst = O(n ^ 2) +""" +import inspect + + + +def sort(_list): + """ + quick_sort algorithm + :param _list: list of integers to sort + :return: sorted list + """ + if len(_list) <= 1: + return _list + pivot = _list[len(_list) // 2] + left = [x for x in _list if x < pivot] + middle = [x for x in _list if x == pivot] + right = [x for x in _list if x > pivot] return sort(left) + middle + sort(right) -# time complexities + +# TODO: Are these necessary? def time_complexities(): + """ + Return information on functions + time complexity + :return: string + """ return '''Best Case: O(nlogn), Average Case: O(nlogn), Worst Case: O(n ^ 2)''' -# easily retrieve the source code of the sort function + def get_code(): - import inspect + """ + easily retrieve the source code + of the sort function + + :return: source code + """ return inspect.getsource(sort) diff --git a/pygorithm/sorting/selection_sort.py b/pygorithm/sorting/selection_sort.py index ac1e71a..4899803 100644 --- a/pygorithm/sorting/selection_sort.py +++ b/pygorithm/sorting/selection_sort.py @@ -1,24 +1,50 @@ -# Author: OMKAR PATHAK -# Created On: 31st July 2017 +""" +Author: OMKAR PATHAK +Created On: 31st July 2017 -# Best O(n^2); Average O(n^2); Worst O(n^2) + - Best O(n^2) + - Average O(n^2) + - Worst O(n^2) +""" +import inspect -# selection sort algorithm -def sort(List): - for i in range(len(List) - 1): #For iterating n - 1 times + +def sort(_list): + """ + selection sort algorithm + + :param _list: list of integers to sort + :return: sorted list + """ + + # For iterating n - 1 times + for i in range(len(_list) - 1): minimum = i - for j in range( i + 1, len(List)): # Compare i and i + 1 element - if(List[j] < List[minimum]): + + # Compare i and i + 1 element + for j in range(i + 1, len(_list)): + if _list[j] < _list[minimum]: minimum = j - if(minimum != i): - List[i], List[minimum] = List[minimum], List[i] - return List + if minimum != i: + _list[i], _list[minimum] = _list[minimum], _list[i] + return _list -# time complexities + +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(n ^ 2), Average Case: O(n ^ 2), Worst Case: O(n ^ 2)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(n ^ 2), Average Case: O(n ^ 2), Worst Case: O(n ^ 2)" + -# easily retrieve the source code of the sort function def get_code(): - import inspect + """ + easily retrieve the source code + of the sort function + + :return: source code + """ return inspect.getsource(sort) diff --git a/pygorithm/sorting/shell_sort.py b/pygorithm/sorting/shell_sort.py index a02edc1..5acfae5 100644 --- a/pygorithm/sorting/shell_sort.py +++ b/pygorithm/sorting/shell_sort.py @@ -1,28 +1,50 @@ -# Author: OMKAR PATHAK -# Created On: 31st July 2017 +""" +Author: OMKAR PATHAK +Created On: 31st July 2017 -# Best Case O(n logn); Average Case O(depends on gap sequence); Worst Case O(n^2) + - Best Case O(n log n) + - Average Case O(depends on gap sequence) + - Worst Case O(n^2) +""" +import inspect -# shell sort algorithm -def sort(List): - gap = len(List) // 2 + +def sort(_list): + """ + Shell sort algorithm + + :param _list: list of integers to sort + :return: sorted list + """ + gap = len(_list) // 2 while gap > 0: - for i in range(gap, len(List)): - currentItem = List[i] + for i in range(gap, len(_list)): + current_item = _list[i] j = i - while j >= gap and List[j - gap] > currentItem: - List[j] = List[j - gap] + while j >= gap and _list[j - gap] > current_item: + _list[j] = _list[j - gap] j -= gap - List[j] = currentItem + _list[j] = current_item gap //= 2 - return List + return _list -# time complexities + +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(nlogn), Average Case: O(depends on gap sequence), Worst Case: O(n ^ 2)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(nlogn), Average Case: O(depends on gap sequence), Worst Case: O(n ^ 2)" + -# easily retrieve the source code of the sort function def get_code(): - import inspect + """ + easily retrieve the source code + of the sort function + + :return: source code + """ return inspect.getsource(sort) From 07f88408640953ef4cf1397f583863cb91a7ec81 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Thu, 17 Aug 2017 13:45:46 -0500 Subject: [PATCH 050/251] - Updates all __init__.py files: - Optimized imports - added __all__ to list all modules in packages - Updated main __init__.py - Added all contibutors - updated docstring - Added Contributors.md --- CONTIRBUTORS.md | 14 ++++++++ pygorithm/__init__.py | 51 ++++++++++++++++++++++----- pygorithm/data_structures/__init__.py | 16 ++++++++- pygorithm/fibonacci/__init__.py | 20 ++++++++--- pygorithm/math/__init__.py | 13 ++++++- pygorithm/searching/__init__.py | 17 ++++++++- pygorithm/sorting/__init__.py | 20 ++++++----- 7 files changed, 125 insertions(+), 26 deletions(-) create mode 100644 CONTIRBUTORS.md diff --git a/CONTIRBUTORS.md b/CONTIRBUTORS.md new file mode 100644 index 0000000..dbd8c1f --- /dev/null +++ b/CONTIRBUTORS.md @@ -0,0 +1,14 @@ +# Contributors: + + - Mohamed 'MohamedKiouaz' Kiouaz + - Ashutosh 'ashu01' Gupta + - Allston 'AllstonMickey' Mickey + - Dmytro 'dmytrostriletskyi' Striletskyi + - Emett 'the-kid89' Speer + - Viktor 'vhag' Hagstrom + - Dion 'kingdion' Misic + - Chandan 'crowchirp' Rai + - Jae Hyeon 'skystar-p' Park + - dstark85 + - Songzhuozhuo 'souo' + - Emil 'Skeen' Madsen \ No newline at end of file diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 060e269..53696c1 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -10,6 +10,22 @@ PayPal -> https://paypal.me/omkarpathak27 INR - > https://www.instamojo.com/@omkarpathak/ + +CONTRIBUTORS: + +Mohamed 'MohamedKiouaz' Kiouaz +Ashutosh 'ashu01' Gupta +Allston 'AllstonMickey' Mickey +Dmytro 'dmytrostriletskyi' Striletskyi +Emett 'the-kid89' Speer +Viktor 'vhag' Hagstrom +Dion 'kingdion' Misic +Chandan 'crowchirp' Rai +Jae Hyeon 'skystar-p' Park +dstark85 +Songzhuozhuo 'souo' +Emil 'Skeen' Madsen + """ from pygorithm import data_structures from pygorithm import fibonacci @@ -21,13 +37,30 @@ __author__ = 'Omkar Pathak' # List maintainers here -__maintainers__ = ['Omkar Pathak'] +__maintainers__ = [ + 'Omkar Pathak' +] # List contributors here -__contributors__ = ['Mohamed Kiouaz', - 'Ashutosh Gupta'] - -__all__ = ['data_structures', - 'fibonacci', - 'math', - 'searching', - 'sorting'] +__contributors__ = [ + "Omkar 'OmkarPathak' Pathak" + "Mohamed 'MohamedKiouaz' Kiouaz", + "Ashutosh 'ashu01' Gupta", + "Allston 'AllstonMickey' Mickey", + "Dmytro 'dmytrostriletskyi' Striletskyi", + "Emett 'the-kid89' Speer", + "Viktor 'vhag' Hagstrom", + "Dion 'kingdion' Misic", + "Chandan 'crowchirp' Rai", + "Jae Hyeon 'skystar-p' Park", + "dstark85", + "Songzhuozhuo 'souo'", + "Emil 'Skeen' Madsen" +] + +__all__ = [ + 'data_structures', + 'fibonacci', + 'math', + 'searching', + 'sorting' +] diff --git a/pygorithm/data_structures/__init__.py b/pygorithm/data_structures/__init__.py index 05039ea..d818cdf 100644 --- a/pygorithm/data_structures/__init__.py +++ b/pygorithm/data_structures/__init__.py @@ -1 +1,15 @@ -from . modules import modules +from . import graph +from . import heap +from . import linked_list +from . import queue +from . import stack +from . import tree + +__all__ = [ + 'graph', + 'heap', + 'linked_list', + 'queue', + 'stack', + 'tree' +] \ No newline at end of file diff --git a/pygorithm/fibonacci/__init__.py b/pygorithm/fibonacci/__init__.py index d4cef98..f9c14d8 100644 --- a/pygorithm/fibonacci/__init__.py +++ b/pygorithm/fibonacci/__init__.py @@ -1,5 +1,15 @@ -from pygorithm.fibonacci import generator -from pygorithm.fibonacci import goldenratio -from pygorithm.fibonacci import memoization -from pygorithm.fibonacci.modules import modules -from pygorithm.fibonacci import recursion +""" +Collection of fibonacci methods and functions +""" +from . import generator +from . import goldenratio +from . import memoization +from . import modules +from . import recursion + +__all__ = [ + 'generator', + 'goldenratio', + 'memoization', + 'recursion' +] \ No newline at end of file diff --git a/pygorithm/math/__init__.py b/pygorithm/math/__init__.py index 05039ea..dd5ed44 100644 --- a/pygorithm/math/__init__.py +++ b/pygorithm/math/__init__.py @@ -1 +1,12 @@ -from . modules import modules +""" +Collection of special math functions +""" +from . import lcm +from . import lcm_using_gcd +from . import sieve_of_eratosthenes + +__all__ = [ + 'lcm', + 'lcm_using_gcd', + 'sieve_of_eratosthenes' +] diff --git a/pygorithm/searching/__init__.py b/pygorithm/searching/__init__.py index 05039ea..d09965e 100644 --- a/pygorithm/searching/__init__.py +++ b/pygorithm/searching/__init__.py @@ -1 +1,16 @@ -from . modules import modules +""" +Collection of searching algorithms +""" +from . import binary_search +from . import breadth_first_search +from . import depth_first_search +from . import linear_search +from . import quick_select + +__all__ = [ + 'binary_search', + 'breadth_first_search', + 'depth_first_search', + 'linear_search', + 'quick_select' +] diff --git a/pygorithm/sorting/__init__.py b/pygorithm/sorting/__init__.py index 0dcc5dd..0781eea 100644 --- a/pygorithm/sorting/__init__.py +++ b/pygorithm/sorting/__init__.py @@ -11,12 +11,14 @@ from . import selection_sort from . import shell_sort -__all__ = ['bubble_sort', - 'bucket_sort', - 'counting_sort', - 'heap_sort', - 'insertion_sort', - 'merge_sort', - 'quick_sort', - 'selection_sort', - 'shell_sort'] +__all__ = [ + 'bubble_sort', + 'bucket_sort', + 'counting_sort', + 'heap_sort', + 'insertion_sort', + 'merge_sort', + 'quick_sort', + 'selection_sort', + 'shell_sort' +] From d40f463ceb25516371e6f5655dba860dbb5833e1 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:40:19 +0530 Subject: [PATCH 051/251] Updated Docs --- docs/Data_Structure.rst | 22 ++++++++-- docs/Fibonacci.rst | 21 ++++++++-- docs/Math.rst | 72 +++++++++++++++++++++++++++++++++ docs/Searching.rst | 22 ++++++++-- docs/Sorting.rst | 90 ++++++++++++++++++++++------------------- docs/index.rst | 4 ++ 6 files changed, 177 insertions(+), 54 deletions(-) create mode 100644 docs/Math.rst diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index e9483cb..6edaf59 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -52,13 +52,27 @@ Features myStack = Stack() print(myStack.get_code()) -* To see all the available functions in a module there is a `modules()` function available. For example, +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, .. code:: python - >>> from pygorithm.data_structures import modules - >>> modules() - ['graph', 'heap', 'linked_list', 'queue', 'stack', 'tree'] + >>> from pygorithm import data_structures + >>> help(data_structures) + Help on package pygorithm.data_structures in pygorithm: + + NAME + pygorithm.data_structures + + PACKAGE CONTENTS + graph + heap + linked_list + modules + queue + stack + tree + >>> from pygorithm.data_structures import graph + >>> help(graph) Stack ----- diff --git a/docs/Fibonacci.rst b/docs/Fibonacci.rst index cb6d2d5..ff59831 100644 --- a/docs/Fibonacci.rst +++ b/docs/Fibonacci.rst @@ -32,13 +32,26 @@ Features code = fib_recursion.get_code() print(code) -* To see all the available functions in a module there is a `modules()` function available. For example, +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, .. code:: python - >>> from pygorithm.fibonacci import modules - >>> modules() - ['generator', 'goldenratio', 'memoization', 'recursion'] + >>> from pygorithm import fibonacci + >>> help(fibonacci) + Help on package pygorithm.fibonacci in pygorithm: + + NAME + pygorithm.fibonacci - Collection of fibonacci methods and functions + + PACKAGE CONTENTS + generator + goldenratio + memoization + modules + recursion + + >>> from pygorithm.fibonacci import memoization + >>> help(memoization) Implementations API ------------------- diff --git a/docs/Math.rst b/docs/Math.rst new file mode 100644 index 0000000..5493f25 --- /dev/null +++ b/docs/Math.rst @@ -0,0 +1,72 @@ +==== +Math +==== + +Some of the mathematical algorithms and their implementations + +Quick Start Guide +----------------- + +.. code-block:: python + + # import the required math + from pygorithm.math import lcm + + # find the lcm for all the elements in the list + ans = lcm.lcm([3, 12, 16]) + + #print the result + print(ans) + +Features +-------- + +* Algorithms available: + - LCM (lcm) + - Sieve of Eratostenes (sieve_of_eratosthenes) + +* To see all the available functions in a module there is a `modules()` function available. For example, + +.. code:: python + + >>> from pygorithm.math import modules + >>> modules.modules() + ['lcm', 'sieve_of_eratosthenes'] + +* Get the code used for any of the algorithm + +.. code-block:: python + + from pygorithm.math import lcm + + # for printing the source code of LCM function + print(lcm.get_code()) + + +LCM +--- + +* Functions and their uses + +.. function:: lcm.lcm(List) + +- **List** : `list` or `array` of which LCM is to be found +- **Return Value** : returns the integer value of LCM + +.. function:: lcm.get_code() + +- **Return Value** : returns the code for the ``lcm.lcm()`` function + +Sieve of Eratostenes +-------------------- + +* Functions and their uses + +.. function:: sieve_of_eratostenes.sieve_of_eratostenes(n) + +- **n** : upper limit upto which prime numbers are to be found +- **Return Value** : returns the `list` of all primes upto n + +.. function:: sieve_of_eratostenes.get_code() + +- **Return Value** : returns the code for the ``sieve_of_eratostenes.sieve_of_eratostenes()`` function diff --git a/docs/Searching.rst b/docs/Searching.rst index 8eeb22f..55cc860 100644 --- a/docs/Searching.rst +++ b/docs/Searching.rst @@ -30,13 +30,27 @@ Features - Breadth First Search (breadth_first_search) - Depth First Search (depth_first_search) -* To see all the available functions in a module there is a `modules()` function available. For example, +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, .. code:: python - >>> from pygorithm.searching import modules - >>> modules() - ['binary_search', 'breadth_first_search', 'depth_first_search', 'linear_search', 'quick_select'] + >>> from pygorithm import searching + >>> help(searching) + Help on package pygorithm.searching in pygorithm: + + NAME + pygorithm.searching - Collection of searching algorithms + + PACKAGE CONTENTS + binary_search + breadth_first_search + depth_first_search + linear_search + modules + quick_select + >>> from pygorithm.searching import binary_search) + >>> help(binary_search) + * For Searching: Remember ``search()`` function in `binary_search` module takes two parameters as a sorted list and the target element to be searched. diff --git a/docs/Sorting.rst b/docs/Sorting.rst index 7af184c..0caf1d4 100644 --- a/docs/Sorting.rst +++ b/docs/Sorting.rst @@ -12,45 +12,51 @@ Quick Start Guide # import the required sort from pygorithm.sorting import bubble_sort - myList = [12, 4, 2, 14, 3, 7, 5] + my_list = [12, 4, 2, 14, 3, 7, 5] - # to sort the list - sorted_list = bubble_sort.sort(myList) + # to sort the _list + sorted__list = bubble_sort.sort(my_list) Features -------- -* Sorts available: - - Bubble Sort (bubble_sort) - - Selection Sort (selection_sort) - - Insertion Sort (insertion_sort) - - Merge Sort (merge_sort) - - Quick Sort (quick_sort) - - Bucket Sort (bucket_sort) - - Counting Sort (counting_sort) - - Heap Sort (heap_sort) - - Shell Sort (shell_sort) - -* To see all the available functions in a module there is a `modules()` function available. For example, +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, .. code:: python - >>> from pygorithm.sorting import modules - >>> modules.modules() - ['bubble_sort', 'bucket_sort', 'counting_sort', 'heap_sort', 'insertion_sort', 'merge_sort', 'quick_sort', 'selection_sort', 'shell_sort'] + >>> from pygorithm import sorting + >>> help(sorting) + Help on package pygorithm.sorting in pygorithm: + + NAME + pygorithm.sorting - Collection of sorting methods + + PACKAGE CONTENTS + bubble_sort + bucket_sort + counting_sort + heap_sort + insertion_sort + merge_sort + modules + quick_sort + selection_sort + shell_sort + >>> from pygorithm.sorting import bubble_sort + >>> help(bubble_sort) * For sorting: - Remember ``sort()`` function takes its parameter as a list only. + Remember ``sort()`` function takes its parameter as a _list only. .. code-block:: python # import the required sort from pygorithm.sorting import bubble_sort - myList = [12, 4, 2, 14, 3, 7, 5] + my_list = [12, 4, 2, 14, 3, 7, 5] - # to sort the list - sorted_list = bubble_sort.sort(myList) + # to sort the _list + sorted__list = bubble_sort.sort(my_list) * Get time complexities of all the sorting algorithms @@ -76,9 +82,9 @@ Bubble Sort * Functions and their uses -.. function:: bubble_sort.sort(List) +.. function:: bubble_sort.sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` .. function:: bubble_sort.time_complexities() @@ -91,9 +97,9 @@ Bubble Sort * For improved Bubble sort -.. function:: bubble_sort.improved_sort(List) +.. function:: bubble_sort.improved_sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` Bucket Sort @@ -101,9 +107,9 @@ Bucket Sort * Functions and their uses -.. function:: bucket_sort.sort(List, bucketSize) +.. function:: bucket_sort.sort(_list, bucketSize) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **bucketSize** : size of the bucket. Default is **5** - **Return Value** : returns the sorted `list` @@ -120,9 +126,9 @@ Counting Sort * Functions and their uses -.. function:: counting_sort.sort(List) +.. function:: counting_sort.sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` .. function:: counting_sort.time_complexities() @@ -138,9 +144,9 @@ Heap Sort * Functions and their uses -.. function:: heap_sort.sort(List) +.. function:: heap_sort.sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` .. function:: heap_sort.time_complexities() @@ -156,9 +162,9 @@ Insertion Sort * Functions and their uses -.. function:: insertion_sort.sort(List) +.. function:: insertion_sort.sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` .. function:: insertion_sort.time_complexities() @@ -174,9 +180,9 @@ Merge Sort * Functions and their uses -.. function:: merge_sort.sort(List) +.. function:: merge_sort.sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` .. function:: merge_sort.time_complexities() @@ -192,9 +198,9 @@ Quick Sort * Functions and their uses -.. function:: quick_sort.sort(List) +.. function:: quick_sort.sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` .. function:: quick_sort.time_complexities() @@ -210,9 +216,9 @@ Selection Sort * Functions and their uses -.. function:: selection_sort.sort(List) +.. function:: selection_sort.sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` .. function:: selection_sort.time_complexities() @@ -228,9 +234,9 @@ Shell Sort * Functions and their uses -.. function:: shell_sort.sort(List) +.. function:: shell_sort.sort(_list) -- **List** : `list` or `array` to be sorted +- **_list** : `list` or `array` to be sorted - **Return Value** : returns the sorted `list` .. function:: shell_sort.time_complexities() diff --git a/docs/index.rst b/docs/index.rst index 77bdeaf..606a5db 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -2,6 +2,9 @@ Pygorithm ========= +Introduction +------------ + ``Pygorithm``: A fun way to learn algorithms on the go! Just import the module and start learning, it's that easy. A Python module written in pure python and for purely educational purposes. @@ -23,6 +26,7 @@ Quick Links Searching Data_Structure Fibonacci + Math Quick Start Guide ----------------- From b43b647f3e58ffedc54c7d578fd239b9f1ff20ec Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:40:33 +0530 Subject: [PATCH 052/251] Updated Docstings --- .../__pycache__/bubble_sort.cpython-35.pyc | Bin 1326 -> 1699 bytes .../__pycache__/bucket_sort.cpython-35.pyc | Bin 1785 -> 2247 bytes .../__pycache__/counting_sort.cpython-35.pyc | Bin 961 -> 1403 bytes .../__pycache__/heap_sort.cpython-35.pyc | Bin 1319 -> 1806 bytes .../__pycache__/insertion_sort.cpython-35.pyc | Bin 769 -> 1191 bytes .../__pycache__/merge_sort.cpython-35.pyc | Bin 1193 -> 1651 bytes .../__pycache__/quick_sort.cpython-35.pyc | Bin 1154 -> 1553 bytes .../__pycache__/selection_sort.cpython-35.pyc | Bin 753 -> 1183 bytes .../__pycache__/shell_sort.cpython-35.pyc | Bin 839 -> 1281 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/pygorithm/sorting/__pycache__/bubble_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/bubble_sort.cpython-35.pyc index df459d85766f9c3fcf7634b96a3201d35bad6fb6..f045be14b93e698199201b0aff125341471d4364 100644 GIT binary patch literal 1699 zcmcIk-*4PR5FXq2BXKW9B@$}hR^lbDnjQ(Lpz8^7y($o*66i%lt)M68yt#8?d!6+< zx||Y(RQL}NFFf&x#9!oBp7Jm70yE>o$whr-WshgS9j`s#w=?gpthnDk`SsZ?Dj(Dynek=pA8>-x&xqU5tgVVjFBR<^B zjQBE-&c)UTn;*OGQ;GAv^~8H3dS_DmV@b0I>&eEZ*Zv661Kg1#UT=Bs6{Z4TjVyZL zaPV&6-N!ro8O`(uFaXAa3xGEkUC+KhhD!^k{=xzhasPtJc;jG5A1-Zr<-&%w@<9P> zCjk2K9A{u2VwcbEb!hkWF&vz(!T~}9&zX%~f#Yd@co<1BP}+paSoqOc>CjAKmsdNf zul-mIqcAfaK~|_Eapp(4%!E-Q!`I3{ElsYGJ3^4gGK80|h>5FzaCml6*M2gVg%iod zbBa1|Tv%aY9sdD(83X^`ZBJAz+bTZsb?Tdmf6{)YMtLj~leItJ+0WYP`TQSmc=TEP z|MnrLGo$@G^6C0L>#Ng`wzRhW(! zmhsfFP&HtocHq)sL7Y-3JgykPLUrjx&t;s$qz?wNTn?~YLr?!j-?^ii;&gs~JO6{nG$hUT2HPIXYR7bIm3%zozz@B5j=mVtHtu&VP46R*V<;$@{TqK{m6 zTWRq&K{{pcsN!#QkO~tI#Cjq&#HJ_O;<}q$uhW-raC(c~dz9s{$}*JML*yzW#h{_@ zqFrE=aAuUa#y)gxfw8Fx4Loc19aALzEX3Z2MCnkTNns`u%R1L1A~TR2gI%D6wW&y- zw~UJ5Td!cfH^U@L<;WDvV`<7Qxe{+@$H!&~V=%8keu95m=F`;o(Dxceb2tptXgJjG j;Jn;|^5Jwj=IuLnV-@6){FDwXcZ7!3a$0v=tF6|*4q}g3 literal 1326 zcmbW0!EVz)5I|>bCryI`luD?PIIM(_SVXZvsD~0EXse3b8E!+v#aYC;ic`Nw zF*pJPU>F<%95Z^>UhTq=!62M+U;ztusK zQfOOUMggqKuCoQU$P_Kd2wwF{3h+G8CnyCT+EWE5+^;C?#sxsx{M}$1qC50T1Z7En9oW~`DksD>(8LP z_L5OLEUzJ)`r9unQX9S+YPrmx-|X_&{GPbYAMZ;Qw&WT6R;tcK^D_DRjK1mp#e;M9zQr-|BEKtm!0%(kxmhMa{DoxB#EE>`i2*_?RR8c_;5kLoEi2VfEWnl1k%GsQtAMmoz#9iH!O_R;Gq|s?#HKo0Wf~iXw zF;ST9Pzj^3nn-eVYGMu85H*MI|Eoh?#7~8rC!>zr*8U^=9AzKh5h~*besNj`U6#5i l*aO&oEFfE*BHzSmEav=3wIq%D9r@7yk|g|+@B5x#_zlJ)`~d&} diff --git a/pygorithm/sorting/__pycache__/bucket_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/bucket_sort.cpython-35.pyc index 7b40bf6687d031c0f0ed6548d5049f05978cdd4b..64ac75f0b5041c5ba8d92c8d331d8db85856df55 100644 GIT binary patch literal 2247 zcmbtV&2Jk;6o0d8ukDS~k_Kp^q-bu`2<*1dAcZs{Bz%S@rH*37BC@u-6K9k4u01=B zY|G|A`VSx^{sbgW{6Bl;lq1)0;k{Yg`2bF=JmZ-+@9XzIX5OBiwf8^y<>0M6z#nk! zGjaVXj`#p451@`S1J8hfK^+(PGa)dbWkTHqHa^QhJp&&8vfx?p8d-6X11}G+QH2Fw z0X$o;k!V1*G&4A~H@fOLlB<08`S!+3{$gYAtBq}YQwm23kMD-7{KLnw;@@An`p$>{}p4?886-0{O$NaaUiBaWoH$Rgb}=oCL2 zhlOJkNBk$#P)7zRfFZ!ShJ9*)d>534jg%i5gik;jW3Y%0Ik)ftfAWC9qx=;4_-v%P z5clH9B!0chKyMF}Nt>y?a|5;xpTQ_gT*E9Z4ox@(kiSm$DBn4sY=#*)&48TlM;SV- zsSKQ;f()SW!jQod0V%-!kp)eFQ4V_VP3&4Qw8(R9cV64g!AXwzkjgrLL9O?E!aNCz zW?mUHr^Zx%>eH1?)Ub%U#z?fjhpa{}{op66>wpU>=jT z8%r=Mz%Wlfj|GN>RH*Yit95>0wISy3f?@HcwTQfwtt$Rky%{XT;^1eSRg>phyBxbB6l8o}BBqsvV5~2DHBwh+|xm`Jq zTA~uQP952H)Uk6~*^1mQvBZ@xzut>0?fy7U*H(nZ51W-q0B~Dw_b&@;O%aM-TdpsY ztK_$Z_=vl_7DTQS#OviL&)z=(R!NFPv3>~Sy(^5E&YukESWwk|W6ztB^h$=L&Xzfv z2v0f{aCK>~Q3Bnl)n2EVX>STJSh(fQl<9)P{XboDk1@{w>5?p>g=bg3?388_GZ0~7 z?^B6=E@dPW(+PqkE1j?@l1vLTl4Os9hz|TvC6?1}i_p_FM@fosk|9JTJIU(0tK@{Lcoa#D3EuM@e@ETWrFE=%l;0AZ(jADNull!|PlrL%22b_# zvgyRwwDiclKYe1Z)6!?=igGOiHw!J9Bg>7cWnaV^gnoW3`2expKuL7XFpCR(6i%># z4Z0k$aR=XP7ljl1_#WcTA$@Ts^pz4vUFi})PiUU;O+$H_1_B>X{8q1SoSPygGs)qd z&=#&r3QeI>l{yc%(NPB_dE`M{p7<7bx_=-iIj&3jB-dzok=tm@I*4a7QyHl{YQSP|=|Xx@EVEc^|?Bl!FP literal 1785 zcmbtU&5j#I5U!rF$M)EpjT4lOwHt6GqA&vN2mwNoS+VSj2!R%mSFvI#iiVlS9(#W5 zo_6H5W=_cw3Go0t01tu0bM%$dJ^|8RpsM{7Z-5i6>2`Iw>Z`B1s{7W?j(z9irzhW8 z0Dr*NFj4*tXZkKKK7I^*170%dqilj-fR_M$R2IRvv}}N1g054(D58gF;6kH@6S3hK zXZjag1BCz)gWLc{zyP5EIii}77eJbj0lYvxgRueP2xNf*qK3sEfW(OFplEl3YWze> z;nCYKgI^&+tN(H>AygwTl1@t&%+EktwAn;^VZh1LPa!XnRaSyVR)jHt_z3B-^2wo zfBFXGSW}d7)k!{PQ*11X%uXFc*+Gh7r5k%(nW+@0GFlH*X%**J5M@NV{Hi@nBHm7- zu`4F79J=H7N#e~kmG+}A&(ikfe2|Dh4x=rJ(g@-~`}>(U=2B?`D!D5fBTb(fR+%P?CZEVi|kzkj+4sgL*QjRxX<%s3_*?_49UCkR$)l7u%7=rGc zDA7XsESCyOmv$!%Qt2hpQ|KcaS2Z1ma* zi#-IUlTRPw0_-}g8J2N_?XU*3*iFM`wt0Zs9h}$9ebn7zb=0&>iyg2!YqC3r#p;H} z@d#o)s1o`erLM=PtLqr2i;q6%scas*DSz1f=AGDiuX*&G3wOY;=z58`VztHjYJaG@ z3?lxF`Xl7?Kn6Vh5Toff0Ve30Z8#AhYG%!;fdX>En}%=u^3fgP9W>~zA)QsTgBOx(raQ^(Yvnv~XTIqR&J U2%RYLXCXh-H6euE_iKf}0j{}h9RL6T diff --git a/pygorithm/sorting/__pycache__/counting_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/counting_sort.cpython-35.pyc index d674d59ee8fdfbda15595a390561f38338ffe48a..03f21139e2105965432383f19700598660fab3d4 100644 GIT binary patch literal 1403 zcmZux-EJF26h5=wUB^p8n@|Wrm6%IROHC-K$OME*P=Trq)DccADr>ttu{Yko%+5x( ziMauZ2SDPIdme&ysd@%?biIz>y>Jp$u8f&f3NqD zf7?6ws&~)ZmBLpdY_)N;Yj7_$^vE`cyly17q40ES&s7gOgurfQ$Yh{g`ZJ(ZnP9FR_J7Z2l%GB)UPz z&~?uPVuME^GHw$jesbwBWps#BzwOMAJ&qM*WvZfd#EVQS?#H7{MrxdxJ43p;Fa3lM zS5T4n@q^3!=9@K)U&`X2#;9W$}qvTSMHW#VMYSX4aY!WD<^q^;@^Jjcy_>yl$Fb(i*Uqg5uz(d~gwM#628ED*gl7Ps z0E19d7$MXlTvM1x16r;bAf-z)$jjvCaZx>`t$`amEXbeDfv?20Tp)>=)R515wVu zSo_G7j~-G0)X=~hZeoR1nS)!*z#aN5LM7S@C+}%>^zu*bVkYH^f59fMsHV}7UkBsi zB<9m7jd*fEbRtItC@K^K38hKll2>il2+-W9vl!qJ-~phIKr^7GTQ2j2%yzZHj7G_X z&w{jAzoTZxnFzRWfgc5FOk3+&H0tKtkoP$NEr2%b}8yD4_=s6$DZQA`&vLcas=7-e|oJB&w7H zh$9GD@E5po#1MsypK{9PxkHCqn)mNsh4igN7}BP)EzfA)#nv9!_Z{q@rOm5;9if3D!gN zr=bidG)Ur1`BZx*KDGQ|8k)-|Pep0ld!Qt@!UauS}d z&XQ~#4^_a#%ha=1)gUR>t>>*a#%3LKK#I54yt>qRimJUiFbT_o|3jG`v{5GQV%Oeo zQCw#YbkHb{?C+Lc3>@FOQhaoF4;Bwi-M;CQ#_3SVNvL9xQhbJa8fl!F7!^-Ajl^V{ z@K>>#mwHbRNXa-I8Ls%|h~*7kQwxEbJcB;c@WeE~hi|5jL;<|8K-uux!b@Z=o|z;( z%woJFm|n(w#;F=}96~N5ErD@rf^cXhk0U^BiyxJp3r!v5qN`c1bF5XNVA^Z#;pY9WfvbrKF6MFblK?UXdyXya)%=S7Y?O>)SIVxhGbi_hRA z*!u+50YR`z?F%@wHV&CDzihsl+1;nsYj8i`YzANT^HI+R_=bNWh_@*V7DW%jBfv3% z03{70C<~Nrm=+ySu3-tv1LYegLjVU+BSC7z!F_2K>`)d%?c-H9uK8z836ZSaL3(GXU@`kggFn*dFY?`M3r}*mM6(rrCs_eEE2#F^ErCQk*(jIjahRrE(`t8 I3)`Xf3+CQN1poj5 diff --git a/pygorithm/sorting/__pycache__/insertion_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/insertion_sort.cpython-35.pyc index c06e0345bd81ae1ace14ecfb80be4365338f4eee..00b744d7db3eb6018591e856a7aa952d324eaa12 100644 GIT binary patch literal 1191 zcmZuwUr*FP5T9*(cU(OXV}g=s+((+IC-`7;g7Jhzk?=>3NF+*A+vTp%c8~3r+?~f0 zzWc^^@YRpgSD*L_zUb`sKp;%A)7jt5PUbf=of;pvKfXNu^veYJ4VT0~`!$}lfhqvl zK}{eqAR@4Xh6#ZM-w`(;C_zxxHi8uh#H93|)46A}FKnAWp>G&M>obX?F3lq*yf#z!-8qeHb5Z!!{R~Tl zHJ_*tiiM|)XAw_&imLYmq%L0)7y_ISI5A-9OAn6qeMn&X*nl2WQFuX~_px@Qcw%DM zDjb{Y+0caPp#cXLh;O4iM&6qqxs2jFUwo8j{%`^C!6je=k?q4N*hZ}7SOaELl;tF4 zLWVq{DHoD@QJafUc4F)UN~7xuFQ#r3rm{hmrd-e?FUnX-CD(6?K*3}tu$wwd5uhDs zsxfDOQ3OsI93w9YFKM&fj9B7Wc}eHaNw_oNXF{+Py_uVhm2}ZgB5on(E62Gg3VNPuxY*p5V+=lMcAJ_t4U;`CVo$dbJGqx7zOqvtBg2?c zpU2&Z^+MUd)-EZqMvV;?^x7?YDZ_2W<$HXwdKVborE`cE3wRaPt-7vkEI7ZTDsV3< z2wD0F;Z*%(P!_5WSJ*0CvmHkRmvWzgG}PX<95VQY5S`gO^KstAh@u3wvdLMPLSiKnu$4ndWf~#5MK|0fVRsJ{6cGh$xyFAW zTH5&={0G-sU1x2hvs(p+-M6!Ec82%%rG8gASqlR1EqpxvU;tk*7j%anZPg}-X(2oS z3@Bj`J2pp%U5FQKPGkl8VfE?rJ%~!Ap7NJMviuuYyY8`2xvE>ckbxTBQ7JG)-p-zZ6<C0MJLdL}wH_(sWuamYHj| WwyclZK{}1Igdf`fFcW;=cmDv3<5X_| diff --git a/pygorithm/sorting/__pycache__/merge_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/merge_sort.cpython-35.pyc index 169c4ece0f55df541231d3cf8d74c13750b54c99..f2183d5349a1311acc3eec359ea1fb838a627475 100644 GIT binary patch delta 888 zcmZ8fPiqrF6rbH~{%sPd7D`bM4@7AWQd1FO)#6$x(xTBu6idspW+utX?oODQjV6~I z6rm@P1;2y%9sC#`0-ikS)i2ReR}Nr znHqB8LFeIte+b>j{?iBkfx9bMs2GJ#>cNe+RIs1L6WG4qzU8`b4em39?t(vNA{;QZ zo^xT4&SnZRA8e+rmJ9Arq)HxrJpML2bpd5BOM5EfDJTvJ6PRgW^_oK{L^zSK1(JusfT6~h|)e6Nocl*3+yj8S?ote34zi^@?H>#bNDS>tu%czomkW9m#TLXPP3TpRL~)H ONZD#Qjg7|nM(qz!i{R-1 delta 410 zcmYk2F-rq67>2*(;`Oe*V(m}_MNXt@Czs-?A~=;UP8LDRno89fm7 z0Gy;(Fe52QE)3$}RyckCSYL~eMpIzDm^~jmmgF+s!c60DQA@;B9b>m8immfQT)C=l_x#PW4~&+g HN+f;(Lw!lo diff --git a/pygorithm/sorting/__pycache__/quick_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/quick_sort.cpython-35.pyc index e93fdbef102f6a2dc8ece08f76f4fc5c681012db..9854fb6902a741361eb6eb8566656f29673d04aa 100644 GIT binary patch literal 1553 zcmbVM&2AGh5FT$fNfTQBX({4hAt7}oXrLUBLa7L?1QbDmAP^N0ExS&#WOtp~PDP_~ z0mRRN0~g+bSK2G5zCusTI8BpQT)>-|jAzF7eB&8UPfeAd-T3+9Lk{3Kj133nTS&T! zECg6b&LDIkX0VPz4nh|`q27To4`IQ|s4PM_VP%(`>t3nfEZ2IbEmf7TJ-Ah*G&U*@+3s&4Yyrci!MptLrZ@>sU!QqLp% zbE&KYsbBL2ue^hC!oz^k9}X7@Fp;v)=%|05pdP zKigF+xa>U}8W64vV+LnvC>%26z%bZmbm+DNGc?K3WTx&F`)|q|$3`y-It?wA;eOnb zDl+ZF8me7i`3Y~tkv3IMoXaMUQX^VIX>KH^MFUqQOiy7NNrM?BXKUD@WbDvQ2E(+_ zgi><~Nnb$LvH)M5C43m_SAY(HDv}D-bcOWGy1ZDt zi_F%c+B6F9+v@r?+uX~(7WgL2rP$S}cWJ-X59x_%Xwm+leTV~BP0vhM z-E^$0A1iB$bKOyzZBrk7(_cR|sv9|1y5G>!14&4ban05U-edfRWmU@?tGd1we`ma_zRboh5l>Ys);55 z*hb4BupnZvjgAdL3BDt4K~RREVtfRv5R4hWMC5h1HVm9rrn{+Z^3{*atu_9swehaC z>?}&*X%X<%q{&~*D9t})(SXlBpLyvx{3(AU5L%s1c4l4r**Xx?>xeUi6SSGi3(6^G z2`fIM16K)m8TTS?^%KqE56}Rb!4bd-rqAF$9!uX893#fy*n-13qM(nLlOyJdg)9!o zHboxUFhz$2Q#}B=KmbPWFTf^Z7}~QzP8udsh{<5eD$e;LaDIOh$$-jO!=A%&DG>=@ zhiSr9DmC|_PAWs)jm@Po&AunSn75-)=_V)3(_J1WT6Ba|T&E_oph}@LiIUP=s4kJs z#VJYST6tM|Nk`;%Boeojm(80w3%9Frn1pc_=WOpc$T1}UTWNIDSTxeO=gGdOyI!xc zl=@jL60I6<-*2c!e{h!TC6E3%OgfEGS#3g|^#^&0oH}*n4jQOEU=^FQd(2^V_K-;j zF`q8Z7iDZ3NZrJykYt}tF>9tsRA4uiv1hbH`F69!=%@@whq2&(8uue{80x__b+p7B z4K{3Ev7&QShU} z)w~#wt0AtPSHnd0aT4=dN9f{7(~}zu8$%A(6^O@}X;DvA-bUXo=hb#QNd0zOQm>0A cs8Vx%^JDXI8f1}pMPsMPR9M}vPtY5S`h(X!Yy2!g*+v8)lxonbZjsS24>$r-G*u((WQ2OI%wvN%5Ifo-t zW#>#mgE&23ii}^xMK(!6Z8cxCgic7$B4k z9*{(`XhL}i9qox+4f!Z8wcqEZDk>Rs>6;wNfZYFm8dOE=B)m;Yc_3D&>3jXUv3Ph6U~)Jcw4+ diff --git a/pygorithm/sorting/__pycache__/shell_sort.cpython-35.pyc b/pygorithm/sorting/__pycache__/shell_sort.cpython-35.pyc index 400bced7023a058e60b34acd00763b1d4dbd7390..a6ded32b93b3e3506eea9f37a8faa94d19df7f73 100644 GIT binary patch delta 750 zcmZ8eJ&)5s5Z!g+B~+{(pSU#9 z2`V}iiN8XHM8|)K=%}vbA27R7;Ka!LJeqww`{wPB)_Jh(b-Tfa6jhSp zc1z$KrO;4G$dWl|d{?7P(NSMl>Qaxl2T^cA!?0&5w?7L1^W^(-kp@69o?%gdu9ShK z$SReaSxG`D`tw93CB#LpO&=^mHHBOn%us1Cl{>YeDm1mCfova|&63^5h4oX}dn0e% zC{V6_mB_zvlTQOlzf3nmAt_@pw0+GrC8>+N-bp!Fch)H9U3~k&0=h z%EaU}KYi0$rZ(4(WAYLqt;%_U?{jnZpF*Q@nYr5PH$PwAviDe(tfh7dQ=4wX)`zro zm%uP~!kO{d2Tl*n7l~_viO%W$$N-h&DT0|HxlpUrN)QN+M80k6x8qn;X&ftS)~egsyV|iN3oRZt!d|%Z2j8o_ A?*IS* delta 318 zcmYk0y-EZz6ot=CGP~>iXt$ugfGMoR!cMRf-9fMrr&*Rs7-4QCa93@*l57JogzUdIyn#=jEG$1K0cW_S^vfPz85$esyC z!9+cCbAU@deEIo2$k$timzyoj(EC`LjBXKN|yYRAI usNF+NE@gJ3KigpHMwM-*<&CjBeDaD7l#<)zJ=d~*SNmC?FWjVCsrm)Hi8kT@ From 1dd3f7f826cacc94d0557f1595ac94c1b9e2ef5e Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:41:02 +0530 Subject: [PATCH 053/251] Added anagram implementation --- pygorithm/string/anagram.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 pygorithm/string/anagram.py diff --git a/pygorithm/string/anagram.py b/pygorithm/string/anagram.py new file mode 100644 index 0000000..dfcc875 --- /dev/null +++ b/pygorithm/string/anagram.py @@ -0,0 +1,22 @@ +# Author: OMKAR PATHAK +# Created On: 17th August 2017 + +from collections import Counter + +def is_anagram(word, List): + ''' + ANAGRAM: An anagram is direct word switch or word play, the result of rearranging the letters of a word or phrase to produce a new word or phrase, using all the original letters exactly once + We are taking a word and a list. We return the anagrams of that word from the given list and return the list of anagrams else return empty list + ''' + word = word.lower() + anagrams = [] + for words in List: + if word != words.lower(): + if Counter(word) == Counter(words.lower()): + anagrams.append(words) + return anagrams + +def get_code(): + """ returns the code for the current class """ + import inspect + return inspect.getsource(is_anagram) From 1cc1953af11babcfd777af2cc5b268ddaa2f3ea6 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:41:13 +0530 Subject: [PATCH 054/251] Added isogram implementation --- pygorithm/string/isogram.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 pygorithm/string/isogram.py diff --git a/pygorithm/string/isogram.py b/pygorithm/string/isogram.py new file mode 100644 index 0000000..ad456e6 --- /dev/null +++ b/pygorithm/string/isogram.py @@ -0,0 +1,25 @@ +# Author: OMKAR PATHAK +# Created On: 17th August 2017 + +def is_isogram(word): + ''' + An isogram (also known as a "nonpattern word") is a logological term for a word + or phrase without a repeating letter + ''' + # Convert the word or sentence in lower case letters. + clean_word = word.lower() + # Make ann empty list to append unique letters + letter_list = [] + for letter in clean_word: + # If letter is an alphabet then only check + if letter.isalpha(): + if letter in letter_list: + return False + letter_list.append(letter) + + return True + +def get_code(): + """ returns the code for the current class """ + import inspect + return inspect.getsource(is_isogram) From 990e0cbe3bcfb69944a9f8b5cd4d79527fcf4f01 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:41:20 +0530 Subject: [PATCH 055/251] Added pangram implementation --- pygorithm/string/pangram.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 pygorithm/string/pangram.py diff --git a/pygorithm/string/pangram.py b/pygorithm/string/pangram.py new file mode 100644 index 0000000..6820292 --- /dev/null +++ b/pygorithm/string/pangram.py @@ -0,0 +1,15 @@ +# Author: OMKAR PATHAK +# Created On: 17th August 2017 + +def is_pangram(sentence): + ''' + PANGRAM: A sentence containing every letter of the alphabet. + ''' + alphabet = list(map(chr, range(97, 123))) + formattedString = ''.join(c for c in sentence if c.isalpha()).lower() + return set(alphabet) == set(formattedString) + +def get_code(): + """ returns the code for the current class """ + import inspect + return inspect.getsource(is_pangram) From 3def30bd9826abf020dc43c88b2012b1d4660d9d Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:41:28 +0530 Subject: [PATCH 056/251] Added palindrome implementation --- pygorithm/string/palindrome.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 pygorithm/string/palindrome.py diff --git a/pygorithm/string/palindrome.py b/pygorithm/string/palindrome.py new file mode 100644 index 0000000..cda72df --- /dev/null +++ b/pygorithm/string/palindrome.py @@ -0,0 +1,15 @@ +#Author: OMKAR PATHAK +# Created On: 17th August 2017 + +def is_palindrome(string): + '''This function checks the string for palindrome''' + revString = string[::-1] + if string == revString: + return True + else: + return False + +def get_code(): + """ returns the code for the current class """ + import inspect + return inspect.getsource(palindrome) From 0ca5ef8656533165627f270ff43a13c1ace7082a Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:43:25 +0530 Subject: [PATCH 057/251] Added __init__ and modules.py --- pygorithm/string/__init__.py | 15 +++++++++++++++ pygorithm/string/modules.py | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 pygorithm/string/__init__.py create mode 100644 pygorithm/string/modules.py diff --git a/pygorithm/string/__init__.py b/pygorithm/string/__init__.py new file mode 100644 index 0000000..e227375 --- /dev/null +++ b/pygorithm/string/__init__.py @@ -0,0 +1,15 @@ +""" +Collection of string methods and functions +""" +from . import anagram +from . import pangram +from . import isogram +from . import modules +from . import palindrome + +__all__ = [ + 'anagram', + 'pangram', + 'isogram', + 'palindrome' +] diff --git a/pygorithm/string/modules.py b/pygorithm/string/modules.py new file mode 100644 index 0000000..e383192 --- /dev/null +++ b/pygorithm/string/modules.py @@ -0,0 +1,15 @@ +import pkgutil + + +def modules(): + """ + Find all functions in pygorithm.string + """ + import pygorithm.string + package = pygorithm.string + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules From 0fd77d0ab3b022262fbfc8546452b8568fea5791 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:45:14 +0530 Subject: [PATCH 058/251] Updated README --- README.rst | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index b93265b..2378fff 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -========= + Pygorithm ========= @@ -70,14 +70,32 @@ Quick Start Guide time_complexity = bubble_sort.time_complexities() print(time_complexity) -* To see all the available functions in a module. For example, if you want to see what all sorts are available in the sorting module, then just do +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, .. code:: python - >>> from pygorithm.sorting import modules - >>> modules() - ['bubble_sort', 'bucket_sort', 'counting_sort', 'heap_sort', 'insertion_sort', 'merge_sort', 'quick_sort', 'selection_sort', 'shell_sort'] - + >>> from pygorithm import sorting + >>> help(sorting) + Help on package pygorithm.sorting in pygorithm: + + NAME + pygorithm.sorting - Collection of sorting methods + + PACKAGE CONTENTS + bubble_sort + bucket_sort + counting_sort + heap_sort + insertion_sort + merge_sort + modules + quick_sort + selection_sort + shell_sort + >>> from pygorithm.sorting import bubble_sort + >>> help(bubble_sort) + + Tests ~~~~~ From 7e8d4d681ce6d2a8342577769b6873a7fdec607b Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 06:53:06 +0530 Subject: [PATCH 059/251] Updated DS docs --- docs/Data_Structure.rst | 9 --------- 1 file changed, 9 deletions(-) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 6edaf59..285b27b 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -84,15 +84,6 @@ Stack .. autoclass:: Stack :members: -.. automodule:: pygorithm.data_structures.stack - - Infix to Postfix - ---------------- - .. autoclass:: InfixToPostfix - :members: - - - Queue ----- From dcfde41cf67d554e539a74be7c2535dbf101d4ed Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 18 Aug 2017 07:01:01 +0530 Subject: [PATCH 060/251] Updated DS docs --- pygorithm/data_structures/__init__.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/pygorithm/data_structures/__init__.py b/pygorithm/data_structures/__init__.py index d818cdf..e69de29 100644 --- a/pygorithm/data_structures/__init__.py +++ b/pygorithm/data_structures/__init__.py @@ -1,15 +0,0 @@ -from . import graph -from . import heap -from . import linked_list -from . import queue -from . import stack -from . import tree - -__all__ = [ - 'graph', - 'heap', - 'linked_list', - 'queue', - 'stack', - 'tree' -] \ No newline at end of file From 07b46856dcdf99794396332707be89cb62a40ca6 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Fri, 18 Aug 2017 08:49:05 -0500 Subject: [PATCH 061/251] # Updates - data_structures - Updated __init__.py - graph.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Removed redundant import statments in methods - Updated syntaxing for PEP8 compliance - Updated conditional sytaxing - Removed camel casing from variable and parameter names - Updated _union() and _set_of() in WeightedGraph() class to make them private - Added self.forest to __init__() or WeightedGraph() class - Updated _topological_sort_rec() in TopologicalSort() class to make it private - Updated _check_cycle_rec() in CheckCycleDirectedGraph() class to make it private - Updated _check_cycle_rec() in CheckCycleUndirectedGraph() class to make it private - string - anagram.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Fixed indentations in is_anagram() - Updated syntaxing for PEP8 compliance - palindrome.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Optimized code of is_palindrome - isogram.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Optimized code of is_isogram - pangram.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Optimized code in is_pangram - fibonacci - generator.py - Updated syntaxing for PEP8 compliance - Updated parameter name on nested function sequence(), it was shadowing outer functions parameter name - goldenratio.py - Updated syntaxing for PEP8 compliance - Functions no longer nested - math - lcm.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Updated code to prevent variables from shadowing method names - lcm_using_gcd.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Updated code to remove camel casing on parameter names - sieve_of_eratosthenesd.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Removed redundant parenthesis in conditionals - Optimized conditionals - searching - binary_search.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Updated code in binary_search - breadth_first_search.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - depth_fist_seach.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Updated code in depth_first_search - linear_search.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - Removed camel casing from variable and parameter names - quick_select.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Updated syntaxing for PEP8 compliance - moved nested functions out of search() Signed-off-by: IanDoarn --- CONTIRBUTORS.md | 25 +-- pygorithm/__init__.py | 14 +- pygorithm/data_structures/__init__.py | 18 ++ pygorithm/data_structures/graph.py | 192 ++++++++++++++------ pygorithm/data_structures/heap.py | 10 +- pygorithm/data_structures/queue.py | 6 +- pygorithm/fibonacci/generator.py | 7 +- pygorithm/fibonacci/goldenratio.py | 38 ++-- pygorithm/fibonacci/memoization.py | 4 +- pygorithm/fibonacci/recursion.py | 1 - pygorithm/math/lcm.py | 39 ++-- pygorithm/math/lcm_using_gcd.py | 27 +-- pygorithm/math/sieve_of_eratosthenes.py | 50 ++--- pygorithm/searching/binary_search.py | 87 +++++---- pygorithm/searching/breadth_first_search.py | 45 +++-- pygorithm/searching/depth_first_search.py | 49 +++-- pygorithm/searching/linear_search.py | 51 ++++-- pygorithm/searching/quick_select.py | 107 +++++++---- pygorithm/string/anagram.py | 43 +++-- pygorithm/string/isogram.py | 35 ++-- pygorithm/string/palindrome.py | 30 ++- pygorithm/string/pangram.py | 31 +++- 22 files changed, 605 insertions(+), 304 deletions(-) diff --git a/CONTIRBUTORS.md b/CONTIRBUTORS.md index dbd8c1f..b906e05 100644 --- a/CONTIRBUTORS.md +++ b/CONTIRBUTORS.md @@ -1,14 +1,15 @@ # Contributors: - - Mohamed 'MohamedKiouaz' Kiouaz - - Ashutosh 'ashu01' Gupta - - Allston 'AllstonMickey' Mickey - - Dmytro 'dmytrostriletskyi' Striletskyi - - Emett 'the-kid89' Speer - - Viktor 'vhag' Hagstrom - - Dion 'kingdion' Misic - - Chandan 'crowchirp' Rai - - Jae Hyeon 'skystar-p' Park - - dstark85 - - Songzhuozhuo 'souo' - - Emil 'Skeen' Madsen \ No newline at end of file + - Mohamed '[MohamedKiouaz](https://github.com/MohamedKiouaz)' Kiouaz + - Ashutosh '[ashu01](https://github.com/ashu01)' Gupta + - Allston '[AllstonMickey](https://github.com/AllstonMickey)' Mickey + - Dmytro '[dmytrostriletskyi](https://github.com/dmytrostriletskyi)' Striletskyi + - Emett '[the-kid89](https://github.com/the-kid89)' Speer + - Viktor '[vhag](https://github.com/vhag)' Hagstrom + - Dion '[kingdion](https://github.com/kingdion)' Misic + - Chandan '[crowchirp](https://github.com/crowchirp)' Rai + - Jae Hyeon '[skystar-p](https://github.com/skystar-p)' Park + - [dstark85](https://github.com/dstark85) + - Songzhuozhuo '[souo](https://github.com/souo)' + - Emil '[Skeen](https://github.com/Skeen)' Madsen + - Ian '[IanDoarn](https://github.com/IanDoarn)' Doarn \ No newline at end of file diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 53696c1..78918ac 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -25,6 +25,7 @@ dstark85 Songzhuozhuo 'souo' Emil 'Skeen' Madsen +Ian 'IanDoarn' Doarn """ from pygorithm import data_structures @@ -32,6 +33,7 @@ from pygorithm import math from pygorithm import searching from pygorithm import sorting +from pygorithm import string __version__ = '1.0.0' __author__ = 'Omkar Pathak' @@ -54,13 +56,15 @@ "Jae Hyeon 'skystar-p' Park", "dstark85", "Songzhuozhuo 'souo'", - "Emil 'Skeen' Madsen" + "Emil 'Skeen' Madsen", + "Ian 'IanDoarn' Doarn" ] __all__ = [ 'data_structures', - 'fibonacci', - 'math', - 'searching', - 'sorting' + 'fibonacci', + 'math', + 'searching', + 'sorting', + 'string' ] diff --git a/pygorithm/data_structures/__init__.py b/pygorithm/data_structures/__init__.py index e69de29..e43c671 100644 --- a/pygorithm/data_structures/__init__.py +++ b/pygorithm/data_structures/__init__.py @@ -0,0 +1,18 @@ +""" +Collection of data structure examples +""" +from . import graph +from . import heap +from . import linked_list +from . import queue +from . import stack +from . import tree + +__all__ = [ + 'graph', + 'heap', + 'linked_list', + 'queue', + 'stack', + 'tree' +] \ No newline at end of file diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index 4d337e8..66bb534 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -1,37 +1,51 @@ -# Author: OMKAR PATHAK -# Created On: 12th August 2017 +""" +Author: OMKAR PATHAK +Created On: 12th August 2017 +""" from collections import defaultdict +import inspect + class Graph(object): - ''' class for creating a graph ''' + """Graph object + Creates the graph + """ + def __init__(self): self.graph = defaultdict(list) self.count = 0 def print_graph(self): - ''' for printing the contents of the graph ''' + """ + Prints the contents of the graph + """ for i in self.graph: print(i, '->', ' -> '.join([str(j) for j in self.graph[i]])) def add_edge(self, from_vertex, to_vertex): - ''' function to add an edge in the graph ''' + """ + Adds an edge in the graph + """ # check if vertex is already present self.graph[from_vertex].append(to_vertex) self.count += 1 def get_code(self): - """ returns the code for the current class """ - import inspect + """ + returns the code for the current class + """ return inspect.getsource(Graph) class WeightedGraph(object): - """ + """WeightedGraph object A graph with a numerical value (weight) on edges """ + def __init__(self): self.edges_weighted = [] self.vertexes = set() + self.forest = None def add_edge(self, u, v, weight): """ @@ -44,16 +58,31 @@ def add_edge(self, u, v, weight): self.vertexes.update((u, v)) def print_graph(self): + """ + Print the graph + :return: None + """ for (u, v), weight in self.edges_weighted: print("%d -> %d weight: %d" % (u, v, weight)) - def _set_of(self, vertex): + def __set_of(self, vertex): + """ + Helper method + :param vertex: + :return: + """ for tree in self.forest: if vertex in tree: return tree return None - def _union(self, u_set, v_set): + def __union(self, u_set, v_set): + """ + Helper method + :param u_set: + :param v_set: + :return: + """ self.forest.remove(u_set) self.forest.remove(v_set) self.forest.append(v_set + u_set) @@ -70,45 +99,58 @@ def kruskal_mst(self): edges_explored = [] self.forest = [[v] for v in self.vertexes] for (u, v), weight in self.edges_weighted: - u_set, v_set = self._set_of(u), self._set_of(v) + u_set, v_set = self.__set_of(u), self.__set_of(v) if u_set != v_set: - self._union(u_set, v_set) + self.__union(u_set, v_set) edges_explored.append(((u, v), weight)) return edges_explored + # TODO: Is this necessary? @staticmethod def kruskal_time_complexity(): - return '''Worst case: O(E log(V)) where E in the number of edges and V the number of vertexes''' + """ + Return time complexity of kruskal + :return: string + """ + return "Worst case: O(E log(V)) where E in the number of edges and V the number of vertexes" @classmethod def kruskal_code(cls): - ''' Returns the code for current class ''' - import inspect + """ + Returns the code for current class + """ return inspect.getsource(cls.kruskal_mst) class TopologicalSort(Graph): + def topological_sort(self): - ''' function for sorting graph elements using topological sort ''' - visited = [False] * self.count # Marking all vertices as not visited - stack = [] # Stack for storing the vertex + """ + function for sorting graph elements using topological sort + """ + # Marking all vertices as not visited + visited = [False] * self.count + # Stack for storing the vertex + stack = [] for vertex in range(self.count): # Call the recursive function only if not visited if not visited[vertex]: - self._topological_sort_rec(vertex, visited, stack) + self.__topological_sort_rec(vertex, visited, stack) return stack - def _topological_sort_rec(self, vertex, visited, stack): - ''' Recursive function for topological Sort ''' + def __topological_sort_rec(self, vertex, visited, stack): + """ + Recursive function for topological Sort + """ # Mark the current node in visited visited[vertex] = True # mark all adjacent nodes of the current node try: for adjacent_node in self.graph[vertex]: - if visited[adjacent_node] == False: - self._topological_sort_rec(adjacent_node, visited, stack) + if not visited[adjacent_node]: + self.__topological_sort_rec(adjacent_node, visited, stack) except KeyError: return @@ -116,24 +158,32 @@ def _topological_sort_rec(self, vertex, visited, stack): stack.insert(0, vertex) def get_code(self): - ''' returns the code for the current class ''' - import inspect + """ + returns the code for the current class + """ return inspect.getsource(TopologicalSort) class CheckCycleDirectedGraph(object): - ''' Class to check cycle in directed graph ''' + """CheckCycleDirectedGraph + Class to check cycle in directed graph + """ + def __init__(self): self.graph = {} self.count = 0 def print_graph(self): - ''' for printing the contents of the graph ''' + """ + for printing the contents of the graph + """ for i in self.graph: print(i, '->', ' -> '.join([str(j) for j in self.graph[i]])) def add_edge(self, from_vertex, to_vertex): - ''' function to add an edge in the graph ''' + """ + function to add an edge in the graph + """ # check if vertex is already present if from_vertex in self.graph.keys(): self.graph[from_vertex].append(to_vertex) @@ -143,83 +193,107 @@ def add_edge(self, from_vertex, to_vertex): self.count += 1 def check_cycle(self): - ''' This function will return True if graph is cyclic else return False ''' + """ + This function will return True if graph is cyclic else return False + """ visited = [False] * len(self.graph) stack = [False] * len(self.graph) for vertex in range(len(self.graph)): - if visited[vertex] == False: - if self._check_cycle_rec(visited, stack, vertex) == True: + if not visited[vertex]: + if self.__check_cycle_rec(visited, stack, vertex): return True return False - def _check_cycle_rec(self, visited, stack, vertex): - ''' Recursive function for finding the cycle ''' + def __check_cycle_rec(self, visited, stack, vertex): + """ + Recursive function for finding the cycle + """ # Mark the current node in visited and also add it to the stack visited[vertex] = True stack[vertex] = True # mark all adjacent nodes of the current node for adjacentNode in self.graph[vertex]: - if visited[adjacentNode] == False: - if self._check_cycle_rec(visited, stack, adjacentNode) == True: + if not visited[adjacentNode]: + if self.__check_cycle_rec(visited, stack, adjacentNode): return True - elif stack[adjacentNode] == True: + elif stack[adjacentNode]: return True - # The node needs to be poped from + # The node needs to be popped from # recursion stack before function ends stack[vertex] = False return False - def get_code(self): - ''' returns the code for the current class ''' - import inspect - return inspect.getsource(CheckCycleDirected) + @staticmethod + def get_code(): + """ + returns the code for the current class + """ + return inspect.getsource(CheckCycleDirectedGraph) class CheckCycleUndirectedGraph(object): - ''' Class to check cycle in undirected graph ''' + """CheckCycleUndirectedGraph + Class to check cycle in undirected graph + """ + def __init__(self): self.graph = {} self.count = 0 def print_graph(self): - ''' for printing the contents of the graph ''' + """ + for printing the contents of the graph + """ for i in self.graph: print(i, '->', ' -> '.join([str(j) for j in self.graph[i]])) - def add_edge(self, fromVertex, toVertex): - ''' for adding the edge between two vertices ''' + def add_edge(self, from_vertex, to_vertex): + """ + for adding the edge between two vertices + """ # check if vertex is already present, - if fromVertex in self.graph.keys() and toVertex in self.graph.keys(): - self.graph[fromVertex].append(toVertex) - self.graph[toVertex].append(fromVertex) + if from_vertex in self.graph.keys() and to_vertex in self.graph.keys(): + self.graph[from_vertex].append(to_vertex) + self.graph[to_vertex].append(from_vertex) else: # else make a new vertex - self.graph[fromVertex] = [toVertex] - self.graph[toVertex] = [fromVertex] + self.graph[from_vertex] = [to_vertex] + self.graph[to_vertex] = [from_vertex] def check_cycle(self): - ''' This function will return True if graph is cyclic else return False ''' - visited = [False] * len(self.graph) # Marking all vertices as not visited + """ + This function will return True if graph is cyclic else return False + """ + # Marking all vertices as not visited + visited = [False] * len(self.graph) for vertex in range(len(self.graph)): # Call the recursive function only if not visited - if visited[vertex] == False: - if self._check_cycle_rec(visited, -1, vertex) == True: + if not visited[vertex]: + if self.__check_cycle_rec(visited, -1, vertex): return True return False - def _check_cycle_rec(self, visited, parent, vertex): - ''' Recursive function for finding the cycle ''' + def __check_cycle_rec(self, visited, parent, vertex): + """ + Recursive function for finding the cycle + """ # Mark the current node in visited visited[vertex] = True # mark all adjacent nodes of the current node for adjacentNode in self.graph[vertex]: - if visited[adjacentNode] == False: - if self._check_cycle_rec(visited, vertex, adjacentNode) == True: + if not visited[adjacentNode]: + if self.__check_cycle_rec(visited, vertex, adjacentNode): return True elif parent != adjacentNode: return True - return False + + @staticmethod + def get_code(): + """ + returns the code for the current class + """ + return inspect.getsource(CheckCycleUndirectedGraph) diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py index b7700ab..95df610 100644 --- a/pygorithm/data_structures/heap.py +++ b/pygorithm/data_structures/heap.py @@ -1,9 +1,11 @@ -# Author: ALLSTON MICKEY -# Contributed: OMKAR PATHAK -# Created On: 11th August 2017 - +""" +Author: ALLSTON MICKEY +Contributed: OMKAR PATHAK +Created On: 11th August 2017 +""" from pygorithm.data_structures import queue + class Heap(queue.Queue): ''' min-heap implementation as queue ''' def parent_idx(self, idx): diff --git a/pygorithm/data_structures/queue.py b/pygorithm/data_structures/queue.py index df189fc..2585d55 100644 --- a/pygorithm/data_structures/queue.py +++ b/pygorithm/data_structures/queue.py @@ -1,5 +1,7 @@ -# Author: OMKAR PATHAK -# Created On: 3rd August 2017 +""" +Author: OMKAR PATHAK +Created On: 3rd August 2017 +""" # queue implementation class Queue(object): diff --git a/pygorithm/fibonacci/generator.py b/pygorithm/fibonacci/generator.py index 95b556d..4ebc494 100644 --- a/pygorithm/fibonacci/generator.py +++ b/pygorithm/fibonacci/generator.py @@ -1,7 +1,6 @@ """ Fibonacci implementation through generator. """ - import inspect @@ -17,18 +16,16 @@ def fib(): Fibonacci's relation to the golden ratio — https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression """ a, b = 0, 1 - while True: yield a - a, b = b, a + b - def sequence(n): + def sequence(_n): """ Return sequence of Fibonacci values as list. """ f = fib() - return [f.__next__() for _ in range(n + 1)] + return [f.__next__() for _ in range(_n + 1)] return sequence(n) diff --git a/pygorithm/fibonacci/goldenratio.py b/pygorithm/fibonacci/goldenratio.py index 08420d0..6951e0d 100644 --- a/pygorithm/fibonacci/goldenratio.py +++ b/pygorithm/fibonacci/goldenratio.py @@ -1,35 +1,39 @@ """ Fibonacci implementation through golden ratio (math formula). """ - import inspect import math def get_sequence(n): """ - Return Fibonacci sequence from zero to specified number as list. + Return Fibonacci sequence from zero + to specified number as list. """ - def fib(n): - """ - Return Fibonacci value by specified number as integer. + return sequence(n) - Golden ratio — https://en.wikipedia.org/wiki/Golden_ratio - Fibonacci's relation to the golden ratio — https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression - """ - golden_ratio = (1 + math.sqrt(5)) / 2 - val = (golden_ratio ** n - (1 - golden_ratio) ** n) / math.sqrt(5) +def fib(n): + """ + Return Fibonacci value by specified number as integer. - return int(val) + Golden ratio — + https://en.wikipedia.org/wiki/Golden_ratio + Fibonacci's relation to the golden ratio — + https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression + """ + golden_ratio = (1 + math.sqrt(5)) / 2 - def sequence(n): - """ - Return sequence of Fibonacci values as list. - """ - return [fib(value) for value in range(n + 1)] + val = (golden_ratio ** n - (1 - golden_ratio) ** n) / math.sqrt(5) - return sequence(n) + return int(val) + + +def sequence(n): + """ + Return sequence of Fibonacci values as list. + """ + return [fib(value) for value in range(n + 1)] def get_code(): diff --git a/pygorithm/fibonacci/memoization.py b/pygorithm/fibonacci/memoization.py index ce6ce40..6374aa4 100644 --- a/pygorithm/fibonacci/memoization.py +++ b/pygorithm/fibonacci/memoization.py @@ -1,8 +1,8 @@ """ Fibonacci implementation through cache. """ - import inspect +# TODO: Fix shadowed parameter names def get_sequence(n): @@ -17,9 +17,7 @@ def fib(n): """ if n in cache: return cache[n] - cache[n] = fib(n - 1) + fib(n - 2) - return cache[n] def sequence(n): diff --git a/pygorithm/fibonacci/recursion.py b/pygorithm/fibonacci/recursion.py index a0c3451..bf14730 100644 --- a/pygorithm/fibonacci/recursion.py +++ b/pygorithm/fibonacci/recursion.py @@ -1,7 +1,6 @@ """ Fibonacci implementation through recursion. """ - import inspect diff --git a/pygorithm/math/lcm.py b/pygorithm/math/lcm.py index 9da4851..ed13376 100644 --- a/pygorithm/math/lcm.py +++ b/pygorithm/math/lcm.py @@ -1,15 +1,25 @@ -# Author : OMKAR PATHAK -# Created at: 16th August 2017 +""" +Author: OMKAR PATHAK +Created at: 16th August 2017 +""" +from functools import reduce # need this line if you're using Python3.x +import inspect -from functools import reduce # need this line if you're using Python3.x -def lcm(List): - ''' function to find LCM for given list of elements +def lcm(_list): + """LCM + function to find LCM for given list of elements + :param _list: _list of which LCM is to be found out + """ - :param List: List of which LCM is to be found out - ''' - def _lcm(a, b): - ''' helper function for finding LCM ''' + def __lcm(a, b): + """ + helper function for finding LCM + + :param a: + :param b: + :return: lcm + """ if a > b: greater = a else: @@ -17,15 +27,16 @@ def _lcm(a, b): while True: if greater % a == 0 and greater % b == 0: - lcm = greater + lcm_ = greater break greater += 1 + return lcm_ - return lcm + return reduce(lambda x, y: __lcm(x, y), _list) - return reduce(lambda x, y: _lcm(x, y), List) def get_code(): - """ returns the code for the current class """ - import inspect + """ + returns the code for the lcm function + """ return inspect.getsource(lcm) diff --git a/pygorithm/math/lcm_using_gcd.py b/pygorithm/math/lcm_using_gcd.py index 8e99771..a0e5abe 100644 --- a/pygorithm/math/lcm_using_gcd.py +++ b/pygorithm/math/lcm_using_gcd.py @@ -1,6 +1,9 @@ -# Author: Ashutosh Gupta -# Created On: 8/17/2017 -# Time: 10:03 PM +""" +Author: Ashutosh Gupta +Created On: 8/17/2017 +Time: 10:03 PM +""" +import inspect def gcd(x, y): @@ -15,18 +18,20 @@ def gcd(x, y): return x -def lcm_using_gcd(List): - """ function to find LCM for given list of elements +def lcm_using_gcd(_list): + """ + function to find LCM for given list of elements - :param List: List of which LCM is to be found out + :param _list: _list of which LCM is to be found out """ - lcm = List[0] - for element in List: + lcm = _list[0] + for element in _list: lcm = lcm * element / gcd(lcm, element) - return lcm + def get_code(): - """ returns the code for the current class """ - import inspect + """ + returns the code for the gcd function + """ return inspect.getsource(lcm_using_gcd) diff --git a/pygorithm/math/sieve_of_eratosthenes.py b/pygorithm/math/sieve_of_eratosthenes.py index 630df28..4aa4d52 100644 --- a/pygorithm/math/sieve_of_eratosthenes.py +++ b/pygorithm/math/sieve_of_eratosthenes.py @@ -1,33 +1,39 @@ -# Author: OMKAR PATHAK -# Created at: 16th August 2017 +""" +Author: OMKAR PATHAK +Created at: 16th August 2017 -# Sieve of Eratosthenes is one of the efficient algorithms to find all the prime numbers upto n, where n can be -# upto 10 million. This algorithm is very efficient and fast and hence is preferred by many competitive programmers. +Sieve of Eratosthenes is one of the efficient algorithms to find all the prime numbers up to n, where n can be +up to 10 million. This algorithm is very efficient and fast and hence is preferred by many competitive programmers. + +Algorithm: +1. Create a list of consecutive integers from 2 to n: (2, 3, 4, …, n). +2. Initially, let p equal 2, the first prime number. +3. Starting from p, count up in increments of p and mark each of these numbers greater than p itself in the list. + These numbers will be 2p, 3p, 4p, etc.; note that some of them may have already been marked. +4. Find the first number greater than p in the list that is not marked. If there was no such number, stop. Otherwise, + let p now equal this number (which is the next prime), and repeat from step 3. +When the algorithm terminates, all the numbers in the list that are not marked (i.e are True) are prime. +""" +import inspect -# Algo: -# 1. Create a list of consecutive integers from 2 to n: (2, 3, 4, …, n). -# 2. Initially, let p equal 2, the first prime number. -# 3. Starting from p, count up in increments of p and mark each of these numbers greater than p itself in the list. -# These numbers will be 2p, 3p, 4p, etc.; note that some of them may have already been marked. -# 4. Find the first number greater than p in the list that is not marked. If there was no such number, stop. Otherwise, -# let p now equal this number (which is the next prime), and repeat from step 3. -# When the algorithm terminates, all the numbers in the list that are not marked (i.e are True) are prime. def sieve_of_eratosthenes(n): - ''' function to find and print prime numbers upto the specified number + """ + function to find and print prime numbers up + to the specified number - :param n: upper limit for finding all primes less than this value - ''' + :param n: upper limit for finding all primes less than this value + """ primes = [True] * (n + 1) - p = 2 # because p is the smallest prime + # because p is the smallest prime + p = 2 - while(p * p <= n): + while p * p <= n: # if p is not marked as False, this it is a prime - if(primes[p]) == True: + if primes[p]: # mark all the multiples of number as False for i in range(p * 2, n + 1, p): primes[i] = False - p += 1 # getting all primes @@ -35,7 +41,9 @@ def sieve_of_eratosthenes(n): return primes + def get_code(): - """ returns the code for the current class """ - import inspect + """ + returns the code for the sieve_of_eratosthenes function + """ return inspect.getsource(sieve_of_eratosthenes) diff --git a/pygorithm/searching/binary_search.py b/pygorithm/searching/binary_search.py index 8bf50c9..eadf9aa 100644 --- a/pygorithm/searching/binary_search.py +++ b/pygorithm/searching/binary_search.py @@ -1,35 +1,60 @@ -# Author: OMKAR PATHAK -# Created On: 1st August 2017 - -# Best O(1); Average O(logn); Worst O(logn) - -def search(List, target): - '''This function performs a binary search on a sorted list and returns the position if successful else returns -1''' - left = 0 # First position of the list - right = len(List) - 1 # Last position of the list - - try: - found = False - while left <= right: # you can also write while True condition - mid = (left + right) // 2 - if target == List[mid]: - found = True - return mid - elif target < List[mid]: - right = mid - 1 - else: - left = mid + 1 - if found == False: - return -1 - except TypeError: - return -1 - - -# time complexities +""" +Author: OMKAR PATHAK +Created On: 1st August 2017 + + - Best O(1) + - Average O(logn) + - Worst O(logn) +""" +from __future__ import division +import inspect + + +def search(_list, target): + """ + This function performs a binary search + on a sorted list and returns the index + of item if successful else returns False + + :param _list: list to search + :param target: item to search for + :return: index of item if successful else returns False + """ + + if type(_list) is not list: + raise TypeError("binary search only excepts lists, not {}".format(str(type(_list)))) + + # First position of the list + left = 0 + # Last position of the list + right = len(_list) - 1 + + # you can also write while True condition + while left <= right: + mid = (left + right) // 2 + if target == _list[mid]: + return mid + elif target < _list[mid]: + right = mid - 1 + else: + left = mid + 1 + return False + + +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(1), Average Case: O(logn), Worst Case: O(logn)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(1), Average Case: O(logn), Worst Case: O(logn)" + -# easily retrieve the source code of the search function def get_code(): - import inspect + """ + easily retrieve the source code + of the function + :return: source code + """ return inspect.getsource(search) diff --git a/pygorithm/searching/breadth_first_search.py b/pygorithm/searching/breadth_first_search.py index 32fefab..1541577 100644 --- a/pygorithm/searching/breadth_first_search.py +++ b/pygorithm/searching/breadth_first_search.py @@ -1,28 +1,49 @@ -# Author: OMKAR PATHAK -# Created On: 1st August 2017 +""" +Author: OMKAR PATHAK +Created On: 1st August 2017 +""" +import inspect -# breadth first search algorithm -def search(graph, startVertex): - # Take a list for stoting already visited vertexes - if startVertex not in graph or graph[startVertex] is None or graph[startVertex] == []: + +def search(graph, start_vertex): + """ + Breadth first search algorithm + + :param graph: + :param start_vertex: + :return: + """ + + # Take a list for storing already visited vertexes + if start_vertex not in graph or graph[start_vertex] is None or graph[start_vertex] == []: return None # create a list to store all the vertexes for BFS and a set to store the visited vertices - visited, queue = set(), [startVertex] + visited, queue = set(), [start_vertex] while queue: vertex = queue.pop(0) if vertex not in visited: visited.add(vertex) queue.extend(graph[vertex] - visited) - return visited -# time complexities + +# TODO: Are these necessary? def time_complexities(): - return '''O(V + E) where V = Number of vertices and E = Number of Edges''' + """ + Return information on functions + time complexity + :return: string + """ + return "O(V + E) where V = Number of vertices and E = Number of Edges" + -# easily retrieve the source code of the bfs function def get_code(): - import inspect + """ + easily retrieve the source code + of the function + + :return: source code + """ return inspect.getsource(search) diff --git a/pygorithm/searching/depth_first_search.py b/pygorithm/searching/depth_first_search.py index 12ce035..7410e22 100644 --- a/pygorithm/searching/depth_first_search.py +++ b/pygorithm/searching/depth_first_search.py @@ -1,22 +1,45 @@ -# Author: OMKAR PATHAK -# Created On: 1st August 2017 +""" +Author: OMKAR PATHAK +Created On: 1st August 2017 +""" +import inspect -# depth first search algorithm -def search(graph, start, path = []): + +def search(graph, start, path=None): + """ + depth first search algorithm + + :param graph: + :param start: + :param path: + :return: + """ # check if graph is empty or start vertex is none if start not in graph or graph[start] is None or graph[start] == []: - return None - path = path + [start] + return path + + _path = path + [start] for edge in graph[start]: - if edge not in path: - path = search(graph, edge, path) - return path + if edge not in _path: + _path = search(graph, edge, _path) + return _path -# time complexities + +# TODO: Are these necessary? def time_complexities(): - return '''O(V + E) where V = Number of vertices and E = Number of Edges''' + """ + Return information on functions + time complexity + :return: string + """ + return "O(V + E) where V = Number of vertices and E = Number of Edges" + -# easily retrieve the source code of the dfs function def get_code(): - import inspect + """ + easily retrieve the source code + of the function + + :return: source code + """ return inspect.getsource(search) diff --git a/pygorithm/searching/linear_search.py b/pygorithm/searching/linear_search.py index 27df4e0..3b56cc7 100644 --- a/pygorithm/searching/linear_search.py +++ b/pygorithm/searching/linear_search.py @@ -1,23 +1,48 @@ -# Author: OMKAR PATHAK -# Created On: 1st August 2017 +""" +Author: OMKAR PATHAK +Created On: 1st August 2017 -# Best O(1); Average O(n); Worst O(n) + - Best O(1) + - Average O(n) + - Worst O(n) +""" +import inspect -# sequential search algorithm -def search(List, target): - '''This function returns the position of the target if found else returns -1''' - position = 0 - while position < len(List): - if target == List[position]: + +def search(_list, target, initial_position=0): + """sequential search algorithm + + This function returns the position + of the target if found else returns -1 + + :param _list: + :param target: + :param initial_position: default @ 0 + :return: + """ + position = initial_position + while position < len(_list): + if target == _list[position]: return position position += 1 return -1 -# time complexities + +# TODO: Are these necessary? def time_complexities(): - return '''Best Case: O(1), Average Case: O(n), Worst Case: O(n)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(1), Average Case: O(n), Worst Case: O(n)" + -# easily retrieve the source code of the search function def get_code(): - import inspect + """ + easily retrieve the source code + of the function + + :return: source code + """ return inspect.getsource(search) diff --git a/pygorithm/searching/quick_select.py b/pygorithm/searching/quick_select.py index bc82085..0df59a6 100644 --- a/pygorithm/searching/quick_select.py +++ b/pygorithm/searching/quick_select.py @@ -1,41 +1,80 @@ -# Author: DION MISIC -# Created On: 11th August 2017 +""" +Author: DION MISIC +Created On: 11th August 2017 +""" +import inspect + def search(array, n): - ''' Recursively defined function for finding nth number in unsorted list ''' - def select(array, left, right, n): - if left == right: - return array[left] - split = partition(array, left, right, n) - length = split - left + 1 - if length == n: - return array[split] - elif n < length: - return select(array, left, split - 1, n) - else: - return select(array, split + 1, right, n - length) - - def partition(array, left, right, pivot): - pivot_val = array[pivot] - array[pivot], array[right] = array[right], array[pivot] - store_index = left - - for i in range(left, right): - if array[i] < pivot_val: - array[store_index], array[i] = array[i], array[store_index] - store_index += 1 - - array[right], array[store_index] = array[store_index], array[right] - return store_index - - ans = select(array, 0, len(array) - 1, n) - return ans + """ + Recursively defined function for finding nth number in unsorted list + + :param array: + :param n: + :return: + """ + return select(array, 0, len(array) - 1, n) + + +def select(array, left, right, n): + """ + helper method for search function + + :param array: + :param left: + :param right: + :param n: + :return: + """ + if left == right: + return array[left] + split = partition(array, left, right, n) + length = split - left + 1 + if length == n: + return array[split] + elif n < length: + return select(array, left, split - 1, n) + else: + return select(array, split + 1, right, n - length) + +def partition(array, left, right, pivot): + """ + helper method for select functions + :param array: + :param left: + :param right: + :param pivot: + :return: + """ + pivot_val = array[pivot] + array[pivot], array[right] = array[right], array[pivot] + store_index = left + + for i in range(left, right): + if array[i] < pivot_val: + array[store_index], array[i] = array[i], array[store_index] + store_index += 1 + + array[right], array[store_index] = array[store_index], array[right] + return store_index + + +# TODO: Are these necessary? def time_complexities(): - ''' Time Complexity ''' - return '''Best Case: O(n), Average Case: O(n), Worst Case: O(n^2)''' + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(n), Average Case: O(n), Worst Case: O(n^2)" + def get_code(): - ''' Standard code inspection ''' - import inspect + """ + easily retrieve the source code + of the function + + :return: source code + """ return inspect.getsource(search) diff --git a/pygorithm/string/anagram.py b/pygorithm/string/anagram.py index dfcc875..6c26d63 100644 --- a/pygorithm/string/anagram.py +++ b/pygorithm/string/anagram.py @@ -1,22 +1,37 @@ -# Author: OMKAR PATHAK -# Created On: 17th August 2017 - +""" +Author: OMKAR PATHAK +Created On: 17th August 2017 +""" from collections import Counter +import inspect + -def is_anagram(word, List): - ''' - ANAGRAM: An anagram is direct word switch or word play, the result of rearranging the letters of a word or phrase to produce a new word or phrase, using all the original letters exactly once - We are taking a word and a list. We return the anagrams of that word from the given list and return the list of anagrams else return empty list - ''' +def is_anagram(word, _list): + """ANAGRAM + An anagram is direct word switch or word play, + the result of rearranging the letters of a word + or phrase to produce a new word or phrase, using + all the original letters exactly once we are taking + a word and a list. We return the anagrams of that + word from the given list and return the list of + anagrams else return empty list. + + :param word: word + :param _list: list of words + :return: anagrams + """ word = word.lower() anagrams = [] - for words in List: - if word != words.lower(): - if Counter(word) == Counter(words.lower()): - anagrams.append(words) + for words in _list: + if word != words.lower(): + if Counter(word) == Counter(words.lower()): + anagrams.append(words) return anagrams + def get_code(): - """ returns the code for the current class """ - import inspect + """ + returns the code for the is_anagram function + :return: source code + """ return inspect.getsource(is_anagram) diff --git a/pygorithm/string/isogram.py b/pygorithm/string/isogram.py index ad456e6..1d9b2a4 100644 --- a/pygorithm/string/isogram.py +++ b/pygorithm/string/isogram.py @@ -1,25 +1,34 @@ -# Author: OMKAR PATHAK -# Created On: 17th August 2017 +""" +Author: OMKAR PATHAK +Created On: 17th August 2017 +""" +import inspect + def is_isogram(word): - ''' - An isogram (also known as a "nonpattern word") is a logological term for a word - or phrase without a repeating letter - ''' - # Convert the word or sentence in lower case letters. - clean_word = word.lower() - # Make ann empty list to append unique letters + """ + An isogram (also known as a "nonpattern word") + is a logological term for a word or phrase + without a repeating letter + + :param word: word to check + :return: bool + """ + + # Make an empty list to append unique letters letter_list = [] - for letter in clean_word: + for letter in word.lower(): # If letter is an alphabet then only check if letter.isalpha(): if letter in letter_list: return False letter_list.append(letter) - return True + def get_code(): - """ returns the code for the current class """ - import inspect + """ + returns the code for the is_isogram function + :return: source code + """ return inspect.getsource(is_isogram) diff --git a/pygorithm/string/palindrome.py b/pygorithm/string/palindrome.py index cda72df..86de897 100644 --- a/pygorithm/string/palindrome.py +++ b/pygorithm/string/palindrome.py @@ -1,15 +1,25 @@ -#Author: OMKAR PATHAK -# Created On: 17th August 2017 +""" +Author: OMKAR PATHAK +Created On: 17th August 2017 +""" +import inspect + def is_palindrome(string): - '''This function checks the string for palindrome''' - revString = string[::-1] - if string == revString: + """ + Checks the string for palindrome + + :param string: string to check + :return: true if string is a palindrome false if not + """ + if string is string[::-1]: return True - else: - return False + return False + def get_code(): - """ returns the code for the current class """ - import inspect - return inspect.getsource(palindrome) + """ + returns the code for the is_palindrome function + :return: source code + """ + return inspect.getsource(is_palindrome) diff --git a/pygorithm/string/pangram.py b/pygorithm/string/pangram.py index 6820292..b3bf937 100644 --- a/pygorithm/string/pangram.py +++ b/pygorithm/string/pangram.py @@ -1,15 +1,26 @@ -# Author: OMKAR PATHAK -# Created On: 17th August 2017 +""" +Author: OMKAR PATHAK +Created On: 17th August 2017 +""" +from string import ascii_lowercase +import inspect + def is_pangram(sentence): - ''' - PANGRAM: A sentence containing every letter of the alphabet. - ''' - alphabet = list(map(chr, range(97, 123))) - formattedString = ''.join(c for c in sentence if c.isalpha()).lower() - return set(alphabet) == set(formattedString) + """ + A sentence containing every letter of the alphabet. + + :param sentence: Sentence to check + :return: bool + """ + + f_string = ''.join(c for c in sentence if c.isalpha()).lower() + return set(ascii_lowercase) == set(f_string) + def get_code(): - """ returns the code for the current class """ - import inspect + """ + returns the code for the is_pangram function + :return: source code + """ return inspect.getsource(is_pangram) From a79982ffe020ba68a914515df4e40b5b975c8ce8 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Fri, 18 Aug 2017 12:33:39 -0500 Subject: [PATCH 062/251] Updates to data_structures: - queue.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Removed redundant import statments in methods - linked_list.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Removed redundant import statments in methods - Updated conditionals and syntaxing - Removed redundant parenthesis around conditionals - Removed camel casing on variables - heap.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Removed redundant import statments in methods - Updated parent_idx, left_child_idx, right_child_idx, time_complexities to be static - removed unused variable 'ROOT' from heapify_down() - stack.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Removed redundant import statments in methods - Removed camel casing on methods and variables - Updated get_code() in Stack(object) to be static - Updated _isOperand(), _precedence() in InfixToPostfix() to be static and private - Updated get_code() to be static - Updated method _isOperand() - Removed redundant parenthesis around conditionals - tree.py - Updated docstrings at top of file - Updated docstrings for functions - Optimized import statements - Removed redundant import statments in methods - Removed redundant parenthesis around conditionals - Updated min_val_bst_node(), get_code() - Removed camel casing on variables and parameter names Signed-off-by: IanDoarn --- pygorithm/data_structures/heap.py | 73 +++-- pygorithm/data_structures/linked_list.py | 202 +++++++----- pygorithm/data_structures/queue.py | 79 +++-- pygorithm/data_structures/stack.py | 151 +++++---- pygorithm/data_structures/tree.py | 373 ++++++++++++++--------- 5 files changed, 545 insertions(+), 333 deletions(-) diff --git a/pygorithm/data_structures/heap.py b/pygorithm/data_structures/heap.py index 95df610..76fddd6 100644 --- a/pygorithm/data_structures/heap.py +++ b/pygorithm/data_structures/heap.py @@ -3,31 +3,48 @@ Contributed: OMKAR PATHAK Created On: 11th August 2017 """ +from __future__ import division from pygorithm.data_structures import queue +import inspect class Heap(queue.Queue): - ''' min-heap implementation as queue ''' - def parent_idx(self, idx): - ''' retrieve the parent ''' + """ + min-heap implementation as queue + """ + + @staticmethod + def parent_idx(idx): + """ + retrieve the parent + """ return idx // 2 - def left_child_idx(self, idx): - ''' retrieve the left child ''' + @staticmethod + def left_child_idx(idx): + """ + retrieve the left child + """ return (idx * 2) + 1 - def right_child_idx(self, idx): - ''' retrieve the right child ''' + @staticmethod + def right_child_idx(idx): + """ + retrieve the right child + """ return (idx * 2) + 2 def insert(self, data): - ''' inserting an element in the heap ''' + """ + inserting an element in the heap + """ + # TODO: Fix this if we want this compatible with 2.7 super().enqueue(data) if self.rear >= 1: # heap may need to be fixed self.heapify_up() def heapify_up(self): - ''' + """ Start at the end of the tree (last enqueued item). Compare the rear item to its parent, swap if @@ -35,8 +52,8 @@ def heapify_up(self): Repeat until the min-heap property is met. Best Case: O(1), item is inserted at correct position, no swaps needed - Worst Case: O(logn), item needs to be swapped throughout all levels of tree - ''' + Worst Case: O(log n), item needs to be swapped throughout all levels of tree + """ child = self.rear parent = self.parent_idx(child) while self.queue[child] < self.queue[self.parent_idx(child)]: @@ -46,29 +63,36 @@ def heapify_up(self): parent = self.parent_idx(child) def pop(self): - ''' Removes the lowest value element (highest priority, at root) from the heap ''' + """ + Removes the lowest value element (highest priority, at root) from the heap + """ min = super().dequeue() if self.rear >= 1: # heap may need to be fixed self.heapify_down() return min def favorite(self, parent): - ''' Determines which child has the highest priority by 3 cases ''' + """ + Determines which child has the highest priority by 3 cases + """ left = self.left_child_idx(parent) right = self.right_child_idx(parent) - if left <= self.rear and right <= self.rear: # case 1: both nodes exist + # case 1: both nodes exist + if left <= self.rear and right <= self.rear: if self.queue[left] <= self.queue[right]: return left else: return right - elif left <= self.rear: # case 2: only left exists + # case 2: only left exists + elif left <= self.rear: return left - else: # case 3: no children (if left doesn't exist, neither can the right) + # case 3: no children (if left doesn't exist, neither can the right) + else: return None def heapify_down(self): - ''' + """ Select the root and sift down until min-heap property is met. While a favorite child exists, and that child is smaller @@ -76,8 +100,8 @@ def heapify_down(self): Best Case: O(1), item is inserted at correct position, no swaps needed Worst Case: O(logn), item needs to be swapped throughout all levels of tree - ''' - cur = ROOT = 0 # start at the root + """ + cur = 0 # start at the root fav = self.favorite(cur) # determine favorite child while self.queue[fav] is not None: if self.queue[cur] > self.queue[fav]: @@ -88,10 +112,13 @@ def heapify_down(self): else: return - def time_complexities(self): - return '''[Insert & Pop] Best Case: O(1), Worst Case: O(logn)''' + # TODO: Is this necessary? + @staticmethod + def time_complexities(): + return "[Insert & Pop] Best Case: O(1), Worst Case: O(logn)" def get_code(self): - ''' returns the code for the current class ''' - import inspect + """ + returns the code for the current class + """ return inspect.getsource(Heap) diff --git a/pygorithm/data_structures/linked_list.py b/pygorithm/data_structures/linked_list.py index 02d162c..93d5549 100644 --- a/pygorithm/data_structures/linked_list.py +++ b/pygorithm/data_structures/linked_list.py @@ -1,159 +1,199 @@ -# Author: OMKAR PATHAK -# Created On: 5th August 2017 +""" +Author: OMKAR PATHAK +Created On: 5th August 2017 + +Linked l_list and Node can be accommodated +in separate classes for convenience +""" +import inspect -# Linked List and Node can be accomodated in separate classes for convenience class Node(object): - ''' Node class for creating a node for linked list. - Each node has its data and a pointer that points to next node in the Linked List - ''' - def __init__(self, data, next=None): - ''' constructor ''' + """ + Node class for creating a node + for linked list. + Each node has its data and a pointer that + points to next node in the Linked l_list + """ + def __init__(self, data, next_node=None): + """ + constructor + :param data: + :param next_node: + """ self.data = data - self.next = next + self.next = next_node - # easily retrieve the source code of the Node class - @classmethod - def get_code(cls): - ''' return the code for the current class ''' - import inspect - return inspect.getsource(cls) + @staticmethod + def get_code(): + """ + return the code for the current class + """ + return inspect.getsource(Node) class SinglyLinkedList(object): - # Defining the head of the linked list + """ + Defining the head of the linked list + """ def __init__(self): - ''' constructor ''' + """ + constructor + """ self.head = None def _search(self, node, data): - ''' searches the node, if valid returns the node else return false ''' - if node == None: + """ + searches the node, if valid returns the node else return false + """ + if node is None: return False if node.data == data: return node return self._search(node.get_next(), data) def get_data(self): - ''' prints the elements in the linked list ''' + """ + prints the elements in the linked list + """ temp = self.head - List = [] - while (temp): - # print(temp.data, end=' ') - List.append(temp.data) + l_list = [] + while temp: + l_list.append(temp.data) temp = temp.next - return List + return l_list def insert_at_start(self, data): - ''' insert an item at the beginning of the linked list ''' + """ + insert an item at the beginning of the linked list + """ if self.head is None: - newNode = Node(data) - self.head = newNode + new_node = Node(data) + self.head = new_node else: - newNode = Node(data) - newNode.next = self.head - self.head = newNode + new_node = Node(data) + new_node.next = self.head + self.head = new_node def insert_after(self, next_node_data, data): - ''' insert an item after an element in the linked list ''' - newNode = Node(data) - currentNode = self._search(self.head, next_node_data) - newNode.next = currentNode.next - currentNode.next = newNode + """ + insert an item after an element in the linked list + """ + new_node = Node(data) + current_node = self._search(self.head, next_node_data) + new_node.next = current_node.next + current_node.next = new_node def insert_at_end(self, data): - ''' insert an item at the end of the linked list ''' - newNode = Node(data) + """ + insert an item at the end of the linked list + """ + new_node = Node(data) temp = self.head - while (temp.next != None): # get last node + # get last node + while temp.next is not None: temp = temp.next - temp.next = newNode + temp.next = new_node def delete(self, data): - ''' to delete specified element from the linked list ''' + """ + to delete specified element from the linked list + """ temp = self.head # if data/key is found in head node itself if temp is not None: if temp.data == data: self.head = temp.next - temp = None return else: - # else _search all the nodes - while (temp.next != None): - if (temp.data == data): + # else search all the nodes + while temp.next is not None: + if temp.data == data: break - prev = temp # save current node as previous so that we can go on to next node + # save current node as previous so that we can go on to next node + prev = temp temp = temp.next # node not found - if temp == None: + if temp is None: return - + + # TODO: local variable 'prev' might be referenced before assignment + # TODO: Fix this prev.next = temp.next return - # easily retrieve the source code of the SinglyLinkedList class @staticmethod def get_code(): - ''' return the code for the current class ''' - import inspect + """ + return the code for the current class + """ return inspect.getsource(SinglyLinkedList) class DoublyLinkedList(object): + """DoublyLinkedList + DoublyLinkedList Class + """ def __init__(self): - ''' constructor ''' + """ + constructor + """ self.head = None def get_data(self): - ''' prints the elements in the linked list ''' + """ + prints the elements in the linked list + """ temp = self.head - List = [] - while (temp): - # print(temp.data, end=' ') - List.append(temp.data) + l_list = [] + while temp: + l_list.append(temp.data) temp = temp.next - - return List + return l_list def insert_at_start(self, data): - ''' insert an element at the beginning of the linked list ''' - if self.head == None: - newNode = Node(data) - self.head = newNode + """ + insert an element at the beginning of the linked list + """ + if self.head is None: + self.head = Node(data) else: - newNode = Node(data) - self.head.previous = newNode - newNode.next = self.head - self.head = newNode + new_node = Node(data) + self.head.previous = new_node + new_node.next = self.head + self.head = new_node def insert_at_end(self, data): - ''' insert an element at the end of the linked list ''' - newNode = Node(data) + """ + insert an element at the end of the linked list + """ + new_node = Node(data) temp = self.head - while (temp.next != None): + while temp.next is not None: temp = temp.next - temp.next = newNode - newNode.previous = temp + temp.next = new_node + new_node.previous = temp def delete(self, data): - ''' to delete specified element from the linked list ''' + """ + to delete specified element from the linked list + """ temp = self.head - if (temp.next != None): + if temp.next is not None: # if head node is to be deleted - if (temp.data == data): + if temp.data == data: temp.next.previous = None self.head = temp.next temp.next = None return else: - while (temp.next != None): - if (temp.data == data): + while temp.next is not None: + if temp.data == data: break temp = temp.next - if (temp.next): + if temp.next: # if element to be deleted is in between temp.previous.next = temp.next temp.next.previous = temp.previous @@ -168,9 +208,9 @@ def delete(self, data): if temp is None: return - # easily retrieve the source code of the DoublyLinkedList class @staticmethod def get_code(): - ''' returns the code of the current class ''' - import inspect + """ + returns the code of the current class + """ return inspect.getsource(DoublyLinkedList) diff --git a/pygorithm/data_structures/queue.py b/pygorithm/data_structures/queue.py index 2585d55..cfc7554 100644 --- a/pygorithm/data_structures/queue.py +++ b/pygorithm/data_structures/queue.py @@ -2,13 +2,17 @@ Author: OMKAR PATHAK Created On: 3rd August 2017 """ +import inspect + -# queue implementation class Queue(object): - def __init__(self, limit = 10): - ''' - @param: limit: queue size - ''' + """Queue + Queue implementation + """ + def __init__(self, limit=10): + """ + :param limit: Queue limit size, default @ 10 + """ self.queue = [] self.front = None self.rear = None @@ -19,17 +23,24 @@ def __str__(self): return ' '.join([str(i) for i in self.queue]) def size(self): - ''' returns the current size of the queue ''' + """ + returns the current size of the queue + """ return self.size def is_empty(self): - ''' checks if the queue is empty ''' + """ + checks if the queue is empty + """ return self.size <= 0 def enqueue(self, data): - ''' inserts an item into the queue ''' + """ + inserts an item into the queue + """ if self.size >= self.limit: - return -1 # queue overflow + # queue overflow + return -1 else: self.queue.append(data) @@ -42,9 +53,12 @@ def enqueue(self, data): self.size += 1 def dequeue(self): - ''' pops an item from the queue which was first inserted ''' + """ + pops an item from the queue which was first inserted + """ if self.is_empty(): - return -1 # queue underflow + # queue underflow + return -1 else: self.size -= 1 if self.size == 0: @@ -54,11 +68,18 @@ def dequeue(self): return self.queue.pop(0) def get_code(self): - import inspect + """ + Return source code for Queue class + :return: + """ return inspect.getsource(Queue) + class Deque(object): - def __init__(self, limit = 10): + """Deque + Deque implementation + """ + def __init__(self, limit=10): self.queue = [] self.limit = limit @@ -66,42 +87,56 @@ def __str__(self): return ' '.join([str(i) for i in self.queue]) def is_empty(self): - ''' checks whether the deque is empty ''' + """ + checks whether the deque is empty + """ return len(self.queue) <= 0 def is_full(self): - ''' checks whether the deque is full ''' + """ + checks whether the deque is full + """ return len(self.queue) >= self.limit def insert_rear(self, data): - ''' inserts an element at the rear end of the deque ''' + """ + inserts an element at the rear end of the deque + """ if self.is_full(): return else: self.queue.insert(0, data) def insert_front(self, data): - ''' inserts an element at the front end of the deque ''' + """ + inserts an element at the front end of the deque + """ if self.is_full(): return -1 else: self.queue.append(data) def delete_rear(self): - ''' deletes an element from the rear end of the deque ''' + """ + deletes an element from the rear end of the deque + """ if self.is_empty(): return -1 else: return self.queue.pop(0) def delete_front(self): - ''' deletes an element from the front end of the deque ''' + """ + deletes an element from the front end of the deque + """ if self.is_full(): return else: return self.queue.pop() - def get_code(self): - ''' returns the code of the current class ''' - import inspect + @staticmethod + def get_code(): + """ + returns the code of the current class + """ return inspect.getsource(Deque) diff --git a/pygorithm/data_structures/stack.py b/pygorithm/data_structures/stack.py index f5a4281..4414f12 100644 --- a/pygorithm/data_structures/stack.py +++ b/pygorithm/data_structures/stack.py @@ -1,15 +1,19 @@ -# Author: OMKAR PATHAK -# Created On: 3rd August 2017 +""" +Author: OMKAR PATHAK +Created On: 3rd August 2017 +""" +from string import ascii_letters +import inspect + -# stack implementation class Stack(object): - ''' - Python implementation of Stack - ''' - def __init__(self, limit = 10): - ''' - @param : limit: the stack size - ''' + """ + Stack object + """ + def __init__(self, limit=10): + """ + :param limit: the stack size + """ self.stack = [] self.limit = limit @@ -17,71 +21,90 @@ def __str__(self): return ' '.join([str(i) for i in self.stack]) def push(self, data): - ''' pushes an item into the stack - returns -1 if the stack is empty - ''' + """ + pushes an item into the stack + returns -1 if the stack is empty + """ if len(self.stack) >= self.limit: - return -1 # indicates stack overflow + # indicates stack overflow + return -1 else: self.stack.append(data) def pop(self): - ''' pops the topmost item from the stack - returns -1 if the stack is empty - ''' + """ + pops the topmost item from the stack + returns -1 if the stack is empty + """ if len(self.stack) <= 0: - return -1 # indicates stack underflow + # indicates stack underflow + return -1 else: return self.stack.pop() def peek(self): - ''' returns the topmost element of the stack - returns -1 if the stack is empty - ''' + """ + returns the topmost element of the stack + returns -1 if the stack is empty + """ if len(self.stack) <= 0: - return -1 # stack underflow + # stack underflow + return -1 else: return self.stack[len(self.stack) - 1] def is_empty(self): - ''' checks if the stack is empty - returns boolean value, True or False - ''' + """ + checks if the stack is empty + returns boolean value, True or False + """ return self.size() == 0 def size(self): - ''' returns the current size of the stack ''' + """ + returns the current size of the stack + """ return len(self.stack) - # easily retrieve the source code of the Stack class - def get_code(self): - ''' returns the code for current class ''' - import inspect + @staticmethod + def get_code(): + """ + returns the code for current class + """ return inspect.getsource(Stack) -class InfixToPostfix(object): - ''' - infix_to_postfix : get the postfix of the given infix expression - - ''' - def __init__(self, expression = [], stack = None): - ''' - @param: expression : the infix expression to be converted to postfix - @param: stack : stack to perform infix to postfix operation - ''' +class InfixToPostfix(object): + """InfixToPostfix + get the postfix of the given infix expression + """ + + def __init__(self, expression=None, stack=None): + """ + :param expression: the infix expression to be converted to postfix + :param stack: stack to perform infix to postfix operation + """ self.expression = list(expression) self.my_stack = stack - def _isOperand(self, char): - ''' utility function to find whether the given character is an operator ''' - return (ord(char) >= ord('a') and ord(char) <= ord('z')) or (ord(char) >= ord('A') and ord(char) <= ord('Z')) - - def _precedence(self, char): - ''' utility function to find precedence of the specified character ''' + @staticmethod + def __is_operand(char): + """ + utility function to find whether the given character is an operator + """ + # OLD VERSION + # return ord(char) >= ord('a') and ord(char) <= ord('z') \ + # or ord(char) >= ord('A') and ord(char) <= ord('Z') + return True if ord(char) in [ord(c) for c in list(ascii_letters)] else False + + @staticmethod + def __precedence(char): + """ + utility function to find precedence of the specified character + """ if char == '+' or char == '-': return 1 - elif char == '*' or char == '/': + elif char == '*' or char == '/': return 2 elif char == '^': return 3 @@ -89,29 +112,33 @@ def _precedence(self, char): return -1 def infix_to_postfix(self): - ''' function to generate postfix expression from infix expression ''' + """ + function to generate postfix expression from infix expression + """ postfix = [] for i in range(len(self.expression)): - if (self._isOperand(self.expression[i])): + if self.__is_operand(self.expression[i]): postfix.append(self.expression[i]) - elif(self.expression[i] == '('): + elif self.expression[i] == '(': self.my_stack.push(self.expression[i]) - elif(self.expression[i] == ')'): - topOperator = self.my_stack.pop() - while(not self.my_stack.is_empty() and topOperator != '('): - postfix.append(topOperator) - topOperator = self.my_stack.pop() + elif self.expression[i] == ')': + top_operator = self.my_stack.pop() + while not self.my_stack.is_empty() and top_operator != '(': + postfix.append(top_operator) + top_operator = self.my_stack.pop() else: - while (not self.my_stack.is_empty()) and (self._precedence(self.expression[i]) <= self._precedence(self.my_stack.peek())): + while not self.my_stack.is_empty() \ + and self.__precedence(self.expression[i] <= self.__precedence(self.my_stack.peek())): postfix.append(self.my_stack.pop()) self.my_stack.push(self.expression[i]) - while(not self.my_stack.is_empty()): + while not self.my_stack.is_empty(): postfix.append(self.my_stack.pop()) return ' '.join(postfix) - # easily retrieve the source code of the Stack class - def get_code(self): - ''' returns the code of the current class ''' - import inspect - return inspect.getsource(InfixTopostfix) + @staticmethod + def get_code(): + """ + returns the code of the current class + """ + return inspect.getsource(InfixToPostfix) diff --git a/pygorithm/data_structures/tree.py b/pygorithm/data_structures/tree.py index 97ef6e1..83c2deb 100644 --- a/pygorithm/data_structures/tree.py +++ b/pygorithm/data_structures/tree.py @@ -1,248 +1,324 @@ -# Author: OMKAR PATHAK -# Created On: 9th August 2017 +""" +Author: OMKAR PATHAK +Created On: 9th August 2017 + +Node class to create a node +for binary tree +""" +import inspect + -# Node class to create a node for binary tree class Node(object): - ''' Node class for creating a node for tree. - Each node has its data and a pointer that points to next node in the Linked List - ''' - def __init__(self, data = None): + """ + Node class for creating a node for tree. + Each node has its data and a pointer + that points to next node in the Linked List + """ + def __init__(self, data=None): self.left = None self.right = None self.data = data def set_left(self, node): - ''' for setting the left child of the node ''' + """ + for setting the left child of the node + """ self.left = node def set_right(self, node): - ''' for setting the right child of the node ''' + """ + for setting the right child of the node + """ self.right = node def get_left(self): - ''' for getting the left child of the node ''' + """ + for getting the left child of the node + """ return self.left def get_right(self): - ''' for getting the right child of the node ''' + """ + for getting the right child of the node + """ return self.right def set_data(self, data): - ''' for setting the data of the node ''' + """ + for setting the data of the node + """ self.data = data def get_data(self): - ''' for getting the data of the node ''' + """ + for getting the data of the node + """ return self.data - # easily retrieve the source code of the Node class - def get_code(self): - ''' returns the code of the current class ''' - import inspect + @staticmethod + def get_code(): + """ + returns the code of the current class + """ return inspect.getsource(Node) + class BinaryTree(object): - ''' BinaryTree class to create a binary tree ''' + """ + BinaryTree class to create a binary tree + """ def __init__(self): - self._inorder = [] - self._preorder = [] - self._postorder = [] + self._in_order = [] + self._pre_order = [] + self._post_order = [] def inorder(self, root): - ''' - @type: root: Node object - in this we traverse first to the leftmost node, then print its data and then traverse for rightmost node - ''' + """ + in this we traverse first to the leftmost node, + then print its data and then traverse for rightmost node + :param root: Node object + """ if root: - self.inorder(root.get_left()) # traverse to leftmost child - self._inorder.append(root.get_data()) # get the data of current node - self.inorder(root.get_right()) # traverse to rightmost child - return self._inorder + # traverse to leftmost child + self.inorder(root.get_left()) + # get the data of current node + self._in_order.append(root.get_data()) + # traverse to rightmost child + self.inorder(root.get_right()) + return self._in_order def preorder(self, root): - ''' - @type: root: Node object - in this we first print the root node and then traverse towards leftmost node and then to the rightmost node - ''' + """ + in this we first print the root node and then + traverse towards leftmost node and then to the rightmost node + :param root: Node object + """ if root: - self._preorder.append(root.get_data()) # get the data of current node - self.preorder(root.get_left()) # traverse to leftmost child - self.preorder(root.get_right()) # traverse to rightmost child - return self._preorder + # get the data of current node + self._pre_order.append(root.get_data()) + # traverse to leftmost child + self.preorder(root.get_left()) + # traverse to rightmost child + self.preorder(root.get_right()) + return self._pre_order def postorder(self, root): - ''' - @type: root: Node object - in this we first traverse to the leftmost node and then to the rightmost node and then print the data - ''' + """ + in this we first traverse to the leftmost node and then + to the rightmost node and then print the data + :param root: Node object + """ if root: - self.postorder(root.get_left()) # traverse to leftmost child - self.postorder(root.get_right()) # traverse to rightmost child - self._postorder.append(root.get_data()) # get the data of current node - return self._postorder - - # easily retrieve the source code of the BinaryTree class - def get_code(self): - ''' returns the code of the current class ''' - import inspect + # traverse to leftmost child + self.postorder(root.get_left()) + # traverse to rightmost child + self.postorder(root.get_right()) + # traverse to rightmost child + self._post_order.append(root.get_data()) + return self._post_order + + @staticmethod + def get_code(): + """ + returns the code of the current class + """ return inspect.getsource(BinaryTree) + class BSTNode(object): - ''' class for creating a node for Binary Search tree ''' + """ + class for creating a node for Binary Search tree + """ def __init__(self, data): self.data = data - self.leftChild = None - self.rightChild = None - self._inorder = [] - self._preorder = [] - self._postorder = [] + self.left_child = None + self.right_child = None + self._in_order = [] + self._pre_order = [] + self._post_order = [] def set_left(self, node): - ''' for setting the left child of the node ''' - self.leftChild = node + """ + for setting the left child of the node + """ + self.left_child = node def set_right(self, node): - ''' for setting the right child of the node ''' - self.rightChild = node + """ + for setting the right child of the node + """ + self.right_child = node def get_left(self): - ''' returns the left child of the current node ''' - return self.leftChild + """ + returns the left child of the current node + """ + return self.left_child def get_right(self): - ''' returns the right child of the current node ''' - return self.rightChild + """ + returns the right child of the current node + """ + return self.right_child - # for setting data of a node def set_data(self, data): - ''' for setting the data of a node ''' + """ + for setting the data of a node + """ self.data = data - # for getting data of a node def get_data(self): - ''' returns the data of the current node ''' + """ + returns the data of the current node + """ return self.data def insert(self, data): - ''' For inserting the data in the Tree ''' + """ + For inserting the data in the Tree + """ if self.data == data: - return False # As BST cannot contain duplicate data + # As BST cannot contain duplicate data + return False elif data < self.data: - ''' Data less than the root data is placed to the left of the root ''' - if self.leftChild: - return self.leftChild.insert(data) + # Data less than the root data is placed to the left of the root + if self.left_child: + return self.left_child.insert(data) else: - self.leftChild = BSTNode(data) + self.left_child = BSTNode(data) return True else: - ''' Data greater than the root data is placed to the right of the root ''' - if self.rightChild: - return self.rightChild.insert(data) + # Data greater than the root data is placed to the right of the root + if self.right_child: + return self.right_child.insert(data) else: - self.rightChild = BSTNode(data) + self.right_child = BSTNode(data) return True - def min_val_bst_node(self, BSTNode): - ''' for returning the node with the lowest value ''' - current = BSTNode + @staticmethod + def min_val_bst_node(bst_node): + """ + for returning the node with the lowest value + """ + current = bst_node # loop down to find the leftmost leaf - while(current.leftChild is not None): - current = current.leftChild + while current.left_child is not None: + current = current.left_child return current def delete(self, data): - ''' For deleting the BSTNode ''' + """ + For deleting the bst_node + """ if self is None: return None - # if current BSTNode's data is less than that of root BSTNode, then only search in left subtree else right subtree + # if current bst_node's data is less than that of root bst_node, + # then only search in left subtree else right subtree if data < self.data: - self.leftChild = self.leftChild.delete(data) + self.left_child = self.left_child.delete(data) elif data > self.data: - self.rightChild = self.rightChild.delete(data) + self.right_child = self.right_child.delete(data) else: - # deleting BSTNode with one child - if self.leftChild is None: - temp = self.rightChild - self = None + # deleting bst_node with one child + if self.left_child is None: + temp = self.right_child return temp - elif self.rightChild is None: - temp = self.leftChild - self = None + elif self.right_child is None: + temp = self.left_child return temp - # deleting BSTNode with two children + # deleting bst_node with two children # first get the inorder successor - temp = self.min_val_bst_node(self.rightChild) + temp = self.min_val_bst_node(self.right_child) self.data = temp.data - self.rightChild = self.rightChild.delete(temp.data) + self.right_child = self.right_child.delete(temp.data) return self def find(self, data): - ''' This function checks whether the specified data is in tree or not ''' - if(data == self.data): + """ + This function checks whether the specified data is in tree or not + """ + if data == self.data: return True - elif(data < self.data): - if self.leftChild: - return self.leftChild.find(data) + elif data < self.data: + if self.left_child: + return self.left_child.find(data) else: return False else: - if self.rightChild: - return self.rightChild.find(data) + if self.right_child: + return self.right_child.find(data) else: return False def inorder(self, root): - ''' - @type: root: Node object - in this we first traverse to the leftmost node and then print the data and then move to the rightmost child - ''' + """ + in this we first traverse to the leftmost node and + then print the data and then move to the rightmost child + :param root: Node object + """ if root: - self.inorder(root.get_left()) # traverse to leftmost child - self._inorder.append(root.get_data()) # get the data of current node - self.inorder(root.get_right()) # traverse to rightmost child - return self._inorder + # traverse to leftmost child + self.inorder(root.get_left()) + # get the data of current node + self._in_order.append(root.get_data()) + # traverse to rightmost child + self.inorder(root.get_right()) + return self._in_order def preorder(self, root): - ''' - @type: root: Node object - in this we first print the root node and then traverse towards leftmost node and then to the rightmost node - ''' + """ + in this we first print the root node and then + traverse towards leftmost node and then to the rightmost node + :param root: Node object + """ if root: - self._preorder.append(root.get_data()) # get the data of current node - self.preorder(root.get_left()) # traverse to leftmost child - self.preorder(root.get_right()) # traverse to rightmost child - return self._preorder + # get the data of current node + self._pre_order.append(root.get_data()) + # traverse to leftmost child + self.preorder(root.get_left()) + # traverse to rightmost child + self.preorder(root.get_right()) + return self._pre_order def postorder(self, root): - ''' - @type: root: Node object - in this we first traverse to the leftmost node and then to the rightmost node and then print the data - ''' + """ + in this we first traverse to the leftmost node + and then to the rightmost node and then print the data + :param root: Node object + """ if root: - self.postorder(root.get_left()) # traverse to leftmost child - self.postorder(root.get_right()) # traverse to rightmost child - self._postorder.append(root.get_data()) # get the data of current node - return self._postorder - - # easily retrieve the source code of the BSTNode class - def get_code(self): - ''' returns the code of current class ''' - import inspect + # traverse to leftmost child + self.postorder(root.get_left()) + # traverse to rightmost child + self.postorder(root.get_right()) + # get the data of current node + self._post_order.append(root.get_data()) + return self._post_order + + @staticmethod + def get_code(): + """ + returns the code of current class + """ return inspect.getsource(BSTNode) + class BinarySearchTree(object): + def __init__(self): self.root = None def insert(self, data): - ''' inserts a node in the tree ''' + """ + inserts a node in the tree + """ if self.root: return self.root.insert(data) else: @@ -250,7 +326,9 @@ def insert(self, data): return True def delete(self, data): - ''' deletes the node with the specified data from the tree ''' + """ + deletes the node with the specified data from the tree + """ if self.root is not None: return self.root.delete(data) @@ -261,24 +339,29 @@ def find(self, data): return False def preorder(self): - ''' finding the preorder of the tree ''' + """ + finding the preorder of the tree + """ if self.root is not None: return self.root.preorder(self.root) def inorder(self): - ''' finding the inorder of the tree ''' - print() + """ + finding the inorder of the tree + """ if self.root is not None: return self.root.inorder(self.root) def postorder(self): - ''' finding the postorder of the tree ''' - print() + """ + finding the postorder of the tree + """ if self.root is not None: return self.root.postorder(self.root) - - # easily retrieve the source code of the BinarySearchTree class - def get_code(self): - ''' returns the code of the current class ''' - import inspect + + @staticmethod + def get_code(): + """ + returns the code of the current class + """ return inspect.getsource(BinarySearchTree) From aef627f3b59fe6cbef342d6f3f2c63dc6ffed553 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Fri, 18 Aug 2017 13:20:45 -0500 Subject: [PATCH 063/251] Reverted changes - stack.py, binary_search.py, depth_first_search.py Signed-off-by: IanDoarn --- pygorithm/data_structures/stack.py | 3 +-- pygorithm/searching/binary_search.py | 23 +++++++++++++---------- pygorithm/searching/depth_first_search.py | 10 +++++----- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/pygorithm/data_structures/stack.py b/pygorithm/data_structures/stack.py index 4414f12..c639f62 100644 --- a/pygorithm/data_structures/stack.py +++ b/pygorithm/data_structures/stack.py @@ -127,8 +127,7 @@ def infix_to_postfix(self): postfix.append(top_operator) top_operator = self.my_stack.pop() else: - while not self.my_stack.is_empty() \ - and self.__precedence(self.expression[i] <= self.__precedence(self.my_stack.peek())): + while not self.my_stack.is_empty() and self.__precedence(self.expression[i] <= self.__precedence(self.my_stack.peek())): postfix.append(self.my_stack.pop()) self.my_stack.push(self.expression[i]) diff --git a/pygorithm/searching/binary_search.py b/pygorithm/searching/binary_search.py index eadf9aa..666efa1 100644 --- a/pygorithm/searching/binary_search.py +++ b/pygorithm/searching/binary_search.py @@ -29,16 +29,19 @@ def search(_list, target): # Last position of the list right = len(_list) - 1 - # you can also write while True condition - while left <= right: - mid = (left + right) // 2 - if target == _list[mid]: - return mid - elif target < _list[mid]: - right = mid - 1 - else: - left = mid + 1 - return False + try: + # you can also write while True condition + while left <= right: + mid = (left + right) // 2 + if target == _list[mid]: + return mid + elif target < _list[mid]: + right = mid - 1 + else: + left = mid + 1 + return False + except TypeError: + return False # TODO: Are these necessary? diff --git a/pygorithm/searching/depth_first_search.py b/pygorithm/searching/depth_first_search.py index 7410e22..8e6965d 100644 --- a/pygorithm/searching/depth_first_search.py +++ b/pygorithm/searching/depth_first_search.py @@ -5,7 +5,7 @@ import inspect -def search(graph, start, path=None): +def search(graph, start, path=[]): """ depth first search algorithm @@ -18,11 +18,11 @@ def search(graph, start, path=None): if start not in graph or graph[start] is None or graph[start] == []: return path - _path = path + [start] + path = path + [start] for edge in graph[start]: - if edge not in _path: - _path = search(graph, edge, _path) - return _path + if edge not in path: + path = search(graph, edge, path) + return path # TODO: Are these necessary? From e0e9505f2265e67a2e75de184e61b3ec3aaa0985 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Fri, 18 Aug 2017 13:27:47 -0500 Subject: [PATCH 064/251] Updated test_searching.py to coincide with return changes in binary_search.py Signed-off-by: IanDoarn --- tests/test_searching.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_searching.py b/tests/test_searching.py index a75ecc8..f6cca30 100644 --- a/tests/test_searching.py +++ b/tests/test_searching.py @@ -38,7 +38,7 @@ def test_binary_search(self): self.assertIs(alpha_result, 5) alpha_result = binary_search.search(self.array, 'n') - self.assertIs(alpha_result, -1) + self.assertIs(alpha_result, False) class TestBFSSearch(unittest.TestCase): From bd57b1e2026c0f4d688be1951e7faf3817cc4300 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Fri, 18 Aug 2017 13:52:57 -0500 Subject: [PATCH 065/251] Updates to stack.py -thanks @MrDupin Signed-off-by: IanDoarn --- pygorithm/data_structures/stack.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pygorithm/data_structures/stack.py b/pygorithm/data_structures/stack.py index c639f62..2409b34 100644 --- a/pygorithm/data_structures/stack.py +++ b/pygorithm/data_structures/stack.py @@ -95,7 +95,7 @@ def __is_operand(char): # OLD VERSION # return ord(char) >= ord('a') and ord(char) <= ord('z') \ # or ord(char) >= ord('A') and ord(char) <= ord('Z') - return True if ord(char) in [ord(c) for c in list(ascii_letters)] else False + return True if ord(char) in [ord(c) for c in ascii_letters] else False @staticmethod def __precedence(char): @@ -127,7 +127,8 @@ def infix_to_postfix(self): postfix.append(top_operator) top_operator = self.my_stack.pop() else: - while not self.my_stack.is_empty() and self.__precedence(self.expression[i] <= self.__precedence(self.my_stack.peek())): + while not self.my_stack.is_empty() \ + and self.__precedence(self.expression[i] <= self.__precedence(self.my_stack.peek())): postfix.append(self.my_stack.pop()) self.my_stack.push(self.expression[i]) From e5a7ef8ee64f5a64720e77a7b68a708940112c36 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Fri, 18 Aug 2017 13:52:57 -0500 Subject: [PATCH 066/251] stack.py now passes unittests. added missing parentheses in conditional in method __precedence() Signed-off-by: IanDoarn --- pygorithm/data_structures/stack.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pygorithm/data_structures/stack.py b/pygorithm/data_structures/stack.py index c639f62..d37d0da 100644 --- a/pygorithm/data_structures/stack.py +++ b/pygorithm/data_structures/stack.py @@ -88,17 +88,17 @@ def __init__(self, expression=None, stack=None): self.my_stack = stack @staticmethod - def __is_operand(char): + def _is_operand(char): """ utility function to find whether the given character is an operator """ # OLD VERSION # return ord(char) >= ord('a') and ord(char) <= ord('z') \ # or ord(char) >= ord('A') and ord(char) <= ord('Z') - return True if ord(char) in [ord(c) for c in list(ascii_letters)] else False + return True if ord(char) in [ord(c) for c in ascii_letters] else False @staticmethod - def __precedence(char): + def _precedence(char): """ utility function to find precedence of the specified character """ @@ -117,7 +117,7 @@ def infix_to_postfix(self): """ postfix = [] for i in range(len(self.expression)): - if self.__is_operand(self.expression[i]): + if self._is_operand(self.expression[i]): postfix.append(self.expression[i]) elif self.expression[i] == '(': self.my_stack.push(self.expression[i]) @@ -127,7 +127,8 @@ def infix_to_postfix(self): postfix.append(top_operator) top_operator = self.my_stack.pop() else: - while not self.my_stack.is_empty() and self.__precedence(self.expression[i] <= self.__precedence(self.my_stack.peek())): + while not self.my_stack.is_empty() and self._precedence(self.expression[i]) <= self._precedence( + self.my_stack.peek()): postfix.append(self.my_stack.pop()) self.my_stack.push(self.expression[i]) From 6d4cbbe5886ae7dde258befccd7cace15eb932f5 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Fri, 18 Aug 2017 15:10:23 -0500 Subject: [PATCH 067/251] stack.py now passes unittests. added missing parentheses in conditional in method __precedence() Signed-off-by: IanDoarn --- pygorithm/data_structures/stack.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pygorithm/data_structures/stack.py b/pygorithm/data_structures/stack.py index d37d0da..f04f07a 100644 --- a/pygorithm/data_structures/stack.py +++ b/pygorithm/data_structures/stack.py @@ -116,6 +116,7 @@ def infix_to_postfix(self): function to generate postfix expression from infix expression """ postfix = [] + for i in range(len(self.expression)): if self._is_operand(self.expression[i]): postfix.append(self.expression[i]) From 77570047f951b7059c79598a9845ae27faf70315 Mon Sep 17 00:00:00 2001 From: Anthony Marakis Date: Fri, 18 Aug 2017 23:48:22 +0300 Subject: [PATCH 068/251] Update test_data_structure.py --- tests/test_data_structure.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 65ef642..0bf6efc 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -7,7 +7,8 @@ linked_list, tree, graph, - heap) + heap, + trie) class TestStack(unittest.TestCase): @@ -237,5 +238,22 @@ def test_heap(self): self.assertEqual(myHeap.queue, expectedResult) +class TestTrie(unittest.TestCase): + def test_stack(self): + myTrie = trie.Trie() + myTrie.Insert('the') + myTrie.Insert('turtle') + myTrie.Insert('thesaurus') + myTrie.Insert('chocolate') + myTrie.Insert('flying') + + self.assertEqual(myTrie.FindWords('th'), ['the', 'thesaurus']) + self.assertEqual(myTrie.FindWords('e'), None) + + self.assertEqual(myTrie.Search('chocolate'), True) + self.assertEqual(myTrie.Search('flying'), True) + self.assertEqual(myTrie.Search('walking'), False) + + if __name__ == '__main__': unittest.main() From 3f5c255e799c825202483062ac6d6feb955e0c55 Mon Sep 17 00:00:00 2001 From: Anthony Marakis Date: Fri, 18 Aug 2017 23:49:39 +0300 Subject: [PATCH 069/251] add trie --- pygorithm/data_structures/trie.py | 104 ++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 pygorithm/data_structures/trie.py diff --git a/pygorithm/data_structures/trie.py b/pygorithm/data_structures/trie.py new file mode 100644 index 0000000..90dde4a --- /dev/null +++ b/pygorithm/data_structures/trie.py @@ -0,0 +1,104 @@ +class Node: + def __init__(self, v, p=None, w=False): + self.word = w #If the node represents the end of a word or not + self.parent = p + self.value = v + self.children = {} + + +class Trie: + def __init__(self): + self.root = Node('') #The root of the trie is always empty + + def Insert(self, word): + """ + Insert word in the trie. Starting from the root, move down the trie + following the path of characters in the word. If the nodes for the word + characters end, add them. When the last char is added, mark it as a + word-ending node. + """ + l = len(word) + curr = self.root + for i, c in enumerate(word): + last = False + if(i == l-1): + #The last char of the word + last = True + + if(c not in curr.children): + curr.children[c] = Node(c, curr, last) + elif(last): + #c already exists, but as it is the last char of word, + #it should now be flagged as a word in the trie. + curr.children[c].word = True + + curr = curr.children[c] + + def Search(self, word): + """ + Searches for given word in trie. We want to find the last node for the + word. If we can't, then it means the word is not in the trie. + """ + if self.FindFinalNode(word): + return True + else: + return False + + def FindWords(self, prefix): + """ + Find all words with the given prefix + """ + v = self.FindFinalNode(prefix) + wList = self.BuildWordList(v, prefix) + if(v and v.word): + #v exists and the prefix is itself a word; add it to the list. + wList.append(prefix) + + return wList + + def FindFinalNode(self, word): + """ + Returns the last node in given word. The process goes like this: + Start from the root. For every char in word, go down one level. + If we can't go down a level, then the word doesn't exist. + If we do, and the current char is the last char of the word and + the node we are currently at is a word, then we have found the given + word. + """ + curr = self.root + l = len(word) + + for i, c in enumerate(word): + if(c not in curr.children): + #There is no prefix of cWord + c + return None + + if(i == l-1): + #Last char of word + return curr.children[c] + + curr = curr.children[c] + + return None + + def BuildWordList(self, v, cWord): + """ + Recursively builds the list of words. + * v: Node to check + * cWord : The word built up to v + """ + if(not v): + return None + + wList = [] + for i, k in v.children.items(): + tempWord = cWord + i + + if(k.word): + #If the iterated prefix is a word, add it to the list + wList.append(tempWord) + + #The list of words under tWord + wList.extend(self.BuildWordList(k, tempWord)) + + return wList From cb19380e63370de018afca3e23216a3956fb36fd Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 19 Aug 2017 06:25:15 +0530 Subject: [PATCH 070/251] Made code PEP8 compliant --- pygorithm/data_structures/__init__.py | 5 +++-- pygorithm/data_structures/trie.py | 25 +++++++++++++++---------- pygorithm/string/palindrome.py | 4 ++-- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/pygorithm/data_structures/__init__.py b/pygorithm/data_structures/__init__.py index e43c671..d40e741 100644 --- a/pygorithm/data_structures/__init__.py +++ b/pygorithm/data_structures/__init__.py @@ -14,5 +14,6 @@ 'linked_list', 'queue', 'stack', - 'tree' -] \ No newline at end of file + 'tree', + 'trie' +] diff --git a/pygorithm/data_structures/trie.py b/pygorithm/data_structures/trie.py index 90dde4a..5637cc5 100644 --- a/pygorithm/data_structures/trie.py +++ b/pygorithm/data_structures/trie.py @@ -1,3 +1,8 @@ +''' +Node class to create a node +for trie +''' + class Node: def __init__(self, v, p=None, w=False): self.word = w #If the node represents the end of a word or not @@ -10,9 +15,9 @@ class Trie: def __init__(self): self.root = Node('') #The root of the trie is always empty - def Insert(self, word): + def insert(self, word): """ - Insert word in the trie. Starting from the root, move down the trie + Inserts a word in the trie. Starting from the root, move down the trie following the path of characters in the word. If the nodes for the word characters end, add them. When the last char is added, mark it as a word-ending node. @@ -34,29 +39,29 @@ def Insert(self, word): curr = curr.children[c] - def Search(self, word): + def search(self, word): """ Searches for given word in trie. We want to find the last node for the word. If we can't, then it means the word is not in the trie. """ - if self.FindFinalNode(word): + if self.find_final_node(word): return True else: return False - def FindWords(self, prefix): + def find_words(self, prefix): """ Find all words with the given prefix """ - v = self.FindFinalNode(prefix) - wList = self.BuildWordList(v, prefix) + v = self.find_final_node(prefix) + wList = self.build_word_list(v, prefix) if(v and v.word): #v exists and the prefix is itself a word; add it to the list. wList.append(prefix) return wList - def FindFinalNode(self, word): + def find_final_node(self, word): """ Returns the last node in given word. The process goes like this: Start from the root. For every char in word, go down one level. @@ -81,7 +86,7 @@ def FindFinalNode(self, word): return None - def BuildWordList(self, v, cWord): + def build_word_list(self, v, cWord): """ Recursively builds the list of words. * v: Node to check @@ -99,6 +104,6 @@ def BuildWordList(self, v, cWord): wList.append(tempWord) #The list of words under tWord - wList.extend(self.BuildWordList(k, tempWord)) + wList.extend(self.build_word_list(k, tempWord)) return wList diff --git a/pygorithm/string/palindrome.py b/pygorithm/string/palindrome.py index 86de897..d551576 100644 --- a/pygorithm/string/palindrome.py +++ b/pygorithm/string/palindrome.py @@ -8,11 +8,11 @@ def is_palindrome(string): """ Checks the string for palindrome - + :param string: string to check :return: true if string is a palindrome false if not """ - if string is string[::-1]: + if string == string[::-1]: return True return False From 6376292fd599f150d9721f7e6bf13ba3db895c5c Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 19 Aug 2017 06:26:17 +0530 Subject: [PATCH 071/251] Updated DOCS --- docs/Data_Structure.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 285b27b..2563bb7 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -74,6 +74,7 @@ Features >>> from pygorithm.data_structures import graph >>> help(graph) + Stack ----- @@ -84,6 +85,13 @@ Stack .. autoclass:: Stack :members: +.. automodule:: pygorithm.data_structures.stack + + Infix to Postfix + ---------------- + .. autoclass:: InfixToPostfix + :members: + Queue ----- @@ -202,3 +210,13 @@ Heap ----- .. autoclass:: Heap :members: + +Trie +---- + +.. automodule:: pygorithm.data_structures.trie + + Trie + ----- + .. autoclass:: Trie + :members: From 4abadbbaeee7f66d2b1cff211a4a3e409eee8650 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 19 Aug 2017 06:26:37 +0530 Subject: [PATCH 072/251] Updated tests for data structures --- tests/test_data_structure.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 0bf6efc..ed14eac 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -241,18 +241,18 @@ def test_heap(self): class TestTrie(unittest.TestCase): def test_stack(self): myTrie = trie.Trie() - myTrie.Insert('the') - myTrie.Insert('turtle') - myTrie.Insert('thesaurus') - myTrie.Insert('chocolate') - myTrie.Insert('flying') - - self.assertEqual(myTrie.FindWords('th'), ['the', 'thesaurus']) - self.assertEqual(myTrie.FindWords('e'), None) - - self.assertEqual(myTrie.Search('chocolate'), True) - self.assertEqual(myTrie.Search('flying'), True) - self.assertEqual(myTrie.Search('walking'), False) + myTrie.insert('the') + myTrie.insert('turtle') + myTrie.insert('thesaurus') + myTrie.insert('chocolate') + myTrie.insert('flying') + + self.assertEqual(myTrie.find_words('th'), ['the', 'thesaurus']) + self.assertEqual(myTrie.find_words('e'), None) + + self.assertEqual(myTrie.search('chocolate'), True) + self.assertEqual(myTrie.search('flying'), True) + self.assertEqual(myTrie.search('walking'), False) if __name__ == '__main__': From 80c230b82197627bd6ca6ec5e468c598885c6364 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 19 Aug 2017 06:27:01 +0530 Subject: [PATCH 073/251] Added tests for string algorithms --- tests/test_string.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/test_string.py diff --git a/tests/test_string.py b/tests/test_string.py new file mode 100644 index 0000000..db7bd0f --- /dev/null +++ b/tests/test_string.py @@ -0,0 +1,29 @@ +import unittest + +from pygorithm.string import ( + anagram, + isogram, + pangram, + palindrome) + +class TestAnagram(unittest.TestCase): + def test_anagram(self): + self.assertEqual(anagram.is_anagram('ant', ['tan', 'stand', 'at']), ['tan']) + +class TestPangram(unittest.TestCase): + def test_pangram(self): + self.assertTrue(pangram.is_pangram('the quick brown fox jumps over the lazy dog')) + self.assertFalse(pangram.is_pangram('omkar')) + +class TestIsogram(unittest.TestCase): + def test_isogram(self): + self.assertTrue(isogram.is_isogram('isogram')) + self.assertFalse(isogram.is_isogram('eleven')) + +class TestPalindrome(unittest.TestCase): + def test_palindrome(self): + self.assertTrue(palindrome.is_palindrome('madam')) + self.assertFalse(palindrome.is_palindrome('eleven')) + +if __name__ == '__main__': + unittest.main() From adff6d257f8a6f441ebb8f36a715979fb2e2aa94 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 19 Aug 2017 06:29:21 +0530 Subject: [PATCH 074/251] Updated docs --- docs/Data_Structure.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 2563bb7..d1c391d 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -82,6 +82,7 @@ Stack Stack ----- + .. autoclass:: Stack :members: From 9bc037c729c77f7bccdeeed5921ffcfb23de9563 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 19 Aug 2017 07:07:25 +0530 Subject: [PATCH 075/251] Updated Docs for Data STructures --- docs/Data_Structure.rst | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index d1c391d..8daa7b5 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -1,4 +1,3 @@ -=============== Data Structures =============== @@ -86,8 +85,6 @@ Stack .. autoclass:: Stack :members: -.. automodule:: pygorithm.data_structures.stack - Infix to Postfix ---------------- .. autoclass:: InfixToPostfix @@ -103,7 +100,6 @@ Queue .. autoclass:: Queue :members: -.. automodule:: pygorithm.data_structures.queue Deque ----- @@ -121,19 +117,17 @@ Linked Lists .. autoclass:: Node :members: -.. automodule:: pygorithm.data_structures.linked_list Singly Linked List ------------------ .. autoclass:: SinglyLinkedList :members: -.. automodule:: pygorithm.data_structures.linked_list - Doubly Linked List - ------------------ - .. autoclass:: DoublyLinkedList - :members: + Doubly Linked List + ------------------ + .. autoclass:: DoublyLinkedList + :members: Tree ---- @@ -145,14 +139,12 @@ Tree .. autoclass:: Node :members: -.. automodule:: pygorithm.data_structures.tree Binary Tree ----------- .. autoclass:: BinaryTree :members: -.. automodule:: pygorithm.data_structures.tree Binary Search Tree Node ----------------------- @@ -174,28 +166,24 @@ Graph .. autoclass:: Graph :members: -.. automodule:: pygorithm.data_structures.graph Weighted Graph -------------- .. autoclass:: WeightedGraph :members: -.. automodule:: pygorithm.data_structures.graph Topological Sort ---------------- .. autoclass:: TopologicalSort :members: -.. automodule:: pygorithm.data_structures.graph Check Cycle in Directed Graph ----------------------------- .. autoclass:: CheckCycleDirectedGraph :members: -.. automodule:: pygorithm.data_structures.graph Check Cycle in Undirected Graph ------------------------------- From c988139178662f21e16d9cb6e029132e2d05354c Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 19 Aug 2017 07:11:27 +0530 Subject: [PATCH 076/251] Bug fixes --- pygorithm/__init__.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 78918ac..55f7bf3 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -28,12 +28,6 @@ Ian 'IanDoarn' Doarn """ -from pygorithm import data_structures -from pygorithm import fibonacci -from pygorithm import math -from pygorithm import searching -from pygorithm import sorting -from pygorithm import string __version__ = '1.0.0' __author__ = 'Omkar Pathak' From 47d31876e15a42b951a561a39783495b50c4b156 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sat, 19 Aug 2017 09:22:17 -0700 Subject: [PATCH 077/251] Test add_edge in CheckCycleUndirectedGraph This test is failing and is showing why the current implementation for CheckCycleUndirectedGraph is not correct. --- tests/test_data_structure.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index ed14eac..5826f86 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -192,6 +192,24 @@ def test_cycle_in_directed_graph(self): myGraph.add_edge(3, 3) self.assertTrue(myGraph.check_cycle()) + + def test_add_edge_in_undirected_graph(self): + myGraph = graph.CheckCycleUndirectedGraph() + myGraph.add_edge(0, 1) + myGraph.add_edge(0, 2) + + setFrom0 = myGraph.graph[0] + setFrom1 = myGraph.graph[1] + setFrom2 = myGraph.graph[2] + + self.assertIsNotNone(setFrom0) + self.assertIsNotNone(setFrom1) + self.assertIsNotNone(setFrom2) + + self.assertIn(1, setFrom0) + self.assertIn(0, setFrom1) + self.assertIn(2, setFrom0) + self.assertIn(0, setFrom2) def test_cycle_in_undirected_graph(self): myGraph = graph.CheckCycleUndirectedGraph() From ccfcf84fe4dd55a20baa35d7b8d12c9af6acb9cb Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sat, 19 Aug 2017 09:28:30 -0700 Subject: [PATCH 078/251] Fix failing data structure tests Fix the failing add_edge test for the graph by checking if the graph contains the to_vertex and the from_vertex independently. --- pygorithm/data_structures/graph.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index 66bb534..3d4a322 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -254,12 +254,15 @@ def add_edge(self, from_vertex, to_vertex): for adding the edge between two vertices """ # check if vertex is already present, - if from_vertex in self.graph.keys() and to_vertex in self.graph.keys(): + if from_vertex in self.graph.keys(): self.graph[from_vertex].append(to_vertex) - self.graph[to_vertex].append(from_vertex) else: - # else make a new vertex + # otherwise add it to the graph self.graph[from_vertex] = [to_vertex] + + if to_vertex in self.graph.keys(): + self.graph[to_vertex].append(from_vertex) + else: self.graph[to_vertex] = [from_vertex] def check_cycle(self): From 93484902c2fbcf44cc61ecbd6b3863572319f979 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sat, 19 Aug 2017 11:59:23 -0700 Subject: [PATCH 079/251] Add dijkstra pathfinding algorithm This adds one test and documentation regarding dijkstras pathfinding algorithm. I'm not sure exactly how the documentation is generated, but this adheres pretty strictly to the pattern set in the other documentation so it should work. This adds weighted undirected graphs to data structures as well, which is a good standard implementation for testing the pathfinding algorithms. * CONTRIBUTORS.md - Add myself * docs/Data_Structure.rst - Add + docs/Pathing.rst - Add documentation for the new pathing/ submodule * docs/index.rst - Add Pathing to the index * pygorithm/__init__.py - Add myself to the contributors * pygorithm/data_structures.py - Add WeightedUndirectedGraph and very minor indentation changes + pygorithm/pathing/__init__.py - In the same format as the others + pygorithm/pathing/dijkstra.py - The simplest of pathfinding algorithms * tests/test_data_structure.py - Add tests for the new graph type + tests/test_pathing.py - Test the example shown in the documentation --- CONTIRBUTORS.md | 3 +- docs/Data_Structure.rst | 7 ++ docs/Pathing.rst | 76 ++++++++++++++++++ docs/index.rst | 1 + pygorithm/__init__.py | 7 +- pygorithm/data_structures/graph.py | 121 +++++++++++++++++++++++++++-- pygorithm/pathing/__init__.py | 8 ++ pygorithm/pathing/dijkstra.py | 61 +++++++++++++++ tests/test_data_structure.py | 88 ++++++++++++++++++++- tests/test_pathing.py | 41 ++++++++++ 10 files changed, 403 insertions(+), 10 deletions(-) create mode 100644 docs/Pathing.rst create mode 100644 pygorithm/pathing/__init__.py create mode 100644 pygorithm/pathing/dijkstra.py create mode 100644 tests/test_pathing.py diff --git a/CONTIRBUTORS.md b/CONTIRBUTORS.md index b906e05..1a8366d 100644 --- a/CONTIRBUTORS.md +++ b/CONTIRBUTORS.md @@ -12,4 +12,5 @@ - [dstark85](https://github.com/dstark85) - Songzhuozhuo '[souo](https://github.com/souo)' - Emil '[Skeen](https://github.com/Skeen)' Madsen - - Ian '[IanDoarn](https://github.com/IanDoarn)' Doarn \ No newline at end of file + - Ian '[IanDoarn](https://github.com/IanDoarn)' Doarn + - Timothy '[Tjstretchalot](https://github.com/Tjstretchalot)' Moore \ No newline at end of file diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 8daa7b5..1e0a5cf 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -172,6 +172,12 @@ Graph .. autoclass:: WeightedGraph :members: + + Weighted Undirected Graph + ------------------------- + .. autoclass:: WeightedUndirectedGraph + :members: + Topological Sort ---------------- @@ -190,6 +196,7 @@ Graph .. autoclass:: CheckCycleUndirectedGraph :members: + Heap ---- diff --git a/docs/Pathing.rst b/docs/Pathing.rst new file mode 100644 index 0000000..d445b36 --- /dev/null +++ b/docs/Pathing.rst @@ -0,0 +1,76 @@ +==== +Pathing +==== + +Some pathfinding algorithms and their implementations + +Quick Start Guide +----------------- + +.. code-block:: python + + # import the required pathing algorithm + from pygorithm.pathing import dijkstra + + # import a graph data structure + from pygorithm.data_structures import graph + + # initialize the graph with nodes from (0, 0) to (4, 4) + # with weight corresponding to distance (orthogonal + # is 1, diagonal is sqrt(2)) + my_graph = graph.WeightedUndirectedGraph() + my_graph.gridify(5, 1) + + # make the graph more interesting by removing along the + # x=2 column except for (2,4) + my_graph.remove_edge((2, 0)) + my_graph.remove_edge((2, 1)) + my_graph.remove_edge((2, 2)) + my_graph.remove_edge((2, 3)) + + # calculate a path + my_path = dijkstra.find_path(my_graph, (0, 0), (3, 0)) + + # print path + print(' -> '.join(my_path)) + # (0, 0) -> (1, 1) -> (0, 2) -> (1, 3) -> (2, 4) -> (3, 3) -> (3, 2) -> (3, 1) -> (3, 0) + +Features +-------- + +* Algorithms available: + - Dijkstra (dijkstra) + + +* To see all the available functions in a module there is a `modules()` function available. For example, + +.. code:: python + + >>> from pygorithm.pathfinding import modules + >>> modules.modules() + ['dijkstra'] + +* Get the code used for any of the algorithm + +.. code-block:: python + + from pygorithm.pathing import dijkstra + + # for printing the source code of Dijkstra object + print(dijkstra.get_code()) + +Dijkstra +--- + +* Functions and their uses + +.. function:: dijkstra.find_path(pygorithm.data_structures.WeightedUndirectedGraph, vertex, vertex) + +- **pygorithm.data_structures.WeightedUndirectedGraph** : acts like an object with `graph` (see WeightedUndirectedGraph) +- **vertex** : any hashable type for the start of the path +- **vertex** : any hashable type for the end of the path +- **Return Value** : returns a `List` of vertexes (of the same type as the graph) starting with from and going to to. This algorithm does *not* respect weights. + +.. function:: dijkstra.get_code() + +- **Return Value** : returns the code for the ``Dijkstra`` object \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 606a5db..a23e7a1 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -27,6 +27,7 @@ Quick Links Data_Structure Fibonacci Math + Pathing Quick Start Guide ----------------- diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 55f7bf3..acba95e 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -26,6 +26,7 @@ Songzhuozhuo 'souo' Emil 'Skeen' Madsen Ian 'IanDoarn' Doarn +Timothy 'Tjsretchalot' Moore """ @@ -51,7 +52,8 @@ "dstark85", "Songzhuozhuo 'souo'", "Emil 'Skeen' Madsen", - "Ian 'IanDoarn' Doarn" + "Ian 'IanDoarn' Doarn", + "Timothy 'Tjstretchalot' Moore" ] __all__ = [ @@ -60,5 +62,6 @@ 'math', 'searching', 'sorting', - 'string' + 'string', + 'pathing', ] diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index 3d4a322..e477c66 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -4,6 +4,7 @@ """ from collections import defaultdict import inspect +import math class Graph(object): @@ -14,14 +15,14 @@ class Graph(object): def __init__(self): self.graph = defaultdict(list) self.count = 0 - + def print_graph(self): """ Prints the contents of the graph """ for i in self.graph: print(i, '->', ' -> '.join([str(j) for j in self.graph[i]])) - + def add_edge(self, from_vertex, to_vertex): """ Adds an edge in the graph @@ -121,7 +122,117 @@ def kruskal_code(cls): """ return inspect.getsource(cls.kruskal_mst) - +class WeightedUndirectedGraph(object): + """WeightedUndirectedGraph object + A graph with a numerical value (weight) on edges, which + is the same for both directions in an undirected graph. + """ + + def __init__(self): + self.graph = {} + self.weights = {} + + def add_edge(self, u, v, weight): + """ + Adds the specified edge to this graph. If the edge already exists, + this will only modify the weight (not create duplicates). + :param u: from vertex + :param v: to vertex + :param weight: weight of the edge - type : numeric + """ + + changing_weight = (u, v) in self.weights.keys() + + self.weights[(u, v)] = weight + self.weights[(v, u)] = weight + + if changing_weight: + return + + if u in self.graph.keys(): + self.graph[u].append(v) + else: + self.graph[u] = [v] + + if v in self.graph.keys(): + self.graph[v].append(u) + else: + self.graph[v] = [u] + + def get_edge_weight(self, u, v): + """ + Gets the weight between u and v if such an edge + exists, or None if it does not. + :param u: one edge + :param v: the other edge + :return: numeric or None + """ + return self.weights.get((u, v), None) + + def remove_edge(self, edge, other_edge_or_none=None): + """ + Removes the specified edge from the grid entirely or, + if specified, the connection with one other edge. + Behavior is undefined if the connection does not + exist. + :param edge: the edge to remove + :param other_edge_or_none: an edge connected to edge or none + """ + + if other_edge_or_none is not None: + del self.weights[(edge, other_edge_or_none)] + del self.weights[(other_edge_or_none, edge)] + + edge_list = self.graph[edge] + other_edge_list = self.graph[other_edge_or_none] + + if len(edge_list) == 1: + del self.graph[edge] + else: + self.graph[edge].remove(other_edge_or_none) + + if len(other_edge_list) == 1: + del self.graph[other_edge_or_none] + else: + self.graph[other_edge_or_none].remove(edge) + else: + edge_list = self.graph[edge] + del self.graph[edge] + for other_edge in edge_list: + del self.weights[(edge, other_edge)] + del self.weights[(other_edge, edge)] + + other_edge_list = self.graph[other_edge] + if len(other_edge_list) == 1: + del self.graph[other_edge] + else: + other_edge_list.remove(edge) + + + def gridify(self, size, weight): + """ + Constructs connections from a square grid starting at (0, 0) + until (size-1, size-1) with connections between adjacent and + diagonal nodes. Diagonal nodes have a weight of weight*sqrt(2) + :param size: the size of the square grid to construct - type : integer + :param weight: the weight between orthogonal nodes. - type: numeric + :return: None + """ + rt2 = math.sqrt(2) + acceptable_offsets = [ + (-1, -1, rt2), (-1, 0, 1), (-1, 1, rt2), + (0, -1, 1), (0, 1, 1), + (1, -1, rt2), (1, 0, 1), (1, 1, rt2) + ] + + for x in range(0, size): + for y in range(0, size): + for offset in acceptable_offsets: + nx = x + offset[0] + ny = y + offset[1] + if nx >= 0 and ny >= 0 and nx < size and ny < size: + self.add_edge((x, y), (nx, ny), weight * offset[2]) + class TopologicalSort(Graph): def topological_sort(self): @@ -241,14 +352,14 @@ class CheckCycleUndirectedGraph(object): def __init__(self): self.graph = {} self.count = 0 - + def print_graph(self): """ for printing the contents of the graph """ for i in self.graph: print(i, '->', ' -> '.join([str(j) for j in self.graph[i]])) - + def add_edge(self, from_vertex, to_vertex): """ for adding the edge between two vertices diff --git a/pygorithm/pathing/__init__.py b/pygorithm/pathing/__init__.py new file mode 100644 index 0000000..7018ef6 --- /dev/null +++ b/pygorithm/pathing/__init__.py @@ -0,0 +1,8 @@ +""" +Collection of pathfinding examples +""" +from . import dijkstra + +__all__ = [ + 'dijkstra' +] \ No newline at end of file diff --git a/pygorithm/pathing/dijkstra.py b/pygorithm/pathing/dijkstra.py new file mode 100644 index 0000000..fc5808b --- /dev/null +++ b/pygorithm/pathing/dijkstra.py @@ -0,0 +1,61 @@ +import heapq +class Dijkstra(object): + """Dijkstra object + Finds the optimal path between two nodes on + a graph.""" + + def __init__(self): + pass + + def reverse_path(self, node): + result = [] + while node is not None: + result.insert(0, node['vertex']) + node = node['parent'] + return result + + def find_path(self, graph, start, end): + """ + Calculates the optimal path from start to end + on the graph. Weights are ignored. + + :param graph: object contains `graphs` as per pygorithm.data_structures.WeightedUndirectedGraph + weights are ignored. + :param start: the start vertex (which is the same type of the verticies in the graph) + :param end: the end vertex (which is the same type of the vertices in the graph) + :return: a list starting with `start` and ending with `end`, or None if no path is possible. + """ + + open = [] + closed = set() + + # the first element in the tuple is the distance from the source. This is used as the primary + # key for sorting. The second element in the tuple is just a counter and is used to avoid having + # to hash the dictionary when the distance from the source is not unique. + + counter = 0 + heapq.heappush(open, (0, counter, { 'vertex': start, 'parent': None })) + counter += 1 + + while len(open) > 0: + current = heapq.heappop(open) + closed.update(current[2]['vertex']) + + if current[2]['vertex'] == end: + return self.reverse_path(current[2]) + + neighbors = graph.graph[current[2]['vertex']] + for neighbor in neighbors: + if neighbor not in closed: + heapq.heappush(open, (current[0] + 1, counter, { 'vertex': neighbor, 'parent': current[2] })) + counter += 1 + + + return None + + @staticmethod + def get_code(self): + """ + returns the code for the current class + """ + return inspect.getsource(Dijkstra) \ No newline at end of file diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 5826f86..0ef40dc 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -18,7 +18,7 @@ def test_stack(self): myStack.push(10) myStack.push(12) myStack.push(3) - + self.assertEqual(myStack.pop(), 3) self.assertEqual(myStack.peek(), 12) self.assertFalse(myStack.is_empty()) @@ -222,7 +222,91 @@ def test_cycle_in_undirected_graph(self): self.assertTrue(myGraph.check_cycle()) - + def test_creating_weighted_undirected_graph(self): + myGraph = graph.WeightedUndirectedGraph() + myGraph.add_edge(0, 1, 1) + + self.assertIn(0, myGraph.graph[1]) + self.assertIn(1, myGraph.graph[0]) + self.assertEqual(1, myGraph.get_edge_weight(0, 1)) + self.assertEqual(1, myGraph.get_edge_weight(1, 0)) + + myGraph.add_edge(0, 2, 3) + + self.assertIn(0, myGraph.graph[2]) + self.assertIn(0, myGraph.graph[1]) + self.assertIn(1, myGraph.graph[0]) + self.assertIn(2, myGraph.graph[0]) + self.assertEqual(1, myGraph.get_edge_weight(0, 1)) + self.assertEqual(1, myGraph.get_edge_weight(1, 0)) + self.assertEqual(3, myGraph.get_edge_weight(0, 2)) + self.assertEqual(3, myGraph.get_edge_weight(2, 0)) + + myGraph.add_edge(2, 3, 7) + self.assertIn(0, myGraph.graph[2]) + self.assertIn(3, myGraph.graph[2]) + self.assertIn(2, myGraph.graph[3]) + self.assertNotIn(0, myGraph.graph[3]) + self.assertNotIn(3, myGraph.graph[0]) + self.assertEqual(7, myGraph.get_edge_weight(2, 3)) + self.assertIsNone(myGraph.get_edge_weight(0, 3)) + + def test_removing_from_weighted_undirected_graph(self): + myGraph = graph.WeightedUndirectedGraph() + myGraph.add_edge(0, 1, 1) + myGraph.add_edge(0, 2, 1) + myGraph.add_edge(0, 3, 1) + myGraph.add_edge(0, 4, 1) + myGraph.add_edge(4, 5, 1) + myGraph.add_edge(2, 6, 1) + + self.assertEqual(1, myGraph.get_edge_weight(0, 1)) + self.assertEqual(1, myGraph.get_edge_weight(0, 2)) + self.assertEqual(1, myGraph.get_edge_weight(0, 3)) + self.assertEqual(1, myGraph.get_edge_weight(0, 4)) + self.assertEqual(1, myGraph.get_edge_weight(4, 5)) + self.assertEqual(1, myGraph.get_edge_weight(2, 6)) + + myGraph.remove_edge(0, 1) + + self.assertIsNone(myGraph.get_edge_weight(0, 1)) + self.assertEqual(1, myGraph.get_edge_weight(0, 2)) + self.assertEqual(1, myGraph.get_edge_weight(0, 3)) + self.assertEqual(1, myGraph.get_edge_weight(0, 4)) + self.assertEqual(1, myGraph.get_edge_weight(4, 5)) + self.assertEqual(1, myGraph.get_edge_weight(2, 6)) + + myGraph.remove_edge(0, 2) + + self.assertIsNone(myGraph.get_edge_weight(0, 1)) + self.assertIsNone(myGraph.get_edge_weight(0, 2)) + self.assertEqual(1, myGraph.get_edge_weight(0, 3)) + self.assertEqual(1, myGraph.get_edge_weight(0, 4)) + self.assertEqual(1, myGraph.get_edge_weight(4, 5)) + self.assertEqual(1, myGraph.get_edge_weight(2, 6)) + + myGraph.remove_edge(0) + + self.assertIsNone(myGraph.get_edge_weight(0, 1)) + self.assertIsNone(myGraph.get_edge_weight(0, 2)) + self.assertIsNone(myGraph.get_edge_weight(0, 3)) + self.assertIsNone(myGraph.get_edge_weight(0, 4)) + self.assertEqual(1, myGraph.get_edge_weight(4, 5)) + self.assertEqual(1, myGraph.get_edge_weight(2, 6)) + + def test_gridify_weighted_undirected_graph(self): + rt2 = 1.4142135623730951 + myGraph = graph.WeightedUndirectedGraph() + myGraph.gridify(4, 1) + + self.assertEqual(1, myGraph.get_edge_weight((0, 0), (0, 1))) + self.assertAlmostEqual(rt2, myGraph.get_edge_weight((0, 0), (1, 1))) + + self.assertIsNone(myGraph.get_edge_weight((0, 0), (2, 0))) + self.assertEqual(1, myGraph.get_edge_weight((2, 3), (3, 3))) + self.assertIsNone(myGraph.get_edge_weight((3, 3), (3, 4))) + + class TestHeap(unittest.TestCase): def test_heap(self): myHeap = heap.Heap() diff --git a/tests/test_pathing.py b/tests/test_pathing.py new file mode 100644 index 0000000..e35290a --- /dev/null +++ b/tests/test_pathing.py @@ -0,0 +1,41 @@ +import unittest + +from pygorithm.pathing import (dijkstra) + +class TestDijkstra(unittest.TestCase): + def test_exists(self): + pather = dijkstra.Dijkstra() + + self.assertIsNotNone(pather) + self.assertIsNotNone(pather.find_path) + self.assertIsNotNone(pather.get_code) + + def test_find_path_package_example(self): + # import the required pathing + from pygorithm.pathing import dijkstra + + # import a graph data structure + from pygorithm.data_structures import graph + + # initialize the graph with nodes from (0, 0) to (4, 4) + # with weight corresponding to distance (orthogonal + # is 1, diagonal is sqrt(2)) + my_graph = graph.WeightedUndirectedGraph() + my_graph.gridify(5, 1) + + # make the graph more interesting by removing along the + # x=2 column except for (2,4) + my_graph.remove_edge((2, 0)) + my_graph.remove_edge((2, 1)) + my_graph.remove_edge((2, 2)) + my_graph.remove_edge((2, 3)) + + # create a pathfinder + my_pathfinder = dijkstra.Dijkstra() + + # calculate a path + my_path = my_pathfinder.find_path(my_graph, (0, 0), (3, 0)) + + # check path: + expected_path = [ (0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 3), (3, 2), (3, 1), (3, 0) ] + self.assertListEqual(expected_path, my_path) \ No newline at end of file From 73d8dff6f8480edfb00fe91604235a9ca711c545 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sat, 19 Aug 2017 12:03:07 -0700 Subject: [PATCH 080/251] Very minor documentation fix --- docs/Pathing.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Pathing.rst b/docs/Pathing.rst index d445b36..974d436 100644 --- a/docs/Pathing.rst +++ b/docs/Pathing.rst @@ -57,7 +57,7 @@ Features from pygorithm.pathing import dijkstra # for printing the source code of Dijkstra object - print(dijkstra.get_code()) + print(dijkstra.Dijikstra.get_code()) Dijkstra --- From c290efeab3053944b5b7b6e426ad4c0b74ec3137 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 20 Aug 2017 06:54:17 +0530 Subject: [PATCH 081/251] Updated index.rst --- docs/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.rst b/docs/index.rst index a23e7a1..897dd33 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -27,7 +27,7 @@ Quick Links Data_Structure Fibonacci Math - Pathing + Pathfinding Quick Start Guide ----------------- From 6e48862f7e7fa6741e2da8e48a9bd4d454684802 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 20 Aug 2017 06:54:40 +0530 Subject: [PATCH 082/251] Renamed pathing to pathfinding.rst --- docs/Pathfinding.rst | 76 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 docs/Pathfinding.rst diff --git a/docs/Pathfinding.rst b/docs/Pathfinding.rst new file mode 100644 index 0000000..cb31bcc --- /dev/null +++ b/docs/Pathfinding.rst @@ -0,0 +1,76 @@ +======================= +Path Finding Algorithms +======================= + +Some pathfinding algorithms and their implementations + +Quick Start Guide +----------------- + +.. code-block:: python + + # import the required pathing algorithm + from pygorithm.pathing import dijkstra + + # import a graph data structure + from pygorithm.data_structures import graph + + # initialize the graph with nodes from (0, 0) to (4, 4) + # with weight corresponding to distance (orthogonal + # is 1, diagonal is sqrt(2)) + my_graph = graph.WeightedUndirectedGraph() + my_graph.gridify(5, 1) + + # make the graph more interesting by removing along the + # x=2 column except for (2,4) + my_graph.remove_edge((2, 0)) + my_graph.remove_edge((2, 1)) + my_graph.remove_edge((2, 2)) + my_graph.remove_edge((2, 3)) + + # calculate a path + my_path = dijkstra.find_path(my_graph, (0, 0), (3, 0)) + + # print path + print(' -> '.join(my_path)) + # (0, 0) -> (1, 1) -> (0, 2) -> (1, 3) -> (2, 4) -> (3, 3) -> (3, 2) -> (3, 1) -> (3, 0) + +Features +-------- + +* Algorithms available: + - Dijkstra (dijkstra) + + +* To see all the available functions in a module there is a `modules()` function available. For example, + +.. code:: python + + >>> from pygorithm.pathfinding import modules + >>> modules.modules() + ['dijkstra'] + +* Get the code used for any of the algorithm + +.. code-block:: python + + from pygorithm.pathing import dijkstra + + # for printing the source code of Dijkstra object + print(dijkstra.Dijikstra.get_code()) + +Dijkstra +-------- + +* Functions and their uses + +.. function:: dijkstra.find_path(pygorithm.data_structures.WeightedUndirectedGraph, vertex, vertex) + +- **pygorithm.data_structures.WeightedUndirectedGraph** : acts like an object with `graph` (see WeightedUndirectedGraph) +- **vertex** : any hashable type for the start of the path +- **vertex** : any hashable type for the end of the path +- **Return Value** : returns a `List` of vertexes (of the same type as the graph) starting with from and going to to. This algorithm does *not* respect weights. + +.. function:: dijkstra.get_code() + +- **Return Value** : returns the code for the ``Dijkstra`` object From 84b6600f2809a75ead9caffd462df59d4cfad7a9 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 20 Aug 2017 06:55:13 +0530 Subject: [PATCH 083/251] Renamed directory Pathing to Pathfinding --- pygorithm/pathfinding/__init__.py | 8 ++++ pygorithm/pathfinding/dijkstra.py | 61 +++++++++++++++++++++++++++++++ pygorithm/pathfinding/modules.py | 15 ++++++++ 3 files changed, 84 insertions(+) create mode 100644 pygorithm/pathfinding/__init__.py create mode 100644 pygorithm/pathfinding/dijkstra.py create mode 100644 pygorithm/pathfinding/modules.py diff --git a/pygorithm/pathfinding/__init__.py b/pygorithm/pathfinding/__init__.py new file mode 100644 index 0000000..7018ef6 --- /dev/null +++ b/pygorithm/pathfinding/__init__.py @@ -0,0 +1,8 @@ +""" +Collection of pathfinding examples +""" +from . import dijkstra + +__all__ = [ + 'dijkstra' +] \ No newline at end of file diff --git a/pygorithm/pathfinding/dijkstra.py b/pygorithm/pathfinding/dijkstra.py new file mode 100644 index 0000000..fc5808b --- /dev/null +++ b/pygorithm/pathfinding/dijkstra.py @@ -0,0 +1,61 @@ +import heapq +class Dijkstra(object): + """Dijkstra object + Finds the optimal path between two nodes on + a graph.""" + + def __init__(self): + pass + + def reverse_path(self, node): + result = [] + while node is not None: + result.insert(0, node['vertex']) + node = node['parent'] + return result + + def find_path(self, graph, start, end): + """ + Calculates the optimal path from start to end + on the graph. Weights are ignored. + + :param graph: object contains `graphs` as per pygorithm.data_structures.WeightedUndirectedGraph + weights are ignored. + :param start: the start vertex (which is the same type of the verticies in the graph) + :param end: the end vertex (which is the same type of the vertices in the graph) + :return: a list starting with `start` and ending with `end`, or None if no path is possible. + """ + + open = [] + closed = set() + + # the first element in the tuple is the distance from the source. This is used as the primary + # key for sorting. The second element in the tuple is just a counter and is used to avoid having + # to hash the dictionary when the distance from the source is not unique. + + counter = 0 + heapq.heappush(open, (0, counter, { 'vertex': start, 'parent': None })) + counter += 1 + + while len(open) > 0: + current = heapq.heappop(open) + closed.update(current[2]['vertex']) + + if current[2]['vertex'] == end: + return self.reverse_path(current[2]) + + neighbors = graph.graph[current[2]['vertex']] + for neighbor in neighbors: + if neighbor not in closed: + heapq.heappush(open, (current[0] + 1, counter, { 'vertex': neighbor, 'parent': current[2] })) + counter += 1 + + + return None + + @staticmethod + def get_code(self): + """ + returns the code for the current class + """ + return inspect.getsource(Dijkstra) \ No newline at end of file diff --git a/pygorithm/pathfinding/modules.py b/pygorithm/pathfinding/modules.py new file mode 100644 index 0000000..d99d1ef --- /dev/null +++ b/pygorithm/pathfinding/modules.py @@ -0,0 +1,15 @@ +import pkgutil + + +def modules(): + """ + Find all functions in pygorithm.pathfinding + """ + import pygorithm.pathfinding + package = pygorithm.pathfinding + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules From a6ef9c2cb13a204c5b5586c4b7e2bf5ec558e2aa Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 20 Aug 2017 06:57:11 +0530 Subject: [PATCH 084/251] Deleted __init__.py --- pygorithm/pathing/__init__.py | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 pygorithm/pathing/__init__.py diff --git a/pygorithm/pathing/__init__.py b/pygorithm/pathing/__init__.py deleted file mode 100644 index 7018ef6..0000000 --- a/pygorithm/pathing/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -""" -Collection of pathfinding examples -""" -from . import dijkstra - -__all__ = [ - 'dijkstra' -] \ No newline at end of file From 22b4ae4a7a3ebb07084d94c5cf571ff37032b12f Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 20 Aug 2017 06:57:20 +0530 Subject: [PATCH 085/251] Delete dijkstra.py --- pygorithm/pathing/dijkstra.py | 61 ----------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 pygorithm/pathing/dijkstra.py diff --git a/pygorithm/pathing/dijkstra.py b/pygorithm/pathing/dijkstra.py deleted file mode 100644 index fc5808b..0000000 --- a/pygorithm/pathing/dijkstra.py +++ /dev/null @@ -1,61 +0,0 @@ -import heapq -class Dijkstra(object): - """Dijkstra object - Finds the optimal path between two nodes on - a graph.""" - - def __init__(self): - pass - - def reverse_path(self, node): - result = [] - while node is not None: - result.insert(0, node['vertex']) - node = node['parent'] - return result - - def find_path(self, graph, start, end): - """ - Calculates the optimal path from start to end - on the graph. Weights are ignored. - - :param graph: object contains `graphs` as per pygorithm.data_structures.WeightedUndirectedGraph - weights are ignored. - :param start: the start vertex (which is the same type of the verticies in the graph) - :param end: the end vertex (which is the same type of the vertices in the graph) - :return: a list starting with `start` and ending with `end`, or None if no path is possible. - """ - - open = [] - closed = set() - - # the first element in the tuple is the distance from the source. This is used as the primary - # key for sorting. The second element in the tuple is just a counter and is used to avoid having - # to hash the dictionary when the distance from the source is not unique. - - counter = 0 - heapq.heappush(open, (0, counter, { 'vertex': start, 'parent': None })) - counter += 1 - - while len(open) > 0: - current = heapq.heappop(open) - closed.update(current[2]['vertex']) - - if current[2]['vertex'] == end: - return self.reverse_path(current[2]) - - neighbors = graph.graph[current[2]['vertex']] - for neighbor in neighbors: - if neighbor not in closed: - heapq.heappush(open, (current[0] + 1, counter, { 'vertex': neighbor, 'parent': current[2] })) - counter += 1 - - - return None - - @staticmethod - def get_code(self): - """ - returns the code for the current class - """ - return inspect.getsource(Dijkstra) \ No newline at end of file From 6d52656dddaf362b5b6f71ae70814538b54d0133 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 20 Aug 2017 09:46:18 -0700 Subject: [PATCH 086/251] Add 1-dir A* pathfinding This commit adds one-directional A* pathfinding; it also adds an image to aid with one of the explanations. I wasn't 100% confident on where these types of images should reside. I also noticed this dijkstra pathfinding algorithm rechecks nodes in the open list many times. I left it because dijkstra is mostly just an example algorithm (though you do use similiar algorithms for precomputing paths). I did change it to name the dict so it's slightly easier to read. * docs/Pathfinding.rst - Add astar documentation + imgs/onedirectionalastar_riverexample.png - referenced in comments * pygorithm/pathfinding/__init__.py - add astar + pygorithm/pathfinding/astar.py - add one-directional astar * pygorithm/pathfinding/dijkstra - add comments on reverse_path * tests/test_pathing - add timing tests. This is the same test as before but such a way that it can be reused for all graph-based pathfinding algorithms. This method won't work for smarter algorithms like Theta* because they won't work on these style of graphs (there require additional assumptions like a square or octogonal grid), but the TimedTestCase is reusable. I updated the test to check based on total weight rather than a specific path which is more accurate to what is being tested. This indirectly ensures that there is a way between each node in the path (otherwise get_edge_weight would return None and an exception would be raised). --- docs/Pathfinding.rst | 18 +- imgs/onedirectionalastar_riverexample.png | Bin 0 -> 20337 bytes pygorithm/pathfinding/__init__.py | 4 +- pygorithm/pathfinding/astar.py | 207 ++++++++++++++++++++++ pygorithm/pathfinding/dijkstra.py | 21 ++- tests/test_pathing.py | 58 ++++-- 6 files changed, 281 insertions(+), 27 deletions(-) create mode 100644 imgs/onedirectionalastar_riverexample.png create mode 100644 pygorithm/pathfinding/astar.py diff --git a/docs/Pathfinding.rst b/docs/Pathfinding.rst index cb31bcc..dccf2bc 100644 --- a/docs/Pathfinding.rst +++ b/docs/Pathfinding.rst @@ -40,6 +40,7 @@ Features * Algorithms available: - Dijkstra (dijkstra) + - Unidirectional AStar (astar) * To see all the available functions in a module there is a `modules()` function available. For example, @@ -48,7 +49,7 @@ Features >>> from pygorithm.pathfinding import modules >>> modules.modules() - ['dijkstra'] + ['dijkstra', 'astar'] * Get the code used for any of the algorithm @@ -64,7 +65,7 @@ Dijkstra * Functions and their uses -.. function:: dijkstra.find_path(pygorithm.data_structures.WeightedUndirectedGraph, vertex, vertex) +.. function:: dijkstra.Dijkstra.find_path(pygorithm.data_structures.WeightedUndirectedGraph, vertex, vertex) - **pygorithm.data_structures.WeightedUndirectedGraph** : acts like an object with `graph` (see WeightedUndirectedGraph) - **vertex** : any hashable type for the start of the path @@ -74,3 +75,16 @@ Dijkstra .. function:: dijkstra.get_code() - **Return Value** : returns the code for the ``Dijkstra`` object + +Unidirectional AStar +-------------------- + +* Functions and their uses + +.. function:: astar.OneDirectionalAStar.find_path(pygorithm.data_structures.WeightedUndirectedGraph, vertex, vertex, function) + +- **pygorithm.data_structures.WeightedUndirectedGraph** : acts like an object with `graph` and `get_edge_weight` (see WeightedUndirectedGraph) +- **vertex** : any hashable type for the start of the path +- **vertex** : any hashable type for the end of the path +- **function** : `function(graph, vertex, vertex)` returns numeric - a heuristic function for distance between two vertices +- **Return Value** : returns a `List` of vertexes (of the same type of the graph) starting from from and going to to. This algorithm respects weights, but is only guarranteed to be optimal if the heuristic is admissable. An admissable function will never *overestimate* the cost from one node to another (in other words, it is optimistic). \ No newline at end of file diff --git a/imgs/onedirectionalastar_riverexample.png b/imgs/onedirectionalastar_riverexample.png new file mode 100644 index 0000000000000000000000000000000000000000..52074c130020ab852bb6bc7d6b4f639272aacf3d GIT binary patch literal 20337 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 he=~M>dt{dbfpnicenter->top to the open list because + # (for these weights) it will never be better than base->top. + # + # You would also add the new node (55 + 0) or the destination. + # + # Then you expand the top node (or bottom) on the other side of + # river with a cost of (18 + 12). + # + # You expand the top node on the other side of the river next and find + # one of the neighbors is already on the open list (the destination) + # at a score of (55 + 0), but your cost to get there is (30 + 0). This + # is where you would REPLACE the old path with yourself. + + def __init__(self): + pass + + def reverse_path(self, node): + """ + Walks backward from an end node to the start + node and reconstructs a path. Meant for internal + use. + :param node: dict containing { 'vertex': any hashable, 'parent': dict or None } + :return: a list of vertices ending on the node + """ + result = [] + while node is not None: + result.insert(0, node['vertex']) + node = node['parent'] + return result + + def find_path(self, graph, start, end, heuristic_fn): + """ + Calculates the optimal path from start to end + on the graph. Weights are taken into account. + This implementation is one-directional expanding + from the start to the end. This implementation is + faster than dijkstra based on how much better the + heuristic is than flooding. + + The heuristic must never overestimate the distance + between two nodes (in other words, the heuristic + must be "admissible"). Note however that, in practice, + it is often acceptable to relax this requirement and + get very slightly incorrect paths if: + - The distance between nodes are small + - There are too many nodes for an exhaustive search + to ever be feasible. + - The world is mostly open (ie there are many paths + from the start to the end that are acceptable) + - Execution speed is more important than accuracy. + The best way to do this is to make the heuristic slightly + pessimistic (typically by multiplying by small value such + as 1.1). This will have the algorithm favor finishing its + path rather than finding a better one. This optimization + needs to be tested based on the map. + + :param graph: object contains `graphs` as per pygorithm.data_structures.WeightedUndirectedGraph + and `get_edge_weight` in the same manner. + :param start: the start vertex (which is the same type of the verticies in the graph) + :param end: the end vertex (which is the same type of the vertices in the graph) + :param heuristic_fn: function(graph, start, end) that when given two vertices returns an expected cost to get + to get between the two vertices. + :return: a list starting with `start` and ending with `end`, or None if no path is possible. + """ + + # It starts off very similiar to Dijkstra. However, we will need to lookup + # nodes in the open list before. There can be thousands of nodes in the open + # list and any unordered search is too expensive, so we trade some memory usage for + # more consistent performance by maintaining a dictionary (O(1) lookup) between + # vertices and their nodes. + open_lookup = {} + open = [] + closed = set() + + # We require a bit more information on each node than Dijkstra + # and we do slightly more calculation, so the heuristic must + # prune enough nodes to offset those costs. In practice this + # is almost always the case if their are any large open areas + # (nodes with many connected nodes). + + # Rather than simply expanding nodes that are on the open list + # based on how close they are to the start, we will expand based + # on how much distance we predict is between the start and end + # node IF we go through that parent. That is a combination of + # the distance from the start to the node (which is certain) and + # the distance from the node to the end (which is guessed). + + # We use the counter to enforce consistent ordering between nodes + # with the same total predicted distance. + + counter = 0 + heur = heuristic_fn(graph, start, end) + open_lookup[start] = { 'vertex': start, 'dist_start_to_here': 0, 'pred_dist_here_to_end': heur, 'pred_total_dist': heur, 'parent': None } + heapq.heappush(open, (heur, counter, start)) + counter += 1 + + while len(open) > 0: + current = heapq.heappop(open) + current_vertex = current[2] + current_dict = open_lookup[current_vertex] + del open_lookup[current_vertex] + closed.update(current_vertex) + + if current_vertex == end: + return self.reverse_path(current_dict) + + neighbors = graph.graph[current_vertex] + for neighbor in neighbors: + if neighbor in closed: + # If we already expanded it it's definitely not better + # to go through this node, or we would have expanded this + # node first. + continue + + cost_start_to_neighbor = current_dict['dist_start_to_here'] + graph.get_edge_weight(current_vertex, neighbor) + neighbor_from_lookup = open_lookup.get(neighbor, None) # avoid searching twice + if neighbor_from_lookup is not None: + # If our heuristic is NOT consistent or the grid is NOT uniform, + # it is possible that there is a better path to a neighbor of a + # previously expanded node. See above, ctrl+f "river example neighbors" + + # Note that the heuristic distance from here to end will be the same for + # both, so the only difference will be in start->here through neighbor + # and through the old neighbor. + + old_dist_start_to_neighbor = neighbor_from_lookup['dist_start_to_here'] + + if cost_start_to_neighbor < old_dist_start_to_neighbor: + pred_dist_neighbor_to_end = neighbor_from_lookup['pred_dist_here_to_end'] + pred_total_dist_through_neighbor_to_end = cost_start_to_neighbor + pred_dist_neighbor_to_end + # Note, we've already shown that neighbor (the vector) is already in the open list, + # but unfortunately we don't know where and we have to do a slow lookup to fix the + # key its sorting by to the new predicted total distance. + + # In case we're using a fancy debugger we want to search in user-code so when + # this lookup freezes we can see how much longer its going to take. + found = None + for i in range(0, len(open)): + if open[i][2] == neighbor: + found = i + break + if found is None: + raise Exception('A vertex is in the open lookup but not in open. This is impossible, please submit an issue + include the graph!') + # todo I'm not certain about the performance characteristics of doing this with heapq, nor if + # it would be better to delete heapify and push or rather than replace + open[i] = (pred_total_dist_through_neighbor_to_end, counter, neighbor) + counter += 1 + heapq.heapify(open) + open_lookup[neighbor] = { 'vertex': neighbor, + 'dist_start_to_here': cost_start_to_neighbor, + 'pred_dist_here_to_end': pred_dist_neighbor_to_end, + 'pred_total_dist': pred_total_dist_through_neighbor_to_end, + 'parent': current_dict } + continue + + + # We've found the first possible way to the path! + pred_dist_neighbor_to_end = heuristic_fn(graph, neighbor, end) + pred_total_dist_through_neighbor_to_end = cost_start_to_neighbor + pred_dist_neighbor_to_end + heapq.heappush(open, (pred_total_dist_through_neighbor_to_end, counter, neighbor)) + open_lookup[neighbor] = { 'vertex': neighbor, + 'dist_start_to_here': cost_start_to_neighbor, + 'pred_dist_here_to_end': pred_dist_neighbor_to_end, + 'pred_total_dist': pred_total_dist_through_neighbor_to_end, + 'parent': current_dict } + + return None + + @staticmethod + def get_code(self): + """ + returns the code for the current class + """ + return inspect.getsource(OneDirectionalAStar) + + + \ No newline at end of file diff --git a/pygorithm/pathfinding/dijkstra.py b/pygorithm/pathfinding/dijkstra.py index fc5808b..82737d7 100644 --- a/pygorithm/pathfinding/dijkstra.py +++ b/pygorithm/pathfinding/dijkstra.py @@ -8,6 +8,13 @@ def __init__(self): pass def reverse_path(self, node): + """ + Walks backward from an end node to the start + node and reconstructs a path. Meant for internal + use. + :param node: dict containing { 'vertex': any hashable, 'parent': dict or None } + :return: a list of vertices ending on the node + """ result = [] while node is not None: result.insert(0, node['vertex']) @@ -33,21 +40,25 @@ def find_path(self, graph, start, end): # key for sorting. The second element in the tuple is just a counter and is used to avoid having # to hash the dictionary when the distance from the source is not unique. + # performance might be improved by also searching the open list and avoiding adding those nodes + # but since this algorithm is typically for examples only performance improvements are not made + counter = 0 heapq.heappush(open, (0, counter, { 'vertex': start, 'parent': None })) counter += 1 while len(open) > 0: current = heapq.heappop(open) - closed.update(current[2]['vertex']) + current_dict = current[2] + closed.update(current_dict['vertex']) - if current[2]['vertex'] == end: - return self.reverse_path(current[2]) + if current_dict['vertex'] == end: + return self.reverse_path(current_dict) - neighbors = graph.graph[current[2]['vertex']] + neighbors = graph.graph[current_dict['vertex']] for neighbor in neighbors: if neighbor not in closed: - heapq.heappush(open, (current[0] + 1, counter, { 'vertex': neighbor, 'parent': current[2] })) + heapq.heappush(open, (current[0] + 1, counter, { 'vertex': neighbor, 'parent': current_dict })) counter += 1 diff --git a/tests/test_pathing.py b/tests/test_pathing.py index e35290a..ee70364 100644 --- a/tests/test_pathing.py +++ b/tests/test_pathing.py @@ -1,22 +1,23 @@ import unittest +import math +import time -from pygorithm.pathing import (dijkstra) +from pygorithm.pathfinding import (dijkstra, astar) +from pygorithm.data_structures import graph -class TestDijkstra(unittest.TestCase): - def test_exists(self): - pather = dijkstra.Dijkstra() +class TimedTestCase(unittest.TestCase): + # https://hackernoon.com/timing-tests-in-python-for-fun-and-profit-1663144571 + def setUp(self): + self._started_at = time.time() + def tearDown(self): + elapsed = time.time() - self._started_at + print('{} ({}s)'.format(self.id(), round(elapsed, 2))) - self.assertIsNotNone(pather) - self.assertIsNotNone(pather.find_path) - self.assertIsNotNone(pather.get_code) +class SimplePathfindingTestCaseTimed(TimedTestCase): + def find_path(self, my_graph, v1, v2): + return [ (0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 3), (3, 2), (3, 1), (3, 0) ] def test_find_path_package_example(self): - # import the required pathing - from pygorithm.pathing import dijkstra - - # import a graph data structure - from pygorithm.data_structures import graph - # initialize the graph with nodes from (0, 0) to (4, 4) # with weight corresponding to distance (orthogonal # is 1, diagonal is sqrt(2)) @@ -30,12 +31,31 @@ def test_find_path_package_example(self): my_graph.remove_edge((2, 2)) my_graph.remove_edge((2, 3)) - # create a pathfinder - my_pathfinder = dijkstra.Dijkstra() - # calculate a path - my_path = my_pathfinder.find_path(my_graph, (0, 0), (3, 0)) + my_path = self.find_path(my_graph, (0, 0), (3, 0)) # check path: - expected_path = [ (0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 3), (3, 2), (3, 1), (3, 0) ] - self.assertListEqual(expected_path, my_path) \ No newline at end of file + self.assertIsNotNone(my_path) + + total_weight = 0 + for i in range(1, len(my_path)): + total_weight += my_graph.get_edge_weight(my_path[i - 1], my_path[i]) + + self.assertAlmostEqual(9.242640687119284, total_weight) + +class TestDijkstraTimed(SimplePathfindingTestCaseTimed): + def find_path(self, my_graph, v1, v2): + my_pathfinder = dijkstra.Dijkstra() + return my_pathfinder.find_path(my_graph, (0, 0), (3, 0)) + +class TestAStarUnidirectionalTimed(SimplePathfindingTestCaseTimed): + def find_path(self, my_graph, v1, v2): + my_pathfinder = astar.OneDirectionalAStar() + + def my_heuristic(graph, v1, v2): + dx = v2[0] - v1[0] + dy = v2[1] - v1[1] + return math.sqrt(dx * dx + dy * dy) + + return my_pathfinder.find_path(my_graph, v1, v2, my_heuristic) + \ No newline at end of file From 6e5375cdf12ccf12085dfca9a47e3ab9ec6d63b6 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 20 Aug 2017 09:47:13 -0700 Subject: [PATCH 087/251] Improve river image I forgot to save before committing. Woops. --- imgs/onedirectionalastar_riverexample.png | Bin 20337 -> 23679 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/imgs/onedirectionalastar_riverexample.png b/imgs/onedirectionalastar_riverexample.png index 52074c130020ab852bb6bc7d6b4f639272aacf3d..36a38205d32ca329631b413fe16986ca759b2f1d 100644 GIT binary patch literal 23679 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 literal 20337 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 he=~M>dt{dbfpni Date: Mon, 21 Aug 2017 06:50:19 -0500 Subject: [PATCH 088/251] Updates - README.rst - Syntax updates - Updates examples - docs - Removed unnecessary info at end of examples - Updates syntax to remove camel casing - __init__.py - Updated pathing to pathfinding - Pathfinding - dijkstra.py - Added header docstrings to top of file - Minor syntax changes - Added missing import: inspect - Updated reverse_path() to be static - Removed 'self' parameter from get_code() - Updated variable 'open' in find_path() to '_open' to prevent shadowing built-in open() function - astar.py - Added header docstrings to top of file - Minor syntax changes, PEP8 - Updated lines where they where longer than 125 chars (PEP8) - Added missing import: inspect - Updated reverse_path() to be static - Removed 'self' parameter from get_code() - Updated variable 'open' in find_path() to '_open' to prevent shadowing built-in open() function ### !__All UnitTests for pathfinding pass__! --- README.rst | 23 ++++---- docs/Data_Structure.rst | 2 - docs/Fibonacci.rst | 2 - docs/Searching.rst | 14 ++--- docs/Sorting.rst | 6 +- docs/index.rst | 4 +- pygorithm/__init__.py | 2 +- pygorithm/pathfinding/astar.py | 95 +++++++++++++++++++------------ pygorithm/pathfinding/dijkstra.py | 38 +++++++++---- 9 files changed, 106 insertions(+), 80 deletions(-) diff --git a/README.rst b/README.rst index 2378fff..43a41db 100644 --- a/README.rst +++ b/README.rst @@ -47,28 +47,29 @@ Quick Start Guide .. code:: python - from pygorithm.sorting import bubble_sort - myList = [12, 4, 3, 5, 13, 1, 17, 19, 15] - sortedList = bubble_sort.sort(myList) - print(sortedList) + >>> from pygorithm.sorting import bubble_sort + >>> my_list = [12, 4, 3, 5, 13, 1, 17, 19, 15] + >>> sorted_list = bubble_sort.sort(my_list) + >>> print(sorted_list) + >>> [1, 3, 4, 5, 12, 13, 15, 17, 19] * To get the code for function used .. code:: python - from pygorithm.sorting import bubble_sort - code = bubble_sort.get_code() - print(code) + >>> from pygorithm.sorting import bubble_sort + >>> code = bubble_sort.get_code() + >>> print(code) * To get the time complexity of an algorithm .. code:: python - from pygorithm.sorting import bubble_sort - time_complexity = bubble_sort.time_complexities() - print(time_complexity) + >>> from pygorithm.sorting import bubble_sort + >>> time_complexity = bubble_sort.time_complexities() + >>> print(time_complexity) * To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, @@ -92,8 +93,6 @@ Quick Start Guide quick_sort selection_sort shell_sort - >>> from pygorithm.sorting import bubble_sort - >>> help(bubble_sort) Tests diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 1e0a5cf..0e4f7d1 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -70,8 +70,6 @@ Features queue stack tree - >>> from pygorithm.data_structures import graph - >>> help(graph) Stack diff --git a/docs/Fibonacci.rst b/docs/Fibonacci.rst index ff59831..0c2407e 100644 --- a/docs/Fibonacci.rst +++ b/docs/Fibonacci.rst @@ -50,8 +50,6 @@ Features modules recursion - >>> from pygorithm.fibonacci import memoization - >>> help(memoization) Implementations API ------------------- diff --git a/docs/Searching.rst b/docs/Searching.rst index 55cc860..7abe90c 100644 --- a/docs/Searching.rst +++ b/docs/Searching.rst @@ -12,13 +12,13 @@ Quick Start Guide # import the required searching algorithm from pygorithm.searching import binary_search - myList = [12, 4, 2, 14, 3, 7, 5] + my_list = [12, 4, 2, 14, 3, 7, 5] # pre-requisite for binary search is that the list should be sorted - myList.sort() + my_list.sort() # to search an element in the above list - index = binary_search.search(myList, 7) + index = binary_search.search(my_list, 7) print(index) Features @@ -48,8 +48,6 @@ Features linear_search modules quick_select - >>> from pygorithm.searching import binary_search) - >>> help(binary_search) * For Searching: @@ -60,13 +58,13 @@ Features # import the required searching algorithm from pygorithm.searching import binary_search - myList = [12, 4, 2, 14, 3, 7, 5] + my_list = [12, 4, 2, 14, 3, 7, 5] # pre-requisite for binary search is that the list should be sorted - myList.sort() + my_list.sort() # to search an element in the above list - index = binary_search.search(myList, 7) + index = binary_search.search(my_list, 7) print(index) * Get time complexities of all the searching algorithms diff --git a/docs/Sorting.rst b/docs/Sorting.rst index 0caf1d4..b78b883 100644 --- a/docs/Sorting.rst +++ b/docs/Sorting.rst @@ -15,7 +15,7 @@ Quick Start Guide my_list = [12, 4, 2, 14, 3, 7, 5] # to sort the _list - sorted__list = bubble_sort.sort(my_list) + sorted_list = bubble_sort.sort(my_list) Features -------- @@ -42,8 +42,6 @@ Features quick_sort selection_sort shell_sort - >>> from pygorithm.sorting import bubble_sort - >>> help(bubble_sort) * For sorting: Remember ``sort()`` function takes its parameter as a _list only. @@ -56,7 +54,7 @@ Features my_list = [12, 4, 2, 14, 3, 7, 5] # to sort the _list - sorted__list = bubble_sort.sort(my_list) + sorted_list = bubble_sort.sort(my_list) * Get time complexities of all the sorting algorithms diff --git a/docs/index.rst b/docs/index.rst index 897dd33..3792cc0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -42,10 +42,10 @@ Quick Start Guide # This will print the code for bubble sort print(bubble_sort.get_code()) - myList = [12, 4, 2, 14, 3, 7, 5] + my_list = [12, 4, 2, 14, 3, 7, 5] # to sort the list - sorted_list = bubble_sort.sort(myList) + sorted_list = bubble_sort.sort(my_list) Getting Started --------------- diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index acba95e..5055131 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -63,5 +63,5 @@ 'searching', 'sorting', 'string', - 'pathing', + 'pathfinding', ] diff --git a/pygorithm/pathfinding/astar.py b/pygorithm/pathfinding/astar.py index c74fecf..1154e95 100644 --- a/pygorithm/pathfinding/astar.py +++ b/pygorithm/pathfinding/astar.py @@ -1,4 +1,19 @@ +""" +A* + +Author: Timothy Moore + +A* is an informed search algorithm, or a best-first search, +meaning that it solves problems by searching among all possible +paths to the solution (goal) for the one that incurs the smallest +cost (least distance travelled, shortest time, etc.), and among +these paths it first considers the ones that appear to lead most +quickly to the solution. +https://en.wikipedia.org/wiki/A*_search_algorithm +""" import heapq +import inspect + class OneDirectionalAStar(object): """AStar object @@ -28,7 +43,7 @@ class OneDirectionalAStar(object): # # You would expand your side of center and find the top and bottom at # (5 + 12) - WORSE than just going to them. This is the case where we - # would NOT add the path base->center->top to the open list because + # would NOT add the path base->center->top to the _open list because # (for these weights) it will never be better than base->top. # # You would also add the new node (55 + 0) or the destination. @@ -37,14 +52,15 @@ class OneDirectionalAStar(object): # river with a cost of (18 + 12). # # You expand the top node on the other side of the river next and find - # one of the neighbors is already on the open list (the destination) + # one of the neighbors is already on the _open list (the destination) # at a score of (55 + 0), but your cost to get there is (30 + 0). This # is where you would REPLACE the old path with yourself. def __init__(self): pass - - def reverse_path(self, node): + + @staticmethod + def reverse_path(node): """ Walks backward from an end node to the start node and reconstructs a path. Meant for internal @@ -75,7 +91,7 @@ def find_path(self, graph, start, end, heuristic_fn): - The distance between nodes are small - There are too many nodes for an exhaustive search to ever be feasible. - - The world is mostly open (ie there are many paths + - The world is mostly _open (ie there are many paths from the start to the end that are acceptable) - Execution speed is more important than accuracy. The best way to do this is to make the heuristic slightly @@ -94,21 +110,21 @@ def find_path(self, graph, start, end, heuristic_fn): """ # It starts off very similiar to Dijkstra. However, we will need to lookup - # nodes in the open list before. There can be thousands of nodes in the open + # nodes in the _open list before. There can be thousands of nodes in the _open # list and any unordered search is too expensive, so we trade some memory usage for # more consistent performance by maintaining a dictionary (O(1) lookup) between # vertices and their nodes. - open_lookup = {} - open = [] + _open_lookup = {} + _open = [] closed = set() # We require a bit more information on each node than Dijkstra # and we do slightly more calculation, so the heuristic must # prune enough nodes to offset those costs. In practice this - # is almost always the case if their are any large open areas + # is almost always the case if their are any large _open areas # (nodes with many connected nodes). - # Rather than simply expanding nodes that are on the open list + # Rather than simply expanding nodes that are on the _open list # based on how close they are to the start, we will expand based # on how much distance we predict is between the start and end # node IF we go through that parent. That is a combination of @@ -120,15 +136,19 @@ def find_path(self, graph, start, end, heuristic_fn): counter = 0 heur = heuristic_fn(graph, start, end) - open_lookup[start] = { 'vertex': start, 'dist_start_to_here': 0, 'pred_dist_here_to_end': heur, 'pred_total_dist': heur, 'parent': None } - heapq.heappush(open, (heur, counter, start)) + _open_lookup[start] = {'vertex': start, + 'dist_start_to_here': 0, + 'pred_dist_here_to_end': heur, + 'pred_total_dist': heur, + 'parent': None} + heapq.heappush(_open, (heur, counter, start)) counter += 1 - while len(open) > 0: - current = heapq.heappop(open) + while len(_open) > 0: + current = heapq.heappop(_open) current_vertex = current[2] - current_dict = open_lookup[current_vertex] - del open_lookup[current_vertex] + current_dict = _open_lookup[current_vertex] + del _open_lookup[current_vertex] closed.update(current_vertex) if current_vertex == end: @@ -142,8 +162,10 @@ def find_path(self, graph, start, end, heuristic_fn): # node first. continue - cost_start_to_neighbor = current_dict['dist_start_to_here'] + graph.get_edge_weight(current_vertex, neighbor) - neighbor_from_lookup = open_lookup.get(neighbor, None) # avoid searching twice + cost_start_to_neighbor = current_dict['dist_start_to_here'] \ + + graph.get_edge_weight(current_vertex, neighbor) + # avoid searching twice + neighbor_from_lookup = _open_lookup.get(neighbor, None) if neighbor_from_lookup is not None: # If our heuristic is NOT consistent or the grid is NOT uniform, # it is possible that there is a better path to a neighbor of a @@ -158,50 +180,49 @@ def find_path(self, graph, start, end, heuristic_fn): if cost_start_to_neighbor < old_dist_start_to_neighbor: pred_dist_neighbor_to_end = neighbor_from_lookup['pred_dist_here_to_end'] pred_total_dist_through_neighbor_to_end = cost_start_to_neighbor + pred_dist_neighbor_to_end - # Note, we've already shown that neighbor (the vector) is already in the open list, + # Note, we've already shown that neighbor (the vector) is already in the _open list, # but unfortunately we don't know where and we have to do a slow lookup to fix the # key its sorting by to the new predicted total distance. # In case we're using a fancy debugger we want to search in user-code so when # this lookup freezes we can see how much longer its going to take. found = None - for i in range(0, len(open)): - if open[i][2] == neighbor: + for i in range(0, len(_open)): + if _open[i][2] == neighbor: found = i break if found is None: - raise Exception('A vertex is in the open lookup but not in open. This is impossible, please submit an issue + include the graph!') - # todo I'm not certain about the performance characteristics of doing this with heapq, nor if - # it would be better to delete heapify and push or rather than replace - open[i] = (pred_total_dist_through_neighbor_to_end, counter, neighbor) + raise Exception('A vertex is in the _open lookup but not in _open. ' + 'This is impossible, please submit an issue + include the graph!') + # TODO: I'm not certain about the performance characteristics of doing this with heapq, nor if + # TODO: it would be better to delete heapify and push or rather than replace + + # TODO: Local variable 'i' could be referenced before assignment + _open[i] = (pred_total_dist_through_neighbor_to_end, counter, neighbor) counter += 1 - heapq.heapify(open) - open_lookup[neighbor] = { 'vertex': neighbor, + heapq.heapify(_open) + _open_lookup[neighbor] = {'vertex': neighbor, 'dist_start_to_here': cost_start_to_neighbor, 'pred_dist_here_to_end': pred_dist_neighbor_to_end, 'pred_total_dist': pred_total_dist_through_neighbor_to_end, - 'parent': current_dict } + 'parent': current_dict} continue - - + # We've found the first possible way to the path! pred_dist_neighbor_to_end = heuristic_fn(graph, neighbor, end) pred_total_dist_through_neighbor_to_end = cost_start_to_neighbor + pred_dist_neighbor_to_end - heapq.heappush(open, (pred_total_dist_through_neighbor_to_end, counter, neighbor)) - open_lookup[neighbor] = { 'vertex': neighbor, + heapq.heappush(_open, (pred_total_dist_through_neighbor_to_end, counter, neighbor)) + _open_lookup[neighbor] = {'vertex': neighbor, 'dist_start_to_here': cost_start_to_neighbor, 'pred_dist_here_to_end': pred_dist_neighbor_to_end, 'pred_total_dist': pred_total_dist_through_neighbor_to_end, - 'parent': current_dict } + 'parent': current_dict} return None @staticmethod - def get_code(self): + def get_code(): """ returns the code for the current class """ return inspect.getsource(OneDirectionalAStar) - - - \ No newline at end of file diff --git a/pygorithm/pathfinding/dijkstra.py b/pygorithm/pathfinding/dijkstra.py index 82737d7..86232fa 100644 --- a/pygorithm/pathfinding/dijkstra.py +++ b/pygorithm/pathfinding/dijkstra.py @@ -1,13 +1,29 @@ +""" +Dijkstra's Algorithm + +Author: Timothy Moore + +Dijkstra's algorithm is an algorithm for +finding the shortest paths between nodes +in a graph. +https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm + +""" import heapq +import inspect + + class Dijkstra(object): """Dijkstra object Finds the optimal path between two nodes on - a graph.""" + a graph. + """ def __init__(self): pass - - def reverse_path(self, node): + + @staticmethod + def reverse_path(node): """ Walks backward from an end node to the start node and reconstructs a path. Meant for internal @@ -33,7 +49,7 @@ def find_path(self, graph, start, end): :return: a list starting with `start` and ending with `end`, or None if no path is possible. """ - open = [] + _open = [] closed = set() # the first element in the tuple is the distance from the source. This is used as the primary @@ -44,11 +60,11 @@ def find_path(self, graph, start, end): # but since this algorithm is typically for examples only performance improvements are not made counter = 0 - heapq.heappush(open, (0, counter, { 'vertex': start, 'parent': None })) + heapq.heappush(_open, (0, counter, {'vertex': start, 'parent': None})) counter += 1 - while len(open) > 0: - current = heapq.heappop(open) + while len(_open) > 0: + current = heapq.heappop(_open) current_dict = current[2] closed.update(current_dict['vertex']) @@ -58,15 +74,13 @@ def find_path(self, graph, start, end): neighbors = graph.graph[current_dict['vertex']] for neighbor in neighbors: if neighbor not in closed: - heapq.heappush(open, (current[0] + 1, counter, { 'vertex': neighbor, 'parent': current_dict })) + heapq.heappush(_open, (current[0] + 1, counter, {'vertex': neighbor, 'parent': current_dict})) counter += 1 - - return None @staticmethod - def get_code(self): + def get_code(): """ returns the code for the current class """ - return inspect.getsource(Dijkstra) \ No newline at end of file + return inspect.getsource(Dijkstra) From ac176651fbd1aa079a450101911f6a1d014473b6 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Mon, 21 Aug 2017 10:07:58 -0700 Subject: [PATCH 089/251] Add BiDirectional AStar I switched to using asserts rather than exceptions for things that should be impossible, since exceptions should at least be partly caused by the parameters * docs/Pathfinding.rst - Add BiDirectionalAStar. Functions identically to onedirectional astar, as the differences are solely in performance characteristics * pygorithm/pathfinding/astar.py - Minor documentation tweaks for consistency and improve performance of reversing the list for one directonal astar (avoid shifting elements so much). Fix referencing the loop variable 'i' instead of 'found' and remove related TODO Add BiDirectionalAStar. I think there is some room to reduce the length * tests/test_pathing.py - Add the basic test (passing) --- docs/Pathfinding.rst | 14 ++ pygorithm/pathfinding/astar.py | 288 +++++++++++++++++++++++++++++++-- tests/test_pathing.py | 12 +- 3 files changed, 304 insertions(+), 10 deletions(-) diff --git a/docs/Pathfinding.rst b/docs/Pathfinding.rst index dccf2bc..41574c3 100644 --- a/docs/Pathfinding.rst +++ b/docs/Pathfinding.rst @@ -41,6 +41,7 @@ Features * Algorithms available: - Dijkstra (dijkstra) - Unidirectional AStar (astar) + - BiDirectional AStar (astar) * To see all the available functions in a module there is a `modules()` function available. For example, @@ -83,6 +84,19 @@ Unidirectional AStar .. function:: astar.OneDirectionalAStar.find_path(pygorithm.data_structures.WeightedUndirectedGraph, vertex, vertex, function) +- **pygorithm.data_structures.WeightedUndirectedGraph** : acts like an object with `graph` and `get_edge_weight` (see WeightedUndirectedGraph) +- **vertex** : any hashable type for the start of the path +- **vertex** : any hashable type for the end of the path +- **function** : `function(graph, vertex, vertex)` returns numeric - a heuristic function for distance between two vertices +- **Return Value** : returns a `List` of vertexes (of the same type of the graph) starting from from and going to to. This algorithm respects weights, but is only guarranteed to be optimal if the heuristic is admissable. An admissable function will never *overestimate* the cost from one node to another (in other words, it is optimistic). + +BiDirectional AStar +------------------- + +* Functions and their uses + +.. function:: astar.BiDirectionalAStar.find_path(pygorithm.data_structures.WeightedUndirectedGraph, vertex, vertex, function) + - **pygorithm.data_structures.WeightedUndirectedGraph** : acts like an object with `graph` and `get_edge_weight` (see WeightedUndirectedGraph) - **vertex** : any hashable type for the start of the path - **vertex** : any hashable type for the end of the path diff --git a/pygorithm/pathfinding/astar.py b/pygorithm/pathfinding/astar.py index 1154e95..6f2110b 100644 --- a/pygorithm/pathfinding/astar.py +++ b/pygorithm/pathfinding/astar.py @@ -14,11 +14,14 @@ import heapq import inspect +from enum import Enum + class OneDirectionalAStar(object): - """AStar object - Finds the optimal path between two nodes on - a graph while taking into account weights. + """OneDirectionalAStar object + Finds the optimal path between two nodes on a graph while taking + into account weights. Expands the start node first until it finds + the end node. """ # Some miscellaneous notes: @@ -70,8 +73,9 @@ def reverse_path(node): """ result = [] while node is not None: - result.insert(0, node['vertex']) + result.append(node['vertex']) node = node['parent'] + result.reverse() return result def find_path(self, graph, start, end, heuristic_fn): @@ -191,14 +195,11 @@ def find_path(self, graph, start, end, heuristic_fn): if _open[i][2] == neighbor: found = i break - if found is None: - raise Exception('A vertex is in the _open lookup but not in _open. ' - 'This is impossible, please submit an issue + include the graph!') + assert(found is not None) # TODO: I'm not certain about the performance characteristics of doing this with heapq, nor if # TODO: it would be better to delete heapify and push or rather than replace - # TODO: Local variable 'i' could be referenced before assignment - _open[i] = (pred_total_dist_through_neighbor_to_end, counter, neighbor) + _open[found] = (pred_total_dist_through_neighbor_to_end, counter, neighbor) counter += 1 heapq.heapify(_open) _open_lookup[neighbor] = {'vertex': neighbor, @@ -226,3 +227,272 @@ def get_code(): returns the code for the current class """ return inspect.getsource(OneDirectionalAStar) + +class BiDirectionalAStar(object): + """BiDirectionalAStar object + Finds the optimal path between two nodes on a graph while taking + account weights. Expands from the start node and the end node + simultaneously + """ + + class NodeSource(Enum): + """NodeSource enum + Used to distinguish how a node was located + """ + + BY_START = 1, + BY_END = 2 + + def __init__(self): + pass + + @staticmethod + def reverse_path(node_from_start, node_from_end): + """ + Reconstructs the path formed by walking from + node_from_start backward to start and combining + it with the path formed by walking from + node_from_end to end. Both the start and end are + detected where 'parent' is None. + :param node_from_start: dict containing { 'vertex': any hashable, 'parent': dict or None } + :param node_from_end: dict containing { 'vertex' any hashable, 'parent': dict or None } + :return: list of vertices starting at the start and ending at the end + """ + list_from_start = [] + current = node_from_start + while current is not None: + list_from_start.append(current['vertex']) + current = current['parent'] + list_from_start.reverse() + + list_from_end = [] + current = node_from_end + while current is not None: + list_from_end.append(current['vertex']) + current = current['parent'] + + return list_from_start + list_from_end + + def find_path(self, graph, start, end, heuristic_fn): + """ + Calculates the optimal path from the start to the end. The + search occurs from both the start and end at the same rate, + which makes this algorithm have more consistent performance + if you regularly are trying to find paths where the destination + is unreachable and in a small room. + + The heuristic requirements are the same as in unidirectional A* + (it must be admissable). + + :param graph: the graph with 'graph' and 'get_edge_weight' (see WeightedUndirectedGraph) + :param start: the start vertex (must be hashable and same type as the graph) + :param end: the end vertex (must be hashable and same type as the graph) + :param heuristic_fn: an admissable heuristic. signature: function(graph, start, end) returns numeric + :return: a list of vertices starting at start ending at end or None + """ + + # This algorithm is really just repeating unidirectional A* twice, + # but unfortunately it's just different enough that it requires + # even more work to try to make a single function that can be called + # twice. + + + # Note: The nodes in by_start will have heuristic distance to the end, + # whereas the nodes in by_end will have heuristic distance to the start. + # This means that the total predicted distance for the exact same node + # might not match depending on which side we found it from. However, + # it won't make a difference since as soon as we evaluate the same node + # on both sides we've finished. + # + # This also means that we can use the same lookup table for both. + + open_by_start = [] + open_by_end = [] + open_lookup = {} + + closed = set() + + # used to avoid hashing the dict. + counter_arr = [0] + + total_heur_distance = heuristic_fn(graph, start, end) + heapq.heappush(open_by_start, (total_heur_distance, counter_arr[0], start)) + counter_arr[0] += 1 + open_lookup[start] = { 'vertex': start, + 'parent': None, + 'source': self.NodeSource.BY_START, + 'dist_start_to_here': 0, + 'pred_dist_here_to_end': total_heur_distance, + 'pred_total_dist': total_heur_distance } + + heapq.heappush(open_by_end, (total_heur_distance, counter_arr, end)) + counter_arr[0] += 1 + open_lookup[end] = { 'vertex': end, + 'parent': None, + 'source': self.NodeSource.BY_END, + 'dist_end_to_here': 0, + 'pred_dist_here_to_start': total_heur_distance, + 'pred_total_dist': total_heur_distance } + + # If the start runs out then the start is in a closed room, + # if the end runs out then the end is in a closed room, + # either way there is no path from start to end. + while len(open_by_start) > 0 and len(open_by_end) > 0: + result = self._evaluate_from_start(graph, start, end, heuristic_fn, open_by_start, open_by_end, open_lookup, closed, counter_arr) + if result is not None: + return result + + result = self._evaluate_from_end(graph, start, end, heuristic_fn, open_by_start, open_by_end, open_lookup, closed, counter_arr) + if result is not None: + return result + + return None + + def _evaluate_from_start(self, graph, start, end, heuristic_fn, open_by_start, open_by_end, open_lookup, closed, counter_arr): + """ + Intended for internal use only. Expands one node from the open_by_start list. + + :param graph: the graph (see WeightedUndirectedGraph) + :param start: the start node + :param end: the end node + :heuristic_fn: the heuristic function (signature function(graph, start, end) returns numeric) + :open_by_start: the open vertices from the start + :open_by_end: the open vertices from the end + :open_lookup: dictionary of vertices -> dicts + :closed: the already expanded vertices (set) + :counter_arr: arr of one integer (counter) + """ + current = heapq.heappop(open_by_start) + current_vertex = current[2] + current_dict = open_lookup[current_vertex] + del open_lookup[current_vertex] + closed.update(current_vertex) + + neighbors = graph.graph[current_vertex] + for neighbor in neighbors: + if neighbor in closed: + continue + + neighbor_dict = open_lookup.get(neighbor, None) + if neighbor_dict is not None and neighbor_dict['source'] is self.NodeSource.BY_END: + return self.reverse_path(current_dict, neighbor_dict) + + dist_to_neighb_through_curr_from_start = current_dict['dist_start_to_here'] \ + + graph.get_edge_weight(current_vertex, neighbor) + + if neighbor_dict is not None: + assert(neighbor_dict['source'] is self.NodeSource.BY_START) + + if neighbor_dict['dist_start_to_here'] <= dist_to_neighb_through_curr_from_start: + continue + + pred_dist_neighbor_to_end = neighbor_dict['pred_dist_here_to_end'] + pred_total_dist_through_neighbor = dist_to_neighb_through_curr_from_start + pred_dist_neighbor_to_end + open_lookup[neighbor] = { 'vertex': neighbor, + 'parent': current_dict, + 'source': self.NodeSource.BY_START, + 'dist_start_to_here': dist_to_neighb_through_curr_from_start, + 'pred_dist_here_to_end': pred_dist_neighbor_to_end, + 'pred_total_dist': pred_total_dist_through_neighbor } + + # TODO: I'm pretty sure theres a faster way to do this + found = None + for i in range(0, len(open_by_start)): + if open_by_start[i][2] == neighbor: + found = i + break + assert(found is not None) + + open_by_start[found] = (pred_total_dist_through_neighbor, counter_arr[0], neighbor) + counter_arr[0] += 1 + heapq.heapify(open_by_start) + continue + + pred_dist_neighbor_to_end = heuristic_fn(graph, neighbor, end) + pred_total_dist_through_neighbor = dist_to_neighb_through_curr_from_start + pred_dist_neighbor_to_end + open_lookup[neighbor] = { 'vertex': neighbor, + 'parent': current_dict, + 'source': self.NodeSource.BY_START, + 'dist_start_to_here': dist_to_neighb_through_curr_from_start, + 'pred_dist_here_to_end': pred_dist_neighbor_to_end, + 'pred_total_dist': pred_total_dist_through_neighbor } + heapq.heappush(open_by_start, (pred_total_dist_through_neighbor, counter_arr[0], neighbor)) + counter_arr[0] += 1 + + def _evaluate_from_end(self, graph, start, end, heuristic_fn, open_by_start, open_by_end, open_lookup, closed, counter_arr): + """ + Intended for internal use only. Expands one node from the open_by_end list. + + :param graph: the graph (see WeightedUndirectedGraph) + :param start: the start node + :param end: the end node + :heuristic_fn: the heuristic function (signature function(graph, start, end) returns numeric) + :open_by_start: the open vertices from the start + :open_by_end: the open vertices from the end + :open_lookup: dictionary of vertices -> dicts + :closed: the already expanded vertices (set) + :counter_arr: arr of one integer (counter) + """ + current = heapq.heappop(open_by_end) + current_vertex = current[2] + current_dict = open_lookup[current_vertex] + del open_lookup[current_vertex] + closed.update(current_vertex) + + neighbors = graph.graph[current_vertex] + for neighbor in neighbors: + if neighbor in closed: + continue + + neighbor_dict = open_lookup.get(neighbor, None) + if neighbor_dict is not None and neighbor_dict['source'] is self.NodeSource.BY_START: + return self.reverse_path(neighbor_dict, current_dict) + + dist_to_neighb_through_curr_from_end = current_dict['dist_end_to_here'] \ + + graph.get_edge_weight(current_vertex, neighbor) + + if neighbor_dict is not None: + assert(neighbor_dict['source'] is self.NodeSource.BY_END) + + if neighbor_dict['dist_end_to_here'] <= dist_to_neighb_through_curr_from_end: + continue + + pred_dist_neighbor_to_start = neighbor_dict['pred_dist_here_to_start'] + pred_total_dist_through_neighbor = dist_to_neighb_through_curr_from_end + pred_dist_neighbor_to_start + open_lookup[neighbor] = { 'vertex': neighbor, + 'parent': current_dict, + 'source': self.NodeSource.BY_END, + 'dist_end_to_here': dist_to_neighb_through_curr_from_end, + 'pred_dist_here_to_start': pred_dist_neighbor_to_start, + 'pred_total_dist': pred_total_dist_through_neighbor } + + # TODO: I'm pretty sure theres a faster way to do this + found = None + for i in range(0, len(open_by_end)): + if open_by_end[i][2] == neighbor: + found = i + break + assert(found is not None) + + open_by_end[found] = (pred_total_dist_through_neighbor, counter_arr[0], neighbor) + counter_arr[0] += 1 + heapq.heapify(open_by_end) + continue + + pred_dist_neighbor_to_start = heuristic_fn(graph, neighbor, start) + pred_total_dist_through_neighbor = dist_to_neighb_through_curr_from_end + pred_dist_neighbor_to_start + open_lookup[neighbor] = { 'vertex': neighbor, + 'parent': current_dict, + 'source': self.NodeSource.BY_END, + 'dist_end_to_here': dist_to_neighb_through_curr_from_end, + 'pred_dist_here_to_start': pred_dist_neighbor_to_start, + 'pred_total_dist': pred_total_dist_through_neighbor } + heapq.heappush(open_by_end, (pred_total_dist_through_neighbor, counter_arr[0], neighbor)) + counter_arr[0] += 1 + + @staticmethod + def get_code(): + """ + returns the code for the current class + """ + return inspect.getsource(BiDirectionalAStar) \ No newline at end of file diff --git a/tests/test_pathing.py b/tests/test_pathing.py index ee70364..fd6b4fe 100644 --- a/tests/test_pathing.py +++ b/tests/test_pathing.py @@ -58,4 +58,14 @@ def my_heuristic(graph, v1, v2): return math.sqrt(dx * dx + dy * dy) return my_pathfinder.find_path(my_graph, v1, v2, my_heuristic) - \ No newline at end of file + +class TestAStarBiDirectionalTimed(SimplePathfindingTestCaseTimed): + def find_path(self, my_graph, v1, v2): + my_pathfinder = astar.BiDirectionalAStar() + + def my_heuristic(graph, v1, v2): + dx = v2[0] - v1[0] + dy = v2[1] - v1[1] + return math.sqrt(dx * dx + dy * dy) + + return my_pathfinder.find_path(my_graph, v1, v2, my_heuristic) \ No newline at end of file From d4899df4994124bf91af7f47b587bbca6c5e6de9 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 22 Aug 2017 11:43:17 -0700 Subject: [PATCH 090/251] Begin documentation for geometry This took longer than expected, but it's the first pass at the documentation for the geometry module, which is going to be necessary to test some of the more complicated pathfinding algorithms which operate on entities of varying sizes rather than point particles. docs/Geometry.rst - Document vector2, line2, axisall, polygon2 docs/index.rst - Add geometry pygorithm/__init__.py - Add geometry pygorithm/geometry/__init__.py - Import vector2, axisall, line2, polygon2 pygorithm/geometry/axisall.py - Empty file pygorithm/geometry/line2.py - Empty file pygorithm/geometry/polygon2.py - Empty file pygorithm/geometry/vector2.py - Empty file tests/test_geometry.py - Empty file --- docs/Geometry.rst | 589 +++++++++++++++++++++++++++++++++ docs/index.rst | 1 + pygorithm/__init__.py | 1 + pygorithm/geometry/__init__.py | 14 + pygorithm/geometry/axisall.py | 0 pygorithm/geometry/line2.py | 0 pygorithm/geometry/polygon2.py | 0 pygorithm/geometry/vector2.py | 0 tests/test_geometry.py | 0 9 files changed, 605 insertions(+) create mode 100644 docs/Geometry.rst create mode 100644 pygorithm/geometry/__init__.py create mode 100644 pygorithm/geometry/axisall.py create mode 100644 pygorithm/geometry/line2.py create mode 100644 pygorithm/geometry/polygon2.py create mode 100644 pygorithm/geometry/vector2.py create mode 100644 tests/test_geometry.py diff --git a/docs/Geometry.rst b/docs/Geometry.rst new file mode 100644 index 0000000..f93c83d --- /dev/null +++ b/docs/Geometry.rst @@ -0,0 +1,589 @@ +=== +Geometry +=== + +Some geometrical shapes and operations + +Quick Start Guide +----------------- + +.. code-block:: python + + # import the required shapes and structures + from pygorithm.geometry import polygon2 + from pygorithm.geometry import vector2 + + # create a regular polygon + poly1 = polygon2.Polygon2(regular=True, sides=5, length=5) + + # create a polygon from tuple (x, y) - note that the polygon must be concave + poly2 = polygon2.Polygon2(points=[ (0, 0), (1, 0), (1, 1), (0, 1) ]) + + # create a polygon from vector2s. + poly3 = polygon2.Polygon2(points=[ vector2.Vector2(0, 0), + vector2.Vector2(1, 1), + vector2.Vector2(2, 0) ]) + + # create a polygon by rotating another polygon + poly4 = poly3.rotate(0.2) + poly5 = poly3.rotate(degrees = 30) + + + # check intersection + intrs, mtv = polygon2.Polygon2.find_intersection(poly1, poly2, (0, 0), (1, 0)) + + if intrs: + mtv_dist = mtv[0] + mtv_vec = mtv[1] + print('They intersect. The best way to push poly1 is {} units along {}'.format(mtv_dist, mtv_vec)) + else: + print('No intersection') + + # check complete overlap + overlap = polygon2.Polygon2.contains_polygon(poly1, poly2, (0, 2), (3, 1)) + +Features +-------- + +* Structures available: + - Vector2 (vector2) + - Line2 (line2) + - AxisAlignedLine (axisall) + +* Shapes available: + - Concave Polygons (polygon2) + +* Algorithms available: + - Separating Axis Theorem (polygon2) + +Vector2 +------- + +.. class: Vector2 + +Defines a simple two-dimensional, mutable vector. + +.. note:: + + Equality is not overriden on vectors, because it is expected that + vectors will be used mutably by directly modifying x and y. However, all + functions on vectors are immutable (they return a copy) + +.. attribute:: Vector2.x + + The first component of this vector. Mutation is allowed where appropriate. + +.. attribute:: Vector2.y + + The second component of this vector. Mutation is allowed where appropriate. + +.. method:: vector2.Vector2(self, *args, **kwargs) + +Accepts a pair of unnamed parameters, a pair of named x, y parameters, +another Vector2, or a tuple with 2 numerics. Examples of each: + +.. code-block:: python + + from pygorithm.geometry import vector2 + + # A pair of unnamed parameters + vec1 = vector2.Vector2(0, 5) + + # A pair of named parameters + vec2 = vector2.Vector2(x = 0, y = 5) + + # Another vector2 + vec3 = vector2.Vector2(vec2) + + # A tuple with two numerics + vec4 = vector2.Vector2( (0, 5) ) + +The following operations on vectors are extremely common and rarely varied, and as such have +operator support. + +.. method:: Vector2.__add__(self, other) + +- **other** : `Vector2` the vector to add to this one +- **Return Value** : a new `Vector2` by component-based addition + +Adds the two vectors component wise. Example: + +.. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(0, 3) + vec2 = vector2.Vector2(2, 4) + + vec3 = vec1 + vec2 + + # prints <2, 7> + print(vec3) + +.. method:: Vector2.__sub__(self, other) + +- **other** : `Vector2` the vector to subtract from this one +- **Return Value** : a new `Vector2` by component-based subtraction + +Subtracts the two vectors component wise. Example: + +.. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(5, 5) + vec2 = vector2.Vector2(2, 3) + + vec3 = vec1 - vec2 + vec4 = vec2 - vec1 + + # prints <3, 2> + print(vec3) + + # prints <2, 3> + print(vec4) + +.. method:: Vector2.__mul__(self, scale_factor) +.. method:: Vector2.__rmul__(self, scale_factor) + +- **scale_factor** : `numeric` the factor to multiply both components by +- **Return Value** : a new `Vector2` by component-based multiplication + +Scales the vector by the specified factor. Will throw an exception if +scale_factor is not a numeric - it will not perform the dot product (use +`dot` for that) Examples: + +.. code-block::python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(4, 8) + + vec2 = vec1 * 0.5 + vec3 = 2 * vec2 + + # prints <2, 4> + print(vec2) + + # prints <8, 16> + print(vec3) + + +.. method:: Vector2.__repr__(self) + +- **Return Value** : an unambiguous representation of this vector + +.. code-block:: python + + from pygorithm.geometry import vector2 + + vec = vector2.Vector2(3, 5) + + # prints vector2(x=3, y=5) + print(repr(vec)) + +.. method:: Vector2.__str__(self) + +- **Return Value** : a human-readable representation of this vector + +.. code-block:: python + + from pygorithm.geometry import vector2 + + vec = vector2.Vector2(7, 11) + + # prints <7, 11> + print(str(vec)) + + # also prints <7, 11> + print(vec) + +.. method:: Vector2.dot(self, other) + +- **other** : `vector2` to perform the dot product on +- **Return Value** : a numeric from the dot product of the two vectors + +The dot product of two vectors is calculated as so:: + + Let v1 be a vector such that v1 = + Let v2 be a vector such that v2 = + + v1 . v2 = v1_x * v2_x + v1_y * v2_y + +Example: + +.. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(3, 5) + vec2 = vector2.Vector2(7, 11) + + dot_12 = vec1.dot(vec2) + + # prints 76 + print(dot_12) + +.. method:: Vector2.rotate(self, *args, **kwargs) + +The named argument "degrees" or "radians" may be passed in to rotate +this vector by the specified amount in degrees (or radians), +respectively. If both are omitted, the first unnamed argument is +assummed to be the amount to rotate in radians. + +Additionally, the named argument "about" may be passed in to specify +about what the vector should be rotated. If omitted then the first +unconsumed unnamed argument is assumed to be the vector. If there are +no unconsumed unamed arguments then the origin is assumed. + +Examples: + +.. code-block::python + + from pygorithm.geometry import vector2 + import math + + vec1 = vector2.Vector2(1, 0) + + vec2 = vec1.rotate(math.pi * 0.25) + + # prints <0.707, 0.707> + print(vec2) + + vec3 = vec1.rotate(degrees = 45) + + # prints <0.707, 0.707> + print(vec3) + + # The following operations are all identical + + vec4 = vec1.rotate(math.pi, vector2.Vector2(1, 1)) + vec5 = vec1.rotate(radians = math.pi, about = vector2.Vector2(1, 1)) + vec6 = vec1.rotate(degrees = 180, about = vector2.Vector2(1, 1)) + vec7 = vec1.rotate(vector2.Vector2(1, 1), degrees = 180) + + # prints <1, 2> + print(vec4) + +.. method:: Vector2.normalize(self) + +- **Return Value** : a `Vector2` in the same direction as this one with a magnitude of 1 + +Example: + +.. code-block::python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(2, 0) + + vec2 = vec1.normalize() + + # prints <1, 0> + print(vec2) + +* Miscellaneous + +.. method:: vector2.magnitude(self) + +- **Return Value** : a `numeric` magnitude of this vector + +Example: + +.. code-block::python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(3, 4) + magn = vec1.magnitude() + + # prints 5 + print(magn) + +Line2 +----- + +.. class:: Line2 + +Defines a two-dimensional directed line segment defined by two points. +This class is mostly used as a way to cache information that is +regularly required when working on geometrical problems. + +.. note:: + + Lines should be used as if they were completely immutable to ensure + correctness. All attributes of Line2 can be reconstructed from the two + points, and thus cannot be changed on their own and must be recalculated + if there were any changes to `start` or `end`. + +.. note:: + + To prevent unnecessary recalculations, many functions on lines accept an + 'offset' argument, which is used to perform calculations on lines that + are simply shifts of other lines. + +.. attribute:: Line2.start + + `Vector2` the start of this line + +.. attribute:: Line2.end + + `Vector2` the end of this line + +.. attribute:: Line2.delta + + `Vector2` from start to end + +.. attribute:: Line2.axis + + `Vector2` normalized `delta` + +.. attribute:: Line2.normal + + `Vector2` normalized normal of `axis` + +.. attribute:: Line2.magnitude_squared + + `numerical` square of the magnitude of the line + +.. attribute:: Line2.magnitude + + `numerical` magnitude of the line + +.. attribute:: Line2.min_x + + `numerical` minimum x-value on the line + +.. attribute:: Line2.min_y + + `numerical` minimum y-value on the line + +.. attribute:: Line2.max_x + + `numerical` maximum x-value on the line + +.. attribute:: Line2.max_y + + `numerical` maximum y-value on the line + +.. attribute:: Line2.slope + + `numerical` (including +inf and -inf) slope of the line + +.. attribute:: Line2.y_intercept + + `numerical or None` y_intercept of the line (or None if `vertical`) + +.. attribute:: Line2.horizontal + + `bool` true if ``slope == 0``, false otherwise + +.. attribute:: Line2.vertical + + `bool` true if ``slope == float('+inf') or slope == float('-inf')``, false otherwise + +.. staticmethod:: intersects_line(line1, line2, offset1, offset2) + + - **line1** - `Line2` first line + - **line2** - `Line2` second line + - **offset1** - `Vector2` offset of first line + - **offset2** - `Vector2` offset of second line + - **Return Value** - `bool, bool` touches, overlaps + + Determines if the two lines at the specified offsets are touching and/or + overlapping. Two lines touch if they share endpoints, two lines overlap + if they intersect on any point that is not an endpoint. + +Axis-Aligned Line +----------------- + +This class provides functions related to axis aligned lines as well as +acting as a convienent container for them. In this context, an axis +aligned line is a two-dimensional line that is defined by an axis and +length on that axis, rather than two points. When working with two lines +defined as such that have the same axis, many calculations are +simplified. + +.. class:: AxisAlignedLine + +Defines an undirected two-dimensional line by an axis, a minimum and a maximum. + +.. note:: + + Though it requires the same amount of memory as a simple representation of + a 2 dimensional line (4 numerics), it cannot describe all types of lines. + All lines that can be defined this way intersect (0, 0). + +.. note:: + + `min` and `max` are referring to nearness to negative and positive infinity, + respectively. The absolute value of `min` may be larger than `max`. + +.. note:: + + `AxisAlignedLine`s are an intermediary operation, so offsets should be baked + into them. + +.. attribute AxisAlignedLine.axis + + `Vector2` the axis this line is along. + +.. attribute AxisAlignedLine.min + + `numeric` the number (closest to negative infinity) that is still on this + line when walked along the axis. If negative, it may have a greater absolute + value than max and implies walking in the opposite direction of the axis. + +.. attribute AxisAlignedLine.max + + `numeric` the number (closest to positive infinity) that is still on this + line when walked along the axis. If negative, it may have a smaller absolute + value than min and implies walking in the opposite direction of the axis. + +.. method:: AxisAlignedLine(self, axis, point1, point2) + + - **axis** - `Vector2` axis this line is on + - **point1** - `numeric` one point on this line + - **point2** - `numeric` a different point on this line + + Constructs an axis aligned line with the appropriate min and max. + +.. staticmethod:: AxisAlignedLine.intersects(line1, line2) + + - **line1** - `AxisAlignedLine` the first line + - **line2** - `AxisAlignedLine` the second line + - **Return Value** - `bool, bool` touching, overlapping + + Determines if the two lines are touching and if they are, if + they are overlapping. + + .. note:: + + It is rarely faster to check intersection before finding intersection if + you will need the minimum translation vector, since they do mostly + the same operations. + +.. staticmethod:: AxisAlignedLine.find_intersection(line1, line2) + + - **line1** - `AxisAlignedLine` the first line + - **line2** - `AxisAlignedLine` the second line + - **Return Value** - `bool, numeric or None` touching, mtv against 1 + + Determines if the two lines are touching, and then returns the + minimum translation vector to move line 1 along axis. If the result + is negative, it means line 1 should be moved in the opposite direction + of the axis by the magnitude of the result. + + Returns `true, None` if the lines are touching. + + .. note:: + + Ensure your program correctly handles `true, None` + +.. staticmethod:: AxisAlignedLine.contains_point(line, point) + + - **line** - `AxisAlignedLine` the line + - **point** - `numeric` the point + - **Return Value** - `bool` if point is contained (or an edge of) the line + + Determines if the line contains the specified point, which is assumed + to be defined the same way as min and max. + +Concave Polygon +--------------- + +.. class:: Polygon2 + +Defines a concave polygon defined by a list of points such that each +adjacent pair of points form a line, the line from the last point to +the first point form a line, and the lines formed from the smaller +index to the larger index will walk clockwise around the polygon. + +.. note:: + + Polygons should be used as if they were completely immutable to + ensure correctness. All attributes of Polygon2 can be reconstructed + from the points array, and thus cannot be changed on their own and + must be recalculated if there were any changes to `points`. + +.. note:: + + To reduce unnecessary recalculations, Polygons notably do not have + an easily modifiable position. However, where relevant, the class + methods will accept offsets to the polygons. + +.. note:: + + Unfortunately, operations on rotated polygons require recalculating + the polygon based on its rotated points. This should be avoided + unless necessary through the use of Axis-Aligned Bounding Boxes + and similar tools. + +.. attribute:: Polygon2.points + + The ordered list of `Vector2`s in this polygon. + +.. attribute:: Polygon2.lines + + The ordered list of `Line2`s in this polygon. + +.. attribute:: Polygon2.normals + + The orders list of normal `Vector2`s corresponding to the `Line2`'s + in lines + +.. attribute:: Polygon2.center + + The `Vector2` center of the polygon. Lazily initialized. + +.. attribute:: Polygon2.aabb + + The `Rect2` bounding box of this polygon. Lazily initialized. + +.. method:: Polygon2(self, points) + + - **points** - The ordered list of points in this polygon. + +.. staticmethod:: Polygon2.contains_point(polygon, offset, vec) + + - **polygon** - polygon to check + - **offset** - offset of the polygon + - **vec** - the vector to check if is inside the polyogn at offset + + Determines if the polygon contains vector when at the specified offset. + +.. staticmethod:: Polygon2.contains_polygon(poly1, poly2, offset1, offset2) + + - **poly1** - The polygon that might contain poly2 + - **poly2** - The polygon that might be contained in poly1 + - **offset1** - The position of the first polygon + - **offset2** - The position of the second polygon + - **Return Value** - `bool` true if poly2 is completely contained in poly1, false otherwise + + Determines if the second polygon is completely contained in the first + polygon. + +.. staticmethod:: Polygon2.find_intersection(poly1, poly2, offset1, offset2) + + - **poly1** - The first polygon + - **poly2** - The second polygon + - **offset1** - The offset of the first polygon + - **offset2** - The offset of the second polygon + - **Return Value** - `bool, None or Vector2` If there is intersection, the MTV for poly1 or None + + Determines if the two polygons intersect, and how to prevent + intersection by a move on the first polygon. If the polygons + do not intersect, returns `false, None`. If the polygons + intersect and overlap, returns `true, Vector2`. If the polygons + are touching but do not overlap, returns `true, None`. + + .. note:: + + Ensure that the result `true, None` is handled correctly. + + + + + + + \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 3792cc0..3088922 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -28,6 +28,7 @@ Quick Links Fibonacci Math Pathfinding + Geometry Quick Start Guide ----------------- diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 5055131..07257f4 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -64,4 +64,5 @@ 'sorting', 'string', 'pathfinding', + 'geometry' ] diff --git a/pygorithm/geometry/__init__.py b/pygorithm/geometry/__init__.py new file mode 100644 index 0000000..6b9a20f --- /dev/null +++ b/pygorithm/geometry/__init__.py @@ -0,0 +1,14 @@ +""" +Collection of geometry examples +""" +from . import vector2 +from . import axisall +from . import line2 +from . import polygon2 + +__all__ = [ + 'vector2', + 'axisall', + 'line2', + 'polygon2' +] \ No newline at end of file diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py new file mode 100644 index 0000000..e69de29 diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py new file mode 100644 index 0000000..e69de29 diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py new file mode 100644 index 0000000..e69de29 diff --git a/pygorithm/geometry/vector2.py b/pygorithm/geometry/vector2.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_geometry.py b/tests/test_geometry.py new file mode 100644 index 0000000..e69de29 From 04d01e5461817cdd7c0d456dff963c981f280f03 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 22 Aug 2017 11:49:05 -0700 Subject: [PATCH 091/251] Minor documentation improvement --- docs/Geometry.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index f93c83d..97b7b58 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -1,6 +1,6 @@ -=== +======== Geometry -=== +======== Some geometrical shapes and operations From 507e8a06528086e741f501dbad9a2319deb254d8 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 22 Aug 2017 11:53:41 -0700 Subject: [PATCH 092/251] More documentation fixes --- docs/Geometry.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 97b7b58..3e2ed63 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -153,7 +153,7 @@ Scales the vector by the specified factor. Will throw an exception if scale_factor is not a numeric - it will not perform the dot product (use `dot` for that) Examples: -.. code-block::python +.. code-block:: python from pygorithm.geometry import vector2 @@ -238,7 +238,7 @@ no unconsumed unamed arguments then the origin is assumed. Examples: -.. code-block::python +.. code-block:: python from pygorithm.geometry import vector2 import math @@ -271,7 +271,7 @@ Examples: Example: -.. code-block::python +.. code-block:: python from pygorithm.geometry import vector2 @@ -290,7 +290,7 @@ Example: Example: -.. code-block::python +.. code-block:: python from pygorithm.geometry import vector2 From b0eb369a2b8bbcd4d5be0e70384aa3e144913fdd Mon Sep 17 00:00:00 2001 From: sharadbhat Date: Wed, 23 Aug 2017 00:30:29 +0530 Subject: [PATCH 093/251] Added interpolation_search --- pygorithm/searching/interpolation_search.py | 65 +++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 pygorithm/searching/interpolation_search.py diff --git a/pygorithm/searching/interpolation_search.py b/pygorithm/searching/interpolation_search.py new file mode 100644 index 0000000..49e8896 --- /dev/null +++ b/pygorithm/searching/interpolation_search.py @@ -0,0 +1,65 @@ +""" +Author: SHARAD BHAT +Created On: 22nd August 2017 + + - Best O() + - Average O(log(logn)) + - Worst O(n) +""" + +import inspect + +def search(_list, target): + """ + This function performs an interpolation search + on a sorted list and returns the index + of item if successful else returns False + + :param _list: list to search + :param target: item to search for + :return: index of item if successful else returns False + """ + + if type(_list) is not list: + raise TypeError("binary search only excepts lists, not {}".format(str(type(_list)))) + + # First element + low = 0 + # Last element + high = len(_list) - 1 + + # List is assumed to be sorted + while low <= high and target >= _list[low] and target <= _list[high]: + position = low + int(((float(high - low) / (_list[high] - _list[low])) * (target - _list[low]))) + + if _list[position] == target: + return position + + # If target is greater, search in right half + if _list[position] < target: + low = position + 1 + + # If target is smaller, search in left half + else: + high = position - 1 + + return False + + + +def time_complexities(): + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(1), Average Case: O(log(logn)), Worst Case: O(logn)" + + +def get_code(): + """ + easily retrieve the source code + of the function + :return: source code + """ + return inspect.getsource(search) From 0fdbe1c794cc717638662fb54ceccddbc5e5c8d0 Mon Sep 17 00:00:00 2001 From: Sharad Bhat Date: Wed, 23 Aug 2017 00:40:22 +0530 Subject: [PATCH 094/251] Update interpolation_search.py --- pygorithm/searching/interpolation_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/searching/interpolation_search.py b/pygorithm/searching/interpolation_search.py index 49e8896..66f047b 100644 --- a/pygorithm/searching/interpolation_search.py +++ b/pygorithm/searching/interpolation_search.py @@ -2,7 +2,7 @@ Author: SHARAD BHAT Created On: 22nd August 2017 - - Best O() + - Best O(1) - Average O(log(logn)) - Worst O(n) """ From 6c9fecc27d9f1b2ab195f8a2ec6d811b52ee3c42 Mon Sep 17 00:00:00 2001 From: Sharad Bhat Date: Wed, 23 Aug 2017 01:48:02 +0530 Subject: [PATCH 095/251] Update interpolation_search.py --- pygorithm/searching/interpolation_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/searching/interpolation_search.py b/pygorithm/searching/interpolation_search.py index 66f047b..cce030e 100644 --- a/pygorithm/searching/interpolation_search.py +++ b/pygorithm/searching/interpolation_search.py @@ -21,7 +21,7 @@ def search(_list, target): """ if type(_list) is not list: - raise TypeError("binary search only excepts lists, not {}".format(str(type(_list)))) + raise TypeError("interpolation search only excepts lists, not {}".format(str(type(_list)))) # First element low = 0 From f77f4cc833dac4adcd2b6fb43366976d68e830f2 Mon Sep 17 00:00:00 2001 From: Sharad Bhat Date: Wed, 23 Aug 2017 01:51:48 +0530 Subject: [PATCH 096/251] Update interpolation_search.py --- pygorithm/searching/interpolation_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/searching/interpolation_search.py b/pygorithm/searching/interpolation_search.py index cce030e..352c41d 100644 --- a/pygorithm/searching/interpolation_search.py +++ b/pygorithm/searching/interpolation_search.py @@ -21,7 +21,7 @@ def search(_list, target): """ if type(_list) is not list: - raise TypeError("interpolation search only excepts lists, not {}".format(str(type(_list)))) + raise TypeError("interpolation search only expects lists, not {}".format(str(type(_list)))) # First element low = 0 From cf0fa503782538c34614986d45fe1c14bae2d9c7 Mon Sep 17 00:00:00 2001 From: Sharad Bhat Date: Wed, 23 Aug 2017 01:53:00 +0530 Subject: [PATCH 097/251] Update interpolation_search.py --- pygorithm/searching/interpolation_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/searching/interpolation_search.py b/pygorithm/searching/interpolation_search.py index 352c41d..beb8f9f 100644 --- a/pygorithm/searching/interpolation_search.py +++ b/pygorithm/searching/interpolation_search.py @@ -21,7 +21,7 @@ def search(_list, target): """ if type(_list) is not list: - raise TypeError("interpolation search only expects lists, not {}".format(str(type(_list)))) + raise TypeError("interpolation search only accpets lists, not {}".format(str(type(_list)))) # First element low = 0 From 0e240fdef8135e112ebc5ab9a5c560fde760a9bf Mon Sep 17 00:00:00 2001 From: Sharad Bhat Date: Wed, 23 Aug 2017 01:53:22 +0530 Subject: [PATCH 098/251] Update interpolation_search.py --- pygorithm/searching/interpolation_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/searching/interpolation_search.py b/pygorithm/searching/interpolation_search.py index beb8f9f..f11e35a 100644 --- a/pygorithm/searching/interpolation_search.py +++ b/pygorithm/searching/interpolation_search.py @@ -21,7 +21,7 @@ def search(_list, target): """ if type(_list) is not list: - raise TypeError("interpolation search only accpets lists, not {}".format(str(type(_list)))) + raise TypeError("interpolation search only accepts lists, not {}".format(str(type(_list)))) # First element low = 0 From c7ad063c8cbf8925be903bd713a0af8c00ccd244 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 23 Aug 2017 07:22:20 +0530 Subject: [PATCH 099/251] Removed docs/Pathing.rst --- docs/Pathing.rst | 76 ------------------------------------------------ 1 file changed, 76 deletions(-) delete mode 100644 docs/Pathing.rst diff --git a/docs/Pathing.rst b/docs/Pathing.rst deleted file mode 100644 index 974d436..0000000 --- a/docs/Pathing.rst +++ /dev/null @@ -1,76 +0,0 @@ -==== -Pathing -==== - -Some pathfinding algorithms and their implementations - -Quick Start Guide ------------------ - -.. code-block:: python - - # import the required pathing algorithm - from pygorithm.pathing import dijkstra - - # import a graph data structure - from pygorithm.data_structures import graph - - # initialize the graph with nodes from (0, 0) to (4, 4) - # with weight corresponding to distance (orthogonal - # is 1, diagonal is sqrt(2)) - my_graph = graph.WeightedUndirectedGraph() - my_graph.gridify(5, 1) - - # make the graph more interesting by removing along the - # x=2 column except for (2,4) - my_graph.remove_edge((2, 0)) - my_graph.remove_edge((2, 1)) - my_graph.remove_edge((2, 2)) - my_graph.remove_edge((2, 3)) - - # calculate a path - my_path = dijkstra.find_path(my_graph, (0, 0), (3, 0)) - - # print path - print(' -> '.join(my_path)) - # (0, 0) -> (1, 1) -> (0, 2) -> (1, 3) -> (2, 4) -> (3, 3) -> (3, 2) -> (3, 1) -> (3, 0) - -Features --------- - -* Algorithms available: - - Dijkstra (dijkstra) - - -* To see all the available functions in a module there is a `modules()` function available. For example, - -.. code:: python - - >>> from pygorithm.pathfinding import modules - >>> modules.modules() - ['dijkstra'] - -* Get the code used for any of the algorithm - -.. code-block:: python - - from pygorithm.pathing import dijkstra - - # for printing the source code of Dijkstra object - print(dijkstra.Dijikstra.get_code()) - -Dijkstra ---- - -* Functions and their uses - -.. function:: dijkstra.find_path(pygorithm.data_structures.WeightedUndirectedGraph, vertex, vertex) - -- **pygorithm.data_structures.WeightedUndirectedGraph** : acts like an object with `graph` (see WeightedUndirectedGraph) -- **vertex** : any hashable type for the start of the path -- **vertex** : any hashable type for the end of the path -- **Return Value** : returns a `List` of vertexes (of the same type as the graph) starting with from and going to to. This algorithm does *not* respect weights. - -.. function:: dijkstra.get_code() - -- **Return Value** : returns the code for the ``Dijkstra`` object \ No newline at end of file From da954a0f9ff5f937ff3cc9a9f729418d6480b70f Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 23 Aug 2017 07:22:34 +0530 Subject: [PATCH 100/251] Updated docs/Math.rst --- docs/Math.rst | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/Math.rst b/docs/Math.rst index 5493f25..18ea15a 100644 --- a/docs/Math.rst +++ b/docs/Math.rst @@ -70,3 +70,43 @@ Sieve of Eratostenes .. function:: sieve_of_eratostenes.get_code() - **Return Value** : returns the code for the ``sieve_of_eratostenes.sieve_of_eratostenes()`` function + +Factorial +--------- + +* Functions and their uses + +.. function:: factorial.factorial(number) + +- **number** : integer number of which factorial is to be found +- **Return Value** : returns the integer of factorial of the number + +.. function:: factorial.get_code() + +- **Return Value** : returns the code for the ``factorial.factorial()`` function + + +Conversion +---------- + +* Functions and their uses + +.. function:: conversion.decimal_to_binary(number) + +- **number** : decimal number in string or integer format +- **Return Value** : returns the string of equivalent binary number + +.. function:: conversion.binary_to_decimal(number) + +- **number** : binary number in string or integer format +- **Return Value** : returns the integer of equivalent decimal number + +.. function:: conversion.decimal_to_hex(number) + +- **number** : decimal number in string or integer format +- **Return Value** : returns the string of equivalent hex number + +.. function:: conversion.hex_to_decimal(number) + +- **number** : hex number in string or integer format +- **Return Value** : returns the integer of equivalent decimal number From 299ab2bedbf4b546ee41d2038a3e23308701d52c Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 23 Aug 2017 07:22:51 +0530 Subject: [PATCH 101/251] Updated docs/Searching.rst for interpolation search --- docs/Searching.rst | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/docs/Searching.rst b/docs/Searching.rst index 7abe90c..b0909ca 100644 --- a/docs/Searching.rst +++ b/docs/Searching.rst @@ -91,12 +91,12 @@ Binary Search * Functions and their uses -.. function:: binary_search.search(List, key) +.. function:: binary_search.search(_list, target) :module: pygorithm.searching -- **List** : *Sorted* list in which the key is to be searched -- **key** : key to be searched in the list -- **Return Value** : returns the position (index) of the key if key found, else returns -1 +- **_list** : *Sorted* list in which the target is to be searched +- **target** : target to be searched in the list +- **Return Value** : returns the position (index) of the target if target found, else returns False .. function:: binary_search.time_complexities() @@ -111,11 +111,11 @@ Linear Search * Functions and their uses -.. function:: linear_search.search(List, key) +.. function:: linear_search.search(_list, target) -- **List** : the list in which item is to searched -- **key** : key to be searched in the list -- **Return Value** : returns the position (index) of the key if key found, else returns -1 +- **_list** : the list in which item is to searched +- **target** : target to be searched in the list +- **Return Value** : returns the position (index) of the target if target found, else returns False .. function:: linear_search.time_complexities() @@ -182,3 +182,23 @@ Quick Select Search .. function:: quick_select.get_code() - **Return Value** : returns the code for the ``quick_select.search()`` function + +Interpolation Search +-------------------- + +* Functions and their uses + +.. function:: interpolation_search.search(_list, target) + :module: pygorithm.searching + +- **_list** : *Sorted* list in which the target is to be searched +- **target** : target to be searched in the list +- **Return Value** : returns the position (index) of the target if target found, else returns False + +.. function:: interpolation_search.time_complexities() + +- **Return Value** : returns time complexities (Best, Average, Worst) + +.. function:: interpolation_search.get_code() + +- **Return Value** : returns the code for the ``interpolation_search.search()`` function From ecd5976105fee54594574d4b37e6e1ee5e064d7e Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 23 Aug 2017 07:23:11 +0530 Subject: [PATCH 102/251] Added tests for factorial and conversions --- tests/test_math.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/test_math.py b/tests/test_math.py index 26e3c4d..7f36ff1 100644 --- a/tests/test_math.py +++ b/tests/test_math.py @@ -3,7 +3,9 @@ from pygorithm.math import ( lcm, lcm_using_gcd, - sieve_of_eratosthenes) + sieve_of_eratosthenes, + factorial, + conversion) class TestLCM(unittest.TestCase): def test_lcm(self): @@ -16,5 +18,22 @@ class TestSieveOfEratosthenes(unittest.TestCase): def test_sieve_of_eratosthenes(self): self.assertEqual(sieve_of_eratosthenes.sieve_of_eratosthenes(10), [2, 3, 5, 7]) +class TestFactorial(unittest.TestCase): + def test_factorial(self): + self.assertEqual(factorial.factorial(10), 3628800) + +class TestConversion(unittest.TestCase): + def test_dec_to_bin(self): + self.assertEqual(conversion.decimal_to_binary(2), '10') + + def test_bin_to_dec(self): + self.assertEqual(conversion.binary_to_decimal('1010'), 10) + + def test_dec_to_hex(self): + self.assertEqual(conversion.decimal_to_hex(30), '1E') + + def test_hex_to_dex(self): + self.assertEqual(conversion.hex_to_decimal('1E'), 30) + if __name__ == '__main__': unittest.main() From 305d1f991d20464d950437633b43e672dbfa0996 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 23 Aug 2017 07:23:44 +0530 Subject: [PATCH 103/251] Added binary to decimal, decimal to binary, hex to decimal and decimal to hex implementations --- pygorithm/math/conversion.py | 102 +++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 pygorithm/math/conversion.py diff --git a/pygorithm/math/conversion.py b/pygorithm/math/conversion.py new file mode 100644 index 0000000..64446ba --- /dev/null +++ b/pygorithm/math/conversion.py @@ -0,0 +1,102 @@ +""" +Author: OMKAR PATHAK +Created On: 23 August 2017 +""" + +def decimal_to_binary(number): + ''' + This function calculates the binary of the given decimal number + :param number: decimal number in string or integer format + :return : string of the equivalent binary number + + Algo: + 1. Divide the decimal number by 2. Treat the division as an integer division. + 2. Write down the remainder (in binary). + 3. Divide the result again by 2. Treat the division as an integer division. + 4. Repeat step 2 and 3 until result is 0. + 5. The binary value is the digit sequence of the remainders from the last to first. + ''' + if isinstance(number, str): + number = int(number) + binary = [] + while number >= 1: + remainder = number % 2 + binary.append(remainder) + number = number // 2 + + return ''.join(map(str, binary[::-1])) + +def binary_to_decimal(number): + ''' + This function calculates the decimal of the given binary number + :param number: decimal number in string or integer format + :return : integer of the equivalent decimal number + + Algo: + 1. Get the last digit of the binary number. + 2. Multiply the current digit with (2^power), store the result. + 3. Increment power by 1. + 4. Repeat from step 2 until all digits have been multiplied. + 5. Sum the result of step 2 to get the answer number. + ''' + decimal = [] + number = list(str(number)[::-1]) + for i in range(len(number)): + decimal.append(int(number[i]) * (2 ** i)) + + return sum(decimal) + +def decimal_to_hex(number): + ''' + This function calculates the hex of the given decimal number + :param number: decimal number in string or integer format + :return : string of the equivalent hex number + + Algo: + 1. Divide the decimal number by 16. Treat the division as an integer division. + 2. Write down the remainder (in hexadecimal). + 3. Divide the result again by 16. Treat the division as an integer division. + 4. Repeat step 2 and 3 until result is 0. + 5. The hex value is the digit sequence of the remainders from the last to first. + ''' + if isinstance(number, str): + number = int(number) + hexadec = [] + hex_equivalents = {10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'} + while number >= 1: + remainder = number % 16 + if remainder < 10: + hexadec.append(remainder) + elif remainder >= 10: + hexadec.append(hex_equivalents[remainder]) + + number = number // 16 + + return ''.join(map(str, hexadec[::-1])) + +def hex_to_decimal(number): + ''' + This function calculates the decimal of the given hex number + :param number: hex number in string or integer format + :return : integer of the equivalent decimal number + + Algo: + 1. Get the last digit of the hex number. + 2. Multiply the current digit with (16^power), store the result. + 3. Increment power by 1. + 4. Repeat from step 2 until all digits have been multiplied. + 5. Sum the result of step 2 to get the answer number. + ''' + decimal = [] + decimal_equivalents = {'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15} + number = list(str(number)[::-1]) + for i in range(len(number)): + try: + if int(number[i]) < 10: + decimal.append(int(number[i]) * (16 ** i)) + except ValueError: + decimal.append(decimal_equivalents[number[i]] * (16 ** i)) + + return sum(decimal) + +print(hex_to_decimal('7DE')) From bd269f295fb40bbe1be91e1ac8675aeb36617d75 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 23 Aug 2017 07:24:14 +0530 Subject: [PATCH 104/251] Added factorial implementation (recursive) --- pygorithm/math/factorial.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 pygorithm/math/factorial.py diff --git a/pygorithm/math/factorial.py b/pygorithm/math/factorial.py new file mode 100644 index 0000000..fc054b5 --- /dev/null +++ b/pygorithm/math/factorial.py @@ -0,0 +1,19 @@ +""" +Author: OMKAR PATHAK +Created On: 22 August 2017 +""" + +def factorial(number): + ''' This function calculates the factorial of a number ''' + if not isinstance(number, int): + raise Exception('Enter an integer number to find the factorial') + if number == 1 or number == 0: + return 1 + else: + return number * factorial(number - 1) + +def get_code(): + """ + returns the code for the factorial function + """ + return inspect.getsource(factorial) From 9aa38511de9aa6611bfd4d69d2481ec2f11ff8cf Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 23 Aug 2017 07:28:07 +0530 Subject: [PATCH 105/251] Updated docs --- docs/Math.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/Math.rst b/docs/Math.rst index 18ea15a..52abe77 100644 --- a/docs/Math.rst +++ b/docs/Math.rst @@ -24,6 +24,11 @@ Features * Algorithms available: - LCM (lcm) - Sieve of Eratostenes (sieve_of_eratosthenes) + - Factorial + - Binary To decimal conversion + - Decimal to binary conversion + - Hex To decimal conversion + - Decimal to hex conversion * To see all the available functions in a module there is a `modules()` function available. For example, From 436227bf6b04e90cb83aed08f79a0b27a7da097b Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 08:24:25 -0700 Subject: [PATCH 106/251] Attempt to use autoclass This is an attempt to use autoclass for axis-aligned line. This should be nearly parity and, to help compare, includes both the auto generated documentation and the old style documentation. This also fixes some non-command wording in axis-aligned line * docs/Geometry.rst - Fix incorrect reST and minor wording improvements. Also add autoclass for AxisAlignedLine. * pygorithm/geometry/axisall.py - Add function skeletons and (hopefully) something resembling parity to documentation in Geometry.rst --- docs/Geometry.rst | 36 ++++++---- pygorithm/geometry/axisall.py | 131 ++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+), 14 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 3e2ed63..303abb5 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -59,7 +59,7 @@ Features Vector2 ------- -.. class: Vector2 +.. class:: Vector2 Defines a simple two-dimensional, mutable vector. @@ -229,12 +229,12 @@ Example: The named argument "degrees" or "radians" may be passed in to rotate this vector by the specified amount in degrees (or radians), respectively. If both are omitted, the first unnamed argument is -assummed to be the amount to rotate in radians. +assumed to be the amount to rotate in radians. Additionally, the named argument "about" may be passed in to specify about what the vector should be rotated. If omitted then the first unconsumed unnamed argument is assumed to be the vector. If there are -no unconsumed unamed arguments then the origin is assumed. +no unconsumed unnamed arguments then the origin is assumed. Examples: @@ -417,24 +417,24 @@ Defines an undirected two-dimensional line by an axis, a minimum and a maximum. .. note:: `min` and `max` are referring to nearness to negative and positive infinity, - respectively. The absolute value of `min` may be larger than `max`. + respectively. The absolute value of `min` may be larger than that of `max`. .. note:: - `AxisAlignedLine`s are an intermediary operation, so offsets should be baked + AxisAlignedLines are an intermediary operation, so offsets should be baked into them. -.. attribute AxisAlignedLine.axis +.. attribute:: AxisAlignedLine.axis `Vector2` the axis this line is along. -.. attribute AxisAlignedLine.min +.. attribute:: AxisAlignedLine.min `numeric` the number (closest to negative infinity) that is still on this line when walked along the axis. If negative, it may have a greater absolute value than max and implies walking in the opposite direction of the axis. -.. attribute AxisAlignedLine.max +.. attribute:: AxisAlignedLine.max `numeric` the number (closest to positive infinity) that is still on this line when walked along the axis. If negative, it may have a smaller absolute @@ -446,7 +446,7 @@ Defines an undirected two-dimensional line by an axis, a minimum and a maximum. - **point1** - `numeric` one point on this line - **point2** - `numeric` a different point on this line - Constructs an axis aligned line with the appropriate min and max. + Construct an axis aligned line with the appropriate min and max. .. staticmethod:: AxisAlignedLine.intersects(line1, line2) @@ -454,8 +454,10 @@ Defines an undirected two-dimensional line by an axis, a minimum and a maximum. - **line2** - `AxisAlignedLine` the second line - **Return Value** - `bool, bool` touching, overlapping - Determines if the two lines are touching and if they are, if - they are overlapping. + Determine if the two lines are touching and if they are, if + they are overlapping. Lines are touching if they share only + one end point, whereas they are overlapping if they share + infinitely many points. .. note:: @@ -469,7 +471,7 @@ Defines an undirected two-dimensional line by an axis, a minimum and a maximum. - **line2** - `AxisAlignedLine` the second line - **Return Value** - `bool, numeric or None` touching, mtv against 1 - Determines if the two lines are touching, and then returns the + Determine if the two lines are touching, and then returns the minimum translation vector to move line 1 along axis. If the result is negative, it means line 1 should be moved in the opposite direction of the axis by the magnitude of the result. @@ -484,11 +486,17 @@ Defines an undirected two-dimensional line by an axis, a minimum and a maximum. - **line** - `AxisAlignedLine` the line - **point** - `numeric` the point - - **Return Value** - `bool` if point is contained (or an edge of) the line + - **Return Value** - `bool, bool` if point is contained, if the point is an edge - Determines if the line contains the specified point, which is assumed + Determine if the line contains the specified point, which is assumed to be defined the same way as min and max. +Axis-Aligned Line (autogen) +--------------------------- + +.. autoclass:: pygorithm.geometry.AxisAlignedLine + :members: + Concave Polygon --------------- diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py index e69de29..211b396 100644 --- a/pygorithm/geometry/axisall.py +++ b/pygorithm/geometry/axisall.py @@ -0,0 +1,131 @@ +""" +axisall + +Author: Timothy Moore + +Defines a class for handling axis-aligned two-dimensional lines +segments. This class simplifies intermediary calculations in +SAT and similiar algorithms. + +These are 2dimensional axis-aligned objects +https://en.wikipedia.org/wiki/Axis-aligned_object +""" + +class AxisAlignedLine(object): + """ + Define an axis aligned line. + + This class provides functions related to axis aligned lines as well as + acting as a convienent container for them. In this context, an axis + aligned line is a two-dimensional line that is defined by an axis and + length on that axis, rather than two points. When working with two lines + defined as such that have the same axis, many calculations are + simplified. + + .. note:: + + Though it requires the same amount of memory as a simple representation of + a 2 dimensional line (4 numerics), it cannot describe all types of lines. + All lines that can be defined this way intersect (0, 0). + + .. note:: + + `min` and `max` are referring to nearness to negative and positive infinity, + respectively. The absolute value of `min` may be larger than that of `max`. + + .. note:: + + AxisAlignedLines are an intermediary operation, so offsets should be baked + into them. + + :ivar axis: the axis this line is on + :ivar min: the point closest to negative infinity + :ivar max: the point closest to positive infinity + """ + + def __init__(self, axis, point1, point2): + """ + Construct an axis aligned line with the appropriate min and max. + + :param axis: axis this line is on + :type axis: :class:`pygorithm.geometry.Vector2` + :param point1: one point on this line + :type point1: :class:`numbers.Number` + :param point2: a different point on this line + :type point2: :class:`numbers.Number` + """ + + pass + + @staticmethod + def intersects(line1, line2): + """ + Determine if the two lines intersect + + Determine if the two lines are touching and if they are, if + they are overlapping. Lines are touching if they share only + one end point, whereas they are overlapping if they share + infinitely many points. + + .. note:: + + It is rarely faster to check intersection before finding intersection if + you will need the minimum translation vector, since they do mostly + the same operations. + + :param line1: the first line + :type line1: :class:`pygorithm.geometry.AxisAlignedLine` + :param line2: the second line + :type line2: :class:`pygorithm.geometry.AxisAlignedLine` + :returns: touching, overlapping + :rtype: bool, bool + """ + + pass + + @staticmethod + def find_intersection(line1, line2): + """ + Calculate the MTV between line1 and line2 to move line1 + + Determine if the two lines are touching, and then returns the + minimum translation vector to move line 1 along axis. If the result + is negative, it means line 1 should be moved in the opposite direction + of the axis by the magnitude of the result. + + Returns `true, None` if the lines are touching. + + .. note:: + + Ensure your program correctly handles `true, None` + + + :param line1: the first line + :type line1: :class:`pygorithm.geometry.AxisAlignedLine` + :param line2: the second line + :type line2: :class:`pygorithm.geometry.AxisAlignedLine` + :returns: touching, mtv against 1 + :rtype: bool, :class:`numbers.Number` or None + """ + + pass + + @staticmethod + def contains_point(line, point): + """ + Determine if the line contains the specified point. + + The point must be defined the same way as min and max. + + .. tip:: + + It is not possible for both returned booleans to be `True`. + + :param line: the line + :type line: :class:`pygorithm.geometry.AxisAlignedLine` + :param point: the point + :type point: :class:`numbers.Number` + :returns: if the point is an edge of the line, if the point is contained by the line + :rtype: bool, bool + """ + pass \ No newline at end of file From bddb13c58f9553b7085ddbdfc1e90d47b3076f71 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 08:35:26 -0700 Subject: [PATCH 107/251] Fix some failing documentation This fixes the first wave of sphinx errors --- docs/Geometry.rst | 17 +++++++++++------ pygorithm/geometry/axisall.py | 12 ++++++------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 303abb5..9c6f547 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -491,10 +491,15 @@ Defines an undirected two-dimensional line by an axis, a minimum and a maximum. Determine if the line contains the specified point, which is assumed to be defined the same way as min and max. + .. tip:: + + It is not possible for both returned booleans to be `True`. + + Axis-Aligned Line (autogen) --------------------------- -.. autoclass:: pygorithm.geometry.AxisAlignedLine +.. autoclass:: pygorithm.geometry.axisall.AxisAlignedLine :members: Concave Polygon @@ -519,14 +524,14 @@ index to the larger index will walk clockwise around the polygon. To reduce unnecessary recalculations, Polygons notably do not have an easily modifiable position. However, where relevant, the class methods will accept offsets to the polygons. - + .. note:: Unfortunately, operations on rotated polygons require recalculating the polygon based on its rotated points. This should be avoided unless necessary through the use of Axis-Aligned Bounding Boxes and similar tools. - + .. attribute:: Polygon2.points The ordered list of `Vector2`s in this polygon. @@ -543,15 +548,15 @@ index to the larger index will walk clockwise around the polygon. .. attribute:: Polygon2.center The `Vector2` center of the polygon. Lazily initialized. - + .. attribute:: Polygon2.aabb The `Rect2` bounding box of this polygon. Lazily initialized. - + .. method:: Polygon2(self, points) - **points** - The ordered list of points in this polygon. - + .. staticmethod:: Polygon2.contains_point(polygon, offset, vec) - **polygon** - polygon to check diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py index 211b396..aeee5ea 100644 --- a/pygorithm/geometry/axisall.py +++ b/pygorithm/geometry/axisall.py @@ -48,7 +48,7 @@ def __init__(self, axis, point1, point2): Construct an axis aligned line with the appropriate min and max. :param axis: axis this line is on - :type axis: :class:`pygorithm.geometry.Vector2` + :type axis: :class:`pygorithm.geometry.vector2.Vector2` :param point1: one point on this line :type point1: :class:`numbers.Number` :param point2: a different point on this line @@ -74,9 +74,9 @@ def intersects(line1, line2): the same operations. :param line1: the first line - :type line1: :class:`pygorithm.geometry.AxisAlignedLine` + :type line1: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :param line2: the second line - :type line2: :class:`pygorithm.geometry.AxisAlignedLine` + :type line2: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :returns: touching, overlapping :rtype: bool, bool """ @@ -101,9 +101,9 @@ def find_intersection(line1, line2): :param line1: the first line - :type line1: :class:`pygorithm.geometry.AxisAlignedLine` + :type line1: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :param line2: the second line - :type line2: :class:`pygorithm.geometry.AxisAlignedLine` + :type line2: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :returns: touching, mtv against 1 :rtype: bool, :class:`numbers.Number` or None """ @@ -122,7 +122,7 @@ def contains_point(line, point): It is not possible for both returned booleans to be `True`. :param line: the line - :type line: :class:`pygorithm.geometry.AxisAlignedLine` + :type line: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :param point: the point :type point: :class:`numbers.Number` :returns: if the point is an edge of the line, if the point is contained by the line From 05d1a2b09ed72dad117c5587455d2759609faf86 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 08:38:27 -0700 Subject: [PATCH 108/251] Remove duplicated documentation The auto-class documentation is as good or better! Removing old style documentation for Axis-Aligned Line --- docs/Geometry.rst | 102 ---------------------------------------------- 1 file changed, 102 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 9c6f547..f78f083 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -397,108 +397,6 @@ regularly required when working on geometrical problems. Axis-Aligned Line ----------------- -This class provides functions related to axis aligned lines as well as -acting as a convienent container for them. In this context, an axis -aligned line is a two-dimensional line that is defined by an axis and -length on that axis, rather than two points. When working with two lines -defined as such that have the same axis, many calculations are -simplified. - -.. class:: AxisAlignedLine - -Defines an undirected two-dimensional line by an axis, a minimum and a maximum. - -.. note:: - - Though it requires the same amount of memory as a simple representation of - a 2 dimensional line (4 numerics), it cannot describe all types of lines. - All lines that can be defined this way intersect (0, 0). - -.. note:: - - `min` and `max` are referring to nearness to negative and positive infinity, - respectively. The absolute value of `min` may be larger than that of `max`. - -.. note:: - - AxisAlignedLines are an intermediary operation, so offsets should be baked - into them. - -.. attribute:: AxisAlignedLine.axis - - `Vector2` the axis this line is along. - -.. attribute:: AxisAlignedLine.min - - `numeric` the number (closest to negative infinity) that is still on this - line when walked along the axis. If negative, it may have a greater absolute - value than max and implies walking in the opposite direction of the axis. - -.. attribute:: AxisAlignedLine.max - - `numeric` the number (closest to positive infinity) that is still on this - line when walked along the axis. If negative, it may have a smaller absolute - value than min and implies walking in the opposite direction of the axis. - -.. method:: AxisAlignedLine(self, axis, point1, point2) - - - **axis** - `Vector2` axis this line is on - - **point1** - `numeric` one point on this line - - **point2** - `numeric` a different point on this line - - Construct an axis aligned line with the appropriate min and max. - -.. staticmethod:: AxisAlignedLine.intersects(line1, line2) - - - **line1** - `AxisAlignedLine` the first line - - **line2** - `AxisAlignedLine` the second line - - **Return Value** - `bool, bool` touching, overlapping - - Determine if the two lines are touching and if they are, if - they are overlapping. Lines are touching if they share only - one end point, whereas they are overlapping if they share - infinitely many points. - - .. note:: - - It is rarely faster to check intersection before finding intersection if - you will need the minimum translation vector, since they do mostly - the same operations. - -.. staticmethod:: AxisAlignedLine.find_intersection(line1, line2) - - - **line1** - `AxisAlignedLine` the first line - - **line2** - `AxisAlignedLine` the second line - - **Return Value** - `bool, numeric or None` touching, mtv against 1 - - Determine if the two lines are touching, and then returns the - minimum translation vector to move line 1 along axis. If the result - is negative, it means line 1 should be moved in the opposite direction - of the axis by the magnitude of the result. - - Returns `true, None` if the lines are touching. - - .. note:: - - Ensure your program correctly handles `true, None` - -.. staticmethod:: AxisAlignedLine.contains_point(line, point) - - - **line** - `AxisAlignedLine` the line - - **point** - `numeric` the point - - **Return Value** - `bool, bool` if point is contained, if the point is an edge - - Determine if the line contains the specified point, which is assumed - to be defined the same way as min and max. - - .. tip:: - - It is not possible for both returned booleans to be `True`. - - -Axis-Aligned Line (autogen) ---------------------------- - .. autoclass:: pygorithm.geometry.axisall.AxisAlignedLine :members: From 31ae4428783d6b37a311f07046cdd6f43c5bbb66 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Wed, 23 Aug 2017 11:07:39 -0500 Subject: [PATCH 109/251] Added binary conversions --- pygorithm/__init__.py | 3 +- pygorithm/binary/__init__.py | 26 ++++++ pygorithm/binary/ascii_to_base16.py | 29 +++++++ pygorithm/binary/ascii_to_base2.py | 29 +++++++ pygorithm/binary/base10_to_base16.py | 46 +++++++++++ pygorithm/binary/base10_to_base2.py | 31 +++++++ pygorithm/binary/base16_to_ascii.py | 53 ++++++++++++ pygorithm/binary/base16_to_base10.py | 57 +++++++++++++ pygorithm/binary/base16_to_base2.py | 34 ++++++++ pygorithm/binary/base2_to_ascii.py | 34 ++++++++ pygorithm/binary/base2_to_base10.py | 43 ++++++++++ pygorithm/binary/base2_to_base16.py | 118 +++++++++++++++++++++++++++ pygorithm/data_structures/tree.py | 2 +- 13 files changed, 503 insertions(+), 2 deletions(-) create mode 100644 pygorithm/binary/__init__.py create mode 100644 pygorithm/binary/ascii_to_base16.py create mode 100644 pygorithm/binary/ascii_to_base2.py create mode 100644 pygorithm/binary/base10_to_base16.py create mode 100644 pygorithm/binary/base10_to_base2.py create mode 100644 pygorithm/binary/base16_to_ascii.py create mode 100644 pygorithm/binary/base16_to_base10.py create mode 100644 pygorithm/binary/base16_to_base2.py create mode 100644 pygorithm/binary/base2_to_ascii.py create mode 100644 pygorithm/binary/base2_to_base10.py create mode 100644 pygorithm/binary/base2_to_base16.py diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 5055131..35b5eca 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -57,11 +57,12 @@ ] __all__ = [ + 'binary', 'data_structures', 'fibonacci', 'math', 'searching', 'sorting', 'string', - 'pathfinding', + 'pathfinding' ] diff --git a/pygorithm/binary/__init__.py b/pygorithm/binary/__init__.py new file mode 100644 index 0000000..ff0639d --- /dev/null +++ b/pygorithm/binary/__init__.py @@ -0,0 +1,26 @@ +""" +Collection or binary conversions and algorithms +""" +from . import base2_to_base10 +from . import base2_to_base16 +from . import base2_to_ascii +from . import base10_to_base2 +from . import base10_to_base16 +from . import base16_to_base2 +from . import base16_to_base10 +from . import base16_to_ascii +from . import ascii_to_base2 +from . import ascii_to_base16 + +__all__ = [ + 'ascii_to_base2', + 'ascii_to_base16', + 'base2_to_base10', + 'base2_to_base16', + 'base2_to_ascii', + 'base10_to_base2', + 'base10_to_base16', + 'base16_to_base10', + 'base16_to_base2', + 'base16_to_ascii' +] diff --git a/pygorithm/binary/ascii_to_base16.py b/pygorithm/binary/ascii_to_base16.py new file mode 100644 index 0000000..fa99b3b --- /dev/null +++ b/pygorithm/binary/ascii_to_base16.py @@ -0,0 +1,29 @@ +""" +ASCII to Hexadecimal + +Author: Ian Doarn +""" +from pygorithm.binary.ascii_to_base2 import convert_ascii_to_base2 +from pygorithm.binary.base2_to_base16 import convert_base2_to_base16 +from pygorithm.binary.base2_to_ascii import convert_base2_to_ascii + + +def convert_ascii_to_base16(string, visualize=False): + """ + Convert ascii to hexadecimal + + :param string: string to convert + :param visualize: Show process + :param as_string: return value as string not array + :return: hex representation of given string + """ + hex_array = [] + + for b_value in convert_ascii_to_base2(string): + if visualize: + print("{} -> {}".format( + convert_base2_to_ascii(b_value), convert_base2_to_base16(b_value) + )) + hex_array.append(convert_base2_to_base16(b_value)) + + return hex_array diff --git a/pygorithm/binary/ascii_to_base2.py b/pygorithm/binary/ascii_to_base2.py new file mode 100644 index 0000000..019dfa6 --- /dev/null +++ b/pygorithm/binary/ascii_to_base2.py @@ -0,0 +1,29 @@ +""" +ASCII to Binary + +Author: Ian Doarn +""" +from pygorithm.binary.base10_to_base2 import convert_base10_to_base2 + + +def convert_ascii_to_base2(string, visualize=False, as_string=False): + """ + Convert ascii string to binary + + :param string: Ascii string + :param visualize: Show process + :param as_string: join strings with a space as one large value + :return: array of binary numbers, or entire string + """ + _list = [] + for x in string: + if visualize: + print("{} -> {} -> {}".format( + x, str(ord(x)), + str(convert_base10_to_base2(ord(x))) + )) + _list.append(str(convert_base10_to_base2(ord(x)))) + + if as_string: + return ' '.join(_list) + return _list diff --git a/pygorithm/binary/base10_to_base16.py b/pygorithm/binary/base10_to_base16.py new file mode 100644 index 0000000..ad85c38 --- /dev/null +++ b/pygorithm/binary/base10_to_base16.py @@ -0,0 +1,46 @@ +""" +Convert decimal numbers to hexadecimal numbers + +Author: Ian Doarn +""" + + +hex_values = { + 0: '0', 1: '1', 2: '2', + 3: '3', 4: '4', 5: '5', + 6: '6', 7: '7', 8: '8', + 9: '9', 10: 'A', 11: 'B', + 12: 'C', 13: 'D', 14: 'E', + 15: 'F' +} + + +def convert_base10_to_base16(n, visualize=False): + """ + Convert decimal number to hexadecimal + + Divide the number by 16 and add the remainder + to a list, round down the value after division + and repeat till our value is 0 + + Reverse the results list, get each values respective + hex value using hex_values map + + :param n: decimal number + :param visualize: Show process + :return: hexadecimal number + """ + _list = [] + while n != 0: + if visualize: + print("{} % 16 = {} -> hex = {}".format( + str(n), str(n % 16), hex_values[n % 16] + )) + _list.append(hex_values[n % 16]) + n = int(n / 16) + + if visualize: + print(_list) + print("reversed = " + str(_list[::-1])) + + return ''.join(_list[::-1]) diff --git a/pygorithm/binary/base10_to_base2.py b/pygorithm/binary/base10_to_base2.py new file mode 100644 index 0000000..4b1ffeb --- /dev/null +++ b/pygorithm/binary/base10_to_base2.py @@ -0,0 +1,31 @@ +""" +Base10 to Base2 + +Convert decimal numbers to binary numbers + +Author: Ian Doarn +""" + + +def convert_base10_to_base2(n, visualize=False): + """ + Divide each number by 2 using + the % operator. + + Reverse the resulting list of numbers + and return the result + + :param n: decimal number + :param visualize: Show process + :return: binary number + """ + _list = [] + while n > 0.5: + if visualize: + print("{} / 2 = {} || {} % 2 = {}".format(str(n), str(n / 2), str(n), str(n % 2))) + _list.append(n % 2) + n = int(n / 2) + + # Reverse the list, turn each number to a string, + # join the string, and convert it back to an integer + return int(''.join([str(i) for i in _list[::-1]])) diff --git a/pygorithm/binary/base16_to_ascii.py b/pygorithm/binary/base16_to_ascii.py new file mode 100644 index 0000000..5043e41 --- /dev/null +++ b/pygorithm/binary/base16_to_ascii.py @@ -0,0 +1,53 @@ +""" +Hexadecimal to ASCII + +Author: Ian Doarn +""" +from pygorithm.binary.base16_to_base2 import convert_base16_to_base2 +from pygorithm.binary.base2_to_ascii import convert_base2_to_ascii + + +def convert_base16_to_ascii(h_array, visualize=False): + """ + Convert base16 array to ASCII string + + Input must be a list of strings: + Example:: + + array = [ + '74', '68', '65', + '20', '71', '75', + '69', '63', '6B', + '20', '62', '72', + '6F', '77', '6E', + '20', '66', '6F', + '78', '20', '6A', + '75', '6D', '70', + '73', '20', '6F', + '76', '65', '72', + '20', '74', '68', + '65', '20', '6C', + '61', '7A', '79', + '20', '64', '6F', + '67' + ] + + result -> the quick brown fox jumps over the lazy dog + + :param h_array: hex value array + :param visualize: Show process + :return: ASCII string + """ + string = '' + + for h_value in h_array: + if visualize: + print("{} -> {} -> {}".format( + h_value, + convert_base16_to_base2(h_value), + convert_base2_to_ascii(str(convert_base16_to_base2(h_value))) + )) + + string += convert_base2_to_ascii(str(convert_base16_to_base2(h_value))) + + return string diff --git a/pygorithm/binary/base16_to_base10.py b/pygorithm/binary/base16_to_base10.py new file mode 100644 index 0000000..796fee9 --- /dev/null +++ b/pygorithm/binary/base16_to_base10.py @@ -0,0 +1,57 @@ +""" +Hexadecimal to Decimal + +Author: Ian Doarn +""" +from math import pow + +hex_letter_values = { + '0': 0, '1': 1, '2': 2, + '3': 3, '4': 4, '5': 5, + '6': 6, '7': 7, '8': 8, + '9': 9, 'A': 10, 'B': 11, + 'C': 12, 'D': 13, 'E': 14, + 'F': 15 +} + + +def convert_base16_to_base10(h, visualize=False): + """ + Convert hexadecimal number to decimal number + + Send hex to a list and reverse. Evaluate each hex value + via hex_letter_values map. Enumerate the list, + + using the equation: value * 16 ^ index + + value is the hex char value: F -> 15 + index is its position in the list: ['1', 'A', 'F'] F's index = 2 + + Continue this for each hex letter until we reach the end of the list, + summing all evaluated values. + + :param h: hexadecimal number + :param visualize: Show process + :return: decimal number + """ + + # Check to see if '0x' is at the beginning and remove it + if h[0:2] == '0x': + hex_char_list = list(h[2:])[::-1] + else: + hex_char_list = list(h)[::-1] + + value = 0 + + for i, v in enumerate(hex_char_list): + if visualize: + print("{} -> {} || {} * (16 ^ {}) = {}".format( + v, str(hex_letter_values[v]), + str(hex_letter_values[v]), + str(i), + str(hex_letter_values[v] * (pow(16, i))) + )) + + value += hex_letter_values[v] * (pow(16, i)) + + return int(value) diff --git a/pygorithm/binary/base16_to_base2.py b/pygorithm/binary/base16_to_base2.py new file mode 100644 index 0000000..d0b3c4b --- /dev/null +++ b/pygorithm/binary/base16_to_base2.py @@ -0,0 +1,34 @@ +""" +Hexadecimal to Binary + +Author: Ian Doarn +""" + +hex_binary_values = { + '0': '0000', '1': '0001', '2': '0010', '3': '0011', + '4': '0100', '5': '0101', '6': '0110', '7': '0111', + '8': '1000', '9': '1001', 'A': '1010', 'B': '1011', + 'C': '1100', 'D': '1101', 'E': '1110', 'F': '1111' +} + + +def convert_base16_to_base2(h, visualize=False): + """ + Convert hexadecimal to binary number + + :param h: hexadecimal number + :param visualize: Show process + :return: binary number + """ + + hex_char_list = list(h) + _list = [] + + for value in hex_char_list: + if visualize: + print("{} -> {}".format( + value, hex_binary_values[value] + )) + _list.append(hex_binary_values[value]) + + return int(''.join(_list)) diff --git a/pygorithm/binary/base2_to_ascii.py b/pygorithm/binary/base2_to_ascii.py new file mode 100644 index 0000000..06694aa --- /dev/null +++ b/pygorithm/binary/base2_to_ascii.py @@ -0,0 +1,34 @@ +""" +Base2 to ASCII + +Author: Ian Doarn +""" +from pygorithm.binary.base2_to_base10 import convert_base2_to_base10 + + +def convert_base2_to_ascii(b, visualize=False): + """ + Convert binary to ASCII + + :param b: binary number or array + :param visualize: Show process + :return: ASCII String + """ + binary = b + # Make sure give binary is a str array + if type(b) is str: + binary = b.split(' ') + elif type(b) is list: + binary = b + + string = '' + + for b_value in binary: + if visualize: + print("{} -> {} -> {}".format( + b_value, convert_base2_to_base10(int(b_value)), + chr(convert_base2_to_base10(int(b_value))) + )) + value = convert_base2_to_base10(int(b_value)) + string += chr(value) + return string diff --git a/pygorithm/binary/base2_to_base10.py b/pygorithm/binary/base2_to_base10.py new file mode 100644 index 0000000..7557dd5 --- /dev/null +++ b/pygorithm/binary/base2_to_base10.py @@ -0,0 +1,43 @@ +""" +Base2 to Base10 + +Convert binary numbers to decimal numbers + +Author: Ian Doarn +""" + + +def convert_base2_to_base10(n, visualize=False): + """ + Convert given number to a list + for every number do the following formula + + x * 2 + number + + repeat for each result! Example: + + binary number = 100110 + + 0 x 2 + 1 = 1 + 1 x 2 + 0 = 2 + 2 x 2 + 0 = 4 + 4 x 2 + 1 = 9 + 9 x 2 + 1 = 19 + 19 x 2 + 0 = 38 + + :param n: binary number + :param visualize: Show process + :return: decimal number + """ + if type(n) is str: + raise ValueError('value must be int not type {}'.format(str(type(n)))) + + x = 0 + _list = [int(i) for i in str(n)] + + for number in _list: + if visualize: + print("{} x 2 + {} = {}".format(str(x), str(number), str(x * 2 + number))) + x = x * 2 + number + + return x diff --git a/pygorithm/binary/base2_to_base16.py b/pygorithm/binary/base2_to_base16.py new file mode 100644 index 0000000..5c24e64 --- /dev/null +++ b/pygorithm/binary/base2_to_base16.py @@ -0,0 +1,118 @@ +""" +Base2 to Base16 + +Convert binary numbers to hexadecimal numbers + +Author: Ian Doarn +""" + + +hex_values = {"0000": "0", "0001": "1", "0010": "2", + "0011": "3", "0100": "4", "0101": "5", + "0110": "6", "0111": "7", "1000": "8", + "1001": "9", "1010": "A", "1011": "B", + "1100": "C", "1101": "D", "1110": "E", + "1111": "F"} + + +def convert_base2_to_base16(n, visualize=False): + """ + Convert binary numbers to hexadecimal numbers + + :param n: binary number + :param visualize: Visualise the process + :return: hexadecimal number + """ + grouped_list = __create_group_list(n) + _list = [] + for value in grouped_list: + if visualize: + print("{} -> {}".format(value, hex_values[value])) + # for each value in the grouped_list, + # get its respective value from the hex + # table by referencing the key with the + # current value from the grouped_list + _list.append(hex_values[value]) + + return ''.join(_list) + + +def __create_group_list(n): + """ + Helper method for conversion + + Takes binary number and converts to a list of + grouped binary values + + Process: + 1. convert number to a list of chars + 2. reverse the list + 3. iterate through the list creating groups of 4 + removing each value as its iterated + 4. if the remaining values can not make a group, + add 0's to the end to get to 4 + 5. join each list together + 6. reverse each value in the final list to put + them back in order + + Example: + + n = 11101100101001001100101001 + reverse = 10010100110010010100110111 + + Start grouping values: + + [['1', '0', '0', '1'], + ['0', '1', '0', '0'], + ['1', '1', '0', '0'], + ['1', '0', '0', '1'], + ['0', '1', '0', '0'], + ['1', '1', '0', '1']] + + remaining value = 11 + add missing 0's -> 1100 + + join each list: + + ['1', '0', '0', '1'] = 1001 + ['0', '1', '0', '0'] = 0100 + ['1', '1', '0', '0'] = 1100 + ['1', '0', '0', '1'] = 1001 + ['0', '1', '0', '0'] = 0100 + ['1', '1', '0', '1'] = 1101 + + ['1100', '1101', '0100', '1001', '1100', '0100', '1001'] + + reverse final list + result = ['0011', '1011', '0010', '1001', '0011', '0010', '1001'] + + :param n: binary number + :return: list + """ + reversed_number_list = list(str(n)[::-1]) + grouped_list = [] + + while len(reversed_number_list) != 0: + # go until list is empty + if len(reversed_number_list) < 4: + # remaining values can not make a group + # join remaining values + value = ''.join(reversed_number_list) + # find the missing amount needed then add that many + # zeros to the end of the value + f_value = value + ('0' * (4 - len(value))) + # add to the group + grouped_list.append(f_value) + break + else: + temp_list = [] + while len(temp_list) != 4: + # go until temp list does not have 4 values + temp_list.append(reversed_number_list.pop(0)) + # join each value in temp list and add to group + grouped_list.append(''.join(temp_list)) + + # reverse the entire grouped_list + # then reverse each value in the grouped_list + # and return the results + return [i[::-1] for i in grouped_list[::-1]] diff --git a/pygorithm/data_structures/tree.py b/pygorithm/data_structures/tree.py index 83c2deb..2967bc7 100644 --- a/pygorithm/data_structures/tree.py +++ b/pygorithm/data_structures/tree.py @@ -127,7 +127,7 @@ def get_code(): class BSTNode(object): """ - class for creating a node for Binary Search tree + class for creating a node for binary Search tree """ def __init__(self, data): self.data = data From 2deb49d39757c71bfa985230a011c1b7494861a4 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 09:10:10 -0700 Subject: [PATCH 110/251] Skeleton for Vector2 This moves the Vector2 documentation to the source code and uses autoclass to generate it. There are minor language and formatting changes. --- docs/Geometry.rst | 244 +----------------------- pygorithm/geometry/vector2.py | 347 ++++++++++++++++++++++++++++++++++ 2 files changed, 351 insertions(+), 240 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index f78f083..85c37b0 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -59,247 +59,10 @@ Features Vector2 ------- -.. class:: Vector2 - -Defines a simple two-dimensional, mutable vector. - -.. note:: - - Equality is not overriden on vectors, because it is expected that - vectors will be used mutably by directly modifying x and y. However, all - functions on vectors are immutable (they return a copy) - -.. attribute:: Vector2.x - - The first component of this vector. Mutation is allowed where appropriate. - -.. attribute:: Vector2.y - - The second component of this vector. Mutation is allowed where appropriate. - -.. method:: vector2.Vector2(self, *args, **kwargs) - -Accepts a pair of unnamed parameters, a pair of named x, y parameters, -another Vector2, or a tuple with 2 numerics. Examples of each: - -.. code-block:: python - - from pygorithm.geometry import vector2 - - # A pair of unnamed parameters - vec1 = vector2.Vector2(0, 5) - - # A pair of named parameters - vec2 = vector2.Vector2(x = 0, y = 5) - - # Another vector2 - vec3 = vector2.Vector2(vec2) - - # A tuple with two numerics - vec4 = vector2.Vector2( (0, 5) ) - -The following operations on vectors are extremely common and rarely varied, and as such have -operator support. - -.. method:: Vector2.__add__(self, other) - -- **other** : `Vector2` the vector to add to this one -- **Return Value** : a new `Vector2` by component-based addition - -Adds the two vectors component wise. Example: - -.. code-block:: python - - from pygorithm.geometry import vector2 - - vec1 = vector2.Vector2(0, 3) - vec2 = vector2.Vector2(2, 4) - - vec3 = vec1 + vec2 - - # prints <2, 7> - print(vec3) - -.. method:: Vector2.__sub__(self, other) - -- **other** : `Vector2` the vector to subtract from this one -- **Return Value** : a new `Vector2` by component-based subtraction - -Subtracts the two vectors component wise. Example: - -.. code-block:: python - - from pygorithm.geometry import vector2 - - vec1 = vector2.Vector2(5, 5) - vec2 = vector2.Vector2(2, 3) - - vec3 = vec1 - vec2 - vec4 = vec2 - vec1 - - # prints <3, 2> - print(vec3) - - # prints <2, 3> - print(vec4) - -.. method:: Vector2.__mul__(self, scale_factor) -.. method:: Vector2.__rmul__(self, scale_factor) - -- **scale_factor** : `numeric` the factor to multiply both components by -- **Return Value** : a new `Vector2` by component-based multiplication - -Scales the vector by the specified factor. Will throw an exception if -scale_factor is not a numeric - it will not perform the dot product (use -`dot` for that) Examples: - -.. code-block:: python - - from pygorithm.geometry import vector2 - - vec1 = vector2.Vector2(4, 8) - - vec2 = vec1 * 0.5 - vec3 = 2 * vec2 - - # prints <2, 4> - print(vec2) - - # prints <8, 16> - print(vec3) - - -.. method:: Vector2.__repr__(self) - -- **Return Value** : an unambiguous representation of this vector - -.. code-block:: python - - from pygorithm.geometry import vector2 - - vec = vector2.Vector2(3, 5) - - # prints vector2(x=3, y=5) - print(repr(vec)) - -.. method:: Vector2.__str__(self) - -- **Return Value** : a human-readable representation of this vector - -.. code-block:: python - - from pygorithm.geometry import vector2 - - vec = vector2.Vector2(7, 11) - - # prints <7, 11> - print(str(vec)) - - # also prints <7, 11> - print(vec) - -.. method:: Vector2.dot(self, other) - -- **other** : `vector2` to perform the dot product on -- **Return Value** : a numeric from the dot product of the two vectors - -The dot product of two vectors is calculated as so:: - - Let v1 be a vector such that v1 = - Let v2 be a vector such that v2 = - - v1 . v2 = v1_x * v2_x + v1_y * v2_y - -Example: - -.. code-block:: python - - from pygorithm.geometry import vector2 - - vec1 = vector2.Vector2(3, 5) - vec2 = vector2.Vector2(7, 11) - - dot_12 = vec1.dot(vec2) - - # prints 76 - print(dot_12) - -.. method:: Vector2.rotate(self, *args, **kwargs) - -The named argument "degrees" or "radians" may be passed in to rotate -this vector by the specified amount in degrees (or radians), -respectively. If both are omitted, the first unnamed argument is -assumed to be the amount to rotate in radians. - -Additionally, the named argument "about" may be passed in to specify -about what the vector should be rotated. If omitted then the first -unconsumed unnamed argument is assumed to be the vector. If there are -no unconsumed unnamed arguments then the origin is assumed. - -Examples: - -.. code-block:: python - - from pygorithm.geometry import vector2 - import math - - vec1 = vector2.Vector2(1, 0) - - vec2 = vec1.rotate(math.pi * 0.25) - - # prints <0.707, 0.707> - print(vec2) - - vec3 = vec1.rotate(degrees = 45) - - # prints <0.707, 0.707> - print(vec3) - - # The following operations are all identical - - vec4 = vec1.rotate(math.pi, vector2.Vector2(1, 1)) - vec5 = vec1.rotate(radians = math.pi, about = vector2.Vector2(1, 1)) - vec6 = vec1.rotate(degrees = 180, about = vector2.Vector2(1, 1)) - vec7 = vec1.rotate(vector2.Vector2(1, 1), degrees = 180) - - # prints <1, 2> - print(vec4) - -.. method:: Vector2.normalize(self) - -- **Return Value** : a `Vector2` in the same direction as this one with a magnitude of 1 - -Example: - -.. code-block:: python - - from pygorithm.geometry import vector2 - - vec1 = vector2.Vector2(2, 0) - - vec2 = vec1.normalize() - - # prints <1, 0> - print(vec2) - -* Miscellaneous - -.. method:: vector2.magnitude(self) - -- **Return Value** : a `numeric` magnitude of this vector - -Example: - -.. code-block:: python - - from pygorithm.geometry import vector2 - - vec1 = vector2.Vector2(3, 4) - magn = vec1.magnitude() +.. autoclass:: pygorithm.geometry.vector2.Vector2 + :members: + :special-members: - # prints 5 - print(magn) - Line2 ----- @@ -399,6 +162,7 @@ Axis-Aligned Line .. autoclass:: pygorithm.geometry.axisall.AxisAlignedLine :members: + :special-members: Concave Polygon --------------- diff --git a/pygorithm/geometry/vector2.py b/pygorithm/geometry/vector2.py index e69de29..b8cb427 100644 --- a/pygorithm/geometry/vector2.py +++ b/pygorithm/geometry/vector2.py @@ -0,0 +1,347 @@ +""" +vector2 + +Author: Timothy Moore + +Defines a simple two-dimensional, mutable vector. +""" + +class Vector2(object): + """ + Define a simple two-dimensional, mutable vector. + + .. important:: + + Equality is not overriden on vectors, because it is expected that + vectors will be used mutably by directly modifying x and y. However, all + functions on vectors are immutable (they return a copy) + + :ivar x: The first component of this vector. + :ivar y: The second component of this vector. + """ + + def __init__(self, *args, **kwargs): + """ + Create a new Vector2 from the two components. + + Accepts a pair of unnamed parameters, a pair of named x, y parameters, + another Vector2, or a tuple with 2 numerics. Examples of each: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + # A pair of unnamed parameters + vec1 = vector2.Vector2(0, 5) + + # A pair of named parameters + vec2 = vector2.Vector2(x = 0, y = 5) + + # Another vector2 + vec3 = vector2.Vector2(vec2) + + # A tuple with two numerics + vec4 = vector2.Vector2( (0, 5) ) + + :param args: unnamed arguments (purpose guessed by order) + :param kwargs: named arguments (purpose known by name) + """ + + pass + + def __add__(self, other): + """ + Adds the two vectors component wise. + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(0, 3) + vec2 = vector2.Vector2(2, 4) + + vec3 = vec1 + vec2 + + # prints <2, 7> + print(vec3) + + :param other: the vector to add to this one + :type other: :class:`pygorithm.geometry.vector2.Vector2` + :returns: a new vector that is the sum of self and other + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + """ + + pass + + def __sub__(self, other): + """ + Subtract the two vectors component wise. + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(5, 5) + vec2 = vector2.Vector2(2, 3) + + vec3 = vec1 - vec2 + vec4 = vec2 - vec1 + + # prints <3, 2> + print(vec3) + + # prints <2, 3> + print(vec4) + + :param other: the vector to subtract from this one + :type other: :class:`pygorithm.geometry.vector2.Vector2` + :returns: a new vector two that is the difference of self and other + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + """ + + pass + + def __mul__(self, scale_factor): + """ + Scale the vector by the specified factor. + + .. caution:: + + This will never perform a dot product. If scale_factor is a Vector2, an + exception is thrown. + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(4, 8) + + vec2 = vec1 * 0.5 + + # prints <2, 4> + print(vec2) + + :param: scale_factor the amount to scale this vector by + :type scale_factor: :class:`numbers.Number` + :returns: a new vector that is self scaled by scale_factor + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + :raises TypeError: if scale_factor is a Vector2 + """ + + pass + + def __rmul__(self, scale_factor): + """ + Scale the vector by the specified factor. + + .. caution:: + + This will never perform a dot product. If scale_factor is a Vector2, an + exception is thrown. + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(4, 8) + + vec2 = 2 * vec1 + + # prints <8, 16> + print(vec2) + + :param: scale_factor the amount to scale this vector by + :type scale_factor: :class:`numbers.Number` + :returns: a new vector that is self scaled by scale_factor + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + :raises TypeError: if scale_factor is a Vector2 + """ + + pass + + def __repr__(self): + """ + Create an unambiguous representation of this vector + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec = vector2.Vector2(3, 5) + + # prints vector2(x=3, y=5) + print(repr(vec)) + + :returns: an unambiguous representation of this vector + :rtype: string + """ + + pass + + def __str__(self): + """ + Create a human-readable representation of this vector + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec = vector2.Vector2(7, 11) + + # prints <7, 11> + print(str(vec)) + + # also prints <7, 11> + print(vec) + + :returns: a human-readable representation of this vector + :rtype: string + """ + + pass + + def dot(self, other): + """ + Calculate the dot product between this vector and other. + + The dot product of two vectors is calculated as so:: + + Let v1 be a vector such that v1 = + Let v2 be a vector such that v2 = + + v1 . v2 = v1_x * v2_x + v1_y * v2_y + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(3, 5) + vec2 = vector2.Vector2(7, 11) + + dot_12 = vec1.dot(vec2) + + # prints 76 + print(dot_12) + + :param other: the other vector + :type other: :class:`pygorithm.geometry.vector2.Vector2` + :returns: the dot product of self and other + :rtype: :class:`numbers.Number` + """ + + pass + + def rotate(self, *args, **kwargs): + """ + The named argument "degrees" or "radians" may be passed in to rotate + this vector by the specified amount in degrees (or radians), + respectively. If both are omitted, the first unnamed argument is + assumed to be the amount to rotate in radians. + + Additionally, the named argument "about" may be passed in to specify + about what the vector should be rotated. If omitted then the first + unconsumed unnamed argument is assumed to be the vector. If there are + no unconsumed unnamed arguments then the origin is assumed. + + Examples: + + .. code-block:: python + + from pygorithm.geometry import vector2 + import math + + vec1 = vector2.Vector2(1, 0) + + vec2 = vec1.rotate(math.pi * 0.25) + + # prints <0.707, 0.707> + print(vec2) + + vec3 = vec1.rotate(degrees = 45) + + # prints <0.707, 0.707> + print(vec3) + + # The following operations are all identical + + vec4 = vec1.rotate(math.pi, vector2.Vector2(1, 1)) + vec5 = vec1.rotate(radians = math.pi, about = vector2.Vector2(1, 1)) + vec6 = vec1.rotate(degrees = 180, about = vector2.Vector2(1, 1)) + vec7 = vec1.rotate(vector2.Vector2(1, 1), degrees = 180) + + # prints <1, 2> + print(vec4) + + :param args: the unnamed arguments (purpose guessed by position) + :param kwargs: the named arguments (purpose known by name) + :returns: the new vector formed by rotating this vector + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + """ + + pass + + def normalize(self): + """ + Create the normalized version of this vector + + The normalized version will go in the same direction but will + have magnitude of 1. + + .. note:: + + This will never return self, even if this vector is already + normalized. + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(2, 0) + + vec2 = vec1.normalize() + + # prints <1, 0> + print(vec2) + + :returns: a new normalized version of this vector + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + """ + + pass + + def magnitude(self): + """ + Calculate the magnitude of this vector + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(3, 4) + magn = vec1.magnitude() + + # prints 5 + print(magn) + + :returns: magnitude of this vector + :rtype: :class:`numbers.Number` + """ + pass \ No newline at end of file From 7677d641d6758289ef45f975c9a14c415a5f2b09 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 09:15:48 -0700 Subject: [PATCH 111/251] Documentation improvements Fix more warnings from sphinx and change the output order to bysource * docs/Geometry.rst - Remove backticks where not allowed * docs/conf.py - Change output order to bysource from default --- docs/Geometry.rst | 10 +++++----- docs/conf.py | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 85c37b0..0c4c1eb 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -196,24 +196,24 @@ index to the larger index will walk clockwise around the polygon. .. attribute:: Polygon2.points - The ordered list of `Vector2`s in this polygon. + The ordered list of Vector2s in this polygon. .. attribute:: Polygon2.lines - The ordered list of `Line2`s in this polygon. + The ordered list of Line2s in this polygon. .. attribute:: Polygon2.normals - The orders list of normal `Vector2`s corresponding to the `Line2`'s + The orders list of normal Vector2s corresponding to the Line2s in lines .. attribute:: Polygon2.center - The `Vector2` center of the polygon. Lazily initialized. + The Vector2 center of the polygon. Lazily initialized. .. attribute:: Polygon2.aabb - The `Rect2` bounding box of this polygon. Lazily initialized. + The Rect2 bounding box of this polygon. Lazily initialized. .. method:: Polygon2(self, points) diff --git a/docs/conf.py b/docs/conf.py index c118f4f..03d9da5 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -42,6 +42,8 @@ u'Omkar Pathak', 'manual'), ] +# Auto-Doc options +autodoc_member_order = 'bysource' # alternatively 'alphabetical' (default) or 'groupwise' # -- Options for manual page output -------------------------------------------- From 7ebd1b7514b053365df8f72a98284e9b36c2906e Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 10:45:13 -0700 Subject: [PATCH 112/251] Implement Line2 docstrings * docs/Geometry.rst - Use autoclass for Line2 * pygorithm/geometry/axisall.py - fix incorrect tuple syntax, add missing vartypes on ivars * pygorithm/geometry/line2.py - skeleton code * pygorithm/geometry/vector2.py - add missing vartypes on ivars, add magnitude_squared. --- docs/Geometry.rst | 93 +---------- pygorithm/geometry/axisall.py | 15 +- pygorithm/geometry/line2.py | 300 ++++++++++++++++++++++++++++++++++ pygorithm/geometry/vector2.py | 28 ++++ 4 files changed, 340 insertions(+), 96 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 0c4c1eb..d615110 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -66,97 +66,10 @@ Vector2 Line2 ----- -.. class:: Line2 - -Defines a two-dimensional directed line segment defined by two points. -This class is mostly used as a way to cache information that is -regularly required when working on geometrical problems. - -.. note:: - - Lines should be used as if they were completely immutable to ensure - correctness. All attributes of Line2 can be reconstructed from the two - points, and thus cannot be changed on their own and must be recalculated - if there were any changes to `start` or `end`. - -.. note:: - - To prevent unnecessary recalculations, many functions on lines accept an - 'offset' argument, which is used to perform calculations on lines that - are simply shifts of other lines. - -.. attribute:: Line2.start - - `Vector2` the start of this line - -.. attribute:: Line2.end - - `Vector2` the end of this line - -.. attribute:: Line2.delta - - `Vector2` from start to end - -.. attribute:: Line2.axis - - `Vector2` normalized `delta` - -.. attribute:: Line2.normal - - `Vector2` normalized normal of `axis` - -.. attribute:: Line2.magnitude_squared - - `numerical` square of the magnitude of the line - -.. attribute:: Line2.magnitude - - `numerical` magnitude of the line - -.. attribute:: Line2.min_x - - `numerical` minimum x-value on the line - -.. attribute:: Line2.min_y - - `numerical` minimum y-value on the line - -.. attribute:: Line2.max_x - - `numerical` maximum x-value on the line - -.. attribute:: Line2.max_y - - `numerical` maximum y-value on the line - -.. attribute:: Line2.slope - - `numerical` (including +inf and -inf) slope of the line - -.. attribute:: Line2.y_intercept - - `numerical or None` y_intercept of the line (or None if `vertical`) - -.. attribute:: Line2.horizontal - - `bool` true if ``slope == 0``, false otherwise - -.. attribute:: Line2.vertical - - `bool` true if ``slope == float('+inf') or slope == float('-inf')``, false otherwise - -.. staticmethod:: intersects_line(line1, line2, offset1, offset2) - - - **line1** - `Line2` first line - - **line2** - `Line2` second line - - **offset1** - `Vector2` offset of first line - - **offset2** - `Vector2` offset of second line - - **Return Value** - `bool, bool` touches, overlaps +.. autoclass:: pygorithm.geometry.line2.Line2 + :members: + :special-members: - Determines if the two lines at the specified offsets are touching and/or - overlapping. Two lines touch if they share endpoints, two lines overlap - if they intersect on any point that is not an endpoint. - Axis-Aligned Line ----------------- diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py index aeee5ea..e90aa86 100644 --- a/pygorithm/geometry/axisall.py +++ b/pygorithm/geometry/axisall.py @@ -39,8 +39,11 @@ class AxisAlignedLine(object): into them. :ivar axis: the axis this line is on + :vartype axis: :class:`pygorithm.geometry.vector2.Vector2` :ivar min: the point closest to negative infinity + :vartype min: :class:`numbers.Number` :ivar max: the point closest to positive infinity + :vartype max: :class:`numbers.Number` """ def __init__(self, axis, point1, point2): @@ -77,8 +80,8 @@ def intersects(line1, line2): :type line1: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :param line2: the second line :type line2: :class:`pygorithm.geometry.axisall.AxisAlignedLine` - :returns: touching, overlapping - :rtype: bool, bool + :returns: (touching, overlapping) + :rtype: (bool, bool) """ pass @@ -104,8 +107,8 @@ def find_intersection(line1, line2): :type line1: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :param line2: the second line :type line2: :class:`pygorithm.geometry.axisall.AxisAlignedLine` - :returns: touching, mtv against 1 - :rtype: bool, :class:`numbers.Number` or None + :returns: (touching, mtv against 1) + :rtype: (bool, :class:`numbers.Number` or None) """ pass @@ -125,7 +128,7 @@ def contains_point(line, point): :type line: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :param point: the point :type point: :class:`numbers.Number` - :returns: if the point is an edge of the line, if the point is contained by the line - :rtype: bool, bool + :returns: (if the point is an edge of the line, if the point is contained by the line) + :rtype: (bool, bool) """ pass \ No newline at end of file diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index e69de29..326dccf 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -0,0 +1,300 @@ +""" +line2 + +Author: Timothy Moore + +Defines a simple two-dimensional line segment +""" + +class Line2(object): + """ + Define a two-dimensional directed line segment defined by two points. + This class is mostly used as a way to cache information that is + regularly required when working on geometrical problems. + + .. caution:: + + Lines should be used as if they were completely immutable to ensure + correctness. All attributes of Line2 can be reconstructed from the two + points, and thus cannot be changed on their own and must be recalculated + if there were any changes to `start` or `end`. + + .. note:: + + To prevent unnecessary recalculations, many functions on lines accept an + 'offset' argument, which is used to perform calculations on lines that + are simply shifts of other lines. + + .. note:: + + The minimum x is guarranteed to be on either (or both) of + the start and end. However, minimum x and minimum y might not + come from the same point. The same is true for the maximum x + and maximum y. + + :ivar start: the start of this line + :vartype start: :class:`pygorithm.geometry.vector2.Vector2` + + :ivar end: the end of this line + :vartype end: :class:`pygorithm.geometry.vector2.Vector2` + """ + + def __init__(self, start, end): + """ + Create a new line 2 from start to end. + + :param start: the start point + :type start: :class:`pygorithm.geometry.vector2.Vector2` + :param end: the end point + :type end: :class:`pygorithm.geometry.vector2.Vector2` + + :raises ValueError: if start and end are at the same point + """ + + pass + + @property + def delta(self): + """ + Get the vector from start to end, lazily initialized. + + :returns: delta from start to end + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + """ + pass + + @property + def axis(self): + """ + Get the normalized delta vector, lazily initialized + + :returns: normalized delta + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + """ + pass + + @property + def normal(self): + """ + Get normalized normal vector to axis, lazily initialized. + + Get the normalized normal vector such that the normal + vector is 90 degrees counter-clockwise from the axis. + + :returns: normalized normal to axis + :rtype: :class:`pygorithm.geometry.vector2.Vector2` + """ + pass + + @property + def magnitude_squared(self): + """ + Get the square of the magnitude of delta, lazily initialized. + + :returns: square of magnitude of delta + :rtype: :class:`numbers.Number` + """ + pass + + @property + def magnitude(self): + """ + Get the magnitude of delta, lazily initialized. + + .. note:: + + It is substantially faster to operate on squared magnitude, + where possible. + + :returns: magnitude of delta + :rtype: :class:`numbers.Number` + """ + pass + + @property + def min_x(self): + """ + Get the minimum x that this line contains, lazily initialized. + + :returns: minimum x this line contains + :rtype: :class:`numbers.Number` + """ + pass + + @property + def min_y(self): + """ + Get the minimum y that this line contains, lazily initialized. + + :returns: minimum x this line contains + :rtype: :class:`numbers.Number` + """ + pass + + @property + def max_x(self): + """ + Get the maximum x that this line contains, lazily initialized. + + :returns: maximum x this line contains + :rtype: :class:`numbers.Number` + """ + pass + + @property + def slope(self): + """ + Get the slope of this line, lazily initialized. + + .. caution:: + + The slope may be 0 (horizontal line) or positive or negative + infinity (vertical lines). It may be necessary to handle + these lines seperately, typically through checking the + :py:attr:`~horizontal` and :py:attr:`~vertical` properties. + + + :returns: the slope of this line (rise over run). + :rtype: :class:`numbers.Number` + """ + pass + + @property + def y_intercept(self): + """ + Get the y-intercept of this line, lazily initialized. + + This does not take into account any offset of the + line and may return None if this is a vertical line. + + .. caution:: + + This function will return a y-intercept for non-vertical + line segments that do not reach x=0. + + .. caution:: + + The y-intercept will change based on the offset in a somewhat + complex manner. :py:meth:`~calculate_y_intercept` accepts an + offset parameter. + + :returns: the y-intercept of this line when unshifted + :rtype: :class:`numbers.Number` or None + """ + pass + + @property + def horizontal(self): + """ + Get if this line is horizontal, lazily initialized. + + A line is horizontal if it has a slope of 0. This also + means that :code:`start.y == end.y` + + :returns: if this line is horizontal + :rtype: bool + """ + pass + + @property + def vertical(self): + """ + Get if this line is vertical, lazily initialized. + + A line is vertical if it has a slope of +inf or -inf. This + also means that :code:`start.x == end.x`. + + :returns: if this line is vertical + :rtype: bool + """ + pass + + def __repr__(self): + """ + Get an unambiguous representation of this line + + Example: + + .. code-block:: python + + from pygorithm.geometry import (vector2, line2) + + vec1 = vector2.Vector2(1, 1) + vec2 = vector2.Vector2(3, 4) + + line = line2.Line2(vec1, vec2) + + # prints line2(start=vector2(x=1, y=1), end=vector2(x=3, y=4)) + print(repr(line)) + + :returns: unambiguous representation of this line + :rtype: string + """ + + pass + + def __str__(self): + """ + Get a human-readable representation of this line + + Example: + + .. code-block:: python + + from pygorithm.geometry import (vector2, line2) + + vec1 = vector2.Vector2(1, 1) + vec2 = vector2.Vector2(3, 4) + + line = line2.Line2(vec1, vec2) + + # prints <1, 1> -> <3, 4> + print(str(line)) + + # same as above + print(line) + + :returns: human-readable representation of this line + :rtype: string + """ + + pass + + @staticmethod + def find_intersection(line1, line2, offset1=None, offset2=None, find_mtv=true): + """ + Find the intersection between the two lines. + + The lines may optionally be offset by a fixed amount. This + will incur a minor performance penalty which is less than + that of recreating new lines. + + .. note:: + + There is only a very minor performance improvement by setting find_mtv to + false. It is rare that, if an mtv will be necessary, to find any performance + improvement by first searching with :code:`find_mtv=false` and then later + with :code:`find_mtv=true` + + .. note:: + + The resulting mtv is broken up into distance and axis. This falls naturally out + of the algorithm and is often convienent. To find the full mtv, simply multiply + the two. + + :param line1: the first line + :type line1: :class:`pygorithm.geometry.line2.Line2` + :param line2: the second line + :type line2: :class:`pygorithm.geometry.line2.Line2` + :param offset1: the offset of line 1 + :type offset1: :class:`pygorithm.geometry.vector2.Vector2` or None + :param offset2: the offset of line 2 + :type offset2: :class:`pygorithm.geometry.vector2.Vector2` or None + :param find_mtv: if false, mtv will always be null. + :returns: (touching, overlapping, (distance, axis)) + :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) + """ + pass + + + \ No newline at end of file diff --git a/pygorithm/geometry/vector2.py b/pygorithm/geometry/vector2.py index b8cb427..1cd4cd8 100644 --- a/pygorithm/geometry/vector2.py +++ b/pygorithm/geometry/vector2.py @@ -17,7 +17,9 @@ class Vector2(object): functions on vectors are immutable (they return a copy) :ivar x: The first component of this vector. + :vartype x: :class:`numbers.Number` :ivar y: The second component of this vector. + :vartype y: :class:`numbers.Number` """ def __init__(self, *args, **kwargs): @@ -325,10 +327,36 @@ def normalize(self): pass + def magnitude_squared(self): + """ + Calculate the square of the magnitude of this vector. + + Example: + + .. code-block:: python + + from pygorithm.geometry import vector2 + + vec1 = vector2.Vector2(5, 12) + magn_sq = vec1.magnitude_squared() + + # prints 169 (13^2) + print(magn_sq) + + :returns: square of the magnitude of this vector + :rtype: :class:`numbers.Number` + """ + pass + def magnitude(self): """ Calculate the magnitude of this vector + .. note:: + + It is substantially faster to operate on magnitude squared + where possible. + Example: .. code-block:: python From c2b1c39099f1a4c17b4c862461e8df46bcb6db5a Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 10:47:32 -0700 Subject: [PATCH 113/251] Fix true -> True * pygorithm/geometry/line2.py - true -> True --- pygorithm/geometry/line2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index 326dccf..349741f 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -261,7 +261,7 @@ def __str__(self): pass @staticmethod - def find_intersection(line1, line2, offset1=None, offset2=None, find_mtv=true): + def find_intersection(line1, line2, offset1=None, offset2=None, find_mtv=True): """ Find the intersection between the two lines. From 5812f94c02936a1b59e689c34c835160bd9f776a Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 11:10:21 -0700 Subject: [PATCH 114/251] Minor documentation tweaks Attempt fix failing references and try a different method of inline code highlighting in hopes it doesn't just use red text. --- pygorithm/geometry/line2.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index 349741f..390bb29 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -41,7 +41,7 @@ class Line2(object): def __init__(self, start, end): """ - Create a new line 2 from start to end. + Create a new line from start to end. :param start: the start point :type start: :class:`pygorithm.geometry.vector2.Vector2` @@ -151,7 +151,8 @@ def slope(self): The slope may be 0 (horizontal line) or positive or negative infinity (vertical lines). It may be necessary to handle these lines seperately, typically through checking the - :py:attr:`~horizontal` and :py:attr:`~vertical` properties. + :py:attr:`~pygorithm.geometry.line2.Line2.horizontal` and + :py:attr:`~pygorithm.geometry.line2.Line2.vertical` properties. :returns: the slope of this line (rise over run). @@ -170,13 +171,14 @@ def y_intercept(self): .. caution:: This function will return a y-intercept for non-vertical - line segments that do not reach x=0. + line segments that do not reach :code:`x=0`. .. caution:: The y-intercept will change based on the offset in a somewhat - complex manner. :py:meth:`~calculate_y_intercept` accepts an - offset parameter. + complex manner. + :py:meth:`~pygorithm.geometry.line2.Line2.calculate_y_intercept` + accepts an offset parameter. :returns: the y-intercept of this line when unshifted :rtype: :class:`numbers.Number` or None @@ -202,7 +204,7 @@ def vertical(self): Get if this line is vertical, lazily initialized. A line is vertical if it has a slope of +inf or -inf. This - also means that :code:`start.x == end.x`. + also means that ``start.x == end.x``. :returns: if this line is vertical :rtype: bool From 3397e934da638ee6e7e700760408b2fcbef5ae5c Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 11:15:01 -0700 Subject: [PATCH 115/251] Line2 documentation improvements * pygorithm/geometry/line2.py As far as I can tell theres no way to easily get pretty inline code highlighting, so use the recommended double leading/trailing backticks. Also add missing function calculate_y_intercept --- pygorithm/geometry/line2.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index 390bb29..4a89968 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -171,7 +171,7 @@ def y_intercept(self): .. caution:: This function will return a y-intercept for non-vertical - line segments that do not reach :code:`x=0`. + line segments that do not reach ``x=0``. .. caution:: @@ -191,7 +191,7 @@ def horizontal(self): Get if this line is horizontal, lazily initialized. A line is horizontal if it has a slope of 0. This also - means that :code:`start.y == end.y` + means that ``start.y == end.y`` :returns: if this line is horizontal :rtype: bool @@ -262,6 +262,18 @@ def __str__(self): pass + def calculate_y_intercept(offset): + """ + Calculate the y-intercept of this line when it is at the + specified offset. + + :param offset: the offset of this line for this calculations + :type offset: :class:`pygorithm.geometry.vector2.Vector2` + :returns: the y-intercept of this line when at offset + :rtype: :class:`numbers.Number` + """ + pass + @staticmethod def find_intersection(line1, line2, offset1=None, offset2=None, find_mtv=True): """ @@ -275,8 +287,8 @@ def find_intersection(line1, line2, offset1=None, offset2=None, find_mtv=True): There is only a very minor performance improvement by setting find_mtv to false. It is rare that, if an mtv will be necessary, to find any performance - improvement by first searching with :code:`find_mtv=false` and then later - with :code:`find_mtv=true` + improvement by first searching with ``find_mtv=False`` and then later + with :``find_mtv=True`` .. note:: From 8015885c2b850ce9e6eb5119a08c332759c93440 Mon Sep 17 00:00:00 2001 From: Alexey Sarapulov Date: Thu, 24 Aug 2017 00:34:28 +0600 Subject: [PATCH 116/251] Detection Collision : Broad Phase algorithm --- pygorithm/geometry/__init__.py | 8 +++ pygorithm/geometry/collision_detection.py | 69 +++++++++++++++++++++++ pygorithm/geometry/modules.py | 14 +++++ tests/test_geometry.py | 32 +++++++++++ 4 files changed, 123 insertions(+) create mode 100644 pygorithm/geometry/__init__.py create mode 100644 pygorithm/geometry/collision_detection.py create mode 100644 pygorithm/geometry/modules.py create mode 100644 tests/test_geometry.py diff --git a/pygorithm/geometry/__init__.py b/pygorithm/geometry/__init__.py new file mode 100644 index 0000000..8feed69 --- /dev/null +++ b/pygorithm/geometry/__init__.py @@ -0,0 +1,8 @@ +""" +Collection of special geometry functions +""" +from . import collision_detection + +__all__ = [ + 'collision_detection.py' +] \ No newline at end of file diff --git a/pygorithm/geometry/collision_detection.py b/pygorithm/geometry/collision_detection.py new file mode 100644 index 0000000..940446c --- /dev/null +++ b/pygorithm/geometry/collision_detection.py @@ -0,0 +1,69 @@ +""" +Author: ALEXEY SARAPULOV +Created On: 23 August 2017 +""" + +# To test if two rectangle intersect, we only have to find out +# if their projections intersect on all of the coordinate axes + +import inspect + +class Coord: + """Coord + Class to initialize Coordinate of one point + """ + + def __init__(self, x, y): + self.x = x + self.y = y + + +class Body: + """Body + Class to initialize Body of Object + """ + + def __init__(self, coord1, coord2): + """ + :type coord1: object of class Coord + :type coord2: object of class Coord + """ + self.min_x = coord1.x + self.min_y = coord1.y + self.max_x = coord2.x + self.max_y = coord2.y + + +def broad_phase(body1, body2): + """ + :type body1: object + :type body2: object + """ + d1x = body2.min_x - body1.max_x + d1y = body2.min_y - body1.max_y + d2x = body1.min_x - body2.max_x + d2y = body1.min_y - body2.max_y + + if d1x > 0 or d1y > 0: + return False + + if d2x > 0 or d2y > 0: + return False + + return True + + +def get_code(): + """ + returns the code for the broad phase function + """ + return inspect.getsource(broad_phase) + +if __name__ == '__main__': + coord1 = Coord(1, 1) + coord2 = Coord(6, 8) + body1 = Body(coord1, coord2) + coord3 = Coord(4, 0) + coord4 = Coord(7, 4) + body2 = Body(coord3, coord4) + print(broad_phase(body1, body2)) \ No newline at end of file diff --git a/pygorithm/geometry/modules.py b/pygorithm/geometry/modules.py new file mode 100644 index 0000000..bcd64c5 --- /dev/null +++ b/pygorithm/geometry/modules.py @@ -0,0 +1,14 @@ +""" +List all modules +""" +import pkgutil + +def modules(): + import pygorithm.geometry + package = pygorithm.geometry + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py new file mode 100644 index 0000000..2eeaa96 --- /dev/null +++ b/tests/test_geometry.py @@ -0,0 +1,32 @@ +import unittest + +from pygorithm.geometry import ( + collision_detection + ) + + +class TestCollisionDetection(unittest.TestCase): + def setUp(self): + # first pair of objects + self.coord1 = collision_detection.Coord(1, 1) + self.coord2 = collision_detection.Coord(6, 8) + self.body1 = collision_detection.Body(self.coord1, self.coord2) + self.coord3 = collision_detection.Coord(4, 0) + self.coord4 = collision_detection.Coord(7, 4) + self.body2 = collision_detection.Body(self.coord3, self.coord4) + # second pair + self.coord1 = collision_detection.Coord(1, 1) + self.coord2 = collision_detection.Coord(2, 3) + self.body3 = collision_detection.Body(self.coord1, self.coord2) + self.coord3 = collision_detection.Coord(4, 3) + self.coord4 = collision_detection.Coord(7, 8) + self.body4 = collision_detection.Body(self.coord3, self.coord4) + + +class TestBroadPhase(TestCollisionDetection): + def test_collision_detect(self): + self.assertTrue(collision_detection.broad_phase(self.body1, self.body2)) + self.assertFalse(collision_detection.broad_phase(self.body3, self.body4)) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file From dcbb1b87de0a9cdbc9a87d58a0a7641d64d131e7 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 11:39:47 -0700 Subject: [PATCH 117/251] Create Polygon2 docstrings Creates skeleton for polygon2 * docs/Geometry.rst - Use autoclass instead of duplicated documentation * pygorithm/geometry/line2.py - Add spaces around default param values * pygorithm/geometry/polygon2.py - Add skeleton and docstrings --- docs/Geometry.rst | 90 +------------------- pygorithm/geometry/line2.py | 2 +- pygorithm/geometry/polygon2.py | 145 +++++++++++++++++++++++++++++++++ 3 files changed, 149 insertions(+), 88 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index d615110..e252b3c 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -80,94 +80,10 @@ Axis-Aligned Line Concave Polygon --------------- -.. class:: Polygon2 - -Defines a concave polygon defined by a list of points such that each -adjacent pair of points form a line, the line from the last point to -the first point form a line, and the lines formed from the smaller -index to the larger index will walk clockwise around the polygon. - -.. note:: - - Polygons should be used as if they were completely immutable to - ensure correctness. All attributes of Polygon2 can be reconstructed - from the points array, and thus cannot be changed on their own and - must be recalculated if there were any changes to `points`. - -.. note:: - - To reduce unnecessary recalculations, Polygons notably do not have - an easily modifiable position. However, where relevant, the class - methods will accept offsets to the polygons. - -.. note:: - - Unfortunately, operations on rotated polygons require recalculating - the polygon based on its rotated points. This should be avoided - unless necessary through the use of Axis-Aligned Bounding Boxes - and similar tools. - -.. attribute:: Polygon2.points - - The ordered list of Vector2s in this polygon. - -.. attribute:: Polygon2.lines - - The ordered list of Line2s in this polygon. - -.. attribute:: Polygon2.normals - - The orders list of normal Vector2s corresponding to the Line2s - in lines - -.. attribute:: Polygon2.center - - The Vector2 center of the polygon. Lazily initialized. - -.. attribute:: Polygon2.aabb - - The Rect2 bounding box of this polygon. Lazily initialized. - -.. method:: Polygon2(self, points) - - - **points** - The ordered list of points in this polygon. - -.. staticmethod:: Polygon2.contains_point(polygon, offset, vec) - - - **polygon** - polygon to check - - **offset** - offset of the polygon - - **vec** - the vector to check if is inside the polyogn at offset - - Determines if the polygon contains vector when at the specified offset. - -.. staticmethod:: Polygon2.contains_polygon(poly1, poly2, offset1, offset2) - - - **poly1** - The polygon that might contain poly2 - - **poly2** - The polygon that might be contained in poly1 - - **offset1** - The position of the first polygon - - **offset2** - The position of the second polygon - - **Return Value** - `bool` true if poly2 is completely contained in poly1, false otherwise - - Determines if the second polygon is completely contained in the first - polygon. - -.. staticmethod:: Polygon2.find_intersection(poly1, poly2, offset1, offset2) +.. autoclass:: pygorithm.geometry.polygon2.Polygon2 + :members: + :special-members: - - **poly1** - The first polygon - - **poly2** - The second polygon - - **offset1** - The offset of the first polygon - - **offset2** - The offset of the second polygon - - **Return Value** - `bool, None or Vector2` If there is intersection, the MTV for poly1 or None - - Determines if the two polygons intersect, and how to prevent - intersection by a move on the first polygon. If the polygons - do not intersect, returns `false, None`. If the polygons - intersect and overlap, returns `true, Vector2`. If the polygons - are touching but do not overlap, returns `true, None`. - - .. note:: - - Ensure that the result `true, None` is handled correctly. diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index 4a89968..4c966e5 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -275,7 +275,7 @@ def calculate_y_intercept(offset): pass @staticmethod - def find_intersection(line1, line2, offset1=None, offset2=None, find_mtv=True): + def find_intersection(line1, line2, offset1 = None, offset2 = None, find_mtv = True): """ Find the intersection between the two lines. diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index e69de29..2e77d3c 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -0,0 +1,145 @@ +""" +polygon2 + +Author: Timothy Moore + +Defines a class for simple 2-d convex polygons. Contains +SAT-intersection. +""" + +class Polygon2(object): + """ + Define a concave polygon defined by a list of points such that each + adjacent pair of points form a line, the line from the last point to + the first point form a line, and the lines formed from the smaller + index to the larger index will walk clockwise around the polygon. + + .. note:: + + Polygons should be used as if they were completely immutable to + ensure correctness. All attributes of Polygon2 can be reconstructed + from the points array, and thus cannot be changed on their own and + must be recalculated if there were any changes to `points`. + + .. note:: + + To reduce unnecessary recalculations, Polygons notably do not have + an easily modifiable position. However, where relevant, the class + methods will accept offsets to the polygons. In all of these cases + the offset may be None for a minor performance improvement. + + .. note:: + + Unfortunately, operations on rotated polygons require recalculating + the polygon based on its rotated points. This should be avoided + unless necessary through the use of Axis-Aligned Bounding Boxes + and similar tools. + + :ivar points: the ordered set of points on this polygon + :vartype points: list of :class:`pygorithm.geometry.vector2.Vector2` + + :ivar lines: the ordered set of lines on this polygon + :vartype lines: list of :class:`pygorithm.geometry.line2.Line2` + + :ivar normals: the ordered set of normals on this polygon + :vartype normals: list of :class:`pygorithm.geometry.vector2.Vector2` + + :ivar center: the center of this polygon when unshifted. + :vartype center: :class:`pygorithm.geometry.vector2.Vector2` + """ + + def __init__(self, points, suppress_errors = False): + """ + Create a new polygon from the set of points + + .. caution:: + + A significant amount of calculation is performed when creating + a polygon. These should be reused whenever possible. This cost + can be alleviated somewhat by suppressing certain expensive + sanity checks, but the polygon can behave very unexpectedly + (and potentially without explicit errors) if the errors are + suppressed. + + :param points: the ordered set of points on this polygon + :type points: list of :class:`pygorithm.geometry.vector2.Vector2` + + :param suppress_errors: True to not do somewhat expensive sanity checks + :type suppress_errors: bool + + :raises ValueError: if there are any repeated points (not suppressable) + :raises ValueError: if there are less than 3 points (not suppressable) + :raises ValueError: if the polygon is not convex (suppressable) + :raises ValueError: if the points are not clockwise oriented (suppressable) + """ + pass + + @property + def area(self): + """ + Get the area of this polygon. Lazily initialized. + + :returns: area of this polygon + :rtype: :class:`numbers.Number` + """ + pass + + @staticmethod + def contains_point(polygon, offset, point): + """ + Determine if the polygon at offset contains point. + + Distinguish between points that are on the edge of the polygon and + points that are completely contained by the polygon. + + .. tip:: + + This can never return True, True + + :param polygon: the polygon + :type polygon: :class:`pygorithm.geometry.polygon2.Polygon2` + :param offset: the offset of the polygon + :type offset: :class:`pygorithm.geometry.vector2.Vector2` or None + :param point: the point to check + :type point: :class:`pygorithm.geometry.vector2.Vector2` + :returns: (on edge, contained) + :rtype: (bool, bool) + """ + pass + + @staticmethod + def find_intersection(poly1, poly2, offset1, offset2, find_mtv = True): + """ + Find if the polygons are intersecting and how to resolve it. + + Distinguish between polygons that are sharing 1 point or a single line + (touching) as opposed to polygons that are sharing a 2-dimensional + amount of space. + + The resulting MTV should be applied to the first polygon (or its offset), + or its negation can be applied to the second polyogn (or its offset). + + The MTV will be non-null if overlapping is True and find_mtv is True. + + .. note:: + + There is only a minor performance improvement from setting find_mtv to + False. It is rarely an improvement to first check without finding + mtv and then to find the mtv. + + + :param poly1: the first polygon + :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly2: the second polygon + :type poly2: :class:`pygorithm.geometry.polygon2.Polygon2` + :param offset1: the offset of the first polygon + :type offset1: :class:`pygorithm.geometry.vector2.Vector2` or None + :param offset2: the offset of the second polygon + :type offset2: :class:`pygorithm.geometry.vector2.Vector2` or None + :param find_mtv: if False, the mtv is always None and there is a small \ + performance improvement + :type find_mtv: bool + :returns: (touching, overlapping, (mtv distance, mtv axis)) + :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) + """ + pass \ No newline at end of file From 17697317d7995c5e5177ff6f4f3a8bdd78257e11 Mon Sep 17 00:00:00 2001 From: Alexey Sarapulov Date: Thu, 24 Aug 2017 02:14:55 +0600 Subject: [PATCH 118/251] Refactored broad phase --- pygorithm/geometry/__init__.py | 2 +- ...ision_detection.py => rect_broad_phase.py} | 30 +++++++------------ tests/test_geometry.py | 30 +++++++++---------- 3 files changed, 27 insertions(+), 35 deletions(-) rename pygorithm/geometry/{collision_detection.py => rect_broad_phase.py} (63%) diff --git a/pygorithm/geometry/__init__.py b/pygorithm/geometry/__init__.py index 8feed69..dc070b5 100644 --- a/pygorithm/geometry/__init__.py +++ b/pygorithm/geometry/__init__.py @@ -1,7 +1,7 @@ """ Collection of special geometry functions """ -from . import collision_detection +from . import rect_broad_phase __all__ = [ 'collision_detection.py' diff --git a/pygorithm/geometry/collision_detection.py b/pygorithm/geometry/rect_broad_phase.py similarity index 63% rename from pygorithm/geometry/collision_detection.py rename to pygorithm/geometry/rect_broad_phase.py index 940446c..b21ba07 100644 --- a/pygorithm/geometry/collision_detection.py +++ b/pygorithm/geometry/rect_broad_phase.py @@ -8,6 +8,7 @@ import inspect + class Coord: """Coord Class to initialize Coordinate of one point @@ -18,8 +19,8 @@ def __init__(self, x, y): self.y = y -class Body: - """Body +class SimpleRectangle: + """SimpleRectangle Class to initialize Body of Object """ @@ -34,15 +35,15 @@ def __init__(self, coord1, coord2): self.max_y = coord2.y -def broad_phase(body1, body2): +def broad_phase(simpleRect1, simpleRect2): """ - :type body1: object - :type body2: object + :type simpleRect1: object + :type simpleRect2: object """ - d1x = body2.min_x - body1.max_x - d1y = body2.min_y - body1.max_y - d2x = body1.min_x - body2.max_x - d2y = body1.min_y - body2.max_y + d1x = simpleRect2.min_x - simpleRect1.max_x + d1y = simpleRect2.min_y - simpleRect1.max_y + d2x = simpleRect1.min_x - simpleRect2.max_x + d2y = simpleRect1.min_y - simpleRect2.max_y if d1x > 0 or d1y > 0: return False @@ -57,13 +58,4 @@ def get_code(): """ returns the code for the broad phase function """ - return inspect.getsource(broad_phase) - -if __name__ == '__main__': - coord1 = Coord(1, 1) - coord2 = Coord(6, 8) - body1 = Body(coord1, coord2) - coord3 = Coord(4, 0) - coord4 = Coord(7, 4) - body2 = Body(coord3, coord4) - print(broad_phase(body1, body2)) \ No newline at end of file + return inspect.getsource(broad_phase) \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 2eeaa96..9d3269f 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1,32 +1,32 @@ import unittest from pygorithm.geometry import ( - collision_detection + rect_broad_phase ) class TestCollisionDetection(unittest.TestCase): def setUp(self): # first pair of objects - self.coord1 = collision_detection.Coord(1, 1) - self.coord2 = collision_detection.Coord(6, 8) - self.body1 = collision_detection.Body(self.coord1, self.coord2) - self.coord3 = collision_detection.Coord(4, 0) - self.coord4 = collision_detection.Coord(7, 4) - self.body2 = collision_detection.Body(self.coord3, self.coord4) + self.coord1 = rect_broad_phase.Coord(1, 1) + self.coord2 = rect_broad_phase.Coord(6, 8) + self.simpleRect1 = rect_broad_phase.SimpleRectangle(self.coord1, self.coord2) + self.coord3 = rect_broad_phase.Coord(4, 0) + self.coord4 = rect_broad_phase.Coord(7, 4) + self.simpleRect2 = rect_broad_phase.SimpleRectangle(self.coord3, self.coord4) # second pair - self.coord1 = collision_detection.Coord(1, 1) - self.coord2 = collision_detection.Coord(2, 3) - self.body3 = collision_detection.Body(self.coord1, self.coord2) - self.coord3 = collision_detection.Coord(4, 3) - self.coord4 = collision_detection.Coord(7, 8) - self.body4 = collision_detection.Body(self.coord3, self.coord4) + self.coord1 = rect_broad_phase.Coord(1, 1) + self.coord2 = rect_broad_phase.Coord(2, 3) + self.simpleRect3 = rect_broad_phase.SimpleRectangle(self.coord1, self.coord2) + self.coord3 = rect_broad_phase.Coord(4, 3) + self.coord4 = rect_broad_phase.Coord(7, 8) + self.simpleRect4 = rect_broad_phase.SimpleRectangle(self.coord3, self.coord4) class TestBroadPhase(TestCollisionDetection): def test_collision_detect(self): - self.assertTrue(collision_detection.broad_phase(self.body1, self.body2)) - self.assertFalse(collision_detection.broad_phase(self.body3, self.body4)) + self.assertTrue(rect_broad_phase.broad_phase(self.simpleRect1, self.simpleRect2)) + self.assertFalse(rect_broad_phase.broad_phase(self.simpleRect3, self.simpleRect4)) if __name__ == '__main__': unittest.main() \ No newline at end of file From 8ac78b7d53cf726c3d781e734c5aa98a83881a76 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 23 Aug 2017 13:26:27 -0700 Subject: [PATCH 119/251] Fix geometry example Add missing functions for the geometry example * docs/Geometry.rst - use from_regular rather than weird constructor * pygorithm/geometry/polygon2.py - Add form-regular and alternate tuple version for init --- docs/Geometry.rst | 2 +- pygorithm/geometry/polygon2.py | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index e252b3c..c79dec3 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -14,7 +14,7 @@ Quick Start Guide from pygorithm.geometry import vector2 # create a regular polygon - poly1 = polygon2.Polygon2(regular=True, sides=5, length=5) + poly1 = polygon2.Polygon2.from_regular(5, 5) # create a polygon from tuple (x, y) - note that the polygon must be concave poly2 = polygon2.Polygon2(points=[ (0, 0), (1, 0), (1, 1), (0, 1) ]) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 2e77d3c..6a1d826 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -62,7 +62,8 @@ def __init__(self, points, suppress_errors = False): suppressed. :param points: the ordered set of points on this polygon - :type points: list of :class:`pygorithm.geometry.vector2.Vector2` + :type points: list of :class:`pygorithm.geometry.vector2.Vector2` or \ + list of (:class:`numbers.Number`, :class:`numbers.Number`) :param suppress_errors: True to not do somewhat expensive sanity checks :type suppress_errors: bool @@ -74,6 +75,20 @@ def __init__(self, points, suppress_errors = False): """ pass + @classmethod + def from_regular(cls, sides, length): + """ + Create a new regular polygon. + + :param sides: the number of sides in the polygon + :type sides: :class:`numbers.Number` + :param length: the length of each sides + :type length: :class:`numbers.Number` + + :raises ValueError: if ``sides < 3`` or ``length <= 0`` + """ + pass + @property def area(self): """ From 0b92fcaf7812c3f3602d06f9fbae2a20af95f750 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 24 Aug 2017 06:37:35 +0530 Subject: [PATCH 120/251] Updated __init__.py so that it will automatically update the added modules and deleted modules.py --- pygorithm/__init__.py | 3 ++- pygorithm/data_structures/__init__.py | 32 ++++++++++++----------- pygorithm/data_structures/modules.py | 15 ----------- pygorithm/fibonacci/__init__.py | 28 ++++++++++++-------- pygorithm/fibonacci/modules.py | 20 --------------- pygorithm/geometry/__init__.py | 21 ++++++++++++--- pygorithm/geometry/modules.py | 14 ---------- pygorithm/math/__init__.py | 25 ++++++++++++------ pygorithm/math/modules.py | 15 ----------- pygorithm/pathfinding/__init__.py | 23 ++++++++++++----- pygorithm/pathfinding/modules.py | 15 ----------- pygorithm/searching/__init__.py | 29 ++++++++++++--------- pygorithm/searching/modules.py | 14 ---------- pygorithm/sorting/__init__.py | 37 ++++++++++++--------------- pygorithm/sorting/modules.py | 21 --------------- pygorithm/string/__init__.py | 28 ++++++++++++-------- pygorithm/string/modules.py | 15 ----------- 17 files changed, 138 insertions(+), 217 deletions(-) delete mode 100644 pygorithm/data_structures/modules.py delete mode 100644 pygorithm/fibonacci/modules.py delete mode 100644 pygorithm/geometry/modules.py delete mode 100644 pygorithm/math/modules.py delete mode 100644 pygorithm/pathfinding/modules.py delete mode 100644 pygorithm/searching/modules.py delete mode 100644 pygorithm/sorting/modules.py delete mode 100644 pygorithm/string/modules.py diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 5055131..8afb7fb 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -30,7 +30,7 @@ """ -__version__ = '1.0.0' +__version__ = '1.0.3' __author__ = 'Omkar Pathak' # List maintainers here @@ -64,4 +64,5 @@ 'sorting', 'string', 'pathfinding', + 'geometry', ] diff --git a/pygorithm/data_structures/__init__.py b/pygorithm/data_structures/__init__.py index d40e741..7445a37 100644 --- a/pygorithm/data_structures/__init__.py +++ b/pygorithm/data_structures/__init__.py @@ -1,19 +1,21 @@ """ Collection of data structure examples """ -from . import graph -from . import heap -from . import linked_list -from . import queue -from . import stack -from . import tree +import pkgutil -__all__ = [ - 'graph', - 'heap', - 'linked_list', - 'queue', - 'stack', - 'tree', - 'trie' -] +def modules(): + """ + Find all functions in pygorithm.data_structures + """ + from pygorithm import data_structures + package = data_structures + modules_list = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules_list.append(modname) + modules_list.remove('modules') + modules_list.sort() + return modules_list + +modules_list = modules() + +__all__ = modules_list diff --git a/pygorithm/data_structures/modules.py b/pygorithm/data_structures/modules.py deleted file mode 100644 index 3c57c2e..0000000 --- a/pygorithm/data_structures/modules.py +++ /dev/null @@ -1,15 +0,0 @@ -import pkgutil - - -def modules(): - """ - Find all functions in pygorithm.data_structures - """ - import pygorithm.data_structures - package = pygorithm.data_structures - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules diff --git a/pygorithm/fibonacci/__init__.py b/pygorithm/fibonacci/__init__.py index f9c14d8..bb8efbf 100644 --- a/pygorithm/fibonacci/__init__.py +++ b/pygorithm/fibonacci/__init__.py @@ -1,15 +1,21 @@ """ Collection of fibonacci methods and functions """ -from . import generator -from . import goldenratio -from . import memoization -from . import modules -from . import recursion +import pkgutil -__all__ = [ - 'generator', - 'goldenratio', - 'memoization', - 'recursion' -] \ No newline at end of file +def modules(): + """ + Find all functions in pygorithm.fibonacci + """ + from pygorithm import fibonacci + package = fibonacci + modules_list = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules_list.append(modname) + modules_list.remove('modules') + modules_list.sort() + return modules_list + +modules_list = modules() + +__all__ = modules_list diff --git a/pygorithm/fibonacci/modules.py b/pygorithm/fibonacci/modules.py deleted file mode 100644 index 3ec1157..0000000 --- a/pygorithm/fibonacci/modules.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -Find all modules in Fibonacci logic. -""" - -import pkgutil - -import pygorithm.fibonacci - - -def modules(): - """ - Find all functions in `pygorithm.fibonacci`. - """ - package = pygorithm.fibonacci - - modules = sorted([ - modname for _, modname, __ in pkgutil.iter_modules(package.__path__) if modname != 'modules' - ]) - - return modules diff --git a/pygorithm/geometry/__init__.py b/pygorithm/geometry/__init__.py index dc070b5..6fad4c7 100644 --- a/pygorithm/geometry/__init__.py +++ b/pygorithm/geometry/__init__.py @@ -1,8 +1,21 @@ """ Collection of special geometry functions """ -from . import rect_broad_phase +import pkgutil -__all__ = [ - 'collision_detection.py' -] \ No newline at end of file +def modules(): + """ + Find all functions in pygorithm.geometry + """ + from pygorithm import geometry + package = geometry + modules_list = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules_list.append(modname) + modules_list.remove('modules') + modules_list.sort() + return modules_list + +modules_list = modules() + +__all__ = modules_list diff --git a/pygorithm/geometry/modules.py b/pygorithm/geometry/modules.py deleted file mode 100644 index bcd64c5..0000000 --- a/pygorithm/geometry/modules.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -List all modules -""" -import pkgutil - -def modules(): - import pygorithm.geometry - package = pygorithm.geometry - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules \ No newline at end of file diff --git a/pygorithm/math/__init__.py b/pygorithm/math/__init__.py index dd5ed44..e8c105d 100644 --- a/pygorithm/math/__init__.py +++ b/pygorithm/math/__init__.py @@ -1,12 +1,21 @@ """ Collection of special math functions """ -from . import lcm -from . import lcm_using_gcd -from . import sieve_of_eratosthenes +import pkgutil -__all__ = [ - 'lcm', - 'lcm_using_gcd', - 'sieve_of_eratosthenes' -] +def modules(): + """ + Find all functions in pygorithm.math + """ + from pygorithm import math + package = math + modules_list = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules_list.append(modname) + modules_list.remove('modules') + modules_list.sort() + return modules_list + +modules_list = modules() + +__all__ = modules_list diff --git a/pygorithm/math/modules.py b/pygorithm/math/modules.py deleted file mode 100644 index c45ec3c..0000000 --- a/pygorithm/math/modules.py +++ /dev/null @@ -1,15 +0,0 @@ -import pkgutil - - -def modules(): - """ - Find all functions in pygorithm.data_structures - """ - import pygorithm.math - package = pygorithm.math - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules diff --git a/pygorithm/pathfinding/__init__.py b/pygorithm/pathfinding/__init__.py index 470e02c..cb0cdca 100644 --- a/pygorithm/pathfinding/__init__.py +++ b/pygorithm/pathfinding/__init__.py @@ -1,10 +1,21 @@ """ Collection of pathfinding examples """ -from . import dijkstra -from . import astar +import pkgutil -__all__ = [ - 'dijkstra', - 'astar' -] \ No newline at end of file +def modules(): + """ + Find all functions in pygorithm.pathfinding + """ + from pygorithm import pathfinding + package = pathfinding + modules_list = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules_list.append(modname) + modules_list.remove('modules') + modules_list.sort() + return modules_list + +modules_list = modules() + +__all__ = modules_list diff --git a/pygorithm/pathfinding/modules.py b/pygorithm/pathfinding/modules.py deleted file mode 100644 index d99d1ef..0000000 --- a/pygorithm/pathfinding/modules.py +++ /dev/null @@ -1,15 +0,0 @@ -import pkgutil - - -def modules(): - """ - Find all functions in pygorithm.pathfinding - """ - import pygorithm.pathfinding - package = pygorithm.pathfinding - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules diff --git a/pygorithm/searching/__init__.py b/pygorithm/searching/__init__.py index d09965e..c7e01bd 100644 --- a/pygorithm/searching/__init__.py +++ b/pygorithm/searching/__init__.py @@ -1,16 +1,21 @@ """ Collection of searching algorithms """ -from . import binary_search -from . import breadth_first_search -from . import depth_first_search -from . import linear_search -from . import quick_select +import pkgutil -__all__ = [ - 'binary_search', - 'breadth_first_search', - 'depth_first_search', - 'linear_search', - 'quick_select' -] +def modules(): + """ + Find all functions in pygorithm.searching + """ + from pygorithm import searching + package = searching + modules_list = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules_list.append(modname) + modules_list.remove('modules') + modules_list.sort() + return modules_list + +modules_list = modules() + +__all__ = modules_list diff --git a/pygorithm/searching/modules.py b/pygorithm/searching/modules.py deleted file mode 100644 index abcd1fa..0000000 --- a/pygorithm/searching/modules.py +++ /dev/null @@ -1,14 +0,0 @@ -import pkgutil -def modules(): - """ - Find all functions in pygorithm.searching - """ - import pygorithm.searching - package = pygorithm.searching - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules - diff --git a/pygorithm/sorting/__init__.py b/pygorithm/sorting/__init__.py index 0781eea..37d2b78 100644 --- a/pygorithm/sorting/__init__.py +++ b/pygorithm/sorting/__init__.py @@ -1,24 +1,21 @@ """ Collection of sorting methods """ -from . import quick_sort -from . import bucket_sort -from . import bubble_sort -from . import heap_sort -from . import counting_sort -from . import insertion_sort -from . import merge_sort -from . import selection_sort -from . import shell_sort +import pkgutil -__all__ = [ - 'bubble_sort', - 'bucket_sort', - 'counting_sort', - 'heap_sort', - 'insertion_sort', - 'merge_sort', - 'quick_sort', - 'selection_sort', - 'shell_sort' -] +def modules(): + """ + Find all functions in pygorithm.sorting + """ + from pygorithm import sorting + package = sorting + modules_list = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules_list.append(modname) + modules_list.remove('modules') + modules_list.sort() + return modules_list + +modules_list = modules() + +__all__ = modules_list diff --git a/pygorithm/sorting/modules.py b/pygorithm/sorting/modules.py deleted file mode 100644 index 8d4598b..0000000 --- a/pygorithm/sorting/modules.py +++ /dev/null @@ -1,21 +0,0 @@ -""" -List all modules -""" -import pkgutil - -# TODO: This can be moved to the __init__.py file in the __all__ -# TODO: See the __init__.py file - -def modules(): - """ - Find all functions in pygorithm.sorting - """ - import pygorithm.sorting - package = pygorithm.sorting - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules - diff --git a/pygorithm/string/__init__.py b/pygorithm/string/__init__.py index e227375..061cfc0 100644 --- a/pygorithm/string/__init__.py +++ b/pygorithm/string/__init__.py @@ -1,15 +1,21 @@ """ Collection of string methods and functions """ -from . import anagram -from . import pangram -from . import isogram -from . import modules -from . import palindrome +import pkgutil -__all__ = [ - 'anagram', - 'pangram', - 'isogram', - 'palindrome' -] +def modules(): + """ + Find all functions in pygorithm.string + """ + from pygorithm import string + package = string + modules_list = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules_list.append(modname) + modules_list.remove('modules') + modules_list.sort() + return modules_list + +modules_list = modules() + +__all__ = modules_list diff --git a/pygorithm/string/modules.py b/pygorithm/string/modules.py deleted file mode 100644 index e383192..0000000 --- a/pygorithm/string/modules.py +++ /dev/null @@ -1,15 +0,0 @@ -import pkgutil - - -def modules(): - """ - Find all functions in pygorithm.string - """ - import pygorithm.string - package = pygorithm.string - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules From e3ac07be9e7255caf2c216942870c13ab83cae1b Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 24 Aug 2017 06:44:46 +0530 Subject: [PATCH 121/251] Updated contributors list --- CONTIRBUTORS.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CONTIRBUTORS.md b/CONTIRBUTORS.md index 1a8366d..ff19646 100644 --- a/CONTIRBUTORS.md +++ b/CONTIRBUTORS.md @@ -13,4 +13,7 @@ - Songzhuozhuo '[souo](https://github.com/souo)' - Emil '[Skeen](https://github.com/Skeen)' Madsen - Ian '[IanDoarn](https://github.com/IanDoarn)' Doarn - - Timothy '[Tjstretchalot](https://github.com/Tjstretchalot)' Moore \ No newline at end of file + - Timothy '[Tjstretchalot](https://github.com/Tjstretchalot)' Moore + - Sharad '[sharadbhat](https://github.com/sharadbhat)' Bhat + - Alexey '[aesee](https://github.com/aesee)' Sarapulov + - Anthony '[MrDupin](https://github.com/MrDupin)' Marakis From c9f273f24282da709cd94b64044996d59e30e86a Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 24 Aug 2017 06:55:59 +0530 Subject: [PATCH 122/251] Revert "Updated __init__.py so that it will automatically update the added modules and deleted modules.py" This reverts commit 0b92fcaf7812c3f3602d06f9fbae2a20af95f750. 'Reverting changes' --- pygorithm/__init__.py | 3 +-- pygorithm/data_structures/__init__.py | 32 +++++++++++------------ pygorithm/data_structures/modules.py | 15 +++++++++++ pygorithm/fibonacci/__init__.py | 28 ++++++++------------ pygorithm/fibonacci/modules.py | 20 +++++++++++++++ pygorithm/geometry/__init__.py | 21 +++------------ pygorithm/geometry/modules.py | 14 ++++++++++ pygorithm/math/__init__.py | 25 ++++++------------ pygorithm/math/modules.py | 15 +++++++++++ pygorithm/pathfinding/__init__.py | 23 +++++------------ pygorithm/pathfinding/modules.py | 15 +++++++++++ pygorithm/searching/__init__.py | 29 +++++++++------------ pygorithm/searching/modules.py | 14 ++++++++++ pygorithm/sorting/__init__.py | 37 +++++++++++++++------------ pygorithm/sorting/modules.py | 21 +++++++++++++++ pygorithm/string/__init__.py | 28 ++++++++------------ pygorithm/string/modules.py | 15 +++++++++++ 17 files changed, 217 insertions(+), 138 deletions(-) create mode 100644 pygorithm/data_structures/modules.py create mode 100644 pygorithm/fibonacci/modules.py create mode 100644 pygorithm/geometry/modules.py create mode 100644 pygorithm/math/modules.py create mode 100644 pygorithm/pathfinding/modules.py create mode 100644 pygorithm/searching/modules.py create mode 100644 pygorithm/sorting/modules.py create mode 100644 pygorithm/string/modules.py diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 8afb7fb..5055131 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -30,7 +30,7 @@ """ -__version__ = '1.0.3' +__version__ = '1.0.0' __author__ = 'Omkar Pathak' # List maintainers here @@ -64,5 +64,4 @@ 'sorting', 'string', 'pathfinding', - 'geometry', ] diff --git a/pygorithm/data_structures/__init__.py b/pygorithm/data_structures/__init__.py index 7445a37..d40e741 100644 --- a/pygorithm/data_structures/__init__.py +++ b/pygorithm/data_structures/__init__.py @@ -1,21 +1,19 @@ """ Collection of data structure examples """ -import pkgutil +from . import graph +from . import heap +from . import linked_list +from . import queue +from . import stack +from . import tree -def modules(): - """ - Find all functions in pygorithm.data_structures - """ - from pygorithm import data_structures - package = data_structures - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'graph', + 'heap', + 'linked_list', + 'queue', + 'stack', + 'tree', + 'trie' +] diff --git a/pygorithm/data_structures/modules.py b/pygorithm/data_structures/modules.py new file mode 100644 index 0000000..3c57c2e --- /dev/null +++ b/pygorithm/data_structures/modules.py @@ -0,0 +1,15 @@ +import pkgutil + + +def modules(): + """ + Find all functions in pygorithm.data_structures + """ + import pygorithm.data_structures + package = pygorithm.data_structures + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules diff --git a/pygorithm/fibonacci/__init__.py b/pygorithm/fibonacci/__init__.py index bb8efbf..f9c14d8 100644 --- a/pygorithm/fibonacci/__init__.py +++ b/pygorithm/fibonacci/__init__.py @@ -1,21 +1,15 @@ """ Collection of fibonacci methods and functions """ -import pkgutil +from . import generator +from . import goldenratio +from . import memoization +from . import modules +from . import recursion -def modules(): - """ - Find all functions in pygorithm.fibonacci - """ - from pygorithm import fibonacci - package = fibonacci - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'generator', + 'goldenratio', + 'memoization', + 'recursion' +] \ No newline at end of file diff --git a/pygorithm/fibonacci/modules.py b/pygorithm/fibonacci/modules.py new file mode 100644 index 0000000..3ec1157 --- /dev/null +++ b/pygorithm/fibonacci/modules.py @@ -0,0 +1,20 @@ +""" +Find all modules in Fibonacci logic. +""" + +import pkgutil + +import pygorithm.fibonacci + + +def modules(): + """ + Find all functions in `pygorithm.fibonacci`. + """ + package = pygorithm.fibonacci + + modules = sorted([ + modname for _, modname, __ in pkgutil.iter_modules(package.__path__) if modname != 'modules' + ]) + + return modules diff --git a/pygorithm/geometry/__init__.py b/pygorithm/geometry/__init__.py index 6fad4c7..dc070b5 100644 --- a/pygorithm/geometry/__init__.py +++ b/pygorithm/geometry/__init__.py @@ -1,21 +1,8 @@ """ Collection of special geometry functions """ -import pkgutil +from . import rect_broad_phase -def modules(): - """ - Find all functions in pygorithm.geometry - """ - from pygorithm import geometry - package = geometry - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'collision_detection.py' +] \ No newline at end of file diff --git a/pygorithm/geometry/modules.py b/pygorithm/geometry/modules.py new file mode 100644 index 0000000..bcd64c5 --- /dev/null +++ b/pygorithm/geometry/modules.py @@ -0,0 +1,14 @@ +""" +List all modules +""" +import pkgutil + +def modules(): + import pygorithm.geometry + package = pygorithm.geometry + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules \ No newline at end of file diff --git a/pygorithm/math/__init__.py b/pygorithm/math/__init__.py index e8c105d..dd5ed44 100644 --- a/pygorithm/math/__init__.py +++ b/pygorithm/math/__init__.py @@ -1,21 +1,12 @@ """ Collection of special math functions """ -import pkgutil +from . import lcm +from . import lcm_using_gcd +from . import sieve_of_eratosthenes -def modules(): - """ - Find all functions in pygorithm.math - """ - from pygorithm import math - package = math - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'lcm', + 'lcm_using_gcd', + 'sieve_of_eratosthenes' +] diff --git a/pygorithm/math/modules.py b/pygorithm/math/modules.py new file mode 100644 index 0000000..c45ec3c --- /dev/null +++ b/pygorithm/math/modules.py @@ -0,0 +1,15 @@ +import pkgutil + + +def modules(): + """ + Find all functions in pygorithm.data_structures + """ + import pygorithm.math + package = pygorithm.math + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules diff --git a/pygorithm/pathfinding/__init__.py b/pygorithm/pathfinding/__init__.py index cb0cdca..470e02c 100644 --- a/pygorithm/pathfinding/__init__.py +++ b/pygorithm/pathfinding/__init__.py @@ -1,21 +1,10 @@ """ Collection of pathfinding examples """ -import pkgutil +from . import dijkstra +from . import astar -def modules(): - """ - Find all functions in pygorithm.pathfinding - """ - from pygorithm import pathfinding - package = pathfinding - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'dijkstra', + 'astar' +] \ No newline at end of file diff --git a/pygorithm/pathfinding/modules.py b/pygorithm/pathfinding/modules.py new file mode 100644 index 0000000..d99d1ef --- /dev/null +++ b/pygorithm/pathfinding/modules.py @@ -0,0 +1,15 @@ +import pkgutil + + +def modules(): + """ + Find all functions in pygorithm.pathfinding + """ + import pygorithm.pathfinding + package = pygorithm.pathfinding + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules diff --git a/pygorithm/searching/__init__.py b/pygorithm/searching/__init__.py index c7e01bd..d09965e 100644 --- a/pygorithm/searching/__init__.py +++ b/pygorithm/searching/__init__.py @@ -1,21 +1,16 @@ """ Collection of searching algorithms """ -import pkgutil +from . import binary_search +from . import breadth_first_search +from . import depth_first_search +from . import linear_search +from . import quick_select -def modules(): - """ - Find all functions in pygorithm.searching - """ - from pygorithm import searching - package = searching - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'binary_search', + 'breadth_first_search', + 'depth_first_search', + 'linear_search', + 'quick_select' +] diff --git a/pygorithm/searching/modules.py b/pygorithm/searching/modules.py new file mode 100644 index 0000000..abcd1fa --- /dev/null +++ b/pygorithm/searching/modules.py @@ -0,0 +1,14 @@ +import pkgutil +def modules(): + """ + Find all functions in pygorithm.searching + """ + import pygorithm.searching + package = pygorithm.searching + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules + diff --git a/pygorithm/sorting/__init__.py b/pygorithm/sorting/__init__.py index 37d2b78..0781eea 100644 --- a/pygorithm/sorting/__init__.py +++ b/pygorithm/sorting/__init__.py @@ -1,21 +1,24 @@ """ Collection of sorting methods """ -import pkgutil +from . import quick_sort +from . import bucket_sort +from . import bubble_sort +from . import heap_sort +from . import counting_sort +from . import insertion_sort +from . import merge_sort +from . import selection_sort +from . import shell_sort -def modules(): - """ - Find all functions in pygorithm.sorting - """ - from pygorithm import sorting - package = sorting - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'bubble_sort', + 'bucket_sort', + 'counting_sort', + 'heap_sort', + 'insertion_sort', + 'merge_sort', + 'quick_sort', + 'selection_sort', + 'shell_sort' +] diff --git a/pygorithm/sorting/modules.py b/pygorithm/sorting/modules.py new file mode 100644 index 0000000..8d4598b --- /dev/null +++ b/pygorithm/sorting/modules.py @@ -0,0 +1,21 @@ +""" +List all modules +""" +import pkgutil + +# TODO: This can be moved to the __init__.py file in the __all__ +# TODO: See the __init__.py file + +def modules(): + """ + Find all functions in pygorithm.sorting + """ + import pygorithm.sorting + package = pygorithm.sorting + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules + diff --git a/pygorithm/string/__init__.py b/pygorithm/string/__init__.py index 061cfc0..e227375 100644 --- a/pygorithm/string/__init__.py +++ b/pygorithm/string/__init__.py @@ -1,21 +1,15 @@ """ Collection of string methods and functions """ -import pkgutil +from . import anagram +from . import pangram +from . import isogram +from . import modules +from . import palindrome -def modules(): - """ - Find all functions in pygorithm.string - """ - from pygorithm import string - package = string - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'anagram', + 'pangram', + 'isogram', + 'palindrome' +] diff --git a/pygorithm/string/modules.py b/pygorithm/string/modules.py new file mode 100644 index 0000000..e383192 --- /dev/null +++ b/pygorithm/string/modules.py @@ -0,0 +1,15 @@ +import pkgutil + + +def modules(): + """ + Find all functions in pygorithm.string + """ + import pygorithm.string + package = pygorithm.string + modules = [] + for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + modules.append(modname) + modules.remove('modules') + modules.sort() + return modules From a5d1fc41942b454f01cf8f1d1bbc8b58c14a9aaf Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 24 Aug 2017 07:00:01 +0530 Subject: [PATCH 123/251] Deleted modules.py from all packages --- pygorithm/__init__.py | 3 +++ pygorithm/data_structures/modules.py | 15 --------------- pygorithm/fibonacci/modules.py | 20 -------------------- pygorithm/geometry/modules.py | 14 -------------- pygorithm/math/modules.py | 15 --------------- pygorithm/pathfinding/modules.py | 15 --------------- pygorithm/searching/modules.py | 14 -------------- pygorithm/sorting/modules.py | 21 --------------------- pygorithm/string/modules.py | 15 --------------- 9 files changed, 3 insertions(+), 129 deletions(-) delete mode 100644 pygorithm/data_structures/modules.py delete mode 100644 pygorithm/fibonacci/modules.py delete mode 100644 pygorithm/geometry/modules.py delete mode 100644 pygorithm/math/modules.py delete mode 100644 pygorithm/pathfinding/modules.py delete mode 100644 pygorithm/searching/modules.py delete mode 100644 pygorithm/sorting/modules.py delete mode 100644 pygorithm/string/modules.py diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 5055131..356c0c3 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -27,6 +27,9 @@ Emil 'Skeen' Madsen Ian 'IanDoarn' Doarn Timothy 'Tjsretchalot' Moore +Sharad '[sharadbhat](https://github.com/sharadbhat)' Bhat +Alexey '[aesee](https://github.com/aesee)' Sarapulov +Anthony '[MrDupin](https://github.com/MrDupin)' Marakis """ diff --git a/pygorithm/data_structures/modules.py b/pygorithm/data_structures/modules.py deleted file mode 100644 index 3c57c2e..0000000 --- a/pygorithm/data_structures/modules.py +++ /dev/null @@ -1,15 +0,0 @@ -import pkgutil - - -def modules(): - """ - Find all functions in pygorithm.data_structures - """ - import pygorithm.data_structures - package = pygorithm.data_structures - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules diff --git a/pygorithm/fibonacci/modules.py b/pygorithm/fibonacci/modules.py deleted file mode 100644 index 3ec1157..0000000 --- a/pygorithm/fibonacci/modules.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -Find all modules in Fibonacci logic. -""" - -import pkgutil - -import pygorithm.fibonacci - - -def modules(): - """ - Find all functions in `pygorithm.fibonacci`. - """ - package = pygorithm.fibonacci - - modules = sorted([ - modname for _, modname, __ in pkgutil.iter_modules(package.__path__) if modname != 'modules' - ]) - - return modules diff --git a/pygorithm/geometry/modules.py b/pygorithm/geometry/modules.py deleted file mode 100644 index bcd64c5..0000000 --- a/pygorithm/geometry/modules.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -List all modules -""" -import pkgutil - -def modules(): - import pygorithm.geometry - package = pygorithm.geometry - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules \ No newline at end of file diff --git a/pygorithm/math/modules.py b/pygorithm/math/modules.py deleted file mode 100644 index c45ec3c..0000000 --- a/pygorithm/math/modules.py +++ /dev/null @@ -1,15 +0,0 @@ -import pkgutil - - -def modules(): - """ - Find all functions in pygorithm.data_structures - """ - import pygorithm.math - package = pygorithm.math - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules diff --git a/pygorithm/pathfinding/modules.py b/pygorithm/pathfinding/modules.py deleted file mode 100644 index d99d1ef..0000000 --- a/pygorithm/pathfinding/modules.py +++ /dev/null @@ -1,15 +0,0 @@ -import pkgutil - - -def modules(): - """ - Find all functions in pygorithm.pathfinding - """ - import pygorithm.pathfinding - package = pygorithm.pathfinding - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules diff --git a/pygorithm/searching/modules.py b/pygorithm/searching/modules.py deleted file mode 100644 index abcd1fa..0000000 --- a/pygorithm/searching/modules.py +++ /dev/null @@ -1,14 +0,0 @@ -import pkgutil -def modules(): - """ - Find all functions in pygorithm.searching - """ - import pygorithm.searching - package = pygorithm.searching - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules - diff --git a/pygorithm/sorting/modules.py b/pygorithm/sorting/modules.py deleted file mode 100644 index 8d4598b..0000000 --- a/pygorithm/sorting/modules.py +++ /dev/null @@ -1,21 +0,0 @@ -""" -List all modules -""" -import pkgutil - -# TODO: This can be moved to the __init__.py file in the __all__ -# TODO: See the __init__.py file - -def modules(): - """ - Find all functions in pygorithm.sorting - """ - import pygorithm.sorting - package = pygorithm.sorting - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules - diff --git a/pygorithm/string/modules.py b/pygorithm/string/modules.py deleted file mode 100644 index e383192..0000000 --- a/pygorithm/string/modules.py +++ /dev/null @@ -1,15 +0,0 @@ -import pkgutil - - -def modules(): - """ - Find all functions in pygorithm.string - """ - import pygorithm.string - package = pygorithm.string - modules = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules.append(modname) - modules.remove('modules') - modules.sort() - return modules From f0a2afc0c07608c2ef9457ed08a36ff7af4a5739 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 24 Aug 2017 07:04:21 +0530 Subject: [PATCH 124/251] Typo fixes --- pygorithm/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 356c0c3..d7e9538 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -27,9 +27,9 @@ Emil 'Skeen' Madsen Ian 'IanDoarn' Doarn Timothy 'Tjsretchalot' Moore -Sharad '[sharadbhat](https://github.com/sharadbhat)' Bhat -Alexey '[aesee](https://github.com/aesee)' Sarapulov -Anthony '[MrDupin](https://github.com/MrDupin)' Marakis +Sharad 'sharadbhat' Bhat +Alexey 'aesee' Sarapulov +Anthony 'MrDupin' Marakis """ From cd87c0accccbfebb80010fe52093f9d7d25a9341 Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Thu, 24 Aug 2017 09:39:12 -0500 Subject: [PATCH 125/251] Updates by @IanDoarn - Updated binary package - minor updates to math package - fixed all init.py files and import statments --- pygorithm/binary/__init__.py | 28 +--- pygorithm/binary/ascii.py | 54 +++++++ pygorithm/binary/base10.py | 72 +++++++++ pygorithm/binary/base10_to_base16.py | 46 ------ pygorithm/binary/base16.py | 138 ++++++++++++++++++ .../binary/{base2_to_base16.py => base2.py} | 93 ++++++++++-- pygorithm/data_structures/__init__.py | 33 ++--- pygorithm/fibonacci/__init__.py | 27 ++-- pygorithm/geometry/__init__.py | 21 +-- pygorithm/math/__init__.py | 29 ++-- pygorithm/math/factorial.py | 17 ++- pygorithm/math/lcm.py | 2 +- pygorithm/pathfinding/__init__.py | 23 +-- pygorithm/searching/__init__.py | 31 ++-- pygorithm/sorting/__init__.py | 37 ++--- pygorithm/string/__init__.py | 27 ++-- 16 files changed, 460 insertions(+), 218 deletions(-) create mode 100644 pygorithm/binary/ascii.py create mode 100644 pygorithm/binary/base10.py delete mode 100644 pygorithm/binary/base10_to_base16.py create mode 100644 pygorithm/binary/base16.py rename pygorithm/binary/{base2_to_base16.py => base2.py} (60%) diff --git a/pygorithm/binary/__init__.py b/pygorithm/binary/__init__.py index ff0639d..16a8599 100644 --- a/pygorithm/binary/__init__.py +++ b/pygorithm/binary/__init__.py @@ -1,26 +1,14 @@ """ Collection or binary conversions and algorithms """ -from . import base2_to_base10 -from . import base2_to_base16 -from . import base2_to_ascii -from . import base10_to_base2 -from . import base10_to_base16 -from . import base16_to_base2 -from . import base16_to_base10 -from . import base16_to_ascii -from . import ascii_to_base2 -from . import ascii_to_base16 +from . import ascii +from . import base2 +from . import base10 +from . import base16 __all__ = [ - 'ascii_to_base2', - 'ascii_to_base16', - 'base2_to_base10', - 'base2_to_base16', - 'base2_to_ascii', - 'base10_to_base2', - 'base10_to_base16', - 'base16_to_base10', - 'base16_to_base2', - 'base16_to_ascii' + 'ascii', + 'base2', + 'base10', + 'base16' ] diff --git a/pygorithm/binary/ascii.py b/pygorithm/binary/ascii.py new file mode 100644 index 0000000..716ce15 --- /dev/null +++ b/pygorithm/binary/ascii.py @@ -0,0 +1,54 @@ +""" +ASCII + +Conversions from ASCII to: + - base2 + - base16 + +Author: Ian Doarn +""" +from pygorithm.binary.base10 import to_base2 as b10_to_b2 +from pygorithm.binary.base2 import to_base16 as b2_to_b16, \ + to_ascii as b2_to_ascii + + +def to_base16(string, visualize=False): + """ + Convert ascii to hexadecimal + :param string: string to convert + :param visualize: Show process + :param as_string: return value as string not array + :return: hex representation of given string + """ + hex_array = [] + + for b_value in to_base2(string): + if visualize: + print("{} -> {}".format( + b2_to_ascii(b_value), b2_to_b16(b_value) + )) + hex_array.append(b2_to_b16(b_value)) + + return hex_array + + +def to_base2(string, visualize=False, as_string=False): + """ + Convert ascii string to binary + :param string: Ascii string + :param visualize: Show process + :param as_string: join strings with a space as one large value + :return: array of binary numbers, or entire string + """ + _list = [] + for x in string: + if visualize: + print("{} -> {} -> {}".format( + x, str(ord(x)), + str(b10_to_b2(ord(x))) + )) + _list.append(str(b10_to_b2(ord(x)))) + + if as_string: + return ' '.join(_list) + return _list diff --git a/pygorithm/binary/base10.py b/pygorithm/binary/base10.py new file mode 100644 index 0000000..f80cfb5 --- /dev/null +++ b/pygorithm/binary/base10.py @@ -0,0 +1,72 @@ +""" +Binary: Base10 + +Conversions from base10 to: + - base2 + - base16 + +Author: Ian Doarn +""" +HEX_VALUES = { + 0: '0', 1: '1', 2: '2', + 3: '3', 4: '4', 5: '5', + 6: '6', 7: '7', 8: '8', + 9: '9', 10: 'A', 11: 'B', + 12: 'C', 13: 'D', 14: 'E', + 15: 'F' +} + + +def to_base2(n, visualize=False): + """ + Divide each number by 2 using + the % operator. + + Reverse the resulting list of numbers + and return the result + + :param n: decimal number + :param visualize: Show process + :return: binary number + """ + _list = [] + while n > 0.5: + if visualize: + print("{} / 2 = {} || {} % 2 = {}".format(str(n), str(n / 2), str(n), str(n % 2))) + _list.append(n % 2) + n = int(n / 2) + + # Reverse the list, turn each number to a string, + # join the string, and convert it back to an integer + return int(''.join([str(i) for i in _list[::-1]])) + + +def to_base16(n, visualize=False): + """ + Convert decimal number to hexadecimal + + Divide the number by 16 and add the remainder + to a list, round down the value after division + and repeat till our value is 0 + + Reverse the results list, get each values respective + hex value using HEX_VALUES map + + :param n: decimal number + :param visualize: Show process + :return: hexadecimal number + """ + _list = [] + while n != 0: + if visualize: + print("{} % 16 = {} -> hex = {}".format( + str(n), str(n % 16), HEX_VALUES[n % 16] + )) + _list.append(HEX_VALUES[n % 16]) + n = int(n / 16) + + if visualize: + print(_list) + print("reversed = " + str(_list[::-1])) + + return ''.join(_list[::-1]) diff --git a/pygorithm/binary/base10_to_base16.py b/pygorithm/binary/base10_to_base16.py deleted file mode 100644 index ad85c38..0000000 --- a/pygorithm/binary/base10_to_base16.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Convert decimal numbers to hexadecimal numbers - -Author: Ian Doarn -""" - - -hex_values = { - 0: '0', 1: '1', 2: '2', - 3: '3', 4: '4', 5: '5', - 6: '6', 7: '7', 8: '8', - 9: '9', 10: 'A', 11: 'B', - 12: 'C', 13: 'D', 14: 'E', - 15: 'F' -} - - -def convert_base10_to_base16(n, visualize=False): - """ - Convert decimal number to hexadecimal - - Divide the number by 16 and add the remainder - to a list, round down the value after division - and repeat till our value is 0 - - Reverse the results list, get each values respective - hex value using hex_values map - - :param n: decimal number - :param visualize: Show process - :return: hexadecimal number - """ - _list = [] - while n != 0: - if visualize: - print("{} % 16 = {} -> hex = {}".format( - str(n), str(n % 16), hex_values[n % 16] - )) - _list.append(hex_values[n % 16]) - n = int(n / 16) - - if visualize: - print(_list) - print("reversed = " + str(_list[::-1])) - - return ''.join(_list[::-1]) diff --git a/pygorithm/binary/base16.py b/pygorithm/binary/base16.py new file mode 100644 index 0000000..06d2f91 --- /dev/null +++ b/pygorithm/binary/base16.py @@ -0,0 +1,138 @@ +""" +Binary: Base16 + +Conversions from base16 to: + - base2 + - base10 + - ASCII + +Author: Ian Doarn +""" +from pygorithm.binary.base2 import to_ascii as b2_to_ascii +from math import pow + +HEX_BINARY_VALUES = { + '0': '0000', '1': '0001', '2': '0010', '3': '0011', + '4': '0100', '5': '0101', '6': '0110', '7': '0111', + '8': '1000', '9': '1001', 'A': '1010', 'B': '1011', + 'C': '1100', 'D': '1101', 'E': '1110', 'F': '1111' +} + +HEX_LETTER_VALUES = { + '0': 0, '1': 1, '2': 2, + '3': 3, '4': 4, '5': 5, + '6': 6, '7': 7, '8': 8, + '9': 9, 'A': 10, 'B': 11, + 'C': 12, 'D': 13, 'E': 14, + 'F': 15 +} + + +def to_base2(h, visualize=False): + """ + Convert hexadecimal to binary number + + :param h: hexadecimal number + :param visualize: Show process + :return: binary number + """ + + hex_char_list = list(h) + _list = [] + + for value in hex_char_list: + if visualize: + print("{} -> {}".format( + value, HEX_BINARY_VALUES[value] + )) + _list.append(HEX_BINARY_VALUES[value]) + + return int(''.join(_list)) + + +def to_base10(h, visualize=False): + """ + Convert hexadecimal number to decimal number + + Send hex to a list and reverse. Evaluate each hex value + via HEX_LETTER_VALUES map. Enumerate the list, + + using the equation: value * 16 ^ index + + value is the hex char value: F -> 15 + index is its position in the list: ['1', 'A', 'F'] F's index = 2 + + Continue this for each hex letter until we reach the end of the list, + summing all evaluated values. + + :param h: hexadecimal number + :param visualize: Show process + :return: decimal number + """ + + # Check to see if '0x' is at the beginning and remove it + if h[0:2] == '0x': + hex_char_list = list(h[2:])[::-1] + else: + hex_char_list = list(h)[::-1] + + value = 0 + + for i, v in enumerate(hex_char_list): + if visualize: + print("{} -> {} || {} * (16 ^ {}) = {}".format( + v, str(HEX_LETTER_VALUES[v]), + str(HEX_LETTER_VALUES[v]), + str(i), + str(HEX_LETTER_VALUES[v] * (pow(16, i))) + )) + + value += HEX_LETTER_VALUES[v] * (pow(16, i)) + + return int(value) + + +def to_ascii(h_array, visualize=False): + """ + Convert base16 array to ASCII string + + Input must be a list of strings: + Example:: + + array = [ + '74', '68', '65', + '20', '71', '75', + '69', '63', '6B', + '20', '62', '72', + '6F', '77', '6E', + '20', '66', '6F', + '78', '20', '6A', + '75', '6D', '70', + '73', '20', '6F', + '76', '65', '72', + '20', '74', '68', + '65', '20', '6C', + '61', '7A', '79', + '20', '64', '6F', + '67' + ] + + result -> the quick brown fox jumps over the lazy dog + + :param h_array: hex value array + :param visualize: Show process + :return: ASCII string + """ + string = '' + + for h_value in h_array: + if visualize: + print("{} -> {} -> {}".format( + h_value, + to_base2(h_value), + b2_to_ascii(str(to_base2(h_value))) + )) + + string += b2_to_ascii(str(to_base2(h_value))) + + return string diff --git a/pygorithm/binary/base2_to_base16.py b/pygorithm/binary/base2.py similarity index 60% rename from pygorithm/binary/base2_to_base16.py rename to pygorithm/binary/base2.py index 5c24e64..5c39ac6 100644 --- a/pygorithm/binary/base2_to_base16.py +++ b/pygorithm/binary/base2.py @@ -1,21 +1,86 @@ """ -Base2 to Base16 +Binary: Base2 -Convert binary numbers to hexadecimal numbers +Conversions from base2 to: + - base10 + - base16 + - ASCII Author: Ian Doarn """ +BINARY_HEX_VALUES = {"0000": "0", "0001": "1", "0010": "2", + "0011": "3", "0100": "4", "0101": "5", + "0110": "6", "0111": "7", "1000": "8", + "1001": "9", "1010": "A", "1011": "B", + "1100": "C", "1101": "D", "1110": "E", + "1111": "F"} -hex_values = {"0000": "0", "0001": "1", "0010": "2", - "0011": "3", "0100": "4", "0101": "5", - "0110": "6", "0111": "7", "1000": "8", - "1001": "9", "1010": "A", "1011": "B", - "1100": "C", "1101": "D", "1110": "E", - "1111": "F"} +def to_ascii(b, visualize=False): + """ + Convert binary to ASCII + + :param b: binary number or array + :param visualize: Show process + :return: ASCII String + """ + binary = b + # Make sure give binary is a str array + if type(b) is str: + binary = b.split(' ') + elif type(b) is list: + binary = b + + string = '' + + for b_value in binary: + if visualize: + print("{} -> {} -> {}".format( + b_value, to_base10(int(b_value)), + chr(to_base10(int(b_value))) + )) + value = to_base10(int(b_value)) + string += chr(value) + return string -def convert_base2_to_base16(n, visualize=False): +def to_base10(n, visualize=False): + """ + Convert given number to a list + for every number do the following formula + + x * 2 + number + + repeat for each result! Example: + + binary number = 100110 + + 0 x 2 + 1 = 1 + 1 x 2 + 0 = 2 + 2 x 2 + 0 = 4 + 4 x 2 + 1 = 9 + 9 x 2 + 1 = 19 + 19 x 2 + 0 = 38 + + :param n: binary number + :param visualize: Show process + :return: decimal number + """ + if type(n) is str: + raise ValueError('value must be int not type {}'.format(str(type(n)))) + + x = 0 + _list = [int(i) for i in str(n)] + + for number in _list: + if visualize: + print("{} x 2 + {} = {}".format(str(x), str(number), str(x * 2 + number))) + x = x * 2 + number + + return x + + +def to_base16(n, visualize=False): """ Convert binary numbers to hexadecimal numbers @@ -27,12 +92,12 @@ def convert_base2_to_base16(n, visualize=False): _list = [] for value in grouped_list: if visualize: - print("{} -> {}".format(value, hex_values[value])) + print("{} -> {}".format(value, BINARY_HEX_VALUES[value])) # for each value in the grouped_list, # get its respective value from the hex # table by referencing the key with the # current value from the grouped_list - _list.append(hex_values[value]) + _list.append(BINARY_HEX_VALUES[value]) return ''.join(_list) @@ -71,9 +136,9 @@ def __create_group_list(n): remaining value = 11 add missing 0's -> 1100 - + join each list: - + ['1', '0', '0', '1'] = 1001 ['0', '1', '0', '0'] = 0100 ['1', '1', '0', '0'] = 1100 @@ -82,7 +147,7 @@ def __create_group_list(n): ['1', '1', '0', '1'] = 1101 ['1100', '1101', '0100', '1001', '1100', '0100', '1001'] - + reverse final list result = ['0011', '1011', '0010', '1001', '0011', '0010', '1001'] diff --git a/pygorithm/data_structures/__init__.py b/pygorithm/data_structures/__init__.py index 7445a37..68711a1 100644 --- a/pygorithm/data_structures/__init__.py +++ b/pygorithm/data_structures/__init__.py @@ -1,21 +1,20 @@ """ Collection of data structure examples """ -import pkgutil +from . import graph +from . import heap +from . import linked_list +from . import queue +from . import stack +from . import tree +from . import trie -def modules(): - """ - Find all functions in pygorithm.data_structures - """ - from pygorithm import data_structures - package = data_structures - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'graph', + 'heap', + 'linked_list', + 'queue', + 'stack', + 'tree', + 'trie' +] \ No newline at end of file diff --git a/pygorithm/fibonacci/__init__.py b/pygorithm/fibonacci/__init__.py index bb8efbf..3a8c9d2 100644 --- a/pygorithm/fibonacci/__init__.py +++ b/pygorithm/fibonacci/__init__.py @@ -1,21 +1,14 @@ """ Collection of fibonacci methods and functions """ -import pkgutil +from . import generator +from . import goldenratio +from . import memoization +from . import recursion -def modules(): - """ - Find all functions in pygorithm.fibonacci - """ - from pygorithm import fibonacci - package = fibonacci - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'generator', + 'goldenratio', + 'memoization', + 'recursion' +] \ No newline at end of file diff --git a/pygorithm/geometry/__init__.py b/pygorithm/geometry/__init__.py index 6fad4c7..fc206f2 100644 --- a/pygorithm/geometry/__init__.py +++ b/pygorithm/geometry/__init__.py @@ -1,21 +1,8 @@ """ Collection of special geometry functions """ -import pkgutil +from . import rect_broad_phase -def modules(): - """ - Find all functions in pygorithm.geometry - """ - from pygorithm import geometry - package = geometry - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'rect_broad_phase' +] \ No newline at end of file diff --git a/pygorithm/math/__init__.py b/pygorithm/math/__init__.py index e8c105d..0336ea2 100644 --- a/pygorithm/math/__init__.py +++ b/pygorithm/math/__init__.py @@ -1,21 +1,16 @@ """ Collection of special math functions """ -import pkgutil +from . import conversion +from . import factorial +from . import lcm +from . import lcm_using_gcd +from . import sieve_of_eratosthenes -def modules(): - """ - Find all functions in pygorithm.math - """ - from pygorithm import math - package = math - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'conversion', + 'factorial', + 'lcm_using_gcd', + 'lcm', + 'sieve_of_eratosthenes' +] \ No newline at end of file diff --git a/pygorithm/math/factorial.py b/pygorithm/math/factorial.py index fc054b5..8af9602 100644 --- a/pygorithm/math/factorial.py +++ b/pygorithm/math/factorial.py @@ -2,9 +2,23 @@ Author: OMKAR PATHAK Created On: 22 August 2017 """ +import inspect + def factorial(number): - ''' This function calculates the factorial of a number ''' + """ + This recursive function calculates the factorial of a number + + In math, the factorial function is + represented by (!) exclamation mark. + + Example: + + 3! = 3 * 2 * 1 + = (6) * 1 + 3! = 6 + + """ if not isinstance(number, int): raise Exception('Enter an integer number to find the factorial') if number == 1 or number == 0: @@ -12,6 +26,7 @@ def factorial(number): else: return number * factorial(number - 1) + def get_code(): """ returns the code for the factorial function diff --git a/pygorithm/math/lcm.py b/pygorithm/math/lcm.py index ed13376..18fa9a8 100644 --- a/pygorithm/math/lcm.py +++ b/pygorithm/math/lcm.py @@ -2,7 +2,7 @@ Author: OMKAR PATHAK Created at: 16th August 2017 """ -from functools import reduce # need this line if you're using Python3.x +from functools import reduce import inspect diff --git a/pygorithm/pathfinding/__init__.py b/pygorithm/pathfinding/__init__.py index cb0cdca..5b8d1d3 100644 --- a/pygorithm/pathfinding/__init__.py +++ b/pygorithm/pathfinding/__init__.py @@ -1,21 +1,10 @@ """ Collection of pathfinding examples """ -import pkgutil +from . import astar +from . import dijkstra -def modules(): - """ - Find all functions in pygorithm.pathfinding - """ - from pygorithm import pathfinding - package = pathfinding - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'astar', + 'dijkstra' +] \ No newline at end of file diff --git a/pygorithm/searching/__init__.py b/pygorithm/searching/__init__.py index c7e01bd..7c08033 100644 --- a/pygorithm/searching/__init__.py +++ b/pygorithm/searching/__init__.py @@ -1,21 +1,18 @@ """ Collection of searching algorithms """ -import pkgutil +from . import binary_search +from . import breadth_first_search +from . import depth_first_search +from . import interpolation_search +from . import linear_search +from . import quick_select -def modules(): - """ - Find all functions in pygorithm.searching - """ - from pygorithm import searching - package = searching - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'binary_search', + 'breadth_first_search', + 'depth_first_search', + 'interpolation_search', + 'linear_search', + 'quick_select' +] diff --git a/pygorithm/sorting/__init__.py b/pygorithm/sorting/__init__.py index 37d2b78..7e58252 100644 --- a/pygorithm/sorting/__init__.py +++ b/pygorithm/sorting/__init__.py @@ -1,21 +1,24 @@ """ Collection of sorting methods """ -import pkgutil +from . import quick_sort +from . import bucket_sort +from . import bubble_sort +from . import heap_sort +from . import counting_sort +from . import insertion_sort +from . import merge_sort +from . import selection_sort +from . import shell_sort -def modules(): - """ - Find all functions in pygorithm.sorting - """ - from pygorithm import sorting - package = sorting - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'bubble_sort', + 'bucket_sort', + 'counting_sort', + 'heap_sort', + 'insertion_sort', + 'merge_sort', + 'quick_sort', + 'selection_sort', + 'shell_sort' +] \ No newline at end of file diff --git a/pygorithm/string/__init__.py b/pygorithm/string/__init__.py index 061cfc0..080b65b 100644 --- a/pygorithm/string/__init__.py +++ b/pygorithm/string/__init__.py @@ -1,21 +1,14 @@ """ Collection of string methods and functions """ -import pkgutil +from . import anagram +from . import pangram +from . import isogram +from . import palindrome -def modules(): - """ - Find all functions in pygorithm.string - """ - from pygorithm import string - package = string - modules_list = [] - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): - modules_list.append(modname) - modules_list.remove('modules') - modules_list.sort() - return modules_list - -modules_list = modules() - -__all__ = modules_list +__all__ = [ + 'anagram', + 'pangram', + 'isogram', + 'palindrome' +] \ No newline at end of file From 5d8c8fc3845774a4401031b3ac31dcf5e4518145 Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Thu, 24 Aug 2017 09:42:36 -0500 Subject: [PATCH 126/251] Delete ascii_to_base16.py --- pygorithm/binary/ascii_to_base16.py | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 pygorithm/binary/ascii_to_base16.py diff --git a/pygorithm/binary/ascii_to_base16.py b/pygorithm/binary/ascii_to_base16.py deleted file mode 100644 index fa99b3b..0000000 --- a/pygorithm/binary/ascii_to_base16.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -ASCII to Hexadecimal - -Author: Ian Doarn -""" -from pygorithm.binary.ascii_to_base2 import convert_ascii_to_base2 -from pygorithm.binary.base2_to_base16 import convert_base2_to_base16 -from pygorithm.binary.base2_to_ascii import convert_base2_to_ascii - - -def convert_ascii_to_base16(string, visualize=False): - """ - Convert ascii to hexadecimal - - :param string: string to convert - :param visualize: Show process - :param as_string: return value as string not array - :return: hex representation of given string - """ - hex_array = [] - - for b_value in convert_ascii_to_base2(string): - if visualize: - print("{} -> {}".format( - convert_base2_to_ascii(b_value), convert_base2_to_base16(b_value) - )) - hex_array.append(convert_base2_to_base16(b_value)) - - return hex_array From a14fec7cfa5cf37262b507384be903222b2b2a3c Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Thu, 24 Aug 2017 09:42:42 -0500 Subject: [PATCH 127/251] Delete ascii_to_base2.py --- pygorithm/binary/ascii_to_base2.py | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 pygorithm/binary/ascii_to_base2.py diff --git a/pygorithm/binary/ascii_to_base2.py b/pygorithm/binary/ascii_to_base2.py deleted file mode 100644 index 019dfa6..0000000 --- a/pygorithm/binary/ascii_to_base2.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -ASCII to Binary - -Author: Ian Doarn -""" -from pygorithm.binary.base10_to_base2 import convert_base10_to_base2 - - -def convert_ascii_to_base2(string, visualize=False, as_string=False): - """ - Convert ascii string to binary - - :param string: Ascii string - :param visualize: Show process - :param as_string: join strings with a space as one large value - :return: array of binary numbers, or entire string - """ - _list = [] - for x in string: - if visualize: - print("{} -> {} -> {}".format( - x, str(ord(x)), - str(convert_base10_to_base2(ord(x))) - )) - _list.append(str(convert_base10_to_base2(ord(x)))) - - if as_string: - return ' '.join(_list) - return _list From 8978e1bf322e2234895a2f4dc2ba66ab8e561c4d Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Thu, 24 Aug 2017 09:43:19 -0500 Subject: [PATCH 128/251] Delete base10_to_base2.py --- pygorithm/binary/base10_to_base2.py | 31 ----------------------------- 1 file changed, 31 deletions(-) delete mode 100644 pygorithm/binary/base10_to_base2.py diff --git a/pygorithm/binary/base10_to_base2.py b/pygorithm/binary/base10_to_base2.py deleted file mode 100644 index 4b1ffeb..0000000 --- a/pygorithm/binary/base10_to_base2.py +++ /dev/null @@ -1,31 +0,0 @@ -""" -Base10 to Base2 - -Convert decimal numbers to binary numbers - -Author: Ian Doarn -""" - - -def convert_base10_to_base2(n, visualize=False): - """ - Divide each number by 2 using - the % operator. - - Reverse the resulting list of numbers - and return the result - - :param n: decimal number - :param visualize: Show process - :return: binary number - """ - _list = [] - while n > 0.5: - if visualize: - print("{} / 2 = {} || {} % 2 = {}".format(str(n), str(n / 2), str(n), str(n % 2))) - _list.append(n % 2) - n = int(n / 2) - - # Reverse the list, turn each number to a string, - # join the string, and convert it back to an integer - return int(''.join([str(i) for i in _list[::-1]])) From b36b391ab1e1b8b3bab2da184bb3b1f4b6f9691c Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Thu, 24 Aug 2017 09:43:31 -0500 Subject: [PATCH 129/251] Delete base16_to_ascii.py --- pygorithm/binary/base16_to_ascii.py | 53 ----------------------------- 1 file changed, 53 deletions(-) delete mode 100644 pygorithm/binary/base16_to_ascii.py diff --git a/pygorithm/binary/base16_to_ascii.py b/pygorithm/binary/base16_to_ascii.py deleted file mode 100644 index 5043e41..0000000 --- a/pygorithm/binary/base16_to_ascii.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Hexadecimal to ASCII - -Author: Ian Doarn -""" -from pygorithm.binary.base16_to_base2 import convert_base16_to_base2 -from pygorithm.binary.base2_to_ascii import convert_base2_to_ascii - - -def convert_base16_to_ascii(h_array, visualize=False): - """ - Convert base16 array to ASCII string - - Input must be a list of strings: - Example:: - - array = [ - '74', '68', '65', - '20', '71', '75', - '69', '63', '6B', - '20', '62', '72', - '6F', '77', '6E', - '20', '66', '6F', - '78', '20', '6A', - '75', '6D', '70', - '73', '20', '6F', - '76', '65', '72', - '20', '74', '68', - '65', '20', '6C', - '61', '7A', '79', - '20', '64', '6F', - '67' - ] - - result -> the quick brown fox jumps over the lazy dog - - :param h_array: hex value array - :param visualize: Show process - :return: ASCII string - """ - string = '' - - for h_value in h_array: - if visualize: - print("{} -> {} -> {}".format( - h_value, - convert_base16_to_base2(h_value), - convert_base2_to_ascii(str(convert_base16_to_base2(h_value))) - )) - - string += convert_base2_to_ascii(str(convert_base16_to_base2(h_value))) - - return string From 74e1d9a949063033ececdb777a9141056da43e7e Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Thu, 24 Aug 2017 09:43:37 -0500 Subject: [PATCH 130/251] Delete base16_to_base10.py --- pygorithm/binary/base16_to_base10.py | 57 ---------------------------- 1 file changed, 57 deletions(-) delete mode 100644 pygorithm/binary/base16_to_base10.py diff --git a/pygorithm/binary/base16_to_base10.py b/pygorithm/binary/base16_to_base10.py deleted file mode 100644 index 796fee9..0000000 --- a/pygorithm/binary/base16_to_base10.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Hexadecimal to Decimal - -Author: Ian Doarn -""" -from math import pow - -hex_letter_values = { - '0': 0, '1': 1, '2': 2, - '3': 3, '4': 4, '5': 5, - '6': 6, '7': 7, '8': 8, - '9': 9, 'A': 10, 'B': 11, - 'C': 12, 'D': 13, 'E': 14, - 'F': 15 -} - - -def convert_base16_to_base10(h, visualize=False): - """ - Convert hexadecimal number to decimal number - - Send hex to a list and reverse. Evaluate each hex value - via hex_letter_values map. Enumerate the list, - - using the equation: value * 16 ^ index - - value is the hex char value: F -> 15 - index is its position in the list: ['1', 'A', 'F'] F's index = 2 - - Continue this for each hex letter until we reach the end of the list, - summing all evaluated values. - - :param h: hexadecimal number - :param visualize: Show process - :return: decimal number - """ - - # Check to see if '0x' is at the beginning and remove it - if h[0:2] == '0x': - hex_char_list = list(h[2:])[::-1] - else: - hex_char_list = list(h)[::-1] - - value = 0 - - for i, v in enumerate(hex_char_list): - if visualize: - print("{} -> {} || {} * (16 ^ {}) = {}".format( - v, str(hex_letter_values[v]), - str(hex_letter_values[v]), - str(i), - str(hex_letter_values[v] * (pow(16, i))) - )) - - value += hex_letter_values[v] * (pow(16, i)) - - return int(value) From b9df618900217bef9160f9cee685b1e08e490045 Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Thu, 24 Aug 2017 09:43:43 -0500 Subject: [PATCH 131/251] Delete base16_to_base2.py --- pygorithm/binary/base16_to_base2.py | 34 ----------------------------- 1 file changed, 34 deletions(-) delete mode 100644 pygorithm/binary/base16_to_base2.py diff --git a/pygorithm/binary/base16_to_base2.py b/pygorithm/binary/base16_to_base2.py deleted file mode 100644 index d0b3c4b..0000000 --- a/pygorithm/binary/base16_to_base2.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -Hexadecimal to Binary - -Author: Ian Doarn -""" - -hex_binary_values = { - '0': '0000', '1': '0001', '2': '0010', '3': '0011', - '4': '0100', '5': '0101', '6': '0110', '7': '0111', - '8': '1000', '9': '1001', 'A': '1010', 'B': '1011', - 'C': '1100', 'D': '1101', 'E': '1110', 'F': '1111' -} - - -def convert_base16_to_base2(h, visualize=False): - """ - Convert hexadecimal to binary number - - :param h: hexadecimal number - :param visualize: Show process - :return: binary number - """ - - hex_char_list = list(h) - _list = [] - - for value in hex_char_list: - if visualize: - print("{} -> {}".format( - value, hex_binary_values[value] - )) - _list.append(hex_binary_values[value]) - - return int(''.join(_list)) From b558bceeea39d9ebf4263a84f5cf4b2fd38d21c7 Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Thu, 24 Aug 2017 09:43:51 -0500 Subject: [PATCH 132/251] Delete base2_to_ascii.py --- pygorithm/binary/base2_to_ascii.py | 34 ------------------------------ 1 file changed, 34 deletions(-) delete mode 100644 pygorithm/binary/base2_to_ascii.py diff --git a/pygorithm/binary/base2_to_ascii.py b/pygorithm/binary/base2_to_ascii.py deleted file mode 100644 index 06694aa..0000000 --- a/pygorithm/binary/base2_to_ascii.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -Base2 to ASCII - -Author: Ian Doarn -""" -from pygorithm.binary.base2_to_base10 import convert_base2_to_base10 - - -def convert_base2_to_ascii(b, visualize=False): - """ - Convert binary to ASCII - - :param b: binary number or array - :param visualize: Show process - :return: ASCII String - """ - binary = b - # Make sure give binary is a str array - if type(b) is str: - binary = b.split(' ') - elif type(b) is list: - binary = b - - string = '' - - for b_value in binary: - if visualize: - print("{} -> {} -> {}".format( - b_value, convert_base2_to_base10(int(b_value)), - chr(convert_base2_to_base10(int(b_value))) - )) - value = convert_base2_to_base10(int(b_value)) - string += chr(value) - return string From 55cba7da3ec11d5357a8284588eed164e80804e4 Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Thu, 24 Aug 2017 09:44:00 -0500 Subject: [PATCH 133/251] Delete base2_to_base10.py --- pygorithm/binary/base2_to_base10.py | 43 ----------------------------- 1 file changed, 43 deletions(-) delete mode 100644 pygorithm/binary/base2_to_base10.py diff --git a/pygorithm/binary/base2_to_base10.py b/pygorithm/binary/base2_to_base10.py deleted file mode 100644 index 7557dd5..0000000 --- a/pygorithm/binary/base2_to_base10.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Base2 to Base10 - -Convert binary numbers to decimal numbers - -Author: Ian Doarn -""" - - -def convert_base2_to_base10(n, visualize=False): - """ - Convert given number to a list - for every number do the following formula - - x * 2 + number - - repeat for each result! Example: - - binary number = 100110 - - 0 x 2 + 1 = 1 - 1 x 2 + 0 = 2 - 2 x 2 + 0 = 4 - 4 x 2 + 1 = 9 - 9 x 2 + 1 = 19 - 19 x 2 + 0 = 38 - - :param n: binary number - :param visualize: Show process - :return: decimal number - """ - if type(n) is str: - raise ValueError('value must be int not type {}'.format(str(type(n)))) - - x = 0 - _list = [int(i) for i in str(n)] - - for number in _list: - if visualize: - print("{} x 2 + {} = {}".format(str(x), str(number), str(x * 2 + number))) - x = x * 2 + number - - return x From fd40eced70e11e475276788c18478d370563b512 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 24 Aug 2017 08:50:46 -0700 Subject: [PATCH 134/251] Add Vector2 tests * docs/Geometry.rst - fix incorrect quick start comment * tests/test_geometry.py - add class TestVector2 --- docs/Geometry.rst | 2 +- tests/test_geometry.py | 192 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 190 insertions(+), 4 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index c79dec3..332ad5d 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -16,7 +16,7 @@ Quick Start Guide # create a regular polygon poly1 = polygon2.Polygon2.from_regular(5, 5) - # create a polygon from tuple (x, y) - note that the polygon must be concave + # create a polygon from tuple (x, y) - note that the polygon must be convex poly2 = polygon2.Polygon2(points=[ (0, 0), (1, 0), (1, 1), (0, 1) ]) # create a polygon from vector2s. diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 9d3269f..e543c7a 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1,9 +1,13 @@ import unittest +import math from pygorithm.geometry import ( - rect_broad_phase - ) - + rect_broad_phase, + vector2, + axisall, + line2, + polygon2 + ) class TestCollisionDetection(unittest.TestCase): def setUp(self): @@ -28,5 +32,187 @@ def test_collision_detect(self): self.assertTrue(rect_broad_phase.broad_phase(self.simpleRect1, self.simpleRect2)) self.assertFalse(rect_broad_phase.broad_phase(self.simpleRect3, self.simpleRect4)) +class TestVector2(unittest.TestCase): + def test_constructor(self): + vec1 = vector2.Vector2(0, 5) + self.assertEqual(0, vec1.x) + self.assertEqual(5, vec1.y) + + vec2 = vector2.Vector2(x = 2, y = 3) + self.assertEqual(2, vec2.x) + self.assertEqual(3, vec2.y) + + vec3 = vector2.Vector2(vec2) + self.assertEqual(2, vec3.x) + self.assertEqual(3, vec3.y) + + vec4 = vector2.Vector2( (7, 11) ) + self.assertEqual(7, vec4.x) + self.assertEqual(11, vec4.y) + + def test_add(self): + vec1 = vector2.Vector2(3, 5) + vec2 = vector2.Vector2(2, 6) + + vec3 = vec1 + vec2 + self.assertEqual(5, vec3.x) + self.assertEqual(11, vec3.y) + + vec4 = vec2 + vec1 + self.assertEqual(5, vec4.x) + self.assertEqual(11, vec4.y) + + vec5 = vec3 + vec2 + self.assertEqual(7, vec5.x) + self.assertEqual(17, vec5.y) + + def test_subtract(self): + vec1 = vector2.Vector2(3, -5) + vec2 = vector2.Vector2(2, 3) + + vec3 = vec1 - vec2 + self.assertEqual(1, vec3.x) + self.assertEqual(-8, vec3.y) + + vec4 = vec2 - vec1 + self.assertEqual(-1, vec4.x) + self.assertEqual(8, vec4.y) + + def test_mul_scale(self): + vec1 = vector2.Vector2(3, 5) + + vec2 = vec1 * 2 + self.assertEqual(6, vec2.x) + self.assertEqual(10, vec2.y) + + vec3 = vec1 * 0.5 + self.assertAlmostEqual(1.5, vec3.x) + self.assertAlmostEqual(2.5, vec3.y) + + def test_mul_vector(self): + vec1 = vector2.Vector2(2, 7) + vec2 = vector2.Vector2(3, 5) + + with self.assertRaises(TypeError): + vec3 = vec1 * vec2 + + def test_rmul_scale(self): + vec1 = vector2.Vector2(2, 3) + + vec2 = 2 * vec1 + self.assertEqual(4, vec2.x) + self.assertEqual(6, vec2.y) + + vec3 = 0.5 * vec1 + self.assertEqual(1, vec3.x) + self.assertAlmostEqual(1.5, vec3.y) + + def test_repr(self): + vec = vector2.Vector2(7, 11) + + vec_repr = repr(vec) + + self.assertEqual('vector2(x=7, y=1)', vec_repr) + + def test_str(self): + vec = vector2.Vector2(7, 11) + + vec_str = str(vec) + self.assertEqual('<7, 11>', vec_str) + + vec2 = vector2.Vector2(0.70712356, 1) + + vec2_str = str(vec2) + self.assertEqual('<0.707, 1>', vec2_str) + + vec3 = vector2.Vector2(1, 105.567812354) + + vec3_str = str(vec3) + self.assertEqual('<1, 105.568>', vec3_str) + + vec4 = vector2.Vector2(1.5, 2.5) + + vec4_str = str(vec4) + self.assertEqual('<1.5, 2.5>', vec4_str) + + def test_dot(self): + vec1 = vector2.Vector2(3, 5) + vec2 = vector2.Vector2(7, 11) + + dot_12 = vec1.dot(vec2) + self.assertEqual(76, dot_12) + + dot_21 = vec2.dot(vec1) + self.assertEqual(76, dot_21) + + def test_rotate(self): + vec1 = vector2.Vector2(1, 0) + + vec2 = vec1.rotate(math.pi * 0.25) + self.assertAlmostEqual(0.70710678118, vec2.x) + self.assertAlmostEqual(0.70710678118, vec2.y) + + vec3 = vec1.rotate(degrees = 45) + self.assertAlmostEqual(0.70710678118, vec3.x) + self.assertAlmostEqual(0.70710678118, vec3.y) + + vec4 = vec1.rotate(math.pi, vector2.Vector2(1, 1)) + self.assertEqual(1, vec4.x) + self.assertEqual(2, vec4.y) + + vec5 = vec1.rotate(radians = math.pi, about = vector2.Vector2(1, 1)) + self.assertEqual(1, vec5.x) + self.assertEqual(2, vec5.y) + + vec6 = vec1.rotate(degrees = 180, about = vector2.Vector2(1, 1)) + self.assertEqual(1, vec6.x) + self.assertEqual(2, vec6.y) + + vec7 = vec1.rotate(vector2.Vector2(1, 1), degrees = 180) + self.assertEqual(1, vec7.x) + self.assertEqual(2, vec7.y) + + def test_normalize(self): + vec1 = vector2.Vector2(2, 0) + + vec2 = vec1.normalize() + self.assertEqual(2, vec1.x) + self.assertEqual(0, vec1.y) + self.assertEqual(1, vec2.x) + self.assertEqual(0, vec2.y) + + vec3 = vec2.normalize() + self.assertEqual(1, vec3.x) + self.assertEqual(0, vec3.y) + + vec3.y = 1 + self.assertEqual(1, vec2.x) + self.assertEqual(0, vec2.y) + self.assertEqual(1, vec3.x) + self.assertEqual(1, vec3.y) + + def test_magnitude_squared(self): + vec1 = vector2.Vector2(5, 12) + + magn_sq = vec1.magnitude_squared() + self.assertEqual(13*13, magn_sq) + + vec2 = vector2.Vector2(0, 0) + + magn_sq_2 = vec2.magnitude_squared() + self.assertEqual(0, magn_sq_2) + + vec2.x = 2 + + magn_sq_3 = vec2.magnitude_squared() + self.assertEqual(4, magn_sq_3) + + def test_magnitude(self): + vec1 = vector2.Vector2(3, 4) + + magn = vec1.magnitude() + self.assertEqual(5, magn) + + if __name__ == '__main__': unittest.main() \ No newline at end of file From fcecfd34386f459760eed6f78e9ff52e11bfd210 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 24 Aug 2017 10:21:12 -0700 Subject: [PATCH 135/251] Add Line2 tests * pygorithm/geometry/line2.py - minor documentation changes, add new method are_parallel(line1, line) * tests/test_geometry.py - add Line2 tests --- pygorithm/geometry/line2.py | 41 +++++--- tests/test_geometry.py | 188 ++++++++++++++++++++++++++++++++++++ 2 files changed, 214 insertions(+), 15 deletions(-) diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index 4c966e5..89bf338 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -19,7 +19,7 @@ class Line2(object): points, and thus cannot be changed on their own and must be recalculated if there were any changes to `start` or `end`. - .. note:: + .. tip:: To prevent unnecessary recalculations, many functions on lines accept an 'offset' argument, which is used to perform calculations on lines that @@ -275,7 +275,23 @@ def calculate_y_intercept(offset): pass @staticmethod - def find_intersection(line1, line2, offset1 = None, offset2 = None, find_mtv = True): + def are_parallel(line1, line2): + """ + Determine if the two lines are parallel. + + Two lines are parallel if they have the same or opposite slopes. + + :param line1: the first line + :type line1: :class:`pygorithm.geometry.line2.Line2` + :param line2: the second line + :type line2: :class:`pygorithm.geometry.line2.Line2` + :returns: if the lines are parallel + :rtype: bool + """ + pass + + @staticmethod + def find_intersection(line1, line2, offset1 = None, offset2 = None): """ Find the intersection between the two lines. @@ -283,18 +299,14 @@ def find_intersection(line1, line2, offset1 = None, offset2 = None, find_mtv = T will incur a minor performance penalty which is less than that of recreating new lines. - .. note:: + Two lines are considered touching if they only share exactly + one point and that point is an edge of one of the lines. - There is only a very minor performance improvement by setting find_mtv to - false. It is rare that, if an mtv will be necessary, to find any performance - improvement by first searching with ``find_mtv=False`` and then later - with :``find_mtv=True`` + If two lines are parallel, their intersection could be a line. - .. note:: - - The resulting mtv is broken up into distance and axis. This falls naturally out - of the algorithm and is often convienent. To find the full mtv, simply multiply - the two. + .. tip:: + + This will never return True, True :param line1: the first line :type line1: :class:`pygorithm.geometry.line2.Line2` @@ -304,9 +316,8 @@ def find_intersection(line1, line2, offset1 = None, offset2 = None, find_mtv = T :type offset1: :class:`pygorithm.geometry.vector2.Vector2` or None :param offset2: the offset of line 2 :type offset2: :class:`pygorithm.geometry.vector2.Vector2` or None - :param find_mtv: if false, mtv will always be null. - :returns: (touching, overlapping, (distance, axis)) - :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) + :returns: (touching, overlapping, intersection_location) + :rtype: (bool, bool, :class:`pygorithm.geometry.line2.Line2` or :class:`pygorithm.geometry.vector2.Vector2` or None) """ pass diff --git a/tests/test_geometry.py b/tests/test_geometry.py index e543c7a..b4140cc 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1,5 +1,6 @@ import unittest import math +import random from pygorithm.geometry import ( rect_broad_phase, @@ -213,6 +214,193 @@ def test_magnitude(self): magn = vec1.magnitude() self.assertEqual(5, magn) +class TestLine2(unittest.TestCase): + def setUp(self): + random.seed() + + self.vec_origin = vector2.Vector2(0, 0) + self.vec_1_1 = vector2.Vector2(1, 1) + self.vec_2_1 = vector2.Vector2(2, 1) + self.vec_1_2 = vector2.Vector2(1, 2) + self.vec_3_4 = vector2.Vector2(3, 4) + self.vec_neg_1_neg_1 = vector2.Vector2(-1, -1) + + self.line_origin_1_1 = line2.Line2(self.vec_origin, self.vec_1_1) + self.line_1_1_3_4 = line2.Line2(self.vec_1_1, self.vec_3_4) + self.line_1_1_2_1 = line2.Line2(self.vec_1_1, self.vec_2_1) + self.line_1_1_1_2 = line2.Line2(self.vec_1_1, self.vec_1_2) + + def test_constructor(self): + _line = self.line_origin_1_1 + + self.assertIsNotNone(_line.start) + self.assertIsNotNone(_line.end) + + self.assertEqual(0, _line.start.x) + self.assertEqual(0, _line.start.y) + self.assertEqual(1, _line.end.x) + self.assertEqual(1, _line.end.y) + + with self.assertRaises(ValueError): + _line2 = line2.Line2(self.vec_origin, self.vec_origin) + + def test_delta(self): + self.assertEqual(1, self.line_origin_1_1.delta.x) + self.assertEqual(1, self.line_origin_1_1.delta.y) + self.assertEqual(2, self.line_1_1_3_4.delta.x) + self.assertEqual(3, self.line_1_1_3_4.delta.y) + + def test_axis(self): + self.assertAlmostEqual(0.70710678118, self.line_origin_1_1.axis.x) + self.assertAlmostEqual(0.70710678118, self.line_origin_1_1.axis.y) + self.assertAlmostEqual(0.55470019622, self.line_1_1_3_4.axis.x) + self.assertAlmostEqual(0.83205029433, self.line_1_1_3_4.axis.y) + self.assertEqual(1, self.line_1_1_2_1.axis.x) + self.assertEqual(0, self.line_1_1_2_1.axis.y) + self.assertEqual(0, self.line_1_1_1_2.axis.x) + self.assertEqual(1, self.line_1_1_1_2.axis.y) + + def test_normal(self): + self.assertAlmostEqual(-0.70710678118, self.line_origin_1_1.normal.x) + self.assertAlmostEqual(0.70710678118, self.line_origin_1_1.normal.y) + self.assertAlmostEqual(-0.83205029433, self.line_1_1_3_4.normal.x) + self.assertAlmostEqual(0.55470019622, self.line_1_1_3_4.normal.y) + self.assertEqual(0, self.line_1_1_2_1.normal.x) + self.assertEqual(1, self.line_1_1_2_1.normal.y) + self.assertEqual(-1, self.line_1_1_1_2.normal.x) + self.assertEqual(0, self.line_1_1_1_2.normal.y) + + def test_magnitude_squared(self): + self.assertAlmostEqual(2, self.line_origin_1_1.magnitude_squared) + self.assertAlmostEqual(13, self.line_1_1_3_4.magnitude_squared) + self.assertEqual(1, self.line_1_1_2_1.magnitude_squared) + self.assertEqual(1, self.line_1_1_1_2.magnitude_squared) + + def test_magnitude(self): + self.assertAlmostEqual(1.41421356237, self.line_origin_1_1.magnitude) + self.assertAlmostEqual(3.60555127546, self.line_1_1_3_4.magnitude) + self.assertEqual(1, self.line_1_1_2_1.magnitude) + self.assertEqual(1, self.line_1_1_1_2.magnitude) + + def test_line_boundaries_x(self): # min_x, min_y, max_x, max_y + _line = line2.Line2(vector2.Vector2(-2, 3), vector2.Vector2(1, -1)) + self.assertEqual(-2, _line.min_x) + self.assertEqual(1, _line.max_x) + self.assertEqual(-1, _line.min_y) + self.assertEqual(3, _line.max_y) + + def test_slope(self): + self.assertEqual(1, self.line_origin_1_1.slope) + self.assertAlmostEqual(1.5, self.line_1_1_3_4.slope) + self.assertEqual(0, self.line_1_1_1_2.slope) + self.assertEqual(float('+inf'), self.line_1_1_2_1.slope) + + def test_y_intercept(self): + self.assertEqual(0, self.line_origin_1_1.y_intercept) + self.assertAlmostEqual(-0.5, self.line_1_1_3_4.y_intercept) + self.assertTrue(math.isnan(self.line_1_1_1_2.y_intercept)) + self.assertEqul(1, self.line_1_1_2_1.y_intercept) + + def test_horizontal(self): + self.assertFalse(self.line_origin_1_1.horizontal) + self.assertFalse(self.line_1_1_3_4.horizontal) + self.assertFalse(self.line_1_1_1_2.horizontal) + self.assertTrue(self.line_1_1_2_1.horizontal) + + def test_vertical(self): + self.assertFalse(self.line_origin_1_1.vertical) + self.assertFalse(self.line_1_1_3_4.vertical) + self.assertTrue(self.line_1_1_1_2.vertical) + self.assertFalse(self.line_1_1_2_1.vertical) + + def test_repr(self): + self.assertEqual('line2(start=vector2(x=1, y=1), end=vector2(x=3, y=4))', repr(self.line_1_1_3_4)) + + def test_str(self): + self.assertEqual('<1, 1> -> <3, 4>', str(self.line_1_1_3_4)) + + def test_calculate_y_intercept(self): + self.assertAlmostEqual(0.66666666667, self.line_1_1_3_4.calculate_y_intercept(self.vec_1_1)) + + def test_are_parallel(self): + self.assertFalse(line2.Line2.are_parallel(self.line_origin_1_1, self.line_1_1_3_4)) + + _line = line2.Line2(vector2.Vector2(5, 4), vector2.Vector2(3, 1)) + self.assertTrue(line2.Line2.are_parallel(self.line_1_1_3_4, _line)) + + @staticmethod + def _find_intr_fuzzer(v1, v2, v3, v4, exp_touching, exp_overlap, exp_intr, number_fuzzes = 3): + for i in range(number_fuzzes): + offset1 = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + offset2 = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + + _line1 = line2.Line2(v1 - offset1, v2 - offset1) + _line2 = line2.Line2(v3 - offset2, v4 - offset2) + + help_msg = 'v1={}, v2={}, offset1={}\n_line1={}\nv3={}, v4={}, offset2={}\n_line2={}'.format(repr(v1), \ + repr(v2), repr(offset1), repr(_line1), repr(v3), repr(v4), repr(offset2), repr(_line2)) + + touching, overlap, intr = line2.Line2.find_intersection(_line1, _line2, offset1, offset2) + self.assertEqual(exp_touching, touching, help_msg) + self.assertEqual(exp_overlap, overlap, help_msg) + + if exp_intr is None: + self.assertIsNone(intr, help_msg) + else: + self.assertIsNotNone(intr, help_msg) + + if isinstance(exp_intr, vector2.Vector2): + self.assertIsInstance(intr, vector2.Vector2, help_msg) + + self.assertAlmostEqual(exp_intr.x, intr.x) + self.assertAlmostEqual(exp_intr.y, intr.y) + else: + self.assertIsInstance(exp_intr, line2.Line2, help_msg) + self.assertIsInstance(intr, line2.Line2, help_msg) + + self.assertAlmostEqual(exp_intr.start.x, intr.start.x) + self.assertAlmostEqual(exp_intr.start.y, intr.start.y) + self.assertAlmostEqual(exp_intr.end.x, intr.end.x) + self.assertAlmostEqual(exp_intr.end.y, itnr.end.y) + + + def test_find_intersection_non_parallel_no_intersection(self): + self._find_intr_fuzzer(vector2.Vector2(3, 4), vector2.Vector2(5, 6), + vector2.Vector2(5, 4), vector2.Vector2(7, 3), + False, False, None) + + def test_find_intersection_parallel_no_intersection(self): + self._find_intr_fuzzer(vector2.Vector2(1, 1), vector2.Vector2(3, 3), + vector2.Vector2(2, 1), vector2.Vector2(4, 3), + False, False, None) + + def test_find_intersection_non_parallel_intersect_at_edge(self): + self._find_intr_fuzzer(vector2.Vector2(3, 4), vector2.Vector2(5, 6), + vector2.Vector2(1, 6), vector2.Vector2(5, 2), + True, False, vector2.Vector2(3, 4)) + + def test_find_intersection_non_parallel_intersect_not_edge(self): + self._find_intr_fuzzer(vector2.Vector2(3, 4), vector2.Vector2(5, 6), + vector2.Vector2(3.5, 7), vector2.Vector2(4.5, 4), + False, True, vector2.Vector2(4.125, 5.125)) + + def test_find_intersection_parallel_intersect_at_edge(self): + self._find_intr_fuzzer(vector2.Vector2(3, 4), vector2.Vector2(5, 6), + vector2.Vector2(5, 6), vector2.Vector2(7, 8), + True, False, vector2.Vector2(5, 6)) + + def test_find_intersection_parallel_intersect_overlap(self): + self._find_intr_fuzzer(vector2.Vector2(3, 4), vector2.Vector2(5, 6), + vector2.Vector2(4, 5), vector2.Vector2(7, 8), + False, True, line2.Line2(vector2.Vector2(4, 5), vector2.Vector2(5, 6))) + + def test_find_intersection_parallel_overlap_compeletely(self): + self._find_intr_fuzzer(vector2.Vector2(3, 4), vector2.Vector2(5, 6), + vector2.Vector2(2, 3), vector2.Vector2(7, 8), + False, True, line2.Line2(vector2.Vector2(3, 4), vector2.Vector2(5, 6))) + + + if __name__ == '__main__': unittest.main() \ No newline at end of file From 68f28b3ea27505a17a6c44ca00c586d8468f4f3e Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 25 Aug 2017 09:20:07 +0530 Subject: [PATCH 136/251] Added dynamic programming directory --- pygorithm/dynamic_programming/__init__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 pygorithm/dynamic_programming/__init__.py diff --git a/pygorithm/dynamic_programming/__init__.py b/pygorithm/dynamic_programming/__init__.py new file mode 100644 index 0000000..94d84e5 --- /dev/null +++ b/pygorithm/dynamic_programming/__init__.py @@ -0,0 +1,10 @@ +""" +Collection for dynamic programming algorithms +""" +from . import binary_knapsack +from . import lis + +__all__ = [ + 'binary_knapsack', + 'lis', +] From 1d35bfe02c47aadd3805c3ec8ff0bdaf9e788087 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 25 Aug 2017 09:20:34 +0530 Subject: [PATCH 137/251] Added binary knapsack implementation using dynamic programming --- .../dynamic_programming/binary_knapsack.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 pygorithm/dynamic_programming/binary_knapsack.py diff --git a/pygorithm/dynamic_programming/binary_knapsack.py b/pygorithm/dynamic_programming/binary_knapsack.py new file mode 100644 index 0000000..a100665 --- /dev/null +++ b/pygorithm/dynamic_programming/binary_knapsack.py @@ -0,0 +1,32 @@ +''' +Author: Omkar Pathak +Created At: 25th August 2017 +''' + +def knapsack(W, value, weight, n): + ''' + :param W: maximum weight capacity + :param value: an array of values of items in the knapsack + :param weight: an array of weights of items in the knapsack + :param n: number of items in the knapsack + ''' + knap_sack = [[0 for x in range(W+1)] for x in range(n+1)] + + for j in range(W + 1): + knap_sack[0][j] = 0 + + for i in range(n + 1): + for w in range(W + 1): + if weight[i - 1] <= w: + knap_sack[i][w] = max(value[i - 1] + knap_sack[i - 1][w - weight[i - 1]], knap_sack[i - 1][w]) + else: + knap_sack[i][w] = knap_sack[i - 1][w] + + return knap_sack[n][w] + + +def get_code(): + """ + returns the code for the knapsack function + """ + return inspect.getsource(knapsack) From 56b417e1b281d89ba9ea4f927d97079e8144b3f7 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 25 Aug 2017 09:20:56 +0530 Subject: [PATCH 138/251] Added longest increasing subsequence implementation using dynamic programming --- pygorithm/dynamic_programming/lis.py | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 pygorithm/dynamic_programming/lis.py diff --git a/pygorithm/dynamic_programming/lis.py b/pygorithm/dynamic_programming/lis.py new file mode 100644 index 0000000..4bf400c --- /dev/null +++ b/pygorithm/dynamic_programming/lis.py @@ -0,0 +1,42 @@ +''' +Author: Omkar Pathak +Created At: 25th August 2017 +''' + +def longest_increasing_subsequence(_list): + ''' + The Longest Increasing Subsequence (LIS) problem is to find the length of the longest subsequence of a + given sequence such that all elements of the subsequence are sorted in increasing order. For example, + the length of LIS for {10, 22, 9, 33, 21, 50, 41, 60, 80} is 6 and LIS is {10, 22, 33, 50, 60, 80}. + ''' + # Initialize list with some value + lis = [1] * len(_list) + # list for storing the elements in an lis + elements = [0] * len(_list) + + # Compute optimized LIS values in bottom up manner + for i in range (1 , len(_list)): + for j in range(0 , i): + if _list[i] > _list[j] and lis[i]< lis[j] + 1: + lis[i] = lis[j]+1 + elements[i] = j + + idx = 0 + + # find the maximum of the whole list and get its index in idx + maximum = max(lis) + idx = lis.index(maximum) + + # for printing the elements later + seq = [_list[idx]] + while idx != elements[idx]: + idx = elements[idx] + seq.append(_list[idx]) + + return (maximum, seq[::-1]) + +def get_code(): + """ + returns the code for the longest_increasing_subsequence function + """ + return inspect.getsource(longest_increasing_subsequence) From fd7d85a56cb784b98ec12a2171ff88e2fc242296 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 25 Aug 2017 09:21:14 +0530 Subject: [PATCH 139/251] Fixed typos --- pygorithm/data_structures/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pygorithm/data_structures/__init__.py b/pygorithm/data_structures/__init__.py index cbda7b4..c41ff86 100644 --- a/pygorithm/data_structures/__init__.py +++ b/pygorithm/data_structures/__init__.py @@ -17,3 +17,4 @@ 'stack', 'tree', 'trie' +] From e74ea15a409f6e68c2a5e2a57011f8d858626851 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 25 Aug 2017 09:21:34 +0530 Subject: [PATCH 140/251] Updated modules in __init__.py --- pygorithm/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 8cb8d74..ac7302f 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -33,7 +33,7 @@ """ -__version__ = '1.0.0' +__version__ = '1.0.3' __author__ = 'Omkar Pathak' # List maintainers here @@ -62,6 +62,7 @@ __all__ = [ 'binary', 'data_structures', + 'dynamic_programming', 'fibonacci', 'math', 'searching', From f6faf5513a3e08c3ddf31999ed6a2150422e337e Mon Sep 17 00:00:00 2001 From: sharadbhat Date: Fri, 25 Aug 2017 23:30:22 +0530 Subject: [PATCH 141/251] Added fractional knapsack and minor changes Created a greedy algorithm folder with fractional knapsack and minor changes to binary knapsack code. --- pygorithm/__init__.py | 6 +- .../dynamic_programming/binary_knapsack.py | 16 ++++- pygorithm/greedy_algorithm/__init__.py | 8 +++ .../greedy_algorithm/fractional_knapsack.py | 60 +++++++++++++++++++ 4 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 pygorithm/greedy_algorithm/__init__.py create mode 100644 pygorithm/greedy_algorithm/fractional_knapsack.py diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index ac7302f..c4d8989 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -56,7 +56,8 @@ "Songzhuozhuo 'souo'", "Emil 'Skeen' Madsen", "Ian 'IanDoarn' Doarn", - "Timothy 'Tjstretchalot' Moore" + "Timothy 'Tjstretchalot' Moore", + "Sharad 'sharadbhat' Bhat" ] __all__ = [ @@ -69,5 +70,6 @@ 'sorting', 'string', 'pathfinding' - 'geometry' + 'geometry', + 'greedy_algorithm' ] diff --git a/pygorithm/dynamic_programming/binary_knapsack.py b/pygorithm/dynamic_programming/binary_knapsack.py index a100665..9550574 100644 --- a/pygorithm/dynamic_programming/binary_knapsack.py +++ b/pygorithm/dynamic_programming/binary_knapsack.py @@ -3,13 +3,25 @@ Created At: 25th August 2017 ''' -def knapsack(W, value, weight, n): +import inspect + +def knapsack(W, value, weight): ''' :param W: maximum weight capacity :param value: an array of values of items in the knapsack :param weight: an array of weights of items in the knapsack - :param n: number of items in the knapsack ''' + if type(value) is not list: + raise TypeError("binary knapsack only accepts lists, not {}".format(str(type(value)))) + if type(weight) is not list: + raise TypeError("binary knapsack only accepts lists, not {}".format(str(type(weight)))) + + if len(value) != len(weight): + raise ValueError("both the lists must be of same length") + + # n = number of items + n = len(value) + knap_sack = [[0 for x in range(W+1)] for x in range(n+1)] for j in range(W + 1): diff --git a/pygorithm/greedy_algorithm/__init__.py b/pygorithm/greedy_algorithm/__init__.py new file mode 100644 index 0000000..64ef798 --- /dev/null +++ b/pygorithm/greedy_algorithm/__init__.py @@ -0,0 +1,8 @@ +""" +Collection for greedy algorithms +""" +from . import fractional_knapsack + +__all__ = [ + 'fractional_knapsack' +] diff --git a/pygorithm/greedy_algorithm/fractional_knapsack.py b/pygorithm/greedy_algorithm/fractional_knapsack.py new file mode 100644 index 0000000..554b220 --- /dev/null +++ b/pygorithm/greedy_algorithm/fractional_knapsack.py @@ -0,0 +1,60 @@ +""" +Author: SHARAD BHAT +Created On: 22nd August 2017 +""" + +import inspect + +def knapsack(W, item_values, item_weights): + """ + :param W: maximum weight capacity + :param item_values: a list of values of items in the knapsack + :param item_weights: a list of weights of items in the knapsack + """ + + if type(item_values) is not list: + raise TypeError("fractional knapsack only accepts lists, not {}".format(str(type(item_values)))) + if type(item_weights) is not list: + raise TypeError("fractional knapsack only accepts lists, not {}".format(str(type(item_weights)))) + + if len(item_values) != len(item_weights): + raise ValueError("length of both lists must be same") + + n = len(item_values) + + fractional_weights = [] + for i in range(0, n): + fractional_weights.append(item_values[i] / item_weights[i]) + + # Sorting items based on maximum fractional profit + for i in range(0, n): + maximum = i + for j in range(i, n): + if fractional_weights[maximum] < fractional_weights[j]: + maximum = j + + fractional_weights[i], fractional_weights[maximum] = fractional_weights[maximum], fractional_weights[i] + item_values[i], item_values[maximum] = item_values[maximum], item_values[i] + item_weights[i], item_weights[maximum] = item_weights[maximum], item_weights[i] + + # Placing items in knapsack + remaining_space = W + profit = 0 + for i in range(0, n): + if remaining_space > item_weights[i]: + profit += item_values[i] + remaining_space -= item_weights[i] + else: + profit += fractional_weights[i] * remaining_space + remaining_space = 0 + break + + return profit + + + +def get_code(): + """ + returns the code for the knapsack function + """ + return inspect.getsource(knapsack) From 6a28e4450b44dde258ffb198ab7e91f5616be2de Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 26 Aug 2017 06:06:22 +0530 Subject: [PATCH 142/251] Added tests for dynamic programming --- tests/test_dynamic_programming.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 tests/test_dynamic_programming.py diff --git a/tests/test_dynamic_programming.py b/tests/test_dynamic_programming.py new file mode 100644 index 0000000..314f70c --- /dev/null +++ b/tests/test_dynamic_programming.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +import unittest + +from pygorithm.dynamic_programming import ( + binary_knapsack, + lis + ) + + +class TestBinaryKnapsack(unittest.TestCase): + def test_binary_knapsack(self): + value = [60, 100, 120] + weight = [10, 20, 30] + W = 50 + n = len(value) + self.assertEqual(binary_knapsack.knapsack(W, value, weight, n), 220) + +class TestLongestIncreasingSubsequence(unittest.TestCase): + def test_lis(self): + _list = [10, 22, 9, 33, 21, 50, 41, 60] + ans = lis.longest_increasing_subsequence(_list) + self.assertEqual(ans[0], 5) + self.assertEqual(ans[1], [10, 22, 33, 50, 60]) + +if __name__ == '__main__': + unittest.main() From 529d41c041a795b231c14a244a51c06cc2df568f Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 26 Aug 2017 06:06:46 +0530 Subject: [PATCH 143/251] Added tests for greedy algorithm --- tests/test_greedy_algorithm.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tests/test_greedy_algorithm.py diff --git a/tests/test_greedy_algorithm.py b/tests/test_greedy_algorithm.py new file mode 100644 index 0000000..3125a0a --- /dev/null +++ b/tests/test_greedy_algorithm.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +import unittest + +from pygorithm.greedy_algorithm import ( + fractional_knapsack, + ) + + +class TestFractionalKnapsack(unittest.TestCase): + def test_fractional_knapsack(self): + value = [60, 100, 120] + weight = [10, 20, 30] + W = 50 + self.assertEqual(fractional_knapsack.knapsack(W, value, weight), 240) + +if __name__ == '__main__': + unittest.main() From 5a0946ee2ae4f327a9adfa558522a6a9485bb0f6 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 26 Aug 2017 06:25:37 +0530 Subject: [PATCH 144/251] Added activity selection problem implementation and its tests --- .../greedy_algorithm/activity_selection.py | 44 +++++++++++++++++++ tests/test_greedy_algorithm.py | 8 ++++ 2 files changed, 52 insertions(+) create mode 100644 pygorithm/greedy_algorithm/activity_selection.py diff --git a/pygorithm/greedy_algorithm/activity_selection.py b/pygorithm/greedy_algorithm/activity_selection.py new file mode 100644 index 0000000..e835e51 --- /dev/null +++ b/pygorithm/greedy_algorithm/activity_selection.py @@ -0,0 +1,44 @@ +""" +Author: OMKAR PATHAK +Created On: 26th August 2017 +""" + +import inspect + +def activity_selection(start_times, finish_times): + """ + :param start_times: An array that contains start time of all activities + :param finish_times: An array that conatins finish time of all activities + """ + + if type(start_times) is not list: + raise TypeError("Activity selection problem only accepts lists, not {}".format(str(type(start_times)))) + + if type(finish_times) is not list: + raise TypeError("Activity selection problem only accepts lists, not {}".format(str(type(finish_times)))) + + if len(start_times) != len(finish_times): + raise ValueError('Length of start_times list and finish_times list must be same') + + n = len(start_times) + activity = [] + + # first activity is also selected + i = 0 + activity.append(i) + + for j in range(n): + # If this activity has start time greater than + # or equal to the finish time of previously + # selected activity, then select it + if start_times[j] >= finish_times[i]: + activity.append(j) + i = j + + return activity + +def get_code(): + """ + returns the code for the activity_selection function + """ + return inspect.getsource(activity_selection) diff --git a/tests/test_greedy_algorithm.py b/tests/test_greedy_algorithm.py index 3125a0a..d024549 100644 --- a/tests/test_greedy_algorithm.py +++ b/tests/test_greedy_algorithm.py @@ -3,6 +3,7 @@ from pygorithm.greedy_algorithm import ( fractional_knapsack, + activity_selection, ) @@ -13,5 +14,12 @@ def test_fractional_knapsack(self): W = 50 self.assertEqual(fractional_knapsack.knapsack(W, value, weight), 240) +class TestActivitySelectionProblem(unittest.TestCase): + def test_activity_selection(self): + start_times = [1 , 3 , 0 , 5 , 8 , 5] + finish_times = [2 , 4 , 6 , 7 , 9 , 9] + + self.assertEqual(activity_selection.activity_selection(start_times, finish_times), [0, 1, 3, 4]) + if __name__ == '__main__': unittest.main() From 6ce882c3284d34b1c2382c0debb806847044b85b Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sat, 26 Aug 2017 06:25:58 +0530 Subject: [PATCH 145/251] Updated __init__.py --- pygorithm/greedy_algorithm/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pygorithm/greedy_algorithm/__init__.py b/pygorithm/greedy_algorithm/__init__.py index 64ef798..93c2ed7 100644 --- a/pygorithm/greedy_algorithm/__init__.py +++ b/pygorithm/greedy_algorithm/__init__.py @@ -4,5 +4,6 @@ from . import fractional_knapsack __all__ = [ - 'fractional_knapsack' + 'fractional_knapsack', + 'activity_selection', ] From 06e1b2914ee61b502c4b55371d3e81e182cec5e6 Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Sat, 26 Aug 2017 12:15:12 -0500 Subject: [PATCH 146/251] Syntax updates, ~nothing important~ --- pygorithm/dynamic_programming/__init__.py | 2 +- .../dynamic_programming/binary_knapsack.py | 25 ++++++++++--------- pygorithm/dynamic_programming/lis.py | 20 ++++++++------- pygorithm/greedy_algorithm/__init__.py | 2 +- .../greedy_algorithm/activity_selection.py | 4 ++- .../greedy_algorithm/fractional_knapsack.py | 11 ++++---- 6 files changed, 34 insertions(+), 30 deletions(-) diff --git a/pygorithm/dynamic_programming/__init__.py b/pygorithm/dynamic_programming/__init__.py index 94d84e5..4a7d594 100644 --- a/pygorithm/dynamic_programming/__init__.py +++ b/pygorithm/dynamic_programming/__init__.py @@ -6,5 +6,5 @@ __all__ = [ 'binary_knapsack', - 'lis', + 'lis' ] diff --git a/pygorithm/dynamic_programming/binary_knapsack.py b/pygorithm/dynamic_programming/binary_knapsack.py index 9550574..3ad39eb 100644 --- a/pygorithm/dynamic_programming/binary_knapsack.py +++ b/pygorithm/dynamic_programming/binary_knapsack.py @@ -1,16 +1,17 @@ -''' +""" Author: Omkar Pathak Created At: 25th August 2017 -''' - +""" import inspect +# TODO: Explain how this works / Explain what a knapsack is + -def knapsack(W, value, weight): - ''' - :param W: maximum weight capacity - :param value: an array of values of items in the knapsack - :param weight: an array of weights of items in the knapsack - ''' +def knapsack(w, value, weight): + """ + :param w: maximum weight capacity + :param value: an array of values of items in the knapsack + :param weight: an array of weights of items in the knapsack + """ if type(value) is not list: raise TypeError("binary knapsack only accepts lists, not {}".format(str(type(value)))) if type(weight) is not list: @@ -22,13 +23,13 @@ def knapsack(W, value, weight): # n = number of items n = len(value) - knap_sack = [[0 for x in range(W+1)] for x in range(n+1)] + knap_sack = [[0 for _ in range(w+1)] for _ in range(n+1)] - for j in range(W + 1): + for j in range(w + 1): knap_sack[0][j] = 0 for i in range(n + 1): - for w in range(W + 1): + for w in range(w + 1): if weight[i - 1] <= w: knap_sack[i][w] = max(value[i - 1] + knap_sack[i - 1][w - weight[i - 1]], knap_sack[i - 1][w]) else: diff --git a/pygorithm/dynamic_programming/lis.py b/pygorithm/dynamic_programming/lis.py index 4bf400c..a0686f5 100644 --- a/pygorithm/dynamic_programming/lis.py +++ b/pygorithm/dynamic_programming/lis.py @@ -1,28 +1,29 @@ -''' +""" Author: Omkar Pathak Created At: 25th August 2017 -''' +""" + def longest_increasing_subsequence(_list): - ''' + """ The Longest Increasing Subsequence (LIS) problem is to find the length of the longest subsequence of a given sequence such that all elements of the subsequence are sorted in increasing order. For example, the length of LIS for {10, 22, 9, 33, 21, 50, 41, 60, 80} is 6 and LIS is {10, 22, 33, 50, 60, 80}. - ''' + :param _list: + :return: + """ # Initialize list with some value lis = [1] * len(_list) # list for storing the elements in an lis elements = [0] * len(_list) # Compute optimized LIS values in bottom up manner - for i in range (1 , len(_list)): - for j in range(0 , i): - if _list[i] > _list[j] and lis[i]< lis[j] + 1: + for i in range(1, len(_list)): + for j in range(0, i): + if _list[i] > _list[j] and lis[i] < lis[j] + 1: lis[i] = lis[j]+1 elements[i] = j - idx = 0 - # find the maximum of the whole list and get its index in idx maximum = max(lis) idx = lis.index(maximum) @@ -35,6 +36,7 @@ def longest_increasing_subsequence(_list): return (maximum, seq[::-1]) + def get_code(): """ returns the code for the longest_increasing_subsequence function diff --git a/pygorithm/greedy_algorithm/__init__.py b/pygorithm/greedy_algorithm/__init__.py index 93c2ed7..6407c64 100644 --- a/pygorithm/greedy_algorithm/__init__.py +++ b/pygorithm/greedy_algorithm/__init__.py @@ -5,5 +5,5 @@ __all__ = [ 'fractional_knapsack', - 'activity_selection', + 'activity_selection' ] diff --git a/pygorithm/greedy_algorithm/activity_selection.py b/pygorithm/greedy_algorithm/activity_selection.py index e835e51..01dba2f 100644 --- a/pygorithm/greedy_algorithm/activity_selection.py +++ b/pygorithm/greedy_algorithm/activity_selection.py @@ -2,8 +2,9 @@ Author: OMKAR PATHAK Created On: 26th August 2017 """ - import inspect +# TODO: Explain what this is / how it works + def activity_selection(start_times, finish_times): """ @@ -37,6 +38,7 @@ def activity_selection(start_times, finish_times): return activity + def get_code(): """ returns the code for the activity_selection function diff --git a/pygorithm/greedy_algorithm/fractional_knapsack.py b/pygorithm/greedy_algorithm/fractional_knapsack.py index 554b220..cee4000 100644 --- a/pygorithm/greedy_algorithm/fractional_knapsack.py +++ b/pygorithm/greedy_algorithm/fractional_knapsack.py @@ -2,12 +2,13 @@ Author: SHARAD BHAT Created On: 22nd August 2017 """ - import inspect +# TODO: Explain how this works / Explain what a knapsack is + -def knapsack(W, item_values, item_weights): +def knapsack(w, item_values, item_weights): """ - :param W: maximum weight capacity + :param w: maximum weight capacity :param item_values: a list of values of items in the knapsack :param item_weights: a list of weights of items in the knapsack """ @@ -38,7 +39,7 @@ def knapsack(W, item_values, item_weights): item_weights[i], item_weights[maximum] = item_weights[maximum], item_weights[i] # Placing items in knapsack - remaining_space = W + remaining_space = w profit = 0 for i in range(0, n): if remaining_space > item_weights[i]: @@ -46,13 +47,11 @@ def knapsack(W, item_values, item_weights): remaining_space -= item_weights[i] else: profit += fractional_weights[i] * remaining_space - remaining_space = 0 break return profit - def get_code(): """ returns the code for the knapsack function From 1e27bc458f3ae92bd17ae4c2f5011a5b6fd04007 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sat, 26 Aug 2017 11:30:08 -0700 Subject: [PATCH 147/251] Axis-Aligned Line Tests * pygorithm/geometry/axisall.py - Minor documentation tweaks * tests/test_geometry.py - add tests for axis aligned line --- pygorithm/geometry/axisall.py | 13 ++-- tests/test_geometry.py | 126 ++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+), 6 deletions(-) diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py index e90aa86..91e3c06 100644 --- a/pygorithm/geometry/axisall.py +++ b/pygorithm/geometry/axisall.py @@ -67,7 +67,7 @@ def intersects(line1, line2): Determine if the two lines are touching and if they are, if they are overlapping. Lines are touching if they share only - one end point, whereas they are overlapping if they share + one end point, whereas they are overlapping if they share infinitely many points. .. note:: @@ -91,11 +91,12 @@ def find_intersection(line1, line2): """ Calculate the MTV between line1 and line2 to move line1 - Determine if the two lines are touching, and then returns the - minimum translation vector to move line 1 along axis. If the result - is negative, it means line 1 should be moved in the opposite direction - of the axis by the magnitude of the result. - + Determine if the two lines are touching and/or overlapping and then + returns the minimum translation vector to move line 1 along axis. If the + result is negative, it means line 1 should be moved in the opposite + direction of the axis by the magnitude of the result. + + Returns `true, None` if the lines are touching. .. note:: diff --git a/tests/test_geometry.py b/tests/test_geometry.py index b4140cc..bac7f2c 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -400,6 +400,132 @@ def test_find_intersection_parallel_overlap_compeletely(self): False, True, line2.Line2(vector2.Vector2(3, 4), vector2.Vector2(5, 6))) +class TestAxisAlignedLine(unittest.TestCase): + def setUp(self): + self.vec_1_1 = vector2.Vector2(1, 1) + + def test_constructor(self): + _aal = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + + self.assertIsNotNone(_aal.axis) + self.assertIsNotNone(_aal.min) + self.assertIsNotNone(_aal.max) + + self.assertEqual(1, _aal.axis.start.x) + self.assertEqual(1, _aal.axis.start.y) + self.assertEqual(0, _aal.min) + self.assertEqual(1, _aal.max) + + _aal2 = axisall.AxisAlignedLine(self.vec_1_1, 1, 0) + + self.assertEqual(0, _aal.min) + self.assertEqual(1, _aal.max) + + def test_intersects_false(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + _aal2 = axisall.AxisAlignedLine(self.vec_1_1, 2, 3) + + touching, overlapping = axisall.AxisAlignedLine.intersects(_aal1, _aal2) + self.assertFalse(touching) + self.assertFalse(overlapping) + + touching, overlapping = axisall.AxisAlignedLine.intersects(_aal2, _aal1) + self.assertFalse(touching) + self.assertFalse(overlapping) + + def test_intersects_touching(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + _aal2 = axisall.AxisAlignedLine(self.vec_1_1, 1, 2) + + touching, overlapping = axisall.AxisAlignedLine.intersects(_aal1, _aal2) + self.assertTrue(touching) + self.assertFalse(overlapping) + + touching, overlapping = axisall.AxisAlignedLine.intersects(_aal2, _aal1) + self.assertTrue(touching) + self.assertFalse(overlapping) + + def test_intersects_overlapping(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, -1, -3) + _aal2 = axisall.AxisAlignedLine(self.vec_1_1, -2, 5) + + touching, overlapping = axisall.AxisAlignedLine.intersects(_aal1, _aal2) + self.assertFalse(touching) + self.assertTrue(overlapping) + + touching, overlapping = axisall.AxisAlignedLine.intersects(_aal2, _aal1) + self.assertFalse(touching) + self.assertTrue(overlapping) + + + def test_find_intersection_false(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + _aal2 = axisall.AxisAlignedLine(self.vec_1_1, 2, 3) + + touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal1, _aal2) + self.assertFalse(touching) + self.assertIsNone(mtv) + + touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal2, _aal1) + self.assertFalse(touching) + self.assertIsNone(mtv) + + def test_find_intersection_touching(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + _aal2 = axisall.AxisAlignedLine(self.vec_1_1, 1, 2) + + touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal1, _aal2) + self.assertTrue(touching) + self.assertIsNone(mtv) + + touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal2, _aal1) + self.assertTrue(touching) + self.assertIsNone(mtv) + + def test_find_intersection_overlapping(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, -3, -1) + _aal2 = axisall.AxisAlignedLine(self.vec_1_1, -2, 5) + + touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal1, _aal2) + self.assertFalse(touching) + self.assertEquals(-1, mtv) + + touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal2, _aal1) + self.assertFalse(touching) + self.assertEquals(1, mtv) + + def test_contains_point_false(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + + outer, inner = axisall.AxisAlignedLine.contains_point(_aal1, -1) + self.assertFalse(outer) + self.assertFalse(inner) + + outer, inner = axisall.AxisAlignedLine.contains_point(_aal1, 1.5) + self.assertFalse(outer) + self.assertFalse(inner) + + def test_contains_point_outer(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + + outer, inner = axisall.AxisAlignedLine.contains_point(_aal1, 0) + self.assertTrue(outer) + self.assertFalse(inner) + + outer, inner = axisall.AxisAlignedLine.contains_point(_aal1, 1) + self.assertTrue(outer) + self.assertFalse(inner) + + def test_contains_point_inner(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + + outer, inner = axisall.AxisAlignedLine.contains_point(_aal1, 0.25) + self.assertFalse(outer) + self.assertTrue(inner) + + outer, inner = axisall.AxisAlignedLine.contains_point(_aal1, 0.75) + self.assertFalse(outer) + self.assertTrue(inner) if __name__ == '__main__': From b4da00c9581d1bf25f5f30a680cf9031f6b1c3ad Mon Sep 17 00:00:00 2001 From: IanDoarn Date: Sat, 26 Aug 2017 13:55:02 -0500 Subject: [PATCH 148/251] Unittests and other stuff --- pygorithm/__init__.py | 2 +- pygorithm/binary/ascii.py | 4 +- pygorithm/binary/base10.py | 2 +- pygorithm/binary/base16.py | 3 +- pygorithm/binary/binary_utils.py | 16 +++ pygorithm/{string => strings}/__init__.py | 0 pygorithm/{string => strings}/anagram.py | 0 pygorithm/{string => strings}/isogram.py | 0 pygorithm/{string => strings}/palindrome.py | 0 pygorithm/{string => strings}/pangram.py | 0 tests/test_binary.py | 110 ++++++++++++++++++++ tests/test_dynamic_programming.py | 3 +- tests/test_string.py | 2 +- 13 files changed, 135 insertions(+), 7 deletions(-) create mode 100644 pygorithm/binary/binary_utils.py rename pygorithm/{string => strings}/__init__.py (100%) rename pygorithm/{string => strings}/anagram.py (100%) rename pygorithm/{string => strings}/isogram.py (100%) rename pygorithm/{string => strings}/palindrome.py (100%) rename pygorithm/{string => strings}/pangram.py (100%) create mode 100644 tests/test_binary.py diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index c4d8989..8117acc 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -68,7 +68,7 @@ 'math', 'searching', 'sorting', - 'string', + 'strings', 'pathfinding' 'geometry', 'greedy_algorithm' diff --git a/pygorithm/binary/ascii.py b/pygorithm/binary/ascii.py index 716ce15..6277810 100644 --- a/pygorithm/binary/ascii.py +++ b/pygorithm/binary/ascii.py @@ -7,6 +7,7 @@ Author: Ian Doarn """ +from pygorithm.binary.binary_utils import pad from pygorithm.binary.base10 import to_base2 as b10_to_b2 from pygorithm.binary.base2 import to_base16 as b2_to_b16, \ to_ascii as b2_to_ascii @@ -47,7 +48,8 @@ def to_base2(string, visualize=False, as_string=False): x, str(ord(x)), str(b10_to_b2(ord(x))) )) - _list.append(str(b10_to_b2(ord(x)))) + value = pad(str(b10_to_b2(ord(x)))) + _list.append(value) if as_string: return ' '.join(_list) diff --git a/pygorithm/binary/base10.py b/pygorithm/binary/base10.py index f80cfb5..eeb1e2b 100644 --- a/pygorithm/binary/base10.py +++ b/pygorithm/binary/base10.py @@ -62,7 +62,7 @@ def to_base16(n, visualize=False): print("{} % 16 = {} -> hex = {}".format( str(n), str(n % 16), HEX_VALUES[n % 16] )) - _list.append(HEX_VALUES[n % 16]) + _list.append(HEX_VALUES[n % 16]) n = int(n / 16) if visualize: diff --git a/pygorithm/binary/base16.py b/pygorithm/binary/base16.py index 06d2f91..c759aee 100644 --- a/pygorithm/binary/base16.py +++ b/pygorithm/binary/base16.py @@ -9,6 +9,7 @@ Author: Ian Doarn """ from pygorithm.binary.base2 import to_ascii as b2_to_ascii +from pygorithm.binary.binary_utils import pad from math import pow HEX_BINARY_VALUES = { @@ -45,7 +46,7 @@ def to_base2(h, visualize=False): print("{} -> {}".format( value, HEX_BINARY_VALUES[value] )) - _list.append(HEX_BINARY_VALUES[value]) + _list.append(pad(HEX_BINARY_VALUES[value])) return int(''.join(_list)) diff --git a/pygorithm/binary/binary_utils.py b/pygorithm/binary/binary_utils.py new file mode 100644 index 0000000..f5c4d9f --- /dev/null +++ b/pygorithm/binary/binary_utils.py @@ -0,0 +1,16 @@ +""" +Helper methods for binary package +Author: Ian Doarn +""" + + +def pad(value: str, return_type=str) -> """Pad binary value with zeros""": + if len(value) % 4 != 0: + pad_amount = 4 - (len(value) % 4) + return return_type(('0' * pad_amount) + value) + else: + return return_type(value) + + +def to_string(binary_array: list, delimiter=' ') -> """Convert binary array to string""": + return delimiter.join(binary_array) \ No newline at end of file diff --git a/pygorithm/string/__init__.py b/pygorithm/strings/__init__.py similarity index 100% rename from pygorithm/string/__init__.py rename to pygorithm/strings/__init__.py diff --git a/pygorithm/string/anagram.py b/pygorithm/strings/anagram.py similarity index 100% rename from pygorithm/string/anagram.py rename to pygorithm/strings/anagram.py diff --git a/pygorithm/string/isogram.py b/pygorithm/strings/isogram.py similarity index 100% rename from pygorithm/string/isogram.py rename to pygorithm/strings/isogram.py diff --git a/pygorithm/string/palindrome.py b/pygorithm/strings/palindrome.py similarity index 100% rename from pygorithm/string/palindrome.py rename to pygorithm/strings/palindrome.py diff --git a/pygorithm/string/pangram.py b/pygorithm/strings/pangram.py similarity index 100% rename from pygorithm/string/pangram.py rename to pygorithm/strings/pangram.py diff --git a/tests/test_binary.py b/tests/test_binary.py new file mode 100644 index 0000000..20b87fe --- /dev/null +++ b/tests/test_binary.py @@ -0,0 +1,110 @@ +import unittest + +from pygorithm.binary import ( + ascii, + base2, + base10, + base16 +) + + +class TestBase2(unittest.TestCase): + def test_base2_to_ascii(self): + array = ['01010100', '01101000', '01100101', '00100000', '01010001', '01110101', '01101001', + '01100011', + '01101011', '00100000', '01000010', '01110010', '01101111', '01110111', '01101110', + '00100000', + '01000110', '01101111', '01111000', '00100000', '01001010', '01110101', '01101101', + '01110000', + '01110011', '00100000', '01001111', '01110110', '01100101', '01110010', '00100000', + '01110100', + '01101000', '01100101', '00100000', '01001100', '01100001', '01111010', '01111001', + '00100000', + '01000100', '01101111', '01100111'] + + self.assertEqual(base2.to_ascii(array), "The Quick Brown Fox Jumps Over the Lazy Dog") + + def test_base2_to_base10(self): + self.assertEqual(base2.to_base10(1101001000101001), 53801) + self.assertEqual(base2.to_base10(101111101011110000011111111), 99999999) + self.assertEqual(base2.to_base10(10011110110001100001010001100101000000110001), 10910848929841) + + def test_base2_to_base16(self): + self.assertEqual(base2.to_base16(1101001000101001), 'D229') + self.assertEqual(base2.to_base16(101111101011110000011111111), '5F5E0FF') + self.assertEqual(base2.to_base16(10011110110001100001010001100101000000110001), '9EC61465031') + + +class TestBase10(unittest.TestCase): + def test_base10_to_base2(self): + self.assertEqual(base10.to_base2(10), 1010) + self.assertEqual(base10.to_base2(99999999), 101111101011110000011111111) + self.assertEqual(base10.to_base2(1234567890), 1001001100101100000001011010010) + + def test_base10_to_base16(self): + self.assertEqual(base10.to_base16(99999999), '5F5E0FF') + self.assertEqual(base10.to_base16(1111111111111111111), 'F6B75AB2BC47207') + self.assertEqual(base10.to_base16(34875439754935739457), '1E3FE73ADDA7B2001') + self.assertEqual(base10.to_base16(3735928559), 'DEADBEEF') + + +class TestBase16(unittest.TestCase): + def test_base16_to_base2(self): + self.assertEqual(base16.to_base2('DEADBEEF'), 11011110101011011011111011101111) + self.assertEqual(base16.to_base2('FFFFFFFFFFFFFFF'), + 111111111111111111111111111111111111111111111111111111111111) + self.assertEqual(base16.to_base2('23F235E865A45C'), 100011111100100011010111101000011001011010010001011100) + + def test_base16_to_base10(self): + self.assertEqual(base16.to_base10('DEADBEEF'), 3735928559) + self.assertEqual(base16.to_base10('FFFFFFFFFFFFFFF'), 1152921504606846976) + self.assertEqual(base16.to_base10('23F235E865A45C'), 10117937531036764) + + def test_base16_to_ascii(self): + array = ['54', '68', '65', '20', '51', '75', '69', '63', '6B', '20', '42', '72', '6F', '77', '6E', '20', '46', + '6F', '78', '20', '4A', '75', '6D', '70', '73', '20', '4F', '76', '65', '72', '20', '74', '68', '65', + '20', '4C', '61', '7A', '79', '20', '44', '6F', '67'] + + array_2 = ['77', '48', '40', '74', '20', '5F', '54', '2D', '68', '33', '20', '2F', '2F', '2D', '46', '3D', '7E', + '21', '63', '6B'] + + self.assertEqual(base16.to_ascii(array), "The Quick Brown Fox Jumps Over the Lazy Dog") + self.assertEqual(base16.to_ascii(array_2), "wH@t _T-h3 //-F=~!ck") + + +class TestASCII(unittest.TestCase): + def test_ascii_to_base16(self): + array = ['54', '68', '65', '20', '51', '75', '69', '63', '6B', '20', '42', '72', '6F', '77', '6E', '20', '46', + '6F', '78', '20', '4A', '75', '6D', '70', '73', '20', '4F', '76', '65', '72', '20', '74', '68', '65', + '20', '4C', '61', '7A', '79', '20', '44', '6F', '67'] + + array_2 = ['77', '48', '40', '74', '20', '5F', '54', '2D', '68', '33', '20', '2F', '2F', '2D', '46', '3D', '7E', + '21', '63', '6B'] + + self.assertEqual(ascii.to_base16("The Quick Brown Fox Jumps Over the Lazy Dog"), array) + self.assertEqual(ascii.to_base16("wH@t _T-h3 //-F=~!ck"), array_2) + + def test_ascii_to_base2(self): + array = ['01010100', '01101000', '01100101', '00100000', '01010001', '01110101', '01101001', + '01100011', + '01101011', '00100000', '01000010', '01110010', '01101111', '01110111', '01101110', + '00100000', + '01000110', '01101111', '01111000', '00100000', '01001010', '01110101', '01101101', + '01110000', + '01110011', '00100000', '01001111', '01110110', '01100101', '01110010', '00100000', + '01110100', + '01101000', '01100101', '00100000', '01001100', '01100001', '01111010', '01111001', + '00100000', + '01000100', '01101111', '01100111'] + + array_2 = ['01110111', '01001000', '01000000', '01110100', '00100000', '01011111', '01010100', '00101101', + '01101000', + '00110011', '00100000', '00101111', '00101111', '00101101', '01000110', '00111101', '01111110', + '00100001', + '01100011', '01101011'] + + self.assertEqual(ascii.to_base2("wH@t _T-h3 //-F=~!ck"), array_2) + self.assertEqual(ascii.to_base2("The Quick Brown Fox Jumps Over the Lazy Dog"), array) + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_dynamic_programming.py b/tests/test_dynamic_programming.py index 314f70c..6489fc2 100644 --- a/tests/test_dynamic_programming.py +++ b/tests/test_dynamic_programming.py @@ -12,8 +12,7 @@ def test_binary_knapsack(self): value = [60, 100, 120] weight = [10, 20, 30] W = 50 - n = len(value) - self.assertEqual(binary_knapsack.knapsack(W, value, weight, n), 220) + self.assertEqual(binary_knapsack.knapsack(W, value, weight), 220) class TestLongestIncreasingSubsequence(unittest.TestCase): def test_lis(self): diff --git a/tests/test_string.py b/tests/test_string.py index db7bd0f..0dc7b28 100644 --- a/tests/test_string.py +++ b/tests/test_string.py @@ -1,6 +1,6 @@ import unittest -from pygorithm.string import ( +from pygorithm.strings import ( anagram, isogram, pangram, From 0422b1720c9c8d29d1b74f7b0268e67a9a80fd00 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 27 Aug 2017 05:57:57 +0530 Subject: [PATCH 149/251] Updates --- pygorithm/greedy_algorithm/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pygorithm/greedy_algorithm/__init__.py b/pygorithm/greedy_algorithm/__init__.py index 93c2ed7..8f75344 100644 --- a/pygorithm/greedy_algorithm/__init__.py +++ b/pygorithm/greedy_algorithm/__init__.py @@ -2,6 +2,7 @@ Collection for greedy algorithms """ from . import fractional_knapsack +from . import activity_selection __all__ = [ 'fractional_knapsack', From db4223bcef6e8e6382b8fc63c8eed228161954af Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 27 Aug 2017 05:58:27 +0530 Subject: [PATCH 150/251] Added math/pascals_triangle.py --- pygorithm/math/__init__.py | 3 ++- pygorithm/math/pascals_triangle.py | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 pygorithm/math/pascals_triangle.py diff --git a/pygorithm/math/__init__.py b/pygorithm/math/__init__.py index 79dae27..5d46967 100644 --- a/pygorithm/math/__init__.py +++ b/pygorithm/math/__init__.py @@ -5,6 +5,7 @@ from . import factorial from . import lcm from . import lcm_using_gcd +from . import pascals_triangle from . import sieve_of_eratosthenes __all__ = [ @@ -12,6 +13,6 @@ 'factorial', 'lcm_using_gcd', 'lcm', + 'pascals_triangle', 'sieve_of_eratosthenes' ] - diff --git a/pygorithm/math/pascals_triangle.py b/pygorithm/math/pascals_triangle.py new file mode 100644 index 0000000..1fb60d9 --- /dev/null +++ b/pygorithm/math/pascals_triangle.py @@ -0,0 +1,25 @@ +''' +Author: OMKAR PATHAK +Created at: 26th August 2017 +''' + +def pascals_triangle(n): + ''' + :param n: total number of lines in pascal triangle + + Pascal’s triangle is a triangular array of the binomial coefficients. + Following are the first 6 rows of Pascal’s Triangle (when n = 6) + 1 + 1 1 + 1 2 1 + 1 3 3 1 + 1 4 6 4 1 + 1 5 10 10 5 1 + ''' + + for line in range(1, n + 1): + C = 1 + for i in range(1, line + 1): + print(C, end = ' ') + C = C * (line - i) // i + print() From 8794c852f73a2288dacfe6ec44e478a05838c952 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 27 Aug 2017 05:58:56 +0530 Subject: [PATCH 151/251] Added implementation of exponential search --- pygorithm/searching/exponential_search.py | 74 +++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 pygorithm/searching/exponential_search.py diff --git a/pygorithm/searching/exponential_search.py b/pygorithm/searching/exponential_search.py new file mode 100644 index 0000000..2bf5c2d --- /dev/null +++ b/pygorithm/searching/exponential_search.py @@ -0,0 +1,74 @@ +""" +Author: OMKAR PATHAK +Created On: 26th August 2017 + + - Best O(1) + - Average O(logn) + - Worst O(logn) + + More info: https://en.wikipedia.org/wiki/Exponential_search +""" + +from __future__ import division +import inspect + +def binary_search(_list, left, right, target): + if right >= left: + mid = (left + right) // 2 + + # if element is present at the mid itself + if _list[mid] == target: + return mid + + # If the element is smaller than mid, then it + # can only be present in the left subarray + if _list[mid] > target: + return binary_search(_list, left, mid - 1, target) + + # Else the element can only be present in the right + return binary_search(_list, mid + 1, right, target) + + return False + +def search(_list, target): + """ + This function performs a exponential search + on a sorted list and returns the index + of item if successful else returns False + + :param _list: list to search + :param target: item to search for + :return: index of item if successful else returns False + """ + + if type(_list) is not list: + raise TypeError("Exponential search only excepts lists, not {}".format(str(type(_list)))) + + # is target is at the first position itself + if _list[0] == target: + return 0 + + # Find range for binary seaarch by repeated doubling + i = 1 + while i < len(_list) and _list[i] <= target: + i = i * 2 + + return binary_search(_list, i//2, min(i, len(_list)), target) + + +def time_complexities(): + """ + Return information on functions + time complexity + :return: string + """ + return "Best Case: O(1), Average Case: O(logn), Worst Case: O(logn)" + + +def get_code(): + """ + easily retrieve the source code + of the function + :return: source code + """ + return inspect.getsource(search) From b8cc5e3fa1226693e02c3a4270d2d5953e3153a0 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 27 Aug 2017 05:59:16 +0530 Subject: [PATCH 152/251] Added implementation of ternary search --- pygorithm/searching/__init__.py | 6 ++- pygorithm/searching/ternary_search.py | 53 +++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 pygorithm/searching/ternary_search.py diff --git a/pygorithm/searching/__init__.py b/pygorithm/searching/__init__.py index 7c08033..361ed45 100644 --- a/pygorithm/searching/__init__.py +++ b/pygorithm/searching/__init__.py @@ -4,15 +4,19 @@ from . import binary_search from . import breadth_first_search from . import depth_first_search +from . import exponential_search from . import interpolation_search from . import linear_search from . import quick_select +from . import ternary_search __all__ = [ 'binary_search', 'breadth_first_search', 'depth_first_search', + 'exponential_search', 'interpolation_search', 'linear_search', - 'quick_select' + 'quick_select', + 'ternary_search' ] diff --git a/pygorithm/searching/ternary_search.py b/pygorithm/searching/ternary_search.py new file mode 100644 index 0000000..a64f1e5 --- /dev/null +++ b/pygorithm/searching/ternary_search.py @@ -0,0 +1,53 @@ +''' +Author: OMKAR PATHAK +Created at: 26th August 2017 + +Time complexity: O(logn) + +More Info: https://en.wikipedia.org/wiki/Ternary_search +''' +from __future__ import division +import inspect + +def search(_list, left, right, target): + if right >= left: + mid1 = (left + right) // 3 + mid2 = (mid1 + right) // 3 + + # if target is present at mid1 + if _list[mid1] == target: + return mid1 + + # if target is present at mid2 + if _list[mid2] == target: + return mid2 + + # if target is present at left one-third + if _list[mid1] > target: + return search(_list, left, mid1 - 1, target) + + # if target is present at right one-third + if _list[mid2] < target: + return search(_list, mid2 + 1, right, target) + + # if target is present in the middle one-third + return search(_list, mid1 + 1, mid2 - 1, target) + + return False + +def time_complexities(): + """ + Return information on functions + time complexity + :return: string + """ + return "Time complexity: O(logn)" + + +def get_code(): + """ + easily retrieve the source code + of the function + :return: source code + """ + return inspect.getsource(search) From a286969940dfc07d77519ae052e15f5ac54506d6 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 27 Aug 2017 05:59:44 +0530 Subject: [PATCH 153/251] Added Manachers Algorithm implementation --- pygorithm/string/__init__.py | 2 + pygorithm/string/manacher_algorithm.py | 59 ++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 pygorithm/string/manacher_algorithm.py diff --git a/pygorithm/string/__init__.py b/pygorithm/string/__init__.py index 18f085f..62a4c13 100644 --- a/pygorithm/string/__init__.py +++ b/pygorithm/string/__init__.py @@ -5,10 +5,12 @@ from . import pangram from . import isogram from . import palindrome +from . import manacher_algorithm __all__ = [ 'anagram', 'pangram', 'isogram', + 'manacher_algorithm', 'palindrome' ] diff --git a/pygorithm/string/manacher_algorithm.py b/pygorithm/string/manacher_algorithm.py new file mode 100644 index 0000000..c5051e1 --- /dev/null +++ b/pygorithm/string/manacher_algorithm.py @@ -0,0 +1,59 @@ +''' +Author: OMKAR PATHAK +Created at: 27th August 2017 +''' + + +def manacher(string): + """ + Computes length of the longest palindromic substring centered on each char + in the given string. The idea behind this algorithm is to reuse previously + computed values whenever possible (palindromes are symmetric). + + Example (interleaved string): + i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 + s # a # b # c # q # q # q # q # q # q # x # y # + P 0 1 0 1 0 1 0 1 2 3 4 5 6 5 4 ? + ^ ^ ^ ^ + mirror center current right + + We're at index 15 wondering shall we compute (costly) or reuse. The mirror + value for 15 is 9 (center is in 12). P[mirror] = 3 which means a palindrome + of length 3 is centered at this index. A palindrome of same length would be + placed in index 15, if 15 + 3 <= 18 (right border of large parlindrome + centered in 12). This condition is satisfied, so we can reuse value from + index 9 and avoid costly computation. + """ + if type(string) is not str: + raise TypeError("Manacher Algorithm only excepts strings, not {}".format(str(type(string)))) + + # Get the interleaved version of a given string. 'aaa' --> '^#a#a#a#$'. + # Thanks to this we don't have to deal with even/odd palindrome + # length problem. + string_with_bounds = '#'.join('^{}$'.format(string)) + length = len(string_with_bounds) + P = [0] * length + center = right = 0 + + for i in range(1, length - 1): + P[i] = (right > i) and min(right - i, P[2 * center - i]) + + # Attempt to expand palindrome centered at i + while string_with_bounds[i + 1 + P[i]] == string_with_bounds[i - 1 - P[i]]: + P[i] += 1 + + # If palindrome centered at i expand past R, + # adjust center based on expanded palindrome. + if i + P[i] > right: + center, right = i, i + P[i] + + # Find the maximum element in P and return the string + maxLen, centerIndex = max((n, i) for i, n in enumerate(P)) + return string[(centerIndex - maxLen)//2: (centerIndex + maxLen)//2] + +def get_code(): + """ + returns the code for the manacher's algorithm + :return: source code + """ + return inspect.getsource(manacher) From b413fcc45f06036f290f05b67f547633842fd93d Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 27 Aug 2017 06:00:12 +0530 Subject: [PATCH 154/251] Updated tests for searching --- tests/test_searching.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/tests/test_searching.py b/tests/test_searching.py index f6cca30..b9746fd 100644 --- a/tests/test_searching.py +++ b/tests/test_searching.py @@ -4,7 +4,10 @@ linear_search, binary_search, breadth_first_search, - depth_first_search) + depth_first_search, + exponential_search, + interpolation_search, + ternary_search) class TestSearchingAlgorithm(unittest.TestCase): @@ -74,6 +77,23 @@ def test_dfs(self): result = depth_first_search.search(self.graph, 'G') self.assertEqual(result, ['G', 'C', 'A', 'B', 'D', 'F', 'E']) +class TestExponentialSearch(TestSearchingAlgorithm): + def test_exponential_search(self): + self.assertEqual(exponential_search.search(self.array, 7), 7) + + alpha_result = linear_search.search(self.alphaArray, 'n') + self.assertIs(alpha_result, 5) + +class TestInterpolationSearch(TestSearchingAlgorithm): + def test_interpolation_search(self): + self.assertEqual(interpolation_search.search(self.array, 7), 7) + +class TestTernarySearch(TestSearchingAlgorithm): + def test_ternary_search(self): + self.assertEqual(ternary_search.search(self.array, 0, len(self.array), 7), 7) + + alpha_result = ternary_search.search(self.alphaArray, 0, len(self.alphaArray), 'n') + self.assertIs(alpha_result, 5) if __name__ == '__main__': unittest.main() From f5e7915876c19ac02ee35d1a8e85e734cd412391 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 27 Aug 2017 06:00:26 +0530 Subject: [PATCH 155/251] Updated tests for strings --- tests/test_string.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_string.py b/tests/test_string.py index db7bd0f..aa010ae 100644 --- a/tests/test_string.py +++ b/tests/test_string.py @@ -4,6 +4,7 @@ anagram, isogram, pangram, + manacher_algorithm, palindrome) class TestAnagram(unittest.TestCase): @@ -25,5 +26,9 @@ def test_palindrome(self): self.assertTrue(palindrome.is_palindrome('madam')) self.assertFalse(palindrome.is_palindrome('eleven')) +class TestManacherAlgorithm(unittest.TestCase): + def test_manacher_algorithm(self): + self.assertEqual(manacher_algorithm.manacher('babcbabcbaccba'), 'abcbabcba') + if __name__ == '__main__': unittest.main() From d4ae6bf8c7a7b9ef4c24120e53abc0157f5f5543 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 27 Aug 2017 06:07:33 +0530 Subject: [PATCH 156/251] Added manachers algorithm implementation --- pygorithm/{string => strings}/manacher_algorithm.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename pygorithm/{string => strings}/manacher_algorithm.py (100%) diff --git a/pygorithm/string/manacher_algorithm.py b/pygorithm/strings/manacher_algorithm.py similarity index 100% rename from pygorithm/string/manacher_algorithm.py rename to pygorithm/strings/manacher_algorithm.py From f0613de0f633fa09a5717c4af7a0aaa941318ccf Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 27 Aug 2017 07:56:07 -0700 Subject: [PATCH 157/251] Part of Polygon tests First chunk of polygon tests * pygorithm/geometry/polygon2.py - normals cannot be a set (vector2 is not hashable). Improve documentation and add additional options for polygon2 from_regular. Add from_rotated and project_onto_axis * tests/test_geometry.py - add test polygon constructor, from_regular, from_rotated, area, and project_onto_axis. Add skeleton functions for remainder --- pygorithm/geometry/polygon2.py | 109 +++++++++++++++++++- tests/test_geometry.py | 181 ++++++++++++++++++++++++++++++++- 2 files changed, 284 insertions(+), 6 deletions(-) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 6a1d826..ccb91a9 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -35,13 +35,23 @@ class Polygon2(object): unless necessary through the use of Axis-Aligned Bounding Boxes and similar tools. - :ivar points: the ordered set of points on this polygon + .. caution:: + + The normals in the :py:attribute:~pygorithm.geometry.polygon2.Polygon2.normals: + are not necessarily the same length as + :py:attribute:~pygorithm.geometry.polygon2.Polygon2.points: or + :py:attribute:~pygorithm.geometry.polygon2.Polygon2.lines:. It is only + guarranteed to have no two vectors that are the same or opposite + directions, and contain either the vector in the same direction or opposite + direction of the normal vector for every line in the polygon. + + :ivar points: the ordered list of points on this polygon :vartype points: list of :class:`pygorithm.geometry.vector2.Vector2` - :ivar lines: the ordered set of lines on this polygon + :ivar lines: the ordered list of lines on this polygon :vartype lines: list of :class:`pygorithm.geometry.line2.Line2` - :ivar normals: the ordered set of normals on this polygon + :ivar normals: the unordered list of unique normals on this polygon :vartype normals: list of :class:`pygorithm.geometry.vector2.Vector2` :ivar center: the center of this polygon when unshifted. @@ -76,19 +86,93 @@ def __init__(self, points, suppress_errors = False): pass @classmethod - def from_regular(cls, sides, length): + def from_regular(cls, sides, length, start_rads = None, start_degs = None, center = None): """ Create a new regular polygon. + .. hint:: + + If no rotation is specified there is always a point at ``(length, 0)`` + + If no center is specified, the center will be ``(length / 2, length / 2)`` + which makes the top-left bounding box of the polygon the origin. + + May specify the angle of the first point. For example, if the coordinate + system is x to the right and y upward, then if the starting offset is 0 + then the first point will be at the right and the next point counter-clockwise. + + This would make for the regular quad (sides=4) to look like a diamond. To make + the bottom side a square, the whole polygon needs to be rotated 45 degrees, like + so: + + .. code-block:: python + + from pygorithm.geometry import (vector2, polygon2) + import math + + # This is a diamond shape (rotated square) (0 degree rotation assumed) + diamond = polygon2.Polygon2.from_regular(4, 1) + + # This is a flat square + square = polygon2.Polygon2.from_regular(4, 1, start_degs = 45) + + # Creating a flat square with radians + square2 = polygon2.Polygon2.from_regular(4, 1, math.pi / 4) + :param sides: the number of sides in the polygon :type sides: :class:`numbers.Number` :param length: the length of each sides :type length: :class:`numbers.Number` + :param start_rads: the starting radians or None + :type start_rads: :class:`numbers.Number` or None + :param start_degs: the starting degrees or None + :type start_degs: :class:`numbers.Number` or None + :param center: the center of the polygon + :type center: :class:`pygorithm.geometry.vector2.Vector2` + :returns: the new regular polygon + :rtype: :class:`pygorithm.geometry.polygon2.Polygon2` :raises ValueError: if ``sides < 3`` or ``length <= 0`` + :raises ValueError: if ``start_rads is not None and start_degs is not None`` """ pass + @classmethod + def from_rotated(cls, original, rotation, rotation_degrees = None): + """ + Create a regular polygon that is a rotation of + a different polygon. + + The rotation must be in radians, or null and rotation_degrees + must be specified. Positive rotations are clockwise. + + Examples: + + .. code-block:: python + + from pygorithm.goemetry import (vector2, polygon2) + import math + + poly = polygon2.Polygon2.from_regular(4, 1) + + # the following are equivalent (within rounding) + rotated1 = polygon2.Polygon2.from_rotated(poly, math.pi / 4) + rotated2 = polygon2.Polygon2.from_rotated(poly, None, 45) + + :param original: the polygon to rotate + :type original: :class:`pygorithm.geometry.polygon2.Polygon2` + :param rotation: the rotation in radians or None + :type rotation: :class:`numbers.Number` + :param rotation_degrees: the rotation in degrees or None + :type rotation_degrees: :class:`numbers.Number` + :returns: the rotated polygon + :rtype: :class:`pygorithm.geometry.polygon2.Polygon2` + + :raises ValueError: if ``rotation is not None and rotation_degrees is not None`` + :raises ValueError: if ``rotation is None and rotation_degrees is None`` + """ + pass + @property def area(self): """ @@ -99,6 +183,23 @@ def area(self): """ pass + + @staticmethod + def project_onto_axis(polygon, offset, axis): + """ + Find the projection of the polygon along the axis. + + :param polygon: the polygon to project + :type polygon: :class:`pygorithm.geometry.polygon2.Polygon2` + :param offset: the offset of the polygon + :type offset: :class:`pygorithm.geometry.vector2.Vector2` + :param axis: the axis to project onto + :type axis: :class:`pygorithm.geometry.vector2.Vector2` + :returns: the projection of the polygon along the axis + :rtype: :class:`pygorithm.geometry.axisall.AxisAlignedLine` + """ + pass + @staticmethod def contains_point(polygon, offset, point): """ diff --git a/tests/test_geometry.py b/tests/test_geometry.py index bac7f2c..bc32de9 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -488,11 +488,11 @@ def test_find_intersection_overlapping(self): touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal1, _aal2) self.assertFalse(touching) - self.assertEquals(-1, mtv) + self.assertEqual(-1, mtv) touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal2, _aal1) self.assertFalse(touching) - self.assertEquals(1, mtv) + self.assertEqual(1, mtv) def test_contains_point_false(self): _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) @@ -526,7 +526,184 @@ def test_contains_point_inner(self): outer, inner = axisall.AxisAlignedLine.contains_point(_aal1, 0.75) self.assertFalse(outer) self.assertTrue(inner) + +class TestPolygon(unittest.TestCase): + def setUp(self): + random.seed() + + def test_constructor_standard(self): + poly = polygon2.Polygon2([ vector2.Vector2(0, 1), + vector2.Vector2(1, 1), + vector2.Vector2(1, 0), + vectro2.Vector2(0, 0) ]) + + self.assertEqual(4, len(poly.points)) + self.assertEqual(4, len(poly.lines)) + self.assertEqual(2, len(poly.normals)) + + self.assertEqual(0, poly.points[0].x) + self.assertEqual(1, poly.points[0].y) + self.assertEqual(1, poly.points[1].x) + self.assertEqual(1, poly.points[1].y) + self.assertEqual(1, poly.points[2].x) + self.assertEqual(0, poly.points[2].y) + self.assertEqual(0, poly.points[3].x) + self.assertEqual(0, poly.points[3].y) + + self.assertEqual(0, poly.lines[0].start.x) + self.assertEqual(1, poly.lines[0].start.y) + self.assertEqual(1, poly.lines[0].end.x) + self.assertEqual(1, poly.lines[0].end.y) + self.assertEqual(1, poly.lines[1].start.x) + self.assertEqual(1, poly.lines[1].start.y) + self.assertEqual(1, poly.lines[1].end.x) + self.assertEqual(0, poly.lines[1].end.y) + self.assertEqual(1, poly.lines[2].start.x) + self.assertEqual(0, poly.lines[2].start.y) + self.assertEqual(0, poly.lines[2].end.x) + self.assertEqual(0, poly.lines[2].end.y) + self.assertEqual(0, poly.lines[3].start.x) + self.assertEqual(0, poly.lines[3].start.y) + self.assertEqual(0, poly.lines[3].end.x) + self.assertEqual(1, poly.lines[3].end.y) + + self.assertIsNotNone(next(vec for vec in poly.normals if vec.horizontal, None)) + self.assertIsNotNone(next(vec for vec in poly.normals if vec.vertical, None)) + + self.assertAlmostEqual(0.5, poly.center.x) + self.assertAlmostEqual(0.5, poly.center.y) + + poly2 = polygon2.Polygon2([ (0, 1), (1, 1), (1, 0), (0, 0) ]) + + self.assertEqual(4, len(poly2.points)) + self.assertEqual(4, len(poly2.lines)) + self.assertEqual(2, len(poly2.normals)) + + with self.assertRaises(StopIteration): + next(i for i in range(4) if poly.points[i].x != poly2.points[i].x or poly.points[i].y != poly2.points[i].y) + + + def test_from_regular(self): + diamond = polygon2.Polygon2.from_regular(4, 1) + + self.assertEqual(2, diamond.points[0].x) + self.assertEqual(1, diamond.points[0].y) + self.assertEqual(1, diamond.points[1].x) + self.assertEqual(0, diamond.points[1].y) + self.assertEqual(0, diamond.points[2].x) + self.assertEqual(1, diamond.points[2].y) + self.assertEqual(1, diamond.points[3].x) + self.assertEqual(2, diamond.points[3].y) + + diamond_shifted = polygon2.Polygon2.from_regular(4, 1, center = vector2.Vector2(0, 0)) + + with self.assertRaises(StopIteration): + next(i for i in range(4) if diamond.points[i].x != diamond_shifted.points[i].x + 1 or diamond.points[i].y != diamond_shifted.points[i].y + 1) + + square = polygon2.Polygon2.from_regular(4, 1, math.pi / 4) + + self.assertEqual(0, poly.points[0].x) + self.assertEqual(1, poly.points[0].y) + self.assertEqual(1, poly.points[1].x) + self.assertEqual(1, poly.points[1].y) + self.assertEqual(1, poly.points[2].x) + self.assertEqual(0, poly.points[2].y) + self.assertEqual(0, poly.points[3].x) + self.assertEqual(0, poly.points[3].y) + + square2 = polygon2.Polygon2.from_regular(4, 1, start_degs = 45) + + with self.assertRaises(StopIteration): + next(i for i in range(4) if square.points[i].x != square2.points[i].x or square.points[i].y != square2.points[i].y) + + + def test_from_rotated(self): + # isos triangle + # weighted total = (0 + 1 + 2, 0 + 1 + 1) = (3, 2) + # center = (1, 2/3) + triangle = polygon2.Polygon2([ (0, 0), (1, 1), (2, 1) ]) + + triangle_rot = polygon2.Polygon2.from_rotated(triangle, math.pi / 4) + + # example of how to calculate: + # shift so you rotate about origin (subtract center) + # (0, 0) - (1, 2/3) = (-1, -2/3) + # rotate 45 degrees clockwise = (-1 * cos(45) - (-2/3) * sin(45), (-2/3) * cos(45) + (-1) * sin(45)) = (-0.23570226039, -1.17851130198) + # shift back (add center): (0.76429773961, -0.51184463531) + self.assertAlmostEqual(0.76429773961, triangle_rot.points[0].x) + self.assertAlmostEqual(-0.51184463531, triangle_rot.points[0].y) + self.assertAlmostEqual(1.23570226039, triangle_rot.points[1].x) + self.assertAlmostEqual(0.90236892706, triangle_rot.points[1].y) + self.assertAlmostEqual(0.47140452079, triangle_rot.points[2].x) + self.assertAlmostEqual(1.60947570825, triangle_rot.points[2].y) + self.assertAlmostEqual(1, triangle_rot.center.x) + self.assertAlmostEqual(0.66666666667, triangle_rot.center.y) + + + def test_area(self): + # http://www.mathopenref.com/coordpolygonareacalc.html# helpful for checking + poly = polygon2.Polygon2.from_regular(4, 1) + self.assertAlmostEqual(1, poly.area) + + poly2 = polygon2.Polygon2.from_regular(4, 2) + self.assertAlmostEqual(4, poly2.area) + + poly3 = polygon2.Polygon2.from_regular(8, 3.7) + self.assertAlmostEqual(38.7, poly3.area) + + poly4 = polygon2.Polygon2([ (0, 0), (1, 1), (2, 1) ]) + self.assertAlmostEqual(0.5, poly4.area) + + poly5 = polygon2.Polygon2([ (0, 0), (1, 1), (2, 1), (1, -0.25) ]) + self.assertAlmostEqual(1.25, poly5.area) + + def _proj_onto_axis_fuzzer(self, points, axis, expected): + for i in range(3): + offset = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + + new_points = [] + for pt in points: + new_points.append(pt - offset) + + new_poly = polygon2.Polygon2(new_points) + + proj = polygon2.Polygon2.project_onto_axis(new_poly, offset, axis) + + help_msg = "points={}, axis={}, expected={} proj={} [offset = {}, new_points={}]".format(points, axis, expected, proj, offset, new_points) + self.assertAlmostEqual(expected.min, proj.min, help_msg) + self.assertAlmostEqual(expected.max, proj.max, help_msg) + + + def test_project_onto_axis(self): + poly = polygon2.Polygon2.from_regular(4, 1, math.pi / 4) + _axis = vector2.Vector2(0, 1) + self._proj_onto_axis_fuzzer(poly.points, _axis, axisall.AxisAlignedLine(_axis, 0, 1)) + + _axis2 = vector2.Vector2(1, 0) + self._proj_onto_axis_fuzzer(poly.points, _axis2, axisall.AxisAlignedLine(_axis2, 0, 1)) + + _axis3 = vector2.Vector2(0.70710678118, 0.70710678118) + self._proj_onto_axis_fuzzer(poly.points, _axis3, axisall.AxisAlignedLine(_axis3, 0, 1.41421356236)) + + + def test_contains_point_false(self): + pass + + def test_contains_point_edge(self): + pass + + def test_contains_point_contained(self): + pass + + def test_find_intersection_false(self): + pass + + def test_find_intersection_touching(self): + pass + + def test_find_intersection_overlapping(self): + pass if __name__ == '__main__': unittest.main() \ No newline at end of file From 2836f50fb2b72f28650d95cc678772655e97e00d Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 27 Aug 2017 08:00:12 -0700 Subject: [PATCH 158/251] Fix incorrect sphinx directive * pygorithm/geometry/polygon2.py :py:attribute: -> :py:attr: --- pygorithm/geometry/polygon2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index ccb91a9..59fcf2f 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -39,8 +39,8 @@ class Polygon2(object): The normals in the :py:attribute:~pygorithm.geometry.polygon2.Polygon2.normals: are not necessarily the same length as - :py:attribute:~pygorithm.geometry.polygon2.Polygon2.points: or - :py:attribute:~pygorithm.geometry.polygon2.Polygon2.lines:. It is only + :py:attr:~pygorithm.geometry.polygon2.Polygon2.points: or + :py:attr:~pygorithm.geometry.polygon2.Polygon2.lines:. It is only guarranteed to have no two vectors that are the same or opposite directions, and contain either the vector in the same direction or opposite direction of the normal vector for every line in the polygon. From b3b16d5d914d61246a4c09acfa2c1ca8a898805c Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 27 Aug 2017 08:03:10 -0700 Subject: [PATCH 159/251] Fix sphinx directives again * pygorithm/geometry/polygon2.py - another attribute->attr and missing tick marks --- pygorithm/geometry/polygon2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 59fcf2f..1daabb2 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -37,10 +37,10 @@ class Polygon2(object): .. caution:: - The normals in the :py:attribute:~pygorithm.geometry.polygon2.Polygon2.normals: + The normals in the :py:attr:`~pygorithm.geometry.polygon2.Polygon2.normals` are not necessarily the same length as - :py:attr:~pygorithm.geometry.polygon2.Polygon2.points: or - :py:attr:~pygorithm.geometry.polygon2.Polygon2.lines:. It is only + :py:attr:`~pygorithm.geometry.polygon2.Polygon2.points` or + :py:attr:`~pygorithm.geometry.polygon2.Polygon2.lines`. It is only guarranteed to have no two vectors that are the same or opposite directions, and contain either the vector in the same direction or opposite direction of the normal vector for every line in the polygon. From 7a480f85c428143f751e96839b4e21a7b0d3ade6 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 27 Aug 2017 08:08:24 -0700 Subject: [PATCH 160/251] Polygon more constructor tests Add tests for the various times polygons should raise an exception. * pygorithm/geometry/polygon2.py - minor documentation changes * tests/test_geometry.py - more polygon constructor tests --- pygorithm/geometry/polygon2.py | 4 ++-- tests/test_geometry.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 1daabb2..45930a6 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -37,8 +37,8 @@ class Polygon2(object): .. caution:: - The normals in the :py:attr:`~pygorithm.geometry.polygon2.Polygon2.normals` - are not necessarily the same length as + The length of :py:attr:`~pygorithm.geometry.polygon2.Polygon2.normals` + is not necessarily the same as :py:attr:`~pygorithm.geometry.polygon2.Polygon2.points` or :py:attr:`~pygorithm.geometry.polygon2.Polygon2.lines`. It is only guarranteed to have no two vectors that are the same or opposite diff --git a/tests/test_geometry.py b/tests/test_geometry.py index bc32de9..751aea0 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -581,7 +581,22 @@ def test_constructor_standard(self): with self.assertRaises(StopIteration): next(i for i in range(4) if poly.points[i].x != poly2.points[i].x or poly.points[i].y != poly2.points[i].y) + + def test_constructor_repeated(self): + with self.assertRaises(ValueError): + poly = polygon2.Polygon2([ (0, 1), (1, 1), (1, 0), (0, 0), (0, 1) ]) + + def test_constructor_two_points(self): + with self.assertRaises(ValueError): + poly = polygon2.Polygon2([ (0, 1), (1, 1) ]) + def test_constructor_not_convex(self): + with self.assertRaises(ValueError): + poly = polygon2.Polygon2([ (0, 1), (0.5, 0.8), (1, 1), (1, 0), (0, 0) ]) + + def test_cosntructor_not_clockwise(self): + with self.assertRaises(ValueError): + poly = polygon2.Polygon2([ (0, 0), (1, 0), (1, 1), (0, 1) ]) def test_from_regular(self): diamond = polygon2.Polygon2.from_regular(4, 1) From 47aeb4e4d857cb2725fdc96a86fcdbf6465f9ea0 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Mon, 28 Aug 2017 10:59:49 -0700 Subject: [PATCH 161/251] Finish geometry tests * pygorithm/geometry/polygon2.py - minor documentation changes * tests/test_geometry.py - finish polygon2.Polygon2 tests --- pygorithm/geometry/polygon2.py | 6 +- tests/test_geometry.py | 115 ++++++++++++++++++++++++++++++--- 2 files changed, 112 insertions(+), 9 deletions(-) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 45930a6..4e6bbd3 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -233,7 +233,7 @@ def find_intersection(poly1, poly2, offset1, offset2, find_mtv = True): amount of space. The resulting MTV should be applied to the first polygon (or its offset), - or its negation can be applied to the second polyogn (or its offset). + or its negation can be applied to the second polygon (or its offset). The MTV will be non-null if overlapping is True and find_mtv is True. @@ -243,6 +243,10 @@ def find_intersection(poly1, poly2, offset1, offset2, find_mtv = True): False. It is rarely an improvement to first check without finding mtv and then to find the mtv. + .. caution:: + + The first value in the mtv could be negative (used to inverse the direction + of the axis) :param poly1: the first polygon :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 751aea0..9317dc0 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -594,7 +594,7 @@ def test_constructor_not_convex(self): with self.assertRaises(ValueError): poly = polygon2.Polygon2([ (0, 1), (0.5, 0.8), (1, 1), (1, 0), (0, 0) ]) - def test_cosntructor_not_clockwise(self): + def test_constructor_not_clockwise(self): with self.assertRaises(ValueError): poly = polygon2.Polygon2([ (0, 0), (1, 0), (1, 1), (0, 1) ]) @@ -701,24 +701,123 @@ def test_project_onto_axis(self): _axis3 = vector2.Vector2(0.70710678118, 0.70710678118) self._proj_onto_axis_fuzzer(poly.points, _axis3, axisall.AxisAlignedLine(_axis3, 0, 1.41421356236)) - + def _contains_point_fuzzer(self, points, point, expected_edge, expected_contains): + for i in range(3): + offset = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + + new_points = [] + for pt in points: + new_points.append(pt - offset) + + new_poly = polygon2.Polygon2(new_points) + + edge, cont = polygon2.Polygon2.contains_point(new_poly, offset, point) + + help_msg = "points={}, point={}, expected_edge={}, expected_contains={}, edge={}, cont={}".format(points, point, expected_edge, expected_contains, edge, cont) + self.assertEqual(expected_edge, edge. help_msg) + self.assertEqual(expected_contains, cont, help_msg) + def test_contains_point_false(self): - pass + poly = polygon2.Polygon2([ (1, 1), (2, 3), (4, 0) ]) + + self._contains_point_fuzzer(poly.points, vector2.Vector2(1, 2), False, False) + self._contains_point_fuzzer(poly.points, vector2.Vector2(4, 2), False, False) + self._contains_point_fuzzer(poly.points, vector2.Vector2(3, 0), False, False) def test_contains_point_edge(self): - pass + poly = polygon2.Polygon2([ (2, 3), (3, 5), (5, 4), (3, 2) ]) + + self._contains_point_fuzzer(poly.points, vector2.Vector2(4, 3), True, False) + self._contains_point_fuzzer(poly.points, vector2.Vector2(2.5, 2.5), True, False) + self._contains_point_fuzzer(poly.points, vector2.Vector2(4, 4.5), True, False) def test_contains_point_contained(self): - pass + poly = polygon2.Polygon2([ (-3, -6), (-2, -3), (2, -2), (0, -5) ]) + + self._contains_point_fuzzer(poly.points, vector2.Vector2(-1, -4), False, True) + self._contains_point_fuzzer(poly.points, vector2.Vector2(-1, -5), False, True) + self._contains_point_fuzzer(poly.points, vector2.Vector2(1, -3), False, True) + + def _find_intersection_fuzzer(self, points1, points2, exp_touching, exp_overlap, exp_mtv): + if type(points1) != list: + points1 = points1.points + if type(points2) != list: + points2 = points2.points + for i in range(3): + offset1 = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + offset2 = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + + new_points1 = [] + for pt in points1: + new_points1.append(pt - offset1) + + new_points2 = [] + for pt in points2: + new_points2.append(pt - offset2) + + new_poly1 = polygon2.Polygon2(new_points1) + new_poly2 = polygon2.Polygon2(new_points2) + + touch, overlap, mtv = polygon2.Polygon2.find_intersection(new_poly1, new_poly2, offset1, offset2, True) + _invtouch, _invoverlap, _invmtv = polygon2.Polygon2.find_intersection(new_poly2, new_poly1, offset2, offset1, True) + + help_msg = "points1={}, points2={}, offset1={}, offset2={}, exp_touching={}, " \ + "exp_overlap={}, exp_mtv={}, touch={}, overlap={}, mtv={}".format(points1, points2, offset1, + offset2, exp_touching, exp_overlap, exp_mtv, touch, overlap, mtv) + self.assertEqual(exp_touching, touch, help_msg) + self.assertEqual(exp_overlap, overlap, help_msg) + self.assertEqual(exp_touching, _invtouch, help_msg) + self.assertEqual(exp_overlap, _invoverlap, help_msg) + + if exp_mtv is not None: + self.assertIsNotNone(mtv, help_msg) + exp_mult_x = exp_mtv[0] * exp_mtv[1].x + exp_mult_y = exp_mtv[0] * exp_mtv[1].y + mult_x = mtv[0] * mtv[1].x + mult_y = mtv[0] * mtv[1].y + self.assertAlmostEqual(exp_mult_x, mult_x, help_msg) + self.assertAlmostEqual(exp_mult_y, mult_y, help_msg) + + self.assertIsNotNone(_invmtv, help_msg) + inv_mult_x = _invmtv[0] * _invmtv[1].x + inv_mult_y = _invmtv[0] * _invmtv[1].y + self.assertAlmostEqual(-exp_mult_x, inv_mult_x, help_msg) + self.assertAlmostEqual(-exp_mult_y, inv_mult_y, help_msg) + else: + self.assertIsNone(mtv, help_msg) + self.assertIsNone(_invmtv, help_msg) + + _touch, _overlap, _mtv = polygon2.Polygon2.find_intersection(new_poly1, new_poly2, offset1, offset2, False) + + self.assertEqual(exp_touching, _touch, help_msg) + self.assertEqual(exp_overlap, _overlap, help_msg) + self.assertIsNone(_mtv, help_msg) + def test_find_intersection_false(self): - pass + poly1 = polygon2.Polygon2([ (0, 1), (0, 3), (5, 3), (5, 1) ]) + poly2 = polygon2.Polygon2([ (3, 4), (2, 6), (7, 5) ]) + poly3 = polygon2.Polygon2([ (6, 2), (9, 3), (9, 1) ]) + + self._find_intersection_fuzzer(poly1, poly2, False, False, None) + self._find_intersection_fuzzer(poly1, poly3, False, False, None) + self._find_intersection_fuzzer(poly2, poly3, False, False, None) def test_find_intersection_touching(self): - pass + poly1 = polygon2.Polygon2([ (3, 3), (3, 6), (7, 5), (5, 3) ]) + poly2 = polygon2.Polygon2([ (4, 3), (8, 2), (6, -1) ]) + poly3 = polygon2.Polyogn2([ (5, 5.5), (1, 6.5), (3, 7), (7, 6) ]) + + self._find_intersection_fuzzer(poly1, poly2, True, False, None) + self._find_intersection_fuzzer(poly1, poly3, True, False, None) def test_find_intersection_overlapping(self): - pass + poly1 = polygon2.Polygon2([ (2, 1), (4, 3), (6, 3), (6, 1) ]) + poly2 = polygon2.Polygon2([ (5, 2), (5, 5), (7, 5) ]) + poly3 = polygon2.Polygon2([ (1, 3), (3, 3), (3, 1), (1, 1) ]) + + self._find_intersection_fuzzer(poly1, poly2, False, True, (1, vector2.Vector2(0, -1))) + self._find_intersection_fuzzer(poly1, poly3, False, True, (0.5, vector2.Vector2(-0.70710678118, 0.70710678118))) if __name__ == '__main__': unittest.main() \ No newline at end of file From 7a13d057ec8f153da37d06747b3fd125cd167020 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Mon, 28 Aug 2017 11:32:07 -0700 Subject: [PATCH 162/251] Implement Vector2 * docs/Geometry.rst - fix outdated quick start guide * pygorithm/geometry/vector2.py - implement * test/test_geometry.py - fix incorrect tests --- docs/Geometry.rst | 4 +- pygorithm/geometry/vector2.py | 95 ++++++++++++++++++++++++++++++----- tests/test_geometry.py | 22 ++++---- 3 files changed, 94 insertions(+), 27 deletions(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 332ad5d..957faac 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -17,6 +17,7 @@ Quick Start Guide poly1 = polygon2.Polygon2.from_regular(5, 5) # create a polygon from tuple (x, y) - note that the polygon must be convex + # and the points must be clockwise poly2 = polygon2.Polygon2(points=[ (0, 0), (1, 0), (1, 1), (0, 1) ]) # create a polygon from vector2s. @@ -39,9 +40,6 @@ Quick Start Guide else: print('No intersection') - # check complete overlap - overlap = polygon2.Polygon2.contains_polygon(poly1, poly2, (0, 2), (3, 1)) - Features -------- diff --git a/pygorithm/geometry/vector2.py b/pygorithm/geometry/vector2.py index 1cd4cd8..bffc40a 100644 --- a/pygorithm/geometry/vector2.py +++ b/pygorithm/geometry/vector2.py @@ -6,6 +6,8 @@ Defines a simple two-dimensional, mutable vector. """ +import math + class Vector2(object): """ Define a simple two-dimensional, mutable vector. @@ -49,7 +51,21 @@ def __init__(self, *args, **kwargs): :param kwargs: named arguments (purpose known by name) """ - pass + if len(args) == 2: + self.x = args[0] + self.y = args[1] + elif len(args) == 1: + if type(args[0]) == tuple: + self.x = args[0][0] + self.y = args[0][1] + else: + self.x = args[0].x + self.y = args[0].y + else: + assert(len(args) == 0) + + self.x = kwargs['x'] + self.y = kwargs['y'] def __add__(self, other): """ @@ -75,7 +91,7 @@ def __add__(self, other): :rtype: :class:`pygorithm.geometry.vector2.Vector2` """ - pass + return Vector2(self.x + other.x, self.y + other.y) def __sub__(self, other): """ @@ -105,7 +121,7 @@ def __sub__(self, other): :rtype: :class:`pygorithm.geometry.vector2.Vector2` """ - pass + return Vector2(self.x - other.x, self.y - other.y) def __mul__(self, scale_factor): """ @@ -136,7 +152,10 @@ def __mul__(self, scale_factor): :raises TypeError: if scale_factor is a Vector2 """ - pass + if type(scale_factor) == Vector2: + raise TypeError('scale_factor cannot be a Vector2 (use dot!)') + + return Vector2(self.x * scale_factor, self.y * scale_factor) def __rmul__(self, scale_factor): """ @@ -167,7 +186,10 @@ def __rmul__(self, scale_factor): :raises TypeError: if scale_factor is a Vector2 """ - pass + if type(scale_factor) == Vector2: + raise TypeError('scale_factor cannot be a Vector2 (use dot!)') + + return Vector2(self.x * scale_factor, self.y * scale_factor) def __repr__(self): """ @@ -188,11 +210,13 @@ def __repr__(self): :rtype: string """ - pass + return "vector2(x={}, y={})".format(self.x, self.y) def __str__(self): """ - Create a human-readable representation of this vector + Create a human-readable representation of this vector. + + Rounds to 3 decimal places if there are more. Example: @@ -212,7 +236,15 @@ def __str__(self): :rtype: string """ - pass + pretty_x = round(self.x * 1000) / 1000 + if pretty_x == math.floor(pretty_x): + pretty_x = math.floor(pretty_x) + + pretty_y = round(self.y * 1000) / 1000 + if pretty_y == math.floor(pretty_y): + pretty_y = math.floor(pretty_y) + + return "<{}, {}>".format(pretty_x, pretty_y) def dot(self, other): """ @@ -245,7 +277,7 @@ def dot(self, other): :rtype: :class:`numbers.Number` """ - pass + return self.x * other.x + self.y * other.y def rotate(self, *args, **kwargs): """ @@ -294,7 +326,42 @@ def rotate(self, *args, **kwargs): :rtype: :class:`pygorithm.geometry.vector2.Vector2` """ - pass + args_counter = 0 + deg_rads = None + about = None + + if 'radians' in kwargs: + deg_rads = kwargs['radians'] + elif 'degrees' in kwargs: + deg_rads = kwargs['degrees'] * math.pi / 180 + else: + deg_rads = args[args_counter] + args_counter = args_counter + 1 + + if 'about' in kwargs: + about = kwargs['about'] + else: + if len(args) > args_counter: + about = args[args_counter] + + fixed_x = self.x + fixed_y = self.y + + if about is not None: + fixed_x -= about.x + fixed_y -= about.y + + rotated_x = fixed_x * math.cos(deg_rads) - fixed_y * math.sin(deg_rads) + rotated_y = fixed_y * math.cos(deg_rads) + fixed_x * math.sin(deg_rads) + + final_x = rotated_x + final_y = rotated_y + + if about is not None: + final_x += about.x + final_y += about.y + + return Vector2(final_x, final_y) def normalize(self): """ @@ -325,7 +392,7 @@ def normalize(self): :rtype: :class:`pygorithm.geometry.vector2.Vector2` """ - pass + return self * (1 / self.magnitude()) def magnitude_squared(self): """ @@ -346,7 +413,8 @@ def magnitude_squared(self): :returns: square of the magnitude of this vector :rtype: :class:`numbers.Number` """ - pass + + return self.x * self.x + self.y * self.y def magnitude(self): """ @@ -372,4 +440,5 @@ def magnitude(self): :returns: magnitude of this vector :rtype: :class:`numbers.Number` """ - pass \ No newline at end of file + + return math.sqrt(self.magnitude_squared()) \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 9317dc0..99a53c2 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -113,7 +113,7 @@ def test_repr(self): vec_repr = repr(vec) - self.assertEqual('vector2(x=7, y=1)', vec_repr) + self.assertEqual('vector2(x=7, y=11)', vec_repr) def test_str(self): vec = vector2.Vector2(7, 11) @@ -158,20 +158,20 @@ def test_rotate(self): self.assertAlmostEqual(0.70710678118, vec3.y) vec4 = vec1.rotate(math.pi, vector2.Vector2(1, 1)) - self.assertEqual(1, vec4.x) - self.assertEqual(2, vec4.y) + self.assertAlmostEqual(1, vec4.x) + self.assertAlmostEqual(2, vec4.y) vec5 = vec1.rotate(radians = math.pi, about = vector2.Vector2(1, 1)) - self.assertEqual(1, vec5.x) - self.assertEqual(2, vec5.y) + self.assertAlmostEqual(1, vec5.x) + self.assertAlmostEqual(2, vec5.y) vec6 = vec1.rotate(degrees = 180, about = vector2.Vector2(1, 1)) - self.assertEqual(1, vec6.x) - self.assertEqual(2, vec6.y) + self.assertAlmostEqual(1, vec6.x) + self.assertAlmostEqual(2, vec6.y) vec7 = vec1.rotate(vector2.Vector2(1, 1), degrees = 180) - self.assertEqual(1, vec7.x) - self.assertEqual(2, vec7.y) + self.assertAlmostEqual(1, vec7.x) + self.assertAlmostEqual(2, vec7.y) def test_normalize(self): vec1 = vector2.Vector2(2, 0) @@ -567,8 +567,8 @@ def test_constructor_standard(self): self.assertEqual(0, poly.lines[3].end.x) self.assertEqual(1, poly.lines[3].end.y) - self.assertIsNotNone(next(vec for vec in poly.normals if vec.horizontal, None)) - self.assertIsNotNone(next(vec for vec in poly.normals if vec.vertical, None)) + self.assertIsNotNone(next((vec for vec in poly.normals if vec.horizontal), None)) + self.assertIsNotNone(next((vec for vec in poly.normals if vec.vertical), None)) self.assertAlmostEqual(0.5, poly.center.x) self.assertAlmostEqual(0.5, poly.center.y) From 39a44fc152547cd0887f735f26437b32b914b36e Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Mon, 28 Aug 2017 14:33:10 -0700 Subject: [PATCH 163/251] Axis-aligned line and line2 tests Currently I'm running py 3.4.4 which doesn't have math.isclose. I'm not sure the best place to put a similar method, right now I've replicated it to the two locations that need it. Polygon will also need it. I'll try to update python before pushing this upstream * pygorithm/geometry/axisall.py - Implement everything, change intersects return values and find_intersection return values (and update docs) * pygorithm/geometry/line2.py - Implement everything. find_intersection could be broken up but the subfunctions would need a lot of parameters or it would repeat a lot of math * tests/test_geometry.py - fix incorrect tests, use random.uniform instead of random.randrange --- pygorithm/geometry/axisall.py | 82 +++++++-- pygorithm/geometry/line2.py | 332 ++++++++++++++++++++++++++++++++-- tests/test_geometry.py | 53 +++--- 3 files changed, 412 insertions(+), 55 deletions(-) diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py index 91e3c06..2afae12 100644 --- a/pygorithm/geometry/axisall.py +++ b/pygorithm/geometry/axisall.py @@ -11,6 +11,8 @@ https://en.wikipedia.org/wiki/Axis-aligned_object """ +import math + class AxisAlignedLine(object): """ Define an axis aligned line. @@ -50,7 +52,7 @@ def __init__(self, axis, point1, point2): """ Construct an axis aligned line with the appropriate min and max. - :param axis: axis this line is on + :param axis: axis this line is on (for bookkeeping only, may be None) :type axis: :class:`pygorithm.geometry.vector2.Vector2` :param point1: one point on this line :type point1: :class:`numbers.Number` @@ -58,17 +60,35 @@ def __init__(self, axis, point1, point2): :type point2: :class:`numbers.Number` """ - pass + self.axis = axis + self.min = min(point1, point2) + self.max = max(point1, point2) + + @staticmethod + def _approx(a, b): + """ + Same as math.isclose but supports python < 3.5 + + :param a: first numeric + :type a: :class:`numbers.Number` + :param b: second numeric + :type b: :class:`numbers.Number` + :returns: if the are close + :rtype: bool + """ + + if hasattr(math, 'isclose'): + return math.isclose(a, b) + return abs(a - b) <= 1e-09 * max(abs(a), abs(b)) @staticmethod def intersects(line1, line2): """ Determine if the two lines intersect - Determine if the two lines are touching and if they are, if - they are overlapping. Lines are touching if they share only - one end point, whereas they are overlapping if they share - infinitely many points. + Determine if the two lines are touching, if they are overlapping, or if + they are disjoint. Lines are touching if they share only one end point, + whereas they are overlapping if they share infinitely many points. .. note:: @@ -76,6 +96,10 @@ def intersects(line1, line2): you will need the minimum translation vector, since they do mostly the same operations. + .. tip:: + + This will never return ``True, True`` + :param line1: the first line :type line1: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :param line2: the second line @@ -84,7 +108,16 @@ def intersects(line1, line2): :rtype: (bool, bool) """ - pass + if AxisAlignedLine._approx(line1.max, line2.min): + return True, False + elif AxisAlignedLine._approx(line1.min, line2.max): + return True, False + elif line1.max < line2.min: + return False, False + elif line1.min > line2.max: + return False, False + + return False, True @staticmethod def find_intersection(line1, line2): @@ -97,22 +130,39 @@ def find_intersection(line1, line2): direction of the axis by the magnitude of the result. - Returns `true, None` if the lines are touching. + Returns `true, (None, touch_point_numeric, touch_point_numeric)` if the lines are touching + and not overlapping. .. note:: - Ensure your program correctly handles `true, None` + Ensure your program correctly handles `true, (None, numeric, numeric)` :param line1: the first line :type line1: :class:`pygorithm.geometry.axisall.AxisAlignedLine` :param line2: the second line :type line2: :class:`pygorithm.geometry.axisall.AxisAlignedLine` - :returns: (touching, mtv against 1) - :rtype: (bool, :class:`numbers.Number` or None) + :returns: (touching, (mtv against 1, intersection min, intersection max)) + :rtype: (bool, (:class:`numbers.Number` or None, :class:`numbers.Number`, :class:`numbers.Number`) or None) """ - pass + if AxisAlignedLine._approx(line1.max, line2.min): + return True, (None, line2.min, line2.min) + elif AxisAlignedLine._approx(line1.min, line2.max): + return True, (None, line1.min, line1.min) + elif line1.max < line2.min or line2.max < line1.min: + return False, None + else: + opt_1 = line2.min - line1.max + opt_2 = line2.max - line1.min + + res_min = max(line1.min, line2.min) + res_max = min(line1.max, line2.max) + + if abs(opt_1) < abs(opt_2): + return True, (opt_1, res_min, res_max) + else: + return True, (opt_2, res_min, res_max) @staticmethod def contains_point(line, point): @@ -132,4 +182,10 @@ def contains_point(line, point): :returns: (if the point is an edge of the line, if the point is contained by the line) :rtype: (bool, bool) """ - pass \ No newline at end of file + + if AxisAlignedLine._approx(line.min, point) or AxisAlignedLine._approx(line.max, point): + return True, False + elif point < line.min or point > line.max: + return False, False + else: + return False, True \ No newline at end of file diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index 89bf338..721027d 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -6,6 +6,10 @@ Defines a simple two-dimensional line segment """ +import math + +from pygorithm.geometry import (vector2, axisall) + class Line2(object): """ Define a two-dimensional directed line segment defined by two points. @@ -51,7 +55,25 @@ def __init__(self, start, end): :raises ValueError: if start and end are at the same point """ - pass + if start.x == end.x and start.y == end.y: + raise ValueError('start and end are the same point') + + self.start = start + self.end = end + self._delta = None + self._axis = None + self._normal = None + self._magnitude_squared = None + self._magnitude = None + self._min_x = None + self._min_y = None + self._max_x = None + self._max_y = None + self._slope = None + self._y_intercept = None + self._horizontal = None + self._vertical = None + @property def delta(self): @@ -61,7 +83,11 @@ def delta(self): :returns: delta from start to end :rtype: :class:`pygorithm.geometry.vector2.Vector2` """ - pass + + if self._delta is None: + self._delta = self.end - self.start + + return self._delta @property def axis(self): @@ -71,7 +97,11 @@ def axis(self): :returns: normalized delta :rtype: :class:`pygorithm.geometry.vector2.Vector2` """ - pass + + if self._axis is None: + self._axis = self.delta * (1 / self.magnitude) + + return self._axis @property def normal(self): @@ -84,7 +114,11 @@ def normal(self): :returns: normalized normal to axis :rtype: :class:`pygorithm.geometry.vector2.Vector2` """ - pass + + if self._normal is None: + self._normal = vector2.Vector2(-self.axis.y, self.axis.x) + + return self._normal @property def magnitude_squared(self): @@ -94,7 +128,11 @@ def magnitude_squared(self): :returns: square of magnitude of delta :rtype: :class:`numbers.Number` """ - pass + + if self._magnitude_squared is None: + self._magnitude_squared = self.delta.magnitude_squared() + + return self._magnitude_squared @property def magnitude(self): @@ -109,7 +147,11 @@ def magnitude(self): :returns: magnitude of delta :rtype: :class:`numbers.Number` """ - pass + + if self._magnitude is None: + self._magnitude = math.sqrt(self.magnitude_squared) + + return self._magnitude @property def min_x(self): @@ -119,7 +161,11 @@ def min_x(self): :returns: minimum x this line contains :rtype: :class:`numbers.Number` """ - pass + + if self._min_x is None: + self._min_x = min(self.start.x, self.end.x) + + return self._min_x @property def min_y(self): @@ -129,7 +175,11 @@ def min_y(self): :returns: minimum x this line contains :rtype: :class:`numbers.Number` """ - pass + + if self._min_y is None: + self._min_y = min(self.start.y, self.end.y) + + return self._min_y @property def max_x(self): @@ -139,8 +189,26 @@ def max_x(self): :returns: maximum x this line contains :rtype: :class:`numbers.Number` """ - pass + + if self._max_x is None: + self._max_x = max(self.start.x, self.end.x) + + return self._max_x + @property + def max_y(self): + """ + Get the maximum y that this line contains, lazily initialized. + + :returns: maximum x this line contains + :rtype: :class:`numbers.Number` + """ + + if self._max_y is None: + self._max_y = max(self.start.y, self.end.y) + + return self._max_y + @property def slope(self): """ @@ -158,7 +226,17 @@ def slope(self): :returns: the slope of this line (rise over run). :rtype: :class:`numbers.Number` """ - pass + + if self._slope is None: + if self.delta.x == 0: + if self.delta.y > 0: + self._slope = float('+inf') + else: + self._slope = float('-inf') + else: + self._slope = self.delta.y / self.delta.x + + return self._slope @property def y_intercept(self): @@ -183,7 +261,15 @@ def y_intercept(self): :returns: the y-intercept of this line when unshifted :rtype: :class:`numbers.Number` or None """ - pass + + if self.vertical: + return None + + if self._y_intercept is None: + self._y_intercept = self.start.y - self.slope * self.start.x + + return self._y_intercept + @property def horizontal(self): @@ -196,7 +282,11 @@ def horizontal(self): :returns: if this line is horizontal :rtype: bool """ - pass + + if self._horizontal is None: + self._horizontal = self.delta.y == 0 + + return self._horizontal @property def vertical(self): @@ -209,7 +299,11 @@ def vertical(self): :returns: if this line is vertical :rtype: bool """ - pass + + if self._vertical is None: + self._vertical = self.delta.x == 0 + + return self._vertical def __repr__(self): """ @@ -233,7 +327,7 @@ def __repr__(self): :rtype: string """ - pass + return "line2(start={}, end={})".format(repr(self.start), repr(self.end)) def __str__(self): """ @@ -260,19 +354,45 @@ def __str__(self): :rtype: string """ - pass + return "{} -> {}".format(self.start, self.end) - def calculate_y_intercept(offset): + def calculate_y_intercept(self, offset): """ Calculate the y-intercept of this line when it is at the specified offset. + If the offset is None this is exactly equivalent to y_intercept + :param offset: the offset of this line for this calculations - :type offset: :class:`pygorithm.geometry.vector2.Vector2` + :type offset: :class:`pygorithm.geometry.vector2.Vector2` or None :returns: the y-intercept of this line when at offset :rtype: :class:`numbers.Number` """ - pass + + if offset is None: + return self.y_intercept + + if self.vertical: + return None + # y = mx + b -> b = y - mx + return self.start.y + offset.y - self.slope * (self.start.x + offset.x) + + @staticmethod + def _approx(a, b): + """ + Same as math.isclose but supports python < 3.5 + + :param a: first numeric + :type a: :class:`numbers.Number` + :param b: second numeric + :type b: :class:`numbers.Number` + :returns: if the are close + :rtype: bool + """ + + if hasattr(math, 'isclose'): + return math.isclose(a, b) + return abs(a - b) <= 1e-09 * max(abs(a), abs(b)) @staticmethod def are_parallel(line1, line2): @@ -288,7 +408,11 @@ def are_parallel(line1, line2): :returns: if the lines are parallel :rtype: bool """ - pass + + if line1.vertical and line2.vertical: + return True + + return Line2._approx(line1.slope, line2.slope) @staticmethod def find_intersection(line1, line2, offset1 = None, offset2 = None): @@ -319,7 +443,175 @@ def find_intersection(line1, line2, offset1 = None, offset2 = None): :returns: (touching, overlapping, intersection_location) :rtype: (bool, bool, :class:`pygorithm.geometry.line2.Line2` or :class:`pygorithm.geometry.vector2.Vector2` or None) """ - pass + # We will ensure that: + # - If one line is vertical and one horizontal, line1 is the vertical line + # - If only one line is vertical, line1 is the vertical line + # - If only one line is horizontal, line1 is the horizontal line + + if line2.vertical and not line1.vertical: + return Line2.find_intersection(line2, line1, offset2, offset1) + if line2.horizontal and not line1.horizontal and not line1.vertical: + return Line2.find_intersection(line2, line1, offset2, offset1) + + l1_st_x = line1.start.x + (offset1.x if offset1 is not None else 0) + l1_st_y = line1.start.y + (offset1.y if offset1 is not None else 0) + l1_en_x = line1.end.x + (offset1.x if offset1 is not None else 0) + l1_en_y = line1.end.y + (offset1.y if offset1 is not None else 0) + + l2_st_x = line2.start.x + (offset2.x if offset2 is not None else 0) + l2_st_y = line2.start.y + (offset2.y if offset2 is not None else 0) + l2_en_x = line2.end.x + (offset2.x if offset2 is not None else 0) + l2_en_y = line2.end.y + (offset2.y if offset2 is not None else 0) + + if line1.vertical and line2.vertical: + # Two vertical lines + if not Line2._approx(l1_st_x, l2_st_x): + return False, False, None + + aal1 = axisall.AxisAlignedLine(None, l1_st_y, l1_en_y) + aal2 = axisall.AxisAlignedLine(None, l2_st_y, l2_en_y) + + touch, mtv = axisall.AxisAlignedLine.find_intersection(aal1, aal2) + + if not touch: + return False, False, None + elif mtv[0] is None: + return True, False, vector2.Vector2(l1_st_x, mtv[1]) + else: + return False, True, Line2(vector2.Vector2(l1_st_x, mtv[1]), vector2.Vector2(l1_st_x, mtv[2])) + + if line1.horizontal and line2.horizontal: + # Two horizontal lines + if not Line2._approx(l1_st_y, l2_st_y): + return False, False, None + + aal1 = axisall.AxisAlignedLine(None, l1_st_x, l1_en_x) + aal2 = axisall.AxisAlignedLine(None, l2_st_x, l2_st_y) + + touch, mtv = axisall.AxisAlignedLine.find_intersection(aal1, aal2) + + if not touch: + return False, False, None + elif mtv[0] is None: + return True, False, vector2.Vector2(mtv[1], l1_st_y) + else: + return False, True, Line2(vector2.Vector2(mtv[1], l1_st_x), vector2.Vector2(mtv[2], l1_st_y)) + + if Line2.are_parallel(line1, line2): + # Two non-vertical, non-horizontal, parallel lines + yintr1 = line1.calculate_y_intercept(offset1) + yintr2 = line2.calculate_y_intercept(offset2) + if not Line2._approx(yintr1, yintr2): + return False, False, None + + axis = line1.axis + aal1 = axisall.AxisAlignedLine(axis, l1_st_x * axis.x + l1_st_y * axis.y, l1_en_x * axis.x + l1_en_y * axis.y) + aal2 = axisall.AxisAlignedLine(axis, l2_st_x * axis.x + l2_st_y * axis.y, l2_en_x * axis.x + l2_en_y * axis.y) + + touch, mtv = axisall.AxisAlignedLine.find_intersection(aal1, aal2) + + def unshift_vec(vec): + numerator = line1.slope * vec.x - yintr1 * axis.x * axis.x + denominator = axis.x * axis.y + line1.slope * axis.y * axis.y + + new_x = numerator / denominator + new_y = line1.slope * new_x + yintr1 + + return vector2.Vector2(new_x, new_y) + + if not touch: + return False, False, None + elif mtv[0] is None: + return True, False, unshift_vec(axis * mtv[1]) + else: + return False, True, Line2(unshift_vec(axis * mtv[1]), unshift_vec(axis * mtv[2])) + + if line1.vertical and line2.horizontal: + # A vertical and horizontal line + l1_min = min(l1_st_y, l1_en_y) if offset1 is not None else line1.min_y + l1_max = max(l1_st_y, l1_en_y) if offset1 is not None else line1.max_y + + if l2_st_y < l1_min or l2_st_y > l2_max: + return False, False, None + + l2_min = min(l2_st_x, l2_en_x) if offset2 is not None else line2.min_x + l2_max = max(l2_st_x, l2_en_x) if offset2 is not None else line2.max_x + + if l1_st_x < l2_min or l1_st_x > l2_max: + return False, False, None + + pt = vector2.Vector2(l1_st_x, l2_st_y) + + if Line2._approx(l2_st_y, l1_min) or Line2._approx(l2_st_y, l2_max) or Line2._approx(l1_st_x, l2_min) or Line2._approx(l2_st_y, l2_max): + return True, False, pt + else: + return False, True, pt + + if line1.vertical: + # A vertical and non-horizontal, non-vertical line + line2_y_at_line1_x = line2.slope * l1_st_x + line2.calculate_y_intercept(offset2) + + l1_min = min(l1_st_y, l1_en_y) if offset1 is not None else line1.min_y + l1_max = max(l1_st_y, l1_en_y) if offset1 is not None else line1.max_y + + if Line2._approx(line2_y_at_line1_x, l1_min) or Line2._approx(line2_y_at_line1_x, l1_max): + return True, False, vector2.Vector2(l1_st_x, line2_y_at_line1_x) + elif line2_y_at_line1_x < l1_min or line2_y_at_line1_x > l2_max: + return False, False, None + else: + return False, True, vector2.Vector2(l1_st_x, line2_y_at_line1_x) + + if line1.horizontal: + # A horizontal and non-vertical, non-horizontal line + # y = mx + b -> x = (y - b) / m + line2_x_at_line1_y = (l1_st_y - line2.calculate_y_intercept(offset2)) / line2.slope + + l1_min = min(l1_st_x, l1_en_x) if offset1 is not None else line1.min_x + l1_max = max(l1_st_x, l1_en_x) if offset1 is not None else line1.max_x + + if Line2._approx(line2_x_at_line1_y, l1_min) or Line2._approx(line2_x_at_line1_y, l1_max): + return True, False, vector2.Vector2(line2_x_at_line1_y, l1_st_y) + elif line2_x_at_line1_y < l1_min or line2_x_at_line1_y > l1_max: + return False, False, None + else: + return False, True, vector2.Vector2(line2_x_at_line1_y, l1_st_y) + + # Two non-vertical, non-horizontal, non-parallel lines + + # y = m1 x + b1 + # y = m2 x + b2 + # m1 x + b1 = m2 x + b2 + # m1 x - m2 x = b2 - b1 + # x = (b2 - b1) / (m1 - m2) + + yintr1 = line1.calculate_y_intercept(offset1) + yintr2 = line2.calculate_y_intercept(offset2) + intr_x = (yintr2 - yintr1) / (line1.slope - line2.slope) + + # Some caution needs to be taken here to ensure we do approximately before range + # checks. It's possible for _approx(a, b) to be True and a < b to be True + + on_edge1 = Line2._approx(intr_x, l1_st_x) or Line2._approx(intr_x, l1_en_x) + on_edge2 = Line2._approx(intr_x, l2_st_x) or Line2._approx(intr_x, l2_en_x) + + if on_edge1 and on_edge2: + intr_y = line1.slope * intr_x + yintr1 + return True, False, vector2.Vector2(intr_x, intr_y) + + l1_min_x = min(l1_st_x, l1_en_x) if offset1 is not None else line1.min_x + l1_max_x = max(l1_st_x, l1_en_x) if offset1 is not None else line1.max_x + l2_min_x = min(l2_st_x, l2_en_x) if offset2 is not None else line2.min_x + l2_max_x = max(l2_st_x, l2_en_x) if offset2 is not None else line2.max_x + + on_line1 = on_edge1 or (intr_x > l1_min_x and intr_x < l1_max_x) + on_line2 = on_edge2 or (intr_x > l2_min_x and intr_x < l2_max_x) + + if on_line1 and on_line2: + intr_y = line1.slope * intr_x + yintr1 + is_edge = on_edge1 or on_edge2 + return is_edge, not is_edge, vector2.Vector2(intr_x, intr_y) + + return False, False, None \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 99a53c2..0e0252b 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -292,14 +292,14 @@ def test_line_boundaries_x(self): # min_x, min_y, max_x, max_y def test_slope(self): self.assertEqual(1, self.line_origin_1_1.slope) self.assertAlmostEqual(1.5, self.line_1_1_3_4.slope) - self.assertEqual(0, self.line_1_1_1_2.slope) - self.assertEqual(float('+inf'), self.line_1_1_2_1.slope) + self.assertEqual(float('+inf'), self.line_1_1_1_2.slope) + self.assertEqual(0, self.line_1_1_2_1.slope) def test_y_intercept(self): self.assertEqual(0, self.line_origin_1_1.y_intercept) self.assertAlmostEqual(-0.5, self.line_1_1_3_4.y_intercept) - self.assertTrue(math.isnan(self.line_1_1_1_2.y_intercept)) - self.assertEqul(1, self.line_1_1_2_1.y_intercept) + self.assertIsNone(self.line_1_1_1_2.y_intercept) + self.assertEqual(1, self.line_1_1_2_1.y_intercept) def test_horizontal(self): self.assertFalse(self.line_origin_1_1.horizontal) @@ -320,7 +320,7 @@ def test_str(self): self.assertEqual('<1, 1> -> <3, 4>', str(self.line_1_1_3_4)) def test_calculate_y_intercept(self): - self.assertAlmostEqual(0.66666666667, self.line_1_1_3_4.calculate_y_intercept(self.vec_1_1)) + self.assertAlmostEqual(-1, self.line_1_1_3_4.calculate_y_intercept(self.vec_1_1)) def test_are_parallel(self): self.assertFalse(line2.Line2.are_parallel(self.line_origin_1_1, self.line_1_1_3_4)) @@ -328,11 +328,10 @@ def test_are_parallel(self): _line = line2.Line2(vector2.Vector2(5, 4), vector2.Vector2(3, 1)) self.assertTrue(line2.Line2.are_parallel(self.line_1_1_3_4, _line)) - @staticmethod - def _find_intr_fuzzer(v1, v2, v3, v4, exp_touching, exp_overlap, exp_intr, number_fuzzes = 3): + def _find_intr_fuzzer(self, v1, v2, v3, v4, exp_touching, exp_overlap, exp_intr, number_fuzzes = 3): for i in range(number_fuzzes): - offset1 = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) - offset2 = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + offset1 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + offset2 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) _line1 = line2.Line2(v1 - offset1, v2 - offset1) _line2 = line2.Line2(v3 - offset2, v4 - offset2) @@ -361,7 +360,7 @@ def _find_intr_fuzzer(v1, v2, v3, v4, exp_touching, exp_overlap, exp_intr, numbe self.assertAlmostEqual(exp_intr.start.x, intr.start.x) self.assertAlmostEqual(exp_intr.start.y, intr.start.y) self.assertAlmostEqual(exp_intr.end.x, intr.end.x) - self.assertAlmostEqual(exp_intr.end.y, itnr.end.y) + self.assertAlmostEqual(exp_intr.end.y, intr.end.y) def test_find_intersection_non_parallel_no_intersection(self): @@ -411,8 +410,8 @@ def test_constructor(self): self.assertIsNotNone(_aal.min) self.assertIsNotNone(_aal.max) - self.assertEqual(1, _aal.axis.start.x) - self.assertEqual(1, _aal.axis.start.y) + self.assertEqual(1, _aal.axis.x) + self.assertEqual(1, _aal.axis.y) self.assertEqual(0, _aal.min) self.assertEqual(1, _aal.max) @@ -476,23 +475,33 @@ def test_find_intersection_touching(self): touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal1, _aal2) self.assertTrue(touching) - self.assertIsNone(mtv) + self.assertIsNotNone(mtv) + self.assertIsNone(mtv[0]) + self.assertEqual(1, mtv[1]) + self.assertEqual(1, mtv[2]) touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal2, _aal1) self.assertTrue(touching) - self.assertIsNone(mtv) + self.assertIsNotNone(mtv) + self.assertIsNone(mtv[0]) + self.assertEqual(1, mtv[1]) + self.assertEqual(1, mtv[2]) def test_find_intersection_overlapping(self): _aal1 = axisall.AxisAlignedLine(self.vec_1_1, -3, -1) _aal2 = axisall.AxisAlignedLine(self.vec_1_1, -2, 5) touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal1, _aal2) - self.assertFalse(touching) - self.assertEqual(-1, mtv) + self.assertTrue(touching) + self.assertEqual(-1, mtv[0]) + self.assertEqual(-2, mtv[1]) + self.assertEqual(-1, mtv[2]) touching, mtv = axisall.AxisAlignedLine.find_intersection(_aal2, _aal1) - self.assertFalse(touching) - self.assertEqual(1, mtv) + self.assertTrue(touching) + self.assertEqual(1, mtv[0]) + self.assertEqual(-2, mtv[1]) + self.assertEqual(-1, mtv[2]) def test_contains_point_false(self): _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) @@ -674,7 +683,7 @@ def test_area(self): def _proj_onto_axis_fuzzer(self, points, axis, expected): for i in range(3): - offset = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + offset = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) new_points = [] for pt in points: @@ -703,7 +712,7 @@ def test_project_onto_axis(self): def _contains_point_fuzzer(self, points, point, expected_edge, expected_contains): for i in range(3): - offset = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + offset = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) new_points = [] for pt in points: @@ -745,8 +754,8 @@ def _find_intersection_fuzzer(self, points1, points2, exp_touching, exp_overlap, points2 = points2.points for i in range(3): - offset1 = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) - offset2 = vector2.Vector2(random.randrange(-1000, 1000, 0.01), random.randrange(-1000, 1000, 0.01)) + offset1 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + offset2 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) new_points1 = [] for pt in points1: From ede19a98179bec5a3adac75e705f55742b1df241 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 06:30:15 +0530 Subject: [PATCH 164/251] Added implementation of Circularly Linked List --- pygorithm/data_structures/linked_list.py | 71 +++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/pygorithm/data_structures/linked_list.py b/pygorithm/data_structures/linked_list.py index 93d5549..0107b62 100644 --- a/pygorithm/data_structures/linked_list.py +++ b/pygorithm/data_structures/linked_list.py @@ -118,7 +118,7 @@ def delete(self, data): # node not found if temp is None: return - + # TODO: local variable 'prev' might be referenced before assignment # TODO: Fix this prev.next = temp.next @@ -214,3 +214,72 @@ def get_code(): returns the code of the current class """ return inspect.getsource(DoublyLinkedList) + +class CircularLinkedList(object): + ''' + Class for circular linked list + ''' + def __init__(self): + self.head = None + self.tail = None + self.size = 0 + + def clear(self): + ''' clears the head and tails of the linked list ''' + self.tail = None + self.head = None + + def get_data(self): + """ + prints the elements in the linked list + """ + l_list = [] + current = self.tail + while True: + l_list.append(current.data) + current = current.next + if current == self.tail: + break + return l_list + + def insert(self, data): + ''' inserts the data in to the linked list ''' + node = Node(data) + if self.head: + self.head.next = node + self.head = node + else: + self.head = node + self.tail = node + self.head.next = self.tail + self.size += 1 + + def delete(self, data): + ''' deletes the specified element from linked list ''' + current = self.tail + prev = self.tail + while prev == current or prev != self.head: + if current.data == data: + if current == self.tail: + self.tail = current.next + self.head.next = self.tail + else: + prev.next = current.next + self.size -= 1 + return + prev = current + current = current.next + + @staticmethod + def get_code(): + """ + returns the code of the current class + """ + return inspect.getsource(CircularLinkedList) + +if __name__ == '__main__': + cll = CircularLinkedList() + cll.insert(1) + cll.insert(2) + cll.insert(3) + print(cll.get_data()) From de3569c32286e5f372e759ade63932ee2197becb Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 06:30:28 +0530 Subject: [PATCH 165/251] Added tests for Circularly Linked List --- tests/test_data_structure.py | 53 +++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 0ef40dc..5e99135 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -18,7 +18,7 @@ def test_stack(self): myStack.push(10) myStack.push(12) myStack.push(3) - + self.assertEqual(myStack.pop(), 3) self.assertEqual(myStack.peek(), 12) self.assertFalse(myStack.is_empty()) @@ -122,6 +122,15 @@ def test_doubly_linked_list(self): expectedResult = [4, 1, 3] self.assertEqual(dll.get_data(), expectedResult) + def test_cicular_linked_list(self): + cll = linked_list.CircularLinkedList() + cll.insert(1) + cll.insert(2) + cll.insert(3) + + expectedResult = [1, 2, 3] + self.assertEqual(cll.get_data(), expectedResult) + class TestBinaryTree(unittest.TestCase): def test_binary_tree(self): @@ -192,20 +201,20 @@ def test_cycle_in_directed_graph(self): myGraph.add_edge(3, 3) self.assertTrue(myGraph.check_cycle()) - + def test_add_edge_in_undirected_graph(self): myGraph = graph.CheckCycleUndirectedGraph() myGraph.add_edge(0, 1) myGraph.add_edge(0, 2) - + setFrom0 = myGraph.graph[0] setFrom1 = myGraph.graph[1] setFrom2 = myGraph.graph[2] - + self.assertIsNotNone(setFrom0) self.assertIsNotNone(setFrom1) self.assertIsNotNone(setFrom2) - + self.assertIn(1, setFrom0) self.assertIn(0, setFrom1) self.assertIn(2, setFrom0) @@ -225,14 +234,14 @@ def test_cycle_in_undirected_graph(self): def test_creating_weighted_undirected_graph(self): myGraph = graph.WeightedUndirectedGraph() myGraph.add_edge(0, 1, 1) - + self.assertIn(0, myGraph.graph[1]) self.assertIn(1, myGraph.graph[0]) self.assertEqual(1, myGraph.get_edge_weight(0, 1)) self.assertEqual(1, myGraph.get_edge_weight(1, 0)) - + myGraph.add_edge(0, 2, 3) - + self.assertIn(0, myGraph.graph[2]) self.assertIn(0, myGraph.graph[1]) self.assertIn(1, myGraph.graph[0]) @@ -241,7 +250,7 @@ def test_creating_weighted_undirected_graph(self): self.assertEqual(1, myGraph.get_edge_weight(1, 0)) self.assertEqual(3, myGraph.get_edge_weight(0, 2)) self.assertEqual(3, myGraph.get_edge_weight(2, 0)) - + myGraph.add_edge(2, 3, 7) self.assertIn(0, myGraph.graph[2]) self.assertIn(3, myGraph.graph[2]) @@ -250,7 +259,7 @@ def test_creating_weighted_undirected_graph(self): self.assertNotIn(3, myGraph.graph[0]) self.assertEqual(7, myGraph.get_edge_weight(2, 3)) self.assertIsNone(myGraph.get_edge_weight(0, 3)) - + def test_removing_from_weighted_undirected_graph(self): myGraph = graph.WeightedUndirectedGraph() myGraph.add_edge(0, 1, 1) @@ -259,54 +268,54 @@ def test_removing_from_weighted_undirected_graph(self): myGraph.add_edge(0, 4, 1) myGraph.add_edge(4, 5, 1) myGraph.add_edge(2, 6, 1) - + self.assertEqual(1, myGraph.get_edge_weight(0, 1)) self.assertEqual(1, myGraph.get_edge_weight(0, 2)) self.assertEqual(1, myGraph.get_edge_weight(0, 3)) self.assertEqual(1, myGraph.get_edge_weight(0, 4)) self.assertEqual(1, myGraph.get_edge_weight(4, 5)) self.assertEqual(1, myGraph.get_edge_weight(2, 6)) - + myGraph.remove_edge(0, 1) - + self.assertIsNone(myGraph.get_edge_weight(0, 1)) self.assertEqual(1, myGraph.get_edge_weight(0, 2)) self.assertEqual(1, myGraph.get_edge_weight(0, 3)) self.assertEqual(1, myGraph.get_edge_weight(0, 4)) self.assertEqual(1, myGraph.get_edge_weight(4, 5)) self.assertEqual(1, myGraph.get_edge_weight(2, 6)) - + myGraph.remove_edge(0, 2) - + self.assertIsNone(myGraph.get_edge_weight(0, 1)) self.assertIsNone(myGraph.get_edge_weight(0, 2)) self.assertEqual(1, myGraph.get_edge_weight(0, 3)) self.assertEqual(1, myGraph.get_edge_weight(0, 4)) self.assertEqual(1, myGraph.get_edge_weight(4, 5)) self.assertEqual(1, myGraph.get_edge_weight(2, 6)) - + myGraph.remove_edge(0) - + self.assertIsNone(myGraph.get_edge_weight(0, 1)) self.assertIsNone(myGraph.get_edge_weight(0, 2)) self.assertIsNone(myGraph.get_edge_weight(0, 3)) self.assertIsNone(myGraph.get_edge_weight(0, 4)) self.assertEqual(1, myGraph.get_edge_weight(4, 5)) self.assertEqual(1, myGraph.get_edge_weight(2, 6)) - + def test_gridify_weighted_undirected_graph(self): rt2 = 1.4142135623730951 myGraph = graph.WeightedUndirectedGraph() myGraph.gridify(4, 1) - + self.assertEqual(1, myGraph.get_edge_weight((0, 0), (0, 1))) self.assertAlmostEqual(rt2, myGraph.get_edge_weight((0, 0), (1, 1))) - + self.assertIsNone(myGraph.get_edge_weight((0, 0), (2, 0))) self.assertEqual(1, myGraph.get_edge_weight((2, 3), (3, 3))) self.assertIsNone(myGraph.get_edge_weight((3, 3), (3, 4))) - - + + class TestHeap(unittest.TestCase): def test_heap(self): myHeap = heap.Heap() From a4fd4ba823daeccddadbcfea7ee71abc48a6c7d9 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 06:40:29 +0530 Subject: [PATCH 166/251] Added docs for strings --- docs/strings.rst | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 docs/strings.rst diff --git a/docs/strings.rst b/docs/strings.rst new file mode 100644 index 0000000..b31518f --- /dev/null +++ b/docs/strings.rst @@ -0,0 +1,35 @@ +======= +Strings +======= + +A place for implementation of string algorithms + +Features +-------- + +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, + +.. code:: python + + >>> from pygorithm import strings + >>> help(strings) + Help on package pygorithm.strings in pygorithm: + + NAME + pygorithm.strings - Collection of string methods and functions + + PACKAGE CONTENTS + anagram + isogram + manacher_algorithm + palindrome + pangram + + +Anagram +----------- + +* Functions and their uses + +.. automodule:: strings.anagram + :members: From 09e16db787bf545baf2c49064d1928e57f1e2c48 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 06:42:39 +0530 Subject: [PATCH 167/251] Updated index.rst --- docs/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.rst b/docs/index.rst index 3792cc0..69b2843 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -28,6 +28,7 @@ Quick Links Fibonacci Math Pathfinding + strings Quick Start Guide ----------------- From ab387ae088b64f9661c041886bb9cc3c2bd1a7b3 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 06:44:27 +0530 Subject: [PATCH 168/251] Added docs for strings --- docs/strings.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/strings.rst b/docs/strings.rst index b31518f..d570698 100644 --- a/docs/strings.rst +++ b/docs/strings.rst @@ -31,5 +31,5 @@ Anagram * Functions and their uses -.. automodule:: strings.anagram +.. automodule:: pygorithm.strings.anagram :members: From bb8a0f6f26a4a7105f3d6ef523cae7ba5ad0877f Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 08:06:16 +0530 Subject: [PATCH 169/251] Added docs for Dynamic Programming --- docs/DynamicP.rst | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/DynamicP.rst diff --git a/docs/DynamicP.rst b/docs/DynamicP.rst new file mode 100644 index 0000000..933a020 --- /dev/null +++ b/docs/DynamicP.rst @@ -0,0 +1,43 @@ +=================== +Dynamic Programming +=================== + +A place for implementation of greedy algorithms + +Features +-------- + +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, + +.. code:: python + + >>> from pygorithm import greedy_algorithm + >>> help(greedy_algorithm) + Help on package pygorithm.dynamic_programming in pygorithm: + + NAME + pygorithm.dynamic_programming - Collection for dynamic programming algorithms + + PACKAGE CONTENTS + binary_knapsack + lis + + DATA + __all__ = ['binary_knapsack', 'lis'] + + +Binary (0/1) Knapsack +--------------------- + +* Functions and their uses + +.. automodule:: pygorithm.dynamic_programming.binary_knapsack + :members: + +Longest Increasing Subsequence +------------------------------ + +* Functions and their uses + +.. automodule:: pygorithm.dynamic_programming.lis + :members: From 5c78361021a2b54dca260402609d0dc4bcb585a1 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 08:06:34 +0530 Subject: [PATCH 170/251] Modified Dosctrings --- pygorithm/dynamic_programming/binary_knapsack.py | 7 ++++++- pygorithm/dynamic_programming/lis.py | 7 ++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pygorithm/dynamic_programming/binary_knapsack.py b/pygorithm/dynamic_programming/binary_knapsack.py index 3ad39eb..8df83f7 100644 --- a/pygorithm/dynamic_programming/binary_knapsack.py +++ b/pygorithm/dynamic_programming/binary_knapsack.py @@ -3,11 +3,16 @@ Created At: 25th August 2017 """ import inspect -# TODO: Explain how this works / Explain what a knapsack is def knapsack(w, value, weight): """ + The knapsack problem or rucksack problem is a problem in combinatorial optimization: Given a set of + items, each with a weight and a value, determine the number of each item to include in a collection + so that the total weight is less than or equal to a given limit and the total value is as large as + possible. It derives its name from the problem faced by someone who is constrained by a fixed-size + knapsack and must fill it with the most valuable items. + :param w: maximum weight capacity :param value: an array of values of items in the knapsack :param weight: an array of weights of items in the knapsack diff --git a/pygorithm/dynamic_programming/lis.py b/pygorithm/dynamic_programming/lis.py index a0686f5..ae8ff5a 100644 --- a/pygorithm/dynamic_programming/lis.py +++ b/pygorithm/dynamic_programming/lis.py @@ -8,9 +8,10 @@ def longest_increasing_subsequence(_list): """ The Longest Increasing Subsequence (LIS) problem is to find the length of the longest subsequence of a given sequence such that all elements of the subsequence are sorted in increasing order. For example, - the length of LIS for {10, 22, 9, 33, 21, 50, 41, 60, 80} is 6 and LIS is {10, 22, 33, 50, 60, 80}. - :param _list: - :return: + the length of LIS for [10, 22, 9, 33, 21, 50, 41, 60, 80] is 6 and LIS is [10, 22, 33, 50, 60, 80]. + + :param _list: an array of elements + :return: returns a tuple of maximum length of lis and an array of the elements of lis """ # Initialize list with some value lis = [1] * len(_list) From 797f65415a4915800867e03b60a107a9025bd2ab Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 08:06:45 +0530 Subject: [PATCH 171/251] Modified Dosctrings --- pygorithm/greedy_algorithm/activity_selection.py | 7 ++++++- pygorithm/greedy_algorithm/fractional_knapsack.py | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pygorithm/greedy_algorithm/activity_selection.py b/pygorithm/greedy_algorithm/activity_selection.py index 01dba2f..9483da0 100644 --- a/pygorithm/greedy_algorithm/activity_selection.py +++ b/pygorithm/greedy_algorithm/activity_selection.py @@ -3,11 +3,16 @@ Created On: 26th August 2017 """ import inspect -# TODO: Explain what this is / how it works def activity_selection(start_times, finish_times): """ + The activity selection problem is a combinatorial optimization problem concerning the selection of + non-conflicting activities to perform within a given time frame, given a set of activities each marked + by a start time (si) and finish time (fi). The problem is to select the maximum number of activities + that can be performed by a single person or machine, assuming that a person can only work on a single + activity at a time. + :param start_times: An array that contains start time of all activities :param finish_times: An array that conatins finish time of all activities """ diff --git a/pygorithm/greedy_algorithm/fractional_knapsack.py b/pygorithm/greedy_algorithm/fractional_knapsack.py index cee4000..fd8cd78 100644 --- a/pygorithm/greedy_algorithm/fractional_knapsack.py +++ b/pygorithm/greedy_algorithm/fractional_knapsack.py @@ -3,11 +3,16 @@ Created On: 22nd August 2017 """ import inspect -# TODO: Explain how this works / Explain what a knapsack is def knapsack(w, item_values, item_weights): """ + The knapsack problem or rucksack problem is a problem in combinatorial optimization: Given a set of + items, each with a weight and a value, determine the number of each item to include in a collection so + that the total weight is less than or equal to a given limit and the total value is as large as + possible. It derives its name from the problem faced by someone who is constrained by a fixed-size + knapsack and must fill it with the most valuable items. + :param w: maximum weight capacity :param item_values: a list of values of items in the knapsack :param item_weights: a list of weights of items in the knapsack From 04c254e79718b1fb35154f97e987263ec599fafc Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 29 Aug 2017 08:06:59 +0530 Subject: [PATCH 172/251] Added docs for greedy algorithms --- docs/Greedy.rst | 43 +++++++++++++++++++++++++++++++++++++++++++ docs/index.rst | 7 +++++-- docs/strings.rst | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 docs/Greedy.rst diff --git a/docs/Greedy.rst b/docs/Greedy.rst new file mode 100644 index 0000000..12ff3ae --- /dev/null +++ b/docs/Greedy.rst @@ -0,0 +1,43 @@ +================= +Greedy Algorithms +================= + +A place for implementation of greedy algorithms + +Features +-------- + +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, + +.. code:: python + + >>> from pygorithm import greedy_algorithm + >>> help(greedy_algorithm) + Help on package pygorithm.greedy_algorithm in pygorithm: + + NAME + pygorithm.greedy_algorithm - Collection for greedy algorithms + + PACKAGE CONTENTS + activity_selection + fractional_knapsack + + DATA + __all__ = ['fractional_knapsack', 'activity_selection'] + + +Activity Selection Problem +-------------------------- + +* Functions and their uses + +.. automodule:: pygorithm.greedy_algorithm.activity_selection + :members: + +Fractional Knapsack +------------------- + +* Functions and their uses + +.. automodule:: pygorithm.greedy_algorithm.fractional_knapsack + :members: diff --git a/docs/index.rst b/docs/index.rst index 69b2843..ec35b37 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -22,14 +22,17 @@ Quick Links :maxdepth: 2 :caption: Documentation: - Sorting - Searching Data_Structure + DynamicP Fibonacci + Greedy Math Pathfinding + Searching + Sorting strings + Quick Start Guide ----------------- diff --git a/docs/strings.rst b/docs/strings.rst index d570698..f7280b3 100644 --- a/docs/strings.rst +++ b/docs/strings.rst @@ -27,9 +27,41 @@ Features Anagram ------------ +------- * Functions and their uses .. automodule:: pygorithm.strings.anagram :members: + +Isogram +------- + +* Functions and their uses + +.. automodule:: pygorithm.strings.isogram + :members: + +Palindrome +---------- + +* Functions and their uses + +.. automodule:: pygorithm.strings.palindrome + :members: + +Pangram +------- + +* Functions and their uses + +.. automodule:: pygorithm.strings.pangram + :members: + +Manacher's Algorithm +-------------------- + +* Functions and their uses + +.. automodule:: pygorithm.strings.manacher_algorithm + :members: From 05adb5d1fa14b2df758a766cf96195a3743d76d5 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 29 Aug 2017 11:34:07 -0700 Subject: [PATCH 173/251] All tests passing * pygorithm/geometry/polygon2.py - Improve documentation, finish implement- ing * pygorithm/geometry/vector2.py - Add cross product * tests/test_geometry.py - add cross product test, fix incorrect tests --- pygorithm/geometry/polygon2.py | 325 +++++++++++++++++++++++++++++++-- pygorithm/geometry/vector2.py | 19 ++ tests/test_geometry.py | 135 ++++++++------ 3 files changed, 408 insertions(+), 71 deletions(-) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 4e6bbd3..94a2d6c 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -7,6 +7,10 @@ SAT-intersection. """ +import math + +from pygorithm.geometry import (vector2, axisall, line2) + class Polygon2(object): """ Define a concave polygon defined by a list of points such that each @@ -71,6 +75,21 @@ def __init__(self, points, suppress_errors = False): (and potentially without explicit errors) if the errors are suppressed. + The center of the polygon is calculated as the average of the points. + + The lines of the polygon are constructed using line2. + + The normals of the lines are calculated using line2. + + A simple linear search is done to check for repeated points. + + The area is calculated to check for clockwise order using the + `Shoelace Formula ` + + The polygon is proven to be convex by ensuring the cross product of + the line from the point to previous point and point to next point is + positive or 0, for all points. + :param points: the ordered set of points on this polygon :type points: list of :class:`pygorithm.geometry.vector2.Vector2` or \ list of (:class:`numbers.Number`, :class:`numbers.Number`) @@ -78,12 +97,90 @@ def __init__(self, points, suppress_errors = False): :param suppress_errors: True to not do somewhat expensive sanity checks :type suppress_errors: bool - :raises ValueError: if there are any repeated points (not suppressable) :raises ValueError: if there are less than 3 points (not suppressable) - :raises ValueError: if the polygon is not convex (suppressable) + :raises ValueError: if there are any repeated points (suppressable) :raises ValueError: if the points are not clockwise oriented (suppressable) + :raises ValueError: if the polygon is not convex (suppressable) """ - pass + if len(points) < 3: + raise ValueError("Not enough points (need at least 3 to define a polygon, got {}".format(len(points))) + + self.points = [] + self.lines = [] + self.normals = [] + _sum = vector2.Vector2(0, 0) + + for pt in points: + act_pt = pt if type(pt) == vector2.Vector2 else vector2.Vector2(pt) + + if not suppress_errors: + for prev_pt in self.points: + if Polygon2._approx(prev_pt.x, act_pt.x) and Polygon2._approx(prev_pt.y, act_pt.y): + raise ValueError('Repeated points! points={} (repeated={})'.format(points, act_pt)) + + + _sum += act_pt + self.points.append(act_pt) + self.center = _sum * (1 / len(self.points)) + + _previous = self.points[0] + for i in range(1, len(self.points) + 1): + pt = self.points[i % len(self.points)] + _line = line2.Line2(_previous, pt) + self.lines.append(_line) + norm = vector2.Vector2(_line.normal) + if norm.x < 0 or (norm.x == 0 and norm.y == -1): + norm.x *= -1 + norm.y *= -1 + + already_contains = next((v for v in self.normals if Polygon2._approx(v.x, norm.x) and Polygon2._approx(v.y, norm.y)), None) + if already_contains is None: + self.normals.append(norm) + + _previous = pt + + + self._area = None + + if not suppress_errors: + # this will check counter-clockwisedness + a = self.area + + # if the polygon is convex and clockwise, if you look at any point + # and take the cross product with the line from the point to the + # previous point and the line from the point to the next point + # the result will be positive + for leftpointin in range(len(self.points)): + middlepointin = (leftpointin + 1) % len(self.points) + rightpointin = (middlepointin + 1) % len(self.points) + + leftpoint = self.points[leftpointin] + middlepoint = self.points[middlepointin] + rightpoint = self.points[rightpointin] + + vec1 = middlepoint - leftpoint + vec2 = middlepoint - rightpoint + cross_product = vec1.cross(vec2) + if cross_product < -1e-09: + raise ValueError('Detected concavity at index {} - {} cross {} = {}\nself={}'.format(middlepointin, vec1, vec2, cross_product, str(self))) + + + @staticmethod + def _approx(a, b): + """ + Same as math.isclose but supports python < 3.5 + + :param a: first numeric + :type a: :class:`numbers.Number` + :param b: second numeric + :type b: :class:`numbers.Number` + :returns: if the are close + :rtype: bool + """ + + if hasattr(math, 'isclose'): + return math.isclose(a, b) + return abs(a - b) <= 1e-09 * max(abs(a), abs(b)) @classmethod def from_regular(cls, sides, length, start_rads = None, start_degs = None, center = None): @@ -94,8 +191,9 @@ def from_regular(cls, sides, length, start_rads = None, start_degs = None, cente If no rotation is specified there is always a point at ``(length, 0)`` - If no center is specified, the center will be ``(length / 2, length / 2)`` - which makes the top-left bounding box of the polygon the origin. + If no center is specified, the center will be calculated such that + all the vertexes positive and the bounding box includes (0, 0). This + operation requires O(n) time (where n is the number if sides) May specify the angle of the first point. For example, if the coordinate system is x to the right and y upward, then if the starting offset is 0 @@ -119,9 +217,19 @@ def from_regular(cls, sides, length, start_rads = None, start_degs = None, cente # Creating a flat square with radians square2 = polygon2.Polygon2.from_regular(4, 1, math.pi / 4) + Uses the `definition of a regular polygon ` + to find the angle between each vertex in the polygon. Then converts the side + length to circumradius using the formula explained `here ` + + Finally, each vertex is found using ```` + + If the center is not specified, the bounding box of the polygon is calculated while the vertices + are being found, and the center of the bounding box is set to the center of the circle. This + is never greater than (circumradius, circumradius). + :param sides: the number of sides in the polygon :type sides: :class:`numbers.Number` - :param length: the length of each sides + :param length: the length of any side of the polygon :type length: :class:`numbers.Number` :param start_rads: the starting radians or None :type start_rads: :class:`numbers.Number` or None @@ -135,7 +243,52 @@ def from_regular(cls, sides, length, start_rads = None, start_degs = None, cente :raises ValueError: if ``sides < 3`` or ``length <= 0`` :raises ValueError: if ``start_rads is not None and start_degs is not None`` """ - pass + + if (start_rads is not None) and (start_degs is not None): + raise ValueError('One or neithter of start_rads and start_degs may be defined, but not both. (got start_rads={}, start_degs={})'.format(start_rads, start_degs)) + + if sides < 3 or length <= 0: + raise ValueError('Too few sides or too non-positive length (sides={}, length={})'.format(sides, length)) + + if start_degs is not None: + start_rads = (start_degs * math.pi) / 180 + + if start_rads is None: + start_rads = 0 + + _recenter = False + radius = length / (2 * math.sin( math.pi / sides )) + if center is None: + _recenter = True + center = vector2.Vector2(0, 0) + + + angle = start_rads + increment = -(math.pi * 2) / sides + + pts = [] + _minx = 0 + _miny = 0 + _maxx = 0 + _maxy = 0 + for i in range(sides): + x = center.x + math.cos(angle) * radius + y = center.y + math.sin(angle) * radius + pts.append(vector2.Vector2(x, y)) + angle += increment + + if _recenter: + _minx = min(_minx, x) + _miny = min(_miny, y) + _maxx = max(_maxx, x) + _maxy = max(_maxy, y) + + if _recenter: + _newcenter = vector2.Vector2((_maxx - _minx) / 2, (_maxy - _miny) / 2) + for i in range(sides): + pts[i] += _newcenter + + return cls(pts, suppress_errors = True) @classmethod def from_rotated(cls, original, rotation, rotation_degrees = None): @@ -159,6 +312,9 @@ def from_rotated(cls, original, rotation, rotation_degrees = None): rotated1 = polygon2.Polygon2.from_rotated(poly, math.pi / 4) rotated2 = polygon2.Polygon2.from_rotated(poly, None, 45) + Uses the `2-d rotation matrix ` + to rotate each point. + :param original: the polygon to rotate :type original: :class:`pygorithm.geometry.polygon2.Polygon2` :param rotation: the rotation in radians or None @@ -171,17 +327,51 @@ def from_rotated(cls, original, rotation, rotation_degrees = None): :raises ValueError: if ``rotation is not None and rotation_degrees is not None`` :raises ValueError: if ``rotation is None and rotation_degrees is None`` """ - pass + if (rotation is None) == (rotation_degrees is None): + raise ValueError("rotation must be specified exactly once (rotation={}, rotation_degrees={})".format(rotation, rotation_degrees)) + + if rotation_degrees is not None: + rotation = rotation_degrees * math.pi / 180 + + new_pts = [] + for pt in original.points: + shifted = pt - original.center + new_pts.append(vector2.Vector2(original.center.x + shifted.x * math.cos(rotation) - shifted.y * math.sin(rotation), + original.center.y + shifted.y * math.cos(rotation) + shifted.x * math.sin(rotation))) + + result = cls(new_pts, suppress_errors = True) + result._area = original._area + return result @property def area(self): """ Get the area of this polygon. Lazily initialized. + Uses the `Shoelace Formula ` to + calculate the signed area, allowing this to also test for correct polygon + orientation. + :returns: area of this polygon :rtype: :class:`numbers.Number` + + :raises ValueError: if the polygon is not in clockwise order """ - pass + + if self._area is None: + _edgesum = 0 + _previous = self.points[0] + for i in range(1, len(self.points) + 1): + pt = self.points[i % len(self.points)] + _edgesum += (pt.x - _previous.x) * (pt.y + _previous.y) + _previous = pt + + if _edgesum < 0: + raise ValueError("Points are counter-clockwise oriented (signed square area: {})".format(_edgesum)) + + self._area = _edgesum / 2 + + return self._area @staticmethod @@ -189,6 +379,10 @@ def project_onto_axis(polygon, offset, axis): """ Find the projection of the polygon along the axis. + Uses the `dot product ` + of each point on the polygon to project those points onto the axis, + and then finds the extremes of the projection. + :param polygon: the polygon to project :type polygon: :class:`pygorithm.geometry.polygon2.Polygon2` :param offset: the offset of the polygon @@ -198,7 +392,16 @@ def project_onto_axis(polygon, offset, axis): :returns: the projection of the polygon along the axis :rtype: :class:`pygorithm.geometry.axisall.AxisAlignedLine` """ - pass + + dot_min = None + dot_max = None + for pt in polygon.points: + dot = (pt + offset).dot(axis) + + dot_min = min(dot, dot_min) if dot_min is not None else dot + dot_max = max(dot, dot_max) if dot_max is not None else dot + + return axisall.AxisAlignedLine(axis, dot_min, dot_max) @staticmethod def contains_point(polygon, offset, point): @@ -212,6 +415,10 @@ def contains_point(polygon, offset, point): This can never return True, True + This finds the cross product of this point and the two points comprising + every line on this polygon. If any are 0, this is an edge. Otherwise, + they must all be negative (when traversed clockwise). + :param polygon: the polygon :type polygon: :class:`pygorithm.geometry.polygon2.Polygon2` :param offset: the offset of the polygon @@ -221,7 +428,24 @@ def contains_point(polygon, offset, point): :returns: (on edge, contained) :rtype: (bool, bool) """ - pass + + _previous = polygon.points[0] + for i in range(1, len(polygon.points) + 1): + curr = polygon.points[i % len(polygon.points)] + + vec1 = _previous + offset - point + vec2 = curr + offset - point + cross = vec1.cross(vec2) + _previous = curr + + if Polygon2._approx(cross, 0): + return True, False + + if cross > 0: + return False, False + + return False, True + @staticmethod def find_intersection(poly1, poly2, offset1, offset2, find_mtv = True): @@ -248,6 +472,9 @@ def find_intersection(poly1, poly2, offset1, offset2, find_mtv = True): The first value in the mtv could be negative (used to inverse the direction of the axis) + This uses the `Seperating Axis Theorem to + calculate intersection. + :param poly1: the first polygon :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` :param poly2: the second polygon @@ -262,4 +489,78 @@ def find_intersection(poly1, poly2, offset1, offset2, find_mtv = True): :returns: (touching, overlapping, (mtv distance, mtv axis)) :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) """ - pass \ No newline at end of file + + unique_normals = list(poly1.normals) + for n in poly2.normals: + found = False + for old_n in poly1.normals: + if Polygon2._approx(n.x, old_n.x) and Polygon2._approx(n.y, old_n.y): + found = True + break + if not found: + unique_normals.append(n) + + + not_overlapping = False + best_mtv = None + for norm in unique_normals: + proj1 = Polygon2.project_onto_axis(poly1, offset1, norm) + proj2 = Polygon2.project_onto_axis(poly2, offset2, norm) + + touch, mtv = axisall.AxisAlignedLine.find_intersection(proj1, proj2) + + if not touch: + return False, False, None + + if mtv[0] is None: + not_overlapping = True + best_mtv = None + elif find_mtv and not not_overlapping: + if best_mtv is None or abs(mtv[0]) < abs(best_mtv[0]): + best_mtv = (mtv[0], norm) + + if not_overlapping: + return True, False, None + else: + return False, True, best_mtv + + + @staticmethod + def _create_link(pts): + param0 = "+".join(('%28{}%2C+{}%29'.format(v.x, v.y)) for v in pts) + xmin = pts[0].x + xmax = xmin + ymin = pts[1].y + ymax = ymin + for v in pts: + xmin = min(xmin, v.x) + xmax = max(xmax, v.x) + ymin = min(ymin, v.y) + ymax = max(ymax, v.y) + + return "www.webmath.com/cgi-bin/grapher.cgi?param0={}&xmin={}&xmax={}&ymin={}&ymax={}&to_plot=points".format(param0, xmin-5, xmax+5, ymin-5, ymax+5) + + def __repr__(self): + """ + Creates an unambiguous representation of this polygon, only + showing the list of points. + + :returns: unambiguous representation of this polygon + :rtype: string + """ + + return "polygon2(points={})".format(self.points) + + def __str__(self): + """ + Creates a human-readable representation of this polygon and + includes a link to visualize it + + :returns: human-readable representation + :rtype: string + """ + + + return "polygon2(points={}, view={})".format(', '.join(str(p) for p in self.points), Polygon2._create_link(self.points)) + + \ No newline at end of file diff --git a/pygorithm/geometry/vector2.py b/pygorithm/geometry/vector2.py index bffc40a..cbbd17f 100644 --- a/pygorithm/geometry/vector2.py +++ b/pygorithm/geometry/vector2.py @@ -278,7 +278,26 @@ def dot(self, other): """ return self.x * other.x + self.y * other.y + + def cross(self, other): + """ + Calculate the z-component of the cross product between this vector and other. + + The cross product of two vectors is calculated as so:: + + Let v1 be a vector such that v1 = + Let v2 be a vector such that v2 = + + v1 x v2 = v1.x * v2.y - v1.y * v2.x + + .. caution:: + This is the special case of a cross product in 2 dimensions returning 1 + value. This is really a vector in the z direction! + """ + + return self.x * other.y - self.y * other.x + def rotate(self, *args, **kwargs): """ The named argument "degrees" or "radians" may be passed in to rotate diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 0e0252b..ea58135 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -145,7 +145,17 @@ def test_dot(self): dot_21 = vec2.dot(vec1) self.assertEqual(76, dot_21) + + def test_cross(self): + vec1 = vector2.Vector2(3, 5) + vec2 = vector2.Vector2(7, 11) + + cross_12 = vec1.cross(vec2) + self.assertEqual(-2, cross_12) + cross_21 = vec2.cross(vec1) + self.assertEqual(2, cross_21) + def test_rotate(self): vec1 = vector2.Vector2(1, 0) @@ -544,7 +554,7 @@ def test_constructor_standard(self): poly = polygon2.Polygon2([ vector2.Vector2(0, 1), vector2.Vector2(1, 1), vector2.Vector2(1, 0), - vectro2.Vector2(0, 0) ]) + vector2.Vector2(0, 0) ]) self.assertEqual(4, len(poly.points)) self.assertEqual(4, len(poly.lines)) @@ -576,8 +586,8 @@ def test_constructor_standard(self): self.assertEqual(0, poly.lines[3].end.x) self.assertEqual(1, poly.lines[3].end.y) - self.assertIsNotNone(next((vec for vec in poly.normals if vec.horizontal), None)) - self.assertIsNotNone(next((vec for vec in poly.normals if vec.vertical), None)) + self.assertIsNotNone(next((vec for vec in poly.normals if vec.y == 0), None)) + self.assertIsNotNone(next((vec for vec in poly.normals if vec.x == 0), None)) self.assertAlmostEqual(0.5, poly.center.x) self.assertAlmostEqual(0.5, poly.center.y) @@ -608,37 +618,39 @@ def test_constructor_not_clockwise(self): poly = polygon2.Polygon2([ (0, 0), (1, 0), (1, 1), (0, 1) ]) def test_from_regular(self): - diamond = polygon2.Polygon2.from_regular(4, 1) + diamond = polygon2.Polygon2.from_regular(4, 1.414213562373095) - self.assertEqual(2, diamond.points[0].x) - self.assertEqual(1, diamond.points[0].y) - self.assertEqual(1, diamond.points[1].x) - self.assertEqual(0, diamond.points[1].y) - self.assertEqual(0, diamond.points[2].x) - self.assertEqual(1, diamond.points[2].y) - self.assertEqual(1, diamond.points[3].x) - self.assertEqual(2, diamond.points[3].y) + self.assertAlmostEqual(2, diamond.points[0].x) + self.assertAlmostEqual(1, diamond.points[0].y) + self.assertAlmostEqual(1, diamond.points[1].x) + self.assertAlmostEqual(0, diamond.points[1].y) + self.assertAlmostEqual(0, diamond.points[2].x) + self.assertAlmostEqual(1, diamond.points[2].y) + self.assertAlmostEqual(1, diamond.points[3].x) + self.assertAlmostEqual(2, diamond.points[3].y) - diamond_shifted = polygon2.Polygon2.from_regular(4, 1, center = vector2.Vector2(0, 0)) + diamond_shifted = polygon2.Polygon2.from_regular(4, 1.414213562373095, center = vector2.Vector2(0, 0)) - with self.assertRaises(StopIteration): - next(i for i in range(4) if diamond.points[i].x != diamond_shifted.points[i].x + 1 or diamond.points[i].y != diamond_shifted.points[i].y + 1) + for i in range(4): + self.assertAlmostEqual(diamond.points[i].x, diamond_shifted.points[i].x + 1) + self.assertAlmostEqual(diamond.points[i].y, diamond_shifted.points[i].y + 1) square = polygon2.Polygon2.from_regular(4, 1, math.pi / 4) - self.assertEqual(0, poly.points[0].x) - self.assertEqual(1, poly.points[0].y) - self.assertEqual(1, poly.points[1].x) - self.assertEqual(1, poly.points[1].y) - self.assertEqual(1, poly.points[2].x) - self.assertEqual(0, poly.points[2].y) - self.assertEqual(0, poly.points[3].x) - self.assertEqual(0, poly.points[3].y) + self.assertAlmostEqual(1, square.points[0].x) + self.assertAlmostEqual(1, square.points[0].y) + self.assertAlmostEqual(1, square.points[1].x) + self.assertAlmostEqual(0, square.points[1].y) + self.assertAlmostEqual(0, square.points[2].x) + self.assertAlmostEqual(0, square.points[2].y) + self.assertAlmostEqual(0, square.points[3].x) + self.assertAlmostEqual(1, square.points[3].y) square2 = polygon2.Polygon2.from_regular(4, 1, start_degs = 45) - with self.assertRaises(StopIteration): - next(i for i in range(4) if square.points[i].x != square2.points[i].x or square.points[i].y != square2.points[i].y) + for i in range(4): + self.assertAlmostEqual(square.points[i].x, square2.points[i].x) + self.assertAlmostEqual(square.points[i].y, square2.points[i].y) def test_from_rotated(self): @@ -654,18 +666,18 @@ def test_from_rotated(self): # (0, 0) - (1, 2/3) = (-1, -2/3) # rotate 45 degrees clockwise = (-1 * cos(45) - (-2/3) * sin(45), (-2/3) * cos(45) + (-1) * sin(45)) = (-0.23570226039, -1.17851130198) # shift back (add center): (0.76429773961, -0.51184463531) - self.assertAlmostEqual(0.76429773961, triangle_rot.points[0].x) - self.assertAlmostEqual(-0.51184463531, triangle_rot.points[0].y) - self.assertAlmostEqual(1.23570226039, triangle_rot.points[1].x) - self.assertAlmostEqual(0.90236892706, triangle_rot.points[1].y) - self.assertAlmostEqual(0.47140452079, triangle_rot.points[2].x) - self.assertAlmostEqual(1.60947570825, triangle_rot.points[2].y) - self.assertAlmostEqual(1, triangle_rot.center.x) - self.assertAlmostEqual(0.66666666667, triangle_rot.center.y) + self.assertAlmostEqual(0.76429773961, triangle_rot.points[0].x, msg='original={}\n\nrotated={}'.format(triangle, triangle_rot)) + self.assertAlmostEqual(-0.51184463531, triangle_rot.points[0].y, msg='original={}\n\nrotated={}'.format(triangle, triangle_rot)) + self.assertAlmostEqual(0.76429773960, triangle_rot.points[1].x, msg='original={}\n\nrotated={}'.format(triangle, triangle_rot)) + self.assertAlmostEqual(0.90236892706, triangle_rot.points[1].y, msg='original={}\n\nrotated={}'.format(triangle, triangle_rot)) + self.assertAlmostEqual(1.47140452079, triangle_rot.points[2].x, msg='original={}\n\nrotated={}'.format(triangle, triangle_rot)) + self.assertAlmostEqual(1.60947570825, triangle_rot.points[2].y, msg='original={}\n\nrotated={}'.format(triangle, triangle_rot)) + self.assertAlmostEqual(1, triangle_rot.center.x, msg='original={}\n\nrotated={}'.format(triangle, triangle_rot)) + self.assertAlmostEqual(0.66666666667, triangle_rot.center.y, msg='original={}\n\nrotated={}'.format(triangle, triangle_rot)) def test_area(self): - # http://www.mathopenref.com/coordpolygonareacalc.html# helpful for checking + # https://www.calculatorsoup.com/calculators/geometry-plane/polygon.php helpful for checking poly = polygon2.Polygon2.from_regular(4, 1) self.assertAlmostEqual(1, poly.area) @@ -673,7 +685,7 @@ def test_area(self): self.assertAlmostEqual(4, poly2.area) poly3 = polygon2.Polygon2.from_regular(8, 3.7) - self.assertAlmostEqual(38.7, poly3.area) + self.assertAlmostEqual(66.1011673, poly3.area, msg=str(poly3)) poly4 = polygon2.Polygon2([ (0, 0), (1, 1), (2, 1) ]) self.assertAlmostEqual(0.5, poly4.area) @@ -723,8 +735,8 @@ def _contains_point_fuzzer(self, points, point, expected_edge, expected_contains edge, cont = polygon2.Polygon2.contains_point(new_poly, offset, point) help_msg = "points={}, point={}, expected_edge={}, expected_contains={}, edge={}, cont={}".format(points, point, expected_edge, expected_contains, edge, cont) - self.assertEqual(expected_edge, edge. help_msg) - self.assertEqual(expected_contains, cont, help_msg) + self.assertEqual(expected_edge, edge, msg=help_msg) + self.assertEqual(expected_contains, cont, msg=help_msg) def test_contains_point_false(self): poly = polygon2.Polygon2([ (1, 1), (2, 3), (4, 0) ]) @@ -771,37 +783,42 @@ def _find_intersection_fuzzer(self, points1, points2, exp_touching, exp_overlap, touch, overlap, mtv = polygon2.Polygon2.find_intersection(new_poly1, new_poly2, offset1, offset2, True) _invtouch, _invoverlap, _invmtv = polygon2.Polygon2.find_intersection(new_poly2, new_poly1, offset2, offset1, True) - help_msg = "points1={}, points2={}, offset1={}, offset2={}, exp_touching={}, " \ - "exp_overlap={}, exp_mtv={}, touch={}, overlap={}, mtv={}".format(points1, points2, offset1, - offset2, exp_touching, exp_overlap, exp_mtv, touch, overlap, mtv) - self.assertEqual(exp_touching, touch, help_msg) - self.assertEqual(exp_overlap, overlap, help_msg) - self.assertEqual(exp_touching, _invtouch, help_msg) - self.assertEqual(exp_overlap, _invoverlap, help_msg) + help_msg = "\n\npoints1={}, points2={}, offset1={}, offset2={}\n\nexp_touching={}, " \ + "exp_overlap={}, exp_mtv={}\n\ntouch={}, overlap={}, mtv={}\n\n" \ + "_invtouch={}, _invoverlap={}, _invmtv={}\n\n" \ + "orig_poly1={}\n\n" \ + "orig_poly2={}\n\n".format(points1, points2, offset1, + offset2, exp_touching, exp_overlap, exp_mtv, touch, overlap, mtv, + _invtouch, _invoverlap, _invmtv, polygon2.Polygon2(points1), + polygon2.Polygon2(points2)) + self.assertEqual(exp_touching, touch, msg=help_msg) + self.assertEqual(exp_overlap, overlap, msg=help_msg) + self.assertEqual(exp_touching, _invtouch, msg=help_msg) + self.assertEqual(exp_overlap, _invoverlap, msg=help_msg) if exp_mtv is not None: - self.assertIsNotNone(mtv, help_msg) + self.assertIsNotNone(mtv, msg=help_msg) exp_mult_x = exp_mtv[0] * exp_mtv[1].x exp_mult_y = exp_mtv[0] * exp_mtv[1].y mult_x = mtv[0] * mtv[1].x mult_y = mtv[0] * mtv[1].y - self.assertAlmostEqual(exp_mult_x, mult_x, help_msg) - self.assertAlmostEqual(exp_mult_y, mult_y, help_msg) + self.assertAlmostEqual(exp_mult_x, mult_x, msg=help_msg) + self.assertAlmostEqual(exp_mult_y, mult_y, msg=help_msg) - self.assertIsNotNone(_invmtv, help_msg) + self.assertIsNotNone(_invmtv, msg=help_msg) inv_mult_x = _invmtv[0] * _invmtv[1].x inv_mult_y = _invmtv[0] * _invmtv[1].y - self.assertAlmostEqual(-exp_mult_x, inv_mult_x, help_msg) - self.assertAlmostEqual(-exp_mult_y, inv_mult_y, help_msg) + self.assertAlmostEqual(-exp_mult_x, inv_mult_x, msg=help_msg) + self.assertAlmostEqual(-exp_mult_y, inv_mult_y, msg=help_msg) else: - self.assertIsNone(mtv, help_msg) - self.assertIsNone(_invmtv, help_msg) + self.assertIsNone(mtv, msg=help_msg) + self.assertIsNone(_invmtv, msg=help_msg) _touch, _overlap, _mtv = polygon2.Polygon2.find_intersection(new_poly1, new_poly2, offset1, offset2, False) - self.assertEqual(exp_touching, _touch, help_msg) - self.assertEqual(exp_overlap, _overlap, help_msg) - self.assertIsNone(_mtv, help_msg) + self.assertEqual(exp_touching, _touch, msg=help_msg) + self.assertEqual(exp_overlap, _overlap, msg=help_msg) + self.assertIsNone(_mtv, msg=help_msg) def test_find_intersection_false(self): poly1 = polygon2.Polygon2([ (0, 1), (0, 3), (5, 3), (5, 1) ]) @@ -815,18 +832,18 @@ def test_find_intersection_false(self): def test_find_intersection_touching(self): poly1 = polygon2.Polygon2([ (3, 3), (3, 6), (7, 5), (5, 3) ]) poly2 = polygon2.Polygon2([ (4, 3), (8, 2), (6, -1) ]) - poly3 = polygon2.Polyogn2([ (5, 5.5), (1, 6.5), (3, 7), (7, 6) ]) + poly3 = polygon2.Polygon2([ (5, 5.5), (1, 6.5), (3, 7), (7, 6) ]) self._find_intersection_fuzzer(poly1, poly2, True, False, None) self._find_intersection_fuzzer(poly1, poly3, True, False, None) def test_find_intersection_overlapping(self): poly1 = polygon2.Polygon2([ (2, 1), (4, 3), (6, 3), (6, 1) ]) - poly2 = polygon2.Polygon2([ (5, 2), (5, 5), (7, 5) ]) + poly2 = polygon2.Polygon2([ (5, 2.5), (5, 5), (7, 5) ]) poly3 = polygon2.Polygon2([ (1, 3), (3, 3), (3, 1), (1, 1) ]) - self._find_intersection_fuzzer(poly1, poly2, False, True, (1, vector2.Vector2(0, -1))) - self._find_intersection_fuzzer(poly1, poly3, False, True, (0.5, vector2.Vector2(-0.70710678118, 0.70710678118))) + self._find_intersection_fuzzer(poly1, poly2, False, True, (0.5, vector2.Vector2(0, -1))) + self._find_intersection_fuzzer(poly1, poly3, False, True, (0.70710678118, vector2.Vector2(0.70710678118, -0.70710678118))) if __name__ == '__main__': unittest.main() \ No newline at end of file From b7a63fb6884a518ce390596e045cb07dcde77454 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 29 Aug 2017 11:44:06 -0700 Subject: [PATCH 174/251] Update to python 3.6 from 3.4 Remove the _approx functions that I was using to delay updating * pygorithm/geometry/axisall.py - remove _approx * pygorithm/geometry/line2.py - remove _approx * pygorithm/geometry/polygon2.py - remove _approx --- pygorithm/geometry/axisall.py | 27 +++++--------------------- pygorithm/geometry/line2.py | 35 +++++++++------------------------- pygorithm/geometry/polygon2.py | 26 ++++--------------------- 3 files changed, 18 insertions(+), 70 deletions(-) diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py index 2afae12..780b425 100644 --- a/pygorithm/geometry/axisall.py +++ b/pygorithm/geometry/axisall.py @@ -64,23 +64,6 @@ def __init__(self, axis, point1, point2): self.min = min(point1, point2) self.max = max(point1, point2) - @staticmethod - def _approx(a, b): - """ - Same as math.isclose but supports python < 3.5 - - :param a: first numeric - :type a: :class:`numbers.Number` - :param b: second numeric - :type b: :class:`numbers.Number` - :returns: if the are close - :rtype: bool - """ - - if hasattr(math, 'isclose'): - return math.isclose(a, b) - return abs(a - b) <= 1e-09 * max(abs(a), abs(b)) - @staticmethod def intersects(line1, line2): """ @@ -108,9 +91,9 @@ def intersects(line1, line2): :rtype: (bool, bool) """ - if AxisAlignedLine._approx(line1.max, line2.min): + if math.isclose(line1.max, line2.min): return True, False - elif AxisAlignedLine._approx(line1.min, line2.max): + elif math.isclose(line1.min, line2.max): return True, False elif line1.max < line2.min: return False, False @@ -146,9 +129,9 @@ def find_intersection(line1, line2): :rtype: (bool, (:class:`numbers.Number` or None, :class:`numbers.Number`, :class:`numbers.Number`) or None) """ - if AxisAlignedLine._approx(line1.max, line2.min): + if math.isclose(line1.max, line2.min): return True, (None, line2.min, line2.min) - elif AxisAlignedLine._approx(line1.min, line2.max): + elif math.isclose(line1.min, line2.max): return True, (None, line1.min, line1.min) elif line1.max < line2.min or line2.max < line1.min: return False, None @@ -183,7 +166,7 @@ def contains_point(line, point): :rtype: (bool, bool) """ - if AxisAlignedLine._approx(line.min, point) or AxisAlignedLine._approx(line.max, point): + if math.isclose(line.min, point) or math.isclose(line.max, point): return True, False elif point < line.min or point > line.max: return False, False diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index 721027d..3dcacc4 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -377,23 +377,6 @@ def calculate_y_intercept(self, offset): # y = mx + b -> b = y - mx return self.start.y + offset.y - self.slope * (self.start.x + offset.x) - @staticmethod - def _approx(a, b): - """ - Same as math.isclose but supports python < 3.5 - - :param a: first numeric - :type a: :class:`numbers.Number` - :param b: second numeric - :type b: :class:`numbers.Number` - :returns: if the are close - :rtype: bool - """ - - if hasattr(math, 'isclose'): - return math.isclose(a, b) - return abs(a - b) <= 1e-09 * max(abs(a), abs(b)) - @staticmethod def are_parallel(line1, line2): """ @@ -412,7 +395,7 @@ def are_parallel(line1, line2): if line1.vertical and line2.vertical: return True - return Line2._approx(line1.slope, line2.slope) + return math.isclose(line1.slope, line2.slope) @staticmethod def find_intersection(line1, line2, offset1 = None, offset2 = None): @@ -467,7 +450,7 @@ def find_intersection(line1, line2, offset1 = None, offset2 = None): if line1.vertical and line2.vertical: # Two vertical lines - if not Line2._approx(l1_st_x, l2_st_x): + if not math.isclose(l1_st_x, l2_st_x): return False, False, None aal1 = axisall.AxisAlignedLine(None, l1_st_y, l1_en_y) @@ -484,7 +467,7 @@ def find_intersection(line1, line2, offset1 = None, offset2 = None): if line1.horizontal and line2.horizontal: # Two horizontal lines - if not Line2._approx(l1_st_y, l2_st_y): + if not math.isclose(l1_st_y, l2_st_y): return False, False, None aal1 = axisall.AxisAlignedLine(None, l1_st_x, l1_en_x) @@ -503,7 +486,7 @@ def find_intersection(line1, line2, offset1 = None, offset2 = None): # Two non-vertical, non-horizontal, parallel lines yintr1 = line1.calculate_y_intercept(offset1) yintr2 = line2.calculate_y_intercept(offset2) - if not Line2._approx(yintr1, yintr2): + if not math.isclose(yintr1, yintr2): return False, False, None axis = line1.axis @@ -544,7 +527,7 @@ def unshift_vec(vec): pt = vector2.Vector2(l1_st_x, l2_st_y) - if Line2._approx(l2_st_y, l1_min) or Line2._approx(l2_st_y, l2_max) or Line2._approx(l1_st_x, l2_min) or Line2._approx(l2_st_y, l2_max): + if math.isclose(l2_st_y, l1_min) or math.isclose(l2_st_y, l2_max) or math.isclose(l1_st_x, l2_min) or math.isclose(l2_st_y, l2_max): return True, False, pt else: return False, True, pt @@ -556,7 +539,7 @@ def unshift_vec(vec): l1_min = min(l1_st_y, l1_en_y) if offset1 is not None else line1.min_y l1_max = max(l1_st_y, l1_en_y) if offset1 is not None else line1.max_y - if Line2._approx(line2_y_at_line1_x, l1_min) or Line2._approx(line2_y_at_line1_x, l1_max): + if math.isclose(line2_y_at_line1_x, l1_min) or math.isclose(line2_y_at_line1_x, l1_max): return True, False, vector2.Vector2(l1_st_x, line2_y_at_line1_x) elif line2_y_at_line1_x < l1_min or line2_y_at_line1_x > l2_max: return False, False, None @@ -571,7 +554,7 @@ def unshift_vec(vec): l1_min = min(l1_st_x, l1_en_x) if offset1 is not None else line1.min_x l1_max = max(l1_st_x, l1_en_x) if offset1 is not None else line1.max_x - if Line2._approx(line2_x_at_line1_y, l1_min) or Line2._approx(line2_x_at_line1_y, l1_max): + if math.isclose(line2_x_at_line1_y, l1_min) or math.isclose(line2_x_at_line1_y, l1_max): return True, False, vector2.Vector2(line2_x_at_line1_y, l1_st_y) elif line2_x_at_line1_y < l1_min or line2_x_at_line1_y > l1_max: return False, False, None @@ -593,8 +576,8 @@ def unshift_vec(vec): # Some caution needs to be taken here to ensure we do approximately before range # checks. It's possible for _approx(a, b) to be True and a < b to be True - on_edge1 = Line2._approx(intr_x, l1_st_x) or Line2._approx(intr_x, l1_en_x) - on_edge2 = Line2._approx(intr_x, l2_st_x) or Line2._approx(intr_x, l2_en_x) + on_edge1 = math.isclose(intr_x, l1_st_x) or math.isclose(intr_x, l1_en_x) + on_edge2 = math.isclose(intr_x, l2_st_x) or math.isclose(intr_x, l2_en_x) if on_edge1 and on_edge2: intr_y = line1.slope * intr_x + yintr1 diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 94a2d6c..8f5c960 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -115,7 +115,7 @@ def __init__(self, points, suppress_errors = False): if not suppress_errors: for prev_pt in self.points: - if Polygon2._approx(prev_pt.x, act_pt.x) and Polygon2._approx(prev_pt.y, act_pt.y): + if math.isclose(prev_pt.x, act_pt.x) and math.isclose(prev_pt.y, act_pt.y): raise ValueError('Repeated points! points={} (repeated={})'.format(points, act_pt)) @@ -133,7 +133,7 @@ def __init__(self, points, suppress_errors = False): norm.x *= -1 norm.y *= -1 - already_contains = next((v for v in self.normals if Polygon2._approx(v.x, norm.x) and Polygon2._approx(v.y, norm.y)), None) + already_contains = next((v for v in self.normals if math.isclose(v.x, norm.x) and math.isclose(v.y, norm.y)), None) if already_contains is None: self.normals.append(norm) @@ -164,24 +164,6 @@ def __init__(self, points, suppress_errors = False): if cross_product < -1e-09: raise ValueError('Detected concavity at index {} - {} cross {} = {}\nself={}'.format(middlepointin, vec1, vec2, cross_product, str(self))) - - @staticmethod - def _approx(a, b): - """ - Same as math.isclose but supports python < 3.5 - - :param a: first numeric - :type a: :class:`numbers.Number` - :param b: second numeric - :type b: :class:`numbers.Number` - :returns: if the are close - :rtype: bool - """ - - if hasattr(math, 'isclose'): - return math.isclose(a, b) - return abs(a - b) <= 1e-09 * max(abs(a), abs(b)) - @classmethod def from_regular(cls, sides, length, start_rads = None, start_degs = None, center = None): """ @@ -438,7 +420,7 @@ def contains_point(polygon, offset, point): cross = vec1.cross(vec2) _previous = curr - if Polygon2._approx(cross, 0): + if math.isclose(cross, 0): return True, False if cross > 0: @@ -494,7 +476,7 @@ def find_intersection(poly1, poly2, offset1, offset2, find_mtv = True): for n in poly2.normals: found = False for old_n in poly1.normals: - if Polygon2._approx(n.x, old_n.x) and Polygon2._approx(n.y, old_n.y): + if math.isclose(n.x, old_n.x) and math.isclose(n.y, old_n.y): found = True break if not found: From 7547b18673e738268e0cca1c84c0604096c2077f Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 29 Aug 2017 11:49:08 -0700 Subject: [PATCH 175/251] Actually merge docs/index.rst Needed the commit on github to realize that it has been changed to an alphabetical sort. Moved Geometry to its alphabetical location --- docs/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.rst b/docs/index.rst index 9cbf29b..d0a8dac 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -25,10 +25,10 @@ Quick Links Data_Structure DynamicP Fibonacci + Geometry Greedy Math Pathfinding - Geometry Searching Sorting strings From b56c063e2f53eeac2bb6ca8ee6503c5eecbf212f Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 29 Aug 2017 11:59:37 -0700 Subject: [PATCH 176/251] Add axis aligned line repr and str * pygorithm/geometry/axisall.py - add __str__ and __repr__ * pygorithm/geometry/polygon2.py - document _create_links --- pygorithm/geometry/axisall.py | 53 +++++++++++++++++++++++++++++++++- pygorithm/geometry/polygon2.py | 11 +++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py index 780b425..85246c9 100644 --- a/pygorithm/geometry/axisall.py +++ b/pygorithm/geometry/axisall.py @@ -171,4 +171,55 @@ def contains_point(line, point): elif point < line.min or point > line.max: return False, False else: - return False, True \ No newline at end of file + return False, True + + def __repr__(self): + """ + Create an unambiguous representation of this axis aligned + line. + + Example: + + .. code-block:: python + + from pygorithm.geometry import axisall + + aal = axisall.AxisAlignedLine(None, 3, 5) + + # prints AxisAlignedLine(axis=None, min=3, max=5) + print(repr(aal)) + + :returns: un-ambiguous representation of this line + :rtype: string + """ + + return "AxisAlignedLine(axis={}, min={}, max={})".format(repr(self.axis), self.min, self.max) + + def __str__(self): + """ + Create a human-readable representation of this axis aligned line. + + Example: + + .. code-block:: python + + from pygorithm.geometry import axisall + + aal = axisall.AxisAlignedLine(None, 0.7071234, 0.7071234) + + # prints axisall(along None from 0.707 to 0.707) + print(aal) + + :returns: human-readable representation of this line + :rtype: string + """ + + pretty_min = round(self.min * 1000) / 1000 + if pretty_min == math.floor(pretty_min): + pretty_min = math.floor(pretty_min) + + pretty_max = round(self.max * 1000) / 1000 + if pretty_max == math.floor(pretty_max): + pretty_max = math.floor(pretty_max) + + return "axisall(along {} from {} to {})".format(str(axis), pretty_min, pretty_max) \ No newline at end of file diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 8f5c960..213fe69 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -509,6 +509,17 @@ def find_intersection(poly1, poly2, offset1, offset2, find_mtv = True): @staticmethod def _create_link(pts): + """ + Create a webmath link to display the polygon. + + This isn't a perfect drawing since it doesn't show connections (so order is + invisible). Avoid programatically connecting to the website. This is mostly + used because it's very difficult to visualize polygons from lists of points. + + :param pts: a set of points (order, number, etc. are irrelevant) + :type pts: list of :class:`pygorithm.geometry.vector2.Vector2` + """ + param0 = "+".join(('%28{}%2C+{}%29'.format(v.x, v.y)) for v in pts) xmin = pts[0].x xmax = xmin From b521d965e49c8f37091db7f863176347e559ba56 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 29 Aug 2017 12:04:17 -0700 Subject: [PATCH 177/251] Add tests for axisall repr and str * pygorithm/geometry/axisall.py - fix missing self. * tests/test_geometry.py - add tests for axisall repr and str --- pygorithm/geometry/axisall.py | 2 +- tests/test_geometry.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pygorithm/geometry/axisall.py b/pygorithm/geometry/axisall.py index 85246c9..be52234 100644 --- a/pygorithm/geometry/axisall.py +++ b/pygorithm/geometry/axisall.py @@ -222,4 +222,4 @@ def __str__(self): if pretty_max == math.floor(pretty_max): pretty_max = math.floor(pretty_max) - return "axisall(along {} from {} to {})".format(str(axis), pretty_min, pretty_max) \ No newline at end of file + return "axisall(along {} from {} to {})".format(str(self.axis), pretty_min, pretty_max) \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index ea58135..84b26d2 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -545,6 +545,22 @@ def test_contains_point_inner(self): outer, inner = axisall.AxisAlignedLine.contains_point(_aal1, 0.75) self.assertFalse(outer) self.assertTrue(inner) + + def test_repr(self): + _aal = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + + exp = "AxisAlignedLine(axis=vector2(x=1, y=1), min=0, max=1)" + self.assertEqual(exp, repr(_aal)) + + def test_str(self): + _aal1 = axisall.AxisAlignedLine(self.vec_1_1, 0, 1) + _aal2 = axisall.AxisAlignedLine(self.vec_1_1, 0.707123, 0.707123) + + exp1 = "axisall(along <1, 1> from 0 to 1)" + exp2 = "axisall(along <1, 1> from 0.707 to 0.707)" + + self.assertEqual(exp1, str(_aal1)) + self.assertEqual(exp2, str(_aal2)) class TestPolygon(unittest.TestCase): def setUp(self): From 93cd483b2e6123fca9f41c9d19cc1574bdf4ed93 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 30 Aug 2017 07:15:20 +0530 Subject: [PATCH 178/251] Added docs for binary package --- docs/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.rst b/docs/index.rst index d0a8dac..ea9b6b3 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -22,6 +22,7 @@ Quick Links :maxdepth: 2 :caption: Documentation: + Binary Data_Structure DynamicP Fibonacci From 16846757d7ca3033aadc9a506b790de5e7cf47d3 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 30 Aug 2017 07:15:25 +0530 Subject: [PATCH 179/251] Added docs for binary package --- docs/Binary.rst | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 docs/Binary.rst diff --git a/docs/Binary.rst b/docs/Binary.rst new file mode 100644 index 0000000..b478124 --- /dev/null +++ b/docs/Binary.rst @@ -0,0 +1,72 @@ +================= +Binary Algorithms +================= + +A place for implementation of base conversions + +Features +-------- + +* To see all the available functions in a module, you can just type ``help()`` with the module name as argument. For example, + +.. code:: python + + >>> from pygorithm import binary + >>> help(binary) + Help on package pygorithm.binary in pygorithm: + + NAME + pygorithm.binary - Collection or binary conversions and algorithms + + MODULE REFERENCE + https://docs.python.org/3.5/library/pygorithm.binary.html + + The following documentation is automatically generated from the Python + source files. It may be incomplete, incorrect or include features that + are considered implementation detail and may vary between Python + implementations. When in doubt, consult the module reference at the + location listed above. + + PACKAGE CONTENTS + ascii + base10 + base16 + base2 + binary_utils + + DATA + __all__ = ['ascii', 'base2', 'base10', 'base16'] + + +ASCII Conversions +----------------- + +* Functions and their uses + +.. automodule:: pygorithm.binary.ascii + :members: + +Base2 Coversions +---------------- + +* Functions and their uses + +.. automodule:: pygorithm.binary.base2 + :members: + + +Base10 Coversions +----------------- + +* Functions and their uses + +.. automodule:: pygorithm.binary.base10 + :members: + +Base16 Coversions +----------------- + +* Functions and their uses + +.. automodule:: pygorithm.binary.base16 + :members: From 74a80817474c3f2fcd5f74ab62adfe4969c614cb Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Wed, 30 Aug 2017 07:23:46 +0530 Subject: [PATCH 180/251] Typo fixes --- pygorithm/binary/binary_utils.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pygorithm/binary/binary_utils.py b/pygorithm/binary/binary_utils.py index f5c4d9f..228e9e5 100644 --- a/pygorithm/binary/binary_utils.py +++ b/pygorithm/binary/binary_utils.py @@ -4,7 +4,14 @@ """ -def pad(value: str, return_type=str) -> """Pad binary value with zeros""": +def pad(value, return_type): + ''' + Pad binary value with zeros + :param value: string + :param return_type: string + ''' + if type(value) is not str: + raise TypeError("pad only accepts str, not {}".format(str(type(value)))) if len(value) % 4 != 0: pad_amount = 4 - (len(value) % 4) return return_type(('0' * pad_amount) + value) @@ -12,5 +19,10 @@ def pad(value: str, return_type=str) -> """Pad binary value with zeros""": return return_type(value) -def to_string(binary_array: list, delimiter=' ') -> """Convert binary array to string""": - return delimiter.join(binary_array) \ No newline at end of file +def to_string(binary_array, delimiter=' '): + """ + Convert binary array to string + """ + if type(binary_array) is not list: + raise TypeError("to_string only accepts lists, not {}".format(str(type(value)))) + return delimiter.join(binary_array) From 1bb2269ffb6d820b57d4c76482c50285c77ffaa8 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 09:43:40 -0700 Subject: [PATCH 181/251] Begin work on quadtree Quadtrees need a solid rectangle class in order to work, so doing that first. * docs/Geometry.rst - Add Rectangle references + pygorithm/data_structures/quadtree.py - incomplete skeleton * pygorithm/geometry/polygon2.py - minor documentation fix + pygorithm/geometry/rect2.py - fairly complete skeleton * tests/test_geometry.py - skeleton tests for rect2 --- docs/Geometry.rst | 9 +- pygorithm/data_structures/quadtree.py | 28 +++ pygorithm/geometry/polygon2.py | 4 +- pygorithm/geometry/rect2.py | 259 ++++++++++++++++++++++++++ tests/test_geometry.py | 61 +++++- 5 files changed, 356 insertions(+), 5 deletions(-) create mode 100644 pygorithm/data_structures/quadtree.py create mode 100644 pygorithm/geometry/rect2.py diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 957faac..a0c9bf0 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -50,9 +50,11 @@ Features * Shapes available: - Concave Polygons (polygon2) + - Rectangles (rect2) * Algorithms available: - Separating Axis Theorem (polygon2) + - Broad-phase (rect2) Vector2 ------- @@ -82,9 +84,12 @@ Concave Polygon :members: :special-members: - - +Axis-Aligned Rectangle +---------------------- +.. autoclass:: pygorithm.geometry.rect2.Rect2 + :members: + :special-members: diff --git a/pygorithm/data_structures/quadtree.py b/pygorithm/data_structures/quadtree.py new file mode 100644 index 0000000..7ce7be4 --- /dev/null +++ b/pygorithm/data_structures/quadtree.py @@ -0,0 +1,28 @@ +""" +Author: Timothy Moore +Created On: 31th August 2017 + +Defines a two-dimensional quadtree of arbitrary +depth and bucket size. +""" +import inspect + +from pygorithm.geometry import (vector2, polygon2, rect2) + +class QuadTree(object): + """ + A quadtree is a sorting tool for two-dimensional space, most + commonly used to reduce the number of required collision + calculations in a two-dimensional scene. In this context, + the scene is stepped without collision detection, then a + quadtree is constructed from all of the boundaries + """ + @staticmethod + def get_code(): + """ + Get the code for the QuadTree class + + :returns: code for QuadTree + :rtype: string + """ + return inspect.getsource(QuadTree) \ No newline at end of file diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 213fe69..4afdfbe 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -407,8 +407,8 @@ def contains_point(polygon, offset, point): :type offset: :class:`pygorithm.geometry.vector2.Vector2` or None :param point: the point to check :type point: :class:`pygorithm.geometry.vector2.Vector2` - :returns: (on edge, contained) - :rtype: (bool, bool) + :returns: on edge, contained + :rtype: bool, bool """ _previous = polygon.points[0] diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py new file mode 100644 index 0000000..b8d6586 --- /dev/null +++ b/pygorithm/geometry/rect2.py @@ -0,0 +1,259 @@ +""" +Author: Timothy Moore +Created On: 31th August 2017 + +Defines a 2-dimensional axis-aligned rectangle. +This rectangle does not act as a polygon, but +there are similar collision methods that accept +polygons. + +Unlike Polygon2s, Rect2s are very fast to construct. +""" + +import math + +from pygorithm.geometry import (vector2, line2, axisall, polygon2) + +def Rect2(object): + """ + A rectangle. Uses SAT collision against polygons and + broad-phase collision against other rectangles. + + Rectangles are fast to construct and have very fast + rectangle-rectangle collision detection. + + Rect2 is designed to have almost exactly the opposite performance + characteristics as Polygon2 when doing collision against + Polygon2s: Fast to construct and complex on first call with + many operations incurring expensive recalculations. + + .. caution:: + + Collision detection against a rectangle with cause + initialization of the polygon representation of a + rectangle. This has the noticeable performance + characteristics that are seen whenever a polygon + is constructed (see :py:class:~`pygorithm.geometry.polygon2.Polygon2`). + This operation recurrs only if width and height + were modified. + + :ivar mincorner: the position of this polygon + :vartype mincorner: :class:`pygorithm.geometry.vector2.Vector2` + """ + + def __init__(self, width, height, mincorner=None): + """ + Create a new rectangle of width and height. + + If mincorner is None, the origin is assumed. + + :param width: width of this rect + :type width: :class:`numbers.Number` + :param height: height of this rect + :type height: :class:`numbers.Number` + :param mincorner: the position of this rect + :type mincorner: :class:`pygorithm.geometry.vector2.Vector2` or None + """ + pass + + @property + def polygon(self): + """ + Get the polygon representation of this rectangle, without + the corners. Lazily initialized and up-to-date with width + and height. + + .. caution:: + + This does not include the mincorner (which should be passed as + offset) + + :returns: polygon representation of this rectangle + :rtype: :class:`pygorithm.geometry.polygon2.Polygon2` + """ + pass + + @property + def width(self): + """ + Get or set the width of this rect. + + .. caution:: + + Setting the width of the rectangle will remove the polygon + caching required for rectangle-polygon collision. + + :returns: width of this rect + :rtype: :class:`numbers.Number` + """ + pass + + @property.setter + def width(self, value): + pass + + @property + def height(self): + """ + Get or set the height of this rect + + .. caution:: + + Setting the height of the rectangle will remove the cached + operations required for rectangle-polygon collision. + + :returns: height of this rect + :rtype: :class:`numbers.Number` + """ + pass + + @property.setter + def height(self, value): + pass + + @property + def area(self): + """ + Get the area of this rect + + :returns: area of this rect + :rtype: :class:`numbers.Number` + """ + pass + + @staticmethod + def project_onto_axis(rect, axis): + """ + Project the rect onto the specified axis. + + .. tip:: + + This function is extremely fast for vertical or + horizontal axises. + + :param rect: the rect to project + :type rect: :class:`pygorithm.geometry.rect2.Rect2` + :param axis: the axis to project onto + :type axis: :class:`pygorithm.geometry.vector2.Vector2` + :returns: the projection of the rect along axis + :rtype: :class:`pygorithm.geometry.axisall.AxisAlignedLine` + """ + pass + + @staticmethod + def contains_point(rect, point): + """ + Determine if the rect contains the point + + Distinguish between points that are on the edge of the + rect and those that are not. + + .. tip:: + + This will never return True, True + + :param rect: the rect + :type rect: :class:`pygorithm.geometry.rect2.Rect2` + :param point: the point + :type point: :class:`pygorithm.geometry.vector2.Vector2` + :returns: point on edge, point inside + :rtype: bool, bool + """ + pass + + @staticmethod + def find_intersection(*args, find_mtv=True): + """ + Determine the state of intersection between a rect and a + polygon. + + For Rect-Polygon intersection: + + Must be passed in 3 arguments - a :py:class:~`pygorithm.geometry.rect2.Rect2`, + a :py:class:~`pygorithm.geometry.polygon2.Polygon2`, and a + :py:class:~`pygorithm.geometry.vector2.Vector2`. The vector must come immediately + after the polygon, but the rect can be either the first or last unnamed argument. + If it is the first argument, the mtv is against the rectangle. If it is the last + argument, the mtv is against the polygon. + + + For Rect-Rect intersection: + + Must be passed in 2 ar + Examples: + + .. code-block:: python + + from pygorithm.geometry import (vector2, polygon2, rect2) + + octogon = polygon2.Polygon2.from_regular(8, 1) + oct_offset = vector2.Vector2(0.5, 0) + + unit_square = rect2.Rect2(1, 1) + + # find mtv for square against octogon + touching, overlapping, mtv = rect2.Rect2.find_intersection(unit_square, octogon, oct_offset) + + # find mtv for octogon against square + touching, overlapping, mtv = rect2.Rect2.find_intersection(octogon, oct_offset, unit_square) + + # find intersection but skip mtv (two options) + touching, overlapping, alwaysNone = rect2.Rect2.find_intersection(unit_square, octogon, oct_offset, find_mtv=False) + touching, overlapping, alwaysNone = rect2.Rect2.find_intersection(octogon, oct_offset, unit_square, find_mtv=False) + + big_square = rect2.Rect2(2, 2, vector2.Vector2(-1.5, 0)) + + # find mtv for square against big square + touching, overlapping, mtv = rect2.Rect2.find_intersection(unit_square, big_square) + + # find mtv for big square against square + touching, overlapping, mtv = rect2.Rect2.find_intersection(big_square, unit_square) + + :param args: 2 arguments for rect-rect, 3 arguments for rect-polygon (see above) + :type args: list + :param find_mtv: if mtv should be found where possible (default ``True``) + :type find_mtv: bool + :returns: (touching, overlapping, (mtv distance, mtv axis)) + :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) + """ + pass + + def __repr__(self): + """ + Create an unambiguous representation of this rectangle. + + Example: + + .. code-block:: python + + from pygorithm.geometry import (vector2, rect2) + + unit_square = rect2.Rect2(1, 1, vector2.Vector2(3, 4)) + + # prints rect2(width=1, height=1, mincorner=vector2(x=3, y=4)) + print(repr(unit_square)) + + :returns: unambiguous representation of this rectangle + :rtype: string + """ + pass + + def __str__(self): + """ + Create a human readable representation of this rectangle + + Example: + + .. code-block:: python + + from pygorithm.geometry import (vector2, rect2) + + unit_square = rect2.Rect2(1, 1, vector2.Vector2(3, 4)) + ugly_Rect = rect2.Rect2(0.7071234, 0.7079876, vector2.Vector2(0.56789123, 0.876543)) + + # prints rect(1x1 at <3, 4>) + print(str(unit_square)) + + # prints rect(0.707x0.708 at <0.568, 0.877>) + """ + pass \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 84b26d2..b067444 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -7,7 +7,8 @@ vector2, axisall, line2, - polygon2 + polygon2, + rect2 ) class TestCollisionDetection(unittest.TestCase): @@ -861,5 +862,63 @@ def test_find_intersection_overlapping(self): self._find_intersection_fuzzer(poly1, poly2, False, True, (0.5, vector2.Vector2(0, -1))) self._find_intersection_fuzzer(poly1, poly3, False, True, (0.70710678118, vector2.Vector2(0.70710678118, -0.70710678118))) +def TestRect2(unittest.TestCase): + def test_constructor(self): + pass + + def test_polygon(self): + pass + + def test_area(self): + pass + + def test_project_onto_axis(self): + pass + + def test_contains_point_false(self): + pass + + def test_contains_point_edge(self): + pass + + def test_contains_point_contained(self): + pass + + def test_find_intersection_rect_poly_false(self): + pass + + def test_find_intersection_rect_poly_edge(self): + pass + + def test_find_intersection_rect_poly_mtv(self): + pass + + def test_find_intersection_rect_poly_coll_findmtv_false(self): + pass + + def test_find_intersection_poly_rect_false(self): + pass + + def test_find_intersection_poly_rect_edge(self): + pass + + def test_find_intersection_poly_rect_mtv(self): + pass + + def test_find_intersection_poly_rect_coll_findmtv_false(self): + pass + + def test_find_intersection_rect_rect_false(self): + pass + + def test_find_intersection_rect_rect_edge(self): + pass + + def test_find_intersection_rect_rect_mtv(self): + pass + + def test_find_intersection_rect_rect_coll_findmtv_false(self): + pass + if __name__ == '__main__': unittest.main() \ No newline at end of file From cc92b1f06f9b0dd8b53127e3de674f3986f73b70 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 10:17:16 -0700 Subject: [PATCH 182/251] Fix failing build This isn't all tests passing but fixes the compile errors and adds some tests. Should (hopefully) mean the documentation actually compiles * pygorithm/geometry/rect2.py - def -> class (brainfart), spacing * tests/test_geometry.py - def -> class (brainfart), start implementing rect2 tests --- pygorithm/geometry/rect2.py | 14 +++- tests/test_geometry.py | 158 ++++++++++++++++++++++++++++++++++-- 2 files changed, 162 insertions(+), 10 deletions(-) diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index b8d6586..5d13bb4 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -14,7 +14,7 @@ from pygorithm.geometry import (vector2, line2, axisall, polygon2) -def Rect2(object): +class Rect2(object): """ A rectangle. Uses SAT collision against polygons and broad-phase collision against other rectangles. @@ -41,7 +41,7 @@ def Rect2(object): :vartype mincorner: :class:`pygorithm.geometry.vector2.Vector2` """ - def __init__(self, width, height, mincorner=None): + def __init__(self, width, height, mincorner = None): """ Create a new rectangle of width and height. @@ -53,6 +53,8 @@ def __init__(self, width, height, mincorner=None): :type height: :class:`numbers.Number` :param mincorner: the position of this rect :type mincorner: :class:`pygorithm.geometry.vector2.Vector2` or None + + :raises ValueError: if width or height are not strictly positive """ pass @@ -85,10 +87,12 @@ def width(self): :returns: width of this rect :rtype: :class:`numbers.Number` + + :raises ValueError: if trying to set width <= 0 """ pass - @property.setter + @width.setter def width(self, value): pass @@ -104,10 +108,12 @@ def height(self): :returns: height of this rect :rtype: :class:`numbers.Number` + + :raises ValueError: if trying to set height <= 0 """ pass - @property.setter + @height.setter def height(self, value): pass diff --git a/tests/test_geometry.py b/tests/test_geometry.py index b067444..7c1f690 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -862,15 +862,161 @@ def test_find_intersection_overlapping(self): self._find_intersection_fuzzer(poly1, poly2, False, True, (0.5, vector2.Vector2(0, -1))) self._find_intersection_fuzzer(poly1, poly3, False, True, (0.70710678118, vector2.Vector2(0.70710678118, -0.70710678118))) -def TestRect2(unittest.TestCase): - def test_constructor(self): - pass +class TestRect2(unittest.TestCase): + def test_constructor_defaults(self): + _rect = rect2.Rect2(1, 1) + + self.assertIsNotNone(_rect) + self.assertIsEqual(1, _rect.width) + self.assertIsEqual(1, _rect.height) + self.assertIsNotNone(_rect.mincorner) + self.assertIsEqual(0, _rect.mincorner.x) + self.assertIsEqual(0, _rect.mincorner.y) + + def test_constructor_specified(self): + _rect = rect2.Rect2(1, 3, vector2.Vector2(-1, -1)) - def test_polygon(self): - pass + self.assertEqual(1, _rect.width) + self.assertEqual(3, _rect.height) + self.assertIsNotNone(_rect.mincorner) + self.assertEqual(-1, _rect.mincorner.x) + self.assertEqual(-1, _rect.mincorner.y) + + def test_constructor_errors(self): + with self.assertRaises(ValueError): + _rect = rect2.Rect2(-1, 1) + + with self.assertRaises(ValueError): + _rect = rect2.Rect2(1, -1) + + with self.assertRaises(ValueError): + _rect = rect2.Rect2(0, 1) + + with self.assertRaises(ValueError): + _rect = rect2.Rect2(5, 0) + + with self.assertRaises(ValueError): + _rect = rect2.Rect2(0, 0) + + with self.assertRaises(ValueError): + _rect = rect2.Rect2(-3, -3) + + def test_width(self): + _rect = rect2.Rect2(1, 1) + + self.assertEqual(1, _rect.width) + + _rect.width = 3 + + self.assertEqual(3, _rect.width) + + with self.assertRaises(ValueError): + _rect.width = 0 + + _rect = rect2.Rect2(1, 1) + with self.assertRaises(ValueError): + _rect.width = -3 + def test_height(self): + _rect = rect2.Rect2(7, 11) + + self.assertEqual(11, _rect.height) + + _rect.height = 5 + + self.assertEqual(5, _rect.height) + + with self.assertRaises(ValueError): + _rect.height = 0 + + _rect = rect2.Rect2(1, 1) + with self.assertRaises(ValueError): + _rect.height = -15 + + _rect = rect2.Rect2(1, 1) + with self.assertRaises(ValueError): + _rect.height = 1e-09 + + def test_polygon_unshifted(self): + _rect = rect2.Rect2(1, 1) + + self.assertIsNotNone(_rect.polygon) + self.assertEqual(0, _rect.polygon.points[0].x) + self.assertEqual(0, _rect.polygon.points[0].y) + self.assertEqual(0, _rect.polygon.points[1].x) + self.assertEqual(1, _rect.polygon.points[1].y) + self.assertEqual(1, _rect.polygon.points[2].x) + self.assertEqual(1, _rect.polygon.points[2].y) + self.assertEqual(1, _rect.polygon.points[3].x) + self.assertEqual(0, _rect.polygon.points[3].y) + self.assertEqual(4, len(_rect.polygon.points)) + + def test_polygon_shifted(self): + _rect = rect2.Rect2(1, 1, vector2.Vector2(1, 1)) + + self.assertIsNotNone(_rect.polygon) + self.assertEqual(0, _rect.polygon.points[0].x) + self.assertEqual(0, _rect.polygon.points[0].y) + self.assertEqual(0, _rect.polygon.points[1].x) + self.assertEqual(1, _rect.polygon.points[1].y) + self.assertEqual(1, _rect.polygon.points[2].x) + self.assertEqual(1, _rect.polygon.points[2].y) + self.assertEqual(1, _rect.polygon.points[3].x) + self.assertEqual(0, _rect.polygon.points[3].y) + self.assertEqual(4, len(_rect.polygon.points)) + + def test_polygon_resized(self): + _rect = rect2.Rect2(1, 1) + + self.assertIsNotNone(_rect.polygon) + self.assertEqual(0, _rect.polygon.points[0].x) + self.assertEqual(0, _rect.polygon.points[0].y) + self.assertEqual(0, _rect.polygon.points[1].x) + self.assertEqual(1, _rect.polygon.points[1].y) + self.assertEqual(1, _rect.polygon.points[2].x) + self.assertEqual(1, _rect.polygon.points[2].y) + self.assertEqual(1, _rect.polygon.points[3].x) + self.assertEqual(0, _rect.polygon.points[3].y) + self.assertEqual(4, len(_rect.polygon.points)) + + _rect.width = 3 + + self.assertIsNotNone(_rect.polygon) + self.assertEqual(0, _rect.polygon.points[0].x) + self.assertEqual(0, _rect.polygon.points[0].y) + self.assertEqual(0, _rect.polygon.points[1].x) + self.assertEqual(1, _rect.polygon.points[1].y) + self.assertEqual(3, _rect.polygon.points[2].x) + self.assertEqual(1, _rect.polygon.points[2].y) + self.assertEqual(3, _rect.polygon.points[3].x) + self.assertEqual(0, _rect.polygon.points[3].y) + self.assertEqual(4, len(_rect.polygon.points)) + + _rect.height = 0.5 + + self.assertIsNotNone(_rect.polygon) + self.assertEqual(0, _rect.polygon.points[0].x) + self.assertEqual(0, _rect.polygon.points[0].y) + self.assertEqual(0, _rect.polygon.points[1].x) + self.assertEqual(0.5, _rect.polygon.points[1].y) + self.assertEqual(3, _rect.polygon.points[2].x) + self.assertEqual(0.5, _rect.polygon.points[2].y) + self.assertEqual(3, _rect.polygon.points[3].x) + self.assertEqual(0, _rect.polygon.points[3].y) + self.assertEqual(4, len(_rect.polygon.points)) + def test_area(self): - pass + _rect = rect2.Rect2(1, 1) + + self.assertEqual(1, _rect.area) + + _rect.width = 3 + + self.assertEqual(3, _rect.area) + + _rect.height = 7 + + self.assertEqual(21, _rect.area) def test_project_onto_axis(self): pass From a55c131f11cb1df1bacf9b0ee8fbce45fc4c3b29 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 10:23:52 -0700 Subject: [PATCH 183/251] Further compile errors Interestingly it compiles on 3.6 before but not 3.5 (readthedocs is on 3.5) * pygorithm/geometry/rect2.py - *args must be after all specified unnamed or named arguments and before **kwargs. --- pygorithm/geometry/rect2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index 5d13bb4..37cb2d7 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -168,7 +168,7 @@ def contains_point(rect, point): pass @staticmethod - def find_intersection(*args, find_mtv=True): + def find_intersection(find_mtv=True, *args): """ Determine the state of intersection between a rect and a polygon. @@ -215,10 +215,10 @@ def find_intersection(*args, find_mtv=True): # find mtv for big square against square touching, overlapping, mtv = rect2.Rect2.find_intersection(big_square, unit_square) - :param args: 2 arguments for rect-rect, 3 arguments for rect-polygon (see above) - :type args: list :param find_mtv: if mtv should be found where possible (default ``True``) :type find_mtv: bool + :param args: 2 arguments for rect-rect, 3 arguments for rect-polygon (see above) + :type args: list :returns: (touching, overlapping, (mtv distance, mtv axis)) :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) """ From 5ccf2a2c327b7bc8edcd90ce24655b571581b551 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 11:09:12 -0700 Subject: [PATCH 184/251] Add more rect2 tests Add tests for projecting onto axis and containing point tests. * tests/test_geometry.py - rect2.project_onto_axis and rect2.contains_point --- tests/test_geometry.py | 196 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 191 insertions(+), 5 deletions(-) diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 7c1f690..53e6a5c 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1018,17 +1018,203 @@ def test_area(self): self.assertEqual(21, _rect.area) - def test_project_onto_axis(self): - pass + def test_project_onto_axis_horizontal_unshifted(self): + _rect = rect2.Rect2(3, 7) + + proj = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(1, 0)) + + self.assertEqual(0, proj.min) + self.assertEqual(3, proj.max) + self.assertEqual(1, proj.axis.x) + self.assertEqual(0, proj.axis.y) + + proj2 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(-1, 0)) + + self.assertEqual(-3, proj2.min) + self.assertEqual(0, proj2.max) + self.assertEqual(-1, proj2.axis.x) + self.assertEqual(0, proj2.axis.y) + + def test_project_onto_axis_vertical_unshifted(self): + _rect = rect2.Rect2(5, 11) + + proj = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(0, 1)) + + self.assertEqual(0, proj.min) + self.assertEqual(11, proj.max) + self.assertEqual(0, proj.axis.x) + self.assertEuqal(1, proj.axis.y) + + proj2 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(0, -1)) + + self.assertEqual(-11, proj.min) + self.assertEqual(0, proj.max) + self.assertEqual(0, proj.axis.x) + self.assertEqual(-1, proj.axis.y) + + def test_project_onto_axis_diagonal_unshifted(self): + _rect = rect2.Rect2(1, 3) + _axis = vector2.Vector2(1, 1).normalize() + + proj = rect2.Rect2.project_onto_axis(_rect, _axis) + + self.assertAlmostEqual(0, proj.min) + self.assertAlmostEqual(2.82842712472, proj.max) + self.assertAlmostEqual(_axis.x, proj.axis.x) + self.assertAlmostEqual(_axis.y, proj.axis.y) + + _axis2 = vector2.Vector2(-1, -1).normalize() + proj2 = rect2.Rect2.project_onto_axis(_rect, _axis2) + + self.assertAlmostEqual(-2.82842712472, proj2.min) + self.assertAlmostEqual(0, proj2.max) + self.assertAlmostEqual(_axis2.x, proj.axis.x) + self.assertAlmostEqual(_axis2.y, proj.axis.y) + + + def test_project_onto_axis_horizontal_shifted(self): + _rect = rect2.Rect2(3, 2, vector2.Vector2(2, 2)) + + proj = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(1, 0)) + + self.assertEqual(2, proj.min) + self.assertEqual(5, proj.max) + self.assertEqual(1, proj.axis.x) + self.assertEqual(0, proj.axis.y) + + proj2 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(-1, 0)) + + self.assertEqual(-5, proj.min) + self.assertEqual(-2, proj.max) + self.assertEqual(-1, proj.axis.x) + self.assertEqual(0, proj.axis.y) + + _rect2 = rect2.Rect2(3, 2, vector2.Vector2(-1, 2)) + + proj3 = rect2.Rect2.project_onto_axis(_rect2, vector2.Vector2(-1, 0)) + + self.assertEqual(-2, proj3.min) + self.assertEqual(1, proj3.max) + self.assertEqual(-1, proj3.axis.x) + self.assertEqual(0, proj3.axis.y) + + def test_project_onto_axis_vertical_shifted(self): + _rect = rect2.Rect2(4, 7, vector2.Vector2(1, 3)) + + proj = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(0, 1)) + + self.assertEqual(3, proj.min) + self.assertEqual(10, proj.max) + self.assertEqual(0, proj.axis.x) + self.assertEqual(1, proj.axis.y) + + proj2 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(0, -1)) + + self.assertEqual(-10, proj.min) + self.assertEqual(-3, proj.max) + self.assertEqual(0, proj.axis.x) + self.assertEqual(-1, proj.axis.y) + + _rect2 = rect2.Rect2(4, 7, vector2.Vector2(1, -2)) + + proj3 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(0, -1)) + + self.assertEqual(-5, proj3.min) + self.assertEqual(2, proj3.max) + self.assertEqual(0, proj3.axis.x) + self.assertEqual(-1, proj3.axis.y) + + def test_project_onto_axis_diagonal_shifted(self): + _rect = rect2.Rect2(3, 5, vector2.Vector2(2, 2)) + _axis = vector2.Vector2(1, 1).normalize() + + proj = rect2.Rect2.project_onto_axis(_rect, _axis) + + self.assertAlmostEqual(2.82842712, proj.min) + self.assertAlmostEqual(8.48528137, proj.max) + self.assertAlmostEqual(_axis.x, proj.axis.x) + self.assertAlmostEqual(_axis.y, proj.axis.y) + + _axis2 = vector2.Vector2(-1, -1).normalize() + proj2 = rect2.Rect2.project_onto_axis(_rect, _axis2) + + self.assertAlmostEqual(-8.48528137, proj2.min) + self.assertAlmostEqual(-2.82842712, proj2.max) + self.assertAlmostEqual(_axis2.x, proj2.axis.x) + self.assertAlmostEqual(_axis2.y, proj2.axis.y) + + _rect2 = rect2.Rect2(3, 5, vector2.Vector2(-1, -2)) + proj3 = rect2.Rect2.project_onto_axis(_rect2, _axis2) + + self.assertAlmostEqual(-3.53553391, proj3.min) + self.assertAlmostEqual(2.12132034, proj3.max) + self.assertAlmostEqual(_axis2.x, proj3.axis.x) + self.assertAlmostEqual(_axis3.y, proj3.axis.y) def test_contains_point_false(self): - pass + _rect = rect2.Rect2(1, 2, vector2.Vector2(2, 2)) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(0, 0)) + self.assertFalse(edge) + self.assertFalse(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(4, 2)) + self.assertFalse(edge) + self.assertFalse(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(2, 5)) + self.assertFalse(edge) + self.assertFalse(inner) def test_contains_point_edge(self): - pass + _rect = rect2.Rect2(3, 2, vector2.Vector2(-2, -2)) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(-2, -2)) + self.assertTrue(edge, msg="mincorner") + self.assertFalse(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(1, -2)) + self.assertTrue(edge, msg="corner") + self.assertFalse(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(1, 0)) + self.assertTrue(edge, msg="maxcorner") + self.assertFalse(inner) + + edge, inner = rect.Rect2.contains_point(_rect, vector2.Vector2(-2, 0)) + self.assertTrue(edge, msg="corner") + self.assertFalse(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(-1, -2)) + self.assertTrue(edge, msg="y-min side") + self.assertFalse(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(0, 0)) + self.assertTrue(edge, msg="y-max side") + self.assertFalse(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(-2, -1)) + self.assertTrue(edge, msg="x-min side") + self.assertFalse(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(1, -0.5)) + self.assertTrue(edge, msg="x-max side, floating") + self.assertFalse(inner) def test_contains_point_contained(self): - pass + _rect = rect2.Rect2(4, 5, vector2.Vector2(3, 3)) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(5, 6)) + self.assertFalse(edge) + self.assertTrue(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(5.5, 6.5)) + self.assertFalse(edge) + self.assertTrue(inner) + + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(4.5, 7.5)) + self.assertFalse(edge) + self.assertTrue(inner) def test_find_intersection_rect_poly_false(self): pass From 331e35abe20cd6ab5659a1a833f566a28afcad14 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 13:43:57 -0700 Subject: [PATCH 185/251] Finish rect2 More tests for rect-rect intersection would be good. Found a bug with polygon from_regular. Added regression test and fixed it. * pygorithm/geometry/polygon2.py - Fix a bug (math error, see doc changes) * pygorithm/geometry/rect2.py - Implement all the things * tests/test_geometry.py - test all the things for rect2 --- pygorithm/geometry/polygon2.py | 16 +- pygorithm/geometry/rect2.py | 263 ++++++++++++++++++++++++++++++--- tests/test_geometry.py | 240 +++++++++++++++++++++++++----- 3 files changed, 454 insertions(+), 65 deletions(-) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 4afdfbe..92448c5 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -205,9 +205,9 @@ def from_regular(cls, sides, length, start_rads = None, start_degs = None, cente Finally, each vertex is found using ```` - If the center is not specified, the bounding box of the polygon is calculated while the vertices - are being found, and the center of the bounding box is set to the center of the circle. This - is never greater than (circumradius, circumradius). + If the center is not specified, the minimum of the bounding box of the + polygon is calculated while the vertices are being found, and the inverse + of that value is offset to the rest of the points in the polygon. :param sides: the number of sides in the polygon :type sides: :class:`numbers.Number` @@ -251,8 +251,6 @@ def from_regular(cls, sides, length, start_rads = None, start_degs = None, cente pts = [] _minx = 0 _miny = 0 - _maxx = 0 - _maxy = 0 for i in range(sides): x = center.x + math.cos(angle) * radius y = center.y + math.sin(angle) * radius @@ -262,13 +260,11 @@ def from_regular(cls, sides, length, start_rads = None, start_degs = None, cente if _recenter: _minx = min(_minx, x) _miny = min(_miny, y) - _maxx = max(_maxx, x) - _maxy = max(_maxy, y) if _recenter: - _newcenter = vector2.Vector2((_maxx - _minx) / 2, (_maxy - _miny) / 2) + _offset = vector2.Vector2(-_minx, -_miny) for i in range(sides): - pts[i] += _newcenter + pts[i] += _offset return cls(pts, suppress_errors = True) @@ -520,7 +516,7 @@ def _create_link(pts): :type pts: list of :class:`pygorithm.geometry.vector2.Vector2` """ - param0 = "+".join(('%28{}%2C+{}%29'.format(v.x, v.y)) for v in pts) + param0 = "+".join(('%28{}%2C+{}%29'.format(round(v.x, 3), round(v.y, 3))) for v in pts) xmin = pts[0].x xmax = xmin ymin = pts[1].y diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index 37cb2d7..3e56b79 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -56,13 +56,15 @@ def __init__(self, width, height, mincorner = None): :raises ValueError: if width or height are not strictly positive """ - pass + self.width = width + self.height = height + self.mincorner = mincorner if mincorner is not None else vector2.Vector2(0, 0) @property def polygon(self): """ Get the polygon representation of this rectangle, without - the corners. Lazily initialized and up-to-date with width + the offset. Lazily initialized and up-to-date with width and height. .. caution:: @@ -73,7 +75,13 @@ def polygon(self): :returns: polygon representation of this rectangle :rtype: :class:`pygorithm.geometry.polygon2.Polygon2` """ - pass + if self._polygon is None: + self._polygon = polygon2.Polygon2([ vector2.Vector2(0, 0), + vector2.Vector2(0, self._height), + vector2.Vector2(self._width, self._height), + vector2.Vector2(self._width, 0) ]) + + return self._polygon @property def width(self): @@ -88,13 +96,17 @@ def width(self): :returns: width of this rect :rtype: :class:`numbers.Number` - :raises ValueError: if trying to set width <= 0 + :raises ValueError: if trying to set width <= 1e-07 """ - pass + return self._width @width.setter def width(self, value): - pass + if value <= 1e-07: + raise ValueError('width cannot be <= 1e-07 but is {}'.format(value)) + + self._width = value + self._polygon = None @property def height(self): @@ -109,13 +121,17 @@ def height(self): :returns: height of this rect :rtype: :class:`numbers.Number` - :raises ValueError: if trying to set height <= 0 + :raises ValueError: if trying to set height <= 1e-07 """ - pass + return self._height @height.setter def height(self, value): - pass + if value <= 1e-07: + raise ValueError("height cannot be <= 1e07 but is {}".format(value)) + + self._height = value + self._polygon = None @property def area(self): @@ -125,7 +141,7 @@ def area(self): :returns: area of this rect :rtype: :class:`numbers.Number` """ - pass + return self._width * self._height @staticmethod def project_onto_axis(rect, axis): @@ -139,12 +155,25 @@ def project_onto_axis(rect, axis): :param rect: the rect to project :type rect: :class:`pygorithm.geometry.rect2.Rect2` - :param axis: the axis to project onto + :param axis: the axis to project onto (normalized) :type axis: :class:`pygorithm.geometry.vector2.Vector2` :returns: the projection of the rect along axis :rtype: :class:`pygorithm.geometry.axisall.AxisAlignedLine` """ - pass + + if axis.x == 0: + return axisall.AxisAlignedLine(axis, rect.mincorner.y * axis.y, (rect.mincorner.y + rect.height) * axis.y) + elif axis.y == 0: + return axisall.AxisAlignedLine(axis, rect.mincorner.x * axis.x, (rect.mincorner.x + rect.width) * axis.x) + + p1 = rect.mincorner.dot(axis) + p2 = vector2.Vector2(rect.mincorner.x + rect.width, rect.mincorner.y).dot(axis) + p3 = vector2.Vector2(rect.mincorner.x + rect.width, rect.mincorner.y + rect.height).dot(axis) + p4 = vector2.Vector2(rect.mincorner.x, rect.mincorner.y + rect.height).dot(axis) + + _min = min(p1, p2, p3, p4) + _max = max(p1, p2, p3, p4) + return axisall.AxisAlignedLine(axis, _min, _max) @staticmethod def contains_point(rect, point): @@ -165,10 +194,165 @@ def contains_point(rect, point): :returns: point on edge, point inside :rtype: bool, bool """ - pass + + edge_x = math.isclose(rect.mincorner.x, point.x, abs_tol=1e-07) or math.isclose(rect.mincorner.x + rect.width, point.x, abs_tol=1e-07) + edge_y = math.isclose(rect.mincorner.y, point.y, abs_tol=1e-07) or math.isclose(rect.mincorner.y + rect.height, point.y, abs_tol=1e-07) + if edge_x and edge_y: + return True, False + + contains = (edge_x or (point.x > rect.mincorner.x and point.x < rect.mincorner.x + rect.width)) and \ + (edge_y or (point.y > rect.mincorner.y and point.y < rect.mincorner.y + rect.height)) + if not contains: + return False, False + elif edge_x or edge_y: + return True, False + else: + return False, True - @staticmethod - def find_intersection(find_mtv=True, *args): + @classmethod + def _find_intersection_rects(cls, rect1, rect2, find_mtv = True): + """ + Find the intersection between two rectangles. + + Not intended for direct use. See + :py:method:~`pygorithm.geometry.rect2.Rect2.find_intersection` + + :param rect1: first rectangle + :type rect1: :class:`pygorithm.geometry.rect2.Rect2` + :param rect2: second rectangle + :type rect2: :class:`pygorithm.geometry.rect2.Rect2` + :param find_mtv: False to never find mtv (may allow small performance improvement) + :type find_mtv: bool + :returns: (touching, overlapping, (mtv distance, mtv axis)) + :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) + """ + + # caution to make sure isclose checks are before greater than/less than checks! + + # you could save which edge here if you needed that information + x_touching = math.isclose(rect1.mincorner.x + rect1.width, rect2.mincorner.x, abs_tol=1e-07) + x_touching = x_touching or math.isclose(rect1.mincorner.x, rect2.mincorner.x + rect2.width, abs_tol=1e-07) + y_touching = math.isclose(rect1.mincorner.y, rect2.mincorner.y + rect2.height, abs_tol=1e-07) + y_touching = y_touching or math.isclose(rect1.mincorner.y + rect1.height, rect2.mincorner.y, abs_tol=1e-07) + + if x_touching and y_touching: + return True, False, None # sharing 1 corner + + + # we don't need to calculate if the touching is True + x_overlap = False if x_touching else (rect1.mincorner.x < rect2.mincorner.x and rect1.mincorner.x + rect1.width > rect2.mincorner.x) or \ + (rect2.mincorner.x < rect1.mincorner.x and rect2.mincorner.x + rect2.width > rect1.mincorner.x) + y_overlap = False if y_touching else (rect1.mincorner.y < rect2.mincorner.y and rect1.mincorner.y + rect1.height > rect2.mincorner.y) or \ + (rect2.mincorner.y < rect1.mincorner.y and rect2.mincorner.y + rect2.height > rect1.mincorner.y) + if x_touching: + if y_overlap: + return True, False, None # sharing an x edge + else: + return False, False, None + elif y_touching: + if x_overlap: + return True, False, None # sharing a y edge + else: + return False, False, None + elif not x_overlap or not y_overlap: + return False, False, None + + # They overlap + if not find_mtv: + return False, True, None + + # four options: + # move rect1 min x to rect2 max x + # move rect1 max x to rect2 min x + # move rect1 min y to rect2 max y + # move rect1 max y to rect2 min y + # + # we will look at all 4 of these and choose + # the one that requires the least movement + opt1 = rect2.mincorner.x + rect2.width - rect1.mincorner.x + opt2 = rect2.mincorner.x - rect1.mincorner.x - rect1.width + opt3 = rect2.mincorner.y + rect2.height - rect1.mincorner.y + opt4 = rect2.mincorner.y - rect1.mincorner.y - rect1.height + + abs1 = abs(opt1) + abs2 = abs(opt2) + abs3 = abs(opt3) + abs4 = abs(opt4) + # the following could be simplified by making an array, at a + # minor performance hit + if abs1 < abs2: + if abs1 < abs3: + if abs1 < abs4: + return False, True, (opt1, vector2.Vector2(1, 0)) + else: + return False, True, (opt4, vector2.Vector2(0, 1)) + else: + if abs3 < abs4: + return False, True, (opt3, vector2.Vector2(0, 1)) + else: + return False, True, (opt4, vector2.Vector2(0, 1)) + else: + if abs2 < abs3: + if abs2 < abs4: + return False, True, (opt2, vector2.Vector2(1, 0)) + else: + return False, True, (opt4, vector2.Vector2(0, 1)) + else: + if abs3 < abs4: + return False, True, (opt3, vector2.Vector2(0, 1)) + else: + return False, True, (opt4, vector2.Vector2(0, 1)) + + + + + + + + @classmethod + def _find_intersection_rect_poly(cls, rect, poly, offset, find_mtv = True): + """ + Find the intersection between a rect and polygon. + + Not intended for direct use. See + :py:method:~`pygorithm.geometry.rect2.Rect2.find_intersection` + + :param rect: rectangle + :type rect: :class:`pygorithm.geometry.rect2.Rect2` + :param poly: polygon + :type poly: :class:`pygorithm.geometry.polygon2.Polygon2` + :param offset: offset for the polygon + :type offset: :class:`pygorithm.geometry.vector2.Vector2` + :param find_mtv: False to never find mtv (may allow small performance improvement) + :type find_mtv: bool + :returns: (touching, overlapping, (mtv distance, mtv axis)) + :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) + """ + return polygon2.Polygon2.find_intersection(rect.polygon, poly, rect.mincorner, offset, find_mtv) + + @classmethod + def _find_intersection_poly_rect(cls, poly, offset, rect, find_mtv = True): + """ + Find the intersection between a polygon and rect. + + Not intended for direct use. See + :py:method:~`pygorithm.geometry.rect2.Rect2.find_intersection` + + :param poly: polygon + :type poly: :class:`pygorithm.geometry.polygon2.Polygon2` + :param offset: offset for the polygon + :type offset: :class:`pygorithm.geometry.vector2.Vector2` + :param rect: rectangle + :type rect: :class:`pygorithm.geometry.rect2.Rect2` + :param find_mtv: False to never find mtv (may allow small performance improvement) + :type find_mtv: bool + :returns: (touching, overlapping, (mtv distance, mtv axis)) + :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) + """ + return polygon2.Polygon2.find_intersection(poly, rect.polygon, offset, rect.mincorner, find_mtv) + + @classmethod + def find_intersection(cls, *args, **kwargs): """ Determine the state of intersection between a rect and a polygon. @@ -182,10 +366,22 @@ def find_intersection(find_mtv=True, *args): If it is the first argument, the mtv is against the rectangle. If it is the last argument, the mtv is against the polygon. - For Rect-Rect intersection: - Must be passed in 2 ar + Must be passed in 2 arguments (both rects). + + + .. note:: + + The first argument is checked with isinstance(arg, Rect2). If this is + False, the first argument is assumed to be a Polygon2. If you want to + use a compatible rectangle class for which this check would fail, you + can call + :py:method:~`pygorithm.geometry.rect2.Rect2._find_intersection_rect_poly` + directly or pass the polygon first and invert the resulting mtv (if + one is found). If two unnamed arguments are provided, they are assumed + to be both rects without further checks. + Examples: .. code-block:: python @@ -222,7 +418,19 @@ def find_intersection(find_mtv=True, *args): :returns: (touching, overlapping, (mtv distance, mtv axis)) :rtype: (bool, bool, (:class:`numbers.Number`, :class:`pygorithm.geometry.vector2.Vector2`) or None) """ - pass + find_mtv = kwargs.get("find_mtv", True) + + if len(args) == 2: + return cls._find_intersection_rects(args[0], args[1], find_mtv) + else: + assert len(args) == 3, "Incorrect number of unnamed arguments to Rect2.find_intersection (got {} expected 2 or 3)".format(len(args)) + + if isinstance(args[0], Rect2): + return cls._find_intersection_rect_poly(args[0], args[1], args[2], find_mtv) + else: + return cls._find_intersection_poly_rect(args[0], args[1], args[2], find_mtv) + + def __repr__(self): """ @@ -242,7 +450,7 @@ def __repr__(self): :returns: unambiguous representation of this rectangle :rtype: string """ - pass + return "rect2(width={}, height={}, mincorner={})".format(self._width, self._height, repr(self.mincorner)) def __str__(self): """ @@ -255,11 +463,24 @@ def __str__(self): from pygorithm.geometry import (vector2, rect2) unit_square = rect2.Rect2(1, 1, vector2.Vector2(3, 4)) - ugly_Rect = rect2.Rect2(0.7071234, 0.7079876, vector2.Vector2(0.56789123, 0.876543)) + ugly_rect = rect2.Rect2(0.7071234, 0.7079876, vector2.Vector2(0.56789123, 0.876543)) # prints rect(1x1 at <3, 4>) print(str(unit_square)) # prints rect(0.707x0.708 at <0.568, 0.877>) + print(str(ugly_rect)) + + :returns: human-readable representation of this rectangle + :rtype: string """ - pass \ No newline at end of file + + + pretty_width = round(self._width * 1000) / 1000 + if pretty_width == math.floor(pretty_width): + pretty_width = math.floor(pretty_width) + + pretty_height = round(self._height * 1000) / 1000 + if pretty_height == math.floor(pretty_height): + pretty_height = math.floor(pretty_height) + return "rect({}x{} at {})".format(pretty_width, pretty_height, str(self.mincorner)) \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 53e6a5c..ae200c3 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1,6 +1,7 @@ import unittest import math import random +import sys from pygorithm.geometry import ( rect_broad_phase, @@ -668,6 +669,25 @@ def test_from_regular(self): for i in range(4): self.assertAlmostEqual(square.points[i].x, square2.points[i].x) self.assertAlmostEqual(square.points[i].y, square2.points[i].y) + + def test_from_regular_center(self): + for i in range(3, 13): + _poly = polygon2.Polygon2.from_regular(i, 1) + + foundx0 = False + foundy0 = False + for p in _poly.points: + if math.isclose(p.x, 0, abs_tol=1e-07): + foundx0 = True + if foundy0: + break + if math.isclose(p.y, 0, abs_tol=1e-07): + foundy0 = True + if foundx0: + break + helpmsg = "\ni={}\nfoundx0={}, foundy0={}, center={}\nrepr={}\n\nstr={}".format(i, foundx0, foundy0, _poly.center, repr(_poly), str(_poly)) + self.assertTrue(foundx0, msg=helpmsg) + self.assertTrue(foundy0, msg=helpmsg) def test_from_rotated(self): @@ -867,11 +887,11 @@ def test_constructor_defaults(self): _rect = rect2.Rect2(1, 1) self.assertIsNotNone(_rect) - self.assertIsEqual(1, _rect.width) - self.assertIsEqual(1, _rect.height) + self.assertEqual(1, _rect.width) + self.assertEqual(1, _rect.height) self.assertIsNotNone(_rect.mincorner) - self.assertIsEqual(0, _rect.mincorner.x) - self.assertIsEqual(0, _rect.mincorner.y) + self.assertEqual(0, _rect.mincorner.x) + self.assertEqual(0, _rect.mincorner.y) def test_constructor_specified(self): _rect = rect2.Rect2(1, 3, vector2.Vector2(-1, -1)) @@ -1043,14 +1063,14 @@ def test_project_onto_axis_vertical_unshifted(self): self.assertEqual(0, proj.min) self.assertEqual(11, proj.max) self.assertEqual(0, proj.axis.x) - self.assertEuqal(1, proj.axis.y) + self.assertEqual(1, proj.axis.y) proj2 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(0, -1)) - self.assertEqual(-11, proj.min) - self.assertEqual(0, proj.max) - self.assertEqual(0, proj.axis.x) - self.assertEqual(-1, proj.axis.y) + self.assertEqual(-11, proj2.min) + self.assertEqual(0, proj2.max) + self.assertEqual(0, proj2.axis.x) + self.assertEqual(-1, proj2.axis.y) def test_project_onto_axis_diagonal_unshifted(self): _rect = rect2.Rect2(1, 3) @@ -1068,8 +1088,8 @@ def test_project_onto_axis_diagonal_unshifted(self): self.assertAlmostEqual(-2.82842712472, proj2.min) self.assertAlmostEqual(0, proj2.max) - self.assertAlmostEqual(_axis2.x, proj.axis.x) - self.assertAlmostEqual(_axis2.y, proj.axis.y) + self.assertAlmostEqual(_axis2.x, proj2.axis.x) + self.assertAlmostEqual(_axis2.y, proj2.axis.y) def test_project_onto_axis_horizontal_shifted(self): @@ -1084,10 +1104,10 @@ def test_project_onto_axis_horizontal_shifted(self): proj2 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(-1, 0)) - self.assertEqual(-5, proj.min) - self.assertEqual(-2, proj.max) - self.assertEqual(-1, proj.axis.x) - self.assertEqual(0, proj.axis.y) + self.assertEqual(-5, proj2.min) + self.assertEqual(-2, proj2.max) + self.assertEqual(-1, proj2.axis.x) + self.assertEqual(0, proj2.axis.y) _rect2 = rect2.Rect2(3, 2, vector2.Vector2(-1, 2)) @@ -1110,14 +1130,14 @@ def test_project_onto_axis_vertical_shifted(self): proj2 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(0, -1)) - self.assertEqual(-10, proj.min) - self.assertEqual(-3, proj.max) - self.assertEqual(0, proj.axis.x) - self.assertEqual(-1, proj.axis.y) + self.assertEqual(-10, proj2.min) + self.assertEqual(-3, proj2.max) + self.assertEqual(0, proj2.axis.x) + self.assertEqual(-1, proj2.axis.y) _rect2 = rect2.Rect2(4, 7, vector2.Vector2(1, -2)) - proj3 = rect2.Rect2.project_onto_axis(_rect, vector2.Vector2(0, -1)) + proj3 = rect2.Rect2.project_onto_axis(_rect2, vector2.Vector2(0, -1)) self.assertEqual(-5, proj3.min) self.assertEqual(2, proj3.max) @@ -1149,7 +1169,7 @@ def test_project_onto_axis_diagonal_shifted(self): self.assertAlmostEqual(-3.53553391, proj3.min) self.assertAlmostEqual(2.12132034, proj3.max) self.assertAlmostEqual(_axis2.x, proj3.axis.x) - self.assertAlmostEqual(_axis3.y, proj3.axis.y) + self.assertAlmostEqual(_axis2.y, proj3.axis.y) def test_contains_point_false(self): _rect = rect2.Rect2(1, 2, vector2.Vector2(2, 2)) @@ -1181,7 +1201,7 @@ def test_contains_point_edge(self): self.assertTrue(edge, msg="maxcorner") self.assertFalse(inner) - edge, inner = rect.Rect2.contains_point(_rect, vector2.Vector2(-2, 0)) + edge, inner = rect2.Rect2.contains_point(_rect, vector2.Vector2(-2, 0)) self.assertTrue(edge, msg="corner") self.assertFalse(inner) @@ -1216,41 +1236,193 @@ def test_contains_point_contained(self): self.assertFalse(edge) self.assertTrue(inner) + def _create_help_msg(*args): + # this function produced links for rects or polygons using _create_link + self = args[0] + allpts = [] + result = "" + i = 1 + while i < len(args): + a = args[i] + result += "\n\n" + is_rect = type(a) == rect2.Rect2 + + if is_rect: + result += "rect: {}\n".format(str(a)) + pts = list(p + a.mincorner for p in a.polygon.points) + allpts += pts + result += polygon2.Polygon2._create_link(pts) + i += 1 + else: + offset = args[i + 1] + result += "polygon: {} at {}\n".format(str(a), str(offset)) + pts = list(p + offset for p in a.points) + allpts += pts + result += polygon2.Polygon2._create_link(pts) + i += 2 + result += "\n\ntogether: {}".format(polygon2.Polygon2._create_link(allpts)) + return result + def test_find_intersection_rect_poly_false(self): - pass + _rect = rect2.Rect2(3, 2, vector2.Vector2(2, 1)) + _poly = polygon2.Polygon2.from_regular(5, 1) + _offset = vector2.Vector2(0, 0.5) + visualize = self._create_help_msg(_rect, _poly, _offset) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect, _poly, _offset) + + self.assertFalse(touching, msg=visualize) + self.assertFalse(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) def test_find_intersection_rect_poly_edge(self): - pass + _rect = rect2.Rect2(2, 1, vector2.Vector2(0, 2.118033988749895)) + _poly = polygon2.Polygon2.from_regular(5, 1) + _offset = vector2.Vector2(0, 0.5) + visualize = self._create_help_msg(_rect, _poly, _offset) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect, _poly, _offset) + + self.assertTrue(touching, msg=visualize) + self.assertFalse(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) def test_find_intersection_rect_poly_mtv(self): - pass + _rect = rect2.Rect2(1, 3, vector2.Vector2(0.5, -0.5)) + _poly = polygon2.Polygon2.from_regular(5, 1) + _offset = vector2.Vector2(1, 0) + visualize = self._create_help_msg(_rect, _poly, _offset) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect, _poly, _offset) + + self.assertFalse(touching, msg=visualize) + self.assertTrue(overlapping, msg=visualize) + self.assertIsNotNone(mtv, msg=visualize) + self.assertAlmostEqual(-0.5, mtv[0] * mtv[1].x) + self.assertAlmostEqual(0, mtv[0] * mtv[1].y) def test_find_intersection_rect_poly_coll_findmtv_false(self): - pass + _rect = rect2.Rect2(1, 3, vector2.Vector2(0.5, -0.5)) + _poly = polygon2.Polygon2.from_regular(5, 1) + _offset = vector2.Vector2(1, 0) + visualize = self._create_help_msg(_rect, _poly, _offset) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect, _poly, _offset, find_mtv=False) + + self.assertFalse(touching, msg=visualize) + self.assertTrue(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) def test_find_intersection_poly_rect_false(self): - pass + _rect = rect2.Rect2(3, 2, vector2.Vector2(2, 1)) + _poly = polygon2.Polygon2.from_regular(5, 1) + _offset = vector2.Vector2(0, 0.5) + visualize = self._create_help_msg(_poly, _offset, _rect) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_poly, _offset, _rect) + + self.assertFalse(touching, msg=visualize) + self.assertFalse(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) def test_find_intersection_poly_rect_edge(self): - pass + _rect = rect2.Rect2(2, 1, vector2.Vector2(0, 2.118033988749895)) + _poly = polygon2.Polygon2.from_regular(5, 1) + _offset = vector2.Vector2(0, 0.5) + visualize = self._create_help_msg(_poly, _offset, _rect) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_poly, _offset, _rect) + + self.assertTrue(touching, msg=visualize) + self.assertFalse(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) def test_find_intersection_poly_rect_mtv(self): - pass + _rect = rect2.Rect2(1, 3, vector2.Vector2(0.5, -0.5)) + _poly = polygon2.Polygon2.from_regular(5, 1) + _offset = vector2.Vector2(1, 0) + visualize = self._create_help_msg(_poly, _offset, _rect) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_poly, _offset, _rect) + + self.assertFalse(touching, msg=visualize) + self.assertTrue(overlapping, msg=visualize) + self.assertIsNotNone(mtv, msg=visualize) + self.assertAlmostEqual(0.5, mtv[0] * mtv[1].x) + self.assertAlmostEqual(0, mtv[0] * mtv[1].y) def test_find_intersection_poly_rect_coll_findmtv_false(self): - pass + _rect = rect2.Rect2(1, 3, vector2.Vector2(0.5, -0.5)) + _poly = polygon2.Polygon2.from_regular(5, 1) + _offset = vector2.Vector2(1, 0) + visualize = self._create_help_msg(_poly, _offset, _rect) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_poly, _offset, _rect, find_mtv=False) + + self.assertFalse(touching, msg=visualize) + self.assertTrue(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) def test_find_intersection_rect_rect_false(self): - pass + _rect1 = rect2.Rect2(2, 3, vector2.Vector2(0.5, 0.5)) + _rect2 = rect2.Rect2(1, 1, vector2.Vector2(-1, 0)) + visualize = self._create_help_msg(_rect1, _rect2) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect1, _rect2) + + self.assertFalse(touching, msg=visualize) + self.assertFalse(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) def test_find_intersection_rect_rect_edge(self): - pass + _rect1 = rect2.Rect2(3, 4, vector2.Vector2(1, 0.70723)) + _rect2 = rect2.Rect2(1, 1, vector2.Vector2(2, 4.70723)) + visualize = self._create_help_msg(_rect1, _rect2) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect1, _rect2) + + self.assertTrue(touching, msg=visualize) + self.assertFalse(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) def test_find_intersection_rect_rect_mtv(self): - pass + _rect1 = rect2.Rect2(3, 5, vector2.Vector2(-2, -6)) + _rect2 = rect2.Rect2(2, 1, vector2.Vector2(0, -3)) + visualize = self._create_help_msg(_rect1, _rect2) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect1, _rect2) + + self.assertFalse(touching, msg=visualize) + self.assertTrue(overlapping, msg=visualize) + self.assertIsNotNone(mtv, msg=visualize) + self.assertEqual(-1, mtv[0] * mtv[1].x, msg="touching={}, overlapping={}, mtv={}\n\n{}".format(touching, overlapping, mtv, visualize)) + self.assertEqual(0, mtv[0] * mtv[1].y, msg=visualize) + + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect2, _rect1) + + self.assertFalse(touching, msg=visualize) + self.assertTrue(overlapping, msg=visualize) + self.assertIsNotNone(mtv, msg=visualize) + self.assertEqual(1, mtv[0] * mtv[1].x) + self.assertEqual(0, mtv[0] * mtv[1].y) + def test_find_intersection_rect_rect_coll_findmtv_false(self): - pass + _rect1 = rect2.Rect2(3, 5, vector2.Vector2(-2, -6)) + _rect2 = rect2.Rect2(2, 1, vector2.Vector2(0, -3)) + visualize = self._create_help_msg(_rect1, _rect2) + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect1, _rect2, find_mtv=False) + + self.assertFalse(touching, msg=visualize) + self.assertTrue(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) + + touching, overlapping, mtv = rect2.Rect2.find_intersection(_rect2, _rect1, find_mtv=False) + + self.assertFalse(touching, msg=visualize) + self.assertTrue(overlapping, msg=visualize) + self.assertIsNone(mtv, msg=visualize) + def test_repr(self): + unit_square = rect2.Rect2(1, 1, vector2.Vector2(3, 4)) + + self.assertEqual("rect2(width=1, height=1, mincorner=vector2(x=3, y=4))", repr(unit_square)) + + def test_str(self): + unit_square = rect2.Rect2(1, 1, vector2.Vector2(3, 4)) + ugly_rect = rect2.Rect2(0.7071234, 0.7079876, vector2.Vector2(0.56789123, 0.876543)) + + self.assertEqual("rect(1x1 at <3, 4>)", str(unit_square)) + self.assertEqual("rect(0.707x0.708 at <0.568, 0.877>)", str(ugly_rect)) + if __name__ == '__main__': unittest.main() \ No newline at end of file From 8ceb910c1dd091a2b44061f0dd08f9aeacda8741 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 13:57:18 -0700 Subject: [PATCH 186/251] Attempt to cleanup sphinx warnings * pygorithm/geometry/polygon2.py - fix incorrect indentation * pygorithm/geometry/rect2.py - :py:class doesn't work the same as :py:attr --- pygorithm/geometry/polygon2.py | 2 +- pygorithm/geometry/rect2.py | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index 92448c5..c8f0a85 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -19,7 +19,7 @@ class Polygon2(object): index to the larger index will walk clockwise around the polygon. .. note:: - + Polygons should be used as if they were completely immutable to ensure correctness. All attributes of Polygon2 can be reconstructed from the points array, and thus cannot be changed on their own and diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index 3e56b79..de9c68b 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -28,12 +28,12 @@ class Rect2(object): many operations incurring expensive recalculations. .. caution:: - - Collision detection against a rectangle with cause + + Collision detection against a polygon with cause initialization of the polygon representation of a rectangle. This has the noticeable performance characteristics that are seen whenever a polygon - is constructed (see :py:class:~`pygorithm.geometry.polygon2.Polygon2`). + is constructed (see :py:class:`.Polygon2`). This operation recurrs only if width and height were modified. @@ -45,7 +45,7 @@ def __init__(self, width, height, mincorner = None): """ Create a new rectangle of width and height. - If mincorner is None, the origin is assumed. + If ``mincorner is None``, the origin is assumed. :param width: width of this rect :type width: :class:`numbers.Number` @@ -69,8 +69,8 @@ def polygon(self): .. caution:: - This does not include the mincorner (which should be passed as - offset) + This does not include the :py:attr:~`pygorithm.geometry.rect2.Rect2.mincorner` + (which should be passed as offset for polygon operations) :returns: polygon representation of this rectangle :rtype: :class:`pygorithm.geometry.polygon2.Polygon2` @@ -96,7 +96,7 @@ def width(self): :returns: width of this rect :rtype: :class:`numbers.Number` - :raises ValueError: if trying to set width <= 1e-07 + :raises ValueError: if trying to set ``width <= 1e-07`` """ return self._width @@ -121,7 +121,7 @@ def height(self): :returns: height of this rect :rtype: :class:`numbers.Number` - :raises ValueError: if trying to set height <= 1e-07 + :raises ValueError: if trying to set ``height <= 1e-07`` """ return self._height @@ -185,7 +185,7 @@ def contains_point(rect, point): .. tip:: - This will never return True, True + This will never return ``True, True`` :param rect: the rect :type rect: :class:`pygorithm.geometry.rect2.Rect2` @@ -359,9 +359,9 @@ def find_intersection(cls, *args, **kwargs): For Rect-Polygon intersection: - Must be passed in 3 arguments - a :py:class:~`pygorithm.geometry.rect2.Rect2`, - a :py:class:~`pygorithm.geometry.polygon2.Polygon2`, and a - :py:class:~`pygorithm.geometry.vector2.Vector2`. The vector must come immediately + Must be passed in 3 arguments - a :py:class:`.Rect2`, + a :py:class:`.Polygon2`, and a + :py:class:`.Vector2`. The vector must come immediately after the polygon, but the rect can be either the first or last unnamed argument. If it is the first argument, the mtv is against the rectangle. If it is the last argument, the mtv is against the polygon. From 205ffbfd19783ec151ab1479dafb6b3145a5d504 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 14:01:25 -0700 Subject: [PATCH 187/251] Actually fix sphinx errors I was putting the tilde (~) in the wrong spot * pygorithm/geometry/rect2.py - move ~'s around --- pygorithm/geometry/rect2.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index de9c68b..b1a28e2 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -69,7 +69,7 @@ def polygon(self): .. caution:: - This does not include the :py:attr:~`pygorithm.geometry.rect2.Rect2.mincorner` + This does not include the :py:attr:`~pygorithm.geometry.rect2.Rect2.mincorner` (which should be passed as offset for polygon operations) :returns: polygon representation of this rectangle @@ -215,7 +215,7 @@ def _find_intersection_rects(cls, rect1, rect2, find_mtv = True): Find the intersection between two rectangles. Not intended for direct use. See - :py:method:~`pygorithm.geometry.rect2.Rect2.find_intersection` + :py:method:`~pygorithm.geometry.rect2.Rect2.find_intersection` :param rect1: first rectangle :type rect1: :class:`pygorithm.geometry.rect2.Rect2` @@ -315,7 +315,7 @@ def _find_intersection_rect_poly(cls, rect, poly, offset, find_mtv = True): Find the intersection between a rect and polygon. Not intended for direct use. See - :py:method:~`pygorithm.geometry.rect2.Rect2.find_intersection` + :py:method:`~pygorithm.geometry.rect2.Rect2.find_intersection` :param rect: rectangle :type rect: :class:`pygorithm.geometry.rect2.Rect2` @@ -377,7 +377,7 @@ def find_intersection(cls, *args, **kwargs): False, the first argument is assumed to be a Polygon2. If you want to use a compatible rectangle class for which this check would fail, you can call - :py:method:~`pygorithm.geometry.rect2.Rect2._find_intersection_rect_poly` + :py:method:`~pygorithm.geometry.rect2.Rect2._find_intersection_rect_poly` directly or pass the polygon first and invert the resulting mtv (if one is found). If two unnamed arguments are provided, they are assumed to be both rects without further checks. From 4bf05abfdb96e3cc43536c7b173813d8e03d8617 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 14:04:25 -0700 Subject: [PATCH 188/251] Document private members Rect2 This makes the links work nicer and the functions are documented anyway. * docs/Geometry.rst - document private Rect2 members * pygorithm/geometry/rect2.py - Minor documentation tweaks --- docs/Geometry.rst | 1 + pygorithm/geometry/rect2.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/Geometry.rst b/docs/Geometry.rst index a0c9bf0..46690af 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -90,6 +90,7 @@ Axis-Aligned Rectangle .. autoclass:: pygorithm.geometry.rect2.Rect2 :members: :special-members: + :private-members: diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index b1a28e2..2919da9 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -373,7 +373,7 @@ def find_intersection(cls, *args, **kwargs): .. note:: - The first argument is checked with isinstance(arg, Rect2). If this is + The first argument is checked with ``isinstance(arg, Rect2)``. If this is False, the first argument is assumed to be a Polygon2. If you want to use a compatible rectangle class for which this check would fail, you can call From 6f75406a0a25d67cbdc05d54fc9ae53a5a5c6dea Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 14:07:21 -0700 Subject: [PATCH 189/251] Attempt to simplify links Maybe this will be more foolproof * pygorithm/geometry/rect2.py - use dot notation for links instead of full path --- pygorithm/geometry/rect2.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index 2919da9..99bca68 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -69,7 +69,7 @@ def polygon(self): .. caution:: - This does not include the :py:attr:`~pygorithm.geometry.rect2.Rect2.mincorner` + This does not include the :py:attr:`.mincorner` (which should be passed as offset for polygon operations) :returns: polygon representation of this rectangle @@ -215,7 +215,7 @@ def _find_intersection_rects(cls, rect1, rect2, find_mtv = True): Find the intersection between two rectangles. Not intended for direct use. See - :py:method:`~pygorithm.geometry.rect2.Rect2.find_intersection` + :py:method:`.find_intersection` :param rect1: first rectangle :type rect1: :class:`pygorithm.geometry.rect2.Rect2` @@ -315,7 +315,7 @@ def _find_intersection_rect_poly(cls, rect, poly, offset, find_mtv = True): Find the intersection between a rect and polygon. Not intended for direct use. See - :py:method:`~pygorithm.geometry.rect2.Rect2.find_intersection` + :py:method:`.find_intersection` :param rect: rectangle :type rect: :class:`pygorithm.geometry.rect2.Rect2` @@ -377,7 +377,7 @@ def find_intersection(cls, *args, **kwargs): False, the first argument is assumed to be a Polygon2. If you want to use a compatible rectangle class for which this check would fail, you can call - :py:method:`~pygorithm.geometry.rect2.Rect2._find_intersection_rect_poly` + :py:method:`._find_intersection_rect_poly` directly or pass the polygon first and invert the resulting mtv (if one is found). If two unnamed arguments are provided, they are assumed to be both rects without further checks. From 1b799448fd37aa4b33497f687d96f692e834c8d3 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 14:13:26 -0700 Subject: [PATCH 190/251] Ok this will fix sphinx links Surely this was the issue * pygorithm/geometry/rect2.py - change :py:method to :py:meth for method links --- pygorithm/geometry/rect2.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index 99bca68..86fe240 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -215,7 +215,7 @@ def _find_intersection_rects(cls, rect1, rect2, find_mtv = True): Find the intersection between two rectangles. Not intended for direct use. See - :py:method:`.find_intersection` + :py:meth:`.find_intersection` :param rect1: first rectangle :type rect1: :class:`pygorithm.geometry.rect2.Rect2` @@ -315,7 +315,7 @@ def _find_intersection_rect_poly(cls, rect, poly, offset, find_mtv = True): Find the intersection between a rect and polygon. Not intended for direct use. See - :py:method:`.find_intersection` + :py:meth:`.find_intersection` :param rect: rectangle :type rect: :class:`pygorithm.geometry.rect2.Rect2` @@ -336,7 +336,7 @@ def _find_intersection_poly_rect(cls, poly, offset, rect, find_mtv = True): Find the intersection between a polygon and rect. Not intended for direct use. See - :py:method:~`pygorithm.geometry.rect2.Rect2.find_intersection` + :py:meth:~`pygorithm.geometry.rect2.Rect2.find_intersection` :param poly: polygon :type poly: :class:`pygorithm.geometry.polygon2.Polygon2` @@ -377,7 +377,7 @@ def find_intersection(cls, *args, **kwargs): False, the first argument is assumed to be a Polygon2. If you want to use a compatible rectangle class for which this check would fail, you can call - :py:method:`._find_intersection_rect_poly` + :py:meth:`._find_intersection_rect_poly` directly or pass the polygon first and invert the resulting mtv (if one is found). If two unnamed arguments are provided, they are assumed to be both rects without further checks. From 990bed09204e758e1aba433cb2a87c11efa8e1ba Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 31 Aug 2017 14:19:46 -0700 Subject: [PATCH 191/251] Fix last broken link I don't know how this one was missed in my find/replace but there it is. * pygorithm/geometry/rect2.py - fix incorrect ~ --- pygorithm/geometry/rect2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/geometry/rect2.py b/pygorithm/geometry/rect2.py index 86fe240..6d1d5dc 100644 --- a/pygorithm/geometry/rect2.py +++ b/pygorithm/geometry/rect2.py @@ -336,7 +336,7 @@ def _find_intersection_poly_rect(cls, poly, offset, rect, find_mtv = True): Find the intersection between a polygon and rect. Not intended for direct use. See - :py:meth:~`pygorithm.geometry.rect2.Rect2.find_intersection` + :py:meth:`.find_intersection` :param poly: polygon :type poly: :class:`pygorithm.geometry.polygon2.Polygon2` From 45c53b38010e540a3126bd108697beba23217211 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 1 Sep 2017 07:01:05 +0530 Subject: [PATCH 192/251] Docs for binary --- docs/Binary.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Binary.rst b/docs/Binary.rst index b478124..f248798 100644 --- a/docs/Binary.rst +++ b/docs/Binary.rst @@ -1,6 +1,6 @@ -================= -Binary Algorithms -================= +================== +Binary Conversions +================== A place for implementation of base conversions From b09a4bfbc41df215216e51c9571edb6d0b1bae83 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 1 Sep 2017 07:01:22 +0530 Subject: [PATCH 193/251] Bug fixes --- pygorithm/binary/binary_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/binary/binary_utils.py b/pygorithm/binary/binary_utils.py index 228e9e5..bd908c2 100644 --- a/pygorithm/binary/binary_utils.py +++ b/pygorithm/binary/binary_utils.py @@ -4,7 +4,7 @@ """ -def pad(value, return_type): +def pad(value, return_type=str): ''' Pad binary value with zeros :param value: string From 97eeed6f7403a7e782c90874d102843913c9b8d7 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 1 Sep 2017 07:03:15 +0530 Subject: [PATCH 194/251] Updated TODOs --- TODO.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index 50aa015..1d29595 100644 --- a/TODO.md +++ b/TODO.md @@ -13,14 +13,18 @@ - [x] Detect cycle in Graph - [x] Topological Sort - [ ] Prim's Algorithm -- [ ] Kruskal's Algorithm +- [x] Kruskal's Algorithm ### Dynamic Programming -- [ ] Fibonacci -- [ ] Longest Increasing Subsequence +- [x] Fibonacci +- [x] Longest Increasing Subsequence ### Heap - [x] Heap implementation - [x] Heap Sort + +## Backtracking + +- [ ] N-Queens From dccc245661f5e5ac298f3480f31df6e20ba71733 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 1 Sep 2017 10:16:36 +0530 Subject: [PATCH 195/251] Added implementation for matrix operations --- pygorithm/math/matrix_operations.py | 210 ++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 pygorithm/math/matrix_operations.py diff --git a/pygorithm/math/matrix_operations.py b/pygorithm/math/matrix_operations.py new file mode 100644 index 0000000..36dc76f --- /dev/null +++ b/pygorithm/math/matrix_operations.py @@ -0,0 +1,210 @@ +''' + Author: OMKAR PATHAK + Created at: 01st September 2017 + + Implementing various Matrix operations such as matrix addition, subtraction, multiplication. +''' + +class Matrix(object): + ''' + Matrix class for performing various transformations + + Matrix operations can be performed on two matrices with any number of dimensions + ''' + + def __init__(self, matrix_one = None, matrix_two=None): + ''' + :param matrix_one: matrix with nxn dimensions + :param matrix_two: matrix with nxn dimensions + + .. code-block:: python: + + matrix_one = [[1, 2], [1, 3], [1, 4]] (a 3x2 matrix) + ''' + self.matrix_one = matrix_one + self.matrix_two = matrix_two + + + def add(self): + ''' + function for adding the two matrices + + .. note:: + + Matrix addition requires both the matrices to be of same size. + That is both the matrices should be of nxn dimensional. + ''' + + # check if both the matrices are of same shape + if not (len(self.matrix_one) == len(self.matrix_two)) or not (len(self.matrix_one[0]) == len(self.matrix_two[0])): + raise Exception('Both Matrices should be of same dimensions') + + added_matrix = [[0 for i in range(len(self.matrix_one))] for j in range(len(self.matrix_two))] + + # iterate through rows + for row in range(len(self.matrix_one)): + # iterate through columns + for column in range(len(self.matrix_one[0])): + added_matrix[row][column] = self.matrix_one[row][column] + self.matrix_two[row][column] + + return added_matrix + + def subtract(self): + ''' + function for subtracting the two matrices + + .. note:: + + Matrix subtraction requires both the matrices to be of same size. + That is both the matrices should be of nxn dimensional. + ''' + + # check if both the matrices are of same shape + if not (len(self.matrix_one) == len(self.matrix_two)) or not (len(self.matrix_one[0]) == len(self.matrix_two[0])): + raise Exception('Both Matrices should be of same dimensions') + + subtracted_matrix = [[0 for i in range(len(self.matrix_one))] for j in range(len(self.matrix_two))] + + # iterate through rows + for row in range(len(self.matrix_one)): + # iterate through columns + for column in range(len(self.matrix_one[0])): + subtracted_matrix[row][column] = self.matrix_one[row][column] - self.matrix_two[row][column] + + return subtracted_matrix + + + def multiply(self): + ''' + function for multiplying the two matrices + + .. note:: + + Matrix multiplication can be carried out even on matrices with different dimensions. + ''' + + multiplied_matrix = [[0 for i in range(len(self.matrix_two[0]))] for j in range(len(self.matrix_one))] + + # iterate through rows + for row_one in range(len(self.matrix_one)): + # iterate through columns matrix_two + for column in range(len(self.matrix_two[0])): + # iterate through rows of matrix_two + for row_two in range(len(self.matrix_two)): + multiplied_matrix[row_one][column] += self.matrix_one[row_one][row_two] * self.matrix_two[row_two][column] + + return multiplied_matrix + + + def transpose(self): + ''' + The transpose of a matrix is a new matrix whose rows are the columns of the original. + (This makes the columns of the new matrix the rows of the original) + ''' + transpose_matrix = [[0 for i in range(len(self.matrix_one))] for j in range(len(self.matrix_one[0]))] + + # iterate through rows + for row in range(len(self.matrix_one)): + # iterate through columns + for column in range(len(self.matrix_one[0])): + transpose_matrix[column][row] = self.matrix_one[row][column] + + return transpose_matrix + + + def rotate(self): + ''' + Given a matrix, clockwise rotate elements in it. + + .. code-block:: python: + + **Examples:** + + Input + 1 2 3 + 4 5 6 + 7 8 9 + + Output: + 4 1 2 + 7 5 3 + 8 9 6 + + For detailed information visit: https://github.com/keon/algorithms/blob/master/matrix/matrix_rotation.txt + ''' + + top = 0 + bottom = len(self.matrix_one) - 1 + left = 0 + right = len(self.matrix_one[0]) - 1 + + while left < right and top < bottom: + # Store the first element of next row, this element will replace first element of + # current row + prev = self.matrix_one[top + 1][left] + + # Move elements of top row one step right + for i in range(left, right + 1): + curr = self.matrix_one[top][i] + self.matrix_one[top][i] = prev + prev = curr + + top += 1 + + # Move elements of rightmost column one step downwards + for i in range(top, bottom+1): + curr = self.matrix_one[i][right] + self.matrix_one[i][right] = prev + prev = curr + + right -= 1 + + # Move elements of bottom row one step left + for i in range(right, left-1, -1): + curr = self.matrix_one[bottom][i] + self.matrix_one[bottom][i] = prev + prev = curr + + bottom -= 1 + + # Move elements of leftmost column one step upwards + for i in range(bottom, top-1, -1): + curr = self.matrix_one[i][left] + self.matrix_one[i][left] = prev + prev = curr + + left += 1 + + return self.matrix_one + + + def count_unique_paths(self, m, n): + ''' + Count the number of unique paths from a[0][0] to a[m-1][n-1] + We are allowed to move either right or down from a cell in the matrix. + Approaches- + (i) Recursion - Recurse starting from a[m-1][n-1], upwards and leftwards, + add the path count of both recursions and return count. + (ii) Dynamic Programming- Start from a[0][0].Store the count in a count + matrix. Return count[m-1][n-1] + Time Complexity = O(mn), Space Complexity = O(mn) + + :param m: number of rows + :param n: number of columns + ''' + if m < 1 or n < 1: + return + + count = [[None for j in range(n)] for i in range(m)] + + # Taking care of the edge cases- matrix of size 1xn or mx1 + for i in range(n): + count[0][i] = 1 + for j in range(m): + count[j][0] = 1 + + for i in range(1, m): + for j in range(1, n): + count[i][j] = count[i-1][j] + count[i][j-1] + + return count[m-1][n-1] From c2c41cf9f4ad618e6fd72c4c97a42d7851a3a682 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 1 Sep 2017 10:16:54 +0530 Subject: [PATCH 196/251] Added tests for matrix operations --- tests/test_math.py | 81 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/tests/test_math.py b/tests/test_math.py index 7f36ff1..983e5e2 100644 --- a/tests/test_math.py +++ b/tests/test_math.py @@ -5,7 +5,8 @@ lcm_using_gcd, sieve_of_eratosthenes, factorial, - conversion) + conversion, + matrix_operations) class TestLCM(unittest.TestCase): def test_lcm(self): @@ -35,5 +36,83 @@ def test_dec_to_hex(self): def test_hex_to_dex(self): self.assertEqual(conversion.hex_to_decimal('1E'), 30) +class TestMatrixOperations(unittest.TestCase): + def test_matrix_addition(self): + X = [[12,7,3], + [4 ,5,6], + [7 ,8,9]] + + Y = [[5,8,1], + [6,7,3], + [4,5,9]] + + matrix = matrix_operations.Matrix(X, Y) + self.assertEqual(matrix.add(), [[17, 15, 4], [10, 12, 9], [11, 13, 18]]) + + + def test_matrix_subtraction(self): + X = [[12,7,3], + [4,5,6], + [7,8,9]] + + Y = [[5,8,1], + [6,7,3], + [4,5,9]] + + matrix = matrix_operations.Matrix(X, Y) + self.assertEqual(matrix.subtract(), [[7, -1, 2], [-2, -2, 3], [3, 3, 0]]) + + + def test_matrix_multiplication(self): + X = [[12,7,3], + [4,5,6], + [7,8,9]] + + Y = [[5,8,1,2], + [6,7,3,0], + [4,5,9,1]] + + matrix = matrix_operations.Matrix(X, Y) + self.assertEqual(matrix.multiply(), [[114, 160, 60, 27], [74, 97, 73, 14], [119, 157, 112, 23]]) + + + def test_matrix_transpose(self): + X = [[12,7], + [4 ,5], + [3 ,8]] + + matrix = matrix_operations.Matrix(X) + self.assertEqual(matrix.transpose(), [[12, 4, 3],[7, 5, 8]]) + + + def test_matrix_rotate(self): + X =[[1, 2, 3, 4 ], + [5, 6, 7, 8 ], + [9, 10, 11, 12 ], + [13, 14, 15, 16 ]] + + matrix = matrix_operations.Matrix(X) + self.assertEqual(matrix.rotate(), [[5, 1, 2, 3], [9, 10, 6, 4], [13, 11, 7, 8], [14, 15, 16, 12]]) + + + def test_matrix_unique_paths(self): + matrix = matrix_operations.Matrix() + self.assertEqual(matrix.count_unique_paths(3, 3), 6) + + def test_matrix_exceptions(self): + X = [[12,7,3], + [4,5,6], + [7,8,9]] + + Y = [[5,8], + [6,7], + [4,5]] + + matrix = matrix_operations.Matrix(X, Y) + + # test exception + self.assertRaises(Exception, matrix.add) + self.assertRaises(Exception, matrix.subtract) + if __name__ == '__main__': unittest.main() From 78e39b69ec230c4f91f10b782e25d7b894983233 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 1 Sep 2017 10:16:54 +0530 Subject: [PATCH 197/251] Added tests for matrix operations --- tests/test_math.py | 81 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/tests/test_math.py b/tests/test_math.py index 7f36ff1..983e5e2 100644 --- a/tests/test_math.py +++ b/tests/test_math.py @@ -5,7 +5,8 @@ lcm_using_gcd, sieve_of_eratosthenes, factorial, - conversion) + conversion, + matrix_operations) class TestLCM(unittest.TestCase): def test_lcm(self): @@ -35,5 +36,83 @@ def test_dec_to_hex(self): def test_hex_to_dex(self): self.assertEqual(conversion.hex_to_decimal('1E'), 30) +class TestMatrixOperations(unittest.TestCase): + def test_matrix_addition(self): + X = [[12,7,3], + [4 ,5,6], + [7 ,8,9]] + + Y = [[5,8,1], + [6,7,3], + [4,5,9]] + + matrix = matrix_operations.Matrix(X, Y) + self.assertEqual(matrix.add(), [[17, 15, 4], [10, 12, 9], [11, 13, 18]]) + + + def test_matrix_subtraction(self): + X = [[12,7,3], + [4,5,6], + [7,8,9]] + + Y = [[5,8,1], + [6,7,3], + [4,5,9]] + + matrix = matrix_operations.Matrix(X, Y) + self.assertEqual(matrix.subtract(), [[7, -1, 2], [-2, -2, 3], [3, 3, 0]]) + + + def test_matrix_multiplication(self): + X = [[12,7,3], + [4,5,6], + [7,8,9]] + + Y = [[5,8,1,2], + [6,7,3,0], + [4,5,9,1]] + + matrix = matrix_operations.Matrix(X, Y) + self.assertEqual(matrix.multiply(), [[114, 160, 60, 27], [74, 97, 73, 14], [119, 157, 112, 23]]) + + + def test_matrix_transpose(self): + X = [[12,7], + [4 ,5], + [3 ,8]] + + matrix = matrix_operations.Matrix(X) + self.assertEqual(matrix.transpose(), [[12, 4, 3],[7, 5, 8]]) + + + def test_matrix_rotate(self): + X =[[1, 2, 3, 4 ], + [5, 6, 7, 8 ], + [9, 10, 11, 12 ], + [13, 14, 15, 16 ]] + + matrix = matrix_operations.Matrix(X) + self.assertEqual(matrix.rotate(), [[5, 1, 2, 3], [9, 10, 6, 4], [13, 11, 7, 8], [14, 15, 16, 12]]) + + + def test_matrix_unique_paths(self): + matrix = matrix_operations.Matrix() + self.assertEqual(matrix.count_unique_paths(3, 3), 6) + + def test_matrix_exceptions(self): + X = [[12,7,3], + [4,5,6], + [7,8,9]] + + Y = [[5,8], + [6,7], + [4,5]] + + matrix = matrix_operations.Matrix(X, Y) + + # test exception + self.assertRaises(Exception, matrix.add) + self.assertRaises(Exception, matrix.subtract) + if __name__ == '__main__': unittest.main() From 764a1554c23570b62daeedd1c2b66f89597aec84 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Fri, 1 Sep 2017 10:16:36 +0530 Subject: [PATCH 198/251] Added implementation for matrix operations --- pygorithm/math/matrix_operations.py | 210 ++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 pygorithm/math/matrix_operations.py diff --git a/pygorithm/math/matrix_operations.py b/pygorithm/math/matrix_operations.py new file mode 100644 index 0000000..36dc76f --- /dev/null +++ b/pygorithm/math/matrix_operations.py @@ -0,0 +1,210 @@ +''' + Author: OMKAR PATHAK + Created at: 01st September 2017 + + Implementing various Matrix operations such as matrix addition, subtraction, multiplication. +''' + +class Matrix(object): + ''' + Matrix class for performing various transformations + + Matrix operations can be performed on two matrices with any number of dimensions + ''' + + def __init__(self, matrix_one = None, matrix_two=None): + ''' + :param matrix_one: matrix with nxn dimensions + :param matrix_two: matrix with nxn dimensions + + .. code-block:: python: + + matrix_one = [[1, 2], [1, 3], [1, 4]] (a 3x2 matrix) + ''' + self.matrix_one = matrix_one + self.matrix_two = matrix_two + + + def add(self): + ''' + function for adding the two matrices + + .. note:: + + Matrix addition requires both the matrices to be of same size. + That is both the matrices should be of nxn dimensional. + ''' + + # check if both the matrices are of same shape + if not (len(self.matrix_one) == len(self.matrix_two)) or not (len(self.matrix_one[0]) == len(self.matrix_two[0])): + raise Exception('Both Matrices should be of same dimensions') + + added_matrix = [[0 for i in range(len(self.matrix_one))] for j in range(len(self.matrix_two))] + + # iterate through rows + for row in range(len(self.matrix_one)): + # iterate through columns + for column in range(len(self.matrix_one[0])): + added_matrix[row][column] = self.matrix_one[row][column] + self.matrix_two[row][column] + + return added_matrix + + def subtract(self): + ''' + function for subtracting the two matrices + + .. note:: + + Matrix subtraction requires both the matrices to be of same size. + That is both the matrices should be of nxn dimensional. + ''' + + # check if both the matrices are of same shape + if not (len(self.matrix_one) == len(self.matrix_two)) or not (len(self.matrix_one[0]) == len(self.matrix_two[0])): + raise Exception('Both Matrices should be of same dimensions') + + subtracted_matrix = [[0 for i in range(len(self.matrix_one))] for j in range(len(self.matrix_two))] + + # iterate through rows + for row in range(len(self.matrix_one)): + # iterate through columns + for column in range(len(self.matrix_one[0])): + subtracted_matrix[row][column] = self.matrix_one[row][column] - self.matrix_two[row][column] + + return subtracted_matrix + + + def multiply(self): + ''' + function for multiplying the two matrices + + .. note:: + + Matrix multiplication can be carried out even on matrices with different dimensions. + ''' + + multiplied_matrix = [[0 for i in range(len(self.matrix_two[0]))] for j in range(len(self.matrix_one))] + + # iterate through rows + for row_one in range(len(self.matrix_one)): + # iterate through columns matrix_two + for column in range(len(self.matrix_two[0])): + # iterate through rows of matrix_two + for row_two in range(len(self.matrix_two)): + multiplied_matrix[row_one][column] += self.matrix_one[row_one][row_two] * self.matrix_two[row_two][column] + + return multiplied_matrix + + + def transpose(self): + ''' + The transpose of a matrix is a new matrix whose rows are the columns of the original. + (This makes the columns of the new matrix the rows of the original) + ''' + transpose_matrix = [[0 for i in range(len(self.matrix_one))] for j in range(len(self.matrix_one[0]))] + + # iterate through rows + for row in range(len(self.matrix_one)): + # iterate through columns + for column in range(len(self.matrix_one[0])): + transpose_matrix[column][row] = self.matrix_one[row][column] + + return transpose_matrix + + + def rotate(self): + ''' + Given a matrix, clockwise rotate elements in it. + + .. code-block:: python: + + **Examples:** + + Input + 1 2 3 + 4 5 6 + 7 8 9 + + Output: + 4 1 2 + 7 5 3 + 8 9 6 + + For detailed information visit: https://github.com/keon/algorithms/blob/master/matrix/matrix_rotation.txt + ''' + + top = 0 + bottom = len(self.matrix_one) - 1 + left = 0 + right = len(self.matrix_one[0]) - 1 + + while left < right and top < bottom: + # Store the first element of next row, this element will replace first element of + # current row + prev = self.matrix_one[top + 1][left] + + # Move elements of top row one step right + for i in range(left, right + 1): + curr = self.matrix_one[top][i] + self.matrix_one[top][i] = prev + prev = curr + + top += 1 + + # Move elements of rightmost column one step downwards + for i in range(top, bottom+1): + curr = self.matrix_one[i][right] + self.matrix_one[i][right] = prev + prev = curr + + right -= 1 + + # Move elements of bottom row one step left + for i in range(right, left-1, -1): + curr = self.matrix_one[bottom][i] + self.matrix_one[bottom][i] = prev + prev = curr + + bottom -= 1 + + # Move elements of leftmost column one step upwards + for i in range(bottom, top-1, -1): + curr = self.matrix_one[i][left] + self.matrix_one[i][left] = prev + prev = curr + + left += 1 + + return self.matrix_one + + + def count_unique_paths(self, m, n): + ''' + Count the number of unique paths from a[0][0] to a[m-1][n-1] + We are allowed to move either right or down from a cell in the matrix. + Approaches- + (i) Recursion - Recurse starting from a[m-1][n-1], upwards and leftwards, + add the path count of both recursions and return count. + (ii) Dynamic Programming- Start from a[0][0].Store the count in a count + matrix. Return count[m-1][n-1] + Time Complexity = O(mn), Space Complexity = O(mn) + + :param m: number of rows + :param n: number of columns + ''' + if m < 1 or n < 1: + return + + count = [[None for j in range(n)] for i in range(m)] + + # Taking care of the edge cases- matrix of size 1xn or mx1 + for i in range(n): + count[0][i] = 1 + for j in range(m): + count[j][0] = 1 + + for i in range(1, m): + for j in range(1, n): + count[i][j] = count[i-1][j] + count[i][j-1] + + return count[m-1][n-1] From 56d9750b7e434cbe3c81151beb6691c434b78a38 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Fri, 1 Sep 2017 10:48:45 -0700 Subject: [PATCH 199/251] QuadTree documentation Add documentation for quadtree (next up tests, then implementation) * docs/Data_Structure.rst - add quadtree * pygorithm/data_structures/quadtree.py - add skeleton, documentation * tests/test_data_structure.py - add skeleton for quadtree tests --- docs/Data_Structure.rst | 20 ++ pygorithm/data_structures/quadtree.py | 332 ++++++++++++++++++++++++++ tests/test_data_structure.py | 39 ++- 3 files changed, 390 insertions(+), 1 deletion(-) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 0e4f7d1..69b6631 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -41,6 +41,8 @@ Features - Check cycle in Undirected Graph (data_structures.graph.CheckCycleUndirectedGraph) - **Heap** - Heap (data_structures.heap.Heap) + - **QuadTree** + - QuadTree (data_structures.quadtree.QuadTree) * Get the code used for any of the implementation @@ -214,3 +216,21 @@ Trie ----- .. autoclass:: Trie :members: + +QuadTree +-------- + +.. automodule:: pygorithm.data_structures.quadtree + + QuadTreeEntity + -------------- + .. autoclass:: QuadTreeEntity + :members: + :special_members: + + QuadTree + -------- + .. autoclass:: QuadTree + :members: + :special_members: + diff --git a/pygorithm/data_structures/quadtree.py b/pygorithm/data_structures/quadtree.py index 7ce7be4..ad2470d 100644 --- a/pygorithm/data_structures/quadtree.py +++ b/pygorithm/data_structures/quadtree.py @@ -9,6 +9,66 @@ from pygorithm.geometry import (vector2, polygon2, rect2) +class QuadTreeEntity(object): + """ + This is the minimum information required for an object to + be usable in a quadtree as an entity. Entities are the + things that you are trying to compare in a quadtree. + + :ivar aabb: the axis-aligned bounding box of this entity + :type aabb: :class:`pygorithm.geometry.rect2.Rect2` + """ + def __init__(self, aabb): + """ + Create a new quad tree entity with the specified aabb + + :param aabb: axis-aligned bounding box + :type aabb: :class:`pygorithm.geometry.rect2.Rect2` + """ + pass + + def __repr__(self): + """ + Create an unambiguous representation of this entity. + + Example: + + .. code-block:: python + + from pygorithm.geometry import (vector2, rect2) + from pygorithm.data_structures import quadtree + + _ent = quadtree.QuadTreeEntity(rect2.Rect2(5, 5)) + + # prints quadtreeentity(aabb=rect2(width=5, height=5, mincorner=vector2(x=0, y=0))) + print(repr(_ent)) + + :returns: unambiguous representation of this quad tree entity + :rtype: string + """ + pass + + def __str__(self): + """ + Create a human readable representation of this entity + + Example: + + .. code-block:: python + + from pygorithm.geometry import (vector2, rect2) + from pygorithm.data_structures import quadtree + + _ent = quadtree.QuadTreeEntity(rect2.Rect2(5, 5)) + + # prints entity(at rect(5x5 at <0, 0>)) + print(str(_ent)) + + :returns: human readable representation of this entity + :rtype: string + """ + pass + class QuadTree(object): """ A quadtree is a sorting tool for two-dimensional space, most @@ -16,7 +76,279 @@ class QuadTree(object): calculations in a two-dimensional scene. In this context, the scene is stepped without collision detection, then a quadtree is constructed from all of the boundaries + + .. caution:: + + Just because a quad tree has split does not mean entities will be empty. Any + entities which overlay any of the lines of the split will be included in the + parent class of the quadtree. + + .. tip:: + + It is important to tweak bucket size and depth to the problem, but a common error + is too small a bucket size. It is typically not reasonable to have a bucket size + smaller than 16; A good starting point is 64, then modify as appropriate. Larger + buckets reduce the overhead of the quad tree which could easily exceed the improvement + from reduced collision checks. The max depth is typically just a sanity check since + depth greater than 4 or 5 would either indicate a badly performing quadtree (too + dense objects, use an r-tree or kd-tree) or a very large world (where an iterative + quadtree implementation would be appropriate). + + :ivar bucket_size: maximum number objects per bucket (before :py:attr:`.max_depth`) + :type bucket_size: int + :ivar max_depth: maximum depth of the quadtree + :type max_depth: int + :ivar depth: the depth of this node (0 being the topmost) + :type depth: int + :ivar location: where this quad tree node is situated + :type location: :class:`pygorithm.geometry.rect2.Rect2` + :ivar entities: the entities in this quad tree and in NO OTHER related quad tree + :type entities: list of :class:`.QuadTreeEntity` + :ivar children: either None or the 4 :class:`.QuadTree` children of this node + :type children: None or list of :class:`.QuadTree` """ + + def __init__(self, bucket_size, max_depth, location, depth = 0, entities = None): + """ + Initialize a new quad tree. + + .. warning:: + + Passing entities to this quadtree will NOT cause it to split automatically! + You must call :py:meth:`.think` for that. This allows for more predictable + performance per line. + + :param bucket_size: the number of entities in this quadtree + :type bucket_size: int + :param max_depth: the maximum depth for automatic splitting + :type max_depth: int + :param location: where this quadtree is located + :type location: :class:`pygorithm.geometry.rect2.Rect2` + :param depth: the depth of this node + :type depth: int + :param entities: the entities to initialize this quadtree with + :type entities: list of :class:`.QuadTreeEntity` or None for empty list + """ + pass + + def think(self, recursive = False): + """ + Call :py:meth:`.split` if appropriate + + Split this quad tree if it has not split already and it has more + entities than :py:attr:`.bucket_size` and :py:attr:`.depth` is + less than :py:attr:`.max_depth`. + + If `recursive` is True, think is called on the :py:attr:`.children` with + recursive set to True after splitting. + + :param recursive: if `think(True)` should be called on :py:attr:`.children` (if there are any) + :type recursive: bool + """ + pass + + def split(self): + """ + Split this quadtree. + + .. caution:: + + A call to split will always split the tree or raise an error. Use + :py:meth:`.think` if you want to ensure the quadtree is operating + efficiently. + + .. caution:: + + This function will not respect :py:attr:`.bucket_size` or + :py:attr:`.max_depth`. + + :raises ValueError: if :py:attr:`.children` is not empty + """ + pass + + def get_quadrant(self, entity): + """ + Calculate the quadrant that the specified entity belongs to. + + Quadrants are: + + - -1: None (it overlaps 2 or more quadrants) + - 0: Top-left + - 1: Top-right + - 2: Bottom-right + - 3: Bottom-left + + .. caution:: + + This function does not verify the entity is contained in this quadtree. + + This operation takes O(1) time. + + :param entity: the entity to place + :type entity: :class:`.QuadTreeEntity` + :returns: quadrant + :rtype: int + """ + pass + + def insert_and_think(self, entity): + """ + Insert the entity into this or the appropriate child. + + This also acts as thinking (recursively). Using insert_and_think + iteratively is slightly less efficient but more predictable performance, + whereas initializing with a large number of entities then thinking is slightly + faster but may hang. Both may exceed recursion depth if max_depth + is too large. + + :param entity: the entity to insert + :type entity: :class:`.QuadTreeEntity` + """ + pass + + def retrieve_collidables(self, entity, predicate = None): + """ + Find all entities that could collide with the specified entity. + + .. warning:: + + If entity is, itself, in the quadtree, it will be returned. The + predicate may be used to prevent this using your preferred equality + method. + + The predicate takes 1 positional argument (the entity being considered) + and returns `False` if the entity should never be returned, even if it + might collide with the entity. It should return `True` otherwise. + + :param entity: the entity to find collidables for + :type entity: :class:`.QuadTreeEntity` + :param predicate: the predicate + :type predicate: :class:`types.FunctionType` or None + :returns: potential collidables (never `None) + :rtype: list of :class:`.QuadTreeEntity` + """ + pass + + def find_entities_per_depth(self): + """ + Calculate the number of nodes and entities at each depth level in this + quad tree. Only returns for depth levels at or equal to this node. + + This is implemented iteratively. See :py:meth:`.__str__` for usage example. + + :returns: dict of depth level to (number of nodes, number of entities) + :rtype: dict int: (int, int) + """ + pass + + def sum_entities(self, entities_per_depth=None): + """ + Sum the number of entities in this quad tree and all lower quad trees. + + If entities_per_depth is not None, that array is used to calculate the sum + of entities rather than traversing the tree. + + :param entities_per_depth: the result of :py:meth:`.find_entities_per_depth` + :type entities_per_depth: `dict int: (int, int)` or None + :returns: number of entities in this and child nodes + :rtype: int + """ + pass + + def calculate_avg_ents_per_leaf(self): + """ + Calculate the average number of entities per leaf node on this and child + quad trees. + + In the ideal case, the average entities per leaf is equal to the bucket size, + implying maximum efficiency. + + This is implemented iteratively. See :py:meth:`.__str__` for usage example. + + :returns: average number of entities at each leaf node + :rtype: :class:`numbers.Number` + """ + pass + + def calculate_weight_misplaced_ents(self, sum_entities=None): + """ + Calculate a rating for misplaced entities. + + A misplaced entity is one that is not on a leaf node. That weight is multiplied + by 4*remaining maximum depth of that node, to indicate approximately how + many additional calculations are required. + + The result is then divided by the total number of entities on this node (either + calculated using :py:meth:`.sum_entities` or provided) to get the approximate + cost of the misplaced nodes in comparison with the placed nodes. A value greater + than 1 implies a different tree type (such as r-tree or kd-tree) should probably be + used. + + :param sum_entities: the number of entities on this node + :type sum_entities: int or None + :returns: weight of misplaced entities + :rtype: :class:`numbers.Number` + """ + pass + + def __repr__(self): + """ + Create an unambiguous, recursive representation of this quad tree. + + Example: + + .. code-block:: python + + from pygorithm.geometry import (vector2, rect2) + from pygorithm.data_structures import quadtree + + # create a tree with a up to 2 entities in a bucket that + # can have a depth of up to 5. + _tree = quadtree.QuadTree(2, 5, rect2.Rect2(100, 100)) + + # add a few entities to the tree + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) + + # prints quadtree(bucket_size=2, max_depth=5, location=rect2(width=100, height=100, mincorner=vector2(x=0, y=0)), depth=0, entities=[], children=[ quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=0, y=0)), depth=1, entities=[ quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=5, y=5))) ], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=50, y=0)), depth=1, entities=[ quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=95, y=5))) ], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=50, y=50)), depth=1, entities=[], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=0, y=50)), depth=1, entities=[], children=[]) ]) + print(repr(_tree)) + + :returns: unambiguous, recursive representation of this quad tree + :rtype: string + """ + pass + + def __str__(self): + """ + Create a human-readable representation of this quad tree + + .. caution:: + + Because of the complexity of quadtrees it takes a fair amount of calculation to + produce something somewhat legible. All returned statistics have paired functions + + Example: + + .. code-block:: python + + from pygorithm.geometry import (vector2, rect2) + from pygorithm.data_structures import quadtree + + # create a tree with a up to 2 entities in a bucket that + # can have a depth of up to 5. + _tree = quadtree.QuadTree(2, 5, rect2.Rect2(100, 100)) + + # add a few entities to the tree + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) + + # prints quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (max depth: 5), avg ent/leaf: 0.5 (target 2), misplaced weight = 0 (0 best, >1 bad)) + + :returns: human-readable representation of this quad tree + :rtype: string + """ + pass + @staticmethod def get_code(): """ diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 5e99135..c1fe5cd 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -365,6 +365,43 @@ def test_stack(self): self.assertEqual(myTrie.search('flying'), True) self.assertEqual(myTrie.search('walking'), False) - +class TestQuadTreeNode(unittest.TestCase): + def test_constructor(self): + pass + def test_repr(self): + pass + def test_str(self): + pass + +class TestQuadTree(unittest.TestCase): + def test_constructor(self): + pass + def test_get_quadrant(self): + pass + def test_split(self): + pass + def test_think(self): + pass + def test_insert(self): + pass + def test_retrieve(self): + pass + def test_ents_per_depth(self): + pass + def test_sum_ents_noparam(self): + pass + def test_sum_ents_param(self): + pass + def test_avg_ents_per_leaf(self): + pass + def test_misplaced_ents_noparam(self): + pass + def test_misplaced_ents_param(self): + pass + def test_repr(self): + pass + def test_str(self): + pass + if __name__ == '__main__': unittest.main() From d4281b2e227bb5b74d3429cd2e01f1f4a5b700f3 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Fri, 1 Sep 2017 10:52:15 -0700 Subject: [PATCH 200/251] Fix sphinx documentation * docs/Data_Structure.rst - special_members -> special-members * tests/test_data_structure.py - import quadtree (so compile checks) --- docs/Data_Structure.rst | 4 ++-- tests/test_data_structure.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/Data_Structure.rst b/docs/Data_Structure.rst index 69b6631..f412ea9 100644 --- a/docs/Data_Structure.rst +++ b/docs/Data_Structure.rst @@ -226,11 +226,11 @@ QuadTree -------------- .. autoclass:: QuadTreeEntity :members: - :special_members: + :special-members: QuadTree -------- .. autoclass:: QuadTree :members: - :special_members: + :special-members: diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index c1fe5cd..637d77f 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -8,7 +8,8 @@ tree, graph, heap, - trie) + trie, + quadtree) class TestStack(unittest.TestCase): From 64cbda0984ef4e8ebe3e39e1ff46884d98392de0 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Fri, 1 Sep 2017 11:00:04 -0700 Subject: [PATCH 201/251] Minor quadtree documentation improvements * pygorithm/data_structures/quadtree.py - minor doc changes --- pygorithm/data_structures/quadtree.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pygorithm/data_structures/quadtree.py b/pygorithm/data_structures/quadtree.py index ad2470d..6d391d0 100644 --- a/pygorithm/data_structures/quadtree.py +++ b/pygorithm/data_structures/quadtree.py @@ -81,7 +81,7 @@ class QuadTree(object): Just because a quad tree has split does not mean entities will be empty. Any entities which overlay any of the lines of the split will be included in the - parent class of the quadtree. + parent of the quadtree. .. tip:: @@ -178,7 +178,7 @@ def get_quadrant(self, entity): - 2: Bottom-right - 3: Bottom-left - .. caution:: + .. caution:: This function does not verify the entity is contained in this quadtree. @@ -195,10 +195,10 @@ def insert_and_think(self, entity): """ Insert the entity into this or the appropriate child. - This also acts as thinking (recursively). Using insert_and_think - iteratively is slightly less efficient but more predictable performance, - whereas initializing with a large number of entities then thinking is slightly - faster but may hang. Both may exceed recursion depth if max_depth + This also acts as thinking (recursively). Using :py:meth:`.insert_and_think` + iteratively is slightly less efficient but has more predictable performance + than initializing with a large number of entities then thinking is slightly + faster but may hang. Both may exceed recursion depth if :py:attr:`.max_depth` is too large. :param entity: the entity to insert @@ -245,8 +245,9 @@ def sum_entities(self, entities_per_depth=None): """ Sum the number of entities in this quad tree and all lower quad trees. - If entities_per_depth is not None, that array is used to calculate the sum - of entities rather than traversing the tree. + If `entities_per_depth` is not None, that array is used to calculate the sum + of entities rather than traversing the tree. Either way, this is implemented + iteratively. See :py:meth:`.__str__` for usage example. :param entities_per_depth: the result of :py:meth:`.find_entities_per_depth` :type entities_per_depth: `dict int: (int, int)` or None @@ -284,6 +285,8 @@ def calculate_weight_misplaced_ents(self, sum_entities=None): than 1 implies a different tree type (such as r-tree or kd-tree) should probably be used. + This is implemented iteratively. See :py:meth:`.__str__` for usage example. + :param sum_entities: the number of entities on this node :type sum_entities: int or None :returns: weight of misplaced entities @@ -325,7 +328,8 @@ def __str__(self): .. caution:: Because of the complexity of quadtrees it takes a fair amount of calculation to - produce something somewhat legible. All returned statistics have paired functions + produce something somewhat legible. All returned statistics have paired functions. + This uses only iterative algorithms to calculate statistics. Example: From 817937103fa51ab6ae3bb883012fd8d03f6caa28 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sat, 2 Sep 2017 09:34:44 -0700 Subject: [PATCH 202/251] Finish quadtree tests * pygorithm/data_structures/quadtree.py - minor documentation changes * tests/test_data_structure.py - implement quadtree tests --- pygorithm/data_structures/quadtree.py | 3 +- tests/test_data_structure.py | 389 ++++++++++++++++++++++++-- 2 files changed, 369 insertions(+), 23 deletions(-) diff --git a/pygorithm/data_structures/quadtree.py b/pygorithm/data_structures/quadtree.py index 6d391d0..4b2dd35 100644 --- a/pygorithm/data_structures/quadtree.py +++ b/pygorithm/data_structures/quadtree.py @@ -262,7 +262,8 @@ def calculate_avg_ents_per_leaf(self): quad trees. In the ideal case, the average entities per leaf is equal to the bucket size, - implying maximum efficiency. + implying maximum efficiency. Note that, as always with averages, this might + be misleading if this tree has reached its max depth. This is implemented iteratively. See :py:meth:`.__str__` for usage example. diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 637d77f..60769cd 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import unittest +import random from pygorithm.data_structures import ( stack, @@ -367,42 +368,386 @@ def test_stack(self): self.assertEqual(myTrie.search('walking'), False) class TestQuadTreeNode(unittest.TestCase): + def setUp(self): + self.rect1 = rect2.Rect2(1, 1, vector2.Vector2(2, 2)) + def test_constructor(self): - pass + ent = quadtree.QuadTreeEntity(rect1) + + self.assertIsNotNone(ent.aabb) + self.assertEqual(1, ent.aabb.width) + self.assertEqual(1, ent.aabb.height) + self.assertEqual(2, ent.aabb.mincorner.x) + self.assertEqual(2, ent.aabb.mincorner.y) + def test_repr(self): - pass + ent = quadtree.QuadTreeEntity(rect1) + + exp = "quadtreeentity(aabb=rect2(width=1, height=1, mincorner=vector2(x=2, y=2)))" + self.assertEqual(exp, repr(ent)) + def test_str(self): - pass + ent = quadtree.QuadTreeEntity(rect1) + + exp = "entity(at rect(1x1 at <2, 2>))" + self.assertEqual(exp, str(ent)) class TestQuadTree(unittest.TestCase): + def setUp(self): + self.big_rect = rect2.Rect2(1000, 1000) + self.big_rect_sub_1 = rect2.Rect2(500, 500) + self.big_rect_sub_2 = rect2.Rect2(500, 500, vector2.Vector2(500, 0)) + self.big_rect_sub_3 = rect2.Rect2(500, 500, vector2.Vector2(500, 500)) + self.big_rect_sub_4 = rect2.Rect2(500, 500, vector2.Vector2(0, 500)) + random.seed() + + def test_constructor(self): - pass + _tree = quadtree.QuadTree(64, 5, self.big_rect) + + self.assertEqual(64, _tree.bucket_size) + self.assertEqual(5, _tree.max_depth) + self.assertEqual(1000, _tree.location.width) + self.assertEqual(1000, _tree.location.height) + self.assertEqual(0, _tree.location.mincorner.x) + self.assertEqual(0, _tree.location.mincorner.y) + self.assertEqual(0, _tree.depth) + self.assertIsNotNone(_tree.entities) + self.assertEqual(0, len(_tree.entities)) + self.assertIsNone(_tree.children) + def test_get_quadrant(self): - pass - def test_split(self): - pass + _tree = quadtree.QuadTree(64, 5, self.big_rect) + + ent1 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(320, 175)) + quad1 = _tree.get_quadrant(ent1) + self.assertEqual(0, quad1) + + ent2 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(600, 450)) + quad2 = _tree.get_quadrant(ent2) + self.assertEqual(1, quad2) + + ent3 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(700, 950)) + quad3 = _tree.get_quadrant(ent3) + self.assertEqual(2, quad3) + + ent4 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(0, 495)) + quad4 = _tree.get_quadrant(ent4) + self.assertEqual(3, quad4) + + def test_get_quadrant_none(self): + _tree = quadtree.QuadTree(64, 5, self.big_rect) + + ent1 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(497, 150)) + self.assertEqual(-1, _tree.get_quadrant(ent1)) + + ent2 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(800, 499)) + self.assertEqual(-1, _tree.get_quadrant(ent2)) + + ent3 = quadtree.QuadTreeEntity(15, 15, vector2.Vector2(481, 505)) + self.assertEqual(-1, _tree.get_quadrant(ent3)) + + ent4 = quadtree.QuadTreeEntity(5, 20, vector2.Vector2(15, 490)) + self.assertEqual(-1, _tree.get_quadrant(ent4)) + + ent5 = quadtree.QuadTreeEntity(17, 34, vector2.Vector2(485, 470)) + self.assertEqual(-1, _tree.get_quadrant(ent5)) + + def test_get_quadrant_shifted(self): + _tree = quadtree.QuadTree(64, 5, self.big_rect_sub_3) + + ent1 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(515, 600)) + self.assertEqual(0, _tree.get_quadrant(ent1)) + + ent2 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(800, 550)) + self.assertEqual(1, _tree.get_quadrant(ent2)) + + ent3 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(950, 650)) + self.assertEqual(2, _tree.get_quadrant(ent3)) + + ent4 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(15, 551)) + self.assertEqual(3, _tree.get_quadrant(ent4)) + + def test_get_quadrant_0_shifted(self): + _tree = quadtree.QuadTree(64, 5, rect2.Rect2(500, 800, vector2.Vector2(200, 200))) + + ent1 = quadtree.QuadTreeEntity(5, 10, vector2.Vector2(445, 224)) + self.assertEqual(-1, _tree.get_quadrant(ent1)) + + ent2 = quadtree.QuadTreeEntity(11, 17, vector2.Vector2(515, 585)) + self.assertEqual(-1, _tree.get_quadrant(ent2)) + + ent3 = quadtree.QuadTreeEntity(20, 20, vector2.Vector2(440, 700)) + self.assertEqual(-1, _tree.get_quadrant(ent3)) + + ent4 = quadtree.QuadTreeEntity(15, 15, vector2.Vector2(215, 590)) + self.assertEqual(-1, _tree.get_quadrant(ent4)) + + ent5 = quadtree.QuadTreeEntity(7, 12, vector2.Vector2(449, 589)) + self.assertEqual(-1, _tree.get_quadrant(ent5)) + + def test_split_empty(self): + _tree1 = quadtree.QuadTree(64, 5, self.big_rect) + self.assertIsNone(_tree1.children) + _tree1.split() + self.assertIsNotNone(_tree1.children) + self.assertEqual(4, len(_tree1.children)) + + self.assertEqual(500, _tree1.children[0].width) + self.assertEqual(500, _tree1.children[0].height) + self.assertEqual(0, _tree1.children[0].mincorner.x) + self.assertEqual(0, _tree1.children[0].mincorner.y) + self.assertEqual(1, _tree1.children[0].depth) + self.assertEqual(64, _tree1.children[0].bucket_size) + self.assertEqual(5, _tree1.children[0].max_depth) + + self.assertEqual(500, _tree1.children[1].width) + self.assertEqual(500, _tree1.children[1].height) + self.assertEqual(500, _tree1.children[1].mincorner.x) + self.assertEqual(0, _tree1.children[1].mincorner.y) + + self.assertEqual(500, _tree1.children[2].width) + self.assertEqual(500, _tree1.children[2].height) + self.assertEqual(500, _tree1.children[2].mincorner.x) + self.assertEqual(500, _tree1.children[2].mincorner.y) + + self.assertEqual(500, _tree1.children[3].width) + self.assertEqual(500, _tree1.children[3].height) + self.assertEqual(0, _tree1.children[3].mincorner.x) + self.assertEqual(500, _tree1.children[3].mincorner.y) + + + _tree2 = _tree1.children[3] + _tree2.split() + + self.assertEqual(250, _tree2.children[0].width) + self.assertEqual(250, _tree2.children[0].height) + self.assertEqual(500, _tree2.children[0].mincorner.x) + self.assertEqual(500, _tree2.children[0].mincorner.y) + self.assertEqual(2, _tree2.children[0].depth) + + self.assertEqual(250, _tree2.children[1].width) + self.assertEqual(250, _tree2.children[1].height) + self.assertEqual(750, _tree2.children[1].mincorner.x) + self.assertEqual(500, _tree2.children[1].mincorner.y) + + self.assertEqual(250, _tree2.children[2].width) + self.assertEqual(250, _tree2.children[2].height) + self.assertEqual(750, _tree2.children[2].mincorner.x) + self.assertEqual(750, _tree2.children[2].mincorner.y) + + self.assertEqual(250, _tree2.children[3].width) + self.assertEqual(250, _tree2.children[3].height) + self.assertEqual(500, _tree2.children[3].mincorner.x) + self.assertEqual(750, _tree2.children[3].mincorner.y) + + def test_split_entities(self): + + ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(50, 50))) + ent2 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(550, 75))) + ent3 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(565, 585))) + ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(95, 900))) + ent5 = quadtree.QuadTreeEntity(rect2.Rect2(10, 10, vector2.Vector2(495, 167))) + + _tree = quadtree.QuadTree(64, 5, self.big_rect, entities = [ ent1, ent2, ent3, ent4, ent5 ]) + _tree.split() + + self.assertEqual(1, len(_tree.children[0].entities)) + self.assertEqual(50, _tree.children[0].entities[0].mincorner.x) + self.assertEqual(50, _tree.children[0].entities[0].mincorner.y) + + self.assertEqual(1, len(_tree.children[1].entities)) + self.assertEqual(550, _tree.children[1].entities[0].mincorner.x) + self.assertEqual(75, _tree.children[1].entities[0].mincorner.y) + + self.assertEqual(1, len(_tree.children[2].entities)) + self.assertEqual(565, _tree.children[2].entities[0].mincorner.x) + self.assertEqual(585, _tree.children[2].entities[0].mincorner.y) + + self.assertEqual(1, len(_tree.children[3].entities)) + self.assertEqual(95, _tree.children[3].entities[0].mincorner.x) + self.assertEqual(900, _tree.children[3].entities[0].mincorner.y) + + self.assertEqual(1, len(_tree.entities)) + self.assertEqual(495, _tree.entities[0].mincorner.x) + self.assertEqual(167, _tree.entities[0].mincorner.y) + + _tree2 = _tree.children[3] + _tree2.split() + + for i in range(3): + self.assertEqual(0, len(_tree2.children[i].entities), msg="i={}".format(i)) + + self.assertEqual(1, len(_tree2.children[3].entities)) + self.assertEqual(95, _tree2.children[3].entities[0].mincorner.x) + self.assertEqual(900, _tree2.children[3].entities[0].mincorner.y) + + # note for test_think and test_insert we're testing the worst-case scenario + # for a quad tree (everythings all bunched up in a corner) hence the instant + # flow to max depth. this case is why max_depth is necessary. To see why you + # don't need that much max_depth, the rect sizes are + # 1000 (depth 0), 500 (depth 1), 250 (depth 2), 125 (depth 3), 62.5 (depth 4), + # 31.25 (depth 5), 15.625 (depth 6), etc. As you can see, they would have to be + # extremely bunched (or stacked) and tiny to actually cause a stack overflow (in the + # examples it's only 6 deep), but the quadtree isn't improving anything + # (even at 1000x1000 world!) past depth 5 or so. + def test_think(self): - pass + ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(15, 15))) + ent2 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(20, 20))) + ent3 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(0, 0))) + ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(5, 0))) + ent5 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(0, 5))) + _tree = quadtree.QuadTree(2, 2, self.big_rect, entities = [ ent1, ent2, ent3, ent4, ent5 ]) + _tree.think(True) + + self.assertIsNotNone(_tree.children) # depth 0 + self.assertIsNotNone(_tree.children[0].children) # depth 1 + self.assertIsNotNone(_tree.children[0].children[0].children) # depth 2 + self.assertIsNone(_tree.children[0].children[0].children[0].children) # depth 3 shouldn't happen because + self.assertEqual(5, len(_tree.children[0].children[0].children[0].entities)) # max_depth reached + def test_insert(self): - pass + _tree = quadtree.QuadTree(2, 2, self.big_rect) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(15, 15)))) + self.assertIsNone(_tree.children) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(20, 20)))) + self.assertIsNone(_tree.children) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(0, 0)))) + self.assertIsNotNone(_tree.children) # depth 0 + self.assertIsNotNone(_tree.children[0].children) # depth 1 + self.assertIsNotNone(_tree.children[0].children[0].children) # depth 2 + self.assertIsNone(_tree.children[0].children[0].children[0].children) # depth 3 shouldn't happen because + self.assertEqual(3, len(_tree.children[0].children[0].entities)) # max_depth reached + def test_retrieve(self): - pass + _tree = quadtree.QuadTree(2, 2, self.big_rect) + + ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(25, 25))) + _tree.insert_and_think(ent1) + + retr = _tree.retrieve_collidables(ent1) + self.assertIsNotNone(retr) + self.assertEqual(1, len(retr)) + self.assertEqual(25, retr.mincorner.x) + self.assertEqual(25, retr.mincorner.y) + + # note this is not nicely in a quadrant + ent2 = quadtree.QuadTreeEntity(rect2.Rect2(20, 10, vector2.Vector2(490, 300))) + _tree.insert_and_think(ent2) + + retr = _tree.retrieve_collidables(ent1) + self.assertIsNotNone(retr) + self.assertEqual(2, len(retr)) # both ent1 and ent2 are "collidable" in this quad tree + + # this should cause a split (bucket_size) + ent3 = quadtree.QuadTreeEntity(rect2.Rect2(15, 10, vector2.Vector2(700, 450))) + _tree.insert_and_think(ent3) + + # ent1 should collide with ent1 or ent2, + # ent2 with ent1, ent2, or ent3 + # ent3 with ent2 or ent3 + retr = _tree.retrieve_collidables(ent1) + self.assertIsNotNone(retr) + self.assertEqual(2, len(retr)) + self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 25), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 490), None), str(retr)) + + retr = _tree.retrieve_collidables(ent2) + self.assertEqual(3, len(retr)) + self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 25), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 490), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 700), None), str(retr)) + + retr = _tree.retrieve_collidables(ent3) + self.assertEqual(2, len(retr)) + self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 490), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 700), None), str(retr)) + def test_ents_per_depth(self): - pass - def test_sum_ents_noparam(self): - pass - def test_sum_ents_param(self): - pass + _tree = quadtree.QuadTree(3, 5, self.big_rect) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(75, 35)))) + self.assertDictEqual({ 0: 1 }, _tree.find_entities_per_depth()) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(300, 499)))) + self.assertDictEqual({ 0: 2 }, _tree.find_entities_per_depth()) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(800, 600)))) + self.assertDictEqual({ 0: 1, 1: 2 }, _tree.find_entities_per_depth()) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(450, 300)))) + self.assertDictEqual({ 0: 1, 1: 3 }, _tree.find_entities_per_depth()) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(150, 100)))) + self.assertDictEqual({ 0: 1, 1: 1, 2: 3 }, _tree.find_entities_per_depth()) + + def test_sum_ents(self): + # it shouldn't matter where we put entities in, adding entities + # to a quadtree should increment this number by 1. So lets fuzz! + + _tree = quadtree.QuadTree(64, 5, self.big_rect) + for i in range(1000): + w = random.randrange(1, 10) + h = random.randrange(1, 10) + x = random.uniform(0, 1000 - w) + y = random.uniform(0, 1000 - h) + ent = quadtree.QuadTreeEntity(w, h, vector2.Vector2(x, y)) + _tree.insert_and_think(ent) + + # avoid calculating sum every loop which would take way too long. + # on average, try to sum about 50 times total (5% of the time), + # evenly split between both ways of summing + rnd = random.random() + if rnd > 0.95 and rnd <= 0.975: + _sum = _tree.sum_entities() + self.assertEqual(i+1, _sum) + elif rnd > 0.975: + _sum = _tree.sum_entities(_tree.find_entities_per_depth()) + self.assertEqual(i+1, _sum) + def test_avg_ents_per_leaf(self): - pass - def test_misplaced_ents_noparam(self): - pass - def test_misplaced_ents_param(self): - pass + _tree = quadtree.QuadTree(3, 5, self.big_rect) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(75, 35)))) + self.assertEqual(1, _tree.calculate_avg_ents_per_leaf()) # 1 ent on 1 leaf + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(300, 499)))) + self.asserttEqual(2, _tree.calculate_avg_ents_per_leaf()) # 2 ents 1 leaf + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(800, 600)))) + self.asserttEqual(0.5, _tree.calculate_avg_ents_per_leaf()) # 2 ents 4 leafs (1 misplaced) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(450, 300)))) + self.asserttEqual(0.75, _tree.calculate_avg_ents_per_leaf()) # 3 ents 4 leafs (1 misplaced) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(150, 100)))) + self.asserttEqual(0.5, _tree.calculate_avg_ents_per_leaf()) # 4 ents 8 leafs (1 misplaced) + + def test_misplaced_ents(self): + _tree = quadtree.QuadTree(3, 5, self.big_rect) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(75, 35)))) + self.assertEqual(0, _tree.calculate_weight_misplaced_ents()) # 0 misplaced, 1 total + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(300, 499)))) + self.asserttEqual(0, _tree.calculate_weight_misplaced_ents()) # 0 misplaced, 2 total + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(800, 600)))) + self.assertAlmostEqual(4/3, _tree.calculate_weight_misplaced_ents()) # 1 misplaced (1 deep), 3 total + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(450, 300)))) + self.assertAlmostEqual(1, _tree.calculate_weight_misplaced_ents()) # 1 misplaced (1 deep), 4 total + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(150, 100)))) + self.assertAlmostEqual(8/5, _tree.calculate_weight_misplaced_ents()) # 1 misplaced (2 deep), 5 total + def test_repr(self): - pass + _tree = quadtree.QuadTree(2, 5, rect2.Rect2(100, 100)) + + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) + + _olddiff = self.maxDiff + def cleanup(self2): + self2.maxDiff = _olddiff + + self.addCleanup(cleanup) + self.maxDiff = None + self.assertEqual("quadtree(bucket_size=2, max_depth=5, location=rect2(width=100, height=100, mincorner=vector2(x=0, y=0)), depth=0, entities=[], children=[ quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=0, y=0)), depth=1, entities=[ quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=5, y=5))) ], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=50, y=0)), depth=1, entities=[ quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=95, y=5))) ], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=50, y=50)), depth=1, entities=[], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=0, y=50)), depth=1, entities=[], children=[]) ])", repr(_tree)) + def test_str(self): - pass + _tree = quadtree.QuadTree(2, 5, rect2.Rect2(100, 100)) + + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) + + self.assertEqual("quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (max depth: 5), avg ent/leaf: 0.5 (target 2), misplaced weight = 0 (0 best, >1 bad))", str(_tree)) if __name__ == '__main__': unittest.main() From b785d6f94e2524176ccee6917ba05750a24869ae Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 3 Sep 2017 09:55:56 -0700 Subject: [PATCH 203/251] Implement quadtree All tests passing. Minor changes to some function definitions, split up find_entities_per_depth (to fit tests). * pygorithm/data_structures/quadtree.py - implement * tests/test_data_structure.py - fix and expand quadtree tests --- pygorithm/data_structures/quadtree.py | 237 ++++++++++++++++++++--- tests/test_data_structure.py | 261 +++++++++++++++----------- 2 files changed, 365 insertions(+), 133 deletions(-) diff --git a/pygorithm/data_structures/quadtree.py b/pygorithm/data_structures/quadtree.py index 4b2dd35..f0e0fe3 100644 --- a/pygorithm/data_structures/quadtree.py +++ b/pygorithm/data_structures/quadtree.py @@ -6,6 +6,8 @@ depth and bucket size. """ import inspect +import math +from collections import deque from pygorithm.geometry import (vector2, polygon2, rect2) @@ -25,7 +27,7 @@ def __init__(self, aabb): :param aabb: axis-aligned bounding box :type aabb: :class:`pygorithm.geometry.rect2.Rect2` """ - pass + self.aabb = aabb def __repr__(self): """ @@ -46,7 +48,7 @@ def __repr__(self): :returns: unambiguous representation of this quad tree entity :rtype: string """ - pass + return "quadtreeentity(aabb={})".format(repr(self.aabb)) def __str__(self): """ @@ -67,7 +69,7 @@ def __str__(self): :returns: human readable representation of this entity :rtype: string """ - pass + return "entity(at {})".format(str(self.aabb)) class QuadTree(object): """ @@ -129,7 +131,12 @@ def __init__(self, bucket_size, max_depth, location, depth = 0, entities = None) :param entities: the entities to initialize this quadtree with :type entities: list of :class:`.QuadTreeEntity` or None for empty list """ - pass + self.bucket_size = bucket_size + self.max_depth = max_depth + self.location = location + self.depth = depth + self.entities = entities if entities is not None else [] + self.children = None def think(self, recursive = False): """ @@ -145,7 +152,13 @@ def think(self, recursive = False): :param recursive: if `think(True)` should be called on :py:attr:`.children` (if there are any) :type recursive: bool """ - pass + if not self.children and self.depth < self.max_depth and len(self.entities) > self.bucket_size: + self.split() + + if recursive: + if self.children: + for child in self.children: + child.think(True) def split(self): """ @@ -164,12 +177,43 @@ def split(self): :raises ValueError: if :py:attr:`.children` is not empty """ - pass + if self.children: + raise ValueError("cannot split twice") + + _cls = type(self) + def _cstr(r): + return _cls(self.bucket_size, self.max_depth, r, self.depth + 1) + + _halfwidth = self.location.width / 2 + _halfheight = self.location.height / 2 + _x = self.location.mincorner.x + _y = self.location.mincorner.y + + self.children = [ + _cstr(rect2.Rect2(_halfwidth, _halfheight, vector2.Vector2(_x, _y))), + _cstr(rect2.Rect2(_halfwidth, _halfheight, vector2.Vector2(_x + _halfwidth, _y))), + _cstr(rect2.Rect2(_halfwidth, _halfheight, vector2.Vector2(_x + _halfwidth, _y + _halfheight))), + _cstr(rect2.Rect2(_halfwidth, _halfheight, vector2.Vector2(_x, _y + _halfheight))) ] + + _newents = [] + for ent in self.entities: + quad = self.get_quadrant(ent) + + if quad < 0: + _newents.append(ent) + else: + self.children[quad].entities.append(ent) + self.entities = _newents + + def get_quadrant(self, entity): """ Calculate the quadrant that the specified entity belongs to. + Touching a line is considered overlapping a line. Touching is + determined using :py:meth:`math.isclose` + Quadrants are: - -1: None (it overlaps 2 or more quadrants) @@ -189,7 +233,48 @@ def get_quadrant(self, entity): :returns: quadrant :rtype: int """ - pass + + _aabb = entity.aabb + _halfwidth = self.location.width / 2 + _halfheight = self.location.height / 2 + _x = self.location.mincorner.x + _y = self.location.mincorner.y + + if math.isclose(_aabb.mincorner.x, _x + _halfwidth): + return -1 + if math.isclose(_aabb.mincorner.x + _aabb.width, _x + _halfwidth): + return -1 + if math.isclose(_aabb.mincorner.y, _y + _halfheight): + return -1 + if math.isclose(_aabb.mincorner.y + _aabb.height, _y + _halfheight): + return -1 + + _leftside_isleft = _aabb.mincorner.x < _x + _halfwidth + _rightside_isleft = _aabb.mincorner.x + _aabb.width < _x + _halfwidth + + if _leftside_isleft != _rightside_isleft: + return -1 + + _topside_istop = _aabb.mincorner.y < _y + _halfheight + _botside_istop = _aabb.mincorner.y + _aabb.height < _y + _halfheight + + if _topside_istop != _botside_istop: + return -1 + + _left = _leftside_isleft + _top = _topside_istop + + if _left: + if _top: + return 0 + else: + return 3 + else: + if _top: + return 1 + else: + return 2 + def insert_and_think(self, entity): """ @@ -204,7 +289,14 @@ def insert_and_think(self, entity): :param entity: the entity to insert :type entity: :class:`.QuadTreeEntity` """ - pass + if not self.children and len(self.entities) == self.bucket_size and self.depth < self.max_depth: + self.split() + + quad = self.get_quadrant(entity) if self.children else -1 + if quad < 0: + self.entities.append(entity) + else: + self.children[quad].insert_and_think(entity) def retrieve_collidables(self, entity, predicate = None): """ @@ -227,8 +319,40 @@ def retrieve_collidables(self, entity, predicate = None): :returns: potential collidables (never `None) :rtype: list of :class:`.QuadTreeEntity` """ - pass + result = list(filter(predicate, self.entities)) + quadrant = self.get_quadrant(entity) if self.children else -1 + if quadrant >= 0: + result.extend(self.children[quadrant].retrieve_collidables(entity, predicate)) + elif self.children: + for child in self.children: + touching, overlapping, alwaysNone = rect2.Rect2.find_intersection(entity.aabb, child.location, find_mtv=False) + if touching or overlapping: + result.extend(child.retrieve_collidables(entity, predicate)) + + return result + + def _iter_helper(self, pred): + """ + Calls pred on each child and childs child, iteratively. + + pred takes one positional argument (the child). + + :param pred: function to call + :type pred: `types.FunctionType` + """ + + _stack = deque() + _stack.append(self) + + while _stack: + curr = _stack.pop() + if curr.children: + for child in curr.children: + _stack.append(child) + + pred(curr) + def find_entities_per_depth(self): """ Calculate the number of nodes and entities at each depth level in this @@ -236,10 +360,30 @@ def find_entities_per_depth(self): This is implemented iteratively. See :py:meth:`.__str__` for usage example. - :returns: dict of depth level to (number of nodes, number of entities) - :rtype: dict int: (int, int) + :returns: dict of depth level to number of entities + :rtype: dict int: int + """ + + container = { 'result': {} } + def handler(curr, container=container): + container['result'][curr.depth] = container['result'].get(curr.depth, 0) + len(curr.entities) + self._iter_helper(handler) + + return container['result'] + + def find_nodes_per_depth(self): + """ + Calculate the number of nodes at each depth level. + + This is implemented iteratively. See :py:meth:`.__str__` for usage example. + + :returns: dict of depth level to number of nodes + :rtype: dict int: int """ - pass + + nodes_per_depth = {} + self._iter_helper(lambda curr, d=nodes_per_depth: d.update({ (curr.depth, d.get(curr.depth, 0) + 1) })) + return nodes_per_depth def sum_entities(self, entities_per_depth=None): """ @@ -254,7 +398,15 @@ def sum_entities(self, entities_per_depth=None): :returns: number of entities in this and child nodes :rtype: int """ - pass + if entities_per_depth is not None: + return sum(entities_per_depth.values()) + + container = { 'result': 0 } + def handler(curr, container=container): + container['result'] += len(curr.entities) + self._iter_helper(handler) + + return container['result'] def calculate_avg_ents_per_leaf(self): """ @@ -270,7 +422,13 @@ def calculate_avg_ents_per_leaf(self): :returns: average number of entities at each leaf node :rtype: :class:`numbers.Number` """ - pass + container = { 'leafs': 0, 'total': 0 } + def handler(curr, container=container): + if not curr.children: + container['leafs'] += 1 + container['total'] += len(curr.entities) + self._iter_helper(handler) + return container['total'] / container['leafs'] def calculate_weight_misplaced_ents(self, sum_entities=None): """ @@ -293,8 +451,35 @@ def calculate_weight_misplaced_ents(self, sum_entities=None): :returns: weight of misplaced entities :rtype: :class:`numbers.Number` """ - pass + # this iteration requires more context than _iter_helper provides. + # we must keep track of parents as well in order to correctly update + # weights + + nonleaf_to_max_child_depth_dict = {} + + # stack will be (quadtree, list (of parents) or None) + _stack = deque() + _stack.append((self, None)) + while _stack: + curr, parents = _stack.pop() + if parents: + for p in parents: + nonleaf_to_max_child_depth_dict[p] = max(nonleaf_to_max_child_depth_dict.get(p, 0), curr.depth) + + if curr.children: + new_parents = list(parents) if parents else [] + new_parents.append(curr) + for child in curr.children: + _stack.append((child, new_parents)) + + _weight = 0 + for nonleaf, maxchilddepth in nonleaf_to_max_child_depth_dict.items(): + _weight += len(nonleaf.entities) * 4 * (maxchilddepth - nonleaf.depth) + + _sum = self.sum_entities() if sum_entities is None else sum_entities + return _weight / _sum + def __repr__(self): """ Create an unambiguous, recursive representation of this quad tree. @@ -308,19 +493,18 @@ def __repr__(self): # create a tree with a up to 2 entities in a bucket that # can have a depth of up to 5. - _tree = quadtree.QuadTree(2, 5, rect2.Rect2(100, 100)) + _tree = quadtree.QuadTree(1, 5, rect2.Rect2(100, 100)) # add a few entities to the tree _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) - # prints quadtree(bucket_size=2, max_depth=5, location=rect2(width=100, height=100, mincorner=vector2(x=0, y=0)), depth=0, entities=[], children=[ quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=0, y=0)), depth=1, entities=[ quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=5, y=5))) ], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=50, y=0)), depth=1, entities=[ quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=95, y=5))) ], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=50, y=50)), depth=1, entities=[], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=0, y=50)), depth=1, entities=[], children=[]) ]) - print(repr(_tree)) + # prints quadtree(bucket_size=1, max_depth=5, location=rect2(width=100, height=100, mincorner=vector2(x=0, y=0)), depth=0, entities=[], children=[quadtree(bucket_size=1, max_depth=5, location=rect2(width=50.0, height=50.0, mincorner=vector2(x=0, y=0)), depth=1, entities=[quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=5, y=5)))], children=None), quadtree(bucket_size=1, max_depth=5, location=rect2(width=50.0, height=50.0, mincorner=vector2(x=50.0, y=0)), depth=1, entities=[quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=95, y=5)))], children=None), quadtree(bucket_size=1, max_depth=5, location=rect2(width=50.0, height=50.0, mincorner=vector2(x=50.0, y=50.0)), depth=1, entities=[], children=None), quadtree(bucket_size=1, max_depth=5, location=rect2(width=50.0, height=50.0, mincorner=vector2(x=0, y=50.0)), depth=1, entities=[], children=None)]) :returns: unambiguous, recursive representation of this quad tree :rtype: string """ - pass + return "quadtree(bucket_size={}, max_depth={}, location={}, depth={}, entities={}, children={})".format(self.bucket_size, self.max_depth, repr(self.location), self.depth, self.entities, self.children) def __str__(self): """ @@ -347,12 +531,23 @@ def __str__(self): _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) - # prints quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (max depth: 5), avg ent/leaf: 0.5 (target 2), misplaced weight = 0 (0 best, >1 bad)) + # prints quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (allowed max depth: 1, actual: 5), avg ent/leaf: 0.5 (target 1), misplaced weight 0.0 (0 best, >1 bad) + print(_tree) :returns: human-readable representation of this quad tree :rtype: string """ - pass + + nodes_per_depth = self.find_nodes_per_depth() + _ents_per_depth = self.find_entities_per_depth() + + _nodes_ents_per_depth_str = "[ {} ]".format(', '.join("{}: ({}, {})".format(dep, nodes_per_depth[dep], _ents_per_depth[dep]) for dep in nodes_per_depth.keys())) + + _sum = self.sum_entities(entities_per_depth=_ents_per_depth) + _max_depth = max(_ents_per_depth.keys()) + _avg_ent_leaf = self.calculate_avg_ents_per_leaf() + _mispl_weight = self.calculate_weight_misplaced_ents(sum_entities=_sum) + return "quadtree(at {} with {} entities here ({} in total); (nodes, entities) per depth: {} (allowed max depth: {}, actual: {}), avg ent/leaf: {} (target {}), misplaced weight {} (0 best, >1 bad)".format(self.location, len(self.entities), _sum, _nodes_ents_per_depth_str, _max_depth, self.max_depth, _avg_ent_leaf, self.bucket_size, _mispl_weight) @staticmethod def get_code(): diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 60769cd..8854f4f 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -12,6 +12,7 @@ trie, quadtree) +from pygorithm.geometry import (vector2, rect2) class TestStack(unittest.TestCase): def test_stack(self): @@ -372,7 +373,7 @@ def setUp(self): self.rect1 = rect2.Rect2(1, 1, vector2.Vector2(2, 2)) def test_constructor(self): - ent = quadtree.QuadTreeEntity(rect1) + ent = quadtree.QuadTreeEntity(self.rect1) self.assertIsNotNone(ent.aabb) self.assertEqual(1, ent.aabb.width) @@ -381,13 +382,13 @@ def test_constructor(self): self.assertEqual(2, ent.aabb.mincorner.y) def test_repr(self): - ent = quadtree.QuadTreeEntity(rect1) + ent = quadtree.QuadTreeEntity(self.rect1) exp = "quadtreeentity(aabb=rect2(width=1, height=1, mincorner=vector2(x=2, y=2)))" self.assertEqual(exp, repr(ent)) def test_str(self): - ent = quadtree.QuadTreeEntity(rect1) + ent = quadtree.QuadTreeEntity(self.rect1) exp = "entity(at rect(1x1 at <2, 2>))" self.assertEqual(exp, str(ent)) @@ -419,71 +420,71 @@ def test_constructor(self): def test_get_quadrant(self): _tree = quadtree.QuadTree(64, 5, self.big_rect) - ent1 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(320, 175)) + ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(320, 175))) quad1 = _tree.get_quadrant(ent1) self.assertEqual(0, quad1) - ent2 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(600, 450)) + ent2 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(600, 450))) quad2 = _tree.get_quadrant(ent2) self.assertEqual(1, quad2) - ent3 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(700, 950)) + ent3 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(700, 950))) quad3 = _tree.get_quadrant(ent3) self.assertEqual(2, quad3) - ent4 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(0, 495)) + ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(0, 505))) quad4 = _tree.get_quadrant(ent4) self.assertEqual(3, quad4) def test_get_quadrant_none(self): _tree = quadtree.QuadTree(64, 5, self.big_rect) - ent1 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(497, 150)) + ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(497, 150))) self.assertEqual(-1, _tree.get_quadrant(ent1)) - ent2 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(800, 499)) + ent2 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(800, 499))) self.assertEqual(-1, _tree.get_quadrant(ent2)) - ent3 = quadtree.QuadTreeEntity(15, 15, vector2.Vector2(481, 505)) + ent3 = quadtree.QuadTreeEntity(rect2.Rect2(15, 15, vector2.Vector2(486, 505))) self.assertEqual(-1, _tree.get_quadrant(ent3)) - ent4 = quadtree.QuadTreeEntity(5, 20, vector2.Vector2(15, 490)) + ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 20, vector2.Vector2(15, 490))) self.assertEqual(-1, _tree.get_quadrant(ent4)) - ent5 = quadtree.QuadTreeEntity(17, 34, vector2.Vector2(485, 470)) + ent5 = quadtree.QuadTreeEntity(rect2.Rect2(17, 34, vector2.Vector2(485, 470))) self.assertEqual(-1, _tree.get_quadrant(ent5)) def test_get_quadrant_shifted(self): _tree = quadtree.QuadTree(64, 5, self.big_rect_sub_3) - ent1 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(515, 600)) + ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(515, 600))) self.assertEqual(0, _tree.get_quadrant(ent1)) - ent2 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(800, 550)) + ent2 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(800, 550))) self.assertEqual(1, _tree.get_quadrant(ent2)) - ent3 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(950, 650)) + ent3 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(950, 850))) self.assertEqual(2, _tree.get_quadrant(ent3)) - ent4 = quadtree.QuadTreeEntity(5, 5, vector2.Vector2(15, 551)) + ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(515, 751))) self.assertEqual(3, _tree.get_quadrant(ent4)) def test_get_quadrant_0_shifted(self): _tree = quadtree.QuadTree(64, 5, rect2.Rect2(500, 800, vector2.Vector2(200, 200))) - ent1 = quadtree.QuadTreeEntity(5, 10, vector2.Vector2(445, 224)) + ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 10, vector2.Vector2(445, 224))) self.assertEqual(-1, _tree.get_quadrant(ent1)) - ent2 = quadtree.QuadTreeEntity(11, 17, vector2.Vector2(515, 585)) + ent2 = quadtree.QuadTreeEntity(rect2.Rect2(11, 17, vector2.Vector2(515, 585))) self.assertEqual(-1, _tree.get_quadrant(ent2)) - ent3 = quadtree.QuadTreeEntity(20, 20, vector2.Vector2(440, 700)) + ent3 = quadtree.QuadTreeEntity(rect2.Rect2(20, 20, vector2.Vector2(440, 700))) self.assertEqual(-1, _tree.get_quadrant(ent3)) - ent4 = quadtree.QuadTreeEntity(15, 15, vector2.Vector2(215, 590)) + ent4 = quadtree.QuadTreeEntity(rect2.Rect2(15, 15, vector2.Vector2(215, 590))) self.assertEqual(-1, _tree.get_quadrant(ent4)) - ent5 = quadtree.QuadTreeEntity(7, 12, vector2.Vector2(449, 589)) + ent5 = quadtree.QuadTreeEntity(rect2.Rect2(7, 12, vector2.Vector2(449, 589))) self.assertEqual(-1, _tree.get_quadrant(ent5)) def test_split_empty(self): @@ -493,53 +494,53 @@ def test_split_empty(self): self.assertIsNotNone(_tree1.children) self.assertEqual(4, len(_tree1.children)) - self.assertEqual(500, _tree1.children[0].width) - self.assertEqual(500, _tree1.children[0].height) - self.assertEqual(0, _tree1.children[0].mincorner.x) - self.assertEqual(0, _tree1.children[0].mincorner.y) + self.assertEqual(500, _tree1.children[0].location.width) + self.assertEqual(500, _tree1.children[0].location.height) + self.assertEqual(0, _tree1.children[0].location.mincorner.x) + self.assertEqual(0, _tree1.children[0].location.mincorner.y) self.assertEqual(1, _tree1.children[0].depth) self.assertEqual(64, _tree1.children[0].bucket_size) self.assertEqual(5, _tree1.children[0].max_depth) - self.assertEqual(500, _tree1.children[1].width) - self.assertEqual(500, _tree1.children[1].height) - self.assertEqual(500, _tree1.children[1].mincorner.x) - self.assertEqual(0, _tree1.children[1].mincorner.y) + self.assertEqual(500, _tree1.children[1].location.width) + self.assertEqual(500, _tree1.children[1].location.height) + self.assertEqual(500, _tree1.children[1].location.mincorner.x) + self.assertEqual(0, _tree1.children[1].location.mincorner.y) - self.assertEqual(500, _tree1.children[2].width) - self.assertEqual(500, _tree1.children[2].height) - self.assertEqual(500, _tree1.children[2].mincorner.x) - self.assertEqual(500, _tree1.children[2].mincorner.y) + self.assertEqual(500, _tree1.children[2].location.width) + self.assertEqual(500, _tree1.children[2].location.height) + self.assertEqual(500, _tree1.children[2].location.mincorner.x) + self.assertEqual(500, _tree1.children[2].location.mincorner.y) - self.assertEqual(500, _tree1.children[3].width) - self.assertEqual(500, _tree1.children[3].height) - self.assertEqual(0, _tree1.children[3].mincorner.x) - self.assertEqual(500, _tree1.children[3].mincorner.y) + self.assertEqual(500, _tree1.children[3].location.width) + self.assertEqual(500, _tree1.children[3].location.height) + self.assertEqual(0, _tree1.children[3].location.mincorner.x) + self.assertEqual(500, _tree1.children[3].location.mincorner.y) - - _tree2 = _tree1.children[3] + # bottom-right + _tree2 = _tree1.children[2] _tree2.split() - self.assertEqual(250, _tree2.children[0].width) - self.assertEqual(250, _tree2.children[0].height) - self.assertEqual(500, _tree2.children[0].mincorner.x) - self.assertEqual(500, _tree2.children[0].mincorner.y) + self.assertEqual(250, _tree2.children[0].location.width) + self.assertEqual(250, _tree2.children[0].location.height) + self.assertEqual(500, _tree2.children[0].location.mincorner.x) + self.assertEqual(500, _tree2.children[0].location.mincorner.y) self.assertEqual(2, _tree2.children[0].depth) - self.assertEqual(250, _tree2.children[1].width) - self.assertEqual(250, _tree2.children[1].height) - self.assertEqual(750, _tree2.children[1].mincorner.x) - self.assertEqual(500, _tree2.children[1].mincorner.y) + self.assertEqual(250, _tree2.children[1].location.width) + self.assertEqual(250, _tree2.children[1].location.height) + self.assertEqual(750, _tree2.children[1].location.mincorner.x) + self.assertEqual(500, _tree2.children[1].location.mincorner.y) - self.assertEqual(250, _tree2.children[2].width) - self.assertEqual(250, _tree2.children[2].height) - self.assertEqual(750, _tree2.children[2].mincorner.x) - self.assertEqual(750, _tree2.children[2].mincorner.y) + self.assertEqual(250, _tree2.children[2].location.width) + self.assertEqual(250, _tree2.children[2].location.height) + self.assertEqual(750, _tree2.children[2].location.mincorner.x) + self.assertEqual(750, _tree2.children[2].location.mincorner.y) - self.assertEqual(250, _tree2.children[3].width) - self.assertEqual(250, _tree2.children[3].height) - self.assertEqual(500, _tree2.children[3].mincorner.x) - self.assertEqual(750, _tree2.children[3].mincorner.y) + self.assertEqual(250, _tree2.children[3].location.width) + self.assertEqual(250, _tree2.children[3].location.height) + self.assertEqual(500, _tree2.children[3].location.mincorner.x) + self.assertEqual(750, _tree2.children[3].location.mincorner.y) def test_split_entities(self): @@ -553,24 +554,24 @@ def test_split_entities(self): _tree.split() self.assertEqual(1, len(_tree.children[0].entities)) - self.assertEqual(50, _tree.children[0].entities[0].mincorner.x) - self.assertEqual(50, _tree.children[0].entities[0].mincorner.y) + self.assertEqual(50, _tree.children[0].entities[0].aabb.mincorner.x) + self.assertEqual(50, _tree.children[0].entities[0].aabb.mincorner.y) self.assertEqual(1, len(_tree.children[1].entities)) - self.assertEqual(550, _tree.children[1].entities[0].mincorner.x) - self.assertEqual(75, _tree.children[1].entities[0].mincorner.y) + self.assertEqual(550, _tree.children[1].entities[0].aabb.mincorner.x) + self.assertEqual(75, _tree.children[1].entities[0].aabb.mincorner.y) self.assertEqual(1, len(_tree.children[2].entities)) - self.assertEqual(565, _tree.children[2].entities[0].mincorner.x) - self.assertEqual(585, _tree.children[2].entities[0].mincorner.y) + self.assertEqual(565, _tree.children[2].entities[0].aabb.mincorner.x) + self.assertEqual(585, _tree.children[2].entities[0].aabb.mincorner.y) self.assertEqual(1, len(_tree.children[3].entities)) - self.assertEqual(95, _tree.children[3].entities[0].mincorner.x) - self.assertEqual(900, _tree.children[3].entities[0].mincorner.y) + self.assertEqual(95, _tree.children[3].entities[0].aabb.mincorner.x) + self.assertEqual(900, _tree.children[3].entities[0].aabb.mincorner.y) self.assertEqual(1, len(_tree.entities)) - self.assertEqual(495, _tree.entities[0].mincorner.x) - self.assertEqual(167, _tree.entities[0].mincorner.y) + self.assertEqual(495, _tree.entities[0].aabb.mincorner.x) + self.assertEqual(167, _tree.entities[0].aabb.mincorner.y) _tree2 = _tree.children[3] _tree2.split() @@ -579,8 +580,8 @@ def test_split_entities(self): self.assertEqual(0, len(_tree2.children[i].entities), msg="i={}".format(i)) self.assertEqual(1, len(_tree2.children[3].entities)) - self.assertEqual(95, _tree2.children[3].entities[0].mincorner.x) - self.assertEqual(900, _tree2.children[3].entities[0].mincorner.y) + self.assertEqual(95, _tree2.children[3].entities[0].aabb.mincorner.x) + self.assertEqual(900, _tree2.children[3].entities[0].aabb.mincorner.y) # note for test_think and test_insert we're testing the worst-case scenario # for a quad tree (everythings all bunched up in a corner) hence the instant @@ -593,31 +594,35 @@ def test_split_entities(self): # (even at 1000x1000 world!) past depth 5 or so. def test_think(self): - ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(15, 15))) - ent2 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(20, 20))) - ent3 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(0, 0))) - ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(5, 0))) - ent5 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(0, 5))) + ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(15, 15))) + ent2 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(20, 20))) + ent3 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(0, 0))) + ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(5, 0))) + ent5 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(0, 5))) _tree = quadtree.QuadTree(2, 2, self.big_rect, entities = [ ent1, ent2, ent3, ent4, ent5 ]) + _tree.think(True) - self.assertIsNotNone(_tree.children) # depth 0 - self.assertIsNotNone(_tree.children[0].children) # depth 1 - self.assertIsNotNone(_tree.children[0].children[0].children) # depth 2 - self.assertIsNone(_tree.children[0].children[0].children[0].children) # depth 3 shouldn't happen because - self.assertEqual(5, len(_tree.children[0].children[0].children[0].entities)) # max_depth reached + self.assertIsNotNone(_tree.children) # depth 1 + self.assertIsNotNone(_tree.children[0].children) # depth 2 + self.assertIsNone(_tree.children[0].children[0].children) # depth 3 shouldn't happen because + self.assertEqual(5, len(_tree.children[0].children[0].entities)) # max_depth reached + + + _tree2 = quadtree.QuadTree(2, 2, self.big_rect, entities = [ ent1, ent2 ]) + _tree2.think(True) + self.assertIsNone(_tree2.children) def test_insert(self): _tree = quadtree.QuadTree(2, 2, self.big_rect) - _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(15, 15)))) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(15, 15)))) self.assertIsNone(_tree.children) - _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(20, 20)))) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(20, 20)))) self.assertIsNone(_tree.children) - _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, rect2.Rect2(0, 0)))) - self.assertIsNotNone(_tree.children) # depth 0 - self.assertIsNotNone(_tree.children[0].children) # depth 1 - self.assertIsNotNone(_tree.children[0].children[0].children) # depth 2 - self.assertIsNone(_tree.children[0].children[0].children[0].children) # depth 3 shouldn't happen because + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(0, 0)))) + self.assertIsNotNone(_tree.children) # depth 1 + self.assertIsNotNone(_tree.children[0].children) # depth 2 + self.assertIsNone(_tree.children[0].children[0].children) # depth 3 shouldn't happen because self.assertEqual(3, len(_tree.children[0].children[0].entities)) # max_depth reached def test_retrieve(self): @@ -629,8 +634,8 @@ def test_retrieve(self): retr = _tree.retrieve_collidables(ent1) self.assertIsNotNone(retr) self.assertEqual(1, len(retr)) - self.assertEqual(25, retr.mincorner.x) - self.assertEqual(25, retr.mincorner.y) + self.assertEqual(25, retr[0].aabb.mincorner.x) + self.assertEqual(25, retr[0].aabb.mincorner.y) # note this is not nicely in a quadrant ent2 = quadtree.QuadTreeEntity(rect2.Rect2(20, 10, vector2.Vector2(490, 300))) @@ -644,25 +649,34 @@ def test_retrieve(self): ent3 = quadtree.QuadTreeEntity(rect2.Rect2(15, 10, vector2.Vector2(700, 450))) _tree.insert_and_think(ent3) - # ent1 should collide with ent1 or ent2, - # ent2 with ent1, ent2, or ent3 + ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(900, 900))) + _tree.insert_and_think(ent4) + + # ent1 should collide with ent1 or ent2 + # ent2 with ent1 or ent2, or ent3 # ent3 with ent2 or ent3 + # ent4 with ent2 or ent4 retr = _tree.retrieve_collidables(ent1) self.assertIsNotNone(retr) self.assertEqual(2, len(retr)) - self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 25), None), str(retr)) - self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 490), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 25), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 490), None), str(retr)) retr = _tree.retrieve_collidables(ent2) self.assertEqual(3, len(retr)) - self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 25), None), str(retr)) - self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 490), None), str(retr)) - self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 700), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 25), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 490), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 700), None), str(retr)) retr = _tree.retrieve_collidables(ent3) self.assertEqual(2, len(retr)) - self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 490), None), str(retr)) - self.assertIsNotNone(next((e for e in retr if e.mincorner.x == 700), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 490), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 700), None), str(retr)) + + retr = _tree.retrieve_collidables(ent4) + self.assertEqual(2, len(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 900), None), str(retr)) + self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 490), None), str(retr)) def test_ents_per_depth(self): _tree = quadtree.QuadTree(3, 5, self.big_rect) @@ -671,11 +685,24 @@ def test_ents_per_depth(self): _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(300, 499)))) self.assertDictEqual({ 0: 2 }, _tree.find_entities_per_depth()) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(800, 600)))) - self.assertDictEqual({ 0: 1, 1: 2 }, _tree.find_entities_per_depth()) + self.assertDictEqual({ 0: 3 }, _tree.find_entities_per_depth()) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(450, 300)))) self.assertDictEqual({ 0: 1, 1: 3 }, _tree.find_entities_per_depth()) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(150, 100)))) - self.assertDictEqual({ 0: 1, 1: 1, 2: 3 }, _tree.find_entities_per_depth()) + self.assertDictEqual({ 0: 1, 1: 4 }, _tree.find_entities_per_depth()) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(80, 40)))) + self.assertDictEqual({ 0: 1, 1: 1, 2: 4 }, _tree.find_entities_per_depth()) + + def test_nodes_per_depth(self): + _tree = quadtree.QuadTree(1, 5, self.big_rect) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(50, 50)))) + self.assertDictEqual({ 0: 1 }, _tree.find_nodes_per_depth()) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(450, 450)))) + self.assertDictEqual({ 0: 1, 1: 4, 2: 4 }, _tree.find_nodes_per_depth()) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(550, 550)))) + self.assertDictEqual({ 0: 1, 1: 4, 2: 4 }, _tree.find_nodes_per_depth()) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(850, 550)))) + self.assertDictEqual({ 0: 1, 1: 4, 2: 8 }, _tree.find_nodes_per_depth()) def test_sum_ents(self): # it shouldn't matter where we put entities in, adding entities @@ -687,7 +714,7 @@ def test_sum_ents(self): h = random.randrange(1, 10) x = random.uniform(0, 1000 - w) y = random.uniform(0, 1000 - h) - ent = quadtree.QuadTreeEntity(w, h, vector2.Vector2(x, y)) + ent = quadtree.QuadTreeEntity(rect2.Rect2(w, h, vector2.Vector2(x, y))) _tree.insert_and_think(ent) # avoid calculating sum every loop which would take way too long. @@ -706,48 +733,58 @@ def test_avg_ents_per_leaf(self): _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(75, 35)))) self.assertEqual(1, _tree.calculate_avg_ents_per_leaf()) # 1 ent on 1 leaf _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(300, 499)))) - self.asserttEqual(2, _tree.calculate_avg_ents_per_leaf()) # 2 ents 1 leaf + self.assertEqual(2, _tree.calculate_avg_ents_per_leaf()) # 2 ents 1 leaf _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(800, 600)))) - self.asserttEqual(0.5, _tree.calculate_avg_ents_per_leaf()) # 2 ents 4 leafs (1 misplaced) + self.assertEqual(3, _tree.calculate_avg_ents_per_leaf()) # 3 ents 1 leaf _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(450, 300)))) - self.asserttEqual(0.75, _tree.calculate_avg_ents_per_leaf()) # 3 ents 4 leafs (1 misplaced) + self.assertEqual(0.75, _tree.calculate_avg_ents_per_leaf()) # 3 ents 4 leafs (1 misplaced) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(150, 100)))) - self.asserttEqual(0.5, _tree.calculate_avg_ents_per_leaf()) # 4 ents 8 leafs (1 misplaced) + self.assertEqual(1, _tree.calculate_avg_ents_per_leaf()) # 4 ents 4 leafs (1 misplaced) + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(450, 450)))) + self.assertAlmostEqual(5/7, _tree.calculate_avg_ents_per_leaf()) # 5 ents 7 leafs (1 misplaced) def test_misplaced_ents(self): _tree = quadtree.QuadTree(3, 5, self.big_rect) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(75, 35)))) self.assertEqual(0, _tree.calculate_weight_misplaced_ents()) # 0 misplaced, 1 total _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(300, 499)))) - self.asserttEqual(0, _tree.calculate_weight_misplaced_ents()) # 0 misplaced, 2 total + self.assertEqual(0, _tree.calculate_weight_misplaced_ents()) # 0 misplaced, 2 total _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(800, 600)))) - self.assertAlmostEqual(4/3, _tree.calculate_weight_misplaced_ents()) # 1 misplaced (1 deep), 3 total - _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(450, 300)))) + self.assertEqual(0, _tree.calculate_weight_misplaced_ents()) # 0 misplaced 3 total + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(550, 700)))) self.assertAlmostEqual(1, _tree.calculate_weight_misplaced_ents()) # 1 misplaced (1 deep), 4 total - _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(150, 100)))) - self.assertAlmostEqual(8/5, _tree.calculate_weight_misplaced_ents()) # 1 misplaced (2 deep), 5 total + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(900, 900)))) + self.assertAlmostEqual(4/5, _tree.calculate_weight_misplaced_ents()) # 1 misplaced (1 deep), 5 total + _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(950, 950)))) + self.assertAlmostEqual(8/6, _tree.calculate_weight_misplaced_ents()) # 1 misplaced (2 deep), 6 total def test_repr(self): - _tree = quadtree.QuadTree(2, 5, rect2.Rect2(100, 100)) + _tree = quadtree.QuadTree(1, 5, rect2.Rect2(100, 100)) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) _olddiff = self.maxDiff - def cleanup(self2): + def cleanup(self2=self): self2.maxDiff = _olddiff self.addCleanup(cleanup) self.maxDiff = None - self.assertEqual("quadtree(bucket_size=2, max_depth=5, location=rect2(width=100, height=100, mincorner=vector2(x=0, y=0)), depth=0, entities=[], children=[ quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=0, y=0)), depth=1, entities=[ quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=5, y=5))) ], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=50, y=0)), depth=1, entities=[ quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=95, y=5))) ], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=50, y=50)), depth=1, entities=[], children=[]), quadtree(bucket_size=2, max_depth=5, location=rect2(width=50, height=50, mincorner=vector2(x=0, y=50)), depth=1, entities=[], children=[]) ])", repr(_tree)) + self.assertEqual("quadtree(bucket_size=1, max_depth=5, location=rect2(width=100, height=100, mincorner=vector2(x=0, y=0)), depth=0, entities=[], children=[quadtree(bucket_size=1, max_depth=5, location=rect2(width=50.0, height=50.0, mincorner=vector2(x=0, y=0)), depth=1, entities=[quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=5, y=5)))], children=None), quadtree(bucket_size=1, max_depth=5, location=rect2(width=50.0, height=50.0, mincorner=vector2(x=50.0, y=0)), depth=1, entities=[quadtreeentity(aabb=rect2(width=2, height=2, mincorner=vector2(x=95, y=5)))], children=None), quadtree(bucket_size=1, max_depth=5, location=rect2(width=50.0, height=50.0, mincorner=vector2(x=50.0, y=50.0)), depth=1, entities=[], children=None), quadtree(bucket_size=1, max_depth=5, location=rect2(width=50.0, height=50.0, mincorner=vector2(x=0, y=50.0)), depth=1, entities=[], children=None)])", repr(_tree)) def test_str(self): - _tree = quadtree.QuadTree(2, 5, rect2.Rect2(100, 100)) + _tree = quadtree.QuadTree(1, 5, rect2.Rect2(100, 100)) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) - self.assertEqual("quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (max depth: 5), avg ent/leaf: 0.5 (target 2), misplaced weight = 0 (0 best, >1 bad))", str(_tree)) + _olddiff = self.maxDiff + def cleanup(self2=self): + self2.maxDiff = _olddiff + + self.addCleanup(cleanup) + self.maxDiff = None + self.assertEqual("quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (allowed max depth: 1, actual: 5), avg ent/leaf: 0.5 (target 1), misplaced weight 0.0 (0 best, >1 bad)", str(_tree)) if __name__ == '__main__': unittest.main() From 43d24e5ac5a165c0cb2b19917360b7c571444750 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 3 Sep 2017 10:01:38 -0700 Subject: [PATCH 204/251] Fix format order issue in quadtree __str__ The text was incorrect (allowed and actual depth were swapped) * pygorithm/data_structures/quadtree.py - fix __str__ * tests/test_data_structure.py - fix quadtree __str__ tests --- pygorithm/data_structures/quadtree.py | 2 +- tests/test_data_structure.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pygorithm/data_structures/quadtree.py b/pygorithm/data_structures/quadtree.py index f0e0fe3..67fd8ca 100644 --- a/pygorithm/data_structures/quadtree.py +++ b/pygorithm/data_structures/quadtree.py @@ -547,7 +547,7 @@ def __str__(self): _max_depth = max(_ents_per_depth.keys()) _avg_ent_leaf = self.calculate_avg_ents_per_leaf() _mispl_weight = self.calculate_weight_misplaced_ents(sum_entities=_sum) - return "quadtree(at {} with {} entities here ({} in total); (nodes, entities) per depth: {} (allowed max depth: {}, actual: {}), avg ent/leaf: {} (target {}), misplaced weight {} (0 best, >1 bad)".format(self.location, len(self.entities), _sum, _nodes_ents_per_depth_str, _max_depth, self.max_depth, _avg_ent_leaf, self.bucket_size, _mispl_weight) + return "quadtree(at {} with {} entities here ({} in total); (nodes, entities) per depth: {} (allowed max depth: {}, actual: {}), avg ent/leaf: {} (target {}), misplaced weight {} (0 best, >1 bad)".format(self.location, len(self.entities), _sum, _nodes_ents_per_depth_str, self.max_depth, _max_depth, _avg_ent_leaf, self.bucket_size, _mispl_weight) @staticmethod def get_code(): diff --git a/tests/test_data_structure.py b/tests/test_data_structure.py index 8854f4f..9e26609 100644 --- a/tests/test_data_structure.py +++ b/tests/test_data_structure.py @@ -784,7 +784,7 @@ def cleanup(self2=self): self.addCleanup(cleanup) self.maxDiff = None - self.assertEqual("quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (allowed max depth: 1, actual: 5), avg ent/leaf: 0.5 (target 1), misplaced weight 0.0 (0 best, >1 bad)", str(_tree)) + self.assertEqual("quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (allowed max depth: 5, actual: 1), avg ent/leaf: 0.5 (target 1), misplaced weight 0.0 (0 best, >1 bad)", str(_tree)) if __name__ == '__main__': unittest.main() From b660302058b5899f23ff1500b9f3e343a05eb0c1 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 3 Sep 2017 10:04:54 -0700 Subject: [PATCH 205/251] Quadtree documentation improvement Documentation now matches actual result * pygorithm/data_structures/quadtree.py - __str__ documentation change --- pygorithm/data_structures/quadtree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/data_structures/quadtree.py b/pygorithm/data_structures/quadtree.py index 67fd8ca..a2d3936 100644 --- a/pygorithm/data_structures/quadtree.py +++ b/pygorithm/data_structures/quadtree.py @@ -531,7 +531,7 @@ def __str__(self): _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(5, 5)))) _tree.insert_and_think(quadtree.QuadTreeEntity(rect2.Rect2(2, 2, vector2.Vector2(95, 5)))) - # prints quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (allowed max depth: 1, actual: 5), avg ent/leaf: 0.5 (target 1), misplaced weight 0.0 (0 best, >1 bad) + # prints quadtree(at rect(100x100 at <0, 0>) with 0 entities here (2 in total); (nodes, entities) per depth: [ 0: (1, 0), 1: (4, 2) ] (allowed max depth: 5, actual: 1), avg ent/leaf: 0.5 (target 1), misplaced weight 0.0 (0 best, >1 bad) print(_tree) :returns: human-readable representation of this quad tree From ddc9f57018c2a9f634ff328a238421971ec078d5 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sun, 3 Sep 2017 10:08:39 -0700 Subject: [PATCH 206/251] Minor quadtree documentation Minor update to __repr__ documentation for quadtree * pygorithm/data_structures/quadtree.py - change __repr__ documentation --- pygorithm/data_structures/quadtree.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pygorithm/data_structures/quadtree.py b/pygorithm/data_structures/quadtree.py index a2d3936..e04c73b 100644 --- a/pygorithm/data_structures/quadtree.py +++ b/pygorithm/data_structures/quadtree.py @@ -482,7 +482,9 @@ def calculate_weight_misplaced_ents(self, sum_entities=None): def __repr__(self): """ - Create an unambiguous, recursive representation of this quad tree. + Create an unambiguous representation of this quad tree. + + This is implemented iteratively. Example: From 68e02b048a3abc4180a8d0867217cc42c1b902a9 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 4 Sep 2017 07:12:41 +0530 Subject: [PATCH 207/251] Released version 1.0.4 on pypi --- setup.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/setup.py b/setup.py index 7543822..71ec5dc 100644 --- a/setup.py +++ b/setup.py @@ -1,21 +1,21 @@ from setuptools import setup, find_packages # To use a consistent encoding -from codecs import open +# from codecs import open from os import path here = path.abspath(path.dirname(__file__)) # Get the long description from the README file -with open(path.join(here, 'README.rst'), encoding='utf-8') as f: - long_description = f.read() +# with open('README.rst') as f: +# long_description = f.read() setup( name='pygorithm', - version='1.0', + version='1.0.4', description='A Python algorithms module for learning', - long_description=long_description, + long_description=open('README.rst').read(), # The project's main homepage. - url='https://github.com/OmkarPathak/pygorithms', + url='https://github.com/OmkarPathak/pygorithm', # Author details author='Omkar Pathak', author_email='omkarpathak27@gmail.com', @@ -37,6 +37,7 @@ 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', ], packages=find_packages() ) From dae9c10eed7212d52464f4a1783f6143967e0d98 Mon Sep 17 00:00:00 2001 From: kgashok Date: Tue, 5 Sep 2017 08:54:21 +0530 Subject: [PATCH 208/251] Update merge_sort.py show `merge` code as well --- pygorithm/sorting/merge_sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index d07d51a..ccd79d9 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -66,4 +66,4 @@ def get_code(): :return: source code """ - return inspect.getsource(sort) + return inspect.getsource(sort) + "\n" + inspect.getsource(merge) From ce9d89e1b898215d1b623913b5b5c57698f1fa7e Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Mon, 4 Sep 2017 08:58:10 -0700 Subject: [PATCH 209/251] Skeleton for extrapolated intersection This problem is definitely difficult and common enough to warrant its own module, but it doesn't define any new classes. * docs/Geometry.rst - autodoc the new module * pygorithm/geometry/extrapolated_intersection.py - first skeleton * tests/test_geometry.py - skeleton tests for extrap. intr --- docs/Geometry.rst | 7 +- .../geometry/extrapolated_intersection.py | 195 ++++++++++++++++++ tests/test_geometry.py | 86 +++++++- 3 files changed, 286 insertions(+), 2 deletions(-) create mode 100644 pygorithm/geometry/extrapolated_intersection.py diff --git a/docs/Geometry.rst b/docs/Geometry.rst index 46690af..c206f44 100644 --- a/docs/Geometry.rst +++ b/docs/Geometry.rst @@ -55,6 +55,7 @@ Features * Algorithms available: - Separating Axis Theorem (polygon2) - Broad-phase (rect2) + - Extrapolated intersection (extrapolated_intersection) Vector2 ------- @@ -92,6 +93,10 @@ Axis-Aligned Rectangle :special-members: :private-members: - +Extrapolated Intersection +------------------------- + +.. automodule:: pygorithm.geometry.extrapolated_intersection + :members: \ No newline at end of file diff --git a/pygorithm/geometry/extrapolated_intersection.py b/pygorithm/geometry/extrapolated_intersection.py new file mode 100644 index 0000000..47a055f --- /dev/null +++ b/pygorithm/geometry/extrapolated_intersection.py @@ -0,0 +1,195 @@ +""" +Author: Timothy Moore +Created On: 4th September 2017 + +Contains various approaches to determining if a polygon will +intersect another polygon as one or both polygons go along +a a single direction at a constant speed. + +This problem could be thought of as one of extrapolation - +given these initial conditions, extrapolate to determine +if intersections will occur. + +.. note:: + + Touching is not considered intersecting in this module. Touching + is determined using `math.isclose` + +""" + +def calculate_one_moving_and_one_stationary(poly1, poly1_offset, poly1_velocity, poly2, poly2_offset): + """ + Determine if the moving polygon will intersect the stationary polygon. + + This is the simplest question. Given two polygons, one moving and one not, + determine if the two polygons will ever intersect (assuming they maintain + constant velocity). + + :param poly1: the geometry of the polygon that is moving + :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly1_offset: the starting location of the moving polygon + :type poly1_offset: :class:`pygorithm.geometry.vector2.Vector2` + :param poly1_velocity: the velocity of the moving polygon + :type poly1_velocity: :class:`pygorithm.geometry.vector2.Vector2` + :param poly2: the geometry of the stationary polygon + :type poly2: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly2_offset: the offset of the stationary polygon + :type poly2_offset: :class:`pygorithm.geometry.vector2.Vector2` + :returns: if they will intersect + :rtype: bool + """ + pass + +def calculate_one_moving_one_stationary_distancelimit(poly1, poly1_offset, poly1_velocity, poly2, poly2_offset, max_distance): + """ + Determine if the moving polygon will intersect the stationary polygon + within some distance. + + This is a step up, and very similar to the actual problem many any-angle + pathfinding algorithms run into. Given two polygons, 1 moving and 1 + stationary, determine if the first polygon will intersect the second + polygon before moving a specified total distance. + + :param poly1: the geometry of the polygon that is moving + :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly1_offset: the starting location of the moving polygon + :type poly1_offset: :class:`pygorithm.geometry.vector2.Vector2` + :param poly1_velocity: the velocity of the moving polygon + :type poly1_velocity: :class:`pygorithm.geometry.vector2.Vector2` + :param poly2: the geometry of the stationary polygon + :type poly2: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly2_offset: the offset of the stationary polygon + :type poly2_offset: :class:`pygorithm.geometry.vector2.Vector2` + :param max_distance: the max distance that poly1 can go + :type max_distance: :class:`numbers.Number` + :returns: if they will intersect + :rtype: bool + """ + pass + +def calculate_one_moving_one_stationary_along_path(poly1, poly1_start, poly1_end, poly2, poly2_offset): + """ + Determine if the moving polygon will intersect the stationary polygon as + it moves from the start to the end. + + This is a rewording of :py:func:`.calculate_one_moving_one_stationary_distancelimit` + that is more common. Given two polygons, 1 moving and 1 stationary, where the + moving polygon is going at some speed from one point to another, determine if + the two polygons will intersect. + + :param poly1: the geometry of the polygon that is moving + :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly1_start: where the moving polygon begins moving from + :type poly1_start: :class:`pygorithm.geometry.vector2.Vector2` + :param poly1_end: where the moving polygon stops moving + :type poly1_end: :class:`pygorithm.geometry.vector2.Vector2` + :param poly2: the geometry of the stationary polygon + :type poly2: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly2_offset: the location of the second polygon + :type poly2_offset: :class:`pygorithm.geometry.vector2.Vector2` + :returns: if they will intersect + :rtype: bool + """ + pass + + +def calculate_one_moving_many_stationary(poly1, poly1_offset, poly1_velocity, other_poly_offset_tuples): + """ + Determine if the moving polygon will intersect anything as it + moves at a constant direction and speed forever. + + This is the simplest arrangement of this problem with a collection + of stationary polygons. Given many polygons of which 1 is moving, + determine if the moving polygon intersects the other polygons now or at + some point in the future if it moves at some constant direction and + speed forever. + + This does not verify the stationary polygons are not intersecting. + + :param poly1: the geometry of the polygon that is moving + :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly1_offset: the starting location of the moving polygon + :type poly1_offset: :class:`pygorithm.geometry.vector2.Vector2` + :param poly1_velocity: the velocity of the moving polygon + :type poly1_velocity: :class:`pygorithm.geometry.vector2.Vector2` + :param other_poly_offset_tuples: list of (polygon, offset) of the stationary polygons + :type other_poly_offset_tuples: list of (:class:`pygorithm.geometry.polygon2.Polygon2`, :class:`pygorithm.geometry.vector2.Vector2`) + :returns: if an intersection will occur + :rtype: bool + """ + pass + +def calculate_one_moving_many_stationary_distancelimit(poly1, poly1_offset, poly1_velocity, max_distance, other_poly_offset_tuples): + """ + Determine if the moving polygon will intersect anyything as + it moves in a constant direction and speed for a certain + distance. + + This does not verify the stationary polygons are not intersecting. + + :param poly1: the geometry of the polygon that is moving + :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly1_offset: the starting location of the moving polygon + :type poly1_offset: :class:`pygorithm.geometry.vector2.Vector2` + :param poly1_velocity: the velocity of the moving polygon + :type poly1_velocity: :class:`pygorithm.geometry.vector2.Vector2` + :param max_distance: the max distance the polygon will go + :type max_distance: :class:`numbers.Number` + :param other_poly_offset_tuples: list of (polygon, offset) of the stationary polygons + :type other_poly_offset_tuples: list of (:class:`pygorithm.geometry.polygon2.Polygon2`, :class:`pygorithm.geometry.vector2.Vector2`) + :returns: if an intersection will occur + :rtype: bool + """ + pass + +def calculate_one_moving_many_stationary_along_path(poly1, poly1_start, poly1_end, other_poly_offset_tuples): + """ + Determine if a polygon that moves from one point to another + will intersect anything. + + This is the question that the Theta* family of pathfinding + algorithms require. It is simply a rewording of + :py:func:`.calculate_one_moving_many_stationary_distancelimit` + + This does not verify the stationary polygons are not intersecting. + + :param poly1: the geometry of the polygon that is moving + :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly1_start: where the polygon begins moving from + :type poly1_start: :class:`pygorithm.geometry.vector2.Vector2` + :param poly1_end: where the polygon stops moving at + :type poly1_end: :class:`pygorithm.geometry.vector2.Vector2` + :param other_poly_offset_tuples: list of (polygon, offset) of the stationary polygons + :type other_poly_offset_tuples: list of (:class:`pygorithm.geometry.polygon2.Polygon2`, :class:`pygorithm.geometry.vector2.Vector2`) + :returns: if an intersection will occur + :rtype: bool + """ + +def calculate_two_moving(poly1, poly1_offset, poly1_vel, poly2, poly2_offset, poly2_vel): + """ + Determine if two moving polygons will intersect at some point. + + This is the simplest question when there are multiple moving polygons. + Given two polygons moving at a constant velocity and direction forever, + determine if an intersection will occur. + + It should be possible for the reader to extrapolate from this function + and the process for stationary polygons to create similar functions to + above where all or some polygons are moving. + + :param poly1: the first polygon + :type poly1: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly1_offset: where the first polygon starts at + :type poly1_offset: :class:`pygorithm.geometry.vector2.Vector2` + :param poly1_vel: the velocity of the first polygon + :type poly1_vel: :class:`pygorithm.geometry.vector2.Vector2` + :param poly2: the second polygon + :type poly2: :class:`pygorithm.geometry.polygon2.Polygon2` + :param poly2_offset: where the second polygon starts at + :type poly2_offset: :class:`pygorithm.geometry.vector2.Vector2` + :param poly2_vel: the velocity of the second polygon + :type poly2_vel: :class:`pygorithm.geometry.vector2.Vector2` + :returns: if an intersectino will occur + :rtype: bool + """ + pass \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index ae200c3..da181c8 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1423,6 +1423,90 @@ def test_str(self): self.assertEqual("rect(1x1 at <3, 4>)", str(unit_square)) self.assertEqual("rect(0.707x0.708 at <0.568, 0.877>)", str(ugly_rect)) - + +class TestExtrapolatedIntersection(unittest.TestCase): + def test_one_moving_one_stationary_no_intr(self): + pass + def test_one_moving_one_stationary_touching(self): + pass + def test_one_moving_one_stationary_intr_at_start(self): + pass + def test_one_moving_one_stationary_intr_later(self): + pass + + def test_one_moving_one_stationary_distlimit_no_intr(self): + pass + def test_one_moving_one_stationary_distlimit_touching(self): + pass + def test_one_moving_one_stationary_distlimit_intr_at_start(self): + pass + def test_one_moving_one_stationary_distlimit_intr_later(self): + pass + def test_one_moving_one_stationary_distlimit_touch_at_limit(self): + pass + def test_one_moving_one_stationary_distlimit_intr_after_limit(self): + + def test_one_moving_one_stationary_along_path_no_intr(self): + pass + def test_one_moving_one_stationary_along_path_touching(self): + pass + def test_one_moving_one_stationary_along_path_intr_at_start(self): + pass + def test_one_moving_one_stationary_along_path_intr_later(self): + pass + def test_one_moving_one_stationary_distlimit_touch_at_end(self): + pass + def test_one_moving_one_stationary_distlimit_intr_after_end(self): + + def test_one_moving_many_stationary_no_intr(self): + pass + def test_one_moving_many_stationary_touching(self): + pass + def test_one_moving_many_stationary_intr_at_start(self): + pass + def test_one_moving_many_stationary_intr_later(self): + pass + + def test_one_moving_many_stationary_distlimit_no_intr(self): + pass + def test_one_moving_many_stationary_distlimit_touching(self): + pass + def test_one_moving_many_stationary_distlimit_intr_at_start(self): + pass + def test_one_moving_many_stationary_distlimit_intr_later(self): + pass + def test_one_moving_many_stationary_distlimit_touch_at_limit(self): + pass + def test_one_moving_many_stationary_distlimit_intr_after_limit(self): + pass + + def test_one_moving_many_stationary_along_path_no_intr(self): + pass + def test_one_moving_many_stationary_along_path_touching(self): + pass + def test_one_moving_many_stationary_along_path_intr_at_start(self): + pass + def test_one_moving_many_stationary_along_path_intr_later(self): + pass + def test_one_moving_many_stationary_along_path_touch_at_limit(self): + pass + def test_one_moving_many_stationary_along_path_intr_after_limit(self): + pass + + def test_two_moving_no_intr(self): + pass + def test_two_moving_touching_miss(self): + pass + def test_two_moving_touching_miss_diff_vel(self): + pass + def test_two_moving_intr_ones_start_but_later(self): + pass + def test_two_moving_intr_at_start(self): + pass + def test_two_moving_intr_later(self): + pass + def test_two_moving_intr_later_diff_vel(self): + pass + if __name__ == '__main__': unittest.main() \ No newline at end of file From f044a65804362d2cd25f432b06a033e73d46c50a Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 5 Sep 2017 13:18:50 -0700 Subject: [PATCH 210/251] Begin tests for extrapolated intersection This uses a lot of images because generating tests for these is hard. The image files are all very small (<5kb) so it shouldn't make downloading the repo significantly slower. This algorithm can be tricky to get right so I wanted to have a very exhaustive test suite. * pygorithm/geometry/extrapolated_intersection.py - add more helper functions * pygorithm/geometry/polygon2.py - fix fuzzing test sometimes failing * tests/test_geometry.py - add regression test for polygon, add tests for first two functions of extrapolated_intersection + imgs/test_geometry/test_extrapolated_intersection - images that help visualize what the tests are doing. the naming convention is explained in test_geometry.TestExtrapolatedIntersection docstring --- .../aa01_test_point_line_no_intr.grf | 70 +++++ .../aa02_test_point_line_no_intr.grf | 70 +++++ .../aa03_test_point_line_no_intr.grf | 70 +++++ .../aa04_test_point_line_no_intr.grf | 70 +++++ .../ab01_test_point_line_touching.grf | 70 +++++ .../ab02_test_point_line_touching.grf | 70 +++++ .../ab03_test_point_line_touching.grf | 70 +++++ .../ab04_test_point_line_touching.grf | 70 +++++ ...ac01_test_point_line_touching_at_start.grf | 70 +++++ ...ac02_test_point_line_touching_at_start.grf | 70 +++++ ...ac03_test_point_line_touching_at_start.grf | 70 +++++ ...ac04_test_point_line_touching_at_start.grf | 70 +++++ .../ad01_test_point_line_intr_later.grf | 70 +++++ .../ad02_test_point_line_intr_later.grf | 70 +++++ .../ad03_test_point_line_intr_later.grf | 70 +++++ .../ad04_test_point_line_intr_later.grf | 70 +++++ .../ae01_test_line_line_no_intr.grf | 95 ++++++ .../ae02_test_line_line_no_intr.grf | 95 ++++++ .../ae03_test_line_line_no_intr.grf | 95 ++++++ .../ae04_test_line_line_no_intr.grf | 95 ++++++ .../af01_test_line_line_touching.grf | 95 ++++++ .../af02_test_line_line_touching.grf | 95 ++++++ .../af03_test_line_line_touching.grf | 95 ++++++ .../af04_test_line_line_touching.grf | 95 ++++++ .../ag01_test_line_line_touching_at_start.grf | 95 ++++++ .../ag02_test_line_line_touching_at_start.grf | 95 ++++++ .../ag03_test_line_line_touching_at_start.grf | 95 ++++++ .../ag04_test_line_line_touching_at_start.grf | 95 ++++++ .../ah01_test_line_line_intr_later.grf | 95 ++++++ .../ah02_test_line_line_intr_later.grf | 95 ++++++ .../ah03_test_line_line_intr_later.grf | 95 ++++++ .../ah04_test_line_line_intr_later.grf | 95 ++++++ .../out/aa01_test_point_line_no_intr.png | Bin 0 -> 4339 bytes .../out/aa02_test_point_line_no_intr.png | Bin 0 -> 4325 bytes .../out/aa03_test_point_line_no_intr.png | Bin 0 -> 4457 bytes .../out/aa04_test_point_line_no_intr.png | Bin 0 -> 5021 bytes .../out/ab01_test_point_line_touching.png | Bin 0 -> 4624 bytes .../out/ab02_test_point_line_touching.png | Bin 0 -> 4593 bytes .../out/ab03_test_point_line_touching.png | Bin 0 -> 4423 bytes .../out/ab04_test_point_line_touching.png | Bin 0 -> 5002 bytes ...ac01_test_point_line_touching_at_start.png | Bin 0 -> 4535 bytes ...ac02_test_point_line_touching_at_start.png | Bin 0 -> 3700 bytes ...ac03_test_point_line_touching_at_start.png | Bin 0 -> 5035 bytes .../out/ad01_test_point_line_intr_later.png | Bin 0 -> 5105 bytes .../out/ad02_test_point_line_intr_later.png | Bin 0 -> 4900 bytes .../out/ad03_test_point_line_intr_later.png | Bin 0 -> 4337 bytes .../out/ad04_test_point_line_intr_later.png | Bin 0 -> 4736 bytes .../out/ae01_test_line_line_no_intr.png | Bin 0 -> 4464 bytes .../out/ae02_test_line_line_no_intr.png | Bin 0 -> 5786 bytes .../out/ae03_test_line_line_no_intr.png | Bin 0 -> 5912 bytes .../out/ae04_test_line_line_no_intr.png | Bin 0 -> 4901 bytes .../out/af01_test_line_line_touching.png | Bin 0 -> 4951 bytes .../out/af02_test_line_line_touching.png | Bin 0 -> 4373 bytes .../out/af03_test_line_line_touching.png | Bin 0 -> 4387 bytes .../out/af04_test_line_line_touching.png | Bin 0 -> 3876 bytes .../ag01_test_line_line_touching_at_start.png | Bin 0 -> 4048 bytes .../ag02_test_line_line_touching_at_start.png | Bin 0 -> 4168 bytes .../ag03_test_line_line_touching_at_start.png | Bin 0 -> 4528 bytes .../ag04_test_line_line_touching_at_start.png | Bin 0 -> 5103 bytes .../out/ah01_test_line_line_intr_later.png | Bin 0 -> 5437 bytes .../out/ah02_test_line_line_intr_later.png | Bin 0 -> 5069 bytes .../out/ah03_test_line_line_intr_later.png | Bin 0 -> 4766 bytes .../out/ah04_test_line_line_intr_later.png | Bin 0 -> 5183 bytes .../geometry/extrapolated_intersection.py | 42 +++ pygorithm/geometry/polygon2.py | 2 +- tests/test_geometry.py | 277 +++++++++++++++++- 66 files changed, 2956 insertions(+), 5 deletions(-) create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa02_test_point_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa03_test_point_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa04_test_point_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab01_test_point_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab02_test_point_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab03_test_point_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab04_test_point_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac01_test_point_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac02_test_point_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac03_test_point_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac04_test_point_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad01_test_point_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad02_test_point_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad03_test_point_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad04_test_point_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae01_test_line_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae02_test_line_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae03_test_line_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae04_test_line_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/af01_test_line_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/af02_test_line_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/af03_test_line_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/af04_test_line_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag01_test_line_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag02_test_line_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag03_test_line_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag04_test_line_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah01_test_line_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah02_test_line_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah03_test_line_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah04_test_line_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aa02_test_point_line_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aa03_test_point_line_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aa04_test_point_line_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ab01_test_point_line_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ab02_test_point_line_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ab03_test_point_line_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ab04_test_point_line_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ac01_test_point_line_touching_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ac02_test_point_line_touching_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ac03_test_point_line_touching_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ad01_test_point_line_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ad02_test_point_line_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ad03_test_point_line_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ad04_test_point_line_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ae01_test_line_line_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ae02_test_line_line_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ae03_test_line_line_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ae04_test_line_line_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/af01_test_line_line_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/af02_test_line_line_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/af03_test_line_line_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/af04_test_line_line_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ag01_test_line_line_touching_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ag02_test_line_line_touching_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ag03_test_line_line_touching_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ag04_test_line_line_touching_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ah01_test_line_line_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ah02_test_line_line_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ah03_test_line_line_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ah04_test_line_line_intr_later.png diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.grf new file mode 100644 index 0000000..d08315d --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 6,2;2,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;6,1; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 1 +Points = 1,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa02_test_point_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/aa02_test_point_line_no_intr.grf new file mode 100644 index 0000000..4863c7c --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aa02_test_point_line_no_intr.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 6,2;2,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;1,4; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 1 +Points = 1,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa03_test_point_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/aa03_test_point_line_no_intr.grf new file mode 100644 index 0000000..62c54bd --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aa03_test_point_line_no_intr.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 6,4;2,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,1;1,4; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 1 +Points = 4,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa04_test_point_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/aa04_test_point_line_no_intr.grf new file mode 100644 index 0000000..c24d2a8 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aa04_test_point_line_no_intr.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 4 +PointCount = 2 +Points = 1,2;5,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;6,4; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 1 +Points = 2,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab01_test_point_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/ab01_test_point_line_touching.grf new file mode 100644 index 0000000..5fe7886 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ab01_test_point_line_touching.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 6,2;2,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;2,4; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 1 +Points = 1,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab02_test_point_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/ab02_test_point_line_touching.grf new file mode 100644 index 0000000..08daedb --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ab02_test_point_line_touching.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 6,2;2,0; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;6,2; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 1 +Points = 2,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab03_test_point_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/ab03_test_point_line_touching.grf new file mode 100644 index 0000000..63c576f --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ab03_test_point_line_touching.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 6,2;2,0; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;2,0; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 2,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab04_test_point_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/ab04_test_point_line_touching.grf new file mode 100644 index 0000000..5ef92c3 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ab04_test_point_line_touching.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 6,2;2,0; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 6.25,3;2,0; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 6.25,3; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac01_test_point_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ac01_test_point_line_touching_at_start.grf new file mode 100644 index 0000000..38d8efd --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ac01_test_point_line_touching_at_start.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 6,2;2,0; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,1;3,2; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 4,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac02_test_point_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ac02_test_point_line_touching_at_start.grf new file mode 100644 index 0000000..1942a83 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ac02_test_point_line_touching_at_start.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 6 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 6,2;2,2; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,2;1,2; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 2,2; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac03_test_point_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ac03_test_point_line_touching_at_start.grf new file mode 100644 index 0000000..e397013 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ac03_test_point_line_touching_at_start.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 3,0;3,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,1;4,2; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 3,1; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac04_test_point_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ac04_test_point_line_touching_at_start.grf new file mode 100644 index 0000000..bf9b9df --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ac04_test_point_line_touching_at_start.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 6 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 3,0;3,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,4;2,4; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 3,4; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad01_test_point_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ad01_test_point_line_intr_later.grf new file mode 100644 index 0000000..7add54e --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ad01_test_point_line_intr_later.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 3,0;3,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,2;3,1; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 0,2; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad02_test_point_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ad02_test_point_line_intr_later.grf new file mode 100644 index 0000000..341f88d --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ad02_test_point_line_intr_later.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 3,0;3,4; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 6,2;3,2; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 6,2; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad03_test_point_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ad03_test_point_line_intr_later.grf new file mode 100644 index 0000000..562133e --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ad03_test_point_line_intr_later.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,1;5,3; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 6,2;3,2; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 6,2; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad04_test_point_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ad04_test_point_line_intr_later.grf new file mode 100644 index 0000000..56ee3ed --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ad04_test_point_line_intr_later.grf @@ -0,0 +1,70 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,1;5,3; +LegendText = Line + +[PointSeries2] +FillColor = clBlack +LineColor = clBlue +Size = 3 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 6,4;3,2; +LegendText = Point (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlue +Size = 5 +Style = 0 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 0 +PointCount = 1 +Points = 6,4; +LegendText = Point + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 3 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae01_test_line_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ae01_test_line_line_no_intr.grf new file mode 100644 index 0000000..f7f2df2 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ae01_test_line_line_no_intr.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,4;3,4; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;3,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,3;1,4; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;3,2; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,4;3,3; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae02_test_line_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ae02_test_line_line_no_intr.grf new file mode 100644 index 0000000..2de5dac --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ae02_test_line_line_no_intr.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,4;5,1; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;4,0; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,3;2,4; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,0.5;3,0.5; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,1;4,0; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae03_test_line_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ae03_test_line_line_no_intr.grf new file mode 100644 index 0000000..a6a0b35 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ae03_test_line_line_no_intr.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,4;5,1; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;4,0; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,3;2,4; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 2 +Points = 4,3;6,4; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,1;4,0; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae04_test_line_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ae04_test_line_line_no_intr.grf new file mode 100644 index 0000000..b1b6d18 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ae04_test_line_line_no_intr.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;4,0; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,3;5,0; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,3;2,3; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,4;3,3; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,0;4,0; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/af01_test_line_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/af01_test_line_line_touching.grf new file mode 100644 index 0000000..eb7b8dc --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/af01_test_line_line_touching.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;4,0; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,3;5,0; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,3;2,3; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 5,0;3,3; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,0;4,0; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/af02_test_line_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/af02_test_line_line_touching.grf new file mode 100644 index 0000000..9769188 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/af02_test_line_line_touching.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;2,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;3,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,1;2,1; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 3,3;3,2; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,2;3,2; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/af03_test_line_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/af03_test_line_line_touching.grf new file mode 100644 index 0000000..2375494 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/af03_test_line_line_touching.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;3,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;4,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,1;2,1; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 3,3;2,3; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,3;4,3; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/af04_test_line_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/af04_test_line_line_touching.grf new file mode 100644 index 0000000..d418da9 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/af04_test_line_line_touching.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;1,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;2,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 7 +PointCount = 2 +Points = 1,1;2,1; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 3,3;2,3; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;2,3; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag01_test_line_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ag01_test_line_line_touching_at_start.grf new file mode 100644 index 0000000..2ac6bbb --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ag01_test_line_line_touching_at_start.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;1,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;2,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 2 +Points = 1,1;2,1; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 2,1;3,0; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;2,3; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag02_test_line_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ag02_test_line_line_touching_at_start.grf new file mode 100644 index 0000000..64ed59e --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ag02_test_line_line_touching_at_start.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;3,1; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;3,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 2 +Points = 1,1;1,3; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 1,2;2,2; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,1;3,3; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag03_test_line_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ag03_test_line_line_touching_at_start.grf new file mode 100644 index 0000000..3ac98c2 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ag03_test_line_line_touching_at_start.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;3,1; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,0;4,0; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 1,1;2,0; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 2 +Points = 0,1;1.5,0.5; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,1;4,0; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag04_test_line_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ag04_test_line_line_touching_at_start.grf new file mode 100644 index 0000000..8aa9839 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ag04_test_line_line_touching_at_start.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,4;3,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 6,3;4,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 5,4;6,3; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 2 +Points = 5.5,3.5;6,4; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;4,1; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah01_test_line_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ah01_test_line_line_intr_later.grf new file mode 100644 index 0000000..a0f0703 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ah01_test_line_line_intr_later.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,4;3,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 6,3;4,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 5,4;6,3; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 2 +Points = 3.5,1.5;3.5,0; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;4,1; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah02_test_line_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ah02_test_line_line_intr_later.grf new file mode 100644 index 0000000..6eb57a1 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ah02_test_line_line_intr_later.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,4;3,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,3;3,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 5,4;5,3; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 2 +Points = 3,3;3,0; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;3,1; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah03_test_line_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ah03_test_line_line_intr_later.grf new file mode 100644 index 0000000..81970b9 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ah03_test_line_line_intr_later.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,4;3,4; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,3;3,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 5,4;5,3; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 2 +Points = 3,3.5;1,1; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,3;3,4; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah04_test_line_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ah04_test_line_line_intr_later.grf new file mode 100644 index 0000000..b60a4ed --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ah04_test_line_line_intr_later.grf @@ -0,0 +1,95 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,1;1,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,0;2,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 2 +Points = 0,1;1,0; +LegendText = Moving Line + +[PointSeries4] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 2 +Points = 2,1;2,4; +LegendText = Stationary Line + +[PointSeries5] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;2,2; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 5 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..41f3514c17bcbd9415c10cccb74641112bbbdadf GIT binary patch literal 4339 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa03_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa03_test_point_line_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..deafc2b8a5c336caa70e48b8aa98289ccb92c844 GIT binary patch literal 4457 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 WYU=a^8~%?(4p<(x$TK^2>AwK6KEi?k literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa04_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa04_test_point_line_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e72b2dc89cc16fe9ff92c9192f82e583113b62 GIT binary patch literal 5021 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab01_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab01_test_point_line_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..e1274c2d88a998020331a1e58a1af62f3deb7f94 GIT binary patch literal 4624 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab02_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab02_test_point_line_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..12a7b6cbcf8c75db795f22b5cb8dcd24bb57d0e6 GIT binary patch literal 4593 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab04_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab04_test_point_line_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..c40d8d6fe20bbf57eed07c3bbeada74e7ef1b51b GIT binary patch literal 5002 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ac01_test_point_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ac01_test_point_line_touching_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..82c60d52c17aa7c47b9200f1bfa2a9f616610eb8 GIT binary patch literal 4535 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 Y$@!Sq){=oX@J|F}ZE0&!Xm&X6KZkp!h5!Hn literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ad01_test_point_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ad01_test_point_line_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..83f3d9f56662e20bad108c000d3f493117ebb8fc GIT binary patch literal 5105 zcmeHLXH*o~wk~yyt)SvGiXw<2!<9m%84wdA0t!veHpvlbph+S~5D6wm1Qbyk8zf7R zs0~FBP)9&P8W^$!6RB+wkesQvt9|#r_5Qr|e%y6`O|hCf=j^lh{=RRYu5+q`^>j{c zSSPX$L68j^r&SFQWI2i;%WkY$0VB1X&+`bf0@2elQiEV+>9r#FIp6S+);C;kYxa|H z3XaebgoPj+2u^q-bPB?vARG#ULqs}4p(AuU!lEM_I)d}3QdkI`g|Ju%hlSvLPYMU2 za}X8>;cyTf+Bm|(5e|+(2nYi)SO`pkRFD9MD0B*iMWJvgL(KPvC~Q5EvqXE6%3@ z18}kEbPk^qq=XKOMdz^SIG-UPU~%Xi4jt#S1vD(2&cT5Y!3;PPpa`Ns8yJ8OAOfz0 zB9ID5Ks<;6(D+SoU~yP1oG%uTfyB_~a9B8BJKzSn!OX!~IA2Q89+U=YK}(PgL;_Vn z2H*``fgG>_(BK9z0UbX-KPV9u!Voop>0pNexNv?+Kr&zmS)q@EeEecU^`I&|hc56D`{C?s5Kurv!>yR}jLCsmaL_it2pis}8NAXVKh9i8yBS~5*$_nK{8 z8U8VaBOc1i^SqpaIe+EPT3($6lf0#wW`S8b;Q`-YRwYnd_5=mba$pOe94 z6kq;B*lIl{Q}}Y9Fm1u{%&?V#Y?gN$yL5nkaaUy_v+vh7wuQ(zwa${|Gm?MABO|&n zXzSWknpIo z<%-wh*!k-<-Q|MEBMYx@{dq-8gn+E+()fVKM}c!j>y1J(E!&oD61v_Ju~Th-U4OQ? z`kS*@QO8~0!ThtozoK<_gnFtTT~DK0x?4!BN|*GXFK-`E6rtVPn!xOs+=pk{i$(=6 zV>mo2n;n(ifNHHjFeM1 zoVNE7Whn8?SM!>#d$V@c4Aup&*vP4j&DKyoX z;}|D4UbBk9t4Oj?Xe?o-A0O<%{<^|8#+-EOX(D&Ox#`%1eElnrX`kqq=)S&IFQgxh zX$rV>$Jt3AjY*~{Buz4F_0Tohedmlw=UEj^xBSm73(4``J4tEi_!L^7=ijS?oo)EJ z-ag>Lj-uGuC#h;^oX_1!idV+U5YJ=xXBv$x;&pVaoWi6qZh=^-F@Age zSbG5}{Y9>|fJxr3F6u@k^3Y|4@~?FhO^#vt%o*O-B{APnebmgu8O;_oFsa=T66!Pr&*`Q*j2Z zh-XRdX^3rk*UNdrn19arl4^%m7tS~8h>W+Tb}FWmU5@sn8EW~X=_#HP0~SVT*F<)T zoKJ5`UA`I?-jv3C>|b7d*UN#qPj2oGS{)_KB-`cbnf!tqKB0+Q<#m`n|&Sqk(hn#rw+s-=p3%IJW25xgs$EZum@AgbjC59H+jg~<#Zt<0 ziXZyH5BWFhcK?r>=42}T{A%^yqgR`(yH+ z$6Cr9xv$HC%UD^BcIB zW3lAUvqq%HcIewr48KpUKBo5N-Uh8ObpCt2P^8?}mgQ^5czI(hlWF3K$1}~?VA=Co z%DiR^B)GA-!^7cDhB0Z+L|Q*p?o~RuYGd6qy&%H-kX`TAd7@#@b=@{XG#=W`Z|fl% zRoozvHli_Ow|RR_GNWbrwn`uFn+t*ZX!xeslnY(gpwST9bTNx)+>2Xw=?c-%kKga5 zMKpHQ~{=U=L9Q2_MSi}*%qIx)!? z%?T&GHZj~PN$S{d>kLBnnSsIJ5iJP+&P1i(1#JmYX)$=Tj4+yn>^n^uOKBFHh@>j5 z-4_MHaGMrVqX==OFQBq-fyCqYSWzi4;dNU?{ih6?c#j@cfItv>3Uz6Qd{yt8yVXUA z0YlWqgBW<&(ydO&7ix{VY#|2BTICi{2;r7(%LgCoin=`H8``>q$iz%v)a4KioLyweXM5hZ?*%6w{`MiaNqko=4Q|GtdMo9n=?X&OS>OxT~16}<@>jkK;nB7l#h z+x4GdVoFZs2QR`fMH_ZcHYVLjV9sv?IyaKYb^;KE^w6Y^$X-{OPjEzaT z)_dkg=8)UgrW#WfVQIsOW}(hTS%z7{Ol@Tj_qC2E(!~9yRY!SaZH=NdxoF*6jH~I) z{=BDinp2_aMX;IYUux0fqB&V*(!{gkgMS)mi1FitN#~c(z(}4P2+Mo zaY3}`+)_q+)s2$DuGYY^EzM2e?H$l|YA#LTfLr0DpW{=D+dK!K{4C}KW{PgtLqEIJ z<_c;pkjF-3SC|ib$~w2W=Lxj1ceb#VI)t+A&ZRK*N|IDANAJwelQKXD8%kGpq4P;+ zWPif~OO!-UxL#{DSNN!%=^m4ebxnHhd-d++R^i*q&X?f8O)!MG!GxKjd+(PrH#Y#%T<+_Ul*HPo4L`mdepY|%zd zw0)*Kx438YGCUxByUGIu6;>a%c@z+t&J0_oD^W^6{55l^L^F0yK@NJu&yM?p-~(z0R*RbMkC^Y2W)nL*Dx__r)$J zN9Lf+IJ0=%P@{+zZ7xh_#tauL&-qO*CQmO+f0E3AEj#>VQfO}ti8|!$xKk*$?oJ__ zn!Ve;=Ab^=z{OeBkMM6dX%1YrPmVxO-dT-tDsQWfhga=hD%j z2Q>y%n>NE`g))*Ijz_J&p7{K%vh+chduGI(#>gN0G|+TQ@V-&d=QJfA^B4Z~d>+^y}bNnYP2auBkCoZ{k-tn-0CL zkIU7Hn+(`AmYFj7Q762iZ^k@(RN|LN7^%K|tau!;(r;r9$gLrq6DN9F9b{{pP&y7mA7 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ad02_test_point_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ad02_test_point_line_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..b7058717001bbb35f5a1753521c394b1d01ec0d3 GIT binary patch literal 4900 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 IYS@MR8w~!deEMo1~eLd=au18cUXjp;Dw0X(%U4 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ae01_test_line_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ae01_test_line_line_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..f7f808ef7a18986a81675b148ab275ab176c304c GIT binary patch literal 4464 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ae04_test_line_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ae04_test_line_line_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..4566a8e598ba9a847b430941deb99337558b5f7f GIT binary patch literal 4901 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 aV^8l0+c}?S4F5I27#o@zywv|Y?7sjqpN&TV literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/af02_test_line_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/af02_test_line_line_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..1eefae3ca35134ae3e90b383d6f6efa4686a0922 GIT binary patch literal 4373 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 V9@ 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/af04_test_line_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/af04_test_line_line_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..e1abd85d751fd7b8f35c431fb203508fe7c821b3 GIT binary patch literal 3876 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag01_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag01_test_line_line_touching_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..90ea7b03c5851b4f3e2627de14d5617d510ee98e GIT binary patch literal 4048 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag02_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag02_test_line_line_touching_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..ea62c3e96d8b4dfcdcb6a162d5cce5c7984383e0 GIT binary patch literal 4168 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 Oh>g`j%Y1XU$bSGW89l)O literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag03_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag03_test_line_line_touching_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..323864f45d194aa64f6d189676a5bdd5446c591d GIT binary patch literal 4528 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 Z8X6EJU-MTA{F{NYu{>arZ+_z9{{ZkNz~%q| literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah01_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah01_test_line_line_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a2eea7cf2ad4fb28bd81b377b0b18a4e3cef77 GIT binary patch literal 5437 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah02_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah02_test_line_line_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..cab773fe68119c84df533a34f103f761769bf9e2 GIT binary patch literal 5069 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 B-?9Jz literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah03_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah03_test_line_line_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..a301182eb3610278c2456345bffe00ad8712cd4e GIT binary patch literal 4766 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 WT#G8z_rZ^E#L{f9X@;@O<^KV#lyCO{ literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah04_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah04_test_line_line_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..eebb55c16b52e260416fc95d2fceeba5f5abe34a GIT binary patch literal 5183 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 UmRs%y{~aM5BAFZI7@oNDKi*U6hX4Qo literal 0 HcmV?d00001 diff --git a/pygorithm/geometry/extrapolated_intersection.py b/pygorithm/geometry/extrapolated_intersection.py index 47a055f..d791b05 100644 --- a/pygorithm/geometry/extrapolated_intersection.py +++ b/pygorithm/geometry/extrapolated_intersection.py @@ -17,6 +17,48 @@ """ +def calculate_one_moving_point_and_one_stationary_line(point, velocity, line, offset): + """ + Determine if the point moving at velocity will intersect the line. + + The line is positioned at offset. Given a moving point and line segment, + determine if the point will ever intersect the line segment. + + :param point: the starting location of the point + :type point: :class:`pygorithm.geometry.vector2.Vector2` + :param velocity: the velocity of the point + :type velocity: :class:`pygorithm.geometry.vector2.Vector2` + :param line: the geometry of the stationary line + :type line: :class:`pygorithm.geometry.line2.Line2` + :param offset: the offset of the line + :type offset: :class:`pygorithm.geometry.vector2.Vector2` + :returns: if the point will intersect the line, distance until intersection + :rtype: bool, :class:`numbers.Number` or None + """ + return False, -1 + +def calculate_one_moving_line_and_one_stationary_line(line1, offset1, velocity1, _line2, offset2): + """ + Determine if the moving line will intersect the stationary line. + + Given two line segments, one moving and one not, determine if they will ever + intersect. + + :param line1: the geometry of the moving line + :type line1: :class:`pygorithm.geometry.line2.Line2` + :param offset1: the starting location of the moving line + :type offset1: :class:`pygorithm.geometry.vector2.Vector2` + :param velocity1: the velocity of the moving line + :type velocity1: :class:`pygorithm.geometry.vector2.Vector2` + :param _line2: the geometry of the second line + :type _line2: :class:`pygorithm.geometry.line2.Line2` + :param offset2: the location of the second line + :type offset2: :class:`pygorithm.geometry.vector2.Vector2` + :returns: if the lines will ever intersect, distance until intersection + :rtype: bool, :class:`numbers.Number` or None + """ + return False, -1 + def calculate_one_moving_and_one_stationary(poly1, poly1_offset, poly1_velocity, poly2, poly2_offset): """ Determine if the moving polygon will intersect the stationary polygon. diff --git a/pygorithm/geometry/polygon2.py b/pygorithm/geometry/polygon2.py index c8f0a85..78d30e7 100644 --- a/pygorithm/geometry/polygon2.py +++ b/pygorithm/geometry/polygon2.py @@ -416,7 +416,7 @@ def contains_point(polygon, offset, point): cross = vec1.cross(vec2) _previous = curr - if math.isclose(cross, 0): + if math.isclose(cross, 0, abs_tol=1e-07): return True, False if cross > 0: diff --git a/tests/test_geometry.py b/tests/test_geometry.py index da181c8..938d949 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -9,7 +9,8 @@ axisall, line2, polygon2, - rect2 + rect2, + extrapolated_intersection ) class TestCollisionDetection(unittest.TestCase): @@ -771,10 +772,36 @@ def _contains_point_fuzzer(self, points, point, expected_edge, expected_contains edge, cont = polygon2.Polygon2.contains_point(new_poly, offset, point) - help_msg = "points={}, point={}, expected_edge={}, expected_contains={}, edge={}, cont={}".format(points, point, expected_edge, expected_contains, edge, cont) + help_msg = "points={}, point={}, offset={}, expected_edge={}, expected_contains={}, edge={}, contains={}".format(points, point, repr(offset), expected_edge, expected_contains, edge, cont) self.assertEqual(expected_edge, edge, msg=help_msg) self.assertEqual(expected_contains, cont, msg=help_msg) + + def test_contains_point_regressions(self): + # the fuzzer actually caught an error. put them in here to ensure they don't + # come back. The first issue was math.isclose without abs_tol on values close + # to 0 is too strict + poly = polygon2.Polygon2([ (2, 3), (3, 5), (5, 4), (3, 2) ]) + + regression_tests = [ (poly.points, vector2.Vector2(4, 3), True, False, vector2.Vector2(-509.47088031477625, 57.99699262312129)) ] + for regression in regression_tests: + points = regression[0] + point = regression[1] + expected_edge = regression[2] + expected_contains = regression[3] + offset = regression[4] + + new_points = [] + for pt in points: + new_points.append(pt - offset) + new_poly = polygon2.Polygon2(new_points) + + edge, cont = polygon2.Polygon2.contains_point(new_poly, offset, point) + + help_msg = "regression failed.\n\npoints={}, point={}, offset={}, expected_edge={}, expected_contains={}, edge={}, contains={}".format(points, point, offset, expected_edge, expected_contains, edge, cont) + self.assertEqual(expected_edge, edge, msg=help_msg) + self.assertEqual(expected_contains, cont, msg=help_msg) + def test_contains_point_false(self): poly = polygon2.Polygon2([ (1, 1), (2, 3), (4, 0) ]) @@ -1425,6 +1452,240 @@ def test_str(self): self.assertEqual("rect(0.707x0.708 at <0.568, 0.877>)", str(ugly_rect)) class TestExtrapolatedIntersection(unittest.TestCase): + """ + It is suggested that you follow along these tests with the images + at imgs/test_geometry/test_extrapolated_intersection. All image + references will be relative to that folder and will be referencing + the .grf (Graph) file, whereas the actual images are in the out/ + folder with the same name (and a different file type). + + The file names are prefixed with a unique 2 character alphabetical + code per test function, followed by a unique 2 character numeric code + for each image, followed by an underscore and the name of the test + function they are referenced in. In the code they are just referenced + with the first 4 characters of the file name. + """ + + def setUp(self): + self.pt = vector2.Vector2 + self.ln = line2.Line2 + self.extr_intr = extrapolated_intersection + random.seed() + + # calculate_one_moving_point_and_one_stationary_line + def _calc_one_moving_point_one_stat_line_fuzzer(self, pt, vel, line): + fn = self.extr_intr.calculate_one_moving_point_and_one_stationary_line + + offset = self.pt(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + newline = self.ln(line.start - offset, line.end - offset) + + intr, dist = fn(pt, vel, newline, offset) + return intr, dist, offset + + def test_point_line_no_intr(self): + fn = self._calc_one_moving_point_one_stat_line_fuzzer + + # aa01 (see class comment!) + intr, dist, offset = fn(self.pt(1, 1), self.pt(1, 0), self.ln(self.pt(6, 2), self.pt(2, 4))) + self.assertFalse(intr, msg=repr(offset)) + self.assertIsNone(dist, msg=repr(offset)) + + # aa02 + intr, dist, offset = fn(self.pt(1, 1), self.pt(0, 1), self.ln(self.pt(6, 2), self.pt(2, 4))) + self.assertFalse(intr, msg=repr(offset)) + self.assertIsNone(dist, msg=repr(offset)) + + # aa03 + intr, dist, offset = fn(self.pt(4, 1), self.pt(-3, 3).normalize(), self.ln(self.pt(2, 4), self.pt(6, 4))) + self.assertFalse(intr, msg=repr(offset)) + self.assertIsNone(dist, msg=repr(offset)) + + # aa04 + intr, dist, offset = fn(self.pt(2, 1), self.pt(4, 3).normalize(), self.ln(self.pt(1, 2), self.pt(5, 4))) + self.assertFalse(intr, msg=repr(offset)) + self.assertIsNone(dist, msg=repr(offset)) + + + def test_point_line_touching(self): + fn = self._calc_one_moving_point_one_stat_line_fuzzer + + # ab01 + intr, dist, offset = fn(self.pt(1, 1), self.pt(1, 3).normalize(), self.ln(self.pt(2, 4), self.pt(6, 2))) + self.assertTrue(intr, repr(offset)) + self.assertAlmostEqual(self.pt(1, 3).magnitude(), dist, msg=repr(offset)) + + # ab02 + intr, dist, offset = fn(self.pt(2, 1), self.pt(4, 1).normalize(), self.ln(self.pt(2, 0), self.pt(6, 2))) + self.assertTrue(intr, repr(offset)) + self.assertAlmostEqual(self.pt(4, 1).magnitude(), dist, msg=repr(offset)) + + # ab03 + intr, dist, offset = fn(self.pt(2, 1), self.pt(0, -1), self.ln(self.pt(2, 0), self.pt(6, 2))) + self.assertTrue(intr, msg=repr(offset)) + self.assertAlmostEqual(1, dist, msg=repr(offset)) + + # ab04 + intr, dist, offset = fn(self.pt(6.25, 3), self.pt(-4.25, -3).normalize(), self.ln(self.pt(2, 0), self.pt(6, 2))) + self.assertTrue(intr, msg=repr(offset)) + self.assertAlmostEqual(self.pt(4.25, 3).magnitude(), dist, msg=repr(offset)) + + def test_point_line_touching_at_start(self): + fn = self._calc_one_moving_point_one_stat_line_fuzzer + + # ac01 + intr, dist, offset = fn(self.pt(4, 1), self.pt(-1, 1).normalize(), self.ln(self.pt(2, 0), self.pt(6, 2))) + self.assertTrue(intr, msg=repr(offset)) + self.assertEqual(0, dist, msg=repr(offset)) + + # ac02 + intr, dist, offset = fn(self.pt(2, 2), self.pt(-1, 0), self.ln(self.pt(2, 2), self.pt(6, 2))) + self.assertTrue(intr, msg=repr(offset)) + self.assertEqual(0, dist, msg=repr(offset)) + + # ac03 + intr, dist, offset = fn(self.pt(3, 1), self.pt(1, 1).normalize(), self.ln(self.pt(3, 0), self.pt(3, 4))) + self.assertTrue(intr, msg=repr(offset)) + self.assertEqual(0, dist, msg=repr(offset)) + + # ac04 + intr, dist, offset = fn(self.pt(3, 4), self.pt(-1, 0), self.ln(self.pt(3, 0), self.pt(3, 4))) + self.assertTrue(intr, msg=repr(offset)) + self.assertEqual(0, dist, msg=repr(offset)) + + def test_point_line_intr_later(self): + fn = self._calc_one_moving_point_one_stat_line_fuzzer + + # ad01 + intr, dist, offset = fn(self.pt(0, 2), self.pt(3, -1).normalize(), self.ln(self.pt(3, 0), self.pt(3, 4))) + self.assertTrue(intr, msg=repr(offset)) + self.assertAlmostEqual(self.pt(3, -1).magnitude(), dist, msg=repr(offset)) + + # ad02 + intr, dist, offset = fn(self.pt(6, 2), self.pt(-1, 0), self.ln(self.pt(3, 0), self.pt(3, 4))) + self.assertTrue(intr, msg=repr(offset)) + self.assertAlmostEqual(3, dist, msg=repr(offset)) + + # ad03 + intr, dist, offset = fn(self.pt(6, 2), self.pt(-1, 0), self.ln(self.pt(1, 1), self.pt(5, 3))) + self.assertTrue(intr, msg=repr(offset)) + self.assertAlmostEqual(3, dist, msg=repr(offset)) + + # ad04 + intr, dist, offset = fn(self.pt(6, 4), self.pt(-3, -1).normalize(), self.ln(self.pt(1, 1), self.pt(5, 3))) + self.assertTrue(intr, msg=repr(offset)) + self.assertAlmostEqual(self.pt(-3, -1).magnitude(), dist, msg=repr(offset)) + + + # calculate_one_moving_line_and_one_stationary_line + def _calc_one_moving_line_one_stat_line_fuzzer(self, line1tup, vel1tuporvec, _line2tup): + fn = self.extr_intr.calculate_one_moving_line_and_one_stationary_line + + line1 = self.ln(self.pt(line1tup[0]), self.pt(line1tup[1])) + vel1 = self.pt(vel1tuporvec) + _line2 = self.ln(self.pt(_line2tup[0]), self.pt(_line2tup[1])) + + offset1 = self.pt(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + offset2 = self.pt(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + newline1 = self.ln(line1.start - offset1, line1.end - offset1) + newline2 = self.ln(_line2.start - offset2, _line2.end - offset2) + + intr, dist = fn(newline1, offset1, vel1, newline2, offset2) + return intr, dist, "\n\nline1={}\nvel1={}\nline2={}\noffset1={}\noffset2={}".format(line1, vel1, _line2, repr(offset1), repr(offset2)) + + def test_line_line_no_intr(self): + fn = self._calc_one_moving_line_one_stat_line_fuzzer + + # ae01 + intr, dist, msg = fn(((1, 4), (1, 3)), (1, 0), ((1, 1), (3, 2))) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) + + # ae02 + intr, dist, msg = fn(((1, 3), (2, 4)), self.pt(1, -1).normalize(), ((1, 0.5), (3, 0.5))) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) + + # ae03 + intr, dist, msg = fn(((1, 3), (2, 4)), self.pt(1, -1).normalize(), ((4, 3), (6, 4))) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) + + # ae04 + intr, dist, msg = fn(((1, 3), (2, 3)), self.pt(1, -1).normalize(), ((0, 4), (3, 3))) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) + + def test_line_line_touching(self): + fn = self._calc_one_moving_line_one_stat_line_fuzzer + + # af01 + intr, dist, msg = fn(((1, 3), (2, 3)), self.pt(1, -1).normalize(), ((3, 3), (5, 0))) + self.assertTrue(intr, msg=msg) + self.assertAlmostEqual(self.pt(3, -3).magnitude(), dist, msg=msg) + + # af02 + intr, dist, msg = fn(((1, 1), (2, 1)), self.pt(1, 1).normalize(), ((3, 3), (3, 2))) + self.assertTrue(intr, msg=msg) + self.assertAlmostEqual(self.pt(1, 1).magnitude(), dist, msg=msg) + + # af03 + intr, dist, msg = fn(((1, 1), (2, 1)), self.pt(1, 1).normalize(), ((2, 3), (3, 3))) + self.assertTrue(intr, msg=msg) + self.assertAlmostEqual(self.pt(2, 2).magnitude(), dist, msg=msg) + + # af04 + intr, dist, msg = fn(((1, 1), (2, 1)), (0, 1), ((2, 3), (3, 3))) + self.assertTrue(intr, msg=msg) + self.assertAlmostEqual(2, dist) + + def test_line_line_touching_at_start(self): + fn = self._calc_one_moving_line_one_stat_line_fuzzer + + # ag01 + intr, dist, msg = fn(((1, 1), (2, 1)), (0, 1), ((2, 1), (3, 0))) + self.assertTrue(intr, msg=msg) + self.assertEqual(0, dist, msg=msg) + + # ag02 + intr, dist, msg = fn(((1, 1), (1, 3)), (1, 0), ((1, 2), (2, 2))) + self.assertTrue(intr, msg=msg) + self.assertEqual(0, dist, msg=msg) + + # ag03 + intr, dist, msg = fn(((1, 1), (2, 0)), (1, 0), ((0, 1), (1.5, 0.5))) + self.assertTrue(intr, msg=msg) + self.assertEqual(0, dist, msg=msg) + + # ag04 + intr, dist, msg = fn(((5, 4), (6, 3)), (-1, -1), ((5.5, 3.5), (6, 4))) + self.assertTrue(intr, msg=msg) + self.assertEqual(0, dist, msg=msg) + + def test_line_line_intr_later(self): + fn = self._calc_one_moving_line_one_stat_line_fuzzer + + # ah01 + intr, dist, msg = fn(((5, 4), (6, 3)), (-1, -1), ((3.5, 1.5), (3.5, 0))) + self.assertTrue(intr, msg=msg) + self.assertAlmostEqual(self.pt(-2, -2).magnitude(), dist, msg=msg) + + # ah02 + intr, dist, msg = fn(((5, 4), (5, 3)), (-1, -1), ((3, 3), (3, 0))) + self.assertTrue(intr, msg=msg) + self.assertAlmostEqual(self.pt(-2, -2).magnitude(), dist, msg=msg) + + # ah03 + intr, dist, msg = fn(((5, 4), (5, 3)), (-1, 0), ((1, 1), (3, 3.5))) + self.assertTrue(intr, msg=msg) + self.assertAlmostEqual(2, dist, msg=msg) + + # ah04 + intr, dist, msg = fn(((0, 1), (1, 0)), (0.25, 0.5), ((2, 1), (2, 4))) + self.assertTrue(intr, msg=msg) + self.assertAlmostEqual(self.pt(1, 2).magnitude(), dist, smg=msg) + + + # calculate_one_moving_and_one_stationary def test_one_moving_one_stationary_no_intr(self): pass def test_one_moving_one_stationary_touching(self): @@ -1434,6 +1695,7 @@ def test_one_moving_one_stationary_intr_at_start(self): def test_one_moving_one_stationary_intr_later(self): pass + # calculate_one_moving_one_stationary_distancelimit def test_one_moving_one_stationary_distlimit_no_intr(self): pass def test_one_moving_one_stationary_distlimit_touching(self): @@ -1445,7 +1707,9 @@ def test_one_moving_one_stationary_distlimit_intr_later(self): def test_one_moving_one_stationary_distlimit_touch_at_limit(self): pass def test_one_moving_one_stationary_distlimit_intr_after_limit(self): - + pass + + # calculate_one_moving_one_stationary_along_path def test_one_moving_one_stationary_along_path_no_intr(self): pass def test_one_moving_one_stationary_along_path_touching(self): @@ -1457,7 +1721,9 @@ def test_one_moving_one_stationary_along_path_intr_later(self): def test_one_moving_one_stationary_distlimit_touch_at_end(self): pass def test_one_moving_one_stationary_distlimit_intr_after_end(self): - + pass + + # calculate_one_moving_many_stationary def test_one_moving_many_stationary_no_intr(self): pass def test_one_moving_many_stationary_touching(self): @@ -1467,6 +1733,7 @@ def test_one_moving_many_stationary_intr_at_start(self): def test_one_moving_many_stationary_intr_later(self): pass + # calculate_one_moving_many_stationary_distancelimit def test_one_moving_many_stationary_distlimit_no_intr(self): pass def test_one_moving_many_stationary_distlimit_touching(self): @@ -1480,6 +1747,7 @@ def test_one_moving_many_stationary_distlimit_touch_at_limit(self): def test_one_moving_many_stationary_distlimit_intr_after_limit(self): pass + # calculate_one_moving_many_stationary_along_path def test_one_moving_many_stationary_along_path_no_intr(self): pass def test_one_moving_many_stationary_along_path_touching(self): @@ -1493,6 +1761,7 @@ def test_one_moving_many_stationary_along_path_touch_at_limit(self): def test_one_moving_many_stationary_along_path_intr_after_limit(self): pass + # calculate_two_moving def test_two_moving_no_intr(self): pass def test_two_moving_touching_miss(self): From 841ba3d7d43cfab06f983b315253644cedd0da7e Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 6 Sep 2017 08:11:51 -0700 Subject: [PATCH 211/251] Test calculate_one_moving_and_one_stationary Add tests and images for calculate_one_moving_and_one_stationary in extrapolated intersection. This is at the same rate of 16 tests per func (16 images and 16 .grf files) * pygorithm/geometry/extrapolated_intersection.py - change to invalid return values so the tests fail as expected * tests/test_geometry.py - add tests for an additional function + imgs/test_geometry/test_extrapolated_intersection/(many) - test imgs. --- ...test_one_moving_one_stationary_no_intr.grf | 153 +++++++++++++++ ...test_one_moving_one_stationary_no_intr.grf | 153 +++++++++++++++ ...test_one_moving_one_stationary_no_intr.grf | 153 +++++++++++++++ ...test_one_moving_one_stationary_no_intr.grf | 155 +++++++++++++++ ...est_one_moving_one_stationary_touching.grf | 176 +++++++++++++++++ ...est_one_moving_one_stationary_touching.grf | 176 +++++++++++++++++ ...est_one_moving_one_stationary_touching.grf | 178 +++++++++++++++++ ...est_one_moving_one_stationary_touching.grf | 178 +++++++++++++++++ ...ne_moving_one_stationary_intr_at_start.grf | 178 +++++++++++++++++ ...ne_moving_one_stationary_intr_at_start.grf | 180 ++++++++++++++++++ ...ne_moving_one_stationary_intr_at_start.grf | 180 ++++++++++++++++++ ...ne_moving_one_stationary_intr_at_start.grf | 180 ++++++++++++++++++ ...t_one_moving_one_stationary_intr_later.grf | 180 ++++++++++++++++++ ...t_one_moving_one_stationary_intr_later.grf | 178 +++++++++++++++++ ...t_one_moving_one_stationary_intr_later.grf | 178 +++++++++++++++++ ...t_one_moving_one_stationary_intr_later.grf | 178 +++++++++++++++++ ...test_one_moving_one_stationary_no_intr.png | Bin 0 -> 7019 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 0 -> 7155 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 0 -> 6253 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 0 -> 5975 bytes ...est_one_moving_one_stationary_touching.png | Bin 0 -> 7373 bytes ...est_one_moving_one_stationary_touching.png | Bin 0 -> 8542 bytes ...est_one_moving_one_stationary_touching.png | Bin 0 -> 5879 bytes ...est_one_moving_one_stationary_touching.png | Bin 0 -> 5792 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 0 -> 4917 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 0 -> 6510 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 0 -> 6478 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 0 -> 6975 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 0 -> 6187 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 0 -> 6644 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 0 -> 6560 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 0 -> 6656 bytes .../geometry/extrapolated_intersection.py | 2 +- tests/test_geometry.py | 92 ++++++++- 34 files changed, 2843 insertions(+), 5 deletions(-) create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai01_test_one_moving_one_stationary_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai02_test_one_moving_one_stationary_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai03_test_one_moving_one_stationary_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai04_test_one_moving_one_stationary_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj01_test_one_moving_one_stationary_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj02_test_one_moving_one_stationary_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj03_test_one_moving_one_stationary_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj04_test_one_moving_one_stationary_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak01_test_one_moving_one_stationary_intr_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak02_test_one_moving_one_stationary_intr_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak03_test_one_moving_one_stationary_intr_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak04_test_one_moving_one_stationary_intr_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/al01_test_one_moving_one_stationary_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/al02_test_one_moving_one_stationary_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/al03_test_one_moving_one_stationary_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/al04_test_one_moving_one_stationary_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ai01_test_one_moving_one_stationary_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ai02_test_one_moving_one_stationary_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ai03_test_one_moving_one_stationary_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ai04_test_one_moving_one_stationary_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aj01_test_one_moving_one_stationary_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aj02_test_one_moving_one_stationary_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aj03_test_one_moving_one_stationary_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aj04_test_one_moving_one_stationary_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ak01_test_one_moving_one_stationary_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ak02_test_one_moving_one_stationary_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ak03_test_one_moving_one_stationary_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ak04_test_one_moving_one_stationary_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/al01_test_one_moving_one_stationary_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/al02_test_one_moving_one_stationary_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/al03_test_one_moving_one_stationary_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/al04_test_one_moving_one_stationary_intr_later.png diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai01_test_one_moving_one_stationary_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ai01_test_one_moving_one_stationary_no_intr.grf new file mode 100644 index 0000000..20aeb4f --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ai01_test_one_moving_one_stationary_no_intr.grf @@ -0,0 +1,153 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,1;0,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;2,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,2;1,4; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,0;1,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 0,1;1,0;2,1;1,2;0,1; +LegendText = Moving Polygon + +[PointSeries6] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 3,1;3,2;4,1;3,1; +LegendText = Stationary Polygon + +[PointSeries7] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,4;2,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,3;1,4; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,2;2,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,3;1,2; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 10 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai02_test_one_moving_one_stationary_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ai02_test_one_moving_one_stationary_no_intr.grf new file mode 100644 index 0000000..9174c50 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ai02_test_one_moving_one_stationary_no_intr.grf @@ -0,0 +1,153 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,1;1,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;3,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,2;2,4; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,0;2,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 0,1;1,0;2,1;1,2;0,1; +LegendText = Moving Polygon + +[PointSeries6] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 3,1;3,2;4,1;3,1; +LegendText = Stationary Polygon + +[PointSeries7] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,4;3,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;2,4; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,2;3,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;2,2; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 10 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai03_test_one_moving_one_stationary_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ai03_test_one_moving_one_stationary_no_intr.grf new file mode 100644 index 0000000..69b7bca --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ai03_test_one_moving_one_stationary_no_intr.grf @@ -0,0 +1,153 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,4;2,4; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,3.5;3,3.5; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,3;2,3; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;3.5,2.5; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 4,3;4,4;5,3.5;5.5,2.5;4,3; +LegendText = Moving Polygon + +[PointSeries6] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 3,1;3,2;4,1;3,1; +LegendText = Stationary Polygon + +[PointSeries7] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,4;2,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,4;3,3.5; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,3.5;3.5,2.5; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,3;3.5,2.5; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 10 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai04_test_one_moving_one_stationary_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ai04_test_one_moving_one_stationary_no_intr.grf new file mode 100644 index 0000000..40e2b1b --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ai04_test_one_moving_one_stationary_no_intr.grf @@ -0,0 +1,155 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;5,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,1;5,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,1;6,1; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;3.5,2.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 4,3;4,4;5,3.5;5.5,2.5;4,3; +LegendText = Moving Polygon + +[PointSeries6] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 3,1;3,2;4,1;3,1; +LegendText = Stationary Polygon + +[PointSeries7] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,2;5,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,1;6,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,2;6,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,3;3.5,2.5; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 10 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj01_test_one_moving_one_stationary_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/aj01_test_one_moving_one_stationary_touching.grf new file mode 100644 index 0000000..22f642a --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aj01_test_one_moving_one_stationary_touching.grf @@ -0,0 +1,176 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,3;0,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,2;1,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,4;1,4; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,3.5;2,3.5; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;2.5,2.5; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 6 +Points = 3,3;4,4;5,3.5;5.5,2.5;4,2;3,3; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 5 +Points = 0,1;1,2;2,1;1,0;0,1; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,4;0,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,3;1,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,2;2.5,2.5; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,3.5;2.5,2.5; +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,4;2,3.5; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj02_test_one_moving_one_stationary_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/aj02_test_one_moving_one_stationary_touching.grf new file mode 100644 index 0000000..87e6aa6 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aj02_test_one_moving_one_stationary_touching.grf @@ -0,0 +1,176 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,3;2,1; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,2;3,0; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,4;3,2; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,3.5;4,1.5; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 6 +Points = 3,3;4,4;5,3.5;5.5,2.5;4,2;3,3; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 5 +Points = 0,1;1,2;2,1;1,0;0,1; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;3,0; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,0;4.5,0.5; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 4.5,0.5;4,1.5; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 4,1.5;3,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj03_test_one_moving_one_stationary_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/aj03_test_one_moving_one_stationary_touching.grf new file mode 100644 index 0000000..7b4e2ae --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aj03_test_one_moving_one_stationary_touching.grf @@ -0,0 +1,178 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;2,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,1;1,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,0;2,2; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;1,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 0,0;1,0;1,1;0,1;0,0; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 2,2;3,3;4,2;2,2; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;1,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,2;2,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,2;2,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,3;1,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj04_test_one_moving_one_stationary_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/aj04_test_one_moving_one_stationary_touching.grf new file mode 100644 index 0000000..f552904 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aj04_test_one_moving_one_stationary_touching.grf @@ -0,0 +1,178 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;5,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,1;4,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,0;5,1; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;4,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 0,0;1,0;1,1;0,1;0,0; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 2,2;3,3;4,2;2,2; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 4,1;5,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 4,1;4,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,2;5,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,2;4,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak01_test_one_moving_one_stationary_intr_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ak01_test_one_moving_one_stationary_intr_at_start.grf new file mode 100644 index 0000000..e03f309 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ak01_test_one_moving_one_stationary_intr_at_start.grf @@ -0,0 +1,178 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;1,3; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,1;0,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,0;1,2; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;0,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 0,0;1,0;1,1;0,1;0,0; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 1,1;2,2;3,1;1,1; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,2;1,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,2;0,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;1,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;0,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak02_test_one_moving_one_stationary_intr_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ak02_test_one_moving_one_stationary_intr_at_start.grf new file mode 100644 index 0000000..0112c96 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ak02_test_one_moving_one_stationary_intr_at_start.grf @@ -0,0 +1,180 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;0,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,2;1,3; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,1;2,2; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;0,2; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 2.5,0.5;4.5,2.5;5,1;4,0.5;2.5,0.5; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 1,1;2,2;3,1;1,1; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,2;1,3; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;2,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,2;2,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;0,3; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak03_test_one_moving_one_stationary_intr_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ak03_test_one_moving_one_stationary_intr_at_start.grf new file mode 100644 index 0000000..e7e26a6 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ak03_test_one_moving_one_stationary_intr_at_start.grf @@ -0,0 +1,180 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,1;2,0; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,2;1,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;0,0; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;0,2; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 2.5,0.5;4.5,2.5;5,1;4,0.5;2.5,0.5; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 1,1;2,2;3,1;1,1; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;1,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;2,0; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;2,0; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;0,3; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak04_test_one_moving_one_stationary_intr_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ak04_test_one_moving_one_stationary_intr_at_start.grf new file mode 100644 index 0000000..e9f9c8e --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ak04_test_one_moving_one_stationary_intr_at_start.grf @@ -0,0 +1,180 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,2;1,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,0;1,0; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 3,1;2,1; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;0,2; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 6 +Points = 2.5,0.5;3,2;4.5,2.5;5,1;4,0.5;2.5,0.5; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 2,0;2,2;3,1;2,0; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,2;1,0; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,2;2,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;1,0; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;0,3; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/al01_test_one_moving_one_stationary_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/al01_test_one_moving_one_stationary_intr_later.grf new file mode 100644 index 0000000..d0cbd0d --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/al01_test_one_moving_one_stationary_intr_later.grf @@ -0,0 +1,180 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,2;2,1; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,3;3,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 6,2;4,1; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 0,0;0,2; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 4 +Points = 4,2;5,3;6,2;4,2; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 4 +Points = 2,0;2,2;3,1;2,0; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;4,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;3,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,1;4,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;0,3; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/al02_test_one_moving_one_stationary_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/al02_test_one_moving_one_stationary_intr_later.grf new file mode 100644 index 0000000..ef4d51e --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/al02_test_one_moving_one_stationary_intr_later.grf @@ -0,0 +1,178 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2.5,4;2.5,2; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2.5,3;2.5,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,4;4,2; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,3;5,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 2.5,4;2.5,3;5,3;4,4;2.5,4; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 5 +Points = 2,0;0,1;2,2;3,1;2,0; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2.5,2;4,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 4,2;5,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 5,1;2.5,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2.5,2;2.5,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/al03_test_one_moving_one_stationary_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/al03_test_one_moving_one_stationary_intr_later.grf new file mode 100644 index 0000000..4940e38 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/al03_test_one_moving_one_stationary_intr_later.grf @@ -0,0 +1,178 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,3;1,1; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,3;0,1; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 1,4;0,2; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 2,4;1,2; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 1,4;2,4;2,3;1,3;1,4; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 5 +Points = 2,0;0,1;2,2;3,1;2,0; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,2;1,2; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,2;1,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 1,1;0,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 0,2;0,1; +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/al04_test_one_moving_one_stationary_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/al04_test_one_moving_one_stationary_intr_later.grf new file mode 100644 index 0000000..aab20db --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/al04_test_one_moving_one_stationary_intr_later.grf @@ -0,0 +1,178 @@ +;This file was created by Graph (http://www.padowan.dk) +;Do not change this file from other programs. +[Graph] +Version = 4.4.2.543 +MinVersion = 2.5 +OS = Windows NT 6.2 + +[Axes] +xMin = -0.6 +xMax = 6.6 +xTickUnit = 1 +xGridUnit = 1 +xAutoTick = 0 +yMin = -0.4 +yMax = 4.4 +yTickUnit = 1 +yGridUnit = 1 +yAutoTick = 0 +AxesColor = clBlue +GridColor = 0x00FF9999 +NumberFont = Times New Roman,16,clBlack +LabelFont = Times New Roman,16,clBlack,B +ShowLegend = 0 +Radian = 1 +LegendPlacement = 0 +LegendPos = 1.24145785876993,3.21633085896076 + +[PointSeries1] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,1.75;2,1.75; +LegendText = Moving Line Point 1 (extrapolated) + +[PointSeries2] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 4,1.25;2,1.25; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries3] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5,2.5;3,2.5; +LegendText = Moving Line Point 3 (extrapolated) + +[PointSeries4] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 6,2.5;4,2.5; +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries5] +FillColor = clBlack +LineColor = clBlack +Size = 2 +Style = 7 +LineStyle = 0 +LabelPosition = 1 +PointCount = 2 +Points = 5.5,2.5;4.5,0.5; +Visible = 0 +LegendText = Moving Line Point 2 (extrapolated) + +[PointSeries6] +FillColor = clRed +LineColor = clBlue +Size = 5 +Style = 0 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 5 +PointCount = 5 +Points = 4,1.75;5,2.5;6,2.5;4,1.25;4,1.75; +LegendText = Moving Polygon + +[PointSeries7] +FillColor = clGreen +LineColor = clLime +Size = 5 +Style = 1 +LineSize = 2 +LineStyle = 0 +ShowLabels = 1 +LabelPosition = 6 +PointCount = 5 +Points = 2,0;0,1;2,2;3,1;2,0; +LegendText = Stationary Polygon + +[PointSeries8] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2.5;4,2.5; +LegendText = Moving Line "end" extrapolated + +[PointSeries9] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 4,2.5;2,1.25; +LegendText = Moving Line "end" extrapolated + +[PointSeries10] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,1.25;2,1.75; +LegendText = Moving Line "end" extrapolated + +[PointSeries11] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 2,1.75;3,2.5; +LegendText = Moving Line "end" extrapolated + +[PointSeries12] +FillColor = clRed +LineColor = clPurple +Size = 0 +Style = 5 +LineSize = 2 +LineStyle = 1 +LabelPosition = 1 +PointCount = 2 +Points = 3,2;2,1; +Visible = 0 +LegendText = Moving Line "end" extrapolated + +[Data] +TextLabelCount = 0 +FuncCount = 0 +PointSeriesCount = 12 +ShadeCount = 0 +RelationCount = 0 +OleObjectCount = 0 + diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai01_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai01_test_one_moving_one_stationary_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..3d990fa744a0edbabaf9277cedde5596a706d5a7 GIT binary patch literal 7019 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai02_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai02_test_one_moving_one_stationary_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..590ca2356fe85b6b9fe364001fd9cee1d26dab4f GIT binary patch literal 7155 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 ZH!5OE1ZJY;p?@@BhFBB5VvN(B{|6V8-6sG5 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai03_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai03_test_one_moving_one_stationary_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..0a32b0ccea087e2a9fef31df2b06939e157d75bc GIT binary patch literal 6253 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai04_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai04_test_one_moving_one_stationary_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..37a150b2a6a6486cf4b8321297f3c05aadf906da GIT binary patch literal 5975 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 P@ff17a}86ZMF{zSxP3F= literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aj03_test_one_moving_one_stationary_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/aj03_test_one_moving_one_stationary_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..06894f788e0488428b02e9110f2403c605847c27 GIT binary patch literal 5879 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aj04_test_one_moving_one_stationary_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/aj04_test_one_moving_one_stationary_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..bcfb27db9d4a34e88dbf44aaa635110f3d22c8ec GIT binary patch literal 5792 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak01_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak01_test_one_moving_one_stationary_intr_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..39f7982a3aae180f3dca10099747f97492300d82 GIT binary patch literal 4917 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 TzsUpt2|#9OOQRQtmv8+KPVL#E literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak02_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak02_test_one_moving_one_stationary_intr_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc1cc008b0a8a5753374745d9f9c072d37b6e5e GIT binary patch literal 6510 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak03_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak03_test_one_moving_one_stationary_intr_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..bd02da5cb7b057df5c4e3efdbd64d92e380bef69 GIT binary patch literal 6478 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al01_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al01_test_one_moving_one_stationary_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..5e9bec4dcee6d69330c9cbd91b2993bee0a0ea9d GIT binary patch literal 6187 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 HA?iN>uLtr! literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al02_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al02_test_one_moving_one_stationary_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..4f0d439dd83d18b5f318cb48d8b05901970cfce2 GIT binary patch literal 6644 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 DpYJ34 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al03_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al03_test_one_moving_one_stationary_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..95b17621dc580dc37a23da192659633aaa6caa0b GIT binary patch literal 6560 zcmZ`-dpwix`yV1X<}S`o?Yzv0xS(`yL$M-ar354TB+(;LH0U;c&R3 zqN0k5%E5yNU0hu3?CdNoEDQ||xskElvuAr?4;T~Nsh*axv7XZ6`$#Sf1A~!aFa}7@ zL&Gpg7#Rs;AYojP5d%YFU>FRHjDayQFz(h;BpHSw!^mV9gAC(tA(0Fih5;ipU1%L~QK_baWBm>EtfO=q#!63;PBm;xwZj}dN3>ir# zBN=2QcZ&^JjbR|k3?zer=pO7PXc6?p!}DnJwieI<^+7?95u^lAup9)z z41hs`{~N#vtU{Qwr>AFVXlP<$B8fzz)9DlnrMI_tU|?WmWaRhn-!n5a%gf8$wduUP zg4ozt@WTPrxLX4lfdvlBuag&GFgV)A(%kt5XEFz$q&OD!DfdkQ^2Kql->Td8{;6jp z^KS&+QQIZECnGk+b9~-91WxL3Cc{7RWxg+7P!Jb?DDgvvc=|lQu7{-X&8zXMMvu8S zE%J$tjmnTkv4(Ye!nV8TB%{+7ohRm8b1q@7hhD*lj;_o_jD|hwpW03^s^qM+Gd4_@ zA~qR+?MF->c%|af!VKAddVW|})TVjn5$hJxoB0C-c~4cWD}8T1ovm_(ei6T;=8onE z+N)ipeEK7mAUdb!Xc_8~H?blG`8vnz79yMGAkZD({U~5Vcy(dFX8-Fq7b5?rM$kI> zyAu*2t+yYv1z*jLd-NaR3$pk`y0K}`60Tbppq?CwzYD#4t94?%>jABkubW7MY=Wzo zvm2h!q9pRPsaWsHKXQ_(GT}7UXX8Iz`(MC3dA;$5@j)%zq8_B*}-pR#T3T^yUqCZu*n`#zO)rn$H2f-$y#IFg&X?cMk3${C8tTV z?YH=&-JkXr2Ax8_&KH)>^G2<$Hgm};S)WX}tgpXRz3{OM%P~`)?@YLVWo#RV$K5m! zhOa9dbxj$su1`*z+?jvFEH4b1?fL0$8B-n-xF^}P0~fe=?Vevnl-5}hQt0#HkxS>$ z@zW1#JM|MJ6ZCO_4*_S>vpno}_3Xh5+SUhxRna3T=DDEXas1jG>CQo$XeE!x zN#8ejQ5e*B$>t%umOMVfc*8wx{y z1f?KI=iV_0UHJS)DfH|SDPQi&<@yZH)1&GlWvZg|otFgFD+GO2M7Cjf)Uz({WkjuN z<=}_rvvUn|R!G?V!F4YdIX(z|Tr}h;o0Uz+arJaGWJ9VO+l;r3Ub88ps%`!){g{Xi zJgojzq6Z-+_JT!<($Stc;)69#j_>vUc=GQAhsdOQCn?`rq5>K?v~KW!SNtRgc@FKBa_>T=;2fmn(+M|Sv(5Bid3kMvU#3TWzMiTp zCr7Lc)p`%-mSa#9-w!he{)Z1sv-z7U{6zh`M-!>AV%9(jOAx_#$RPxhZ zsLvz$X_}CL|9kkpySvb{IV{Wl;zG7@keQ+ajj&`RovJ6Nv7H7B)?%~z)vQ38JbsY0 zc#yQI<>)m3) zFm$ZJ0*4Zf&jKX)qyUK*=g~sfpCdpaNq$i1H`V{D=S5!d2rp=jJ~m-{V0Yl*eZpA2 z;qFWH7L!08MN2^OF$XJ8+0PzUh~`+7C`lG-qZ22$0~(n;8aIpENcpvKQ2o#|i29o^ z_;-c>vImb<0AOVne-SHRAp@YBeE@ntUjl7CDFC3MJZM2tBPp#m7C^IkP(z+l@1SQ( zd6IzSeL+C-PQMdHU?rfSF?LH-4vDhN;!zIcEiH!%hk!QAe!N0Tm9&ggw?L}f5I8?y zaR^k9aUi^Mq z6SEpFTIR-Z+D-g2GgFy+bIMM0`-t)lhE!v$v^uW%wtEt3<5%ck(?JL}Q|;Tn@A0mC zG-WxIVqmI>P{!3Jl2)b(diZLm&jTw5!QGAF%*1U1L2}eW-T44CrKh0$r58Bi#KncW zuYQI1L|?ACAW@L8%dbyTOv9&x^t<)s8WemZXz}M%)eTCDySP01MtMhC3G`hUKxBiP zNReln*r|haeC^48-p94Yd@@#>y zOP#g4+}RhpQs*A%nD+kJ%c&rqH_5ZNQXigH_stA#TfEjhm+iMKI{ARj*(v0H#);g! zJb=_(XK^nMRonV|(MK(dGL3roSSS=j4|AkHdzo!dOS=;Bq5!h^cxk9Cv2|L0gLF~S z276fFmkGbP5G%o7{a@zjtkn^8Q<+J!eVVY<$4C^EG3pca2Z{LGeBk58zyS^1P~~g> zUuxn)^BTD;p5eDDrcBldQ#+K=mUE~T-D=b?Gbw?o3+4HI*kZwO^x2EYbnf=Yvxa4V z(DJBQpKmn5!e*!lXCBzcFu;l0rua&ND5W^K51s+<&3hwQ=pQmt4rxFg=0T#iboEc} zAjP)?7CeL0E&)y-NsiA+INM3{Nk6}95V3>jzBfoSBZVth0;t$D2j1$0yutwm)ty1X zI|BARTf>rP3u^Q1LwY=Wy9CeHQsvn@{`LV|Tb5^wcJS=O+jzEk8PC>TrTtebGLn!> zGlLri0J6H)Hv&cdDsGkmmLoUs0XI4TB-1?)&P%_F#3wvAF$TCJ0svkYbK??lC*9?_ z6Y;>EZQu*~-X6dP!Rv2*fW5Pbmp0mfXCpLtb|UX$_7ZwTRyY+&5u~uKnV{1O%N|nc zM12#+Mdxy>Wr9{uS`|@E{`nyxaaO>4y+gFaEy6gdR3X=iX8|c^<4b(?Pe0@PQp8b7 z_YOvHduk5fezvMm_alG40?~g10Cv-yuiF-2QH-pW*DgErbrT*jEa!Ge1(k!9S!N7gt&ELfHuyyqVjac}FdO)Ar-jSX)E# z?5CDv`MpPzx)Y$I%3k#PbCIX1ErHEym6W>`{D1zVi_+j-j% z79VDz)etY9=B39T7JFEnR9{!sU_tU^1(e8?7b?AUV)iZgdABD*E{*3Om;ukBYf_W! z-1Wz+Z5^+2YmeEa4Jyg3GS7c80I|;@!SiR1&vlaK%1~`}qeS0yrG1(H=wR)oIh=Yl zYTq+G`BR>4N>xjv*Q~Jlbw%gkP>BD3^5Z@dFC*GDZ)J#_f26@s$d54|I9k1=N;s0} z7G$+rI4t$^nIO2iaeb_Rrv$syFsH5?)Tx)E6Q?Z{{EZaHlFqqoHAI-5zCfX^iPz8D zEPtP`vCB&_Y{jJsYwUqu@1OD9n9)J1f!h~!bKl1d7q*W`6;585lw47>_GM>?^6}7I zytRX%0NNaJ?)2g{%`tSruuDgkSOw9cWpepnS_k@h_oD@LKBOzS@Thg%4JB#%VEyr1 z^1XN`S9S}B-~Eg^Hl?qclw%`9UHe#4I&YF!nX^AK88=>ac-%)MlUM7FdE-OB;FY0* zS3gh*zEA&N&KEVI*107xS=DdHBz~6KH>}7%#{X(itho=)bOpb@o?JS(Y6`0Denf|^ zz}$D^7jS0%PuGL%Bq!=kn+c9?uxsT^7%8=zuOKLyl zi5lLd$=$c218)(ykhuRNM^H{I%hc3Ch3WBwNq(~nI>61lizus$mgVF#nXSBuGy<1T zAetjAT1U~&t8YJ!p`F#QpyITh&!#4~3RxCwHVrBYxhGv^kX}itaI*~GEu{;opaW+6 zC(FBH4k{CrN-l}@a2|hOa4?SXvG~-dRS6-ChA2Ok^dC-phQ-Cq@gxJ zIkpMjyuSFfG}r6MyvyeMJem$lp;*Gefu%S}f!H zMWVA_VO;Z4_*-yNn~#DfK_F19Uu83Gbk#pjn-wsBtwg`{s+DdQUtWr$5U%)@W^=%K zzc}smqJF1}LNkRQu~3(l$Vr;;!apKRY#YCO!PzJH;+o8trzO-CK~JaijMaD7<$wOi z$dxKslk_Zz-a464FT{AR)n%m^gzg4r8OR{p?D03L{fAre?elxPti)W==leF&vfGYX z{A30R)(9)(MNzuOSj`m)lq6N|+eK88?Q_@v##r^JQg`S}E zyB~6#_({>K3ojG1u9VB$n$P2;y#8tLI2yX51yX0;qnK@ zI3}I=^05!Dbw%0PsWere=|QiVDz+c)9MWoiEFg+WqwzU(}Ze+ zxr=M~zeo0B9Tx>DU0wAZ-#zZKB1)FMQaJP4e#-HK=9|{n_2o}s9f7d-(_|5y*fiYT zeWH87s}+M0M^uK&2w<#Q=jwCO&6r~K0hB#G-?jhL?C|hI=qVs$;lZsfDUHHcqGG_a!qKoHQ;%t zob+?xC3HE9+2by8I>E8+X@sB9Ggm{Z@r*}5YoU-CGaQojnIA3W(ZXUxTtW3H+8KAb zZ#exX+)*MI2hgxX#Y+REZUo!s`0gsTwmL3Nwf;T)3)2bBCbb|k)@V&V^-%T@;T!J} z^w>#M)9!#|u~UC&mgUVq(&Up8J<8O}n+a4qWIU$4Ig)CpYn18qh)#s8pH?59+ZowN zEV<2UnnP{xJ%J20RN5bVK$CiF2WsKIvS{yjRvLch=2-m6YufO zU|NqEH{*r)%gi|_T2EmYB+GUVdSln#z`v$7pJK;3_yl6!YglAb9z$cEHOEat zCw6S!e`T`SBa>`0vtH{^u(#fCU}xPpYvp&xX!j2>m*}u2qT$Pc^-7a7#&s@=CL!bR z^_zFLV^Fd=_o-?n``ZS48&oeo=Jx-&XSG-7SpTPZ1LK9#(eB0UTL-U6bAR`#J50M! z;M$viq4fPD`KAVD2abd~XbX7sr6;9bSvtZU2thA5RR8A%Zl2q|1TP!ah}Z?v>k)`W z$v#&7X5FP^4*L0h*iKxV!qYN{Z1gK;s^GH8wIeq6A)k6rs-Ri$C1T9JKLSvDD{;1y zIn)~qp=U*6Q z;`(;Jq0Q-7y!|K3gKPH81=OHPrAip~neYc!>mbx@=IoyIfUuLYZZqE7O1(sL@on(% zc8Ac%8HGfNm*)7fw2eD#ID9?6K!4EHpz~;2TBi;=JfwOucT})YKT{zpLT4yH?O*bj z6)6dqO9^R5tKS{HbnVcZKRw`h?GsgF%1tl(YwynT2jh}Cs<%jcT@;lN5>+2?&wNYPGbpcHVnU9(1fDMb@6vOhbk|B6Ytxgg*77 zO{}HtRll{E(4cy}Y!M%`Ip6)mW=54=2{0#}-0#+>o20wpQZm1L-?`S3(FNc9XU5?~ zLGAaI*}jL9CmxJXtt{LX^g@6)NW2$P|KG3@Lr~CoebRk;1H68Q*;v_ImRWek{}0rI BwJQJs literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al04_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al04_test_one_moving_one_stationary_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..5e759d5092aac34e42759f0c69e05b3687b7db84 GIT binary patch literal 6656 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 Date: Wed, 6 Sep 2017 10:59:31 -0700 Subject: [PATCH 212/251] Create sample image using matplotlib This is a sample of what the images look like using matplotlib instead of Graph. + imgs/test_geometry/test_extrapolated_intersection/ aa01_test_point_line_no_intr.py - matplotlib to generate: + imgs/test_geometry/test_extrapolated_intersection/out/ aa01_test_point_line_no_intr_2.png - matplotlib generated file --- .../aa01_test_point_line_no_intr.py | 45 ++++++++++++++++++ .../out/aa01_test_point_line_no_intr_2.png | Bin 0 -> 17692 bytes 2 files changed, 45 insertions(+) create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr_2.png diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.py new file mode 100644 index 0000000..7d09070 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.py @@ -0,0 +1,45 @@ +import matplotlib.pyplot as plt +import numpy as np + +fig, ax = plt.subplots() +renderer = fig.canvas.get_renderer() +plt.xlim(-1, 7) +plt.ylim(-1, 5) + +ax.spines['left'].set_position('zero') +ax.spines['right'].set_color('none') +ax.spines['top'].set_color('none') +ax.spines['bottom'].set_position('zero') +ax.grid(True, linestyle='dashed') + +ax.xaxis.get_major_ticks()[0].label1.set_visible(False) +ax.xaxis.get_major_ticks()[1].label1.set_visible(False) +ax.xaxis.get_major_ticks()[-1].label1.set_visible(False) +ax.yaxis.get_major_ticks()[0].label1.set_visible(False) +ax.yaxis.get_major_ticks()[1].label1.set_visible(False) +ax.yaxis.get_major_ticks()[-1].label1.set_visible(False) +ax.xaxis.get_majorticklines()[0].set_visible(False) +ax.xaxis.get_majorticklines()[-2].set_visible(False) +ax.yaxis.get_majorticklines()[0].set_visible(False) +ax.yaxis.get_majorticklines()[-2].set_visible(False) +ax.xaxis.get_gridlines()[0].set_visible(False) +ax.xaxis.get_gridlines()[-1].set_visible(False) +ax.yaxis.get_gridlines()[0].set_visible(False) +ax.yaxis.get_gridlines()[-1].set_visible(False) + +moving_pt = plt.scatter([1], [1], zorder=5) + +moving_pt_an = plt.annotate(s="(1, 1)", xy=(1, 1), zorder=5) +moving_pt_extents = moving_pt_an.get_window_extent(renderer) +moving_pt_an.remove() +moving_pt_an = ax.annotate(s="(1, 1)", xy=(1, 1), xytext=(-moving_pt_extents.width - 5, 5), textcoords='offset pixels', zorder=5) + +moving_pt_ar = ax.annotate("", xy=(1, 1), xytext=(6, 1), arrowprops=dict(arrowstyle="<-", shrinkA=0, shrinkB=0, zorder=4)) + +segment_pts = ax.scatter([2, 6], [4, 2], c='r', zorder=5) +segment_arrow = ax.annotate("", xy=(2, 4), xytext=(6, 2), arrowprops=dict(arrowstyle="-", shrinkA=0, shrinkB=0, color='b', zorder=4)) + +an24 = ax.annotate('(2, 4)', xy=(2, 4), xytext=(5, 5), textcoords='offset pixels') +an62 = ax.annotate('(6, 2)', xy=(6, 2), xytext=(5, 5), textcoords='offset pixels') + +plt.show() \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr_2.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr_2.png new file mode 100644 index 0000000000000000000000000000000000000000..072cebbaa4f66435a575ce0a806cffa95c979fa2 GIT binary patch literal 17692 zcmeHvhdI&4943sDoidsogP7{UN;e$ev z^-=7Gubgl08ic=gp)V+DQ@|e&ia#I0zyG+SsEd(3B%06wnLC%-)km=nb_)cFIK#IvgxzAoZr`Z zF6=HTG@l-sm17M-9_ac*;pT(zx6DL5Y6l8+^Z~)PBD^BFE<~E{Po1RZ{u`8^|Jz z<$V)%Y-<+KzhhQ?b{!%B?BH=S7FNm&XqyI!JLX<~NlMzLV8 zEcF|(?0W<^-A7?DT=!!8we>QLxqZ9xpLQNj$7UvMUr`rX?qsH=DS!R?HEnCebmLQ6 ztgQH-M}>r(2(Ahn9m{2~59{1v-&sTLgd)?!x3nCTeDD`b0q}bUR~xKZhm~3Gx1Wu;gC)W`vRnJo@7KP}YU|L;t>p-0{ie4&n8T|En(Kvok28vYd&K52ky$Xl*lA~nM+^V;_r#v5Olu=}wTz8pdpzdVGL3Nt&b^)m(!(yKQ;TiXt{(4N{9A7PsgxoI&HXXgOujX-W zkM^^*7CYM+IeooV1b1Gj*uz}tHDy%nWcmKDKitNWBAS3dwW5TtP%k?S*#-9Hy}&Ld%jV7^kSi zr?2*{V#&(SdB=00SX^zo3a`LDBnOvHUn{(9S4PS=Yls;e$C}qYf5l(Ad_g7RwCLcH z<5Y*vF=1PWg)Y=}M)G}G`cmZAE?<_J7K3fjTI#vB+j}ZaCtc8M-KE=mlO#4%GS5JY ziWatOR}=0|{F-CVJhyU^3ueT9anh2A7C!v@sqen=pe!^g^YV|CPZ!soR>z2?#>dC^ zWM}H<$dAOJgR*do2HogJ$t+{^*LSx%@@=BkrB((wo`XFw69NUxh)AS-tE)x?Xns>njO@mUwnGj9A-( zbu79;)BtOr^f(|OL0VmML0j$l8QG5?Kc3xOzM5wh4ohuv^*oK=&xOJ$^Wnq+{|^!d z`~BshTFXz1HAruIbi0mV(q6xQ6pJ^4k2FZF-NtxttP~AJ80I=o=qfd+Uo>?dhyCdA z&7b4b6Gq3@D`Kmo3A79*Z?5|$tG+m(k$dqbZmSes-vhI`_sAI;jyR8ZJ#g94FYYtA zly~pW;Z}yD$MH!j#Hyz!F2?t285nQ}S0!N4BSK>f^t=X%P|l4UnlGujF`?eTG5zw! ztEUq4!>OI?D|2orQutJZxHXp~6kv@KQ}8ylM)+KEcw^!e209FST079b0pDo*y^-+iCO@o$bc zi!F?$3^7X@)HFJOnm8hC8-q-p&DVEH%^F5muf8sxE=unS5EpLWAg!IhUXCJ7no9?) ziPC)Ra@#zJt)@OEvA<_o*t$COWYO}sfbbVDQm-V)Gv*fKpZ=pn-tO0DJt4I$Q#8st zR$j&=!89_9TS}zjzfE!_Lq(B``^Ym+A2#&6xkC3nMii|n?aayE?a)#&q_Il)QZGzc zbGpNQHm7F~9GEwDruam2(oufwy4XCiP%|=rUW94yZc}x`6%Q#_T+i;RoxU=46Dy>K zP{w7yyjQcixq=TW`=1~4beCXKi^3zO9H9N1$;ub zI=%eroT~&=i=C$yD%zsE$dQ|i%YUQ9yfKzR!sU%_#?@D9(L$H1s3<90vrVLVjZ3cH zx^=60R`&kxRK0BDC~5D~wDk0Z0hoQHz)7u5<~)}cOpp)MbaN|$DrGu+)@kx;TWjm< z*RMInhL_gP+jfbBM@CvV$6somJ*g5g8o*!Lge=bY?=RT&mKq%sy502cV}RqQqvpq- zrM`J{xg}XmoOA6V^|5D>k%Uv{ZvFY^=wwb~`*3}<&b4dD85`^CGljJzCbZpabD&P7 zs3xzrTMicVa;y01tygn&ymNQf{PVFn#%ZeKhVlhNv3i~+S4)5U*hF?&1TlL- z{efzrQHnw8v(&Q_t$EgZE%X(`0zPWbZf_pwDRIq#TPMSnCq5k1(1xmk9f?g3Qx{Xx zkR~}KIHRC=qLis=&)@yTu0uL`Q@5yuL3wOFSh>FFKa?EN4 zxE-BQJAHki1cg0cP+wGC2qYBj6meg?9mpsyB-Z$6qqg%jb>K{Qu^!Z!$63zYe_Bn_ zT%U4tmxz7#S=%{=vHal`RN%^JLNJju<1IZb?8!+NS~Ugbp!WZQK_z-cI4FAeHz5oxiLwy5@krwI9NnJKR8T=}~;=IOo{ zDfG0|&+}{Fc-5L6=g=sLKN*>5wttt8wp_Px^5S7bM{hxgfXs)jwrk9Vq`2`NzCLg| zSh6iWpcjjD8*ArvDsgun!!5OrEK;3EC+E7nb?CZ_zZI!OT2rwry&+zk?v~XDQeVmxt=p$ily10L z(aCOocnd30vW(+C9%fORTcJC8_JU!9m`ccgHU^L2rB@CYtV>LV&Oa;L>%*F2yR0j=>Z+RYqe$CC(-@Vh+*AK+r zyk_+px6eUd{-H!(ftQiS#K!crT+56fczY7HBP%f_ zg~N^VkNtMjVd|kh-o0G+Qes$1%T=1arFa#7rL`sDd3Hn81Yo`!e;@~EDgB)rH%?#& z&fIxPoG!-KgySt!ln6#6bQP8@9k%=b{BZ&RP_nqh5zC1q?sVMsmu^iDyj{4ecEH zI7!47e5|B@EF+4YAKpf2=8I{Po=JG=s`BcRccg7uH`hH4DXys=%;;A#nK@t}zuAOFNK{7>tcvog%SN_#{8%B8bj(_u?Ga0$sZiD+rY`$fj z9^w5~9hOAHctBDBWzqSC>@Vy7J0gI(VKdrv=7$thS2sp_k*qDd#m3?T65VGUKQXz= zrDfT6pbLh&c>TKuA5zoF6dtC0aFZ#M;=u)jT#NnK&X>lxM0(?=r5gsT{j^DYnC?98 ztE5#CcmA{#Q~k8~D3H8(kZmR2E%wkt_=UOIlc>o{4uRPVEB-}mNWy{CG(JZjj zr~M-h3j+LI20jH2s^2s!Qrw)E#y_OSx9N!!XzLmy0Z(+iWm|OD;wm^ccuM&8OVs=G z0CWQa0;(}P#GE5y-Dt2Tyq+6*F5WN`tyy;GiE%hxV)2+@ETs< zCTWI8RGhm{hDUP18#UPjg{rHqMN1vKYQSyejYHo_v@(6Dl_q^{vEHty3Bx}K}cj%!n}spHKFVy82mjRy0>kHzeeKQ2PPmnYvYGS;i( z>;AodnC^;BTeQ<&GL{$rATTgz+&qTqahno}c+D|$Y4o(XN8MR`W`XkNvO>K1mvg7H z0YCiM&U;n282Ibxwb2AjvH!CO z1jPej2~eLB<7~IZNhMo0hA?q)!=g>E6p9|lNaCks>ibLjcU#s*v`1T`0ZCFHgSREX zf30>S>SHS-n6S!XCnf2Pw>cNTB*1IzM!kK#zC{CvY9qrsAGz3@n<+c@PIcX!-dIaI zDv&r3gyv(;aYa+9=O2X{u(hbo09YlfMSr%D(}Eutv-=}5LYY>I6E`2^F!{D&YFNnj z_6AmnqkZcbqCoMovsJoM73Q{LpVY0*sCcd_LaBQ~CKHd0#skOEzH35emAfs+wZ|%H zF|022=Npcoa)m$#ffZNy@}*Cge6HLy4P%U9waph6$<^1y*{#Cbrl->D(Q=!=g&is} z0_6G`Qha=e-nlw@E`mePK25Us}bu^iDKN+*Qj>iKO3yO>%J`SwZf-x zUHNIYV3>@hdSQH+hH{(->mfQty=x~jO?q$gyDM&87lypemcg)7B1n!Ej%K!k{h2S; zKC@vut3Brf(bN@mPiz%4Kd&c5>hr zqlll`8Zw9YO0O0z8IS#S5UFI<4;f_&k@*8)4D)AL*PVqyi(?%pVrr{AHn4)%Vdd#% zTE!A90^ULZklIa-**BtKL~Gca}>0M&}#-!aNp1aV{LkvIbn;Z z0EJX)w>EqSD{?B=)F=-P4!(|$zX0-%f2?}?AAXhG{QP<;>KN5-;jpgiNbw`jyw(gY zYv@LH%|em)Tv7t2v}_VxhmF41m2ZE4$0LzDlt&b4Dqa%X4e=LgMfWK170SR?8GELM z428dZxA5o#dgG>Y-<=560O^JLn2>6m$DC4vx930ADAq&vYb2Ph_Kc7omrB=wWk4L> zo6aMBik_M$oFzWn@PN>B%5kR0C|GLsbp)?ra*|5qID&DPX9x1!7RKc?GV62PQg_*N z2$z`@O`d~+TP(n@E+7a0z$c{udggUfYG@~~edPhlm$LNN?)ZKRVoaCvTzzfVTN)+i zm?q{h`m#}aQ=(aGXVX0osS!TbbUkr9YP&Bi7_TBhvnOaZS(MXdR3O!Z3sGlHA3DwS zWZtNJcoH-{1K&mtBezs^eK~Arwdlkfm5K9>k%xKb*xlSv24sFRQ9yvWj?*Z3PcOI) z&95*Vr-fZY-$h*Um~+EX2Qe>W_m=hYkM;4cJ^a*y$J5dHfg~Ak$`q{NO`0${fBVas zDZsjnVh&9J#vm8?~L7@64CbR zfmvjF;d4)`29*3&1NBoB+2cWm;DUSDfpB|>I2OZ&AY;4y1_wS#(K4BEs zJ%9c@H#hg=pcRrA$ZP5#e!}^G#X*9N?c(O5-DdI&0duP{d=h*ygs*Jfo;0pkhX3o2 zgETb=>#%G|W_(71vDB>!V(e5+&S{h~1Q|v5?%lf%62iiI<}r8Wb27Bxz4Ab&n(D~o zxpfY!pAy2RF#ee>ST$AE&maY~G>eLRX}yYwf(^{saT{so6(|Y;u&uLf+0t}iqSdd9pGVZ7{OF)Le@ATJ1*nqo;UuQ zLniNgNz=}4AW`9ncon~HvM!KZR{!Qt);TZ6gM_QZ9$Ywa=@1ijgo$chgs*o`gqLoT9`O}@P5{aQ*eo60xL`G? zI3jkBP2rSDa%CW)VXYjYg{g(=yf3N`(D)v47{NGOZLF_w^YXUUg!4Ee|D5i^MxD8F zAwFgIOX^v-q|Ig8u>k(WV5!iww8Se3iTl|SMbYd%(mO)w$(vpR;I#bq!JnIxvq^L$ zCIKk7T<|KMi79y4C`sT7sD88nSP5Y^t*x!> zz-(k~4QV1f2UZA1a%K(Bc94yg%*U{bSnJMBQ@rbW1IHP`O2b~i*z@w4BidK4><9UG zsUPhwf&cOr0KL@82QIH(QWpBkn1-}k7VBp>5aa>sy!4k~N?GQ;HadxN!!=9|J*08$ z;Z{#(rMQYn*@9HTRjxeCn;ROdlLB14^{(m5#FixKbzfGB+>>-N<>cvvAl3q2wfd=9 z#RLTvs>6!j>j|x;IEM;y{L>To8Sh@F0G0`A6$Jk{O?RbcWSjC+`v zd>6JMwSQ$kDNG{*@at;NQs`3anWvKo)XyvEOm**MqL9#~1HksbK? zVWmr#G|iIHzGLt?srAcNRGaj`cDBx&)}8~I)1C~xzwmw_i*xNDlPI3c7d@gZDvEzV zuY7-x3bV)4FTV$Yh0My1L)g3YSu_u+Zx8;ZEZ%)4FOX4|rR@q>Xn&xGUo^;uNN?(o zcj>P-ZaxFi!fk}{F-ub@AcV|CC)sw}V}r9U&q6|Ek%uh8`q4V`G0uB$ayU+LlfL`m zeaP^gb}E^()9e#)NQsa?K@LS36~kObgw%>ZKJH!OFoVN?q*swL0XUer8~h){?*O5f z9V`I#+tW8HV>)X+H?R(XeuKT(F)s1M&ffgGpzDU!-5p!1^A-JwAgUoWiCnxG&9B=1HW?0=`s zsv5U}>pw>S2lC&AwHci5By7EuEcKD^nYP9C2|&34?fSD?*x+XQVIF;40qYBQ=U(H{ z+kM{b3D_+S__}gT9HfN`~8wI;)b_=eue_&V=d_}RuE=bW?VFQ zV60*fhIP5=qNa`xOg6&cP(C6HK=0M3f!_adFlNW|IDXRl2%T)M4Gi$`{0is=-&Z^s z1TFS$xoF*^Jw|RDuE6%mRf3CuWdRcX4`K@bnx6+TtEOfcV~u`S)bne#i{zGV8o90C z1$0{MgjW+*67D@cG|28|=5v2L_y^0go6e{ho^);a*jQS6%*3AI5%Cm1=Sho*NQ=X| z1lVq1-f{Jfk6UfonZka2MlqcT2{S?m5?i%^Y9dU2(abZo@T!p=;&EEs?Oh21Tu*&0 zaUv@WxIql73&BX!)fL`70I@=ILxJeKin~z03Pcf~g6Z`GQX zQA~TLY||^fEDK7)7G(j*wPhl9htAC9n9ck>QWFG69Y;SK5PFez(N_qhCf>vVPr?Cpo zU3dMU;-`Kbq_< zlSaOPc(XPqon2ko?U%Yk6y@dFLt~lzyX;li=cWpHm)!hnNYlkL@?eIUesY@pvR_F< zBY1r_*!y<7>#qA1@bmJ6!euLJb<5#;#z(P}?`oqK^7{ICufwq#sf;+}>M;qyPSd9} z4Y<4A(us4mnln9k-U3C#0-&2h&)fl9iVZ!}y7|ehF*XwDQyI@6JtE@anJH-a)mA=^xdo1+Sgxn`M))^u5Q0D;6MA@`O_ZK;!*T3|u%bo{`-s;nnqpRO5X=&YXM4|(jJiuf4 zr;ope;*|wv4@fcVUS;xu440rnsZHmz|3i$yzpWDEcoeOY$C4j=w_Tlid~$EY^Ao@e&?`rTkKOgF@!VJ$LEP=L#Xg>Ei)}!29b43dEx}_ofUBKSi%Rq& zty;Fez7puwUB%?Cy42&IZS1+A16$J?2DqchF&*rjL-U@nCYr$ABrMBV2qHNmC2oNh zSCv8#V*AL(FwQZo%VBYf$Am#)*t7S@%Py{C&iR?9yBwN6OdlnIq40evT zrKM%_%&dzTp_&9^_ssl45lc-VlGfQcP(g{7nh{V&)LxuR zQfl;lc$Y`ye(75G%y_5@Uo#lU;8Z#ijGQgo(saNV4}=Bxx^iQ6yD6fdd1fFVyzU>& zp>|-F9hk&J2okaApl5n`ao_I|KODpdF@oBLZ`G2%JW@@sv}a?aOlZk{Mv30|%WBxA z^mx<-pdetdwUoHdJGASYGcK<2(wD>00%l-ht2YacA9BGq^vqWT8W9IgPmpdImKIIe zr3oihu{q96-=<&n$dpvejn8+jNMJtzy1LY{{=Wr_v`(z2R2*bU?hp9NunaF)Ww$x> z`DgxCEYjw`(gatrmGv?+^7HdY4tiuIl&bp5$N(r1D>bd6QF?6rJcrjz3{fVy=qOWP zzXnzj9OU&y^sB&mGYptsj~_o4G^;z31b^g`E9<*qdeH=<8L<0$mwjJYp@aY7{y~*6 zLo|qPY)TTMrME4R=wFkbm!-;vJj!*=xp(Q(T&$;4bOZbOsijyj{~GU9C!vIziyS9z zN=XxP%r&T)B(C!4W<0`jn#s!gt}aZZd<>w6WY}pjDbNF9=c&w(H0n7zIy!iKd2<69 zS@Ss0!}ES-u;-LDH1uxVxKSs8h)7XUQO|kauKlMH0Y9G)^)drVc+g6(zX_7waG3%f zq(>EYf0U3-hwNA3+h1Oml#~cXrWO{8h{Z-nrwcTQBxsrnhFWS4Ci;LF;@51nf(RzDP29DHq-BaX8`BX00B-G~^H zDIu*cShsF6r#>nGFaGQ1$@P}F4Q;SaHLqL=aU+ginJIfS-bpsuS&+Q}Cm1I`e|G&X zt7^t_aGS%#ec&;KusfHlIpUsok;O>5=VKYme@X;g#XFB+*6xvOvSktIVt#gL$0hKCMTu%RnIa>C>%{D{-tlTO}y6^w2nc z(Y-@6`QfK%Q_O`|Podo7@pzgjt#@W(tuEc7?OtbkKqyc}nE%F}5upCVs?>qZB1;_v zWB`sWt#~YCIlnU(vzRuI9rO5PR~vDk)>pB)5w)ri7`m|%V5qQvrMH?}AA;@4gW3XxPj$Bm*0ll0YVCF*jK4HeWBi z&~9kQ#m2_wMimQlE>BwRuvskXoI3nh1Waxq59yy zzo!DB0RK6J&D6GH9`aDa;{<{iU&8c=!0Er4tT0xq1NduF5@kbdW>P^{eBb2Ph9nbC zZ?o^G3S~Xs}6B|b>X`r4XxlnMV!q>G+3^rc5fCr9KDSw58 z$B-B!;HBIg`s3Gaozf*1yLW+rwRzXhRtqfF( z&;C8?WIIt$yAU29LF=1gR2=a;tVYT5?fS~OGbc};+@3J}onE~7U&z*0w(b|bK(Pyh zi-0&`D|18JF7Z3o_4_#hfS}5cBL~{n03ftgR+j8{F7Brfg_5yPn5)bKofLwcXO6VO zne>mB&x`)lE)>ib@(2{n{~4h3kTQV)om8C0{oT~8zhiq^<&VGsdt+XofNs*|mf4j~oIAA|4&5NiQk6h7of-=h&2 zJ+DW>`Qr1#7Z5UoC@O=rSIOM`e1fSk;6ioLA-X(kf;x=g;|W&?#bh$C_wA`^Y>b4w zAjF^0O>k^CN+Lo${P~8F0-WNzM0Ei(ZjJacIRWa~_cg#2x3+xK}9V&vDf zv=SDlI)x|DMLO=He}T4qoCs?c)O%KR$`CTiKMW9yi(-!BiEvK-)o=r(>(IomuCBit zcA|VDN3xa+p9hiU=vQx5jJehBlHi1l@lm-1AI1#w{_}beu z4Rzqw-@e^EL{E<({y?v32v1e57XjUPU08T^f{-1&Qc6yBc(i1`!TP&vhS%k&UrFHs zIv&NIf2(_Q*;UaMoWk?~|GmT<^J5Z?FSsWU|v z&6KVY!SVS72oH;fJU7ki6~hgo+h15<4uJj%FPE&WtSm?=*sO#l0!mYZi888}~vHtmZaAN%G#CgVkZtCu@Vf*G&)6(S3O0Su}1)BG&U0ZQ6RC&t~el zFSH1kozdDs#-0sNW&PpNeg;wdKkJH_-URNjXnKCu6jUnOv9;b!ulN*v@`LyLC70LE zr_I#&biCc;UG}N9vjP>`nC-Q|4y_fPl4feHV*UM4L7&qK^?T` zzHA$*tZQVxdSXFH1cG=sjk6bX+kNS$Zd*w3@~T0G!_2)GwEdYSp5rvNBlBb3&bK z*f{o$Skas}Uc-JULNB>U{BbNBW6FNu%B4#W#GEEMvkB1$UN8tO0Y!!^E++?v!j`jj zUeI_6YfXT-Kyc881R%`C^AiYc61#IP6a?qwY>2pkT0P#L8C|+Qr-Ceh7_-ou1aX}W zK0D4Z1Tc<->BNw1;~gj3Qxg-}SLcCjTOr}rw>KXEcB5nD=j6Ox=0(bNnY{@`uu04kTC54^)0J9G0#PU zy^`N%?TJ2VP2d7&y{jF7{6g-#Gv6j)r3WYqtb0&u6sjPyUOJDNL5SPg$nx1W64E)a zINhBNwRd!RzryiXKxnN%YJd`^=O6)*VzB5C*RL)UgZQL0jABS_8peyl*8vL?pm>?K zv%%nlStib@HD!{O`fTjZ1QOCLE6_TrWlBKI$mHZxN#_`?FpHC459aiwJ{>D}OvANk z+Pv*3cFx{du96;4gm@Q>2b|Jcb2D=f&;3NNVLFp2p^%S^<-nR4-6!9IPfdUg+C6+O zZ;_^NChKULmis4Tnv_g42r(j-!tJl|FcX)`q`wM)$C-x))h7Xv|KaX%B_vMB{5;hO zXRYxyAY*nB7e^6Cu@`9>1^>k)6_WK z%=`#2;9S}*zua{l4{b9xOkZqY6O{>0Y|x)_>^RFfH1EbBx%BXpA)A&bO@TU4Cmy{l z?O-NJ@Y*z4wM;)%_TLe7?#|{w15}=9z)icseSj%_dZLo%j05*^$|C2ss9y-6$Z zb!~0!L~tzS%Q)ce;J_R2!MWc@TL!#f5TAC!obKO8(S(X4B&_j|@>g@YJGO1CZ&0lY zU)?~xvfYp%(;nzQ6^gHLf4;GI; zs8w&jUuJR;&Gj64nN4!i0(_bMjuYyR3#cG&@hLt+kDv}gruw{9>+8`*JM7S5C48b% zm>|$+V8a~;L-K-Cr;9n9nnyPO73}@aStr!(2 z_I-GDa)x{_3T40)2gfw8D^FqmX(+I;0Jp*L^C4c)@9vBL5XJvnpUC`*2Sja_J*21^1Rwnd;Q#6tiQ5q?U{15`@%|w=|GR$% z7R6R?l)8Elxa;6-VxYw*3QFsbbZm92r$F^@F!Briwt5yGhGPIic)NB)iK0(!yIJ|6 zpJM0Fb|Ao`KO5J!?v$3M>Ex7;z+m`;+^K^q+3e3h!501{fNbGOMw#+(B9ZuyuAZ&% z5`P~s)c@581dVi+T-UektTRWR_09-88vI6R$Q6OX{pS@a3qe8rJ(k-6JCdvgEcg#- zto3gIbWoBJh3Y#1eLuX%X{w-efyOV-rc-F!BR;ywN%t7Kuzo;+-|J$led%Y17s8S9 z3aH*Wb+SO$!ILL@e}DX^xrp)^{Io4D_^ajYXYUIV3H-a2=^x!z1n4|!sINcyd#U}4 z!uZLwXBquwdJhLRh`U1d;i!efq;A$Vo4^y-m~xp@dj|6H+TCh;ag7|=gw8$}B*~*z z)~o;S`k61Ue(yCA;eRaRCpyL046TpuzmNIw6{l@m%GZ%q~ONUa9CAHi>uH92|v zhwAewLksc>b3?UlsahQWQwV}AqWs7UNUK1^U>115rwk+lUMJROWCvYo2OuE9Y=wc6 z@h&H)zLZpNSgv+?O_vjeQk062u8||Vy(3-R2Wgu@Dm!3bMs(d-r59YWj!2Uma-dta zaYHmJ5lU-@7Ql?%Ad8;2Zhs9a2(FN^JLsh~61;%l>e5VhIFFt@LHw&go3PjQWC)aF zT)z1m6gy?YowZm&ni3W?hI9R(y2yzlIPV}j53m0U(QN^MBdut^5*2o2!oF1l{u_Q3 zp&invA&`~4F$9B^Yu78q=t*o&ZttF0u$t+?LGy@E-T)&kD?rL&6FB%jOb+CEwz>dc zUH&}j=6B%)eCb6EHH|L|jZ_>z7@J#6aw{CUD5KQanPofh`9!8z~eQ%SGAxcquXP?9vEzZd!O$faOrP)5hn=z%`H}k z5dAsWi^ztI4#1b4yZ0i8&p}Dv+yhAeXSZPfJJ%BTC0mRGUdavM*2%Bcl6E~3NXrSL zm&4;_L!4&5L0ki@CUs(~fi|F_1wfPIz@i9<4FzYb)%xZPv273qm%7lt&>bT+j%xG>Y`n0gwLp@g;S? zI!pPDCr1V3O+P&m9nDurod)$ie6Wl14q!dEm7z$)%K~1eYL0Q#y=P9a=PT^np`<Dla)0QNhEsh0 zb6}OFDg-kjm)8M7+cZd29(b)9F}LaQ7l`(A0!9u^gya5{%c)EbI?6HdgW9LNiy@Qt zMouH;BXV)1MF$$1o{gsFrXg4v$UVaTkbB#7Y|&FsDY7U}mgvadcFC1@G?aPQH0 zFbcVvTQ2b2+yi-ioa1F1W9yV5q~Va}`0LHp>`nal{z^w^;yUG~%xgPT6V4!X`#Azp z0ed3qoi+lQ2 zH~|abfF$lPsCm6x*~CV#MFE7cc0d!0ZON=WuQ`r`Aqr_Q82+)E z=|=_3REgfS41$WiYduS?>3aM)SX)Tj<3W*}h(k1fj^n8*;~@%6{y|7j9tg&)kym6u|)P=!Wsw>%8omkjdo3RG`jG#Ga#^nwY`9=Yb4*+*%u$=rwcRhQIgd>4j zjSWJ4rgtW?aRhM$5DyNzq@tH4nfLBKZ{Bd+akNPm@s&XLJ}8-VxGhPAeqp9pI!gS= z-f{35g=ZIqk0ZL4b&8L*el6oq+0=V;$$O#iJ}tMjG#rIiIzJkfAIq^)`c;DCXA+;% zdb2@vB`4+gCZlnc*Baq4oME9J%8{Dyw1@w|&;++X=AG}wqE0unK@B=6Q5+%QI`=0I)L6Go(o&x5 zyqQgRkq+WZSwBol6Q3yoto#J=kF^a9(u!wF4PmXfW$5P|kjy(A780_bblV&b8Q7E# zP+7)cPphvqdi1zWWHwKDz^2iK6ljS@T(Zds{O*8c1qTT<)aFLvLpVuTfyjr6xl&esY2h`&A5eV^Ia zXK?FQ5?J!c@iRF&30t=fL~G!J>EN0s)7<-|79$v98c;Q;rqh*q9gXkxiv{FiuzSF0-VPT}Z|95LNBK5}Xc!;zkfD8fAPp!YjF{oD8Qd3ivh;#=aocybo{YR6; z-_B^-iQdzdarss9bv{{oRnfd{b6VO|5d|IIPB z_l*4h_`e_+^e)?WDQ>&Qw&>S?s>oXn_FR2nbN^3_Nb%>t7}2(5)qib2pLfFnt#H8^ zFHC+7`wfNvrWIHI5p4QRS&*J?%a&8Wp99IFpnkXIZ_NX=NB*7%BucaIN4F**Tw4|z yl+1x2zx|>zmj8#O51;@4zw6@v=@)!#NVi(u2&j-ctO{d>Qo5urmv!O#z5fGx-yN6$ literal 0 HcmV?d00001 From f513a896d8b1785ef70aef850d1040e664e01762 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Thu, 7 Sep 2017 11:58:54 -0700 Subject: [PATCH 213/251] Use matplotlib for images Replace all the graph files and generated images with matplotlib files and generated images. This is from @IanDoarns suggestion on https://github.com/OmkarPathak/pygorithm/issues/69. * imgs/test_geometry/test_extrapolated_intersection/(many) - replace with matplotlib files * tests/test_geometry.py - update documentation to remove references to Graph files (in favor of matplotlib) --- .../__init__.py | 0 .../aa01_test_point_line_no_intr.grf | 70 ------- .../aa01_test_point_line_no_intr.py | 45 ----- .../aa02_test_point_line_no_intr.grf | 70 ------- .../aa03_test_point_line_no_intr.grf | 70 ------- .../aa04_test_point_line_no_intr.grf | 70 ------- .../aa_test_point_line_no_intr.py | 31 +++ .../ab01_test_point_line_touching.grf | 70 ------- .../ab02_test_point_line_touching.grf | 70 ------- .../ab03_test_point_line_touching.grf | 70 ------- .../ab04_test_point_line_touching.grf | 70 ------- .../ab_test_point_line_touching.py | 34 ++++ ...ac01_test_point_line_touching_at_start.grf | 70 ------- ...ac02_test_point_line_touching_at_start.grf | 70 ------- ...ac03_test_point_line_touching_at_start.grf | 70 ------- ...ac04_test_point_line_touching_at_start.grf | 70 ------- .../ac_test_point_line_touching_at_start.py | 34 ++++ .../ad01_test_point_line_intr_later.grf | 70 ------- .../ad02_test_point_line_intr_later.grf | 70 ------- .../ad03_test_point_line_intr_later.grf | 70 ------- .../ad04_test_point_line_intr_later.grf | 70 ------- .../ad_test_point_line_intr_later.py | 34 ++++ .../ae01_test_line_line_no_intr.grf | 95 --------- .../ae02_test_line_line_no_intr.grf | 95 --------- .../ae03_test_line_line_no_intr.grf | 95 --------- .../ae04_test_line_line_no_intr.grf | 95 --------- .../ae_test_line_line_no_intr.py | 34 ++++ .../af01_test_line_line_touching.grf | 95 --------- .../af02_test_line_line_touching.grf | 95 --------- .../af03_test_line_line_touching.grf | 95 --------- .../af04_test_line_line_touching.grf | 95 --------- .../af_test_line_line_touching.py | 34 ++++ .../ag01_test_line_line_touching_at_start.grf | 95 --------- .../ag02_test_line_line_touching_at_start.grf | 95 --------- .../ag03_test_line_line_touching_at_start.grf | 95 --------- .../ag04_test_line_line_touching_at_start.grf | 95 --------- .../ag_test_line_line_touching_at_start.py | 34 ++++ .../ah01_test_line_line_intr_later.grf | 95 --------- .../ah02_test_line_line_intr_later.grf | 95 --------- .../ah03_test_line_line_intr_later.grf | 95 --------- .../ah04_test_line_line_intr_later.grf | 95 --------- .../ah_test_line_line_intr_later.py | 34 ++++ ...test_one_moving_one_stationary_no_intr.grf | 153 --------------- ...test_one_moving_one_stationary_no_intr.grf | 153 --------------- ...test_one_moving_one_stationary_no_intr.grf | 153 --------------- ...test_one_moving_one_stationary_no_intr.grf | 155 --------------- ..._test_one_moving_one_stationary_no_intr.py | 34 ++++ ...est_one_moving_one_stationary_touching.grf | 176 ----------------- ...est_one_moving_one_stationary_touching.grf | 176 ----------------- ...est_one_moving_one_stationary_touching.grf | 178 ----------------- ...est_one_moving_one_stationary_touching.grf | 178 ----------------- ...test_one_moving_one_stationary_touching.py | 34 ++++ ...ne_moving_one_stationary_intr_at_start.grf | 178 ----------------- ...ne_moving_one_stationary_intr_at_start.grf | 180 ------------------ ...ne_moving_one_stationary_intr_at_start.grf | 180 ------------------ ...ne_moving_one_stationary_intr_at_start.grf | 180 ------------------ ...one_moving_one_stationary_intr_at_start.py | 34 ++++ ...t_one_moving_one_stationary_intr_later.grf | 180 ------------------ ...t_one_moving_one_stationary_intr_later.grf | 178 ----------------- ...t_one_moving_one_stationary_intr_later.grf | 178 ----------------- ...t_one_moving_one_stationary_intr_later.grf | 178 ----------------- ...st_one_moving_one_stationary_intr_later.py | 34 ++++ .../out/aa01_test_point_line_no_intr.png | Bin 4339 -> 18888 bytes .../out/aa01_test_point_line_no_intr_2.png | Bin 17692 -> 0 bytes .../out/aa02_test_point_line_no_intr.png | Bin 4325 -> 19305 bytes .../out/aa03_test_point_line_no_intr.png | Bin 4457 -> 19375 bytes .../out/aa04_test_point_line_no_intr.png | Bin 5021 -> 22928 bytes .../out/ab01_test_point_line_touching.png | Bin 4624 -> 20998 bytes .../out/ab02_test_point_line_touching.png | Bin 4593 -> 21204 bytes .../out/ab03_test_point_line_touching.png | Bin 4423 -> 19010 bytes .../out/ab04_test_point_line_touching.png | Bin 5002 -> 23654 bytes ...ac01_test_point_line_touching_at_start.png | Bin 4535 -> 19369 bytes ...ac02_test_point_line_touching_at_start.png | Bin 3700 -> 15456 bytes ...ac03_test_point_line_touching_at_start.png | Bin 5035 -> 17874 bytes ...ac04_test_point_line_touching_at_start.png | Bin 0 -> 16735 bytes .../out/ad01_test_point_line_intr_later.png | Bin 5105 -> 19231 bytes .../out/ad02_test_point_line_intr_later.png | Bin 4900 -> 17063 bytes .../out/ad03_test_point_line_intr_later.png | Bin 4337 -> 18733 bytes .../out/ad04_test_point_line_intr_later.png | Bin 4736 -> 21565 bytes .../out/ae01_test_line_line_no_intr.png | Bin 4464 -> 20493 bytes .../out/ae02_test_line_line_no_intr.png | Bin 5786 -> 26422 bytes .../out/ae03_test_line_line_no_intr.png | Bin 5912 -> 27692 bytes .../out/ae04_test_line_line_no_intr.png | Bin 4901 -> 22507 bytes .../out/af01_test_line_line_touching.png | Bin 4951 -> 22607 bytes .../out/af02_test_line_line_touching.png | Bin 4373 -> 18119 bytes .../out/af03_test_line_line_touching.png | Bin 4387 -> 18508 bytes .../out/af04_test_line_line_touching.png | Bin 3876 -> 17512 bytes .../ag01_test_line_line_touching_at_start.png | Bin 4048 -> 18904 bytes .../ag02_test_line_line_touching_at_start.png | Bin 4168 -> 19422 bytes .../ag03_test_line_line_touching_at_start.png | Bin 4528 -> 21783 bytes .../ag04_test_line_line_touching_at_start.png | Bin 5103 -> 24503 bytes .../out/ah01_test_line_line_intr_later.png | Bin 5437 -> 24285 bytes .../out/ah02_test_line_line_intr_later.png | Bin 5069 -> 22200 bytes .../out/ah03_test_line_line_intr_later.png | Bin 4766 -> 21833 bytes .../out/ah04_test_line_line_intr_later.png | Bin 5183 -> 22961 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 7019 -> 31800 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 7155 -> 32981 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 6253 -> 30689 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 5975 -> 27658 bytes ...est_one_moving_one_stationary_touching.png | Bin 7373 -> 41040 bytes ...est_one_moving_one_stationary_touching.png | Bin 8542 -> 42552 bytes ...est_one_moving_one_stationary_touching.png | Bin 5879 -> 25401 bytes ...est_one_moving_one_stationary_touching.png | Bin 5792 -> 28013 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 4917 -> 23309 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 6510 -> 29745 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 6478 -> 28603 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 6975 -> 30860 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 6187 -> 28906 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 6644 -> 32572 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 6560 -> 29295 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 6656 -> 34554 bytes .../test_extrapolated_intersection/utils.py | 155 +++++++++++++++ tests/test_geometry.py | 18 +- 113 files changed, 572 insertions(+), 5445 deletions(-) create mode 100644 imgs/test_geometry/test_extrapolated_intersection/__init__.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa02_test_point_line_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa03_test_point_line_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa04_test_point_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aa_test_point_line_no_intr.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab01_test_point_line_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab02_test_point_line_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab03_test_point_line_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab04_test_point_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ab_test_point_line_touching.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac01_test_point_line_touching_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac02_test_point_line_touching_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac03_test_point_line_touching_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac04_test_point_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ac_test_point_line_touching_at_start.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad01_test_point_line_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad02_test_point_line_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad03_test_point_line_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad04_test_point_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ad_test_point_line_intr_later.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae01_test_line_line_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae02_test_line_line_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae03_test_line_line_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae04_test_line_line_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ae_test_line_line_no_intr.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/af01_test_line_line_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/af02_test_line_line_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/af03_test_line_line_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/af04_test_line_line_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/af_test_line_line_touching.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag01_test_line_line_touching_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag02_test_line_line_touching_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag03_test_line_line_touching_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag04_test_line_line_touching_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ag_test_line_line_touching_at_start.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah01_test_line_line_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah02_test_line_line_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah03_test_line_line_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah04_test_line_line_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ah_test_line_line_intr_later.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai01_test_one_moving_one_stationary_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai02_test_one_moving_one_stationary_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai03_test_one_moving_one_stationary_no_intr.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai04_test_one_moving_one_stationary_no_intr.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ai_test_one_moving_one_stationary_no_intr.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj01_test_one_moving_one_stationary_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj02_test_one_moving_one_stationary_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj03_test_one_moving_one_stationary_touching.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj04_test_one_moving_one_stationary_touching.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aj_test_one_moving_one_stationary_touching.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak01_test_one_moving_one_stationary_intr_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak02_test_one_moving_one_stationary_intr_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak03_test_one_moving_one_stationary_intr_at_start.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak04_test_one_moving_one_stationary_intr_at_start.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ak_test_one_moving_one_stationary_intr_at_start.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/al01_test_one_moving_one_stationary_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/al02_test_one_moving_one_stationary_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/al03_test_one_moving_one_stationary_intr_later.grf delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/al04_test_one_moving_one_stationary_intr_later.grf create mode 100644 imgs/test_geometry/test_extrapolated_intersection/al_test_one_moving_one_stationary_intr_later.py delete mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr_2.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ac04_test_point_line_touching_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/utils.py diff --git a/imgs/test_geometry/test_extrapolated_intersection/__init__.py b/imgs/test_geometry/test_extrapolated_intersection/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.grf deleted file mode 100644 index d08315d..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 6,2;2,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;6,1; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 1 -Points = 1,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.py deleted file mode 100644 index 7d09070..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aa01_test_point_line_no_intr.py +++ /dev/null @@ -1,45 +0,0 @@ -import matplotlib.pyplot as plt -import numpy as np - -fig, ax = plt.subplots() -renderer = fig.canvas.get_renderer() -plt.xlim(-1, 7) -plt.ylim(-1, 5) - -ax.spines['left'].set_position('zero') -ax.spines['right'].set_color('none') -ax.spines['top'].set_color('none') -ax.spines['bottom'].set_position('zero') -ax.grid(True, linestyle='dashed') - -ax.xaxis.get_major_ticks()[0].label1.set_visible(False) -ax.xaxis.get_major_ticks()[1].label1.set_visible(False) -ax.xaxis.get_major_ticks()[-1].label1.set_visible(False) -ax.yaxis.get_major_ticks()[0].label1.set_visible(False) -ax.yaxis.get_major_ticks()[1].label1.set_visible(False) -ax.yaxis.get_major_ticks()[-1].label1.set_visible(False) -ax.xaxis.get_majorticklines()[0].set_visible(False) -ax.xaxis.get_majorticklines()[-2].set_visible(False) -ax.yaxis.get_majorticklines()[0].set_visible(False) -ax.yaxis.get_majorticklines()[-2].set_visible(False) -ax.xaxis.get_gridlines()[0].set_visible(False) -ax.xaxis.get_gridlines()[-1].set_visible(False) -ax.yaxis.get_gridlines()[0].set_visible(False) -ax.yaxis.get_gridlines()[-1].set_visible(False) - -moving_pt = plt.scatter([1], [1], zorder=5) - -moving_pt_an = plt.annotate(s="(1, 1)", xy=(1, 1), zorder=5) -moving_pt_extents = moving_pt_an.get_window_extent(renderer) -moving_pt_an.remove() -moving_pt_an = ax.annotate(s="(1, 1)", xy=(1, 1), xytext=(-moving_pt_extents.width - 5, 5), textcoords='offset pixels', zorder=5) - -moving_pt_ar = ax.annotate("", xy=(1, 1), xytext=(6, 1), arrowprops=dict(arrowstyle="<-", shrinkA=0, shrinkB=0, zorder=4)) - -segment_pts = ax.scatter([2, 6], [4, 2], c='r', zorder=5) -segment_arrow = ax.annotate("", xy=(2, 4), xytext=(6, 2), arrowprops=dict(arrowstyle="-", shrinkA=0, shrinkB=0, color='b', zorder=4)) - -an24 = ax.annotate('(2, 4)', xy=(2, 4), xytext=(5, 5), textcoords='offset pixels') -an62 = ax.annotate('(6, 2)', xy=(6, 2), xytext=(5, 5), textcoords='offset pixels') - -plt.show() \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa02_test_point_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/aa02_test_point_line_no_intr.grf deleted file mode 100644 index 4863c7c..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aa02_test_point_line_no_intr.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 6,2;2,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;1,4; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 1 -Points = 1,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa03_test_point_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/aa03_test_point_line_no_intr.grf deleted file mode 100644 index 62c54bd..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aa03_test_point_line_no_intr.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 6,4;2,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,1;1,4; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 1 -Points = 4,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa04_test_point_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/aa04_test_point_line_no_intr.grf deleted file mode 100644 index c24d2a8..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aa04_test_point_line_no_intr.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 4 -PointCount = 2 -Points = 1,2;5,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;6,4; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 1 -Points = 2,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/aa_test_point_line_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/aa_test_point_line_no_intr.py new file mode 100644 index 0000000..cf9be2a --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aa_test_point_line_no_intr.py @@ -0,0 +1,31 @@ +from utils import create_newfig, create_moving_point, create_still_segment, run_or_export + +def setup_fig01(): + fig, ax, renderer = create_newfig('aa01') + + create_moving_point(fig, ax, renderer, 1, 1, 6, 1) + create_still_segment(fig, ax, renderer, (2, 4), (6, 2)) + return fig, ax, 'aa01_test_point_line_no_intr' + +def setup_fig02(): + fig, ax, renderer = create_newfig('aa02') + + create_moving_point(fig, ax, renderer, 1, 1, 1, 4) + create_still_segment(fig, ax, renderer, (2, 4), (6, 2), 'topright') + return fig, ax, 'aa02_test_point_line_no_intr' + +def setup_fig03(): + fig, ax, renderer = create_newfig('aa03') + + create_moving_point(fig, ax, renderer, 4, 1, 1, 4) + create_still_segment(fig, ax, renderer, (2, 4), (6, 4), 'topright') + return fig, ax, 'aa03_test_point_line_no_intr' + +def setup_fig04(): + fig, ax, renderer = create_newfig('aa04') + + create_moving_point(fig, ax, renderer, 2, 1, 6, 4) + create_still_segment(fig, ax, renderer, (1, 2), (5, 4), 'topleft') + return fig, ax, 'aa04_test_point_line_no_intr' + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab01_test_point_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/ab01_test_point_line_touching.grf deleted file mode 100644 index 5fe7886..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ab01_test_point_line_touching.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 6,2;2,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;2,4; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 1 -Points = 1,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab02_test_point_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/ab02_test_point_line_touching.grf deleted file mode 100644 index 08daedb..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ab02_test_point_line_touching.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 6,2;2,0; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;6,2; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 1 -Points = 2,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab03_test_point_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/ab03_test_point_line_touching.grf deleted file mode 100644 index 63c576f..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ab03_test_point_line_touching.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 6,2;2,0; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;2,0; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 2,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab04_test_point_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/ab04_test_point_line_touching.grf deleted file mode 100644 index 5ef92c3..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ab04_test_point_line_touching.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 6,2;2,0; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 6.25,3;2,0; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 6.25,3; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ab_test_point_line_touching.py b/imgs/test_geometry/test_extrapolated_intersection/ab_test_point_line_touching.py new file mode 100644 index 0000000..0c15639 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ab_test_point_line_touching.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_point, create_still_segment, run_or_export + +func_code = 'ab' +func_name = 'test_point_line_touching' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_point(fig, ax, renderer, 1, 1, 2, 4) + create_still_segment(fig, ax, renderer, (2, 4), (6, 2), 'topright') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_point(fig, ax, renderer, 2, 1, 6, 2) + create_still_segment(fig, ax, renderer, (2, 0), (6, 2), 'botright') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_point(fig, ax, renderer, 2, 1, 2, 0) + create_still_segment(fig, ax, renderer, (2, 0), (6, 2), 'botright') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_point(fig, ax, renderer, 6.25, 3, 2, 0, 'topright') + create_still_segment(fig, ax, renderer, (2, 0), (6, 2), 'botright') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac01_test_point_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ac01_test_point_line_touching_at_start.grf deleted file mode 100644 index 38d8efd..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ac01_test_point_line_touching_at_start.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 6,2;2,0; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,1;3,2; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 4,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac02_test_point_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ac02_test_point_line_touching_at_start.grf deleted file mode 100644 index 1942a83..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ac02_test_point_line_touching_at_start.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 6 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 6,2;2,2; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,2;1,2; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 2,2; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac03_test_point_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ac03_test_point_line_touching_at_start.grf deleted file mode 100644 index e397013..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ac03_test_point_line_touching_at_start.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 3,0;3,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,1;4,2; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 3,1; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac04_test_point_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ac04_test_point_line_touching_at_start.grf deleted file mode 100644 index bf9b9df..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ac04_test_point_line_touching_at_start.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 6 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 3,0;3,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,4;2,4; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 3,4; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ac_test_point_line_touching_at_start.py b/imgs/test_geometry/test_extrapolated_intersection/ac_test_point_line_touching_at_start.py new file mode 100644 index 0000000..89a64df --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ac_test_point_line_touching_at_start.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_point, create_still_segment, run_or_export + +func_code = 'ac' +func_name = 'test_point_line_touching_at_start' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_point(fig, ax, renderer, 4, 1, 3, 2, 'top') + create_still_segment(fig, ax, renderer, (2, 0), (6, 2), 'botright') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_point(fig, ax, renderer, 2, 2, 1, 2, 'top') + create_still_segment(fig, ax, renderer, (2, 2), (6, 2), 'botright') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_point(fig, ax, renderer, 3, 1, 4, 2, 'left') + create_still_segment(fig, ax, renderer, (3, 0), (3, 4), 'botright') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_point(fig, ax, renderer, 3, 4, 2, 4, 'top') + create_still_segment(fig, ax, renderer, (3, 0), (3, 4), 'botright') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad01_test_point_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ad01_test_point_line_intr_later.grf deleted file mode 100644 index 7add54e..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ad01_test_point_line_intr_later.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 3,0;3,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,2;3,1; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 0,2; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad02_test_point_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ad02_test_point_line_intr_later.grf deleted file mode 100644 index 341f88d..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ad02_test_point_line_intr_later.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 3,0;3,4; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 6,2;3,2; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 6,2; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad03_test_point_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ad03_test_point_line_intr_later.grf deleted file mode 100644 index 562133e..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ad03_test_point_line_intr_later.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,1;5,3; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 6,2;3,2; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 6,2; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad04_test_point_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ad04_test_point_line_intr_later.grf deleted file mode 100644 index 56ee3ed..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ad04_test_point_line_intr_later.grf +++ /dev/null @@ -1,70 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,1;5,3; -LegendText = Line - -[PointSeries2] -FillColor = clBlack -LineColor = clBlue -Size = 3 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 6,4;3,2; -LegendText = Point (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlue -Size = 5 -Style = 0 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 0 -PointCount = 1 -Points = 6,4; -LegendText = Point - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 3 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ad_test_point_line_intr_later.py b/imgs/test_geometry/test_extrapolated_intersection/ad_test_point_line_intr_later.py new file mode 100644 index 0000000..2e0b285 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ad_test_point_line_intr_later.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_point, create_still_segment, run_or_export + +func_code = 'ad' +func_name = 'test_point_line_intr_later' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_point(fig, ax, renderer, 0, 2, 3, 1, 'topright') + create_still_segment(fig, ax, renderer, (3, 0), (3, 4), 'botright') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_point(fig, ax, renderer, 6, 2, 3, 2, 'top') + create_still_segment(fig, ax, renderer, (3, 0), (3, 4), 'botright') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_point(fig, ax, renderer, 6, 2, 3, 2, 'top') + create_still_segment(fig, ax, renderer, (1, 1), (5, 3), 'botright') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_point(fig, ax, renderer, 6, 4, 3, 2, 'top') + create_still_segment(fig, ax, renderer, (1, 1), (5, 3), 'botright') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae01_test_line_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ae01_test_line_line_no_intr.grf deleted file mode 100644 index f7f2df2..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ae01_test_line_line_no_intr.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,4;3,4; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;3,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,3;1,4; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;3,2; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,4;3,3; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae02_test_line_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ae02_test_line_line_no_intr.grf deleted file mode 100644 index 2de5dac..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ae02_test_line_line_no_intr.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,4;5,1; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;4,0; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,3;2,4; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,0.5;3,0.5; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,1;4,0; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae03_test_line_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ae03_test_line_line_no_intr.grf deleted file mode 100644 index a6a0b35..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ae03_test_line_line_no_intr.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,4;5,1; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;4,0; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,3;2,4; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 2 -Points = 4,3;6,4; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,1;4,0; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae04_test_line_line_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ae04_test_line_line_no_intr.grf deleted file mode 100644 index b1b6d18..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ae04_test_line_line_no_intr.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;4,0; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,3;5,0; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,3;2,3; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,4;3,3; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,0;4,0; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ae_test_line_line_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/ae_test_line_line_no_intr.py new file mode 100644 index 0000000..6180d6c --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ae_test_line_line_no_intr.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_line, create_still_segment, run_or_export + +func_code = 'ae' +func_name = 'test_line_line_no_intr' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 4), (1, 3), (2, 0), 'botright') + create_still_segment(fig, ax, renderer, (1, 1), (3, 2), 'bot') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 3), (2, 4), (3, -3), 'topleft') + create_still_segment(fig, ax, renderer, (1, 0.5), (3, 0.5), 'bot') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 3), (2, 4), (3, -3), 'topleft') + create_still_segment(fig, ax, renderer, (4, 3), (6, 4), 'botright') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 3), (2, 3), (3, -3), 'bot') + create_still_segment(fig, ax, renderer, (0, 4), (3, 3), 'topright') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/af01_test_line_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/af01_test_line_line_touching.grf deleted file mode 100644 index eb7b8dc..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/af01_test_line_line_touching.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;4,0; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,3;5,0; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,3;2,3; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 5,0;3,3; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,0;4,0; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/af02_test_line_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/af02_test_line_line_touching.grf deleted file mode 100644 index 9769188..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/af02_test_line_line_touching.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;2,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;3,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,1;2,1; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 3,3;3,2; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,2;3,2; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/af03_test_line_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/af03_test_line_line_touching.grf deleted file mode 100644 index 2375494..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/af03_test_line_line_touching.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;3,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;4,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,1;2,1; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 3,3;2,3; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,3;4,3; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/af04_test_line_line_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/af04_test_line_line_touching.grf deleted file mode 100644 index d418da9..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/af04_test_line_line_touching.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;1,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;2,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 7 -PointCount = 2 -Points = 1,1;2,1; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 3,3;2,3; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;2,3; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/af_test_line_line_touching.py b/imgs/test_geometry/test_extrapolated_intersection/af_test_line_line_touching.py new file mode 100644 index 0000000..ab681cc --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/af_test_line_line_touching.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_line, create_still_segment, run_or_export + +func_code = 'af' +func_name = 'test_line_line_touching' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 3), (2, 3), (3, -3), 'top') + create_still_segment(fig, ax, renderer, (3, 3), (5, 0), 'topright') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 1), (2, 1), (1, 1), 'bot') + create_still_segment(fig, ax, renderer, (3, 2), (3, 3), 'right') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 1), (2, 1), (2, 2), 'bot') + create_still_segment(fig, ax, renderer, (2, 3), (3, 3), 'top') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 1), (2, 1), (0, 2), 'bot') + create_still_segment(fig, ax, renderer, (2, 3), (3, 3), 'top') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag01_test_line_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ag01_test_line_line_touching_at_start.grf deleted file mode 100644 index 2ac6bbb..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ag01_test_line_line_touching_at_start.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;1,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;2,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 2 -Points = 1,1;2,1; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 2,1;3,0; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;2,3; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag02_test_line_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ag02_test_line_line_touching_at_start.grf deleted file mode 100644 index 64ed59e..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ag02_test_line_line_touching_at_start.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;3,1; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;3,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 2 -Points = 1,1;1,3; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 1,2;2,2; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,1;3,3; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag03_test_line_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ag03_test_line_line_touching_at_start.grf deleted file mode 100644 index 3ac98c2..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ag03_test_line_line_touching_at_start.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;3,1; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,0;4,0; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 1,1;2,0; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 2 -Points = 0,1;1.5,0.5; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,1;4,0; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag04_test_line_line_touching_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ag04_test_line_line_touching_at_start.grf deleted file mode 100644 index 8aa9839..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ag04_test_line_line_touching_at_start.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,4;3,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 6,3;4,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 5,4;6,3; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 2 -Points = 5.5,3.5;6,4; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;4,1; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ag_test_line_line_touching_at_start.py b/imgs/test_geometry/test_extrapolated_intersection/ag_test_line_line_touching_at_start.py new file mode 100644 index 0000000..8cb8711 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ag_test_line_line_touching_at_start.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_line, create_still_segment, run_or_export + +func_code = 'ag' +func_name = 'test_line_line_touching_at_start' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 1), (2, 1), (0, 2), 'botleft') + create_still_segment(fig, ax, renderer, (2, 1), (3, 0), 'topright') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 1), (1, 3), (2, 0), 'left') + create_still_segment(fig, ax, renderer, (1, 2), (2, 2), 'topright') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_line(fig, ax, renderer, (1, 1), (2, 0), (2, 0), 'topright') + create_still_segment(fig, ax, renderer, (0, 1), (1.5, 0.5), 'botleft') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_line(fig, ax, renderer, (5, 4), (6, 3), (-2, -2), 'topright') + create_still_segment(fig, ax, renderer, (5.5, 3.5), (6, 4), 'botleft', 'botright') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah01_test_line_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ah01_test_line_line_intr_later.grf deleted file mode 100644 index a0f0703..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ah01_test_line_line_intr_later.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,4;3,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 6,3;4,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 5,4;6,3; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 2 -Points = 3.5,1.5;3.5,0; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;4,1; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah02_test_line_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ah02_test_line_line_intr_later.grf deleted file mode 100644 index 6eb57a1..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ah02_test_line_line_intr_later.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,4;3,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,3;3,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 5,4;5,3; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 2 -Points = 3,3;3,0; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;3,1; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah03_test_line_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ah03_test_line_line_intr_later.grf deleted file mode 100644 index 81970b9..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ah03_test_line_line_intr_later.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,4;3,4; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,3;3,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 5,4;5,3; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 2 -Points = 3,3.5;1,1; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,3;3,4; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah04_test_line_line_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/ah04_test_line_line_intr_later.grf deleted file mode 100644 index b60a4ed..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ah04_test_line_line_intr_later.grf +++ /dev/null @@ -1,95 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,1;1,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,0;2,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 2 -Points = 0,1;1,0; -LegendText = Moving Line - -[PointSeries4] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 2 -Points = 2,1;2,4; -LegendText = Stationary Line - -[PointSeries5] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;2,2; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 5 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ah_test_line_line_intr_later.py b/imgs/test_geometry/test_extrapolated_intersection/ah_test_line_line_intr_later.py new file mode 100644 index 0000000..f7c4c2b --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ah_test_line_line_intr_later.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_line, create_still_segment, run_or_export + +func_code = 'ah' +func_name = 'test_line_line_intr_later' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_line(fig, ax, renderer, (5, 4), (6, 3), (-2, -2), 'topright') + create_still_segment(fig, ax, renderer, (3.5, 1.5), (3.5, 0), 'botleft', 'bot') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_line(fig, ax, renderer, (5, 4), (5, 3), (-2, -2), 'topright') + create_still_segment(fig, ax, renderer, (3, 3), (3, 0), 'left') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_line(fig, ax, renderer, (5, 4), (5, 3), (-2, 0), 'right') + create_still_segment(fig, ax, renderer, (1, 1), (3, 3.5), 'left') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_line(fig, ax, renderer, (0, 1), (1, 0), (1, 2), 'topright') + create_still_segment(fig, ax, renderer, (2, 1), (2, 4), 'right') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai01_test_one_moving_one_stationary_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ai01_test_one_moving_one_stationary_no_intr.grf deleted file mode 100644 index 20aeb4f..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ai01_test_one_moving_one_stationary_no_intr.grf +++ /dev/null @@ -1,153 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,1;0,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;2,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,2;1,4; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,0;1,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 0,1;1,0;2,1;1,2;0,1; -LegendText = Moving Polygon - -[PointSeries6] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 3,1;3,2;4,1;3,1; -LegendText = Stationary Polygon - -[PointSeries7] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,4;2,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,3;1,4; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,2;2,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,3;1,2; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 10 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai02_test_one_moving_one_stationary_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ai02_test_one_moving_one_stationary_no_intr.grf deleted file mode 100644 index 9174c50..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ai02_test_one_moving_one_stationary_no_intr.grf +++ /dev/null @@ -1,153 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,1;1,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;3,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,2;2,4; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,0;2,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 0,1;1,0;2,1;1,2;0,1; -LegendText = Moving Polygon - -[PointSeries6] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 3,1;3,2;4,1;3,1; -LegendText = Stationary Polygon - -[PointSeries7] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,4;3,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;2,4; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,2;3,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;2,2; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 10 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai03_test_one_moving_one_stationary_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ai03_test_one_moving_one_stationary_no_intr.grf deleted file mode 100644 index 69b7bca..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ai03_test_one_moving_one_stationary_no_intr.grf +++ /dev/null @@ -1,153 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,4;2,4; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,3.5;3,3.5; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,3;2,3; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;3.5,2.5; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 4,3;4,4;5,3.5;5.5,2.5;4,3; -LegendText = Moving Polygon - -[PointSeries6] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 3,1;3,2;4,1;3,1; -LegendText = Stationary Polygon - -[PointSeries7] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,4;2,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,4;3,3.5; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,3.5;3.5,2.5; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,3;3.5,2.5; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 10 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai04_test_one_moving_one_stationary_no_intr.grf b/imgs/test_geometry/test_extrapolated_intersection/ai04_test_one_moving_one_stationary_no_intr.grf deleted file mode 100644 index 40e2b1b..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ai04_test_one_moving_one_stationary_no_intr.grf +++ /dev/null @@ -1,155 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;5,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,1;5,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,1;6,1; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;3.5,2.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 4,3;4,4;5,3.5;5.5,2.5;4,3; -LegendText = Moving Polygon - -[PointSeries6] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 3,1;3,2;4,1;3,1; -LegendText = Stationary Polygon - -[PointSeries7] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,2;5,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,1;6,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,2;6,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,3;3.5,2.5; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 10 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ai_test_one_moving_one_stationary_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/ai_test_one_moving_one_stationary_no_intr.py new file mode 100644 index 0000000..376ea02 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ai_test_one_moving_one_stationary_no_intr.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'ai' +func_name = 'test_one_moving_one_stationary_no_intr' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((0, 1, 'right'), (1, 2, 'bot'), (2, 1, 'left'), (1, 0, 'top')), (0, 2)) + create_still_polygon(fig, ax, renderer, ((3, 1), (3, 2), (4, 1)), 'botleft') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((0, 1, 'right'), (1, 2, 'bot'), (2, 1, 'left'), (1, 0, 'top')), (1, 2)) + create_still_polygon(fig, ax, renderer, ((3, 1), (3, 2), (4, 1)), 'botleft') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((4, 4), (5, 3.5), (5.5, 2.5), (4, 3)), (-2, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 1), (3, 2), (4, 1)), 'botleft') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((3, 1), (3, 2), (4, 1)), (2, 0), 'botleft') + create_still_polygon(fig, ax, renderer, ((4, 4), (5, 3.5), (5.5, 2.5), (4, 3)), 'topright') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj01_test_one_moving_one_stationary_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/aj01_test_one_moving_one_stationary_touching.grf deleted file mode 100644 index 22f642a..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aj01_test_one_moving_one_stationary_touching.grf +++ /dev/null @@ -1,176 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,3;0,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,2;1,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,4;1,4; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,3.5;2,3.5; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;2.5,2.5; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 6 -Points = 3,3;4,4;5,3.5;5.5,2.5;4,2;3,3; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 5 -Points = 0,1;1,2;2,1;1,0;0,1; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,4;0,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,3;1,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,2;2.5,2.5; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,3.5;2.5,2.5; -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,4;2,3.5; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj02_test_one_moving_one_stationary_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/aj02_test_one_moving_one_stationary_touching.grf deleted file mode 100644 index 87e6aa6..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aj02_test_one_moving_one_stationary_touching.grf +++ /dev/null @@ -1,176 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,3;2,1; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,2;3,0; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,4;3,2; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,3.5;4,1.5; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 6 -Points = 3,3;4,4;5,3.5;5.5,2.5;4,2;3,3; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 5 -Points = 0,1;1,2;2,1;1,0;0,1; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;3,0; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,0;4.5,0.5; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 4.5,0.5;4,1.5; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 4,1.5;3,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj03_test_one_moving_one_stationary_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/aj03_test_one_moving_one_stationary_touching.grf deleted file mode 100644 index 7b4e2ae..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aj03_test_one_moving_one_stationary_touching.grf +++ /dev/null @@ -1,178 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;2,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,1;1,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,0;2,2; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;1,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 0,0;1,0;1,1;0,1;0,0; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 2,2;3,3;4,2;2,2; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;1,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,2;2,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,2;2,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,3;1,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj04_test_one_moving_one_stationary_touching.grf b/imgs/test_geometry/test_extrapolated_intersection/aj04_test_one_moving_one_stationary_touching.grf deleted file mode 100644 index f552904..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/aj04_test_one_moving_one_stationary_touching.grf +++ /dev/null @@ -1,178 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;5,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,1;4,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,0;5,1; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;4,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 0,0;1,0;1,1;0,1;0,0; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 2,2;3,3;4,2;2,2; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 4,1;5,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 4,1;4,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,2;5,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,2;4,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/aj_test_one_moving_one_stationary_touching.py b/imgs/test_geometry/test_extrapolated_intersection/aj_test_one_moving_one_stationary_touching.py new file mode 100644 index 0000000..a397063 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aj_test_one_moving_one_stationary_touching.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'aj' +func_name = 'test_one_moving_one_stationary_touching' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((4, 2), (3, 3), (4, 4), (5, 3.5), (5.5, 2.5)), (-3, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (1, 2), (2, 1), (1, 0)), 'botleft') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((4, 2), (3, 3), (4, 4), (5, 3.5), (5.5, 2.5)), (-1, -2), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (1, 2), (2, 1), (1, 0)), 'botleft') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((0, 1), (1, 1), (1, 0), (0, 0)), (1, 2), 'topright') + create_still_polygon(fig, ax, renderer, ((2, 2), (3, 3), (4, 2)), 'topright') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((0, 1), (1, 1), (1, 0), (0, 0)), (4, 1), 'topright') + create_still_polygon(fig, ax, renderer, ((2, 2), (3, 3), (4, 2)), 'topright') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak01_test_one_moving_one_stationary_intr_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ak01_test_one_moving_one_stationary_intr_at_start.grf deleted file mode 100644 index e03f309..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ak01_test_one_moving_one_stationary_intr_at_start.grf +++ /dev/null @@ -1,178 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;1,3; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,1;0,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,0;1,2; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;0,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 0,0;1,0;1,1;0,1;0,0; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 1,1;2,2;3,1;1,1; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,2;1,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,2;0,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;1,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;0,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak02_test_one_moving_one_stationary_intr_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ak02_test_one_moving_one_stationary_intr_at_start.grf deleted file mode 100644 index 0112c96..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ak02_test_one_moving_one_stationary_intr_at_start.grf +++ /dev/null @@ -1,180 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;0,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,2;1,3; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,1;2,2; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;0,2; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 2.5,0.5;4.5,2.5;5,1;4,0.5;2.5,0.5; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 1,1;2,2;3,1;1,1; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,2;1,3; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;2,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,2;2,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;0,3; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak03_test_one_moving_one_stationary_intr_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ak03_test_one_moving_one_stationary_intr_at_start.grf deleted file mode 100644 index e7e26a6..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ak03_test_one_moving_one_stationary_intr_at_start.grf +++ /dev/null @@ -1,180 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,1;2,0; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,2;1,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;0,0; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;0,2; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 2.5,0.5;4.5,2.5;5,1;4,0.5;2.5,0.5; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 1,1;2,2;3,1;1,1; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;1,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;2,0; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;2,0; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;0,3; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak04_test_one_moving_one_stationary_intr_at_start.grf b/imgs/test_geometry/test_extrapolated_intersection/ak04_test_one_moving_one_stationary_intr_at_start.grf deleted file mode 100644 index e9f9c8e..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/ak04_test_one_moving_one_stationary_intr_at_start.grf +++ /dev/null @@ -1,180 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,2;1,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,0;1,0; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 3,1;2,1; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;0,2; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 6 -Points = 2.5,0.5;3,2;4.5,2.5;5,1;4,0.5;2.5,0.5; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 2,0;2,2;3,1;2,0; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,2;1,0; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,2;2,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;1,0; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;0,3; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/ak_test_one_moving_one_stationary_intr_at_start.py b/imgs/test_geometry/test_extrapolated_intersection/ak_test_one_moving_one_stationary_intr_at_start.py new file mode 100644 index 0000000..2bb3712 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ak_test_one_moving_one_stationary_intr_at_start.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'ak' +func_name = 'test_one_moving_one_stationary_intr_at_start' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((0, 1), (1, 1), (1, 0), (0, 0)), (0, 2), 'topright') + create_still_polygon(fig, ax, renderer, ((1, 1), (2, 2), (3, 1)), 'botleft') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((1, 1), (2, 2), (3, 1)), (-1, 1), 'topright') + create_still_polygon(fig, ax, renderer, ((2.5, 0.5), (4, 0.5), (5, 1), (4.5, 2.5)), 'botleft') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((1, 1), (2, 2), (3, 1)), (-1, -1), 'topright') + create_still_polygon(fig, ax, renderer, ((2.5, 0.5), (4, 0.5), (5, 1), (4.5, 2.5)), 'botleft') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((2, 0), (2, 2), (3, 1)), (-2, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((2.5, 0.5), (4, 0.5), (5, 1), (4.5, 2.5)), 'botleft') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/al01_test_one_moving_one_stationary_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/al01_test_one_moving_one_stationary_intr_later.grf deleted file mode 100644 index d0cbd0d..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/al01_test_one_moving_one_stationary_intr_later.grf +++ /dev/null @@ -1,180 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,2;2,1; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,3;3,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 6,2;4,1; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 0,0;0,2; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 4 -Points = 4,2;5,3;6,2;4,2; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 4 -Points = 2,0;2,2;3,1;2,0; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;4,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;3,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,1;4,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;0,3; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/al02_test_one_moving_one_stationary_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/al02_test_one_moving_one_stationary_intr_later.grf deleted file mode 100644 index ef4d51e..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/al02_test_one_moving_one_stationary_intr_later.grf +++ /dev/null @@ -1,178 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2.5,4;2.5,2; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2.5,3;2.5,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,4;4,2; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,3;5,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 2.5,4;2.5,3;5,3;4,4;2.5,4; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 5 -Points = 2,0;0,1;2,2;3,1;2,0; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2.5,2;4,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 4,2;5,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 5,1;2.5,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2.5,2;2.5,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/al03_test_one_moving_one_stationary_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/al03_test_one_moving_one_stationary_intr_later.grf deleted file mode 100644 index 4940e38..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/al03_test_one_moving_one_stationary_intr_later.grf +++ /dev/null @@ -1,178 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,3;1,1; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,3;0,1; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 1,4;0,2; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 2,4;1,2; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 1,4;2,4;2,3;1,3;1,4; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 5 -Points = 2,0;0,1;2,2;3,1;2,0; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,2;1,2; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,2;1,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 1,1;0,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 0,2;0,1; -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/al04_test_one_moving_one_stationary_intr_later.grf b/imgs/test_geometry/test_extrapolated_intersection/al04_test_one_moving_one_stationary_intr_later.grf deleted file mode 100644 index aab20db..0000000 --- a/imgs/test_geometry/test_extrapolated_intersection/al04_test_one_moving_one_stationary_intr_later.grf +++ /dev/null @@ -1,178 +0,0 @@ -;This file was created by Graph (http://www.padowan.dk) -;Do not change this file from other programs. -[Graph] -Version = 4.4.2.543 -MinVersion = 2.5 -OS = Windows NT 6.2 - -[Axes] -xMin = -0.6 -xMax = 6.6 -xTickUnit = 1 -xGridUnit = 1 -xAutoTick = 0 -yMin = -0.4 -yMax = 4.4 -yTickUnit = 1 -yGridUnit = 1 -yAutoTick = 0 -AxesColor = clBlue -GridColor = 0x00FF9999 -NumberFont = Times New Roman,16,clBlack -LabelFont = Times New Roman,16,clBlack,B -ShowLegend = 0 -Radian = 1 -LegendPlacement = 0 -LegendPos = 1.24145785876993,3.21633085896076 - -[PointSeries1] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,1.75;2,1.75; -LegendText = Moving Line Point 1 (extrapolated) - -[PointSeries2] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 4,1.25;2,1.25; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries3] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5,2.5;3,2.5; -LegendText = Moving Line Point 3 (extrapolated) - -[PointSeries4] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 6,2.5;4,2.5; -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries5] -FillColor = clBlack -LineColor = clBlack -Size = 2 -Style = 7 -LineStyle = 0 -LabelPosition = 1 -PointCount = 2 -Points = 5.5,2.5;4.5,0.5; -Visible = 0 -LegendText = Moving Line Point 2 (extrapolated) - -[PointSeries6] -FillColor = clRed -LineColor = clBlue -Size = 5 -Style = 0 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 5 -PointCount = 5 -Points = 4,1.75;5,2.5;6,2.5;4,1.25;4,1.75; -LegendText = Moving Polygon - -[PointSeries7] -FillColor = clGreen -LineColor = clLime -Size = 5 -Style = 1 -LineSize = 2 -LineStyle = 0 -ShowLabels = 1 -LabelPosition = 6 -PointCount = 5 -Points = 2,0;0,1;2,2;3,1;2,0; -LegendText = Stationary Polygon - -[PointSeries8] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2.5;4,2.5; -LegendText = Moving Line "end" extrapolated - -[PointSeries9] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 4,2.5;2,1.25; -LegendText = Moving Line "end" extrapolated - -[PointSeries10] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,1.25;2,1.75; -LegendText = Moving Line "end" extrapolated - -[PointSeries11] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 2,1.75;3,2.5; -LegendText = Moving Line "end" extrapolated - -[PointSeries12] -FillColor = clRed -LineColor = clPurple -Size = 0 -Style = 5 -LineSize = 2 -LineStyle = 1 -LabelPosition = 1 -PointCount = 2 -Points = 3,2;2,1; -Visible = 0 -LegendText = Moving Line "end" extrapolated - -[Data] -TextLabelCount = 0 -FuncCount = 0 -PointSeriesCount = 12 -ShadeCount = 0 -RelationCount = 0 -OleObjectCount = 0 - diff --git a/imgs/test_geometry/test_extrapolated_intersection/al_test_one_moving_one_stationary_intr_later.py b/imgs/test_geometry/test_extrapolated_intersection/al_test_one_moving_one_stationary_intr_later.py new file mode 100644 index 0000000..4d2bc8b --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/al_test_one_moving_one_stationary_intr_later.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'al' +func_name = 'test_one_moving_one_stationary_intr_later' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((4, 2), (5, 3), (6, 2)), (-2, -1), 'topright') + create_still_polygon(fig, ax, renderer, ((2, 2), (3, 1), (2, 0)), 'botleft') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((2.5, 4), (4, 4), (5, 3), (2.5, 3)), (0, -2), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (2, 2), (3, 1), (2, 0)), 'botleft') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((1, 4), (2, 4), (2, 3), (1, 3)), (-1, -2), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (2, 2), (3, 1), (2, 0)), 'botleft') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((4, 1.75), (5, 2.5), (6, 2.5), (4, 1.25)), (-2, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (2, 2), (3, 1), (2, 0)), 'botleft') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr.png index 41f3514c17bcbd9415c10cccb74641112bbbdadf..52396895f26372340b1db3161cbd9cb8e2bb589f 100644 GIT binary patch literal 18888 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 literal 4339 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa02_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa02_test_point_line_no_intr.png index a45707a9637a3dfef2543a85b8f00f10c7bb5f80..cc80861d573f75a191a6dfcac228df8cba4e6806 100644 GIT binary patch literal 19305 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 literal 4325 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa03_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa03_test_point_line_no_intr.png index deafc2b8a5c336caa70e48b8aa98289ccb92c844..98a927cf4e92650b81c2c066b6d3f902dcb0a291 100644 GIT binary patch literal 19375 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 literal 4457 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 WYU=a^8~%?(4p<(x$TK^2>AwK6KEi?k diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa04_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa04_test_point_line_no_intr.png index d0e72b2dc89cc16fe9ff92c9192f82e583113b62..f84ac270ad69360bb7d2b9299d7685934f9668c2 100644 GIT binary patch literal 22928 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
~Hb*D66i`W8|H5cdZ3dE>Ao2uyv3)Jul* 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 literal 5021 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab01_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab01_test_point_line_touching.png index e1274c2d88a998020331a1e58a1af62f3deb7f94..07b2cb2f665f654f269a0d3d8630160316c67e91 100644 GIT binary patch literal 20998 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 PIij@Gb=C4tSp@$t)f4Pv literal 4624 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab02_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab02_test_point_line_touching.png index 12a7b6cbcf8c75db795f22b5cb8dcd24bb57d0e6..d010275cf25dc73120a234cb730549e2a93fd4e1 100644 GIT binary patch literal 21204 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 literal 4593 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

>=dnpaQg?~6upF#U`LDd#69JG zckUfD8HJ}GdZuqfgnaxIAh#jk<28@D(3k*IlKR%;4hn7P@vDA(gn<~GG!?uMl=tdz z8!I3Rfq)Kwhc0)3RES=+$A-^89*$rlQSp;MM;g+2&U4Jlk|w7cqff7fdX#wDhk3v1 z{RxQqfXacbhg|HTqOLTkVw#}n!#vjAMu!QFp!aa0Ad<>=)lgNa1xPG~iP2gqgkJ=| zPz%D-%`>7Poj!tGY^u7ds2mg}9Iz(xygSfkaCc{FoC~*PEJTdCD}d3ZQl$qxG~1?w zMIkhn6-AE0K?ODD#86Muk-LAMsHIMrmj(prkfBfrmn~vbKY7XThI*0A;NSlKc<62+@Ln4c`TXgu$y?XVnlShp5bs#u*9`@MO zbbk~NESn}6j}$c1q2fE&4}tZ5e0)Nf87-I;6*>i-$`Jw{<^4hTR!65%WBcCPU3ZClK+qXK0v{LHOF;6h^$gteh z?d)FP&vBC-GSt;Yc|Gs|tsR=7!XR0TM4p5Fc^o^{B4$Lt$}a|Xb`(hSj%!_jFaWvN zf;dqVBp6qWjsDyPd&&qm$Xy*NsgI@_9ifI`#eir@U{e9LGdcRS&k*d0W)OC!$i|C$ zV?~RF+Yjq(EKq|&?Fbv!3b`eeW_|A6?rNP=gAG_vwh@j%=Od7AW4tgCOss8tbLAmo z$iQxgfZ5_H(`kgEgFwU7iwpY`$~n4nD4AffW{POpcR5 z(=*+`S+Hn$a8{*FD#9JTPJ{Iyt)VH01q6Hr*xzON_WIY0R5vi++TouAsAjrzisCu^ z@!^g1H>>2?#WlQu}5KB`ByrGpTWaWP+^dr^fS%B zW?Qw?6nuMds2y5}1hLI>GYB#cwa`|Cxw$`%bQa`^!@8BVU87QFXULg$HJS+M4uIpo z9u&2;+<3bk+wTd9d*lr!swb#Ya8)42^YZX01npO`{9ee+Ch`I$0(KPr{Aee-SqZ2l zE9$)ecB&PfFD-NXnqs(%b16FY*LhjH*G@xWa5CFnHSDknDuR>%fP1Y+Q|bu?x-=q0ure1X%w6#ewzzyYDf%NVn3Z WlCC7<6f@iyqbR2;i$7&@^S=OFCI0FF literal 5035 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 Y$@!Sq){=oX@J|F}ZE0&!Xm&X6KZkp!h5!Hn diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ac04_test_point_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ac04_test_point_line_touching_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea65547ae867fa5f1ce553218af02a951c2c7a0 GIT binary patch literal 16735 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 Qm^4b|l*Y-d;}+Nd2gIs_Pyhe` literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ad01_test_point_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ad01_test_point_line_intr_later.png index 83f3d9f56662e20bad108c000d3f493117ebb8fc..0e9b861d13e0ff720d16fbc24f10928dd0667e6a 100644 GIT binary patch literal 19231 zcmdVC2RPP$8$NtfBqJlq3Q;H-DU@B2WM!8ZPJzmGtuczC6f4`saXI$5Lo#%Po0T-0zC`cJeF&GSm{5csl z42IAPgCXc8A%<6kKH&%9ukH4y=jdPdmF&Ii?^oQWNRH``!!-kQU zIi=zJvs-`JfMiU-dd(C{CMZYRoZX?@w zWImxanV<2(G3WZk$a$Tpduc@7r6vZKY+QJ7m+ct5322SY>X+C1>W^?FkYl}F%Hl%( zLf=zX){e9=4c0}u#3x;gPVx4KpSO)JuG?hbr@6QtLqknXy|a=y3|>D+FYJY0ev?gb zfSsM4<}L*r{4!j?3KIao^)=ph4t{xnoJksf$!-iE4X5YPdg+zO{jRoleqPJpUpx># z5wKWEDP^>_G;^(|R6_LTSFhE{B1$46qLxXlQ3c@vPR>O2ROJh_M4oE{tTCRsGBUyC zy`vOV)GnVJq&DwSbDS-|cDz4Wq+9yZC5DZ)5vhU3r)Szr+(bHFn-3IE1@V{q*T;$_ zd2VjB7uY84a8icaYI)3v%q@L2e6j#b2 z7h=@>Ty=VG?u@hZ2?Nh{hv(@!6CReWFDtHNyN0bcFh;eHkAD4>v_mV)V8X8F`Sa)1 zAu=+9)Z&EaWHPGbB;2y?N0jmQ4H6`jlyYWfoR5xNx*g6T*AE}L)|R;s!zLoKcV=cL z`-_$H_b*p%>x9~jzP!2u_p^5?K6bU9O-hQ@hnOP$yPnSu%De9`TRhT}k*N!YS&I}`G63(=WAnV3PgDv&vY! zy}jGZJj>=xIU{zSxl3*RY$yWZJ4Bq<})?YlLyp`jt? z(d5X+3|*0>l@<0AC+PR@-_Om*cel#Kwws@a=S9aSNeoQ3<8o2b)0Z%3jy*wp`3v!W z{_kR@4;rys2(fss*}AXI)HwGCaKW?fNcuz~t9qkBVzK!|udPr>q{lvfB5jB7-!9$! z+UU){NfWMZ0-H0VdL-U6WV9)DU;^9Yn5kdvOkGt~#kUxA@7~+@5nL~BZOjbR=x=oA zS!(NIiKZJ$s)@)$D)rNzB_kk zTek6i>n`cUX>GWj-`3Qa!e+&69k}rD@VfOfU;pO@a86ZUsOst6OO10SHS}B;;xj1re|pBR zpWkzttU8#<5B8%dlQibU&978j^S-&h__aNUgT?LJQQtdv`uhA>9nCS`3S7Y+V`-_` zrZu}>n>P`|?t9y5Qx>coD~c1}d>77<<1pUJxcKPNqq}fD;ZqjuiPbefqe|(H|EuWo z{~$2^fBI2;iaF!?^XC)Hqf@b`A!06+6Nllo^z_J+KKb|eo2b|%U-~lP$Smea?pV~- zq-(BKTZg9+z`n%4B@P=qrKuUIdq_jG3btyLF3GT&_0DI*oIm1n|DU*wQ_5;9!k>TI zHcrjN^bvnrK*U~wO-O_wuv%5wPF-Gp=e@HWN9f212?@nZ_Cd6^+Z~Fz-)SWr^D%=~ zIEErEEv=S!yZtfjb~XFmOw#E)YEGG&?+6uAI%95r$eyeMU(4&=jK+hq0`t$TaD&7b zJ;uF+1UA||d-e+mG&Xgb3#X^Qu@dHhGcFqYq$l=q4DO(j^(9;Y1zXFuR4>RIIwJY2 zgTgOb#_V|Rv{=ZVKTrDi_22QTsXQ#lzY@S6QL|V0wPF6cp;^vFDtdY}Z}h=uRcunf zoKSu|HZ?^lt14a+YgP#ZC9wbaK?&mRAf1$yl!{FS$75Z(;YYF-)}!t4$OjC`+Aj+p z#ZsY3K3AvoBbUAXS1vn2q-Y%>PGpt)#Yli&M(N{Gm`)fKnl&0+a&a-fNq3rL_|YBQ zmGEd?QDLt^;rHt0=H}*qPa;Z+wtw>JI|^c-ihq1enINJQ_Jz@LMq_v=DyrVm2}o4o zG0xk=@G0r(urlfC>{3$kxI0GH!;hpbtRbc?7-2j0t&_7mC(fy;T(#bh<~J-l=ErRU z{-o_e;hLe_&-8`QsnRa3t{(gSxK9XETzhE+sHs)Qt2urQ`_iRLe-Ar-2RsS`1H<31 z{p(TioGzp%4jl0PJ+OXSf#0jkLT~^p&q8?8@f-c$3p;jd*4!wBRjU5?-pu&{D*S$f ziucz=W9x^sNMn`#{QXIW>2BkqbP3aN0qW%%lurmb+1V|++Gis=52z5Zp19%l`{rm? z*kC|nVljWehM>u=-_QgWUWGtTPVT?Y#G`n;S?(7-nAa~>?Kpd`e+<0Bw((*|g{e~0 zg$ozT|J&$44SjRu*2N}{=U=~&Z%yQUUyprO&RtwwWWSt=;dZuI+HgSXg})y6GqY9T=u0^0PKFUgxylqzS3 zK2p=t4z`Y*k0Vr8Qo3Soa|OH2epth1!)r4`V#c?vjQL1Pccd{K&7A_yuG=zVyR4mX zcN3LUeGIa)9JyP^7^=>q~rz7mZ8%}+1ZUlIGyvHJ{1?nT}_+in~pzt z^eFMwtIx|ht#N654zF}FxOsW+q^CC?uj3JHdF^y%T#MdggCXzpaW<|UW33t4l&sx{ z1zWDH&x)QL%P@~_yPRIQ*wK0&V%H*8_uAruVnHs08s!Z8@9dWj|a-4X; zKuxIFCJQyS_s06_KyQW5yZU;^OxOb)oSei(PE%)3o$|Jq5EiC`)YzVXo$0)SLhQJ$ ztt|-!MOBJYj9#gE|G+@s$jFX}_k*uOckbp)C@yA(GhQ#`Q{e@<9fdgwi7s5})drSt zJ!P!%o*O3>Id>zR1UcSxak8rbfY*yFf>DYW^Q|uBeM4~b+O=yz?*^x)LRFK_?&sp# z0SB#qAuKG6@mNc$vazu-#;Yzy#7&9QX-q>)i`diCGwXv!p0YmndL^5l{%FANcD11# zUAvTYd|HH$$dy8!SdXZ`<}1w_NApIXW5kK@0nIzuI9Z1hnuHL=Twg z(b!#k_UzGKzYEat?1c+dfq{V#>f4)jt&eJG-uYs6_Qs9u=i_F9@2_JGqrXeorwlI= z944h=+4V${!g+?0;^;ytIg0&On5sj(ys}zak3M$zP)hngeoQYuS9|PhQ)+`ItB-p5 zU>>u2xtHbccZZD7L0!Bvv$!Z1FL_IEL(jfW2%wH>Y_t@HkDubaNuEyl{rhk5-QViP z_=Q~biwZOS{DRCkWLkXm8_B9z4l9X zzcBn>^5nUzb_M>xPA2I$k9c*(ONbI5$!66&4dDp4nF@%s*-6*3MjcL$fcB4i3j+7K zvH>kp*kdry!*r)p)v1`7^(-gtN9y+=(i+Yp*Jlke2biz#ZNTn}IVMD<>)&<7zqgw%xNbx`-c!17+m2nu{kJ@phxWeIFQUWZ z?SeW(r7T;IC_XtsZCZUVZ9x+1s7!5pd7149OWEmaY0<&yu~=&_S?msSoalIJ*_H{# zd-)Dl_uf|1ES)^k)y1hAc=Rmivh3_^3+;vd?CCr|0l;ofMI-C|H${n_K8>}g)dxtQ z4~5W@%T(zq-}kAW(5%uGQmKt4jyTt`G*PLm%F4T-$n=5gp><_xmxqT(0f6>c)}qX3 ztueSOLkQ$qAL8dI&wtj+&TZ%r(@CBNu)O(#*jgo4z;nS2lC0u+R)Bg_)6$9L@$^}TnGd?X&0#26Ow z-Me>Qr62al?_!m_2cKv=s?;T)A%YHIF)cGJCMqRH;@o!0%F5Os(vNuW3-JYivq=fj z0I>MCUFL?3zcxOtw3Df@w`iODooiRR`bP$1FI4cA$|;yG~+o-pD-UId z%DJkVd(3hfDk>@(M+b}DPFqaMM;wQwU{XoUs)|egu|=Sg8mq899GIT^EUerb3;8G( zcc<|AR*)zIMAwmN^&1Q^5%8dD!oFOzWR{S{RBSs zav7P7J*Y}xj>OtQX_0>T)vH&Jbx8mS8F-x1v;KW>TYLr&^}^18OEn$8c!bXO*XaIB zl`>0vtCd$On8(lNrNg!X8R5k~;sVFB74K*-eP*gp{DQ*%a`uBxF&IyNZcwqw*J z&Ph_#ZdF763KT|B1^7Sl@1KYppVBl6m<}zizdsyIT3PRSL$TkZQzlTCxbgd@`DN*ec(Beapaa43J?wfDreBNM$jDds@k zz>tnpJb(F;>M?pl%;kSoE2yrScP)W}!L@`XCnsm?{sN4_zqi0o)GuF-GM*WnrmZs{ z9sL1+`dTz;E>8O2tNHn}8d^=h^&1bi#`Irr35dF;stQV}z(h9g=RUt5)@XX3`1yjZ z-f_K-s!9jZeW%Zykthi^;}XIqa!)TT+{xy*&w-$S|7^R|_3apiM@K4v-ShYI!XT*2 z$G3|~*y{P*h;D`!6uv+_L5_l5r>Pkp8OghD`Pw|{-Rb^ z+nLm+mO_u^RYCH*3I~hU!fyS<#(SWS$E9$SdMx$rcw1G~*IyNcg5Ldzh)`}b z&}z359&weI516xMZumkY$UuHqr;RB|nb?P*(vK3@rh4)W33dIkXXcD|DOq=w7*HxT z6|*$Pv9m6M)IrL6u{?{g^$Nhj!h_SAub15RlU-(lKnqEhafpUIdRr|4Ttsf zQM9tu66>}9?*ijVfVsw%clRGWNaVISDGR}PvS>dPX z=PlbA$|}VIS%&u!zoAD9hu57ucMx|wJ3C9o$k<_WOjFc=GYFL z9r<0i=&I6Yz0+`rmBU!paClKXYa6#*BTT>EH4}WH&7p=e?(WO+n}v)GU$h<8XCsAP z0IVLd!>1;j6}o3pWJCz&AL@No3Qc=Vj9rc`&~F&EQV zM*fI_oODS8%Z9;V2a6Ai_op|#q=7kQhT#L<;0;IJ9jNB^S69e{t?^$+Ga#m+P0xM7 z!$WeiY}4b3gd5%2Bx<13ljf2s;i$}dxKpy>>P&Lj1O%vnP=!c?@|CS(xhN-ba#*z3 zQB|LGi=`DyS&d&wLYr{Eoq~%CE*0BLt!DoseSOSn_VgcYX?kCwW5~x!nCbK9&*-eT z7zxMx74rWTW@W6yTqn8HaC>BjrNVz)B-QKv^@9fw!bq|&9s#^IJ@4orEo0K3-03hb zUPQ^Bn8G&KrfWe}Gvt_V;3!83(Ih^;0Y$&Nfq|sIQ-ZLU24#psqGpM5(snrVz|Er2 zY|ef7@ZX{N-^>DYB-wq(FKn`^y;DR;d0~Q5q6sP-W1#rRYT{6A~cgwU7M%TWObfnQIu}u<-B-G%DhtD)v9I?jNih;8d)99O15=JB=Zw z5nXGl);8Lj=KFV`v=IhUX*(iIY<|!?XV_{&_L)NZP&#wzQrhnjjVQkNsop0&)=t=y z*`^U3+5K1Q`S3-|^?Bz@z{Qkn^7*y&e04lA^MlScgxl=Hj5(B$0w6XC5-eYwFD!qcaf$JTwE8re8 zwZ|F?SkrgSyGr!;_rF#8C|{SsO?vyb=s$*gL+^NTN|2vn!3_ddkEQ)A9!tg}(OuRx za68pYmjYtNocbeFBr5{<@JxSJ;KwZ#>td~|US7&YLWos&F@x5NJ=ktnp89yHsp19* z??@M5K56$XZqy>RX%xcg;mO2NHG7^wLPJBte;hci7cE2iha=u^hhLC02)@PTn>TSn z!9lyZ(pE;r#1sUa1LBsPL5F~$TpAf!hqN$VzKt>gX6tKP7OU3Fi{9V9S$*roHn_wC z8%@4Xl=g*IhK2N-Xh^lso;_=R+!+H;oqiZ1`(N-)jRSNRG2&g!Utc|niwlAJ0!fke zdA0-9PvKLi8ybz=4RiO%u$0&VsMjh$-tmeFIQyw1LWM?~b`5Qi~p z{wN*wTJ7xZ^?^UAFB=&iZXI_4>K+(CZxC1#fqCI$B_ks{qot))!V(DuKcP>mh;%m) z%FNe0^RLg2LgW-Pi!1WFT7DOn_d``UUB(U1wEQ!$0Z( zb_7&3@@ja=4gPPJ$Htf3tETHK3+EIRK%aEZ3*Adc$9~|z+liVI#w|i&iP7HeSQ^ej zlnCmIzt2hd!c-5dTqujfrJ$goN*F9ukyCn|kmW!!XndiaB`TGlV*XgdO}KQapX^ym zN+P6mq3)^azRIsXWuEJVdUxXE4I{*@6#(WbbImo=|BmjR4>O6xt??&dH@qFA5k-YK1SL<}Y1hH>-;#0^w0qY6^DMbe88jS^TZ<3~TG_;W05mc)Z?& z$jBnR4WPXOD4oWmG97_v0EbYe6&VW4}3y0pJjD{C4pNr&-wi-Xf2kmzQGa&Yjbs!Urm9cdjN& zSO~<_ar29aj(2q&YkBSA!YNn6rTDlPf7P-;w`(&iL)z!j~<=fz=5tY4+jkdT^UEme0vE|QO2W3k0Lh%DJkibaj4z= zL7N8F=z@;Um|kd5(3xx3xP`BG49+U;W@V+6k}9*ZOQhAIj)D}WE&1K_@Zb{y^yIJ; z((+SVqest=Yc76u_9+029WgpK&PXe(oza~krrtF+=*(yH;bxvgiGkt3q7!V3NKyUK z**I+-oA*)7___l-LouXK%5ACXGgW&L*0wI_yZgc;#FUiYOJVm#2U2H^(2ymlkHVfj zxyN6&Mgy!_!N$t?(JLQl4;(!B6znbT5l8bF0|Fwg+cM_9N&5Ro6EaDAo7F!FXpmeb zH@vm5Cow50cKmG8Od!{Vjp6A_#j^{lk=|i^)%ngYYFQSkUO74$=aiIW?d$|m45y`| z>n|M7v}a*p7BG^2VM(m{lViUTTo&cZlZN9``i!Cp1(UnXFUG@}{aW~#oqS&Oy{RT5 zu{ef1$?9&2MqRoWMf14O*{+`3TwYo-!WY;s_4-hTLEu)35jF-70{W-GwMI5Qr!I%3 zO4bc8*p|(sq^!K&UDk52b3d-C9YE#!aS)ON|6pQT`KH&5o8pk`wb%7Zlq(WQIQZ7G zDSX)PIfzchhlWxjKhKqqkM@IW2I&vLE6>2rG@b6PC;-H86v#byKn)ow4B%g~r~~pS zSCF0@Ngt2+^aFFRHuNK(#?s8dOoQjfZg8`l0y|Kg$BOy4j=Z2cFgvO4Mg*ySu~XL5 zslH?IQ6URjWZ5zFSSA7~s9++$Guv+HJQVqeq*jq!KHxZs9~JDLIuw}bFRojP$8W}X zJd*iQ3{a8aGM+u#4z(0rP?gIgr_MGWEkBJn((?>;T?< zuFgGIQ0U|q)*Vn$wTl_Jrl-E|Vbl0R!O$b!X>8d#h1BNSF$flS#iojPzkmOpUef(U zp~Lvyp3RNL_R?E!xhxDCntK2;@%CT4Y=0lk?}JD~s$Xy#38%e}=`2Iij+PjNLNXYD ztjhx?lWbtw6{7@+fcviUr{}oexK|L8XUX~>%npC*lxgJZ}&Ojy}|kg0&Hn((4*bJQ38F3IMHZ(l4n3D zRw#*d`2y}GlUkqOjXvJ9@f{0?tg66vpbp*^K`OSoS~$IYRqy5#}w0y zhbrjhOO4;P1^6S*sK*nh9O4eV?Y(V>$)`lw6Aojv06G17)+e3NlvRhahJwAO@2MZl zo4XWDa5ygwm_APr1f3I`jt@R%G5Ie(lm^s)a(V#_*6ce3p*CqPpv=J>4~l)A<= zbuM(Y&dJNC<^4J!_pbq&2bw6VI)GyZY1A7nJ?u-g*8#={f}ILMOmJyIkqv$h#yb^F zObM+uwhY2HMa)1gBSa2s=cjFWYmXl#tK+V)wYm6B8EI(@44PP}NdRQ1*Px3u=~~nM zC@KxKr(USi5_xz`{08T+EDMb~DPBxX;2wHX*9*j1AJjK*-^xHV46qE`+(xZWB& z05xjj7{$9%+9z*+a*APNPlc2TL?9A|$HoSOY*;-1SpnIg5RtdmN9kFP5YtGk6JYA? zi+FoV*vmdJxz4U1gWrVf>Xd+A#$}o4uj)pIf@b$_A2cw~pHF}#BF=5{By#!ypd{J3 zv!XdoJsbl5+(-kA3hHiUs1F(CZ{9p^;M_-a`SRsnD8HN`W7y6P%HwY>b|HNA;E;N@ z>w?9DhYwxQXAUqUbq=dcU>K~NdgkWMo3VC1H!3NdCvhX$p1|ISyU@VpYgDAxebdxa z*+D{t7`zurWrw3rIoY}GmQ`(pSn+$%h!#KhgwXm3+R~DnYxXES0Zn?XGoKeIqc8|h z@)4XBJv}{5y3aPDB>%At!T`^}(Nkwu2^tF1gVheptSZ)x=^dal?m$;EaGMZ%a?+j{ z%n4@@;wW2pe5r?{0n#S8VD7H@J$y#^|C$58_8Q++rS^hH+?l>_v_}mM)qY1QU|lAJPU8Cl&A-kG_%pHxK$VG<8z6+Iw=*~KK3U> z0pF6El9KO_2U`Iu-14ov0-<6sg4hg)w>&9SG7v?RR$ZGaaEllV$1ttw@g8!r|9pIp znZ5U4^vsqcC^d`{J7VhY*08vd13^&z_^4_2%~3UA zLEFY>bS)-RQp_VgPW+OVVE$*>V?`a_++#Qv79G8neqkkdU}~S7+^t`DvjT#4&gJ(s zgF{0u&Z%IUm50MntN{R+<<`8a`|1Q1G9;2Z6X5Dg1ECy8j*tULUjm>P0`;Ma4Xju+ zgP-)f>%d8pkdmHORi!4}woL+TVM*zS!Q^|}$47U;;aHv7vC_3!1=!XDko|qq(^1+? zQH;8c44g0yTU;4-(6Q~AJmX;=o*ZMJ(C2>?CPa0)g@P2{_adwGG(u9Ka<@-7k~0aT zBV90_S=0z_QWcv|rawrc2}xX?MP4EPJY)c{67*~0Ao}|IvAB{znvym!V3Ay#J_8Od zQ(%L@5{&fB>3XrLUf^10((w);x@}Pw->b9c3V-_O!gY(6HFoY3y;+XT4G$jB!h{)D z1@0jsCx4sUAQ`lS#TmnK_Fg$WT+ovz%qli{U#|V&DnvYE4R?Zk3G@0q8h8@Lc*%WG zmDWTZyDD(Cp84jtc51+qM}Uq)UJ-DH?0^&#*L|3px@8+k>V=6=#)7GI06f>yKn_c; z&#T`YYu>6pfxDW1VYp5T6@7eoRMhBb1`W09K3h-||JQ~+b=}GP_i0`lma(8+oo&4B z@ZrMwJ^vh1@Gf3QMmRn&I)<&hr>jXYU5Q+dj zlY`QXtS6utJQln{3gYjLE{8UuxlAU$U%d341v)Pzu!FmIfo)l*oHHT-XNl-Dw@KU% z@N$ElfB*vIoyo4Efrr`#6$@>KNKrQeq78Dg#<9s_V-3wS9v&>?;F;VqoCG`%&$H=a z0rm*NYpCT=gx2$1UvOSuXtS-P5c!o;!8ascqRGylgIu@~xZ!9^un5z>G$>(&>Un8x zu7Miz1^9Q_p)!OlTM3Tq5YWT7B7Gv9phPo7{vl!cVxGmG*}1tKvpUB4$u1_F(q&H9 z@87nH{}ye-DoUxfUbF}<61%*^I!|n8AFunY6k7yL6O)Lw4BELHE0)NKrJZF^Z{80I zn#hWME0Le{k^>*IdUE_RA0!^KUtM1A1D7%~E(3ACWn@6)3ff|lw^kD18qUi@k+xqO z_a9%JdXa8n(>h{#2(A>=jQ;P9|X{k~|1OhtIXZr~R=?}#FueX^_4uScXSee}u+CHxx8P=gmHdLWa;?&Rkbv=8 zYHEaFVGpXh4XUS#jUNfd2*Lwcr2&1qL%KiVG|61(G!+7|9UTPZ_!k~p`oNRb8|t~n zf!Yp=r{9qAu_`DQ-z>7$w?D|nZXqe?S&~ew3dTGw(x37M?*k~2tV)-nS~!qc}g1GTF^wxo>lTadhRGl6{@PnFFth9>zI}>ZToS+ zWJNtU#1X25CI$c=`z`E%`9P*1sf`&*q)axfK>HlO~P+%aYd}vNrEhV}Y)Zf6w1lT=%tL77+ zU~)lX1@ymdspm?Pj$6v?tlbk)2U2i^^!4@8OL>SRf(POa0Y-AEciTPsnX5p2Me6aM zY-$-(Z9`5;?!YalBu|F+`j$H|O})j{O(7+HT>HZ_Zc=#gXD0A8Tq<#I0qDni0=p@_ zxv_3L-Fxct)vID{Nl8g476Il;N=PWju>cYO?%g@7&U^}h0`&_p$w-0#ILFs>9MUkf zsKCjx`%(jy#RYIay?%XsB)Y<=8~`jp3)mHtdW(yTHP2O(HryU;YscEKy1Toh#*rAC zQk)Ja1Z}9}H9y8d0SID$&hS%b>-tURFvS2 z?pe-(69fRC4Zr}l%aKXcY4RS>_kA{=mOFBnZ|8RN3aP8#nqVL&hMpc5%@m%N(fQFP zP?GIifzQIJa{(<5(8X0V<-YgmtNX&0g+qvKyINci91ulPRyH3&byNSp-WW$4R}l7$GDx43_$m= zd#)JfiR3LtFt~!rYa9GVyx+i64$#tfwb*kYF&VB?g40%$4PkkLLOw zmw0Vbxk;fV3#4FKf{xcSdw$wp`hYCB6KEJ%e`noaHnSPkYikaAzWQu_^> zk(8^c!patqo(^i*|AETM%r)|I;&OWT`P8QU?CiI<#J_)6q~M>q?*+!F!McAK(ZLr) z7bN?4DUTdcP%CUXqW(p>{99f9?Mwf0`hSZU|McuwEx!lDa~;HX2n(=b1(A#jA@0II z?mCc=^V+8dn1zG{@W(eEPk8m}^e=Jvx6S@n@18X%+Cfg#Van&_NXx6p#*DG+(J|@KcZe&s&1kka_Rk8W70?Zzm+|`u(t8KRJX? zH_Z1^0)q>6?!vrqbZj#oMg@M=H>I^z$i%~Fy!l$yG#kP!R_)@Jv?qY2f-VVuewDu_ zB3$=b+~HFe)=KIUB}AcNi06_2(}=NUv^5|N`QIQ@4k0I#L}Hlj2edxFD*)smtZHaz zKz$rYMvF?V{&o4kT1(Q?_e1B&UjqW+Jp2TpZn*XDu1REBfN8rf48g!f{VC0V5mmr2 z5U%^-#bHs`B)nmZ z#}(c3HGreye{SCRkH(Zh!tltN`?|llxB*&$f7#R?KCIe0-Ltb~zxT^8Kf&e8u>R30 z6(%`Ads(x*r``HVhbcK|Tr&s+ z@(6ph^iMyG(k#_GU~?aL>VBChe{!-VMyl7-QbpW$)Wbkgv4p=8S+orat*O91si*f% zP%^7&6be~DOqP1sFILZ88#R9#%B=Hr^y8Y03N!>`>aq9qV4&}`6+^~1%VQo`i;&Fj<5 zD;uTb6z|@j`f``zxqp!5o~W@`9xk!W3*aiToy^U(u0YuQ!JRxtX+#md&|=~yUD19DBs&$0d#>;3&ji% z4jR4nrv^)xG!%2XS5j7*(+UdcA<>?2UlIV-vX~tVYZ@9FzDTzO4gk`HkM`ws^QpW0 z#Egp99rcvHv>CcBP?skrvP16P0Tk*PxIerFwSho2kGMb3==XDTzk>#nWMz;}Ak|g? z+l88{esvry!C<)q`>nPguyxOc7RtbtI_O1#`y#(_;#g+W=#80vS@?zPBJ~usVjiDx z8&<5F+NMFvCeA#uo2IclNM&bI(L0-Z@BGCHH#!T0`wfrK~G_A>)gh5ZR*39{}gGzOD8_n||!t2ih*Zb1jbQ?NZO zwPbnR0hlQ!)taKjR2wU{w?TYPvBXZF0`(pM@c_!l<+#ZB<|bWuHwBP%r@_Yu+esZhMIgl?{fx(cbq3;D4_bXdlWVTha zv*{|_lWSJ@2C9OY*^m5{7J2=MyaRSwq9l)V52!SyeR?BKi$6EKnku%zyoas?>a&p2^m^vblOOLf*NXi{!z3Zuy1#F z?IVToRlL+6v;>@|54Oi6hRcV}7Z8+ocvzSh;C72hiCM=U_c;nLg-F6$U}T}u!V7^> z=wyKE+Skvi?Ix#E^!8r0Nm!%)a5x^egh&qzQmV+APfQ1f&O!BRG|`cVw6U=@ z{KJP2QH_D<_K|4i)JmWx!=MJS>wyONqAooHCHOJ{8Jqa8l>4E z7d|k2?8*VN;4?}DpA%9qjRd0_OWd4b#wwdS6U`7mqQM0<0S35)9h6hgmLU=#_F&6A ztUa_+2Gkh|8QF^&dvy9a~hFjQK*j8JP!l z0#qru@Zm8q!`wj~XNF}S!7By4U7+4jGcW`oJqrq8DVT1Fl4MS-b(bhP<8cxsMWCMk z80*5F&=j#apZ}a;i*;ckBp6hZ8eee50}t_7%!vKXY z3`KmEuyCtOosG>RA_38tKmg04Yg2OP<;x@Ftdh)7GRAf5L_otsd^RFpzJA)qqn-KI zG*n_stXvw5P!TT?vfzY1C_Lx#aRG>jVB2>d&%oXod`C?^6-?;$_3JedM9NKadV#K~ zfkXfe=2};G)BkFT!NQt-#p8~F!51wFx+~}&a==(;t`ws#itzVFgpVc&L)is zr!E%UcxpcZ>1ykkfGFm6<7%_s<@E#5*LR(?y&_z@LkQURCjsy^3`WpA0_5)EykoR% zjPP|TXvYHT2YknMS4c=OD~nU1z+@OK*lK7JVIUzjFS|e+!q?diF-^@GSRP#Qb_xtA zX=kB4AD=JK&b8^01diPldSL+A!E?12I`C|OWctQPz<((k&;*kC!6^lz86}VgADVP6 z)PUGNg_aiwfD?GaL;XWGh4AeRIHeBSY@gSlMxxk^blPd4nNBn~aoqvmEA(Zim_x;x z8~~&tGc@h=+tD^&7VH}cm8u3Q42a$U;Ga>K7qnkJ*WH{#krI(j@$R!bk!XhGM)VyV zz*K*=D}#VB01@l@4P^}dpN1l&5TOn!@ZtGGK;6&5aprBO1oHwPFK<<-)W*eBj{J-- zu%xzYOSX|&b6|Jz7hU1mXGq9d82IXyAbP-)L{DHSAWMUZoB+T!OSgU#veHSeeme$k zGGb&YudBNg8X7wH#JGD5HxhRSh`hp^qql2o6%m#8%l%xe0&(Z4Q8@-NvZ0bI++GS( z?{!PvPsX{=$|I}*(Vzh05z?@2~=pNv4(U)By^8@T1 z(6vSQeD;Hr7>vp1&Y!ne6Af@iP-4(jH^X$)uzG$Q%@9fh<>4HB{Y5kMZzVAVpS=#=j1FjaP4BV+ zwpjx^?})V7CH7%K&4@HRz4$fbcC|a?s*zV9HJx zi6BNLTic@m0xtmm`w6L@r<3M>x!2okr0T;~tM4`mrul))qRG<`?Z)OG!%;$>C}1+R zr*47gvLF0}Z-7niIv{6q35o~?)C}|Ay6W2}BRZLVBdA^O?yqmX}Au84Q|54-!P4YxNM&_H#xO`Zt4@ULvi5^|UTe19F6bSce0zZ{^A zP&i8Qf8J3)y@_@5D@^k>rj^|xNOvJG@75-lw3gbX%RJ*c+f&LlwKX593QPC*HHlg}>9q>xk8GYQqtlwL@w9x^p6BYHG^7 zsH=N*1cUJ@Cb-LMY2|Zk0Ux~f3E+R`WvL&h|%=9AY&2icGE_;^x z-Rf%5U*nqXDQ6Cq`*p*=N7OpL5P!AGwInVsK7Jx3yL0mPn6(~3t{0CH#@XtAJesS@ zKBM1rbt%D}Xl;4f{PzpLC+{+v{-L3&Ns^)ozUPzGdj!bv)>v?|D8Heso~q9juKK~*v?`IF>guG8-6_9|KHzKD^>c$e7`3*!6JOa6-HiG LStj$e(e3{MXd%^{ literal 5105 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ad02_test_point_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ad02_test_point_line_intr_later.png index b7058717001bbb35f5a1753521c394b1d01ec0d3..72b287f47a2428e89b78bd13cb9b7b5bc078b243 100644 GIT binary patch literal 17063 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 literal 4900 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 literal 4337 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 IYS@MR8w~!deE;hx1sp-`t}Wh8H-Q0RUr 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 OvQoDs^RDaP|9=4S7QveU literal 4736 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ae01_test_line_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ae01_test_line_line_no_intr.png index f7f808ef7a18986a81675b148ab275ab176c304c..e026d7e054a5284e13420d847facde5388ddea66 100644 GIT binary patch literal 20493 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 literal 4464 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 z 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 H$AEtV7PLal literal 5786 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 literal 5912 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ae04_test_line_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ae04_test_line_line_no_intr.png index 4566a8e598ba9a847b430941deb99337558b5f7f..84c30bb9e8b3c44ca49fa3dc3df66d336d2e17ec 100644 GIT binary patch literal 22507 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 literal 4901 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 CjBD2b literal 4951 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 aV^8l0+c}?S4F5I27#o@zywv|Y?7sjqpN&TV diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/af02_test_line_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/af02_test_line_line_touching.png index 1eefae3ca35134ae3e90b383d6f6efa4686a0922..13e7900021e4cc0f5615408ed85d4dd1cfe5062c 100644 GIT binary patch literal 18119 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 VPg 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 literal 4387 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/af04_test_line_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/af04_test_line_line_touching.png index e1abd85d751fd7b8f35c431fb203508fe7c821b3..2f58fcd64d6f825d6d4bf836112b107be89ec8af 100644 GIT binary patch literal 17512 zcmeHvc|4Tu`}QE(s8k}d6j902gJhSbl5E*3TcxsvF!sF#Z4{LvWZ!AQU@#RWWM9J& zvYQ#(*oXJL$0I%8@Avon^L^jn=Y9J;&!?WzJ@i_*BQ1B zxBZfqZ!j8bo&Cakw2&oNwSGAvv*YR)Wy*`7Hyb`3e8BTm_vG6rWpw=h*LI5fOHr18 zR*Ea{e7QGt?~Sh7a%Xa-hrlbZXwQw_PPJY{hr3F#PvF5W2Z;UH3co8}J%*x1q1Z}M zo8Uu6Ivy0t?--*W{N$_XfAfPgHbxk`=DCT!{t35Vw@yq~3TE?ps-d2s;nIfo9IM70 zABsnHgoL{9LSqbi=7)uP=nSDFS%y@kduQWzgBv%JYUE~(g)YAT^(3UZsVU+1ZCa^) z+k`H>AQmeBT&cS&Nq?6}{92M_qv6qYAK`fr^Ozu6|L)&P(A%dtS* zdtrLKmD_XdU13iEhu+1DsqO9UnhH}djO^+qaq}A91RJx_=HsX{8=`3$o;Y@SlH@Xt z3(gywdFKW&?v3M=aj~pxv)jkcy{@Qs?+so7rrf`tPSHlNKFe^|s= z)x9|x#f71?CCB)%%eS<*r*+ulOvEf|n%-V1Wkb;<&{N;yFEO#w6-@15W0naP-Jm9L zSW?oEgj-p@g2UzJ>cff*qnFyuLzsL^@XFie_+o04v7{30MuTmr(;JZ|ONPHSi+7C) z*v6SA@4awHL_}+Te%{*JI<$3EZfw@##trN467Q&BOm6Ny1raqFm$ACi?FtzeKis$% zBhTQ6{;2yAb-pIVXPQ@TaqL4Oxy4BT{P~?F6;sWIW|@~o-P%ap;+9Y3=YNH1mMbid ziK#XG{B-9aXFj27qMSSXoq2gc%mTi^DLH{o=8@}ITkPl0N>WivChUsVS5OFgu~TiwGZ{S^@S*8De~-So;7oB)?Xm4EZbK{$rxg~ zeXt31B*w|H549tmPPI%V)bbY*pV)wafFKh7?Ug$|aJEK*Wr*5pYWEl5c+sh%o?Jj8 zwx$)g>`WQf@(nHTt3RClILYQU) z_wx8gh-hWp3WZc^*4iv{JI9Q`A$H?Y$;4y(>2o_!d~9?)e$T`_XKof43sc}3vmuz# zpXgbK;LYl;hnwsnn=eg-_%>g1c6v`aJ2!(nC3;jRq2P)qosYXObvTV5*TD%*D+5wSV zmXVsO#uai}Lqns&^sEv+Esbqg(M5kno*(LJhYE-D{OpYImr*MFZhyL5c3SZEr#E>w ze<)#?(T%qL&34q(`|@{AzB=Goa6tZ252O?bw8F=4BJH+jxF|c`ZL7S`CLt+V)i?2N zlzc=$K;TCeEa0);Ej(8TW*2$klG(*v^ziw$OYYF@aInN#-X!!o9NK+eU41M5RGkKf z-T?cFn*O(~rvIC?C%;ETL^NfaDM%bYene7I@<)~0%gdrE0RasC{rwfgIa96zf4o8) zJtIod+Pw4hcQ1J}co{GGm_5SAXa0DZWA8lDHx$~&cI-*VxBR2vL@MqO%Wh5Y>@=2; zkf`XJ;PaH)+~`xw$671{S?nZatSNGoA9P%PoeF*c3Vz5 zo~t+Ji~Xvqs)mo>wks5R+s;G{B&UA_lF7%QSN$d*eQ;)Wn2shpslOln=N6tFVJ$5! z*F^Ro9?H9CXO!V$RE`RId9jP$SV!mNACHeht?$JSI!s5@*g-yed|sXH!)CkDHu^^| z|BF4?!^i-8z|6>?Z)kXW{re7VgD~igXYp55eE$47n&YG-e$NF019kDG;QUf+?|~Zx zd)8|N+dKQV1-}3A;rIKw(C}^>qh&zxIHHGTaS@^YTC928A|%utA0p4*Jo|3-8CVqKXU2ZSr|Kq;3@67J;Cv`o7fj)e!i7!FuHE(w z@tO!vGd-<;(5yCEI?A!Y7|%7kNMXii8ViTN*0jKsd&6O=b;53c{r=9%TNhVZUS8!- zmqmLYmvC+iyz%{I?ECkBnV{=c7v^hyvo4Ds!gY&aI`CEm`4}x9oPw9vED_JFFluS# zh{fZ%NcX39Z@Jgh&=5yioDEb6AJM3PEdaIk#fv@kcTV0@ip{Zoe!vAQ;n1rhAugT*Z|t>H zJloZ{NWx{)Z{3qpRAh{GAv8d3%e8Jk66L!*9~DtqRVCp{?9?Q5VC)S~p8TX!|12sh z)1mKcYF?fJz@DByzzZhFzc@uRZ09WU9qjsN__e(b7B@`}QRPd2C!?KFx; zKHLTH5`67_O&NkX;O?wJ0-FBOABuG3S-6teazq>Zrw(_Q2)AYex!o$6bLQAus+Z)Kkuge+a=BEt z0>~qshK@l+VoB|Rn|0kzh`M`QSsQFO;L%2xbKwgW&t-HS@wYP?%KKuCaUP=$cp+r; zV(cIgjSWz!5WayFoFda~K(>IH_(ICV#`^irEk1tp;ll@j)S<<%@5VyK8_H{D%0kf| ztN8x?+|16<+iTy*=m!~QmR49qBzY}g{7ce900!jE8!udG7AZajcspHe|DRuVw#QK+&Y zLBF7jqHK@mELBC>^h``R*S|05#0JO>AqE?0Y4i;Y{#Y(Z{{w5(E9hk|&g4lhh6%Q^ zvZm%g0Cj{RqUzsNuEjkmXVr8B8LSDl`ozWtr~Y2$8g``Km6q6BcX zOw(fNtQgOP3>WTHJ&K&dd347JRNyBwH>x8NE5Zb9+TLCXP1r6!r>L8BuD&i-`T46? zsZV)NTSFQ-ra*ix<%Isa*W!?X0JT6IK3s2;UA$*`=~(%`c!UdP$!y9~1$q=uZtQ#hv)smiFlD1u8NqcIbx{<@aD3*Ka=f-1lGxeQJD4ne|#~>## zs%-(N$M1P~Gs~t8NUs1J0_eW0#DN;wcN{t#Xj_ zn9Jc4<=HMzd-PV~{(6_%XgL}2Yu}y-D}+D5%k5|Jt@WhE=M^$9y^7XT{|75m*@JPhlRykM7t+dWvj2>a22~N1-Q~+a&i*%Ty1R9gXL!0>=bZUN*Oew zWiQTl`{KTaaCi5&?n}c$nS{dR0koD}%Dt@Jn4|&!L>?&N2RXsaYvRk(du2n~c-(xo z{q*u8Y1H0#F;aeEh!^kDVQb=Ja>Ql!uHKRyX)}aqK$-4GMRvfuy5{EQ;V~UKR$;;= zb5}KDEK-uKTO}ahVKZ-pulT%ZD9!qYVX`Vkn z`m>+7_2$$gwpch5qc&!X5eT8Q2AZ#p!+nf6M)3a^0L8n~t8@Dpt32m~fekXmYkcQ_HlAWviAIw?a ztLi_mrlxk*+05m~_4a%R^Rni*OdQ8k02cI>hqT&a@JUfJuGWJ!QEA!Pq{(B2qa_gX zIbQRQ2rq?wYc+AjCtk05VFe-1Y=*h|<$+y{DN)G8IXpak6a zecFzY)4L>=Hl2SgU_KM$)j_g{a;TDNw&V}>le=pm#_GbfwOqqBb{*v z3owu!!gsT~Y;@hbaxM;bc`vu28X3}~{3so1G@YV28;WTGPx4`vrc5^~|M>AE7H~-& zXilsMI9gcbU}skfRbpadD$cKruZ7J~_FY-*R$iPXY0aF!IysA5krQ|P_3b5b3bPBedsAL!^Wi7sX#X(skqth(zs$&gmeQ?1H={o<=$> zBGQTv<4^4#s&6Rgw#ng>TY4*gElAum58eMf(EAa9&(Y~dt=8|a#6phpXc}NWm5wY& z&u%EZa-VniRgz=^5@|hw+`(?68N@Nj%)F$% zPsjSFv%*b7vkK2j&zWuCR_-6Nb&rY!W8%JaJm<>=ITDpY?+S7U8Z|XoOPY*gysXE= zgLhOP+<#`F^_`Ku+_>{_nYAP;ET7ixF0H@foWafpe@wH(8Wfl8L>CwXLIPku@5QW8 zOOPMWpnM7+!^%WIeHsgVS21wK5@bnAANLBPv4G(5?D_LVMCm&sC>Yj3Am+Hl)C%Cb zx#hb$J2Q4^$?5=FJ-@O{35nnbtWKDSKA{yNH}evtNwa(1wDy(H4i|#xGF@%&qibtx z%WU(#s;Y5?(!DY)(>)(7Klk%aP_0yyrW`0n3y`$PA7UuyHe$!#SE1n?TLW4I+^SVJ z2y~GAmBW6Bh$Xc|+L!zo_T=^$+K=R`!u}UV()c##?=O#eEDR^>U%J#j%;gTK+oS)v zp|~s2*n446!RAwzNfg)OWkaS5X_fNk+b3AIakiN`=5Q;#xz_!cP@6;+;L5Ef^GUR3 zi|sfr2^yT|{UwB61FMn5F#-m3rpCDjd5rC$&5r3=o~wj2Z1a;=90TK+LEaY3dx+CgTp%{6X~ZLsCL?! z0~tGV+%I?=mb!^$cZbO3!*Q?7Txz!-8tBnAc7>pQ{4 z1_BnsNgFWpoSTbFUdcjpwsp_vdzXqma$(1)`lc&xF)B$jsy#Io$c58j4WVhd{xo;0 z@5=INjmCV3K0PC&^t80J@d?032;q=(jDGO&A-Or*M`B6j1LzdjL4kzwaS3B*Qik)Y zkzYgvvB&$Q&U1wbczGcwis4RLdU|7t_aeII9&6<=dgND_R!dj0r#^f&NPVX1hS>)2 z5)4f23BaNVodvp~=uU@nD_9Ifll?W})>K!w!{;U};xY5DmdMBBpSPB-G$483)HE6h znAtkBS%gdZPH({0=ah(0UNzB^0%Py+0aAV{Wz&!3&~UGYqw@_zeJ)5mPD>K$>f zxm)uTdE4$1-lc+XNg<`>i_=o41YX~Yi-;)d;a3~!m_5P7c?r>YB*d3&=BC|b*%6_1 z@n&+7sr{UrX%`B#pLAe9p0mrN_~X*Yfq(%G9jered13$H7uL~ROX@EU0gFzp-~Gkiv55Sl697aT5sjlAnwrnK zR; zGofhcfE4yZmCldd{S(imwRE^bl2a+~q~%T1Boq7GN2>YN+csR)&LLg%^PO;$U09yQ zWy9IRdregjQ@#!hxB44Jr%VYBC=sw%xV^=%&Z%$ZEG)(PbR;@KVuV73gsO9^Npf%R zRTF?B2x9oG<^ARZ0(}8KnyoCfIxo);B0SJ>pDa&8q+oVaFeuc7s;Y-4#@PPiE4IJq z*#CUvLa>7Tq+6jYooHYy>c9=tY{P7? zXc}2UO0-&BcsfJ;a5}``igT``kr6rGZ27!MbL;3xs%~SR%+Vd%mh+DE^2-;p_ACF& zA6F7HTn4#y$p;4aoxErP#a=Z?$R1 zT6FnfN3`VhBWq-JV;H%!Y?3t8M~R~0>g+NGX6K@hKIXK!F=x}--X1|!`QF~8*>TLK zyW)Be;SSt$WONi>!eSVj1+6TG#<7rjyhn|?ALJ*VEPU6Ff7(qlR8_rqzk4cpD2d}Z z@HqTS=r{o@DwT9!{!#0bG(R;Ms4yGZy~N+!g&zJ4<>|s_)FyOaYI1Z#+5KG*jtA8) z;e3i+#@hA|e-zr_Ghbx}Ng?ZO?-tL%W;@i|yBs|zyxVmBY5fZq*p>$cv+|WVB<&bi zrXaGo90upnS8}m}1|*hK{}nM6xH2*_!lwrOLd{g|>O}%HO}^@W47#}3K|p(TaBj6L znZH39^j#LfpUS~mh~bZ~>HUd zbI+|qGBS}s^nl_=)1KPbZol_3p@jw>@yMY=Z#p(%IuL>9py%Grr;)e%WP5o>Af!&D z7(IUcxU#xhW5#i35_FDob91F3q5ML(7r5Ew%CIq}LBdiF+?LpZLZT$uk9lJ{*3TE} z@v#3!t~VV)iac-9(vARs>@bjY+rk#qKGK|CDyf=>;D!V-21TB;08T^P)WrpVKYj+0 zHu|sY4_Y!VDr1k^q6nBU@%&J^6btk>K7gN=ec1Z z=?~J1B>-GB2lJ*4Iqp+8R`1J(Vh)^RKzfUx~vVF8^Vp@xoLI; zT>^>$I#~GFb-vdS24^flg?Ps0{)?GHu=iD;`DX$)2uUZ4x>n$4GL-(9jE0wAnj#M3VU#T<(EB*s#gCfBAFQ6};VKcRw7 zT)@*8UH!6URdj`h1srZf4=}?2l<-q*5-uD%fB>a4zaIs(8XctZDekj0cTI%1=g$Q! z0iZG+j$68C#|xqX6j($wfNwf{x$F~Fl8q}UxVRHY;q z9D{d>1mFR|Lz=beuS8^Y*aA`bIRO)#)Ew}pmuxL$4`xogn z|Bg{Ml>edrU%w8CiHZIG%uVnFwSxmh7pPV|NK;`TLs{Lt*;LN$o1v>E*W45=m5zs9 zf{y$b_ftp}YP*{OK(NEDcZ8F{mDP7#Y~&?2?5vz}&FK1ef%j zoM&tKfgvvMR*w>x2l!UEEA$y4+|`!M>b>AaO+Q+^b_f8lK@E`fqN3O9SG&M!4uR6T zerl+pI-C?a4cLPJ_w&)cISEzp&DTeJK{&q2vU~RsNB3L+;MdTx>zriyl_e)A=u!sx}i-64RL_HlWww`FHF?;z;o#G z?5Km(|F_inuAOtsylD9bz?gyAo>PJS}+i zXcIuoFzPl7sbywnf=;Np7HH7VLYR*qG#Te&qBN6@g$*$v_T!{Y(awKUAB8!}-VRbT zdOSFj7;JIv+95W^BRe+T4FS+zfG3Vm03K93uc@gSuJK3XAv6KV@jc&x`WEy!LUIs? z2C^Q-^8=BqiZ)<5| z83Ksl!*#o>-ACM@8*=)RxU;NJ$`lw)z*TXLg^o%jY|2Ilp{`1JOj~9eVKiYYdiuV6 z`2u?VU4zU^i3|D|qd$@h7NjNG3t_0sqOAs@!G-c(}7E?O6 zyXPtPpB0vRwv!h|v(sTkp~?{^?Jt;^{Mmr`nPM}NiIebInke^}s+J^!>d@N6@)5A8 zkXebbZnCC?EB!cxpqM-Tt%}ft16ioN+}vSutC^%b{acEc6MfyDEEL!N@T%s15pCCU ztS2^#7>rp796S>&6QwB?6(#A_4Nwzwi&h|O&Yw36ps{~rUkwdBC$yyyjEzV~P!u(i zB@(S0V}mi-4nN)_5>Pz!;r1chtLjulQ8)p;5#|`J{v={B0O*;R=b9RUGDOFMLRn~t zKrBdic6cUT)x}V1)Fh-(|zs^7#3-HZv z(Vp5F;jexrb{c@Kd3kX2o0E4wuXqA5MlNf;j`s2npvTR95kXfR46plFU{uE!O%ADj zv{y_|S2rGV5(ulY)N0rVE$Boo1&X-Wb`|xtPp-BsyPRz4Iz9v&yPXt}TV@Si9&Hzw z*lZ|$@chos5^JR|=uWfAM*u9Q+2MA)kQIRD z{!zevD5GYli^3CGs96}A%Rvob*V;9~|H}ZH(|{3?>^~y>698=byLV6RcwzHEO-TQycD_wEgiO;KC|IWQd!o^roBFr|=ECwReMEwI9V!m>#sizSB)Oz=O4Kh=E-$ho9{6K>sbpI9gWED-Gg*++z z8{r_R2WeeGYiWHAZNLK%Uc~~pLb@0t#nU_Srw|OrE`juts13LS+YIdK`eqk_AcIE& zC?Y7N>l;lE8&|k>4#0I?f?C)rIvZ|C{KvW(8XDR_!UPmdZCN9(7i#lmM{aVo$JvK_ zgx2@Zlx~yCu)5ho=nSbl=J&!CvFy9r0#I|HOB=D zwvc!B-SY0TT!oKsVe#NFK->{jhT@+Bh0~kgOwc^nD0JQM0>&At;RBEjyrc&R(!&V! zT}L*+RjfZ))FREEh~FzEOV6kRqOBIFjq95X2ZhRC0X6;;9>T_fUac$2mO!Okpr))5 z6#tasMIx5p?2s)y6eP>%P`uzK`&QAN22ao{NG%Zbjlhe+c>%g0B+#`@r`3s+c24^m z%o+LnxsV03E9l=7W`F+%^|;YNA_Q0)hEaakF7%^gsEG=cjRrS?cj1}{ZE7O$0dP}6 z_60)*vfCM#a?ggMLA+l-vS48Oa9NaXqW-p`XhNFSY?_yOl!0BkA&+GrNy7k}NQdi& zgpuS^d$4dgfQ8YI0jYsu{2GV@5Wp8=VlA7dAl@AFLZh4>F>kV=I=RZVq^?M48>K@m zeY)99s5y=)=Afrlaiz5@7PuoA>%?$_gjKH3p5sa~jdCA&wE+1fax8Hld5`VfIR!7G zxA(wfFQ!gS`$(U;&P6L3Mo3sFLAU*}#Lqvm?lj0G#d_$WSx+pf{9zOM;P5Gxl?VC0-X zP))>C(}Y*DI*4k4)`(4^!1(=x|J_a#S+Fob$bu4|$!7&#WdNz#K0YNi3M)&R8lZJX z$hg`i&p>0ne{hi7S%YdV!Aqz*MekXOKiSZ;(*JXcGkKwKA;`Dl7vhR@Oe0Pe24xG) zo%g@(kEEW@J!{h@&UOQR%5?U#v& z6#S4?L=$AxT4+reK%`%i;2e{EvWR{Q6IDtju^j(^O-ilQ{SXu5wf?PoDB5@o)7upb)+SiVi zAx_PM*3Kcn3iLrVUw}LbCfbC{qA!ugffM~(Ph%QcCE@V&Dzi7lU{}}DYAQq7H!(5e z`^wq5h+^ToRB{J&+gfYa90_M<+2|=f$MgOS?!nEP_D12^flg=GholUky@%^){mf~r zVInm*S0FH;+HB%@{-nxmeJ46a0yJCbV*ulg&fgdS!4?AS%>_V?Urdzk`rt zkbOZyr`7OgcZmu7i8(vwBTabB@iR_Y^A8w2f*+rduXD;6FrH#D@o9g7V!<5jPDk`dV`SpvwhW*`U(pBZ}XsZmpspN zq%pT{nP6ndg{EtMA+T|4xyf(54wO#b=iiCo3DN=%bk$fv@<(uj%=3B;$(xr^clScO zvEf%mSm~@}SOTD(ixyGN)NVUau`lF&P%4`+C1fEW#peKtg6GOIIlBN_*WhKy2;z_y zsQiTI_8Rw3I`=9rRyptpG{|{R2RDuV_+akS*Aya&oPSFNM57bj5k9gm@#3gxEl?hL8Sq*rkX@ zO&JZd<;id|c&ooqoO(?^ zeBO|olY=M;53w|;x+%m7n%n*Q12!_1>oJJWh~Fa$oFL5QFavN*4OFP&mP{kpZ{@c@ z4mx^ttV!<1ceclS#ZHAzhs7)}OrUww~ z19(Stlgo#)JfRyHA$sNWe%})4tAm{mxejP6*GaWr=hi49Qju9Rg;_43s=r~VKE97AKls`y2V8Z~#vui@Fh8`!7Mo^6M(XY#^oaBP@_@y`+x{<3 zE7!ERNV~R=;EPS{rP_>`xMb&oxOi9bu!HM%F4+svnQjH4J;ajpT~LxIq!o%EeRx6PqBI&S8+2~;$o?+&hD?msI%URb0e zWju?FVz^IU!~3pK*cE)d!p$0Yf!Zb-Ybfve`Ke3t5h&qIjDDi~A*F%@tY%UQyyBo5 zXtA3YUj>eI{fjXoJM#+oB|(F+cSA9t__!fX*yKENV6Ng>6WD>?o&-;gj;X2XXP+Cc zcnDHG=+A*gBMHU|$Rq4)28WSa@N|J;{h0a}laJvhF0YQ;b+!##x8>P(=;`Yxf_)(k zG-&t*9HaqS-7<0kpuIXcI3yDxiJ$iBh9QkOkeh8g@`QRv4Kgm&6B;v$6Vr+Ry$_-b zy1w~Fp-6`hE(W5Z;$`wzp{J57emK~!@QTW&pr@^)Oln))i@ShX^25Gr4pj)mJUZc0 zugZFl&v~I6)QM6v-ow){N#L@W532zF3J`4L##>>;CP0=;D+OvzVEQ)FPa=3Aa8=|z zEG+kMNyVVl#C4Qsrlbr_I>2)5S&j%%SUv&GdFHgtOv1gtP>Mxs>xGH|^^AN!-Zg_NI#L;+38cfhh=D8F+7QVDP}X36l;3)sd{r5#?N-=eifWW)Y*2 zO2SMEv9OU7k1l1f+wk}$z{Q}D)T{r|xiCH4D1mfAz2uu)Tg#iHpveznuIvD5bn}Eu zH?%HBTC=;EomoNX%j>XvIKLRo0IhB!QSTIzL1}g*b$X0u9`p9rDz+&H69$FL{k7Yd zcFK6^_StW>lsMX7*zTf<$bVo`k=18 z4~JQZt7Sm3kLtV9a32QLl&Bv5hbu5hIgLmwe;z~+At50E*8gr9hwj5MuvDK1H!^}6 zIy*ZNiVcN#l>}Lgc#94HZKVg7++|i#6e{(x1NX5h@IG*7jze|JzlAgj*5(1q%0@DG zuKVIQt&fNOXS*ho?*F%I{@-BN++Pq@?5DQ}sC84*?swi@!|2L>$HO}|q1`)yF7~M! zhF2X-Zu~)Th^b|r5W^GclE0H?Pdl&K&$olv^aQLeGjpG8z!n2XcFP7@FbRQ4@EISW zt61iGWUrJKcy7SauMfV1zyA8GArA2TFKDN`5H103KFrI@D-^K}Nd~q;r<(E1I#(?IQmL%|v=o%J*A_4u3 zbI~MF&tcZ((BG3aiaeKRyf)I(fEu8Szr1TxFC+{Y_d(8h9Tink=OKu5^;`ZJx{)RZ zbW)ah1KlbOz6(uPaCXZrCrZ(;^rh&P+t9YH8@3H;z=N#9$LS{c5l9eXkwrYDxi_lWP276! zshOIPUIEBUpu;2cv%X8^zLvz!0*}EcS2Wz2-`%;`2FM^{5)(K7%80a65Um5`RHl6= zw1K2F0(8~r+}Ur4TX>F4NWwatf+Hv0b9WbdvO++>^WqsEXl4aHXdQjdhXj6wpxSHD zDZnpd>N!i)2LtB&@W#=<$4d~c0vS$220TE;Tc}-G(gKsEa~h1U&4ha35#KPBXCq`H z6+uJbMj8Smj^@n!CyIzsJfp-}+cP^C?+E$>(r$wxU4Ep_OA~S$LyHqkF)#%D{MoY< z7+U~EV9jgG=XtT%dUmMpNWDvvuUL} z{?y}!znvZwa<*?XlVsLdDh7?>JhzH=vWW|6`!<(P0k z8RvjP=D2LIejOJ_w}H2_KEx*h2Ofb1#C!s{>!7FFW|&h%Muni03@-t>2tF$w0NT_7 zY4IRu+tPbz^HY#n&Tmh7ogp?O+zL)F&f8g8fm6;q0i5o~k((n20x|PVcrJsNE2410 z2Ilc@v3bsn)dL{@jP*mtXCY5R7@FO?w;KD$%mbE}1{Fpjljwo&;zI09ee~$jxLj#N zGve;uyo=uw{KsI{4+QHwmyl83Ib`1DeRzuvm>x^B3Dfgl5S%)YUL`Jn^vm(B9zOOl0eJxlAEqmuB@$X1**r2jMakYPh+Ox2@j*+$1548 z#h0KB*y9V9PT!+y5#VixFA7i4CznV$4V(!TF8CE1)Q2R4lG$R?!7Hlwbqo!Y!IrEU z<2~~V#968r2m-M+G2Ap_EHReV3p#BP;0|#iv?oH-7(Dr!q@t-{Xq1E%=a@GiL(M=-%Uw~;HjVNh}AL`1t#|>@;UDVYLgH1{P`t=le zjQOEOvTJ>6hvVeh5DNghwd}nJMjo4n8E&hZ+#jA^kM!MJMTsiR@X#pK&fj} z{`@=2zW>>qM$%4Bx2S}SOvm@dgtIV~N{84$Sl~;Bz36@^!zkzfAHn>8Z3OeK(tZ#; z5UZBtj*TcD`oAZ6CCpao&i}~S?f-+L=JP8w<&J(w9`x?yh6O~ascNcZDP6w(zW~l? BK-mBQ literal 3876 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag01_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag01_test_line_line_touching_at_start.png index 90ea7b03c5851b4f3e2627de14d5617d510ee98e..0ceb7a1c19a2655779623d3305340d170317e5ff 100644 GIT binary patch literal 18904 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 PXG&a^70bAy{pf!IVxmww literal 4048 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag02_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag02_test_line_line_touching_at_start.png index ea62c3e96d8b4dfcdcb6a162d5cce5c7984383e0..7507abe28ecbae9b84d1305d83d9f1942a5ecfc9 100644 GIT binary patch literal 19422 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 G_x}gY#uBLj literal 4168 zcmdT{X;f257JjxvYlAjD;(!QDGF)Rug6d~-3vdQ-5Cha)$XU>^F^J894PF20C``!C}_g1CC zwm)dSQg*E@f*>nxez0^vkgrGxvgGperSRrC-Zh6HOA&k9!&WeikbWbiO$3Z0B7TRb z4cOmM1vA^oB%=+X24kzl!PeI1_odQ5dl|; zBH#*003KjKXwohipg4*WQn7#xIEFEfql8pD;0C^78YfUfDkW$SN`thZCCCOMfhr&a z@CL3x4%k4@U=Uk`USFjd8BPsh(BsqfRd^!G5;q9L0|7mm&!EO~bNYG>91zwtI5 z_EJHy;fU^fCD+~Gf2X3FWIk-TBvyZoZ0+SP!#W)^ESa12; z(YqW>V9m!&i+M^oKpPZu<{YD5WFsm{bU9<)EQ!hynK9S`igwDIY}+O2v^n^&bdZ&~;_?b{u;a?SNi44>zNuC~XP^Bb~%-pf2!Setis3F8~l#el+b<@+32<#bN( zB!$R-m_XBBDr_e|{eqlcG&Ma#u`g4`m~rV~ruN123(I1K4xXQ|-)>Ah z$QiSkY?sFuu2LI+q4AsE_MFL-Q47Q_o2+9Vl5;S^ER~)VWXYh(RE|KfPZ()SP$OIJ z@ELCnXfJr2sVBk7-5rtnmDpdLik5XwH%eg3e3NO7R;0#5a(=?E)Odx68uoYVe-8hD zx;;XNw9=k$Pn36t?k6?309nnC@w0d}d*2l3n&(Y=p)~jI;A_5VVoig#U*g-XeI=xqy?no`g zglE1rYdukXI9<_tYv_C7D$L7xdhsBU)8VDBUB@l{bWZu+;eDlIPTw`(oXv4In^bmd zy>#S1BEDHMT}oUDmgQ>Yv8Me+=1x5w=A@mc4N8ngd7Q)o+Q@yyI0wpufZKZ5ukPD> zv;kS5PnUn?omE_k2}eVx-VOKpG3}=1hI)?Dh!nz6-DLVh<%vPpF&ZT>e8A5v$N6Pr z_>UVHDY84mwRZ=5`sZZCFUQ(qTqtAas+5UOivnXKa)d@<_x^v-#`*iHG7tyV2_cDE8V#OTk-pSU)m_iqd zFsRq^Nwl2|O=V^Gj(5~1isRI;RGsI~m_E;W4L)9|eFm*Wi&kw-7$zmt_Vc_>UT3Pj z2-XmLg(#WH+SSVUYP?Z6kojV$M5~COFqrC{dHTZ@FN0l%DGOT+gG&{d$>BN2-cZ}T z3;!%kNhK;CE#1i|w2zCY>I>a76y>nC%$h&K;@DsIOW}ih>`+`Z)kElhTTul&mRYlp zq%%dcg~I-`lH;O}-P`Jz3}0|J}nV`IvRuSv@1PCUrAW1;#x2Do{(=eXOc6LksJ; z(BAj{ZEdJYTwQhB8qcfn@-F6=uTe3rYM`N}U-q5nxvfV_i&-s+>-sMVNM>wqo14&m zvkfW9+eT!{+F{fbl}l^dP;9&gYuoR@@1-?ul<%mwh$`P$AJg^@mh!W>roMc&*SwrL zzh`qKcA2-0Ye$zP&;eIU(Zj!$y;vw#t#TRZ1ZILkx36yls10KE#b=5P_LBVz-&Vdc6`Ov&+7eEGB5G!07+P z-hv%YvZu^F?Cva4u*f<+w$#@QyAos1Z$jV4*H9arc57LXu5IFR-W+Jmc4k9y^t7xp ztqAV6InB7FTfmtTYz$64M8SH5t47)s!gF~$((-+?xUXkhSwqfe#Ab6VTL*@Eit4e+ zyq>nfe(~_)G;1NDR{>=BpdzPj@n7Wgb9uS*YAnATlE;qqyw0roQVr7LRG1^_FfK{! zp)a$hTCa5=yu$CW zgEC3HRjCy_O-63SlazxccwQbg512L$n!}^6xIibxdM~rEYwMajaq#_GV)3K>RJbWt)uN~0jV+G zt5b4f7kQx`nn8B&JK{%ot{YE1YaUPMX&3r@I>|fj5HCI8QtaFKDaX3!X;!vtzm$mN z*Zy<0{BOIBPAv6=D6^2Rj(8)+-c-XI6glr*#QF9^a;zN%WeG>C1t(lHWsDL{o{4@K zCCo|B6w;hCW$w(pPwZ?+qF%l48~j927frpY8PfGu^A+?OMJC~ojmsu}DVrbs8e4B& z{>QL~pp?G^OJDvkN|D&aqXdkzBQ4{4zysZzRR6B5(=$;As)Q}h;%AQhv1Lh-Sv8ne zY$`RztZlU|DNEaQO1OQ#>Yf`Th1#(PBWCA`T0giJJzBLgTmmq?-;!jZ?jd`xRxjX` z1nAkw0G*-ZA031iJlKRzE% zylpBPHF$To!rj_Uk8#edvR(Um$l&OT;fEaV6MniI?0mSWx%9c;UpJ zTLpn8?Xhsb3(V&F*6f)$9-nbj}2vd4>e62UB zviLzl%HYtviTY&oKkq^bJf(p=4p&sZ)^7N^DDalk#~k^9<}(Kemz@m3?wYlav;2*w zf@WXw?b`3aZAt9=RQMyQE}+KMWpetXAVcg_!gF$~cQ1>1r`A~5Z-&1~ Oh>g`j%Y1XU$bSGW89l)O diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag03_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag03_test_line_line_touching_at_start.png index 323864f45d194aa64f6d189676a5bdd5446c591d..02a2710103f18ba49a136ff406377dea09bbb5d7 100644 GIT binary patch literal 21783 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�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 Cg-8_u literal 4528 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 Z8X6EJU-MTA{F{NYu{>arZ+_z9{{ZkNz~%q| diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah01_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah01_test_line_line_intr_later.png index c1a2eea7cf2ad4fb28bd81b377b0b18a4e3cef77..4737681cb72fc083fe4c26df7a354978f4ffa47a 100644 GIT binary patch literal 24285 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah02_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah02_test_line_line_intr_later.png index cab773fe68119c84df533a34f103f761769bf9e2..d1f610b8bfbfee4c76e3e9b167557d1db8dddabf 100644 GIT binary patch literal 22200 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 GZv7v7Yx}|g literal 5069 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 B-?9Jz diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah03_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah03_test_line_line_intr_later.png index a301182eb3610278c2456345bffe00ad8712cd4e..b613dddbc82877a80717ebcd98d569ab81a8c6fb 100644 GIT binary patch literal 21833 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 literal 4766 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 WT#G8z_rZ^E#L{f9X@;@O<^KV#lyCO{ diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah04_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah04_test_line_line_intr_later.png index eebb55c16b52e260416fc95d2fceeba5f5abe34a..cbda9d8c571158f870dfcdca6e49c630aa68d21c 100644 GIT binary patch literal 22961 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 JWt~$(6955Ua>xJx literal 5183 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 UmRs%y{~aM5BAFZI7@oNDKi*U6hX4Qo diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai01_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai01_test_one_moving_one_stationary_no_intr.png index 3d990fa744a0edbabaf9277cedde5596a706d5a7..a0f8092cdccacc7044c176274d1387927617bc9b 100644 GIT binary patch literal 31800 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 ZXvvY4JK3%+$JXDJLrQ9jiTe$&{tqo{Vf_FA literal 7019 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai02_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai02_test_one_moving_one_stationary_no_intr.png index 590ca2356fe85b6b9fe364001fd9cee1d26dab4f..9845f33f15966cb811ceb7a2c34c90e2c84e1687 100644 GIT binary patch literal 32981 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 ZH!5OE1ZJY;p?@@BhFBB5VvN(B{|6V8-6sG5 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai03_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai03_test_one_moving_one_stationary_no_intr.png index 0a32b0ccea087e2a9fef31df2b06939e157d75bc..0e9a0b13f1845dde5476236506c798dca4b6968a 100644 GIT binary patch literal 30689 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 literal 6253 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai04_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai04_test_one_moving_one_stationary_no_intr.png index 37a150b2a6a6486cf4b8321297f3c05aadf906da..2d15077841703d2f9865e0be13e42923c2e9883e 100644 GIT binary patch literal 27658 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 literal 5792 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak01_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak01_test_one_moving_one_stationary_intr_at_start.png index 39f7982a3aae180f3dca10099747f97492300d82..2e8036d6f475fe89411490754f18b408e8d86a97 100644 GIT binary patch literal 23309 zcmdqJc{r8r_cp%GnIlQ&Br0S|WG++6kYt{RDDzCVDJ4o0qGT!x8Ixh#W=fKfjM>J_ z^N=aq@UC0+Jbl04_x=2i-yiQkZ^!W*9>c!(eP7qQ);iB~oonB_tf4|p!AyZdp{P|a zC|*IK2!l{4f}wq+@Ds7NzESu>?0#PL>OT1Ax6e8Zz9)CNVBn5I(OMw?5oF3`+(4l? zQL2jPuKFa-_TMzt=^T(-Y?ZwoCUTOM?%-$gMEYgB)G=v-_%p`s9Xb4gn4IKkU7N^j z>v8JquZ^B{it&lg*xB3|7Y^k-R{xoR>~hh0)_B|amN$Wci4v|%kEufohjUu-tKXG! zDqCe|-Vx&8u9>1Qz2$G>bnp+$NGXr}p!N-l8@|v}{r~;eO)6V2|1P(x zgwNvhUXvqSc2W8$`lv4y6cj>%JATBZq^bV+H6~FTDjE)1WBcmWnQp7K*>98m<>K6` zb(3vrCW8iCT)Y+p7ZmH>8s>&YMARQL^Sh7y{ih?Nx&>8-_g`zR@IXJqh7dd-Ga z@2uuapx0)_%o0*kB3~$krrLMsT~JpiG3P@`c~0NKIal{rnVFk&rfa4=Y)%kQOHHjC z7|1mezkYg)Hzur)XjklLs_w`Wvw+$vf4q>@2P%G}5~@HvZgBA(t(^JFWZQ88f!uY^ zvuDpTNqO;$h>8}V*PZT!gb<(}vYriQaVmYGYa#A2dHHc%+;@1A=4YW{7X+k9)D&}- z9UOADuR6w_&`#$(d6I%f-03~6j$I|s(W68o4UsAa28UsNZ-4o68DG-$M9^yVV^pze zJJ#J6RrBi76Csx&dEN|8t}7h2sC${6iz_QdyO>7n^G;5ud{?JQY zBZ3>Pvvjryh-)Se!<~~1kcA^!a^b}Z;dCm9Td&nkLXII?SySs*SRylW$VBqFNl4N8z+`n;^A66HwW8~uU#+_(C zUGe^3*U8SWs_VnLFO4TS_u@V^HEF?nPV7X=ZXSmR3OQuzLr_&!<+Jw9maRlZQIYe= z5dz)pPKzTSTjh2ic+K^`&`gnSK5!@O!nM82DP(s_Ca#eLjWs=aXIapJe>Ra4$gU}~ z%D^aKcn9Kd&;pm_J#g>yXEnd=)$X;D#6(tyo;L*A>1wZkY{EhEt~o5vWhdr@9b@!^ z_gq|ERjLlye)RNdm`S*B#UcnA7;N567*2iSiHMCT!o)k zxOkC*kdSb30KHIaSun)0yAk?M7}-!6^co8Fwy@B3?9;)Dt>q?EP}EVCF6^_XVVSQi z;q>HwkXoo9%GC{r2V)%@8)Fi-B!=e;QH|j-`BBW_w@7gD;zgH1|MglNjzv2|BSbel zr0x3qc1^j6YfW)4a&o8??o!oGcV^G6Q{>PeI;59<+;8XS1Oe(&96xe8bMJF^OQ)Py zgnv#E-6(p<9praOIN?i_Ih^?a*T0Rne9NDfnYr&Re|G;tNR)QOj6pB;Awd27{UPL@ zd+8Z}g8k}vt^G!y-_E=K)zbv5Qca)b7!PAm$36(T;lkrNx_no(wd0NUe{SyM+Ak(v z@GIrg{F`#?iwtw$*=k)cHiTss!f+xN;k0uij*ojg9Bzp10>e?C< z6FcvQYyT`@3yS{4_o=DZUWcyM_E}mu6@)!A^593Q3P+`oIGkqwPwTl?(ewynEV=Rt z&m=T|nesTF8)xeU@}$n8{L#rwn{2PX_1b3sO*04v&nad3hsGe53^x zZTZjsLp^)?*Z#j$hG;?7uRtGi#K-^eh9`7aOF7%vS-4f{D=I7heP-8#LSlq^1PAEo zik%>XA-A5GoZRyFmBfNSW(UPYNB{lCd$s=Wz(XFHiRrI9$PRi<2hS81mgzYHF~+mZ z^$4n)%M1JO4)X_mk#!#Ce1~aFF`-m-qHZ)@^j( z-yzzu4>nEKd!F_0AO4rPg%kJ`9_?LS-M^3a_j>UER244#HoIuRU{iP)zcy#(bWTXz zJzTz{?>*ro<`;Hf^@|#<4C11alA8ZsFC?Y?yVcK!Own^<7ozVpa0FJ==C|1u!+yQ! zw1dB@{r6SbK_P2Rg4O1mD^rV0OSMmhtrnqxiBEbOL(Nv~D03yfeEHb1V^78G8D+N? z6*lmAKHprp_mS`4|Gjqt$zrK5y$1Y@p|;2EPBULG?)Akr+Z4XDs9BaOhCl+qYk*%d=2$9(k2 zt3gKfmAMjMM{+lr_9Yhr`*s@oMF^T|C6)W`{Us z4UeSzI2FXioLT6dJDegS^bHT$-eKJ*X6Gy{EcVgTHryg2dz6&q=o}dqCV&0ulaH@&-SyLwD@S>FNUvSH78V(a!AyBbzW?xni3Hs-12h(e7NmO*+)N>LBhQ{)2KwY0Q)u^3o_034p*a2A^=dso0^vPqI;&FtG#$LuYJlKvaBQSOz4u+T>P|MzCEeS zL`zcGy?X`gg~hg61M8c;O-)S&{&+9EPq{++-4>K?1cqDHDeASalr3tef$*|W!WqXp zM@;|tqJndQKBp@EX=dt^Cr{@6q=XWN3JeS!otSvn+M16o@3Yj;)g2uj<>cg)&z!Ik zfnyVdt^WjhJw)5s_yHj1&=UN7IqmT9uzsn_5qL(IW~+b7f|=03zyOnwdC)r*ICgCX zRt=;F15vCR)c4<8i&)Hb<$e~}H*VuZ7xoOw3H=GK>0J7!M*L7KwA{lVW(SeW?QEp= znjl2w5Y)Flh*7%l4g()Q|DBW+4y07g%w&6c8>deze}Q*;#H~6vUrL3Po~K4ReeVH+ zDM`!7bj}B#{P(gXNDeCuicmiKAMy#3UV?{DnqN^H)v4J#KpL5yZb-Q{cPel@0GOHK z1RtMvIb{}nFND!oY!;CGorOk5M*hvp|Fg1RkJ~b*6Ye~#MO+4G5@B?T@BmpZ}uABy1VnbXDo^h0WQrtMsp93HpYbAzkmMb&9fC16>n^s zncu&E59h3N8VY6bH-{2T>r-K(a<94bmoM*!R5xFRck1(B?=St)BBf<&I={HXCgt@$ zSqAO0-tRpES_BOa{%XK~-Nf3~)~Yf3SaB65hF9}L^s!4q0b4%CShsqM1Xw>PQn!@C z8IQ=yR(07!5xVAc^XBk9-sDWr+wIj`V}ctSBayXU;`)qnhP3ph^#T>21$8zI_0-2jDmSe6Ik{cu0PH`ye=&5U&5N zp&W92cBM^v*3#PgdMJMrlGg`k?8OtBkDomGHu6_NhHHHNdIeZQon=9(Qu_3q9t*E( z^ql}w5nEKkAgZ*0uExi%M0Kt%c+gd_?7&C@`mxK+pR)r`Qdd@5d%3nxl`=x7b6fDV_xyhA{rT*DPHAj)Q2-nD}8IbySsBm#H>QU>&B}i(Zpe9l#X@ov_ zKsC9#sha|CV-0x0eL_P~MMWXMyId*Ve$^zSy%s7kuEg=FkVUY6g%LWvtk>Qqi+KUI z5-kVcA^@+lqJkBNamM_PDFAt@(S2Ont6nXru1L`!^_QJ?Gg|~%`IXa$Uc8vo*&VrY zv0ORr^$*gNPTVzvl3kJRS@fz^o>?{f!Gi};L6zwB?_%YzQFEgtf zQyD2juHWA)uUA%i>DiX)qMKzeMiaw(!Fu&(r>x~xRf^eWFSc5qIrrv(2Q3S3-yq0`;wkfSK0eC$_;{b?MqUdc zrddbi#DISI+HK*P=4u~1JNxzabZQY1kv>^(byz<;?{fzca?KO<2KACuIHCDtOUnni zk2$`=GS8X2QuC#0E%-%j_%s$yb=dRgoOkZtE%TqB{%j-qePkpAZOrhSsaKFbVm9wD z^L%>Nod-_)FodQ{b(QB#7sw5SAt51vPjm{NwCIU?+u3Dp-|d)BOb83>1Nm_3+0KuY zUCuLS7)?!0Q9~{Ymm&J}OmC8S58TW!?6*JTIhH4>^SuRoFYM#CE9s-WDL7Wj7cPWt z+uyDoaWkkyNtBeeyAeTsLN%R{3Nj|=iCV{`0IX5YA+j^vcf-*{h zq3~H8szn7UgwnkJ_m*=4cXv?ljYuj$ILR@_UMcMZ(l#|U^$T>+6H&@v$(bH+NX=zV zIDLa25w(ZijQAOWx%?vGs#J&ua=Z39=ps>3QMaH@{Jv%Qc|lMRs<`|)#qC!AW=DS)VD7Jr8| z&Y8CP$Ypxk;Y>nElVgFt%O7+ne(x55>#j5vTGaP`(s2m*_X@N!+{R9TOFBBP?qN9i zn{LoSQg;*zt~D{@wJ!rMGZckA(N|Im0sW=^Lj((C;WPk z;Y9|a6J0M9$N(2)!==l|;*4B?MgCszy&FjmJMs*wn+0h5cHXyP%^LOLfpymF4mfu9 z0GBK9`|0-U2|_~tY@i>b&<9{L#=p%`{$#%pQ`Z;yEVOiFgxq;=P$Bh8ME-H z`{S@U2iJssAP!8CyOK@|fgrORl&YlGH#CfV zuMe*q>#{3`EivB%+A&N>6tPISaB3t<9O*kbl$m)PB@ZS4lgtsg2s0uif})2C!%#>7 z>3;qCb=?@qZeii!zc6_W6Y}m5aY)?HPE3S?Ku!L{Xitgwg?Uw}ARjRt@I0az$u9FK zHulx;fIyx#Iyx0X9m)2OpFDwWfV0mtg2d(9xAdqxMq)Mv`p-Mlu+9M6VqNC7!u&|Yr`Iq3Ta}ATIzkCYF6t#4U^&ueQ)?^ttqh}H<{>Yzl&|_g0zE1H2lX z$BvQA;V{+XGtT96XB>KqR7-Vg-rc3X&EM2h9axRekGu4fabuYsCANEW3mLpd|lRC*#k0?JAJLbdk>G=Vw+yh?aX?gt2Xv$;FmS5R70Q&XRx zFp;p>FlgaWs@GDeTrc+!-uBj_zWm4l?IS@xzS|fKrnlea>>u&^%{^e;Il9@~_7Td^ zWHE9s|K{LT8hfF${n)g9{!hOTSrdz0#sxZN<)-L$A5(Htx1)V8?OKV=J$uBR6?$UBR6t!*XknGQC zpF%pI5b`4#DFJR9?5GkYUPuY=2P)B8SFc(xltauvd2-09>ZeVj44M(ZZ~;c|Fm!)< zG0u@30UIy6)}QO;n?iT<-Oe_CZjeYd8jcCbO2TfV7vQuX28Hgna@si{{MH7_(Cl0B zt!!#|ZG$e{o=wuclRim5%}b9cd z%`!ozwRNVYq*UnozT6!d4$@ z+S?B(r?tJ{5Ed2&?4;o5S5c{+(S8K*2y|61sHqiU&}g*PY)^qi;EpsjpC2ID1gf4A z0F9*h2g*lv^NbDn@X&r^tEyW1z=CulrB^$&i|3zYbkDf1Olqm6$g=TjBxZW%9OTm- zf==LvXJYntjx#unV6xA5a_N;X3dJ@aC(6M#isZgB3ko}#o^N39lX8cOnU~c zZmwYn$ba2sC7RLP6`Rx98}sE0toOe{_OqC12_zB&gTOB@K+;;iiI_%bAqgpImw}qp zjIFbWJPos(rQ8V%sZ%_MitnpM>-RBdgv~XK%G7HFWw;Xe)d; zAtAv8+FWrJZR(I%ka|b&E`7k{i_kY94!&<_KnRcLPKb^>>0+#&X|0iSWe6mlqnw;I z1M4(wlFxygB6tfz{9{L+i4>^Su==T8C#)+?X>Zq}3co%0{Q0wCJdo}$C5}c63=GdJ zD*BFS13n&xqz)7gcC7moGXn#0rD-HIp{4wsVU@PFx8ar$oPu6564TJZfimsp?haad zfx|bE(ed%`&{}ofJzOKE?IJM#Euk-f)CDeiz6CYkht)1UT(i9F<}g@g^6_v@*3vlD zbA3ogvr#JSwd2hRNSGkpj@nlps9l-I6bK6Ub8`5>e{jZK(CBVfAC$WqpaVn0!!Nv^ zJd5lM{v=K+ujh4``SqF{tqAu8+1i?shW<@v`IyE#APbm(e}8X{@G>!If83-4q{{Md z`A3lV5+C%tU0Pa7dMFUJ_;Vr!xBJX@ELQJXcDO(b1PBcZ$Yl-a1y|?Qe_WJIufJ_p zO;e*gt798`?4yXwnJqEQsT~wUuSIwy~o2yRo_(cn&rS3xBH}1ScVxzi4O9zBn2kzW{ zL0c=0K5$x-y}>=D|314+P=S?WzN;RvBGBh8`!+LvC1Xl?g2uPT6AhK?14aw>Am1*2 z4;QQhkpOm=$lU0f=Z|J_DgHhe@lJQ=Z*NIJZ#oa+TmPx`7YZfc^SzzT8)#};7b2;d z1t0;r6euvj7gPk}&Q1wofu5lGme2Yr!h2zT2chA)A2>)TM*x$i>`!hma_p-qG2R8? zVq?8}H}@BlA|N1u4$Up#5=LXPK3{Y{hJT-9?_MRZ?o!dT8RaFu!%>P+eerGv6Tyl1~4cboIhP#nl=D zPRTOr^9m{FLun{y_#rqYBH5(60tEA?v+mba`QIWx;LzZ4NUv$G<#z;4J%iX>Yz^Ew z00JTj0%3@P{5yL!+=fi98;P`jp*$g69eStr5#j@rD3n)h=J3YDStY}uKm1InMv@- z@bJ3?KYdU{M3CG4`ST}=voEUv2r!~|PGOrqeVXk)+%@+8-T?$1#_<~j-#fs2W?Cj- zlN=U>z@zNI#@G{2ntBctwCqxgii%pgFGk;~si`5ISX(B1pv)=qRhM|aAD4M5TjPe4 zH@FkjEzJoo-0yd564-kyoKrb9bo^X==Yh1MwM?|Z0t0j~^yiNWtEKPt5t0Gt359Gv zAN^ui{qBXr(qwyveXjrV^74KrCjE&SI2r(!@{W7!&}}@aM#b>rD86*13uF5U+(mye z)AY8U00%|1$0GnaT3S)R(nY(uiF|l)_%^gBEkU)8kX)PZ7y0nepP0E> z95@cmHr`BcA^;G8ytTD;5)KfcMv~+!32*#bjrSmd!rh+xH9V%4lWq~s{k?lZhp-!? z5(fg*uoKH-v-qGnY=lOu%#E+y5bsi-36mvU39UXnsD-s$8jaE90?QWgJy33(7G1p; zNIyiHq09xUw$~_`s0P+X5NUNb;nAbZ3scwjsC0+&Sl&rO=ZdzH^FFQY^`V#5wcRi_ zzf%T+|097(hX4)eEw-On8381-U^>6=CGT)XnkoCn20z6Bi!5zUj5sZqVfL?sRd z{fs=4y}C~!O_m`K4PuoRLLbDPP16op7&lQ0Rs?|z)Uczs5iVG@&mhj;|7ze>W8mKa zdxfrl;S9B^um5(xn(k=O*RQ<|kFFhFA3*2(?*a{B(UjXh4c)thV=RldbP|?#a-El! zn%8tei$Nj62KcB5Hhvh&YxzNw0aW7~aeW{?Ka~rVJ!M+aGt|u#p)9@L=f1eUj=^j% z61g-9)O?Jp8E>vBwkrcV+-C!<5z8Kh zNFhFdpM;ETWO=L!z!1ZwCMbEWsPT(%3)<#jKO*C?7Llxzd_+#=&0aD? zaRN1^u6FCtbdm=5LBX3hLa6V#g!A3`9OuuUH?*Ell5(scd@9@`xC7CIWXPhvTeI;f(}#@?s!)p*68HknyVx-h%!;3P`SF~wUI>&Ors%fL& zyLr>Ado-(0fcj4Y(Os1|-R5-U8$jX7Ro_mxK)irU16v8nfxMGQy|lHpE$4>x;{%~K zhrv;p7MF^6U#k0)=k9GDF9j;f0lodpW0m60r1KT+UJ-qPyOfiwSsw3>t@xVvOB%gE z!xihEgoP!BgVs?3#SqaLHa2`%Wqdov7VypDCEuNUPY;C)_LXmBr*`8g`d@21eiL`R zQVzDp`4B`PdHk4IzCwwUjFw%|*SGAFd*HU1kbjvYk6P|`&FoI-w$+V|LD_ml75o#Ll1aIoaoo6dl{iPyU`553tcYX-HcCXYc>p@|ZBlBxl9Ao@>Y9FU zoUHy3M3%&LEY(WUfTzURo}(#4Nc8~PmIyd*2YhsoZPau6A91}xA4+pBuRx&+XFBS3*^ zCds$2RgMg_@TXFTpxqOvvsG-(NV!-;RMK9T;%}2c$IX>`7m>Twb{m=})p%k)$+!vt z#e!x~#`w;xsL_)5LS;>sjzHlC`0{$nJnh3-oO8R@WD=yh&$yR)<+?`>UU3%}-#crF z?BjGU!w|TrEWQ$zWYNrQwB)wCT@o*+PPyag@EQ}Ad6ICUyjAx?;9C5jSN<~d*~7XK zk5cOId zI)}t{O5o176PQ~+M-P|}NDtML-C7^CU7Da`rd~|hg{q35FBG7{uA3I4l@vSN5J#Tx z%H%B|k_s7XZ1+uaK+XW)ocgEjrG^rN>fQC-po4sdDoYt4mDqfK$|yI$+?-PQdVSD2 zfxKdO=L1K6@u=6CKM5v5*oqVieYTglu~SRpS#VHA1Z-#Nz=cBD-yRH%9(~^;CJG8s zarqZcxS;`bNh__ic>;N&c>Yp@y#O{T;+IjdIQS=--Hj}E61~BYcUUYIQJK(dIh5#Y zq7FSm(CaNQc(@HN=V4$5c30v1{isWvXV_UfQdH8{^3T~Ysqk6K!a?=9|5`gE6}>*cR^mR;uBIA30KG_r?c zA(pRm9z38;b&&MSr_vLq`*jTs?}P1n-;b;$??QckaPli%yLJqLq)^crU`XHtpn~U< z{`tn(;B&W0E$Z(dT%A9_#ufqgF9%$SdRqaDWk;qKlZ1;%xuDNv1K$dzY(eQX6D?prrj--Id*`{ ztcaKl3XEnY4&XYN*o9zc&^VyAkD{Z45l1#u7*MxsE(uoN0de3v%pNF$M~Zo+s;#Xp z?BTu=UgaeNo&53l&yU0$Z5sZ;W@PS043Na_yP% zRSN*P6UirKf1szQ7xGy&4=s8BUJ*enNs^v#G3w7wlY?34f`*2d@9te1w)=PP5NB|B z!~O&KHe-H_uBX7Q253qXY~cs<3>Jl9bbwXD1qCXchD@GDhJu=!TDHltUVbpCEX=t~Y)B=yH4q)l==&6%m_FNkj7iuy|4c+jCIO zuWBCClUZLLE3t1)_M`Xtq28UlMomMb3_Zz0KTTi@i2-VQ(cDA17zdJ{!6YR!L@cSr z6Hfepl+;HI3D9W_D$^r)5*zyhC}iGzG!Y`m=IUm&-suM=xD>>={AcKIB0~iYK^e(} zI}5wU=6k;?TT z+hhV$bo1)^PcYLFp+G)f$&BDS*x^=`k4u z?kY6;{CPqijl`ah9;=kp)Jo^hoy%PlA0#euh$oJ)p-aBW!x25|Jh%ogO?~;27^n&& zw8HCAxclGl<^|;CZXr&g(k9yW0Bjqp{uX!7}$qX0fam*^F1OzO55*1_BCPt#a;MPaki{)JmJh1I=m# zX~zxPSfZ&E@9bj7CXx#yhIhA9dMl4`xv@c$GVGgW>`~tSW0)DKD+5s;x@U}Xir0QZ z;T(nOo==S7uWB12!oy>>x3)$>6XjW5h__9Sf{}|_9=5boHZiKnf!&HfoSG~Ja4kG_3q$%;&feV%E$jNwWxpFdxHoGn&h z=tv^X*#r|&DrxonMgcg1Lt8}`OSVdk;sk7T@RJwkWd~Nl8SfUu|ASecKx{P1&hzKa z`)hqGzO2h!uBm;!-QXDjE}rw_W2VCBk{ zn1@>JQFAF=6JxR)ni~NX0sRD2Jz^~11XpX}$KOK^1qJT3dtEFjz)rNLL_#==zmD{+ zWN*qZ&MA)iWlaQ&*0Zq)))^v}e!gD_;M6N6d( zI!|2Im-1+l=>inkk`3lG9@#@;poU6Uk60_9)jyKpTvc0iqdjl)*@C9=2L*fDv~k)? zora<7wu3>9M3Ul{0y{md@fl1-3&Nb9d|)`q73YW% zyB-*>^FglUWe0%%9^6jBF%rgX^tOP7Z~|T81}*Agz1eEM6z>iZh6v~&8K*JF1zj0l?>=3g}*z%3vzgop=0G7D}6<8G7yu z;CFhs`x zM9hqcVGHFl`Q-?ZI!N=D(6cEP@h|#ud}wULZ?J51?5URTF-k}ch>Yswl&3Jb{i}m9 zo8u5__7TLY>qX4g*KE$Rwti_uW!EDnOmqUb>SV|31JDFzbCSq~_uaog2>KQbjEucF zT+xl&&|Vq(6w7z~#EAk78Z7SJ-G`vA(?p&FK`R*Ac*{S23~POP!=j2W!G?ie^Rbhn z6M3i8hSt}vN!o~b1b5oKj#AYY&^C=wyLDVpFgvPoBvS2|m`HJU+*E7Etsaq^N9C$f zv9W=&Z1ra}=BAl4Xi8kOq8jarQ7-vvoeiql+dph~?CuMu)J8V!Zhgz%!C&=E;6SbJ z$QH*19`%r9197zme*T#J z`ic@}ON@{)1cO{%<1!C&@GJtFM|_cce)q#QJYVgKJ$F!@-KK-o;xqR73#rD(z_0eS z6JmOx(@d{$K|GW!t#ILlHA7tYO}6L6oF6d)slJDw=Xw<+8iL2(`Lo1o`2BO^v}|<8 zC%Vc=_rDP!Zj6@X+WMgSMe;~CpGfDJA!4(00aJpa=eGeX?x6!z3?`)0 zc-3|CyXp9S*H0JYzjBF+y{Ysa%#OtT^7!8%8+ufJ(Y~eQk*i3&8qx>_$B?13nW0ho z^y7yy7r^tLrbj6BEvFctq6`k2U96B?vS6K>HE@fb%xjOne=nfffRqDU_YE> z5!ufYPn=N=N`CYuRzlM6@Y`1pY32;Bs2p)3IGPxM>2+HDu01mGjaNU+sAhkZgb(%e zAdm}H9vl`;*To~g7U-~NS9Mv&x{k;#d}!>rv|%%B_n^G09M`N$-10h%?=D(f#Mo)3RnD>Zl;FL$JY<+FgH6Eb16 zf8_}$_#9J(u)k*B8m>vw7Bo|s?2Ijot-%nJ-8b;gF|<#L1$DW4KHqoRmpX?z+XXAI zC)NJ3fWT;TeVuIx(QU1n^s<&m2?>7WqxaR-G2)Fml1pQAAB+5w)1fh{zywr(vQg#os+EuP0AR6K@<<(rb4l!XN5tbV*;lh zFpBFPt}!t&t_^J7&!LJzS_ZqQ*DpE-?kdT?=cQ#2%tRiU&5_o0c!)JfiHjeC?t`+6 zix9AsFJLm1UjBF#)cq?Seg9`x7q>fdl+QY&gsUD6SA9=N5K@E-&KN$ zPS7yYi+R}pzokv(UXDpP(Mao5p;zqK5C~!`VKq3K+9jqfl)*ttyY6@FrjTQpHG+qmi#W&`)!G<_L1%JTL!z+CP zNg&pPSMbsY+~6Pwt<1`!?HL$pmWDCyjqd85SCc*edxB=~=$zLlz_zE{9o4wM`mBp` zk~Tx`JTJH_Zj+heKCBoX7TrxT#s-&aP&whGC^5|djxHNQF2v~Vnp5djN22Hi0`N2#?oVb;x| zM=sf8zlGkfOUb}{K$#B(V_Qu_16j6iuG=(PkNg+AnyH|9gLPva2!DY>F+V{*7Xah& zN7>g`vLLxU5AOvW>pHGvuGrf_8HTD+4&51@SGBI*S`Ky_W~2rJl_=%i@@iyzA#j%k znTvwH_!3y(h8uZPJm8&{R#xtG+U2@`z+l~eU)&UojGinw>TjWMlLGpn&WuiEmw!3~ z1PO(7SL}@@OD{uvzqIU<(~R8+8`z$ogOfBgG!3kbr66G}ZT)CXbGMz4brbqUsxXIk z6ctm4KqVXh)^_0f!qx~hv!U5i|C3C22-+T#y~TVm-fZXigKF`P3K{J|-?3z7$pIbF z1D?%a#X6z0wEytosg)6Wx?&H6@&s&e>Tw>>FcUiiO%%lB3;ijO_IH152W%gN+5}Vw znNJ7ufkHv2S^**N9QPFA0 zr_jr!*+))ZfH8BdNZ|9n)BsF6_|ZKE3T9^Rqr`3&7BAW(Wq^kNyiF_Xa-BuY?lIN# zE)_$=XZ{?hWtf@2vf$eO_3O0shyO-GER!1cu`}|M(Na2Hl+JoF?$c0T-w21|ZGL`! zUx}j;)_Y-K8QiX8;8?`V>R27-;4oWoMVJxm!vCN|DyO+p86zNE&uk{OiKL%{-n8dt zK{b9}3hO*r^|s#f#-e?|?zXo(& z8;*cIE8x9t8vCCvJ^YL9RIZD*N*|Tm7`nac z0z1eL8UBrh+oaOQ=H zWOU20$gK|`uj!eX^d(}AME=N^{6C(k)%*+(nqv>#a#g~2uXa5A;4^fKEU#>P`BqbA zPNv5vbX&^fhnTM!!5tHDD$2DVDkyd^FJ)<7`OMctxu{isC~u;_p2bn>H9F-y2;{a% ztCaq+@z}G_X4jRw>I9_k|GsZrx3EZL}z>Q z4Sr)D6;xQ>lGRI#*pl}wv(ovj$BAJ4ve(4*_41Y*!!<_oC%C@`wSTojJ+WBIFKIV* z2{6_sDxOLWN7%ql+#~{a>|b+6+@#1sz3I71__bp`Wag&#s`51>WO_EWYfn|(Y-*Q} z>#cOD)Sl7!maKxOEk?tje#dEP@K38UlOyIx9#wj<(H=E+f=>tl*XAFGC`^Fq561gP z{j^GVp`~3A&*nhwdt#KQ-)^Ip#K5;V?FdcpRR zFZ#FpG#T8|n=R9nRJyPu-GLf`clsDpe_KBzgOApiY0f`fDV#dKf&Jr^^nJe)YlNJhTob&`Nui#k z=j+Q|Bz$~?DmKx3JM-@P>AxRl%l9Y2p-x!ypX+O(#~S|J6H)*+2d{E!&zY8*ewsK@ zqEai9@1==&m+wO43tMzkHwOBFyRz7A&%?e|9d)56DJZzuGMA8jeZlq3C*Ailbi5sQ zXAR;k&Lq5OpL%M9`o}VG?9j!a^Tp_4-}*!MwLJ1J%sFMI=H#gT88_cs$exh?LqUV} zMkI+lR+0gOtK}}(<~?iwpNK)cxYAqFcPePjjjBr?HTl#N!|enhE!3U$wT6(nLml&X zo2V1T_Z!3;{B|rOSW0Sp>;~uSowv3r4o_fD!6om}L|GLB2CcPjo`TXu~tUq+u5%T~@%TCT9im`%}+6LV; zCMr@S#YU8kTZ0;myg_e?BeX0k=wN8!jk7&WJS6*0pWrtxy}abgk~(Tho3}a`)b?FDhSfK;+S&egA9I+^oyO( zsP-T%OKq`CgV`Jo{}nnYn6}RUNxSaOH;aVaO%I=mQ9JxDR2VwhYM{&-7z8HACBbZW zz~&S$wED$m&1Hh`5+C6dd0vanhF0Hp=}cZZ^L7=`r*|-fB@AvD*0XNJ;K6wZqK3=& z_vCn405s6z`cUGCW8RisMLvGv(zeEIUFIf%g!fbt$5r%ipQj^*eV5W=oe2Ml5cd?`U)<3t)gD>L1+$Y+5dI3!YT zr>82ix>^qLwZOoKn1D4KAt|YRw|e(bAL@Krxrq`(s(k{qykV`UC^ z2vj0^r_y0k#JjWRUt}l%UYKXcFfdjD|C5C6ha&L%b0A*RY52QRNEok|K=B2D-19;J z3NOQ1VF#}R7X;0TS5C^Ex7;V!@ie=bDN5pY zOLODp?EQ8#XPLHc9o5lP(VC#y60==Z7V_csk}UE~EwK`#st=YR(R_3r^^-1^n~N^W z`d*a$+wyg?n8)?RZ;zA@+6=ZfP#swAUzn{j`zBGbHNXC2n|*#YsthL3ZU9a_DIhS{ zJMLAkV`!KKgD1*!=r*N8H^6~hsn(8`3Mf~gc0TQa*Z0Qao4}!x=60zeFyJ1vDlW(} z$iL@jrMM*HXLwmpF9Tvj#nIlu;latk=&~wj2Zz~Cdv0}>i}9Dp0M1@jS6A1`y(08# zMZtBcj`R)}yL|WcC&>W;{bL%MnhV{_yljCfuz_~-SLjB0FeJL}w+X{!Gx6?8S8>}X zhrl8~*HduR&dAlZz|PJtRd*&2OiLgjLtA#H)1HR;^aa@XuMmahB_Z!Da!ty0>+9>a z@J`SN0y(5WaXPlrer>uvOB0<`UJY(im9e;oyIb_JQmi!Dd3h~;Doy{sE7N1)3m4}C z4le5GnY;pFUxketVBj+lR8FJU9Q;?>R17P9i`jjK2z0Jqoy;k0nO>b4fKebr_&_1# zr1*m({7l?A+0e*n6(*Xb?W(C+&RmCT=}+5pTi^ZC6-US1tnBR0o}Nq?8p$jxGwkf_ z6wVE(8hI#nRY&I)%rRYrq}GwD6kc@mhfQ;eoSa>?&lpX}`K-LWGnk8y`bJA??3^y6 z+Q@E>-TXQ_&%t;6_!j`ftDpGtJsf}dNc(~Ta%{=xs1)3hCpl>S=W3exJB z8@9-)zl`0?yDP`Q7ZI+0y}bP(QyNIl6!HC;B7CpD7D+f;qREG>_v zbIz)NEbgV*&hisrI$wXZ%H{W$duL~6UVsJOTy7F9UvtG8g9@({nU9`&^~7%MQ*2gF z&Q$=erv9rsmC#4{)Y`hxYYYB}%^9=Z%}Nm}l)U%G7YC%d!D1go_*(9fr_0!CTB{rfWCyjgslFBiD8wZQgMvJGik zLeFgtf79iKi(+{;mmOtN+Pa+F%kLaJ&-JjHI@e!~U@J}Y;bV(5u!E2_#b907IReMy zZBKj88;^~Tubl!GdAb$Wo$;&;G3nhbN4(CC+-^o(hw4QR-BfW5N5`&{(`6@{X8{{T zX59f`dDVqab^y=u*g77)+Se+xo(Lb{mB*J?n%epUOuuTy#l^6S<(sP|%1Kz-6fv#& z8t%%H)uw=^O1H6#5lq78K{k+0I}D?SR{ikFRLs&oi-%=2y}6>`qYM&a6B2Mb4g#Fw zSb;asSfcsp?PmCSWl32p9Tn%9b zc2|0&dN~|sTvGx+UTCxbL0Pq4Fe%SSp|aB2+BGSE35|&?=N{Y8ULBCpjybvBc>cvB z`0$K0%2TEC?2!#quJm_*#hDAu(BUa*kAUyXH!(PY$cD7b$2;cM9zLW=>cPseNA@{+ zN8-Rv-=s28{7h0((zjUV*fFJH7YUdmfV|N?Gv|tLEOg$S{c@ryh1=h=)MR&KR7Z09 z_1UoiqDF%kgk!8meIp}us`%TEhM3B82kvI5$c(?oGvp6euB~}F_Lu1ZGtz-wyJ9Wb zKWmzg;q&I)KPmaj{JHJ46TUHC(j5#l-pyyfh$cy(HF3D!-qe8w>yI4?>r?O7abs@B zl+q7iQl|agu*MX`gf@b~>IBk60s;b`K7DfYeNZZe?z{G>YFsa)zx9V{`ic@E>Baq; zPU#+PQ|sk6T@L>1jpa)m`%qu@UMtV9=1e=sD#MLJl zxW2E(>ol>?yj6nGht&9#Ubh@oql2$a+}&-gX+&+wg23HJJ6@-ZZw%j5^@J~++V8St z1=M~ghZH|s}A!s!b^iUc`>+Li0)4d>u}B_WHjpT zoIg^y;C-ASdT>EJmc@7-O~L7V!*@priBY$$*IGFDt=FplCm6D^njJrd9~2uYMg96aSwdwh2;%nGn`eE| zKb)GM;q!fOD!ux|6RELz)I15>z0i}fyV1J)wOZh5KF35-%nDWt81!|>VcWj0bGL$i z$13ms_aEonZd}N^w7Zi{AyaN01y#_?_vIaza^p|UYT9w->aXgRmVM{^jK8~KA3uAR z1!`RU=F_lWuV17SLZO1rLh;S{5fIfi&obpzE(RYS^-nlv1^|ge)`G6 zZcq2x=Xb(mW zkJkgbR5Qq(g5M&EUEql9#t=~@7$qQ_mKw#9EHH`Q>2djp4=kPNCVCRiql~EoYvdytgL8{Et@4zPfy?BkV78- ztDI|VYVwMr9|#OL!zLv15WXi*WR8g5e%EjR4| zwWbsSMNy)Z7=ne+3W^dh<=R33iwb10SQ|11Y_#h$E&5=8L0|HA@}0ByIcM*)_gd@r z#z`*nrItsH-8SF4@qxNoq1ZozQsoqM_&7Uv)`E#&1I`O$Q~be0=--|2{G^Cn3+mfv zt_M?ugY{^Zz`8E0R$cFK3L}fB0+4{o|DGL){Z#RT@^&u-83Z&FqYeunqSeyWz$rK; zCT7XDV;ibMgVss^YDBn>jEj2&Q%8k`RRP?-9Vpe1;$xwph5y`D>X_E;D&_*#*Ge6GGf)OP4f!Jg{3c7ZxahJSZTAJ%;i{UxyK zy?1Td;pdk-1EeU45GPSTV7w`2gN)c5&VcHv(bAPuCz2aT(~ybBl(kg-Megy=s0}s) z(9sa>e=^>{W9)l$w{d5;b5_7F^W~i(H}22GPilC%0Ncb#Mfjnl`_viGg?>jCmD45ET{-vpx>#? zjHaaIWC3k;10+FCqfyu(x3#sUdZnB!D3+$$1QHgW$@N)`m~Ptw)?Tz<6=s?0TpC~f zVIg(>O+~4ti)BGwZLNQ45KEi+roqLM@gr*@*lb6Idb}Jd+?1Det`KSZ8EmZU9SWM@ zar%}mM}g;K-vXybQ96FEriKN1h9mRLvDVMUXRDdMcF%pgWQtKM63GAOmkz7;G<8B^k`^ajwx9 zeMqVS;P$7`1=P%>OW8P8Xe$b6i;aAB^gxYFi6lB4av;6co&8^}X3v6mG7VMAew6IeAPhMT^@f4PUh;dh+#vH5{rrmcUS4ZF zJ=qAL2-_jW$KBx=KvDYu?%3+8w*pC#z4(IsJK~gCvo&t*Ma$FdJf=5U-yRZppf#$( zu`G}Wl>8fp%$FvYw<%aDv0c2Q{c<=)hakSJB6JCYa@E1SV=cwh1sSD862q5{A@@10 z%sJ~_c}I3A+zD?UgWbb77Z(w_9>EhP_LasG-U_iRXHRS(d7#Ej)Bxl;h!>tMh6J%= ziM}~Ov{Q`j5luYK>jucy3Uz0urb-5<*Ne6nA=YHcFYnHE%<_5vC9B1-$X@LF;BseD z$}}$TuOCLXXU=sebn)~gH+b3oSRE)Of?@tuIyw}R!hcdpE4<&Ft&Yqm`8!+n zU`OA0^Op`+q>Z|D4e@g0+{zDn+bs;og6u9DQ;4kWLPza%ag9HCH%A*o$#+RvlulGs z)bU|M?St{Xms8KzB~4?hZ|?Cuq>31fZx-Cc(Wy3z);A^E+pk&pbjTnL2ui`RSEE^W z(QT$O1kL|2$>9pg$V}bKYYjPd&Kv%hjMDJIXiM6fg=N4B*)X+ArFw1d*cLMFw(ujp zE7YYyYItD?xpJ0+g{Y~iYf_oID3u@#?6pp|QR-{Gqg~=F?_2pmtvS&-3%}PwU)yyH f?)<+FkiA$GQD#wlg}O=(+YrJ2A*=@99XWpkd;5&9 literal 4917 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 TzsUpt2|#9OOQRQtmv8+KPVL#E diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak02_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak02_test_one_moving_one_stationary_intr_at_start.png index 0fc1cc008b0a8a5753374745d9f9c072d37b6e5e..a77da70847271cf91a9ec767c15851afd03a5692 100644 GIT binary patch literal 29745 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak03_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak03_test_one_moving_one_stationary_intr_at_start.png index bd02da5cb7b057df5c4e3efdbd64d92e380bef69..1cbaa9dd13e18442659f89d4e2fb4a0d48843e4b 100644 GIT binary patch literal 28603 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 CpB*az literal 6478 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 bWx7Q=`_hJY>H;`Un6gLPVAoSEn{)pIO|F@U literal 6975 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al01_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al01_test_one_moving_one_stationary_intr_later.png index 5e9bec4dcee6d69330c9cbd91b2993bee0a0ea9d..e9d1f8a93163d46038a6acec9516af9d1cf914ff 100644 GIT binary patch literal 28906 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 literal 6187 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 HA?iN>uLtr! diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al02_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al02_test_one_moving_one_stationary_intr_later.png index 4f0d439dd83d18b5f318cb48d8b05901970cfce2..2bd8066deee2b241f2f2d32cc3886278a0e5ca16 100644 GIT binary patch literal 32572 zcmdSBcQ}{-8wdKaGa|BQR%EYakL-%=4`*puwulos8S5rEVM~#O2Ms24wDdMd(J1 zjIhhvs9MK7eQwPv8_rc4tK20}FTI(rrSv0yt|N8sz^91w&YY<8gH^BeuU~B+qq+A*7ecb!C^AcMZh4 zM2vgo$`#yh$vxVdnwqKUX@A*3?CH(%^q~s- zj2jvkiFF8J6fCKu752>R?B_xV>6#*`1o_-n4O2y(u_ZmXW%TuvJ*w!$T}^v472M}y zmDU?^7)*DUhugZk6xSwdOYFwQ$OJDjqbyYWBhpwyXRW6EPsM`Ow4 zxWdm*eDU%vzxsM*HZtaQOKYLyWR_$Z>Ep(lD9CRM8w6Jg@i~4i;U!4U0vVK%gMiCfv41FO%riM*U-?Q6mwyhI+(jybND-d zsNPrFb9Xr`H8s_2(o%?eW7NL>wfE6(u<_DR3G?aUQn4m}HO)18xf)rD!CUZ< z7`$i~H4^&keSHb&C5AF>8~o7D5fC*0C^Xn;!sjJDs57XrW8~!}+F2Up-A;bDvQ~fg zw7%XqcI|AdTYBR&k+f;sGsYh4GO~_0eHw+I`O-xLzZ*0gaDq;%=3PyNmymRPiZ|B?|8LxKZPOM65G;Qd4Ek{g25yEXy z-q77$94ElYq)Gqh!Gt_E?-v+U5Zc!rTt>&hnEv$(S0#?m<)=Dj)EBeKJJqhXFvGKl zJ4?aFf@NenW3|Vd?fV<83?+`Uirc>j@;6D~QfT-xOnGtTHp2nESxU26F;W5*Ap-Y#Js3?V{`9hHa>Mxec&7K^_Ak8(JGw+}gQxdCKh;q~mzU?5 zVKs#-ebnc^f4AJ~XuI$BJwD1C-fL5hfsQlHxDib2Gc6G!4pXS71XN}v%kWLf{jVe) zFZeO+Yc>?;F>lMi5%{yCe!a^{Z-P<7^Mt`}B<=0(g;T)ryZ@cmZ!fl6FZ`}P`ti#5 z?DU1OEj2A2-3B~SmfiR#_oc#$j&|6j=k4oHgp-AB!^yezO+P<9PrmePy!zU2SoL33 z#KgnYe;zoI*MzW8HzJDW+RW;B_0N$q&fS&KkY~@HX-+P!u0{vq5Se{@er10ukjPYs zy7zL)$CFmX!OsIfz(dfUI5he1z0-uqSLRB%+966lmkK;(GVLO`=50P`+H4?e_a#nQY;xQEp0!cELn#E7yQm# z;1-KUznuSnyHb&gS+G)+QHm^VY=ZW(eD(|6=o(v>$^Enmu>%`ts@Vy!F*38VURGQ} z9^F6J<0718_%;0=#R6YQ2=HY}lOKM%)SG=ijs`v=hD)?Ai zmfyvT7ysu{95}H`Xsyl7eE)rGB=tA_C-vXI3ZFUJ-~X@AM5AXrO|hFYF=ggOS)yPb ziO{PYrqQ>^F_B5UaMd1g#QddAb5kDUnzsLkm53V+gfM5jEm&tC58U6}lsbHm^U{*j9DljLXP~`4UAlJNGqS_-?%2}Q7OzJiPlYO9=iYq7iam26;7rK35jVfce3zs(SzkW~+=sHn)QHxmn@q494| z>T7lcDsfzOGftww8gC$Tv_#@T@6U(>)oC1}~jXD=QbA0NnD ze@rs_B}%X&P3$pVU0vPK`+FE&8PYK?1udDlxCk=5ckjMi@;W=&b38eGyfqkvd+}R> z+x6?{*{Uf|+0xxJdmfz}?f`ZWc3qpW9S}><*7T()>t4HRHzxA&VPE$3QEA5+%)0%V z2&O?nv*vTOlAffC-5JF_!r^ActyP6#e}ljU57PAn&O0wE(#{bPg?#uRDCV|mV@D(I z$_3LBO)u&BN+td>rKl6jmq@BW2A}=c{X13F)mg^1o(sHp?%c`W5~d`e?ls~`(xF$u|mSamSLHEy~RCS9Ckyv;uMYwQmw9flTSTT~)AIW68h5Et9#X9-q zpIle0<4-LAJu(1SzuRJ&-H$g~ZyNCk3SKOGG|2O~3c_fnTACQ3=LX23uLqY3qko<3 zO@)cyVwhGNaA2FzJ*6C zVUHnJ(otO;#gw_JeCt+FMutgPyS#$JG~koZx1~?CXPk=bPsK*c9)-XkW)2R#d-v`s z-?(vIU0waQQyw(|u^Yiy$J@snb`Kg6% zLfeyglOB!3lr;V7%K!@$D}QE+rmTC>gY-S1$gT2=RaI3Ej*eG$ zcK{FH>v<*nLeP>B5Qo;xr);$}>r*$l%+%am&>dqBEO=UOt%>2`VfX1^iuVsXsR6Gh zRTkvub4DsMZ*Fc*{r;{0`_n&*@VTj}CsP4Gl2){IY_!I6hhxHh_B@>L=R-L%ji>Ej zzh2oZ4>$k!0=#j8t>Lh>&^bUT=eV0(QBiU2dtYC~6K)!n#qWE1>{KXz`7$K`84=BpK zIg~gwEUbjR$+qllc}Jw;D#Y+~WN;@$liNn5rCiLctic|mVb7jj2nr5nl$0EoFx!T^ z{2a)qxPJXQ-{arfW0j5=GL3f$`|f7Vw#JzE=V~AY0KNMZn!J+I>`;k0j4+_OS{$+g zzr{CF0tP8s4-XHEZ=)?OSdgYmt+qBd(fzKkC`Hp=*@^p@eB<|8=5E!mj%*dk*{D|v z5#$Tr>eOy-d)JS?c6OeB{JZ~((^+TAwc?J0=Lxm+i{+OgjtW98qEKcxPQ5Zx_IYp8 z*WPZl)B;~qQ}g}3&)EINCX>elujO#I1VlweE8RDkT*T-gwhmLl?z|pDFWFOSakC>s znn5f3R^zt>PVRCx6_V4nv(w`1{A{eOjBuFDzeK+4@$A>^m*R~G3c^&53j)}wYjp&G zx2>b28GtkAM|vhCxtD5TXGP9#R6I-drl?!x`MIxdYjriQMPRM&h$s7YMs$*i4;8HC zTJ0YFgx6Xv$>1m;)`$;u$iU$Q>syIx`JY3orthArbs0ENjDVj`)1 z)0cx;EP)zdO7;yz5;$I~9dlz!%^3Was-HYLqF^8LH8wVOUoL6=Mtc)}uGFHP&->7& zy4E)?m*XB9dnJSsz@60F zVBlKC&e|kH5|7b!P0hF#Z`XwBiJH%!KlA$>y9?Qle7wH2y|YtB>1cDCYp;sj#6;}w z!y^d^30lDi9qgOaT^0$D_uwd*14N%UR#MqN;?|wOR2JYp#$SR6=e}CCh?Lf^UcC~a z@B?7FzP&B~;K60Mf(bxF(b!dJYv*BIXs9d-^l4%Vdi#)W1Otsa}Y&va6+z^EV+mQV0Au%bk9|8!7C~%B0@T9Om)K2E>Qa6Lu^Kd zy-#7@qIROs_g^l6U7z+^1#z_tcm5iz*W}_knz)S(6V7wl=IETy<5kjTm)pNGV}+iv zyc=>2>~(7L>XWqD>kiE8wK5f=bo|wQQ^ZsR6;*C3T9`d0!uRcri&r*4G3!eCI6DpZ zZZV5Wk234WQNEnak@&t^2gyE$7XFp3pVINYRVs7}F_ITqeKHV;z2^3~?H$+2{lgRC z6T3ShsjIfUSJ+hIg6g(A(ccH~7<~$gpx{mRwHtcR2r+3L>i20l77MPvzP>{C6SS={ z3`#d{gjdzVzOm}hB_?E$idONKJn$N?2A8;Zvvl)=v$B|7#L`+A zL?CsDh=>dcvE5CKP0FzBT@7cO@|(eziLX_PmW}^i_^l+Td9BaH_XKMyV{+~HGp)Nv zU*Cw$!?u8NT|8tQs=;|5kT-G`RBT)u-q3)sTCa5Sb>XJ&n_t;BhRkE8XJe#!wx}8) zk4?iCT;JKzkz|v3d3KeW06QooB+G4W!okI*fLt_Thrm=`9uvxP93>^Cl!fi~xA!CW zOXsRg(M)G634f0Cm$#;?<$Q)>n)`4x{pcN+DA|C|<_+?vg;yl-4t;38lo$W7L;({O zA?daI;;33|PWy+T9~2?y&YurvQ5j&$@f!8Oe(%nO!usHS+i1#OdHkkV z?^cy|DxjzSJRSUBzkXTx^gMbDb$M)ZGM>G?{p*EJZ2|j04aEut90%qtyV$)qDyZKc zpQe6_*WyX0zbS=t`gX-xM$!BB9fjShWcgofM}YktFN8W2ymWdel1+r$E5#*5eIEAN z%Zl?4uaY29szI7rUGTK>%`k6p&#o{K_+ zQncx5*y8(x;|B?uT2GZvym{ergy@W=;khw4)Wz273V&zqW$pBs59|FrZ>M*-JjP^+ zUUD_|aP(uh+X;2ZXSS}HVV}lxPns!YZbwd}2i-FWk$oDus4tb{nk&q#={tF|zeb@I z{TYXZG+QjU)m4(2Yin32OtrIH^H$BT29$>?wT0>TyuI@qdzyl4uUKVKer*q9-*VkOkY8B? zdsHTq84p8gTlfz9)(9Fp~<3c&Y|IZbBYO=?mR}DRC>dQNt za65_%74?8E&t>(78dbX{h}vh_G{0F_(R=Jf_Jcq#&~fFY}URJ$=5arF2(9N zIXh3Ut`@mchHG)IeTo^>d6Ke6Qc{mYK)o)r-SVKQOq7n$-6%-U-aK2F`n2F(9O`d z%{pf**MCY5`4d4n=8LCZMN_5yoYqQA(O0yxry$f&3U?g7lwwh7Vmp!YXHjvVZ@qJ= zUBLKZcNcT163``Wc2tj3@zfqdl;Ymu=VOJK+J3|nqWFDkAj3FVLwKf)uvo_|NM4%? zIElNBjj|mkRArlXyTuRkYzF0aS2z+obeWjafWL6-R;pU2+)w$jM2X_xP4zDcuzm)+4{}Y@L2!s>0#s+P}qERhlx{C}abIuI<&}!XA3wa3$f>d8SgrKfBg9 z_)KR#Mg!TkZ*L~e#7Lhu0Lj4dxHgXE-gG?v>sX-|pWHa^x4obiDbuWwmA8OsRPZ2~ zNBQH!Ko%7Qzi;WPf61T!{rDPOV*k}34kX|{ zrtC&`8vfcPmlT_J>df7WKdjLos>cKrm-Ey@KzG66ksex+Rj6>|)j0CnU!SgYU7-dx zs&g}u1$Qf80cL-Fx31#e^CbP0?ilH-_VHSn1&J!P!>wl$rLC2uGcf%-HGf_I419 zO5VKWhof6uKg&>Sbe=?ObWd)Vtc3q(7JUdhS|TW3Rs`tBJT&5?OT~lGJl~#V4gyl% z0^P1WB{?>4^O&47KbsTb^GbErzoCmBi5y`^B>1QNisK^krJg(1FaWf(!@+v(sM$2T zHJLb;nh$GqlorerM4lOY?}&An{)Ff6Ja6971vo_0iU!Qh-7ou$Le-4#*uv6eE8T+h zmuz`~F*Dp8SP4N%F71yYPXXEgA>}x8)waa`?$_0cTJa*2db?{Lx0eJ~GO7X@&3%dw zgs-6gox*=;LCqUKKdGZ+_Fp(8FcY^zo!U47a`R?ZlG*QxckVe$;`@C2a_P7% zd6yE8{}7BBqRvk}IN4o|xXcDy{!U^#-#zrF=V>0edECZL4X|KrfB!Q{!QFCFJVA;N z4iALUzceHJ6z82HK6|WRPA)z3KS?K%Ly?n{!z?N~%(LZ_wMC;h;U-G1#QkNI*#3?+ zG5debBhj9(-pYlbtse&VjACN?D}3QQo;icaDX#Gnh%6<(dB`X;`j1bOj;;zd;8yx_6-BwAeH?IFSdTS#lruBD@?(Bz)8TT~z-#E1x>-&yw>T#<0_(%cq8X3=ad*uE}rcV(Z zS=iH8O0Fn}sR9Ldu(fCo6qwamB|mCvdH4gRuni^fGALjkKU(#o1Fy#WSR7=mrz|Su zCT9oTz6IesAq+k;N4qQ2^Yd8Ou3h_RJ4(JZSX`m^;77sT{k{4#+rgMIkQiiu?HReJ zw=&;q@&&L{$>!XRTLc;BvJ9(^_D{{v%e*#MjAOAG`S>+&r^v911j=&%kPsXwqAyTV zhJrkqV&dlH)C5H9dYAZ`wl0S}%AM#E@i2d}QcbuwHyay{iO&HmDA4A1z>kq4H5||; z2f1aLrr0O#&Qn6lCEfkMSG75lMJ|mZqbwxj- z9Qcmwt(q1WcATT`zf3|D9ck=r(86J}mMobOAL;aJHPVSXVM3mEf42lsMjrT~n?`m( z-RElM5JFY{-hIOi#AByL?skFQwaFN$*fYKMR>_MWFAos|msaALcH^bcLlSZxL%p{# zTl{F|@9lcT3PfwMiaCM5TY!&4@ggoca%D7wmxh{cyoiXz{kgjwN4tSvPthf zI-kQ|IV4G5Cp&|^MMmQNMMgBRk=}bWJ;XdV$^DHR|2Z99v`&WPr z$=ml24yHlw2BFdQKV7jSzyK_l zFYA|0lpUQ!4>=xG5CcFgo133+ z92h9;SknFWMkU_icz?s%F*U~1h7^jqtcsYYfE-pD%38?%S?LyA=pKEr>=r%~zjO(O zL|;%43VBc`Cnv-gF9vpW+_D)i#mZ8O`SMyWgezPIu0J<7r}yvYA&I4Pc5>s`y$Xx_ zCMSpDK;O`iHXtw%q3t@7Elz}(0Bi;r7b`hAmFleZSqUKy2^0z#offcGL<0rhlZmQ% zyhJ`WHnv;}t`M=uzrjynw8F>H*(S^k)m!dL)+IS48oeIS+k3VY7hUEB+$=7fAUR`W z`qZ?v_8K2HHnuItt^L`US>XEg>Yj*#!h^ph0J9Yk6BDE3crl^*v`G2_@kuv>!C3=? zK?Hp)^@R(5m6es(SK#m}sjFX5jG>Q$z?$@^8m6|#N(f36uE8VKTb75bk5|V;F)=Z< zt!m4GmXgS4urOOw{7B`$(_PSt6sDDFv!;C11)jdJNlrk%PzSG0et3PRcFXM3JbExN zSUOitPPc9)mRU3Y;`*?bi|^O z9$NS3#(KPLYg4B3qh(;=Z7=1@5PN)Mwf|lG@~>Z4sw*qoxb;6iqu|oJG+FC4Xl8(# z0|N>fO?$^n!FeTm4|!Kd$Jj>$d8|0t*x!I?FV$NBWvVnQE9=S5?}5@a%wSeFHV|^Y zT8G>dOfkFmb)-t)V~&W~qE^;qVQ<{GU}d7#z;3j>(D1_p)#1)gRUcrr=YSKtE1||J zC1s3#Nl8(Wyn3Rfb{8p));71DH5NTCu(?2>bS&3MB02I=LP>b*d4WR z2hG%pRl$lTU$-!h?RL6hVa(QAw>R&jMeF%#gOGNyK(!w4mG5lHWc5| zJpwA=S#3?t91K&3ePS`)OD$d6*C+Ug2CatlpmL%IuAYpA$EF0C>PMx?7wl{C_yUbd^`-oGiZDW)eDh9Rcu0MP3?YI&h9Su2&kMh)G8RlmnL|pE4iF%K%2SSg26tty+o&>yll_V!;dkuY` z@CqXvNCRf0oLL!A_^vl!ye*Sx;Y_F_nNzwQ&(-ce6UO#xz?!kWRMq)#r-wYK5{_=omdE5e^x)9QNTCWihKTV?SyffR z#pPoa(D8KRpB^Jhbr8U3CJ33lHS6fQ1$zF(%!;Jnu7F~cf2Ww|`4Ld$!4M}#Rn=-e zcbW$B??AdUx7!2X9e^;7w;6~+4Yq_SsJjO)vpqU|2hK}y5k7^fT+tlP{`6Zf{~G<) zS{PhyMy-p^*$XZ+HUBFZ^n(Y$9R5loXoN%I%OAhOiK7X-pg?9K%m8U(HTb zQ-p)na^wITR;hxY?rz_MO6NtwBI9anJ2zLSFLFeZL6IE zzfB&Ml$6w{H}*EHccg>xy5PDdHnG0DTmDeZGmU-&cY}4oWq+a zs#j)c+FyG*KN9Zx`WXZl*HZ#Xapx?gTZJnTX_wZ|XHxUA+bKQwdv2+Fm z{r1j?^6e+F*P?1GZC@sq45qHelx2bz#pmSW!bPg3)A{br?veR(7Th?NVWFHZ zqN7)!McUn;;NFyy!Ic4m-o>l@6SXs%ed2cT7 zCTnS|_{Z!g9_aO1yhyEDB`mE__#RGpL!uI-rE$W zwBR~+5)|0HFEPqXNym`K-0@OcBgXlU%?uSfkTk@_p>r;)^A(v=DEo98WG$_5V z@_KQQSjX}Y3p_tRpHO!}Cl7RJyu0UA)5OSN4M11Y5hrC*SSR6&C6o7deXj2TXaqyt zby?kF)bGWKq{rqQljZ5V)tTAZ*woYlSIWE#8zO9oQK8aJ7c&-;NhSmv>yXzXSGRU| zcXchQ{VGo&Nc+m=58&+`Nm}=_qmB)k9l?B-|1x{D%58*>7~uGu?Chq|(dss~{yTT9 z7fv?Yc{xATdI4VuxLOf_6wr$59&SH-&;YQK@Yo~s%8HP<&#m^l`q9 z1yqqa6!Cv&#-Q9L40w3Fq&=kG1~U(SQblg7C{Xvr!zECTl*wJ_f}+>~;AAAtHMJFW zQr30>5nlALATZ?(7lKxv4{R5U3W<|qC;;DC@Dy8z$i4w<`~9nZ3^=`~%F1z=Zf%@y@N-DXX?d8@Vm8r`xcOs!v>b+>FMd$t|Hn| zW%iTwD2L5C6@=!3Ng_faGQ4)Q{9OzjLQK^1Se4eia_I9$*-L*IF1E{;1?;ijW@j@2 zNcuxm?*ZXo0tTMxO&_S?z&d)xa01E3=+C~%g4Ga!I@Ga&*yo#oV*X2OU9%gbgj%X; z{^ToLhAC{2rg?7IFEu!zSiOjdh!|l!w+Q+sxf4ev98JTzCoi=cWBJ^%;h%p%N&nuW zoxJSxg>T4=&L^4V0kOnmSn2m@u;?8fcB~nEuHf<}yD7lGg~Cf$aj0MklXy)OJv~1; zco5M`P{KFlf7cHo;lbGWwm`20Y&`dxFp)U`lNt&o7ec5bN@9U*8x#u4!vtnVO>ADY z_yKu(OsDB4ESPV=^X3pB|E@FQB!V;ubFkHUjURk$)0^ZwB5a5Q5{mf+NUbmlNazHY z(BDb8ogqaBh=iPH?fCe~{rmUN{oNRUh*5yj>cG)a5@0h%_*XeE&VZflpJfMyD&6l@rz<&jlZ6f{ zcy^>T3JPNX!x96PDg`QdQ2Wt`ZmG}v8?(Xf2K}?CNEIC_fwvD{0eEz{qa5VkzmM(< zgaG*R-Z*%4r(7dq@ZOI7JCZ*H+N94BciqXZ0kXmccRwJO9SBQ?;A-MAse{8VA3hD9 z%~FG_*8RvFHMg|jic;@__58YxO~J^$3s;{0<8eJbJ%t+s!xT3&Dg=@8Y^T^4(aK@l zfj2S>()-_S2VrWyL8IZ#b2vcQAld*4r!G!<4^ddbuIsw?R{tpx10iaEA;n%hI!Kv{ z>)@-kXYB;2LED~^nVFfu&#R@1_=DYv^Ur+z*#S;-%F~-&U%$$NP3G^z@xnB}P@|4; z-PB98c=P5BP`xm>1aT}^{`^#(*B%eT9T`plrPKtL{(sFP)b2DeS8yhj`b8b>$3F#w zyQ1v#B~1e8C5Ro@bmkDzU0ozZ(#7c3(K)=gY2osF3+!0@h4(g&ru~YH;d5V^OJ` zT!UH_eQJ?9Os;@AjUyN|3L;vOh8nW|H!2q;wtM9Mo(JiZZ7t|0k*}wIc;TkRPAh z+i$KokedI;gx0)`Gtw zTN@(GpU?(O=HDy>nf#wD^M%G9b-`Y33^*rz(Zjp&VUcq|-(++8?t-fqY!(1{n`_9n zfd!a_ji&nqNlnlVW82)?il4Lx#@j&ft^N}V5P4VLTRTACqaLiV|0thVACdbU%u~RT zNCgOIY@9xFFZX)$pD~3lEB{SX2aDi1H3N!ZAtOqWdGS%<{k^rVf&wmJu3C>jupd47 z8pk?RZkzJYX(1kt^2fk2YYf0z$S5|f3IHAAg>SlqhX9asxr$Z;KTeLG43}CARXOJz zSZeH6fw3KUpnk$YWq#lRb)6j?-UCGso)=6kEPi{MLpWU^N!y)PDaFt)_)daL0O0o* zU}$aWaW1L(PS$sWss;TwSnwk)dsWE@?q6PBww?r2*1Skg)6lHEuEXQUpi=0tC%8eq z%m;i9#KM}r2`{UGyaWXT$f~mSJ}0DMEgw67ubz6JLS>k;hO1?skv|{7Tj$qn)eJ78 z0YU{wCfY@9%0F>C9bZI3BGqH`1z1cMx-((`v(P|!akcLB@DY%IOwi;6HHnsu>xJ0E zqY3XiXcW1Hh=3+-Gn>;FA5-s%>VI6tpOH&I0a#T;^C?B!pK|w&qyjGdku$Sdm zP|rR3p@`yR>k8MQcY=Hz3qoAoDKeDR)_%^R)r31Rxo?@V2J}{j@2MyR*4M7e;oktY zq@<+qo!BysII5jJyMH%vfH0sxAubLbk}j>7%Q;BKypIq52SVe?TQS_fiy${3;yU-T zb#5wRyf4t1p6R~DA#!p5K|v=kPKC`d3AihjRa7*Nscf6J_q^dT9f3(iqCX<{iPN?q zr2!POKl^fG)KC846imZ=NL#~|L$HiNVKd|k@|4#jyFy+3C`B!sqmwPcw!skl z?%g}`q#oF3z4>=|k%rKm+ZkU1u<#Mr`W8dkkux3mkPQ~DD?6~{F(yQ14*0a zt%OgYr!#ma8R9gw$VEWWPv+SP0R(y}o7bm5bBBw>1J;}Y{x$gUJPKJR#O=$%g1KiR z;`sP+3lKUmS>g3(Jcbgt(G7kQ-H}HxBs@x67$jaz#eiEnWF7tu z8VT}xyePQ!g8(H0W`;fv;98q%Jhu4k#wxG-=7Q@aj`ikyV8V`})Cr!Tp{0$4*bkjw z9G=VX4vvH@yJ*MiylDV?6$*^;yFZ0`t|;wP-Pw&2 zhWY~NGGJMSD#S%a8%IZJ;9H=}xt?pmCWc*$EI0p4r^l|Yik-<<9U%e3utu3&VL5@L z{A|j1Nm7yynnhvb$pFTOa~KMe2hyX8a9DPBMGDK=vEQJ30qUvJHkCvR_$j$Wi?JGy z59-nbV0HxU2>wantZ3Y;`~#dRFp(-*TU)<2gmXs(!4bR*TaU6+A&)|%LpbDSM6a3q z4b2fq!-llkH}3i#3X%;4Y8^<^Q5SKAcdI8xv@mu!re@Hr zj96_DWlPw0B$qC+6Zm^z21vT4jtU%3xPdgF#o~hAZ2pJeS!|%U6K3*#9`LcJ&n~Qd zZtCqNhNxBS>e1SQ_W3Cq$h1l^=ovoQ!QHtE?3Hw5o7oOoT(XJ&K@0e{#>Z$fpcKZ% z#o5%QWoi$e@&=v!d|CKsADiiABf#Bn6fBzp45E|6gr7~&d!!mQb) zo*H^^X?<+aPszLeTGi2XnwH7z1_ky^`lz$bWmeXfnNvDeor+T)POS-W+9Tbrh$R5@ z$Co(1I(MYcjs;y;$FA7;MkGSpBI$Rig<@a63DE^qj+y2vAYz2eos zJ#zU^CQ3>go-xWS{b(pLZ^+ZZ3ZCRFMs;=Vaqa(Y%%ZX7m`%Lty>8ck zUZo6!@!D@}tB<)l_@SXFdJjzZO_fn{e@OV`Sw$)yNV5S1r45+uS5Qof*e>OnuxjP( zMVA%-%L|~^(sx_B5UJvzHBY;Rp9GJ3lQ%(qKcT5T|J6C05z=#n z*lKBcV=q(>cUKX+gn!k2o!cMXd()|TRpL6+ z6EhMMu_01y$pvwKeks_{cN+r@4a@SZ?hvoiotRRboNs(B?LU2ZEk!w%HIkD4wO(kx zX90r#yZl&FvPChNEAi|esR zDx`zlCeuOzL6gDq_xy4Jd_)8Vthvu5P^S*tKQ*94t83dyOsojOfe3;X6ARtkrlu+u zj!sSiS{}t(cb*jE(NE^13%vRTI$KATwEq zWaa`*;sLxG=x{!7i`)QZ{PAYAtG?iqCB(zy==WKE!4>lKo4}>^)6>!#pIWXZ7lmT5 zPu<17#31Ih_D0Jr#7iibFg8TWW z~Jc<=fpCl-oZ5qA^^&?gdPR!#S9v(<|zxRvKph>jUrNDwGXG# z(zDwMH1{5>eSVALWTA%v@P>g`Ko5~`Rp}}KPnMTvds!1h`fiwZ;)@sOq^0XglET8n zo7^V7Lm-JWi+!3(ukK3o55k;+^iBU;;)#g*_m7E?@sRfmKyzX^bSmDhSy)^QfsQ}C zMKccc(Q>To*YW82jEE7CEp>Lhh1aT34oCL<@VTgSWTrIW<8TvbIdL8JOJdIy@~3 zTVHnoHUARemHN}e{3zy+QHb~eMVt6hN>HOl!~Lt#=tYLiijjU??Fco4S4$4>S^z7- z)UN~R;#g22PZ<^)tbOkaPy zNcS(d!r951$46V5pzZBm2e*tEZUes$miXC@oR2ox+6BNn6$Dc}4LeGK+!vbVzWDk1 zF`01MPuSTt#7LvV?F>tKy1Ac1`ImRX_F4DDcJ15bq}@>2BZ>!IsbTPLl34(F!r?u_ z`W1FjIP~s*5QY9UVghdibW6c@4X9QQr^g;!%vTBNF~wX&LMTiKu6HJTzjs~HK0e+$ z@3P{F@$lgl-9j&@*^usC#3fK!T@6YtO{L>3Hn_^U6UCk8&LQ2Kb7CBE74Ob1_v8K? zBzj+d8Ny(N`-9hU$XXR;dWegOF@eb%I(k0?PUH|38+{4(Y|p(_TZr?g zBV|w0a~Crpz%Tz!1xi`g^ANjcThm)&UB(-l@)+Q4CVch0jErc&!9fdMOOe<7w*sBbsFaK1 z@RM6!CFp~o#Y{sH%z5u5cn}aHk|VbS;KeAP0XI$m{%!q1LRA5nHmsPUut=`aBOq46 zzGV5KvP~GQ68>P`e+{KPXc;X~KS31MM%)^TickNOsSJgC)4Q{Kt$F~;-S}#d=s`WW!lj4R@&I}p+vd;?WP8QnY-9?!GE>(T%hc#W)Ua}GYajK&&`tF71S6R`O}Hx zVFzxnnW*n4UIrcm%1p8mI}e=)zIRv?1}BSvxncYCcN+)N3%k(Ri3=V@u0qB(?IgqaW z1SHv0mgC_q3Q$=CVHOFLYLoUmd zZGd+~Kqu{=cj6SkA-tmjIvu#X8vbrFFz@`Knswn;Sltcy1YGW82thxxXInF90nupbu&G*_?h$M^IEycFAAzEZhNL!x;VPujrQ5e*v5r%2Wt{IQM} zec+uh@~~GDh@v^tA|mh+rx`#N*mD=W!hbuEao;Ts0#;HTuBpRxm&bk8s5KfZ=~`ME z{_26aC+W|=kl@La)HMG>1OJIyc+(JGSM&rYP?A@!{E$3)wwwgL?%+-hpQ!bkg^nej zZHXIK=|tAgR>r+jZ|$7ntPhF`RzE5m9EyrE^!ZwJb16}I@`efzW9-fQa?f+sZ?H4Q z)?K;5Vx%me+e~ie99D-LVH7)Bq@eeRx4>f2$;bCe^49_*S69o0j*i8hClV4r(qD=$ zZf%OTkHVJ&n+BkbckHlZTj6x)e3ihf1a7!x;fIjv{0;uxEG@Q;)X~EovsZE{!gWUb zMw}I#m{@4-iD8^sMxR0r7K9OB{psnEeFg2F=UCdPK~;Ty;Cq{40SHXp%C~Q~78zBK zIni1cf+*v)yL`_#UTA1`PAIT(YF&pM+Nn!QN(ig2suEaPjcAiXyfE{OkD_VWvaK`R zA0|y29f0^^Uq{@nAhj7vc?kmrW%_*bLbilN>?n;#c70$^o(?A$m{LGvk;yFl{FoHd z26WLuVyEUpeSKISvbp0aV#5320~KiL!NWFB2RN|#h3vSpg~CEF+^js=jL`e~nE_8a zh10oO%kEIR6=Wyt9Igytlcrq&nJ%J-E-7 zVLKu7aj}v&R8>kcsQ2#t7pSUmJv=gIs@Jydh^w@Kc7oSaM8Zo1vNYe`XlrX*cc%gV zG6ejZle4X?-|_KfoRSFwWw^*4$@1>Wy|TRhO8=^9J2_|FSslu4l6x>Fs?k&i*cpk5 zNi;N>C&xna3bu{rF=3WGk}Abxo_)pj7<}+@41{>dHL4b_+i?g%bVkT35a)y{$@xS( zGX~Mi_54_G`l-bGogB5~_79ri=zr{~wr~m$3-iyWa#*XS(yKGvj#A_N92@eY^8tdT z!KmE|q=rN}sVOi4Xec<=TWuSm+m{F55;)=d(qh?^piI26`iqISe_x*)SarEa%*GZW{pk3z$D1T(3^G1-0l&tFy8L66{0Qy+~Be{K?g4aTep%; zeEIS#>o`SYb$QxGl+ zm8G#Ak%wOE87AetH)Xn8;Zp^qKk|Nu+`Mq8MDGE?ftYK@JUhUNcNTnpmv zx%`3OKL$7ur#5h}ZMH{jo5EZu6^;jj?;T!O&baNr*L!UCm4v^T!6O3}90LWs2^NZv z((hoaC842}fghp%fjOa5<41gZe7Ri4>H~`sFsiw5p6`yT>5wwS2_cKX!IxeSez) z{^Mpp$dGcfB3T7Yd~cPrB_wVf-Fz}|QCGIdXn;{&yHI~1-^nZB+U_+EI44fYE5eby zT=aGVVVsKgwOF*0crHuW1$t=Bt>X2(IyzwHTsc(q6qR(o2KKq36>N<4Vau5trjvD< z=Ug7EHk|I#=jF|S2pX8l{>RnzkQ(6A?00i8#P_{D+9I16nw+DWIO7%Zpo{-Hw?05a zMvk8G1ik+q1_3pu&?D^SVdkR4gtz+`@)MAUydK-R^$5Dbdk>)HEW*3f6t&QaK|uS}#JS=YnZ4BejWR=Dv~ z61=!(Pk&ubuH^BO?)LI%Ok*J6s&f3wk_( z+jXwLB7J_t;_B*4y=mG5OE<};c|G3QSsUFY)1y*ZOO)sS@@rTB8G7RefdpB~M1Lry zEV>PU&ng^w4NaTrM;VdPw<+C~4g?1cnh6~pE>NH@I+Ueo_I~R6_=FB1)MU2eO~GhX z{_@j@4$;Ylf<095$$|*^zD@VNNox4Bo*uAQ<<(X};#(E6}F+IZP_zS?a zy%1CUh-PHC2S(9M%mX+F>?p0H{4vdSFsdYP6jP+bg z7T73vjIjYueHCF_v#lgp(fqyzvI=|yTfVM&jm{q(S7v-XBr-}|F=Ape*sF`(v6(|X zj1|cy*T&VSi*jbe-=e8~VW{PqOn`xIP_%6DU;lnpx{+m8V5Vj+=t4xY8pURQSuXOy=xf`R7b`e|x5GNDx{Oz~=D z@pOc(A&hBWxY^{0WI|n4HK=Z27boS5i@0DXtEidT%gyRPKBaF#T;!_QfwphF&2`b|l#E^oKZ8%vNrr$=jiv*tuBM)A2sL^Zt0s!TE0>NI^JI@acd zlPP&DR(5HcZkgJui@RU6-UPh&mAuYJW+q)fgK+1Wp8=x%7VTh`>k_;~sRwYQI@d*Q zObE)44Vw$k_N^iST7nr0^CS?r(~R@d7xJKKK?S#N z`YgTrkZ$>8O8N@L#UgLfu`B$h^==dDA<0C~F-nD^Oz;B;?>w~8I2~$~gB?;sk7+FQg#>5^rj*C` zPqk+UW2DBY%+v<3WZaCQy&!xvVq-&da&oM@!o#D$5f|G7)@wIPdkz_CMa!^*@4gjK zg}q8M{vwB(ZjwWc$@@JbE@jUX<81O&wHJAdHwZjTU0m_eg)@y~zNWP``Ah8X!#sg? zid$EdN(l8&oWWTPx~>|k{FH({e;pkGqWAIXnRTezk3x>}0Wcv7=7L{)Ls*OEQfGfQ zX!d%JrRkEM@)bc4(gjR^6t9eTIN2brl(HZGdyAei{_@yR;KL6XE)l+2G5HUwPg(&%2`Sazn9 zGqh0uNach%eSTF?fQ0KvoItI~i&XE*z;4y#{8;SNM)s zgVl@38HL~LMJWmiJas>c2`DV`{-0Z0-jij-f&OZHQh$R?VGo`v30UWo<#o@ zB!Kw_3f++<(3hRwbURf1gXNV=+`>X(Giwis6ohP~R#h&L3y03{Q=J$mD4=zgbQtYy7%WWg_CIWfLGQHFQleIha*C- zSaaee`8b~%WGwjU>l3!5405dP$2XSJs`^c9sj*t3*FLwZJMqTnzW8gHg@q-@IFswa z46j-+jC!bb=jF?6Wm>8H&V~JB>Uv_nYJDrxlee7O$1-_ETRM8=lhSF|cC-2uA<5`6 zmOoS~Nq8c+U@ITHX6;(m?yj?s6eFHEHl-7r5x803hc}35J@rS0E6{r*951ge=%wo| z2l>1ljyTSV&Dy#=^K4A0JY--OcpcVEbmqJ8CP%fh4;!_f_&ty6ty5>4(CPl}P-oK< zNimGf8TNxoEm9LYl(d$4#+z=fM9?zf6C8Gio!`B3{F?Za1A@Dj+Y4MHw~a|9G> zBj&6T7RDj>W^bH5f*zXIQM+w868uK?5mF@5P_&+Y1tJ&N`ouciXUiUh@bD0jtM^os zq3+3(mMW>K4mn1WL{Wg)pS=Y*R!=&gXBh4T3+wPFc>er?YPABW z7r_rrOaGQLiYqdFzh_46b?wz3^n>G(HsV`b+}y+`UD_F zXhdu8r7(*E{7|zIN-VIV_W$~j3u7?U3Wl|gU8v4^cz93~Rh879lS?KX`240N(XFxT z5&|}k+Ef@EXHpPuZZm{;IEr2(!OW_@PqUIw5U-e=sfumxKH``#5)IzPFa#BPp8`+u zu!D&@m7$d~{P@x(*4y@upknIjtAVOj=B5t{C=1Ex@&4G0p9)t(_gHw*LUp#+KA|dWpK%_t1 z?tIz$Q{q`0_^e)$r0&%hbM zPTwpm+t?#Ki3^lD=Cv)Zgt(kUn%0663;w@?cd&%B(RIjGaX-vEL_EPYz^%qL z*bFk7q-4x!@rESLHxfbpw$cJ2O2Ha!<_&+wZgb{_QQwSbyMAKf`K zI7eW7v;Xco7RQ)N>jrIBH~$n;T)4^dNS#HY<1dTU-u%MkL@m*E(<2?BAeUG)iCWZp zWDe)cn@6`>O3$j{2b}Uo4rcLPKKW~v{*IBwiWRH**z)Wo(kc|$zJx_<6fRWf^DEUY zY&q?a&n7lK*#1B^BK7wbhgvTq_(invS=4xJv!6dMitM=g@rEEzm&Hl#`t5)5h^<)N z=_IaxQ?5JwM38Y_dHRaSIz9ytkDPtvK%ZUC@x$V$JP*6rh~iRGZfrHn<|BRlIKIB1 zLkzGzU&X=|03pm`4=Ad*M)<}D3vmYJh=l*VQbAJU+nnoTuNAlKuaq0KkIM5}JeSI@ zu~8O>OC*oAn(j~O z=1~I=jfW?t&o!A@ndt7cLE2MN`fPQC=Bpc%3^!X@uF=kr#n4jDt8I&S2dWcQW@hrF zsiw3WmsQhNYP{gf(I)Sbc26~0)7PtJ`C+r=k8`T`_I#=eb=V+nw^I6|xOBjNY3n~b zcZ!HiY()D1xK-UQ!tQI**acTV@OS;qa+jr<2@34znYHKJkZASHD2K8b_%%{%;w>Xa zl(|*rV)|^|ao37Om4RKW2JFc9*f>?CA|fKLKzQ(1N{Y{~7Bn^KFs0Y@U#R}drXeAz z#c)JFSwKZ-_NP<#CzD|NME0zyFAo)-8D|o)^fYZD_<;L&*94~+Z=H*6xqM%`DEqE* zOECk6Tm~Y8pVDryCp8lcBM=FDb9VJ3L;mp0=BVCNqcyN=695HUe^T764oS<0C#Saq zT~yWOA!td4#rBMst^!KFxhBj*%Q)9jI~p2-mahv+(WHD?uSX&Y6%aE5)V9pNlU4Qo zc~M0tF!hU10=@{&*e$TPJb3V6ntAblgaDXkHfT4TKi%MyrqE{fzKYg}Dl077xEnfB*3ces4(6tv^%qHsI z!8)h5T!$Dw-V_J*N2y9v_ft3R>wVr)_-E_+PxzT9(Y1EPvAwz@)n*JI^EfnDK#tXy zm~ zkD7W$xuH=6lZ$5_noDUCcpyHyNM*~3DFtw~jQnnt7$}~)Ek?;i(aX`jcrtEbC-*?4 zgu*yqj-keh6Gye~E}ukt(tq+7OAduny-JgeRkV5Q)<-RakK)#|4?Ptmucm&zCB)tt zC}>n{%yWs2gLI9%@Ye;MXGW4hL?3uO>Ssh0zMN#F!ZIMu=$Qz)WX=xmq*ky7JG=j? z^Sz9wjNpClFi6;DU?6+Y^^?33;?zWmn84X>PE*&ekK&Z+rU#=QB>Ftk6kR9?q$q4u}xf zH|@L%$K0N)f@D>YscUA2Z-($zq>G@}S>+3e(b^_Ba3QFa*^uX;r&AF>D6gNccM$Hg zAb8$HH&cKRwsz?}-El52geK~2quQ3glNr$ImauM(4@~o=KEga26regQ6XZdJA0v45 zZ%Ule*(XdGKzzW*-@ng;zDP^|{LYMS%kH^B>`mr8{pXabDWO;eRP9T>Rh|5DvS@F< z#JUQz6ba@+@@%Z^QN?+$ot>VJq}|IZrH^z{AyQ-7`CEq5+1yH>H* z{rGX!VqeunWqKl|V5TKKJsFr&LEoqFLN|V|1c;J)K~jScJBLbGT%coCX>lDnF4em zW2Wnm#u#MAr0xhwo%)vI@Z^avHAExhi%$szEyN%VV{h-51`iLhXJYxcNn{r#pS8Dd z??Rv>KRef!bg);^yFX$g5mAnLlRfDHYQhK*93G#Mj66lLLvmycPe|I}px<2ogFL9K zB4&LJ3?eyHYpScon_W#YAVfP>$)u4?Q{y2i`8gVEggD(sT9^yIPSe9Lk%;<*-xR4v za?ahV^)oP3Agladsqc2OopE0`$nwJ&DKBAUOE^BCqKLxMgQ%iWN78PA(i}!K3}*|b z>lhpIvpYA79n%_j9ZT|_{!Z-*y1EKbZcwqGnfprZ#yio`U-fB9ui|NDt_dcYa2cc9 zC$dZqhO!(=(T(}fi(pYN7F69PXx<<`wat4l-pkaDfy29g+kE|D%gxf>IZ?apUa?wE z*meVMB6kEeTkw}|A3c>Y$*^Wg@YVP+b%|ZIt0blCwiNNa`YX_6e89@4W;NDqK`-*5 zzmHe-FA`hgHTtRWV&4kBP@^5VT6c|9yae<5bz4}Q#SPp_>1J%(tje=|Dc5zAKMTFs z!Zxs&6|xq3?xRXU*a!S#?g-g%;thk3^FwK=*e||aON1zlskdWq7zuR7J8id9JZCNie!$;}7-yR+nOFPa*AefzdSG1f_eU2eBMXp?u8fTK(0n2vzVw3F( zFV09#QO`$7Q&IWdw7oo z+6R)@fs#!H(Z72{-@@B%*H&~ujQ6Jv>sByL60`L@5jzAK__UoQ(KE~ zy98(+>cA{7cf~jIR*vV+iSelInAnix7$G3}+~%6VA2NYO-Ud09CIRpB+zPAvYm#S8 z3JrKD!|jFr(mLZu$S&o?((dL}71@q6lE2VQw|uyIxLs|F_t&*!-ItSBn^ND;WG{=n z-_E+@XQX-v9t zV}kF}gIzcDmG0du_mJXNPV)-Ae!UMoph`9#HPfD-Q-NARH-gYNb59K7O zY7G^+KC0|Y4I`fFJ?^6{;f=OJKx7FBphn49r?EV<4jFB2Y;dY}Fai?W@gnEV2@>w@ zA*DM_j*NRPF6?srOYo%(RmzGyAi8gC#pb)~R;*ZI`dnCT&FS*<46zljklI|)ZA`VE zlXaPQiI#A)C=xT6nw>Iqoo|l~RS`6tqGnr>X_YZ1p2W76xy`Dhq2cC0R$H^~md0u|0%t z5y&F4wPIQ8o3IMsmz^hS!8P4N>d*aXdB&U+?jB662)ZGzUw+DAe4O5pk|4FD=H3An zi<=(I&)nUQ6ORa4e6C_ni@w{*f5yG$7CcZLps0gS#8EPN*X!4>5e4M%${t-sw)3rt z&D>9$=L*N=&YgvAS2&Yr+i9nHD4E7ziAY(nHXED%>7r@i^Pg=Cm2S^b$)Hz4ri~V8 zYKazKl(U(!+aty zIr4OW(VYtGSICAv>YPnf{WIfHmDEHf3s2gFWH*N zAJgT5=ET=|#I80dLIP~BBP>yONaYnQC~!*-jrr2t-Gi?Qu_E4ASWFI_Rf$v>pJsaU z|K2#n!o`80Fx1A5qS}9E)5$`4)U-(Ikhy%nWhKD`{#Ie}!Y->_Va*yEH}Q0_&|!`? zB1;og;H#+`Zrdh$PiXH+hDd?}w{)~dY2rP%!9JKnu~HVc4M_Z;_SQB3Y}fzK`9myJ z9i3?!BW%Ns{yxu9ju?4%j#aGRKC%EY6_YGt4u;m?=;0FLsjz5FC9h0cXE8iFVg1iK zy;nX=W$W_as{U2pg-dZES8NI3dXFnf+Me4SCn6%g-JFHsO)axsWG)289@wQLxt%Iiap}oSF{`$_B$K47&upD;JV*bQNa2!a zc6M$1y=NpbG09o`tRF-$d}6p|_={ztgqwNu~cL^+#W1 z-0wyQXtoKhUQGg9W2`JwY{gA=n;Y$+`5m@0uh1H|ex}+ehhl_{1mDBK7tz%XC-_3y zF|*hb>*IfDq_X&Izf(A~Jt`w_?1mOJJKSlAZ0&FB3*uFHe0^_bs$EH$X+ zm8Zo0%ETXzmgT)<-t763&KjxS?>w9MHi?S3t%-(v7mE?sb90t=m6dd*8OCMQ2QU$@ z*)AKAl1Q9uf`Xx_SpYKpM4Rj9jxT+q1Z2}3-hT0}g$0Wuh{=SK5#p`3`F4B}YVo;L z=%(R&M4F!&J$mHGpSUODURBWW{nniAGU`I9)QbtM#?(DjR$QC*{|P{?w9=#B)0{mre(6p=!s|YzS{o<#SvdY~ zEU7*e!$@a2H#4o$#j}t&uF^$~{nlI|yjhpR|B5(~!QRmcCx+ixEEpHRSG~=yYNY>m z*lM?R;gZwzV@+L#{}c2do9z=hC5l!pVLPWtLo4j+>8)#)5f+@mwEH!)l3c|>|HYa zJ>csPM6;|C#V0LY;pJ+0*QNs_?y zc*XVT@m`%bz~bm&8lyW+Ko3O|)e_qRJL74^>)roucfh!0<@sY5ug;VR})z9bztG zu4J zjzA1S#9)U}Q<~Rl#Z;i?dp(B)AUSZ~c)*hoa@Q9gCqDo<0g=KMU@Tyu6SD}$M+!&X zWX|1yF-85wTv(I<6)tsb-D=p1JAeYnw_~P%V4xRrd&#LlPEJmACb@`llhe*<4FKyR z5^{5)u~r0Xf9#>U3o5R(&Kezb9x!ssO76t%3`16GAWl>uYj2QfNl z8Co$F1d|-}#P5v#GX!!$Fcm>=w+0O7tMJwaHsI-cPcGs8>ODE77P3RPGjQHnFWY<* z+82kdtwqo}ztT=F)E>3FyL23x-+PQ7f^(I7?F<3$XhurDLTRm8+=a%?YwKs-sj+0Y zmcT}Bg&sHya!<7d=)|!uNx96B{wUJ zsmf0pU|Q@avGFNHRARxx%Hk;cH)g))W5HTBg_~(hGj=Jtbis3_p!`a#ibL>oVKi{K zJV!Sv7aD5Fl@1*{wv6!Y_?TgMV$_b-gmn{!ozhELoEIigIj6w+Liii3v+y5h$4JP_ z5O-Q)`^?r+n3wUnNN~P&C{p)9a{vG`jG(b#>L+-jbToEu!+R7Yw=W%v6C{GY68$)s zHj$B`mu0#hfK)|EzDt*~;uxI`q5x?q7zTd?;xzo-Ut0j_FYQ!HNLfDKDrWbjw=5t` z!R`)iD*X`qN2Db5k%(bU$U}j~T?IaQp7FBYC6tb-6-8sOIf-eR;s#Hz15f!5V2w;4f+rZF#}7#x(3t-T%^8s0mtu$;&|pNFyLyBdyM6Y^b# zV8~_2a{AP%54d5%lo;Bla!@ueVE7Wy$o+Yv;G^_H829Se+~oLRBE=fOHlb2Ldb6n$ zlFWe&vXoN{F>tg8km_5EgBx<^sRo0E=)lLMzWTfQ>Z?%YObm*Gl^j1jZCXkK4uA)s zgt09u5!;szwv%{J*9=7@G7Sfs9Yse~bk?5hr7&S0lp_E++&aO$1*E@U6ysE20i~ z?HYI=pW)S5d0I|nd%TjL0b3IB`)I275qQyXbf;UuV{6xeH+XQl7~%oMy+9+3`p{FXJi3nHpVy2!{*Hd=ey13wo)qS*vCfge9B=do79wTVZpg< z*$2qiGiu`x7>jMC9xeN=Av*b#DH1obt=|of1@3sQc+qESk`hPZL0a(a}~P=(#BLTcknMN zk4w&g_ix|B$dkEBm5J6eD)!yuu6c&aVKu6s82^k=-T(JsQ6j^_Z61>$2#QGia-d15KX)IqK8YkJ z$|Q?XE`fX8Atv^raCrfshJRoAC<|tm?WX>L>g?=hCo(as0JpyBpIe6pw{OX#`ZTX~ z9RHn+qoPS)cVSpSddz)gB}GTyY?6SZx#BUaSz$- z-&iE_MbvBI;o;FHYv0u}WbW*Ns`~e3iLn;=RYlbF5TxuC7Z3UG9l+pf{qMo9cU?a7 z5;fmtRS*>F{;vx+(upy%|NUG4%YCP(~lVaV-pJo2@vU*`p#s+N&gnS4MZY-|&hQj}> u4Vj_=P2x@d&mzQ|{Qv*?|KMrNQ7)|f{No3AYCH+Qj;rY$$vR|t>Hh%Bl}&sA literal 6644 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 DpYJ34 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al03_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al03_test_one_moving_one_stationary_intr_later.png index 95b17621dc580dc37a23da192659633aaa6caa0b..c5e03890ee12b9b9cdc8bfd5a0316dc612ecd09c 100644 GIT binary patch literal 29295 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 literal 6560 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 BwJQJs diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al04_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al04_test_one_moving_one_stationary_intr_later.png index 5e759d5092aac34e42759f0c69e05b3687b7db84..6505281579078080568936bafd639bee98c5af1d 100644 GIT binary patch literal 34554 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 literal 6656 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 2 else dir + annotate_point(fig, ax, renderer, p[0], p[1], pdir, zorder=5) + + ax.annotate("", xy=(last[0], last[1]), xytext=(p[0], p[1]), arrowprops=dict(arrowstyle="-", shrinkA=0, shrinkB=0, color='g', zorder=4)) + ax.annotate("", xy=(p[0], p[1]), xytext = (p[0] + move[0], p[1] + move[1]), arrowprops=dict(arrowstyle="<-", linestyle=":", shrinkA=0, shrinkB=0, zorder=4, mutation_scale=15)) + ax.annotate("", xy=(last[0] + move[0], last[1] + move[1]), xytext=(p[0] + move[0], p[1] + move[1]), arrowprops=dict(arrowstyle="-", shrinkA=0, shrinkB=0, color='k', zorder=4, linestyle="dashed")) + + last = p + +def create_still_segment(fig, ax, renderer, pt1tup, pt2tup, dir='botleft', dir2=None): + dir2 = dir if dir2 is None else dir2 + + segment_pts = ax.scatter([ pt1tup[0], pt2tup[0] ], [ pt1tup[1], pt2tup[1] ], c='r', zorder=5) + segment_arrow = ax.annotate("", xy=pt1tup, xytext=pt2tup, arrowprops=dict(arrowstyle="-", shrinkA=0, shrinkB=0, color='b', zorder=4)) + an1 = annotate_point(fig, ax, renderer, pt1tup[0], pt1tup[1], dir, zorder=5) + an2 = annotate_point(fig, ax, renderer, pt2tup[0], pt2tup[1], dir2, zorder=5) + return segment_pts, segment_arrow, an1, an2 + +def create_still_polygon(fig, ax, renderer, points, dir='botleft'): + pointsx = list(p[0] for p in points) + pointsy = list(p[1] for p in points) + ax.scatter(pointsx, pointsy, zorder=5) + + last = points[-1] + for p in points: + pdir = p[2] if len(p) > 2 else dir + annotate_point(fig, ax, renderer, p[0], p[1], pdir, zorder=5) + + ax.annotate("", xy=(last[0], last[1]), xytext=(p[0], p[1]), arrowprops=dict(arrowstyle="-", shrinkA=0, shrinkB=0, color='b', zorder=4)) + last = p + +def create_newfig(title): + fig, ax = plt.subplots() + renderer = fig.canvas.get_renderer() + prepare_figure(fig, ax, title) + return fig, ax, renderer + +def run_or_export(*args): + fns = args + + figaxtitletups = [] + for fn in fns: + figaxtitletups.append(fn()) + + found_export_command = False + for i in range(1, len(sys.argv)): + if sys.argv[i] == '--export': + found_export_command = True + else: + print('Unknown Command: {}'.format(sys.argv[i])) + + if found_export_command: + for fig, ax, longtitle in figaxtitletups: + fig.savefig('out/{}.png'.format(longtitle)) + else: + plt.show() \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index ef7e0a2..c453ab8 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1456,14 +1456,20 @@ class TestExtrapolatedIntersection(unittest.TestCase): It is suggested that you follow along these tests with the images at imgs/test_geometry/test_extrapolated_intersection. All image references will be relative to that folder and will be referencing - the .grf (Graph) file, whereas the actual images are in the out/ - folder with the same name (and a different file type). + the .py file, whereas the actual images are in the out/ + folder with the the full prefix and image file type. The file names are prefixed with a unique 2 character alphabetical - code per test function, followed by a unique 2 character numeric code - for each image, followed by an underscore and the name of the test - function they are referenced in. In the code they are just referenced - with the first 4 characters of the file name. + code per test function, which is the prefix for the matplotlib file, + followed by a unique 2 character numeric code to identify each image, + followed by an underscore and the name of the test function they are + referenced in. In the code they are just referenced with the first 4 + characters of the image file name. + + Note that you can open up the interactive matplotlib plot by calling + the corresponding python file with py, and to export the 4 image files + to their appropriate location you just pass the "--export" flag to the + python file. """ def setUp(self): From 028f142a3f758efc3498a48bf02e992154b2f1b1 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Fri, 8 Sep 2017 10:55:35 -0700 Subject: [PATCH 214/251] Test one moving + one stationary polygon with distlimit Also tweak the font for all the images and add an exportall batch file to update them easily. Added an "--only" option to all of the tests so you can only open one (or a few) of the images. Example: py an_test_one_moving_one_stationary_distlimit_no_intr.py --only 1 would open only am01 (instead of am01, am02, am03, and am04) * imgs/test/geometry/test_extrapolated/intersection/out/* - reexport to new fonts + imgs/test_geometry/test_extrapolated_intersection/(many).py - add new test images * pygorithm/geometry/extrapolated_intersection.py - Fix confusing behavior regarding point-line movement * tests/test_geometry.py - fix several tests regarding touching that were incorrectly testing for intersection (when no intersection is occuring). Add new tests for one moving one stationary with distlimit (see images am* through ar*) --- ...moving_one_stationary_distlimit_no_intr.py | 34 ++++ ...oving_one_stationary_distlimit_touching.py | 34 ++++ ..._one_stationary_distlimit_intr_at_start.py | 34 ++++ ...ing_one_stationary_distlimit_intr_later.py | 34 ++++ ...one_stationary_distlimit_touch_at_limit.py | 34 ++++ ...e_stationary_distlimit_intr_after_limit.py | 34 ++++ .../exportall.bat | 11 ++ .../out/aa01_test_point_line_no_intr.png | Bin 18888 -> 16701 bytes .../out/aa02_test_point_line_no_intr.png | Bin 19305 -> 17369 bytes .../out/aa03_test_point_line_no_intr.png | Bin 19375 -> 16738 bytes .../out/aa04_test_point_line_no_intr.png | Bin 22928 -> 18100 bytes .../out/ab01_test_point_line_touching.png | Bin 20998 -> 17369 bytes .../out/ab02_test_point_line_touching.png | Bin 21204 -> 17579 bytes .../out/ab03_test_point_line_touching.png | Bin 19010 -> 17028 bytes .../out/ab04_test_point_line_touching.png | Bin 23654 -> 19503 bytes ...ac01_test_point_line_touching_at_start.png | Bin 19369 -> 16926 bytes ...ac02_test_point_line_touching_at_start.png | Bin 15456 -> 15581 bytes ...ac03_test_point_line_touching_at_start.png | Bin 17874 -> 17240 bytes ...ac04_test_point_line_touching_at_start.png | Bin 16735 -> 17025 bytes .../out/ad01_test_point_line_intr_later.png | Bin 19231 -> 17384 bytes .../out/ad02_test_point_line_intr_later.png | Bin 17063 -> 17216 bytes .../out/ad03_test_point_line_intr_later.png | Bin 18733 -> 16788 bytes .../out/ad04_test_point_line_intr_later.png | Bin 21565 -> 17639 bytes .../out/ae01_test_line_line_no_intr.png | Bin 20493 -> 19328 bytes .../out/ae02_test_line_line_no_intr.png | Bin 26422 -> 24318 bytes .../out/ae03_test_line_line_no_intr.png | Bin 27692 -> 24979 bytes .../out/ae04_test_line_line_no_intr.png | Bin 22507 -> 24108 bytes .../out/af01_test_line_line_touching.png | Bin 22607 -> 24087 bytes .../out/af02_test_line_line_touching.png | Bin 18119 -> 19204 bytes .../out/af03_test_line_line_touching.png | Bin 18508 -> 21065 bytes .../out/af04_test_line_line_touching.png | Bin 17512 -> 19328 bytes .../ag01_test_line_line_touching_at_start.png | Bin 18904 -> 19629 bytes .../ag02_test_line_line_touching_at_start.png | Bin 19422 -> 19622 bytes .../ag03_test_line_line_touching_at_start.png | Bin 21783 -> 20036 bytes .../ag04_test_line_line_touching_at_start.png | Bin 24503 -> 22838 bytes .../out/ah01_test_line_line_intr_later.png | Bin 24285 -> 22751 bytes .../out/ah02_test_line_line_intr_later.png | Bin 22200 -> 21913 bytes .../out/ah03_test_line_line_intr_later.png | Bin 21833 -> 20764 bytes .../out/ah04_test_line_line_intr_later.png | Bin 22961 -> 21710 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 31800 -> 26803 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 32981 -> 29276 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 30689 -> 27087 bytes ...test_one_moving_one_stationary_no_intr.png | Bin 27658 -> 24095 bytes ...est_one_moving_one_stationary_touching.png | Bin 41040 -> 34018 bytes ...est_one_moving_one_stationary_touching.png | Bin 42552 -> 35153 bytes ...est_one_moving_one_stationary_touching.png | Bin 25401 -> 26942 bytes ...est_one_moving_one_stationary_touching.png | Bin 28013 -> 31629 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 23309 -> 21697 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 29745 -> 25064 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 28603 -> 24617 bytes ...ne_moving_one_stationary_intr_at_start.png | Bin 30860 -> 25890 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 28906 -> 26141 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 32572 -> 27478 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 29295 -> 28551 bytes ...t_one_moving_one_stationary_intr_later.png | Bin 34554 -> 29530 bytes ...oving_one_stationary_distlimit_no_intr.png | Bin 0 -> 23949 bytes ...oving_one_stationary_distlimit_no_intr.png | Bin 0 -> 39122 bytes ...oving_one_stationary_distlimit_no_intr.png | Bin 0 -> 34169 bytes ...oving_one_stationary_distlimit_no_intr.png | Bin 0 -> 32540 bytes ...ving_one_stationary_distlimit_touching.png | Bin 0 -> 34809 bytes ...ving_one_stationary_distlimit_touching.png | Bin 0 -> 25471 bytes ...ving_one_stationary_distlimit_touching.png | Bin 0 -> 36212 bytes ...ving_one_stationary_distlimit_touching.png | Bin 0 -> 33175 bytes ...one_stationary_distlimit_intr_at_start.png | Bin 0 -> 22809 bytes ...one_stationary_distlimit_intr_at_start.png | Bin 0 -> 26805 bytes ...one_stationary_distlimit_intr_at_start.png | Bin 0 -> 31941 bytes ...one_stationary_distlimit_intr_at_start.png | Bin 0 -> 27907 bytes ...ng_one_stationary_distlimit_intr_later.png | Bin 0 -> 32500 bytes ...ng_one_stationary_distlimit_intr_later.png | Bin 0 -> 34266 bytes ...ng_one_stationary_distlimit_intr_later.png | Bin 0 -> 28099 bytes ...ng_one_stationary_distlimit_intr_later.png | Bin 0 -> 28465 bytes ...ne_stationary_distlimit_touch_at_limit.png | Bin 0 -> 29749 bytes ...ne_stationary_distlimit_touch_at_limit.png | Bin 0 -> 31722 bytes ...ne_stationary_distlimit_touch_at_limit.png | Bin 0 -> 27229 bytes ...ne_stationary_distlimit_touch_at_limit.png | Bin 0 -> 25328 bytes ..._stationary_distlimit_intr_after_limit.png | Bin 0 -> 29717 bytes ..._stationary_distlimit_intr_after_limit.png | Bin 0 -> 29730 bytes ..._stationary_distlimit_intr_after_limit.png | Bin 0 -> 27026 bytes ..._stationary_distlimit_intr_after_limit.png | Bin 0 -> 24787 bytes .../test_extrapolated_intersection/utils.py | 107 +++++++----- .../geometry/extrapolated_intersection.py | 10 +- tests/test_geometry.py | 164 +++++++++++++++--- 82 files changed, 432 insertions(+), 64 deletions(-) create mode 100644 imgs/test_geometry/test_extrapolated_intersection/am_test_one_moving_one_stationary_distlimit_no_intr.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/an_test_one_moving_one_stationary_distlimit_touching.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ao_test_one_moving_one_stationary_distlimit_intr_at_start.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ap_test_one_moving_one_stationary_distlimit_intr_later.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aq_test_one_moving_one_stationary_distlimit_touch_at_limit.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ar_test_one_moving_one_stationary_distlimit_intr_after_limit.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/exportall.bat create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/am01_test_one_moving_one_stationary_distlimit_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/am02_test_one_moving_one_stationary_distlimit_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/am03_test_one_moving_one_stationary_distlimit_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/am04_test_one_moving_one_stationary_distlimit_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/an01_test_one_moving_one_stationary_distlimit_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/an02_test_one_moving_one_stationary_distlimit_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/an03_test_one_moving_one_stationary_distlimit_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/an04_test_one_moving_one_stationary_distlimit_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ao01_test_one_moving_one_stationary_distlimit_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ao02_test_one_moving_one_stationary_distlimit_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ao03_test_one_moving_one_stationary_distlimit_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ao04_test_one_moving_one_stationary_distlimit_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ap01_test_one_moving_one_stationary_distlimit_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ap02_test_one_moving_one_stationary_distlimit_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ap03_test_one_moving_one_stationary_distlimit_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ap04_test_one_moving_one_stationary_distlimit_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aq01_test_one_moving_one_stationary_distlimit_touch_at_limit.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aq02_test_one_moving_one_stationary_distlimit_touch_at_limit.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aq03_test_one_moving_one_stationary_distlimit_touch_at_limit.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aq04_test_one_moving_one_stationary_distlimit_touch_at_limit.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ar01_test_one_moving_one_stationary_distlimit_intr_after_limit.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ar02_test_one_moving_one_stationary_distlimit_intr_after_limit.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ar03_test_one_moving_one_stationary_distlimit_intr_after_limit.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ar04_test_one_moving_one_stationary_distlimit_intr_after_limit.png diff --git a/imgs/test_geometry/test_extrapolated_intersection/am_test_one_moving_one_stationary_distlimit_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/am_test_one_moving_one_stationary_distlimit_no_intr.py new file mode 100644 index 0000000..42eee39 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/am_test_one_moving_one_stationary_distlimit_no_intr.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'am' +func_name = 'test_one_moving_one_stationary_distlimit_no_intr' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((0, 2), (0, 3), (1, 3), (1, 2)), (4, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((2, 0), (3, 1), (4, 0)), 'botleft') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((1, 3), (1, 4), (2, 4), (2, 3)), (5, -3), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (2, 2), (3, 1), (2, 0)), 'botleft') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((2, 4), (3, 4), (3, 3), (1, 3)), (3, -2), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (2, 2), (3, 0), (2, 0)), 'botleft') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((4, 1.75), (5, 2.5), (6, 2.5), (4, 1.25)), (-2, 1), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (2, 2), (3, 1), (2, 0)), 'botleft') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/an_test_one_moving_one_stationary_distlimit_touching.py b/imgs/test_geometry/test_extrapolated_intersection/an_test_one_moving_one_stationary_distlimit_touching.py new file mode 100644 index 0000000..b0a2834 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/an_test_one_moving_one_stationary_distlimit_touching.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'an' +func_name = 'test_one_moving_one_stationary_distlimit_touching' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((0, 2), (0, 3), (1, 3), (1, 2)), (5, -1.25), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 0), (3, 1), (4, 1), (4, 0)), 'botleft') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((1, 2), (1, 3), (2, 3), (2, 2)), (4, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((2, 1), (4, 2), (5, 0), (1, 0)), 'botleft') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((2, 4), (3, 4), (3, 2), (1, 3)), (3, -2), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (2.5, 2), (3, 0), (2, 0)), 'botleft') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((0, 0), (1, 2), (2, 1)), (3, 3), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 2), (5, 3), (5, 1)), 'botleft') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ao_test_one_moving_one_stationary_distlimit_intr_at_start.py b/imgs/test_geometry/test_extrapolated_intersection/ao_test_one_moving_one_stationary_distlimit_intr_at_start.py new file mode 100644 index 0000000..6d219a0 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ao_test_one_moving_one_stationary_distlimit_intr_at_start.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'ao' +func_name = 'test_one_moving_one_stationary_distlimit_intr_at_start' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((3, 1), (3, 3), (4, 3), (4, 1)), (2, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 0), (3, 1), (4, 1), (4, 0)), 'botleft') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((3, 1), (3, 3), (4, 3), (4, 1)), (2, -0.25), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 0), (3, 1), (4, 1), (4, 0)), 'botleft') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code), ylim=(-1, 7)) + + create_moving_polygon(fig, ax, renderer, ((2, 4), (3, 4), (3, 2), (1, 1)), (-1, 2), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 1), (2.5, 2), (3, 0), (2, 0)), 'botleft') + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), ylim=(-2, 5)) + + create_moving_polygon(fig, ax, renderer, ((4, 0), (5, 2), (3, 2)), (0, 3), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 0), (5, 1), (5, -1)), 'botleft') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ap_test_one_moving_one_stationary_distlimit_intr_later.py b/imgs/test_geometry/test_extrapolated_intersection/ap_test_one_moving_one_stationary_distlimit_intr_later.py new file mode 100644 index 0000000..cabf29b --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ap_test_one_moving_one_stationary_distlimit_intr_later.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'ap' +func_name = 'test_one_moving_one_stationary_distlimit_intr_later' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), xlim=(-1, 10), ylim=(-1, 7)) + + create_moving_polygon(fig, ax, renderer, ((2, 2), (2, 3, 'topleft'), (3, 3), (3, 2)), (5, 3), 'none') + create_still_polygon(fig, ax, renderer, ((3, 5, 'topleft'), (4, 5), (4, 4), (3, 4)), 'none') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-1, 10), ylim=(-1, 7)) + + create_moving_polygon(fig, ax, renderer, ((8, 5), (6, 3), (7, 3)), (-4, -3), 'topright') + create_still_polygon(fig, ax, renderer, ((4, 3), (4.5, 3.5), (7, 1), (6, 0)), 'top') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((6, 3), (6, 2), (5, 1), (4, 3)), (-3, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((4, 1.25, 'top'), (5, 0, 'none'), (3, 0, 'none'))) + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), ylim=(-1, 6)) + + create_moving_polygon(fig, ax, renderer, ((5, 0), (6, 1), (2, 1)), (0, 4), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 3, 'top'), (4, 3), (4, 2), (3, 2)), 'none') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/aq_test_one_moving_one_stationary_distlimit_touch_at_limit.py b/imgs/test_geometry/test_extrapolated_intersection/aq_test_one_moving_one_stationary_distlimit_touch_at_limit.py new file mode 100644 index 0000000..f76ead9 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aq_test_one_moving_one_stationary_distlimit_touch_at_limit.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'aq' +func_name = 'test_one_moving_one_stationary_distlimit_touch_at_limit' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), ylim=(-1, 7)) + + create_moving_polygon(fig, ax, renderer, ((0, 0), (0, 1), (1, 1), (1, 0)), (4, 3), 'none') + create_still_polygon(fig, ax, renderer, ((3, 5, 'topleft'), (4, 5), (4, 4), (3, 4)), 'none') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-1, 8), ylim=(-1, 7)) + + create_moving_polygon(fig, ax, renderer, ((4, 4), (5, 6), (4, 3)), (2, -1.5), 'topright') + create_still_polygon(fig, ax, renderer, ((1, 3), (2, 3.5), (7, 1), (6, 0)), 'top') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((6, 3), (6, 2), (5, 1), (4, 3)), (-3, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 3, 'none'), (1, 3), (2, 1), (0, 1, 'none'))) + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((5, 0, 'none'), (6, 1), (2, 1)), (0, 2), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 4, 'top'), (4, 4), (4, 3), (3, 3)), 'none') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ar_test_one_moving_one_stationary_distlimit_intr_after_limit.py b/imgs/test_geometry/test_extrapolated_intersection/ar_test_one_moving_one_stationary_distlimit_intr_after_limit.py new file mode 100644 index 0000000..3849712 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ar_test_one_moving_one_stationary_distlimit_intr_after_limit.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'ar' +func_name = 'test_one_moving_one_stationary_distlimit_intr_after_limit' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), ylim=(-1, 7)) + + create_moving_polygon(fig, ax, renderer, ((0, 0), (0, 1), (1, 1), (1, 0)), (4, 3), 'none') + create_still_polygon(fig, ax, renderer, ((5.5, 5.5, 'topleft'), (6.5, 5.5), (6.5, 4.5), (5.5, 4.5)), 'none') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-1, 8), ylim=(-1, 7)) + + create_moving_polygon(fig, ax, renderer, ((4, 4), (5, 6), (4, 3)), (1.2, -0.9), 'topright') + create_still_polygon(fig, ax, renderer, ((1, 3), (2, 3.5), (7, 1), (6, 0)), 'top') + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((6, 3), (6, 2), (5, 1), (4, 3)), (-2.5, 0), 'topright') + create_still_polygon(fig, ax, renderer, ((0, 3, 'none'), (1, 3), (2, 1), (0, 1, 'none'))) + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code)) + + create_moving_polygon(fig, ax, renderer, ((5, 0, 'none'), (6, 1), (2, 1)), (0, 1.75), 'topright') + create_still_polygon(fig, ax, renderer, ((3, 4, 'top'), (4, 4), (4, 3), (3, 3)), 'none') + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/exportall.bat b/imgs/test_geometry/test_extrapolated_intersection/exportall.bat new file mode 100644 index 0000000..d320e5a --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/exportall.bat @@ -0,0 +1,11 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +for %%f in (*.py) do ( + set fn="%%~nf" + if not "x!fn:test=!" == "x!fn!" ( + echo "exporting !fn!.." + py "!fn!.py" --export + ) +) +endlocal \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa01_test_point_line_no_intr.png index 52396895f26372340b1db3161cbd9cb8e2bb589f..e41a24fad0b8baf248ae32c3faf7f7108d7480c7 100644 GIT binary patch literal 16701 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa02_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa02_test_point_line_no_intr.png index cc80861d573f75a191a6dfcac228df8cba4e6806..9a5979dce0162178db81d84e71e44a798db5e67c 100644 GIT binary patch literal 17369 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa03_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa03_test_point_line_no_intr.png index 98a927cf4e92650b81c2c066b6d3f902dcb0a291..00a1343f85482da722cd3ec0324f5d63dbbc87d7 100644 GIT binary patch literal 16738 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aa04_test_point_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/aa04_test_point_line_no_intr.png index f84ac270ad69360bb7d2b9299d7685934f9668c2..fe615a77d8d14a0cab6ef848da3529296b7ae000 100644 GIT binary patch literal 18100 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 XURU;JUo{pc2qk+-@nY(Q8-M>VH|kV0 literal 22928 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


~Hb*D66i`W8|H5cdZ3dE>Ao2uyv3)Jul* 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab01_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab01_test_point_line_touching.png index 07b2cb2f665f654f269a0d3d8630160316c67e91..afe9bfd091fc81bb6cb741f1e859b0ba54cb5d3a 100644 GIT binary patch literal 17369 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 literal 20998 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 Ixkse`1I$BnFaQ7m diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ac01_test_point_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ac01_test_point_line_touching_at_start.png index dd758d28d0d5707521ecf5165993d16b93b889d0..7329ada80c38caf345531871e78293ae6d7403c6 100644 GIT binary patch literal 16926 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 literal 19369 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ac02_test_point_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ac02_test_point_line_touching_at_start.png index 3647b587fe2a1720b78e12f4a55a5abd31db402c..805f9b949c13a4d72bed5dcfe87511259f732c32 100644 GIT binary patch literal 15581 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ac03_test_point_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ac03_test_point_line_touching_at_start.png index 0d9852f38824aea45c57debda473d22256e259c7..5f0df7ef96d61dab114c296f5051d0730c216c63 100644 GIT binary patch literal 17240 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 PQ1WM$&Lo`Dd-T5mlriaV literal 17874 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

>=dnpaQg?~6upF#U`LDd#69JG zckUfD8HJ}GdZuqfgnaxIAh#jk<28@D(3k*IlKR%;4hn7P@vDA(gn<~GG!?uMl=tdz z8!I3Rfq)Kwhc0)3RES=+$A-^89*$rlQSp;MM;g+2&U4Jlk|w7cqff7fdX#wDhk3v1 z{RxQqfXacbhg|HTqOLTkVw#}n!#vjAMu!QFp!aa0Ad<>=)lgNa1xPG~iP2gqgkJ=| zPz%D-%`>7Poj!tGY^u7ds2mg}9Iz(xygSfkaCc{FoC~*PEJTdCD}d3ZQl$qxG~1?w zMIkhn6-AE0K?ODD#86Muk-LAMsHIMrmj(prkfBfrmn~vbKY7XThI*0A;NSlKc<62+@Ln4c`TXgu$y?XVnlShp5bs#u*9`@MO zbbk~NESn}6j}$c1q2fE&4}tZ5e0)Nf87-I;6*>i-$`Jw{<^4hTR!65%WBcCPU3ZClK+qXK0v{LHOF;6h^$gteh z?d)FP&vBC-GSt;Yc|Gs|tsR=7!XR0TM4p5Fc^o^{B4$Lt$}a|Xb`(hSj%!_jFaWvN zf;dqVBp6qWjsDyPd&&qm$Xy*NsgI@_9ifI`#eir@U{e9LGdcRS&k*d0W)OC!$i|C$ zV?~RF+Yjq(EKq|&?Fbv!3b`eeW_|A6?rNP=gAG_vwh@j%=Od7AW4tgCOss8tbLAmo z$iQxgfZ5_H(`kgEgFwU7iwpY`$~n4nD4AffW{POpcR5 z(=*+`S+Hn$a8{*FD#9JTPJ{Iyt)VH01q6Hr*xzON_WIY0R5vi++TouAsAjrzisCu^ z@!^g1H>>2?#WlQu}5KB`ByrGpTWaWP+^dr^fS%B zW?Qw?6nuMds2y5}1hLI>GYB#cwa`|Cxw$`%bQa`^!@8BVU87QFXULg$HJS+M4uIpo z9u&2;+<3bk+wTd9d*lr!swb#Ya8)42^YZX01npO`{9ee+Ch`I$0(KPr{Aee-SqZ2l zE9$)ecB&PfFD-NXnqs(%b16FY*LhjH*G@xWa5CFnHSDknDuR>%fP1Y+Q|bu?x-=q0ure1X%w6#ewzzyYDf%NVn3Z WlCC7<6f@iyqbR2;i$7&@^S=OFCI0FF diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ac04_test_point_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ac04_test_point_line_touching_at_start.png index 0ea65547ae867fa5f1ce553218af02a951c2c7a0..704bf9d5cc7144976b25efd0bcd2716d35214737 100644 GIT binary patch literal 17025 zcmeHvc{r78+x|jnPFp2K*hNyYROYc#AsNb)VWCv!d7c)fc7u?mQX~n>ykwqQXh4$8 zmRT}eA@jKSUC%<%-tYT<-*+6pKTQ za*Ye|m|U~mmi{`2S_?@X(s+eNZc3xNh*~no!3xG(e96rM!&?K{9dEyk>ZU)&`S8}W z?C#0p+Gk}aPT_nw4ZA7s&#MF9pIIMfB)z6hx5S8WVqbvVdKlhyk!O1F4Mo3;jsu1A zI=a~lJ{0kzXi+HU_b52RVDo?e#pl^VG&Vf7TuSHt9R`w?QD{^#n_EJ${&A;4-LX!P9XFTR}KeZ;XUg;=t1t8;{&`|z28rcCAivVP}h z1qTKO#Ad&zj@Kq()upH2GNd^VU!fFx&J`P=_o9?GI-zJb^SDh8)+T1Q#^G>`U0q!! zW4)C*-N9yQM&&O$S~Ih=wVYZUg1$(Mp6}}JHf_$b(M~fC*u%oYCBJj$PE%9UDmXQG zg3N^0OMoXeD+?AZ_W0~cA$dL~=j6-|=B|rmK+($_tlot3%B#=w$jz{9i6awol{$)i zt6xaErClvy^cb`Yt0rJ_?LYBE%i*+jbOi0X&l5+#h|lzE=EuQzWnW)k?R3+}t)2@W zzPpc~RaaNXMQ-BD;ux3|S(qE`67h?Ri?i?W6~+@twY7cWci5^t=X*R4q0v@9UeUY^ zJBp%ZzQ}as(o3{QpMnXAko9dNGQ-n7VI)Q27Ebw@N`Gu*W~-|L`pu7-l}zB(*(fs>7-X3j=NQiFoBO0z8c+M-|GT;s=)j zO6FXTxK*XGnxdlOOii>@)Vp`5DD4cMa+K!La_JbiJ4h71NH}9s7=xCPi1AbPmda^si{SF zcV9oVFQ8_YGVJeJQxmJIJe52$GGY%ekI$1pBuWaJ7hO5pVpF^~rw<<@U|95E-iO9( zbGt$T>aRylR{0oZ$?->nZ$_119(Y){9^SUTH-}6JB7Q};c1U`Sm%kYO36#vIB<%R% z7WdII*UkXhi=@V;rrPG_=Mz}usmAMctU`YnK7R7#9M183efacfPc&huK3Rr9#$)pc z1SOcbAYI!M8}^RA=&-tKW$DDnhc)}-;t3-yYf;|!XtotRWZX>e@VzuhYNFooesPBh zDQ~I}-G4`VE?k44>(V?)bAWLJ?60yHk~$G*eXDR>3RUz4TnbNmAE_!;-dwwhQ=Wuz z!k99D|K1;;R5v$0I__)bF0)I|`LZV$ZGo2|Y7Kv+E_S-hwfmXTj;(hDT}G~|YiRTf z=TG~d^=Av6z_v|)aT<%)r<^0{+WF?q)F$=Mjh2&c(5*`|tvy5;i zl&|lz3tcBj(v46+6V-Gw%q!8J(+ZM53h4F-nm*z*sfv^j7BIOOM4p~1mi`hdjgr|) z$Kmy7SEVewIzMxb=fb3CJducj8M%iY4QcDGQa~%Z<^Qq&ta0fR-kix+w{+XCbFkAW zLHB)p1dYD1`mzY~jbmXU$J^T4j(yzkZ(JLvF4pnj_?Xqggw;%4W}aZZ35ws?c?T;J z*xqd3{6CIw|NV&g|Md)ac}_+#``(9)_fF%3AW+ZTrP-DzAS`^Cb!&WfwrI7&Zna@& zT|q%XSToP`KD|t?KT>HC+jJ%MY9IhKt&hjmHn78Z%ImOf>SEl+ZIg%lif z+b^TmpiumO(QHGZ3Yg(YSbx>6+J9`OSJ&1yje{$k&WwT+a4nY3v>W_v-rbS8vlZD< zjQ3(*zT~Jbr9q)Q3iiTzK800qo=;(#O~+Z)7N!uc99{<<^C#aO-@`uF#|ir-wwzGn zWHdD~Ia+Ixto5qtVrJp>5=&u;Rr%-7ZBtdv%?SbfW&6Lr^*(gu$mcOzdS7ymskwO# zgoaKLp?S*H)o1^>ty+LWZN@y9`@yxx7f(#zx5w8M;xrz4LVKP5jQS%D1ApD2+19(? z2mQYF#?e2^73#rzS z83mK}pnV6wd$RjR5hfp=9UGsC3L33^s%DxsGck#YywwWK_SC6_7uqmDPsib&;=VEK z)vI@EFnMrSWS(aIR#Q=V*w+P{L+a~R4tE=j z@Ic~D0y!=(ul4uqz6)}ecrj6T-&un2>C?Htz1Njs;Rn}rJ%^b;!^SnVpUTUHSHI-v zw11(W)6%01dcVOP;kliMT8V#~qr6K}YjrUgi`DCHalU>oRO&%$YFAeuB(iq1K764H zDhgpWUYXt|r>N-r`%=G!exgs0&&a6z{V|uYPr(C-`54!}C|smPQ$}oBnp#v;RL<9% zn*g3P#QWQHe*8o6DgVjIW;=h*p;BYJ?#~wl_UwJ_KzG8^5OoXf*AYofe`mw$%P!rj z<|HI2J^W#N&P1abm%M7UQtg*eadiwPF-jrGbog7L$xst!l8!;*r4L`u!SN2r!P#~_ zriJ%+(y{ZePcg}ND_z{Yj(hXgc)v}{)L7$vQZY=b1-UL-KTmhlF1|;cp|+oRV)1}W z*e5SCV;o>gbsz=+E>L!BD@Et)LL6oJTFc;P-Z<2nvb+tb^QW$UElyk~SX@l3roKMr zs9{kg!J;AMOdz+ihKox!o9Enc+T>6i;G3a3Zw4vn=HeF;E-8ARl<^xna~z+ZPzEEfN)?FD3I$CtBI4XArp4RjteuS{JIbKwhP*P z`_Lhk(IEn{N^6+C%DiDH?=^LB+>iR!q6!R{5ya5clslKb`}lR^g?Wmpv9Zd93m1Zh zMjOqNOd3+IX(wN~4LEA2?^$&fm6t;vLvFY?3r|O)1W+<-0rNfOH?29iSIS+)A+rPS zu6l$ikQ2dMrk0jnq9FJh;rb(CS zuAp?cNlOII5a+WHaGB^fMAYQs;-Vynu6A88-+D2t4iolF^;y-gTJh zn&0ZU&if>A`rK09_sxY^pf6+1hy zIpMXZI;C@$DeG~Ko+C4_2rl3L2uD^Ddv*Nhs0{0Iud(T zBJeHa4%=loJc|ZiH*R6bwY+3z7H^r=PA>`jvRHCoJogi28ms24N;RjRZo_r?sb9nt znldb^0nJ3h%Dd_s%gx2++n44x6ktE6|Dc53pE#7Owa{fi_AKH}hAX1iv?zZYc5WQq zvA6gFKlAqq*CR{{;x0Qk(|3s|Ws)K)jT?t{ZFJFb`p#|XM6$EB?SwR(dd@1li;4Hr z>l3L)<#m+FHZ;ir7V^&ZYj$kBT~*gwSs89D5Dd)26vw$&(iQUh-2UoEx^7M+Wydhc z;0g*puPTk}1jf^pW&PQZkFZ;9T09ph2wQ>uHJ+a2p%@+N7_5<`mslIG89lgKL_V~s{MV+~KdY@Uan7(vnW1w58`|xOZ zYfXs9IlWXrn%809Aszvqj%D{}m)5I}Rwl7ny$R3B$*CC!E~XePAP=*xDkCG)?`mQa zd*J-jm#|~vqoTMRhzSYj0d{NWV?7$V%M!Fw5x|*lM#3i=&d*JonwhDdIdi68`{0f$ zfV@ZmgWM!v^@LYvOnPBdx-s1>2zF^S;Ck5oZrZtyiTCf{w;wLt6)h+Uv0FROecGl4 z=v}as$BgVNdECh8sG!?~IYKLIYinc47{Td=XuB_>vbZz{vPODF#`QC*%CnDjI|7xZ zV&STyei21QXNf=FZGv1EJIN05it*kpF)^_!Z3x9L_8h^{-te-uv)k!kTs_~>F5>ss z78d-aBTpt44EdSWl$8A71vYwaJ{A5D{`X^(44w$W!cT9$eTiIS-dhlen5ds!^YI&Y zc6JWqcdKhy7TSjNszrr8+V^KFQz%AOz^$}MoDTWQ@(ndL)lyvfMo!3&s+T68`^H#c z_*hbr$LvHb%q2R1F6E2(kVG~iUMuywNn@G`!d_e**1b+nzObEJsb-!stFET@Xc!;) zHj8fR)8Qmzh+we}TaXvs_c369#Sjn!P1`Ce!meFtA2N4 zZhB^BrddmlL$J6L0Wf{at9#;J#A1|jg%3I}CO#=oY+ySFn}2lP^Sa8)$_{Q>JG<1g zeyp+H>lor*zqWoEG#AjGLjblec>Oc;@iq~N3wXs4`!$ooj4uXjmv%T-N;mS=U(!5J1Bv<)?d4g%R5m=m$$`Gr(*#7?h zngzbBue2@J@3+Je2!plx50GrY$0vk@pdP77QH#bjL?}3P@L6x$ zyp^))OsIZo#V2}(#Zag0xS-0!jAGJ179QQ*$?kM`J-ivGl^Sp zI_LJxr6+CEQ6w~r3jRgw|(wa^k8@OH75v1e8jPf@>LlYO={ZOaaC0pG1hO_ znj~Fw+$ZbDT6t^3cKdS4)@s>r!&%**p9KyN6{lpi{meQZu+fA1xHgLcy66Y%gNDJ2;!^#R_Nn4p3Lt2l?G#9c_x+}5?NWOxaMJv1d-|6 zVVpj*i$EP1&DCkG0y7dp5CNn(UE%PV8HU{NdU@{IOnkZr<;A)lsa`~f+E4vx*CR50 z8*Ir{S5=Jwts#vZq>s&pm{P|OKUw|_`;*I{JSr+H16+rjBYAZ)j7K_40B?~x{H0qv zin9PPjeqrKU~}?-pSx1VNwW?_RK-pZ4tl*IaQL!{9vf)<{OmZyGCtT#N)VogHh5A% z8#7aUE`n@DiNPM$;tLXN%5GyjQJdG~jc!NH7{K66t*nMddai$d8cvy=j1Lb#2@w#J zS8kR>#9u3YVgkU?)WSktV2}FAlQ;4vi9_-uY~_V^=V&$yyZ~gpFW~ORO`AZeNU#=p z-q*D``1HQ;OGof32L&R-+?sa5{F}7Dy9JX|8&6m4;5pa9P69+E3xN(ssEnv^5UBud z>_xzFW2%uqYjI_ye4v`DYW2WSvVGsh+M1f)@H=m0EA~n_tE65pyXfFB?v)XGw~(?# zztA*v9yN7!PnKV94#tzm5mrDWqWUe#*0T4HYRxJ#qG4j(#n9^sg8R0}{s!#K9tmh#SYp*?xz5fKmIhK0JO zCV4V{fhYwMG79~nkc(5( z)5A8GzIiSu!A80kgu&x*xIhdWYV5AK7wYSK&AgGvSc>yo0~H@8-hPt*22=|$l$np; z3ox?l$lPUucjHESFK61CX13;tzvZhDq3m_goC1&DGE|o~ zorfq$AP|I>ZZF5V`q!&iVc`hR*H^FhQK{q5jvuctXVd2n3@km+A}u_d(XoTy%e-hc zal<*Sk4#T5)Xn_4hCuVUgx&qLu~8ejT2v>h-gMQlR^Qj=Ij|-XzlhY@luRA}W z)czHTNSr_dkm$B?<3=?N4LlN^N%>NLQ+#mboS7f*8Oj`VmM;KAVvn%pb2iuBKL?t# zRmB~@SA1_sb?ADm**}ok_GPR}YUD`X)tm50ZamCBN0v6*6ys|xOdA%(_tp{$Dcq#c5U_K2kEiHTy9TZiV{cn=FL5m~Idg}85BYbP{ z8qjrKfjK|(qYjZ4J?RNIfm454IZ97Vcr0-O0&s}_Mjb0+)U)G8aiECqKl`8p5r;=c zY(eY2eJVUH-O1kmAUtX?h*RVDl-*Bl*|KGisBNb#o+o=^kP!A=3PLsL0Ef|Nv<0tB zc5JkVnCn;!Qfs*K;cm^4XibP~sr<@fX;kWhdu0kCRFH8N|<^8nDMgh3xVBu0?$pOsP!5mE$=KPSVy z0Vk*^IZzF_JcR(yrl!AO0w^vP_)Lh9#i#oRcmOx&2Lq%DbU=;+F!;VB>9}$}}+nGbqbLrX%yat_4 z0BTe%wO7>kG>edVMRT?tNC$yCk*mfNHo~qxnLpcN3|eD?u~_B!RaG}PH`Dw(TUeg# zgb}C;?5Typ3V6=Di~7Myp-E1e0IeMXL-37fhi*}9rui;8h?)pA;IHpuj~OI5v9Y<@ zNpf@dL?(&*RdTT@z6B2O%rP42tIovU1u-+L-tC5XKH zzM>>XnQ)Ywo7;leP+|Xye8X!tDDy^wNq=8Xhlt5+=p6AcS5=`wRZl@KPya9Z9`_Mi2b%xzN#^{B|7JqdI)L^c4X5m=X~6Vw+4TZX0xWvm9djfqz~55ie44YgYa{D-yb`fnBt%)*KRFRUAkKU)@1Uf^WiGJSwovjHCDkC2(Qa&QDVcI z-iVBhjPvNr6%ax=NxqYFN?IS65|%g3HYqM;8!fj7Do2=rINqiP+0L8|fa*NkG1~&d* zS?XszUlQnX?&c5Ei`PM5=<4aACN}vSUgxFumHy1nJO)$mcnq$JE78z>yxvR$qNg&= zP)japF>0@=`aOA31;HiNwR4MCfZTt`ZGb$NbKB+jwp)HBphXS#fq5~H0jlAFxYv)u zkv|^>2k%+T{oCZs%zS>O03@j;gP;Qf0rhGnG_Py_O-_ZiXO(EpD%(-)PnDKOl;pa* zLRaFBRgVpl83H`w;to-7-sFEXHRC7EpyC^HfBzzQq_%oOj}qHR0KyZx;C67zlpY- zZ@)g<;s+G z;!v71d3$p$Jh2)a+wY3S=3Os;kw|o#G_8Df2C<$1!;A*(f^i=%G*K*4@zwc*;o5@q|d2Z*&X#$lIAnbs%KuOIm+QK4qRZ-PyA~w9e z8W&ktrvb$nuEW8RtwW0#MZO;!hD(VBSm!!BkjX`9>v0r9<_||o=x~GQSD6p`0X2L@ z;>f4Nap1Gavgyc~+ohrDgyL3u9)lBs<)=EWJloUSc*UP6xWKXPV=(>&LEJAeqphUPEJhf4MzfE2eB^dPhw*I5 znvj_kWKH3>C{o_^k2_@cUnpxn0sU?vX zS>u9Se{b)KkPlnj6d>RI)B9$cd!(Y14U6&fq}r4I1kQZ!h|$UGm;PNcZ}<6jcKER; z3iTbzpo?h+7<~$J9UJ?O^=lwxSRohyFvqd!yGNF{EWe-Zzg(X)j67>xFSCTJ*bz-^jhP)jv zM#5HB5rb9I!wQ3gu`xeYYGmBd*IT*OyJh0nFjppuTj;k2{4fKcAVHCNIWJp_n6J3* zDoC@0Om=p`q}~g*OEMqe?9O&7#|U(1~d#1Id*Jp z5Z!GGN}Cc*uH~tC&2<0q>%1dUq5%aY8i#77X0X|2$$J-=RE`-s5X2Yv-QGeT8B?M z*2aA%(4pvWmU*^*i_9j3Ow?^8IjHOFQzJ-x)O%*>Ady9N<$vjOTm=pPaTvj;)PUMh;J_KXU{I``|acasDagMuvy)G5yMGWuB*O`Jc$ z@o-|kq;0*ocbXKa7&-~|2G_>ut9I0!@`aSElS|Gq32SPo_}?i|eySM< zFA-wg!=>5vD0Ovq%HjT@EXg8lSp#(|X&|4w{A>+bZtwJZuk&7#=g!xAiNx^t3!AK(m^d3+&nW8##u5tY0$* zxYqc4eXd0eWeS<&h*)`azlNODlo+mi8AE6E;grgwlPAXy{;)xC&o{R zGjFEWP(cr&p5xN}415w=l{M3@PGjFl@5?Pr`Up#ZtwsI3R+K{Npxskm+N0wRFz44 zi>Wod<6lJfTM$7Jb24*s=v6sQ5I^7(tmH14J<*Bf_DnKI#1^QxPZ&wC1dEX^2XHxa z&1|0(JzBU+5jzo-y!IzwNK8z0oosPZmBtPcC)L2jb0Ola3FNKay1PMXH{R@Zb^u(S zQ1&=SnQCgA&*1Fq4za4Mic$bDUozxLp7XF~T0=_%!Vopw0$~?eooB&)wyB&JbZ{+1 z6>dXZC(;`Ucswq@Hw*dZfmCDF}p9L{M1z>*t=m^frhhs}Ic^eDfb{^aL)&7J0P7rxfst4h$i$p5rYo#sS772zw>>_Xz0 z5NYn+rmD=msC8|gZL`C=@*PF;{!)iL+BfaSG#c<{wxu*seYZ zUKKbaj5~a(*3Gm0TM~(* zdN3ULU^P)N z0KFHd_1urf521vFgzyt?kkqL|L@M>F`12RQ68^5;T0_7gueGI-WzQY~u%S>v0+9a6 zDMoAQ^=oLM)^rsg6z~W192~116lu*Y)9&{x?f_E)35+YLx!G@;#Rq2JuETh;8*p&= zvPA#r3Njj3c*n`Ofn~PkUWW)$jRMj9+4Yi&9-*8MVDo02EA>QqYt6C0BV76}RL#2C z6+OO>(iYnm+3D{&5}3d?&nW|^!v3dv#Hn)b7b{-=+PT|kXY{!3OkW?V*!TD-BR_s( z7QJY&MAj#04xo*GEGel>C+R^2TX%F<9>+jKL`J&V_|Ps)Bz%vWY(0K-PM&^JM~G^l z{vql0gG*Q#aY1KiXXnh%kdgGL!5>r6Bb~HC*8kAhbh!~F$U{7Jxx{Y0ZX0SQ2FgW2 zdakjYCg5WOB~~3=Y=~P38Y(8H$oj5*T#p|;>P<-fQU$&-o|4&P&Cf;c{KPM8K+)ZR zQZ}dZ`vYy-;0`;tq%JEpQ$B20?gfwQV@}0TF?G=N)EperpYUPg3Vn8k{pdhiUOXmS zkfI7K)v*rtg-ZbLHqv_|_9=~oOGh~*i9d__mr3nDwbh0IyTR>x3}K{VHj^V=rRmn~ zr{t@6qMzej!vM}tPBmUZOpl^H&m%y~FaHi$B79v zna~Xt>Nc2-*rj5lU&Mj;Sq{8uw*5W-#)!NfJ10%)Qx+pu^K{sB6!n20`5~v`3kj{H z{CQXDUE_*C19&r=UoE;%k4Kp8HU_K~MtkE#*O&g216yu@tX5!tAYnC!b%L1V-JxIGQ89H6duxcYfm(EGpzDj4Y3vY$4ecC~U>7N;}@{AX? z>plpDU6@-HphPuXLAtLH8{c?;tt&Y(Q^2xWL~nf~2mOhcyB3+4Wk1UpBJ;^#gtB2P z(QUjlP`Q7sTA2hE^zmoq?g!q-vxsQUb=g=$LsG8OP@Qnz@D>UvVI;&(1j9C7HXM<@ zfJi+%Iiv}t2_P#u?qNV0c^!(CaY(OPsOS82EIT+!liQQh)78NUQw6rHaX`RA`^}im z!&T(iXX}dvY&+#Vz8kWa&IFxy0c_$>wA-i`-aZUY9WD#D!jSP65jK5V`ijE}e;w?plP8bLp9BBQg zhnI}p%qAE_^+Srx(4ThAe2cdQcw2(`FW;Q+wwgZ+qrQm2VDLc#FEtXiqoD2X1k(DX zBu%kzaUfx4pwBU&@7kYq)bz?u8(h{>KodhRut9Up~+#2dYEIScYiY;0_))z0;| zPfWSy1lV{K#X0SdbxQuph(Ka#y%Xu~X{Eu~%`N@2EBQpMXv{K&Q-lZ3V zl*W-bgUmtL{8)4_thZKIGB1eqMy@V&-;h?Tbfgn;wyCWSEU*!91|*}gZh*9LZ2UrZrYr5?8;j%!Flmn33QE%Idv0(aZ}%kTf{`+U4y4RRzH ztdZB=2Tf;+6n8DHXW)Z1FC8K^JP&h+7t{2y4Ah z5@-73XC^%toWO^XurSKD*x}^MeDoAzoXs7|3+dz9@)VJQ2d{JIg53UeTz{r$c#4tV zU7lHd?enX#;sJ8K6HQhm#N|h+mZk(ktoVE$ZKA@(xFJ0)?O=f1M+c09y?rEQZqZdn z0VgmN$!n6>Q!`=hL>lgf5i7U-_AaN5E<&PgG&I#*cQxrX8p>bDBS5}@_81;% zX??_c53#OpKw;{tH_~O&_381dfS^KPOL zz?J~$um%Y$mo7bpb+(7(psIZ1wJl@)$~HOR#ijqyX=TuP2VF9BJ9X^p<`Oa{_4?nM zlfXRKsL&<{kR*q9x!nuck?3N7ob~!Of44`J>{2R&R;%FzwUX;A8uh4}q)`5PTPJ`; z_BvOnEo;9yVgE({-D3YY6daJQ9;)@?l?{XKtEpF|#Uez5rw)WuK;ocE*(>|* zR+{5(NNv1*YKgTip9(rl*w(#bk=7y!a-6Sj-n@Apy$*#Mqj3V;9Y}Ui_Qz_YAc4*?zH z)T;W*Iiljv{(e(x&1Ge4<0{Iw((L%_phX!Uh5Cz+>aDzU0y;I$cN{jq0e?+k6Y_Tf z5Krc>-ooFE5&vo`+kJlbMEn}>uXejD-|ry)4^4G-s`RvShNwJysc7Gl6KC^a=Ks5YPT>E}U>;qdYu)%MM21e`C`=$q{*2OT J!YPBB{|}SK;syW! literal 16735 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 Qm^4b|l*Y-d;}+Nd2gIs_Pyhe` diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ad01_test_point_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ad01_test_point_line_intr_later.png index 0e9b861d13e0ff720d16fbc24f10928dd0667e6a..d78fd919f7a0ec1fc96d16814d496d6a077ecbd1 100644 GIT binary patch literal 17384 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 literal 19231 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 LStj$e(e3{MXd%^{ diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ad02_test_point_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ad02_test_point_line_intr_later.png index 72b287f47a2428e89b78bd13cb9b7b5bc078b243..f42040be40face63bc9a491f93d76cf850ae48c7 100644 GIT binary patch literal 17216 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 NkE~Ay^S6D!pY3-CpHo+4W94K;p-^nf zN~g}FP>lX46vI~*X84I%1EC-OSmkM*u8llc)6I$!*vhsOHPh|4gf;P*dOzBh88=Uv z%*@1&+jV4HDiW~A?K=`CeJLgT4;|7ybLJ*98)rhYR?=v!XSZ@=2E$V#JpIvZnBRiJ z&=c2CnfYPSUp&$?l^T8yZ2dU|>`6+J&3ZK_b965=Xo>9Frp4+5;$8J%;rqZ85k~)?{UZhU)72QMCvq>|bKdN30rkb=vD@na&Aj*ul zz+>b^R7yg^DLk6;q&aVEcd`fz{j*7}1Z^}g1gs*Oz{{xG0D0I#q)CixRo))#Nx?5On=im^T;K5be7bhj~Fv+&c z-;#&^st)CIm(hzq`ici4jkM37f1Z|h;6!LVti`J?hA@TTauOF-s4yLw0veSf`*qmd z&Mx&($=J~{>O_h6cwU>RZS%{FKn8z-=M1arEu~?3V@|jx@_G+HYwv)k>zJAGc~)4w zy*cuhT~_+*jPU;b-xhrqrmBTSL^8V~PGlP9oqhlQy|Y~gadb2_v-PoKd9oGG>&y@i zGtv8w!9SsQk2wl`vu84D$jjNTVqrjJYw)RWt%<79&kK5djZ$^fZ>Nv9XDet(PrYLZ zn|mRGRraG1&2)5hwi;n(>cq*f*YFM3nk~8zu#U(`X{4rka;9H;EsR0w6r+EFQz@g?oxxdLF`ci@JyRekB)r&{JC}POHNC3b3)ugzaXdd)hyjiQy$FPAH6|* zt?32bDdFK9U03@;){KqcF(KRe!O;$wL>$*d50?4i}r_- zSXGZ=M4@&lFtMOe=If!pq5O})?)#thfzqQPuZ}#sC~3UPtS$;Ax4j;<+k#9cfBg9I zJQj<6RnVBe`~EGYJSz!=kEOc_yF_#{x^#YIR*dbD3c{Z&De{qm!rdJ71k(daKmN~|uOCmoE^2J=IiH?Ga` zIr!E5u#y8m@{4JM%=BG!V&yJ+yX7#)WiM6vP}n?Dz&w>@2yx< zIItU*53JH7{Lr0}yf;HLHUI?rk6$PB=U3V~9A16*kU8rPls_&ck`H;$Qim?d6}!A) zb!3u%fkW5X74Hre;P=|?wt&yqty@=PzpALl{#pwGzRaX@%V87>&2>%b4x>zZ_(7xeFBZm>v&=1-otlNTb#qB$HYGOxmex{r<#@Cc1L}#sJwagm@Y<_&l z5}6;RQY!9s>cU8`bd0v7y1(D5x9`|7t<8H?>!AS=lJSE zaai5ru~!p4+fm#W+zg^A$;rycE`O@OzIxq*h=_>#AwwLa>8p!ti?nnEcGuys<}-pc z%y^{H`NaYAW8`l3BKv`xTa;#*y^E0z#CAFkFIdsj)9Wq49r`$bno66V^Wn(|I{B<{ zXx*yWhgX(FT0>i#8XNnI9SDKtJkemZfF9p^=d#A8{mFQY#70cU9Gyq6}gD%=z6~ z7>sA+L9MTROXq^5HBwT-ORhxkwu?=jj(5&1zBqSu83=M8zXoyH|GYg|Wk3MX1y|Jlj>w4zC z*&{GeXsD^VxuW^oSXPO;k7`2=dkL5$zucQ_n{HB~iL4NI7w|v?fKA;@ut3#ybmyWo2bYq7x?O(vNTi?*rJ^n4o-CMMWi8H5ScScy;Q6 z8cy2421?rfdo!EMLF9zaw_(xwT4*CtF2KXUcG_aN$*8`k4*4k1vu{aNx+t~wXr$Tzx@;zTjt{8 zqOGTwG&VLCUp8QQlUNKJT+_iJBbj(PriLeY?D1?@emaf9AQ>upH7nOE=fN9U(NE17 z+5Y^8P-h24j~`C~fa@?GW0#=`i#}1n(@R>$<(KzD184jGOl+kZQ}R$8;u-e_&IwMm>9> z615kzt}^@mWE+O*vzGhC1Yai@&>*`%Tj{FxKYQ(@3)(!UBAvqp6D`CxVgSTO}s0?q{PF0Zf@vvtZ=onTkXMu zcdg#!(HEVL6(*hpXT>N!%DFW7_N*H#`=fE2mOFXY!*%jYj$#;k_7Q^N+GFrTO{9?~ za-)jKNC3M`J;L3pxEv9jH`zFoXABCnj?>( z4*WTB2s2CO0JwQx5EdV^g8M3BW>Y2Ddgz1a#3zIdCj*j*w zH7IWO9!tV`p9Nmj!o)7^R8QTyWec~H4j*dx04Fr*=`G(M2x)z=zkwgxC%bfPe9*zc zq1CyXr)^@0wlE~y2Jnvj?T*MOd}Aws-PVzzw3L)az};lP?ruMRXpW4GbmUlRB=MEx z{GJshC0AG1pUYa}kkCa23f0oml1I(H#7i*r^-G6hBsK3&q0imyr zjpt#@72|AeZ9D4Fmp|>WClqFH4(mM|ZfIyINq(~3*y&m~W)l4{Dyn*sOUfhd@~217 zrl(!zI*spNq|K8#k6l(3Y;wc3ct=1pa}tt3DYXLwNGO>oR&jTC&lc)3Kl~Ev3=w#- zUWG3$*WxX6UGy=}JUQX&*5%$-1K{J$jkSOU2ITo1X9nvK zW+asKq;UkD+jaoD%iEY^R-ZLXt_Q#J)^#=WPEKlV)h(Mo8_FOfQY7zX8J&p_@JJ0{bLB ze)zDnU{h$0qhzD0Ln?W%_!R_E1M1l3b{UYD_x@1eA`P`hrybLsO!VM{(7#zseDX+C zr)^oyF9Z)TtG2eb#{LGd0&DBTe?9`Hwt|NMf_oAbrRc!Vtq5SJ;5GgI+us1XuG(_= z0Dv>O{e3Ju0cx{cguVUqNn&Cv#xTrSn{+MtJ< z@c!F})oN7+1_r|0I&+hWZFpm38j&9H6Knn)R{VhCA4VmtmjT2HH2Ty%`@G^iVw2nE&Wpykr1I;4+OwHF*$YAp4d5%nfn1JT?MAa~E6J>CNk z^(1L?|Db(s?s-_M$MQ1*nClZ>2duH1AQTzqTn_2>8sb4Q5GikW} zuWcRht`TK{30a1YE^j$Z8IKP`M+%|NfYO!ZH8VIeUeMF3EExMB!GrNc4>3%Jk58`r+h;j#n0@_ z&aBLfRK8b}*64!=)iQ|tIfCD{a#uG{Co3`mNsf1w=s`tnLcSU##phkB&(10JI!WZ0 zL+@zsI~6yh|6vQuDoJBm4tLg7jEKNE;AMJ1K?C0$E$M|z%E8MRfu4dJdT}aIVH~}Y z<%2Uf$eBAcy3uGY43TPeyH)Dp(Y!86&HVi^7Gxag6}M0{etreBA8)qjf+CE7l>NfOO>O0~Vzl|Tiq^Y-9b18m{XkS3?WtHg5;3wcgV)p1 zdHAum){+Rw7y;0sO0hRL@T9mCTa%NMg)SZ4b3O^aP6InnQchM~ld2_gV4P5-1*+fv zO9%jl30EmnjZJP^!{>9)1>qQY?1U@mCufu4rwGEnef##shkeepsJG$!E7qEU06rhK z^n?ANe%9A}iYPlfJFyGzSnPYsO%SYpB{83<_*@-I>1*?IAV{BwE_fE99VegNL$GvB zgrM-jg9rB<<*}W-CMOqVI+|SUT@rby?siK_l9jC^c1g9tTO<1Do_stGmptArW!O{V znQ4j{&ujn9Upk$iJowP;5zFt-)5r4F0+`qMBGaffdOooJ3wf9w_ttnFuW*KjN{uP-KMl!$swUu5Hv)P{5KJzXQ1=QeU4pqyPzH|NhI zz^tREM?~aJ!8jj8VGZF$OU^c~L7|kerE50+E4^ja6}JoZtf@swYBT-CI8)y*M;`ua z4}}~ozcrGyL65Ev&n6#S|BWs0sJj@H_?(mAhTQ~uiIa&2bh|+pqjYiLssB`B)@FH6 z>`N`;sU9p)LR!@U3)UTLJ3%-DeXzN{{^_SrpDsGCk=UQ8*6B%YRH^A&gW_g8?pOBS zBG}X+Y5bDs0cc^+6zPp6FE@8(8N5Ecr=i0%sR3k_=fEG3N{JgCwXGY-hk8Pn+Ms{B zE?41GZ=Of3d*$(EC)C~h_n}sEEAABuyHo&>>YyqEzlAEpTgF6xhJ>R?_k{K$EG+!9 zIXZOzZbS8`=j#q=FhoT~fh32YfdQB=*KfK~^ys&!N!Ol4M8XJXBtn~0^&A7}Z7(ZO z$XwvAkhwkx8vfc=pMwvdSv znP_E&I{r){D7=#eMu+RJUT#tUp`pRsXBriR63*zCZ+Y^b4*h-&%CW2XA>qtbT+-km z`rkfmS(}0OjF?eH%V=iH;bQ;gVV$WByAk-d7nBrG8NhV`l}Z|~V{f0n{M+(Ow+`Ln z70vhf-aaD@$~uT#S8>f99TyHG-JUD|x9IkZW(`uPp!s~K(!k}~3&5vupRjQ4zZ~ID zB*J>NCVUUFVT@av$5sFvy7a`w#f2>EIJMVW3v)AA$V53*MXuR%0QR0KKjl%H%-t#HP9%6EHQP|8Y8uf9sWr(}2466QWFX zbt2=P2riG(o;1w0 z-h`ZNz0Lwhab!zkE=&L$0JFsoF_-c{B1Y_}`L}$FPcwbVsq%^%v18RlAB76q!xl7ex;@H%^G$K0PG997Mn-!4Fs%%Tmh#NNd5;PmG$|(e52{O_0T`YDGk7FFGAb$w7^Hny zG1kyY|70c1Dlx;YP zi^PCm1Rkd)p#uo_9_6iDw`S*cbQpprW(~+;Tt;27h|lM{d>3XCjGPud#Nzar%<-jp zgB+JA+^HCjymn;fYVP&SaBhg+DH+`kNX?_XBWyQuyAN<~qvsZO^Sjbf}I~pLOfS^6L6hi#ow9Qp2434 zS4fWC4LTeV#DSJ$cryO1sI*K6={1aA8=ubMoN+ejtM?4aK#rHMT0T?I5tHyyjKnrirW&L8qfpJ zgmAvttS+(ZOXoFtFq*@F^2I~rJ>+q82uLD&w%yWuEW5gc_5`>)cna3WH3svYgNEtJ z&Z6e7>1So4L@Mz26Vy!%CxE;+v{fv+!+!m7Ye1gT%kos7UHZGfx-8A@(#4DWWM$2k z=HizAqWEq?t=S%YiUf||XhMW~W3Ek8?v*dEE;_C~g9siy3xnc)8THQl0Mcytv$>h! zRepAfT;fRzVyDe#_LRkoEL;sXHCa+l;uD1L1n%vqmmgy3-{*yk8dH0UK{5ly(;tQ1 zVXB3>HxMh9s1fZ}RYQ0da!PzH{TfJ_&@&X2)PU zL^U#qBLh*f`V-J-lj3|0mu6&_;=#N!ajDre|C-&mzL%>XvpbcX|A5*;jvKxyo6)i; zyAYo|L~BbfzS{hBqI+BMUm^@#B)}(CG%qNT2uh6+vvd1=Vo1P753S(pnge=5cv*;p zl~@7sjKJy+`-R0H)v}4&eQl8~-bNpIoYA!5fsi$#e&PK#W}AP+M~T}u1~XZTtl<}H zK=CFb!Z@?rA7Na#Gav&XxlCNN)<9CN3mekcU6 z{cNZEYkq33K^@d`v^QYt1_&#}&yPF$rP_DqkHG$JQ(#9YK%vg*fDi!`GEl$!DbxYb z=6U0Z_mu=3M1nJ@J~BV4N>52o#bmRX{gN+xK5x3B+a%ywVrzO+d$#4k%p551on>yh z-5nh%d3J5KaIyh{()C?G!f=})+vq*Pk%*gR`>8Jtt+0ng_EbbE9y`5+OMA{Bt;z?o z27x++AoL@aRl{ALJt0yfmn|%w!6D7HZP^cfm_Ogt*fT>k7nKo5*n~F ziXEsuh*DM(4aW>Z6@GHF$QhEAU3yfjZEDJEgs-h_GO&tuKQ+3gtiKV|X|26lyWIf~ zoj-Ht%-Ktl`mwt=Y4kdsf@7(11xp@nF@!*eKQ0CT!S#Xocu7!c4^enAaaWm!a?RvG zgX-$ltD);i_V=7l`G)on8qt@$(9k{q%=c|^?@caJhg~LOaD%F9LlIA#4Ml}QiUb;+ zp0DrXk*E=CUWWC|0eizxhfGV`37aZaM7lhAD}#9FmDtgwd#2tad)PQdm3kIu3*6@h zqEhuTP0@!ClGi4*g%z2&;;+}&U7(JQM0ZS-#gof06kF)Sl90c75E&WC5#7;=nUkeh zx4QBTpIiJ9lFiMa>dX!6<6BYD`&i86{QsAeYfEt$SACIL7U560MC2r*BAmJdv>sqz|=)B^SF=>`H!j`9eB zX^j^rsY(~ykyX$I>U}u#WuByP{6H-wlY&a@piBp(8@<^i7a)yqsuS-?Ly{AQ#cs(m zOLKTZ(p-th_<3F3NKQ`93zJ-{&e!GIP#w&?g?!N+EHcphA++H1@%VKmlLjGkWoNaW zT9x@uymA4T>tbFYtpedV5AWaKRPs&(1l1%NS?@<>KJT|ALU{`D zvM@iSbV92mR(0{9b&2*zJl~PEXEpOo&8EanuFgg~>oLlY_MLVL7@oVvA5?4pENPm` z9qV<{Z``M+DO!+}G*J&hMKM=7nQ8@3t@db+v*_<@EHN`C`>x+aDHT)vdIU&{o_7Tpns$pWeKKLhnM z)6>Wkl>h@A|D|3%Vm$Na5#vq7=~ue+H;WiJ0-W_fTF*uk^EuJOfGqltUoc~8zxeMc z(csJ+z{~G*KAe(n`v6{YD~^m{KP|Jhp9c3Y4rb^}*XN7fiSSwjDz6RFevwPW=KkKA zZuBpx8H7sy&c6z?vhE@LE8dqjAH6J}sWQZ``#r4O1tonjQA_f6b8oO4_(&H@jR703 zlrR5bEZ-P{%-lg{SA_0btXnq20VhJNWw(WIg)ES#j%i)BU~ zFaU)P_>o%OhQH0I7i(d5_I+SR-Q|3tvvhX-A0G#FOy%rZWaT72){HnVPrTB#i;gI? z2I+Zk>mlBWnYjmXadBhzZc+#j*95EY(pX&47hqbgJE*NU`FCw$ecxpW*dI}V5KAE= z-?4{|@epGG$k^I!@03-kMQFU*?6&YXh_nd~+0SiDPc^E%-erME>7PIAf*A-S4lj#! z*o?NYg+wAK9J3z9AuWWaL@#if4RiOI@BgLgI<5M<33gl~#Nv;^VaKp0KpuG;TuN%e zHYxfxb*G!h6;#tsSuwh%J7 zlvj-7{$UVPp^X92az_IeT_G^6RNq;a10WV+1%2%c+id7>is%M^>f8hHoyNvditm4w zx*{sdKmPS#W`V?k45$%?FtZRM{JC>&Y*vWzYKVY$sEl+T3@VTg%Ya?1#rg_x1jEMU z2nO%^E}fVc7aRWBBJ~MfC7#3wTIvl50lVn98if*Im|PIG21pVk?d9^S09Gjc2FQs3 zb_yx#KLBFT7B{rL?ak`=+y%KJI^a-vc8)M}Iw@~f*2YSa2)NqCM110V`A=v>gD7O+ z$!G2Ji@$RMK>U<%Qx`0SpyPqs7TWjHtisosIzrC~z!JboQ=X?>iud+LgwSGMmQ~+m zB3Yw1=pcyeA=f^pB}?2 z1Z`+}bi|T0Q8H-@7$}?k=FLecGB)7XBjML8Wrc#?S{Uy1yFayE5J<5nw z4GP@@AYD11C5is3&~|5r@UlBGmoB}4G-YU!D#RhP$)QKx^I+)15I)cVtukE;I@Cu5 zq!@elu%}s1bLwunYIJ)4DT7qyRpwxD=t+v*GC3BV#oJ+fN4-AITq0g*5#dD4SU?t)RjFE5AJ zwHoa&&RCqo``H2~ge|b_{7W!ieYD`~SF+?UX*fB2<1rmS^UQja9vfhY4MPr8FY07j z{LpR5)}wg^2pnMzB!K~F^WomEHDk$1mnGZ1-NNi$skB9SXtX=t6=3V3IiDhDzR8+s zNkhjH3T-JCQNzK+Ykvw>G8Vku zY*{3v0m}h;bOnIgn0K*=M( z@V6kSR(&7bbNgSC)8SRuZ#W+WT`mt%0J}kjF(}_c_;A>7Wdl!!o%7~&x`2Sje9xJ9eprv^$~sI zcWTv`b;G|B)>j4@(*|+J>wrB6@v>b{*TxYTc))C( z#E$iV>)OcLCS_gAGUuNl+wThm2tWflH|VX!YR1{blLwI}MG(Ec=Pp%i|MD|eh8+oS0bkZyvRi0Yob#fBAo;;yXh>X=QD5*D*0sLvW53#M=L+ z1E1OrG1pVOH-SwJhY~*nK_a_l9P>|2eOsCFy}Vjx2#*8DMBvp?FRuf1fQ+~bhyhOb zhyNCk{11o4#2lbiY3UPsONE@lpO(52F{Cq=7*W(ar`)DLUz(mI2v~h#v3awqW>RA| z1NHS5eStI>hM<5*wV;7VXuUti za`wi^p_0QWh_n_Y2PxrG6WUvYm2#~3+830UOiKnLu@n`H%cEs{h>u~)D02We1TlOW z2cPbtnVLz8Fh_813GarWmf5GN&^PfzL?<+$IJ6bwbM`tFYAv_&JDtwl^h_V62eWU> zc~Eu)IOf{OnnVHRyu3X0aVW-wnw^tu&R9dJqq5%{0q=@&s|>q9wr@8UgXF6Hux>YzjItqc;gfN+TC4h1utc*)4 zqNJ)+DuZ4-KhftmS0>%rBPG?@?5GaQ@#4j4Cg$~rbv(g(0hYgCN=hm(?5dedO}R~v zeP@Rs-_t&&fHkQ-{WYUeZ<20I(F1duz=&VvdU&6G z_m$^!5$jv2W=OdED*Mjjr=FADa4JcVJ%d=))}n*osaqdOXudTxfr)tw?aj_Q&^L@1a=F(2spuVD~fc z54~X!%Ly@ekZN`pYzq2_{ohK!?O7mHfPR4}$UG2xlbrc<3~^H0tN)gTbKzk{cr&o! zH_ruU2ulgLWLrd=AvLP#oI3{=APH^~?ZK#YeY>`Xw|*okE(0nGqtA$nT$j$bVQ=d%+KCbIz($}syvpzrqpzI|I*N8YRxX@=`M5oLMtw%@rRC`*#plk!&d_u-kErw`Lu&rAQo%=4>fop|GXQCcs`rtCDBGEF3(y24)`q{gm z4K01a`zC@=uHI(s8lo;eb&579UZEK$gC&*p&<;%$RfX|oCgCKfx4$p~)eh&k=oRZT zU8A^=9i}4~>lO}i-;`=TKVzc;hZZBpvWH^_c_4n~&ME6#3f0Gr(&b4+?thWseu?u@ zYXv}p8!UcuoN0zA^jY`J^7)hmY!qW!T3R#sOeqL52HUOS#L$z7eh_A&Ouds6utl;E zH8%0=a*vVqEANKU#=_|jPxxgtNe%Zc%)~7<&){VzQHm5Wx!W%FNu7naw@`uE5vIYly)IQkvQmj)7{~ z#q68w|9Y;-ht-A&6@21!{mk7R_s8s?aY2`oOA-|oRSF0HDy~1)E$)}PUg9~atNfU_ zq^ql&^7QG`E_@M~c+E)~d_0i9fZd3UvSVZ@74jPphq02Gi7q7LeFl#qW=dZxEBIG% zuShON;jx%qByx#KOZ~*aEt!ez31C*ukj*5eJ7QIkSBII8L1tT|j1-Ps{X=fYL0qmG zIS#AWZ4v<=_cj$OtuX-#Jf|+3+xttOmT|YYQHLQYlixXK?b~4&-mG6 zhhk;Fxmq(fxa3qN)BV#o%jm+>fLUY!^dE&#Ycs5MTBk$F_{*^)z|SzVV<#?zQNZi5 zf!h?`U$3pvHa6xi8T3q%LQb|*@5$8x^5`F51At65f3b>7ud1rL=s5mzp4zjNft*lq zp6GX~Xyi5`+^oy@U842~V(f4wbK-^FbT#(s20hO>3ZhC$TWn_jmh6{p*6~1K%xrLiV zBalUI1IKdnd`Sru&|LG^jI>2cMH`aXLUP7%NLt0(j5pJr!(pgs(qm7;>8WF+p#y4w z3vua?=NgiPtD$fWay_ih-YWjn#9mW!)lev z%3Y#jVk260Vmd<>(qs&!IKg_hQ4&^C^CzIferhxtd#m|;tt^@}jbaprJBlzxr0!bsA z;&JojF0hStz~*c5XJ9(Nh>nBHjF>U$IDkQoB7So!u*xRxEjl&b9h&aM^n%f}oX?Gf zB3GEFBw5;s22v-%s)-v*e^zo;?m9>i(#oc4YHDz^?H~v#Xyr8v;*gC+&Z4bIj=&^n z=^C@Gp()6H-)`9SrKV-xUI1&l=Z4}Y%NFN}YY3B>eza6^@bN`Bg5Bn`LHhg#s1pM~ zG$^lHIHT}Q2_z{t5RXVUc65v)B3L)n@V+`6n)*_@I=f%kZ0@!=?72*^T)JUQr7()x zZm6se#_ZkiM49=1ks3*eD20n3nORx&k7fOQUlrVN=)a1)-WC)!=bD22MipP!sC>DGfAsYnIE4oUT#*spjY z8MI#}ww)aLAZI{VNQT1)fRP?YRN6Q$!?6u3@+42#a`{Ta@*OUSI_zpy$8J8oe2ENl z?|*JWD(qC!S5OE5cnCLIGohVbbWG~Jx+F>0QKN|oXW>2{8(%cVP{Y@Ls`I^%ME*x! ot^MhxtT-5dH(CDgf3V<3z4zlGpRbG#yb4PBwEC%xljhg|7rLM?mH+?% diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ad03_test_point_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ad03_test_point_line_intr_later.png index 249d089cc48f0d493ab5a3b050fd4b72684d351c..7fa2282987b4917b4359e3f30e416528eb60dacd 100644 GIT binary patch literal 16788 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 DYbM39 literal 18733 zcmdUXcT`jBw{1Y0qJR|zDK?4-9HmNEkzS-DRY0W)DBVz%qhJA)svsa;YUmIkAQq6` zLFq~-53hmtK7MVlEbWm?VSk@G&Tyq@Jb3cm&f`zED{=^Q zkFTTWn9e?Lc!BXB{jxT;!XnSkKtlt!bX_!2k_`S9l^ki3J~DDu zlGve@{_0grezR0YAhU=KajMg%HR0azv{$bbke9uCu(vbIP~^4*>*&bHL^ZQRN0D9c zLWh?6#k1Q{9WlpVOB<6NJncp>>UVBe?a8(9KXc~HaYeU*+o@wsF&SBg#p#B{_902{ zA2Hf?ywX@%pYg%Ot&MPUdN$4t*YJpl=v}*Z%@J!9$U=r}K#SR#@wIOOD?-Ymmu|_5-&yqcR_lC#DW}9xVbbni2uaR`9x=Xo2aH}-bSyOEL z@bp+`zNI>Dl~BeRqa`PIpN>T=DN#N+R#O;drDQ}-#URj?c{wqhM{g?1Hd_OYE_EgJ zr9Bt0w3%p$@5#INsA4{5Mj@nPW5sqCv#^Q@Mvq={;fb2~v|wYDkn)2E56m#dmd&iw zy~XN`Chnha%?QB)U$eAi6EV4bIn9rnK0P7fe0>CO`-`(qVd3E}eYV?VoaD%8*snik z7E#;FskW1uS=zfiFE6j)N)@@W&pI(A>5#znS2;PC;=EVVsOS!JDMm@$&TA6GXXecG zm$_k%r)j0C)!_6})nc@bj53eO2feyhAE7hMU$Kb>+iJudj*>GMuw4c5u;m{&%*oXUv^Nwe)GA$O8_+3(;$HHJydFdWAPWX|jkp zUxJG$DJ$#f>gp29*VfjCU008D3kV2&9gn~J4R)eNk~I7Ity%N-$pKuMT+rb(TMSOu z0Y{8LFHFQgJtnV7K_0-p&lhE0ZS2;cY~7wR=`Xz&Kj1|&_F8C_udA)qSY4d9y)i5L zyd`|ZN3?!$AJoWjTr7M>2ybW4)@_PR1ZgK+%2pQiNX zOPTdmlAe;%Ljrc3RYzNU;<;rk62}nMS}xm{20UguH&=Z&)gkD0i|zZ7n4zRSU3a-fdi*Z`O?ONDFmz za&qZ5cC%htn6w$Jz2XoLKe{pQX2LYq#d@ff$*v4-b~wV|9Miry$IuCFL^6zbqx%m2Hy z_d$g=IrQ*~fD~30Z zKU&m|+J~*RBg5K_QcWYDP&kq)!gf8f9%4`d&woW7H8;VCd~Mx< z>CQNz9Py-=#xb;)JOg`roLbFMDxT-%FINWDDg^l+2C9 zKKXYNtm+>V_p=7e(=zfM-*WMQfKI~`PkIkH_L>V7yFdy+p{g%^4}}YRX^uiZNeK(v z7akFD^6c5O$cM!1 z{8~E-SlTwu4U zwo!+@c#)Zxcc##~ouj863jc0%YKGnOtLw0ROY7cHME-2w4w(+W=5bn&f;Z#y)}84( zBf@v#F<;x*e_xho7s!xL+)2rP^ne)Oho0PX016Zp6@R~~h4L}_CGA0!@5gF7_M_La zw4&0|alc~&x%epGP z-~Z>gNUVOdy8>81?)N*sug2M5dwJAcEmZ&_F10<)zQ6S8@0DZxYw8Z)6%@*x`Ghob zpYH1`#NSVG36;PKOFh$5_-M<$LvT3#!cE_|!t(m{KU?u17aSv^-?C=SqHzXT#}n8< zb_mLxDCT{>ul!q5atj-W;cP-C`jQQd`(&m|-|*buxVT;xqdW_r{4U|x zCr{Wb2iaU(ir;>23FFohgj!_m`srGfm`nPacV)Q=rq7;q%ZcPJ@ePgB8Gir%z1d8s z(HU$%!JvlOJcj&^Z(V)83n0dH%zJc7X=Z56u*U7%Sa>V>9T}smVxRghI7ztTEF`s5 zhik6y$Z}(62#8kc95?AL>BjFeoN@o49qE!@F)$aBwzBl#%-O?q?U5DSDD~FG>0ZcG zMd@*F_%2l_OWpT(F&Ef&XQ$6KG^hZSRL;=D=$e_Cb-Gu2uXo@)+;~kZj7CRCb%rlr zz6>d)U7pQr-(vLjk2z*aDk|EpuC5;?s)JZE>gtq6$HsI6;cx;dRf9ZZP-vsmxfCU2 zyYR^}&U#~Qxvr_HYh!)2(4vMe%LHct$V-Y(3-HbL#wZt~MHX>aE?(ZO%U6|@l-d9W zAV{ISygYrbqoadKpwlu&%#CnL5fH|MXqBg#S{E0RQi->*?HK<9sq?~D$cC3TMLKHuuKc8NjKpFgcTLLoxJnkpdN!lr-T-Z@pi*_E-a8@QQgTt!NfW#XILNVNi1O z$d)51BbzyJ^3LxhOMB3u)Y-Zq6%Kn8gSapJRoy~yHvm8<_lXl1larH`U|koTqf{p3 zS|IT`iXLu_RSP}xv+7)-W(ZI)H#h%}Bn-*&`tqrvuU~Kc%YpyiewF&}K3#A88j!wy zaj$mq;a}xg+*d~SBo9xbM_6#cxyQDYN8-@@ z@*Buw%bpPT`?o9_EX&x>I!P7~a4(29&-KQWx1TR*YVP^{Drd4p)(LVd6njzbwt#@k z1oEcl=BFR^ z=g*)2%LQ-a1|WSyZq&^-Qv991p>Q23u)bk8FUmjzP1louEi*=ZdayNok;+h?{%j53 zm5y!3uTiLX!md9;K{?{okuCR!tZhko`HO$P>~@OXJiNR*(1Yk`Y9@q*g;}Ym)&daN zzkh$)1%JAfrpDv{fTBdK05OZrl+SlSy#Xj82f1@)$d7(%ZJjlk6H07wP2xRTMr22r z>!#;x%iMFjHrK|#@tK@j_H2#S2tAD*cp^(?r3pUAHUcyw?PeZ~%9`oVhzJ_sqaSJ02xywYD_JB<`9C?dd7v z*H2pQDXLodt}J3LXPm5u4XVX?z(YMsRHFwc?&;YaJ5&;Xlwt7_ifMd)SV5ngt~+qZ9rmwwY(z0d$Pd%js(PgggBj!i1FE6WfcC^FFU zG1p?$wJbQgtY-LWH$IC=8n7|ac|xJeFfMa#X|(BN|M^J8oz zgoJdU+S)&Hnd-`l?!uU29zJ|nQoFBKY!{1|_TX}p+xI#;*%E)jAlLk&(Y18ESfPEt z7~u>{nVN9~fA>8x?A^``VzW)6NT={27zX6;2hwk^{Q`ol6DP(0t^K@`%H{g`O3AyDbwIlmBK*7+5+dag?dx5 z!W+-E#z{Dp@agu>bob!HLeqYthc(fqMi=~r@o<6QP8YFOcMHqBzd0EEfB`Z?Kot;# z9o2!%#M!s>wv%niu#=hvsZ^+4CmEhZoO;SvrotqwB6d?|rQS5D5O1vXf|zhvGv{Ll z-@-hj$&;Nk3`Z(7P)r35gHruB-|hnLts`Lfv4ZQ3OuPmK3W-y*cdSqWly`g!+;g2L zliLDzw^jMInQorUGUPPAJ?djqo{=3g)*M;tynS)#^V>cZQ6$=dd+D_GR9R<`QBAJ@9F z?6~YY6Tu^C9Hh)Ilt0gi#|N%hK&h7j*6>HEKXJf`n!GLHV%w7=ZKILOCYZ1oUayrj zLHoY#52d;FzwTm5zp$4>;evk@_r`hiTew?ONIQOsGqP~l4{8I@8%UdIam1A0afwANFOoehI%HpB9hDKOs=MIXy;+}p~l>9TLMpZ1Y!+HGfUAbV| z*atKlL}CHZBKN&Mhl-*XUI7VO0OS&fm+3oc>;Gl|@)XjV%7j)y<8%$B3KOIZk*H8H_^}NN0 zNrh*f#;gFS=}1?Qa5EPdVkajjqolk_A$6t}+IHJ4&3=yh%j~YO!+;U-g<>ejmju+6d~jPpvJ_ zy8!8fKtZ!%i2Iq!P49OX2Wz2AP-_NmQorgfiQT1EP%#OU6c$N?Wyu}#lOkHOH8(B!_pA#2vR_k}#?+!FeDbTeBh8I3LtlT@Fd zxd_x`%j-Mah%0yuUVBm7Qz~w(F*+5J7UV>pueQL>>=chKjTek0%C#fi{dxHW9qH6o za)9hQ8M+9Jk>@NPs;9w&h)``rxs z8wgL$5=h1^pCI7Ao`O&D|rlp+L>%6S^H>2!L?M#y6`d(JPaw zoy88OI4B!t&D?x^x;8d8vKZPIH2*|L1V;CchmJLd0(t4ZkT`U!oJUUyx;%--#IzVL z;TYS2Sx@rpl= zzhqd%C4FIeysBM{)knhp!uXgC5RGD+Yx9MWvycWRWTCinT@|Scz;GwQqH#m=hgGj6 zK*UKdkA%8-Py4fZ>m$t-LW`Q1WET&58wy-+Xo1#A(5B;6`uMf0SFNTx(n>d0@XQiy zHxRN0p+(~2)B!*C=U~00CbNo@25`yv>`*mnNq04e3Bh11aSei$*9yY%c9+dm7z#x^ zdGb=vXzyCpgMdRysqQSXSem=Jow3d-op-xw_P%YbTLL0eiV zWx4qE6K6~>Er0n-YF2j{pwc+$_Z-QnY&r)3-ipEm15<#iHx8?=lXX0P(wI?KbmKtD zt>FT%RoCfH`SO6Fvf4>kEiLhkl}i^puMMvtxeu7)#JKgZmPGGeFFAk>@}(LkDmhee zt44EpEhh__ozM9+yf&XGnXlzGgCof;tXan19t#`Hzxe0?8d!hzWfxzI+`&gkL!hRr zdIG?8(5d2@W4Mjdu;<+U&RRKTZtLjDW}l$IFTq5h?0&X83}5Cbq}xU8q6#ehor#@o z7QvJ=cF&up;m%*_)bwES6mu+*SQPQ=nZI;@ep@vb zG})evsf^%I4Pm`~+}(o_HRl(?h6HZ8_d42<*^JliTJpk|N1DN`Wc?lvGRNeWh;Wb$ z%k{Z7GPB$Q5Pnn^39o@dTSjbPPRMG@k;&r9aP-2HjhW4GxxgJ0;d&eKpYpw?J_+>X z+luLSt?K_^h*iX#6@c8h@|pB{TieInwj#SWwv8c3o(M9~tXy0R0TBhYIv1E8mnSJN49!*50EDD@TE?9@_KQf9(g~*$}o-Cq2PKw60U!Nypwg1PlbwUb{AUz#E>exc|VZwYK&|NdZ*jZlFNl z<>ciJ?Rw#}+B?+v!spvwU`dksj1!PwAA)o_=7@#H{wCH4QUe<{(29UnR!(L#q1k{K zDqVM-9G8w1bCW9Uwj*GfX_2YG4<7c;1UL8g177?U2T!fR3LVmW*;lcr*MqW3qBR?Ov%8~Kr?b~PJ)qGge4E=%I z{J7)Go^3I1N~A&l^|;M;(V1=|M-ic)PihtM@Znt+98AHM*W1FltKRVQ^7aU9W1xpY zBdSrs%xrd%7e3Fpl3Ob&Mm%|N?fw_~n%+N*oFA1n%xG0NDy$Cv-15xKQ;y87 z9avggzhZ~8>kC7zc5Z_#r`A%`BQ>?6ukHxZpV6e*&gh9Ti>$miNa9(7Zq)2tB}SkOX(H6DSRp1`PwZ z1!z^EPVxc%r7mBg(wp|p9GY(W4^6^_~_9#$liBgh}btqQVd*((tM8Qcet|2Gi z(*clNWRCUZ%SWBQ0F!wol`vLs(T_tK&Om{vD@XE464pUmFiKi=8TqjL1P4c#^v{?@WjAGWoCPOozn)P%ERp{-Ip77Yy&NhnFp@?j z6gEKrAYuhHaVi<;2Nn`j;b`n>i~Fn|Ur*xzMAd!x(9&({lZC0=Fo1hAYc>QzpfmaU zy91CyMJbn;+thuSPOSkjMSoMYt_d2lTn`CJkQ9HHzXeb+3vYnz~ zh2cjr^x`NPfjp;FLAxkZr*S2_9*PCLX_@nQj3&OTHTKY{+aPivzTQSZQPgW6+J307 z9fS#i$k~Nqe)p23xa-#^z0+MUGpkmd<#W6CpY8CL&&_L639X-ek|f5$OM(geB;2t! z8jbcFJ=YGb*~DaOT$jfTE)^K2lYq>j6X|+Z$N5gGEmSKB#Nb17T)XrW8vjapcpyy?nLFB1IUT)Dc~@`Px~g z{xYo?6HZ8tFpVGNZeVSFr*V@C;ZC}ZoC2wK9%P5vuj$$s#-0M}(4rfk652u3k~C<# zWz?!G)j5EIVbS+_Qt@Fr`GVB;s~=bz)-gVcl^cbo4&_HEX)9BO(9RVpYF@9p=s(mP z?GoQ`@+q;#5ZvblSXLu_xQGpGai-%(84z%D^3*Bl`=bEjrzpb_OlmGRLPbPI@^Eu= z6E^R@YC;nnDiqratjX4AHkIh)pL$lL3SC#Z<4w$1I=OZ}6XRAszPP-t)V+GoG_SbP za5qbc7)Nni4Lu#E^zh@QcPEClMt~WH;rA)#^UCQfBP$wEn(J+Iy)bUNRt z(f!R9E_>=&KpSdbTxL@a5+}`Br(;6bzWo`Tg(QK%MjL18RPX%N{X%AF^SGA1eYRX6 zlMc~rO1~NAVDRF)#>UQPr!B&sJYisbt|shO+?&N~C;{>cO+IM#1T6}T75fqkckA-Kc@%IeUr|0lg?dY-e3ES`67?sTi=vy zb+?i{?*zX$sPxA1!E6zz&yo+?UVMdtY?5g0IIqR$aQ^ut>-RH0w~1QS8|9nk)yg6d zS&U%mO6Mn8&puDPwQPBtOKV~?RA--Wsuc_u%t(d^TZiP0?>Z7^;1;!jW^0@3%+S%- z*B2VVm`c0M3>eo(^6TBceY?{gxKtoD0FblYTTeM8eB&7+yNZcn5e|mYQ#vSBUwfW$Fgi=Tl1ycGC{SDg8nd%@b;x{*)I z#Kff29YjP_^sIgC_pr8$V<>?BKIgrO z3o!|G*2i}#;=8;~vFmz`e^m}gk2b5Xln3j2rf2i6R*%Mw#;ZW9rHe7asjX}tHMzBY zX`fIk%cH1j^+oq7bp;TX@$dz<$8JDlhH{V0Hz%8Jik+J&Kjt!d6t|Y=Jl_~n zzrRJE?W~Yh3;Q}UDjbjV$p+Qg)MtOTE*?yIf;{VOStNhz9687j(@20Eoe%^D-D0fw z9NhpgWIMTi-FGSVec6J`r_aMtGD!~7+n%{xk9x7Wyz@%=`epBgTgo5F1VIurkzGb; zTb-%IBr8WwW#%_MoLHs*%_Qk~*)s$P85SvMrBbO+E2z^Clq`=$Cr9wAuX)9vzd2BT zTS;9#xc5B698U-3Deg>~B-)P$)W}a;)rE1RVX#UB%^KvEw5fnNn8S*B`B+8cR$R*{ z0RtfOHMhsT1&S-J!AJui&XfFHAbGksS)4$_zhP4kL28MgE*|WH)pwbD&xj8aC$uy? z7l;H5eI$TUP6DKSZ!8LTu# zgmG{nK)E>hI^VVe77WSTu3tZvRLDAKy4T`vS=_9dQTGWcb)%1M6~CRQ-CJ#J>;!C_ zAtXi{7EXEJclBubI&=Ft>6bdDgm!rzsm{?zqkXP>Xuhy9R_#g{^FP5XtWdcUUU213 z*wZ7p#VBAA3K_khemQvR-O0%I_(y6Esq1mn&aIQvTpN!+@A=EOBrKBC*d@H97*pVl z6Z9xrc+c3DRV-{YM~%vTh_s=`=Yz(}M!Vm^xMQ80Oz1&jAHG|8aI*pknVTesro-0w zt}A}>$MqJ?dEG9+*wt)X91Jjl3Un&4H=fm;0X8`1cFMv;A}AmBxOt#_hqp{0-30Po zvjn}%oj>2Jim4D8pc&|O_%@=&vk~P%s6KD+_?BvijO;0Aw?&KQ^v7<%9F@&y3T3t>5ntnG%=!w(gVK&_}S!+?SzTyI^TPW3NK( zx689AUz$02ZjiHVzY5c^5&Nt4k;=#96e5j|PWN&)#__Mu$F-sUkw=`eLT%UHVWhpY>bl17npnxM1Qti0lbg^krV%Q#B)`5{Ms zlpx)PJ7voVIhl2B$dLVDj+y3d>_TKE1#RVwSMVEp6ce*g!%_35&9&*Tf{Vok?UUL- ze0}iRL4N0oR!wpwmGrpV>`S1{;BqD3l+w-$9nBl~E;;%+nSHtgM$>E8W{dc?Q7NcP z>@JUYayq$!dc8x*TebltEuf33Ww|3G10w>aGqR;?jc`dt_W;%YS{PrdeKZtqOH{jdm<+gJ?~41z zw@aAE&u&A}f(GbCo{Y@O>R|GnZGMrih6PU?9q*>zHu64uj}0X#vV~62+e@S1vu>M{ zX0hhZeOhCsMjBrC`0%0Ld%t$zM_;`g;jGWN8`NBjq%1@G(*;f^(4#V6j>x|&H*tXZ zFQ@`|^s)tGdS~ckJ8o?(S1}87aw=o7aNqZLJ;DG3^-C^CWatqrD!P4`hC*9k-|7rW zWN@EN6?vME&t!T=lI!$cOVZdFmD~E4r=#!|7G0+cj))dJioep-Am??wKPyxEnrE?G zP#7@wd=;Y5VWVE`0QTr`%`f7%bkU$#Q!~hFQWN9o$hCoDXT1ag%ooW66JStqdatj% zcd?ICj}lRzYL`dS9G`Jgu=FCH-zTl(MC8Yn;Wuy4-GBFu+~4I)cFf$FtcLBs)2fyz znYCP^I$DqhM(;4%evr{86}Ql32%3&Imu^MiV%DT89Sz7EHN7NM~$a4hfanhaKKxnkDWMmBFmU(ecAz* z6onE7aRZe*uB{K-_Q?|HB5K;#F8HL%wTq=gcdeS~P%Rz6h5k=s#0w2Cq9^Al_=#%K z9P4<~Hc}hJe}q2+K_VOAv@?6#Le0OH?W2+EWz8T^009c_kP1XDhr>s7r)n z=358r!uUSI*6^{0 zr?F_IlUz@{XZ@~N$j=PynqO%YaK4hGpwApD_NfVx=+ z2B!#4KQE%9s-zSG^Xt09bZikDv((lr&ek&~lRdV{z#9xSV{!%k`&wmwNJ>AFQ5+3< z_UvFdNzzjvy?hNJ8$Ae5@6$&X-FQ0SnSbk1r_`6ofA06D^#?+?u)2tWmu{pl1dH*pKmg9`WV!H8Ko zSYppw0~-pJ3iZZHj*exAD{*5?L{md!_G6Lh+EMpOMwIXU^JFxF+qO`KK88!giQT}Z zqQ2|~Q6dv3sIL~y_Efb_VurojNM_*r`R-Lg4pX7Q0 z6j#Z`XM(rPb7nn=I?!9+kG8#F6VR6%@Z&jW56Qe#JS@sk9y~bTOzpO5kJAAebee6q zRr5~N6`%uK0_y52c-QDy!|cm=^_P-Uc2k484b7)p)2+ z?VfPlO8S~|go2dm$4F(RB$&(zyEQ!9T^>_kxv~Egg#~U21gQX4;is1}%-Go`We)D|BE9l7VB* z)-8@VfCZwE`4}n zI(jg0tJc!=l_CCPwCiuFWf5)$nl;z5jInVddUVb`y*fDNmyCp;oBL@}&WwZFa~md1 zvzYayCN}ufaz;~{Z%+iHLa*+Jb~6Q)tLe>RFy#i}gF#zyjU31>LmMRp2Y}K<_rqHy}wHfEH!{e z-;SLI2`P|dz=IXrG)%kN0@rZzTPLRT%^#Asdkt#A-rb^zaps7G~gF+bDVhu_@e ziZue`!A8>dy&N64sdFItS-!Y+A9N?c*REcVOgra>k`HWC9386@IPUF+TKBF*NE28I zJxS>Y7 zhaR0cK3GOQ&Q z20ANezAHbDH1dLwmS~V__V%v4D^O;`L5~Ve1WgEhG;ryC`IHH0$FEXAveLZ~+C>%uEC^Xj8)T9gUFX*IS=FCBRuNVSo@D)%l9e6M5 zod;i%0g?^@t4zE>oQU_DJ3>4olZ@`wjxky6@Sz{@1jMXFhSJ{B!eh>e`kXXlYC+h~ zqdRezmM`E41q%WH34uTXrY~NbLl?!59uYHHAHU0uM z7(irQ=zyUQNrKb=s%aalWewb6yIumZ4E8x??eQEiJ0z#3X27~?#89JNE+YyH5cNZ@ z>Uy^NkSDtZdhFm{%C&Fx{2*gXMaW^0kw9bu9Tba@{^KNAdaI8lWX24Q;0nC(ZEUgm z`yIyK%cDeEH}WlyUsY{NcjjHI5Aq-Y*Pm{Ga2iNr z%cjHq?!$pX6@;c3aTky@u!(pBnQRS{_>iQx{`48314GF2;IjR@P^g-O|I!0w3Xwnq zlMUvs(_i0qKqk>)XAmXGzgp@A(_^1~@%^2LH1Vs~uU_p~Vv7Hw9)h@>zyTtxH0PGr zH}~*I-Me|rs^fxH`^TQKTkH&%Kp3BetqEjK1tW-UbFAbPm^oui1jNM+rI%~fox3hu z#U-?e*Vq5EZ6->F0WmTCk&1(gIqLD?j2Qh0^=8vJ_FO6)Smuv$#8Nksr=UxDM!!4h7CqN&kL;hPN{mb2g_-O?1u$x2S z06DsbwRIZkCKDxNIQEvB*?^<<7b*QymHrFH{)gcDH(HJUXB94r0`cDRT|s)-oNj!0 z@3e3yuRI(f8GA!)6&*XnQ(%v*)Q_A*;Fn!)RIeD26Y$!b_V#>R^43-g?-kg%Kl*=uMg0+FB4DX+;a$B}lTMPz*;9-7t7LU`+i--1O6>BrCb( zSpk~mA8_g77R@p&%NAoz{P5jO7G_|RK|w70`&IwNuv6wcKR>@^FTaoYK|%6I%e>X% z^;1oqmX`JpYU&@3q94@8FISQR!AhMyf|8sJOj`E~o5c|q3*WM51rr!qFzF7ZzZAO& z3GY$bUv*+0jdNjAS5SBY&~&vC4kVx}TNY_o0*vRN%LdK|m;`Vkgd~0W^5t2hcAN`H zfe{8A#DhPG_NhEIcrCsgqX!emE!?|tc-acN2AvXB9o)FDE+#6z28rNcgq3%dkXS4g1cM$~Dj~=OTMwj(Y>)yJR z3v<82c6}weHovsOFcQ=NhOZE0C?LOqqCVw>u|p;h;8eBmL?BRUrk0}O17wuOU%94< z_ym5z4!FlVZ$H0Uc~lkB;t&DGIIT@bL{;oK5&*c}!KNR?BZ%%9`HlDhu$|xs5ylQc zeb8`p%!BnyfCDr2?G(hJ?@|QBA_afUwjpi_5U;N!?*C3$0HziY%P-VY&j<+oj>91- zko7lxHz#O(J7yjqeVf%otJxiqGzYRtn*d`E3hb7jEQ=PS{V7MGN<|pWhpgNCTs* zb%lfJStVWp(wutFXc~5vlLVzj@LJuzEdAW`>JoE*1H+39mqFeBSC5vh_D?CL)bhw) zM5xCk=KSi9&R*3VjJVJ&ksxs5tkjchUw9C(koO~zdI6Xo5n2W&~0PHOZ z=zV2edNU0|B`EqF^BYC>*NQMcl!GSdEa79KI|+Dtr5&u4&j6AmzBEK@fZ%qRxe3`z=3M3-?i5cL}n4ly~V%>Ys4B4BkuoQB7HBpwNfVFy92%t{h*$Sxqf|x z$kL%Ia@apOV^O`+Wx7YlXXz~)Vp(cemo|old%RfC0!9{!OPr9fLxAS$xpCy(D zoyCaJgKKipA`ZfHpSTo}Z!v%@0tH3TXTuW#(|`^i^&ZWE2^p!+DHw6u$IN)jL!%MA z7#7t4J#G3%nQ5hW>9;zbPB6?NUu1wl(*)7{YDAfUEDk(DHd8NrSAmHaQD=wDu^a2E z_o>XXXhn~Qb@x1f4(pP7;FSK$7cUM24wDDNEC?JAz$_lT7td4FVwk!p_5~yH0gm`d zP%TD+qoRHk6t4A%IUM@1=p~^UBDxUZ0n)z0Hg`mtdLNqR7D|V?`s53zrnI_gBH9H; zCebBpf$T^{vo(Hwq|1?-oU9+*;vh2LNZ^d~)CBO|8mk!!xeB^bJ$44j{oUY+gR?Cs zVE&E<5~PM^&hoYQ5BH;o14W#X84Mg^!MR((EodMV@rZdGya{Z`M<2Ox-wKj|S!Gk@ z(id8-vdS)iot&VaiHCHVmrm;rC>OzyAhPIyF*{dt_M8d?okQh%5waL}?~)_J7rZ0Kj5u6ELPE$LZKK-Rf{fY_5tOOt z+&#ql0^eD2E|f#{;bKRNtmqE9|JjbjbPnkgez^ZMel~K5sr!7~y?oa*_hEJ3+@t-S z+QDUg)O@;2rU-#y}dLw$WlTM#MW=06_$0N>u}p#Ly| z(;nO{{%_uT?@DPP;lVrtQL@DZ7l4Lt7qNPKN@W=oKKvIn3N@yN^0K%v7>&5NxgY#~ z)lc;^_$m>nAYwot9}oR)qefhJAWe>p{NqgizT8`2;?LREFViu&!-+DCf1yyhfh-7~ z-TMJ@z?R(ufLO7s0aE^Nn=t6|1M|9pv;Y7A diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ad04_test_point_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ad04_test_point_line_intr_later.png index 4c31bad41bf989aa4809c1502f56567405c0def9..12441664ac4f44fb63a869809df7630e1dd60a7b 100644 GIT binary patch literal 17639 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

*#sX@1lY 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 B#J2zd literal 21565 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 OvQoDs^RDaP|9=4S7QveU diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ae01_test_line_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ae01_test_line_line_no_intr.png index e026d7e054a5284e13420d847facde5388ddea66..52a89ceebd6c343d3d4fd368fa2c9ad72a2f40b0 100644 GIT binary patch literal 19328 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

R2T@y72D?p@QI!7lGfbd=^DVUIR5bYN>hS7ru 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 literal 30689 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai04_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai04_test_one_moving_one_stationary_no_intr.png index 2d15077841703d2f9865e0be13e42923c2e9883e..cf287af03c8a412e654ea9bc81b8d62b83fc2404 100644 GIT binary patch literal 24095 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 literal 27658 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 DeEB-s literal 41040 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak01_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak01_test_one_moving_one_stationary_intr_at_start.png index 2e8036d6f475fe89411490754f18b408e8d86a97..87a2ecdbccc742bbca0108d5731c54f5fa5a7ae7 100644 GIT binary patch literal 21697 zcmeIac{r7Q^f!8MV;M7qjHO7)P#H58l0+#|nTN`dnQfjL%uy+1ER`{18L~|glB5vA zHfNrvZFbhJo}TJ?f9HMAb^bYj9M{!;9`@e%{TohLalO2 z@jQYM`5*|UXB!#(Mf6MO0Q`r<;e?9jHu&+_W*Pv$Z?`>l*#SXljnIFX6uD$`1lf(K zC?3~zi5}}8Ksbk1QF^s34a&O=9{si`ju*0Y24ZDvb3iJ=yA4ooS zE#qwc8a%k~u}3^7k&XJGL$wi$ABG!#=oNC@F^cdrV8D(91_T7$?nO?)uluOT<dvr#NS_(T)>Qb=?Bk(N--ZRsi#(@FH zw!wYrRa>1t#!51zU(Bd@z@s`{wz*oyci_O=+uIpzm!^#p!t_c#B)iRrNN1+2@~u}FEWq=T?+kNhE>d@8u&tk?KhR#|AB zP#Jqr;%-sVubDgybWYp!G5ZpI?8e&;ugxdRDV;t|aY8|Xj*TsN%5%znX)wm-%6ex| z5Jd>9C`DjkARiweVo2i?sfXQVjhhggs;R1}G5HiL=`vM9u$}CboSN}kUpcO^q|8f4 zO1@!!QW0a)5HHh~XUSZ;xjxmuJd{vVLg)&nm0Q~Z6EFYv>blNaac=IBGqDnM$!8O) zYq-2a9zJA5Jpwp%QZc0{`vbs9WgYfW@DSko0>ZO_f7!UOXSx*Gn ze>VQz=cfu%g*OAK`S~exa&kU9mDJXBV>_%;UcP+CwK45~jVtSHf-Ik)ptXH*@1^ciPbo2< zfRx~#o$}liEZ&=|-G{w5Jfz{iT_%E&lwgGQUTY0ri$~|Dy1Bw+SNOR1?w#qmMY~cg zCm=xGQDEbrIVQ_?Ty}l_!uQ+%Yp0yXi=&w6r|E#wih@;%OogHOmkuuKDocLpFBeN~dF!TD`2?y#PLzY4kE7 zmtS4$U1&8>HZ|QxM#~w3$2s?NZ7z`;o0tf#xHd@7QKhA&WxLE6-}d)6ne2Rne8fx_ zjb&C=+@ZAVDaX94s_H%Ky}}@(R@omWH#x^5DJl8BwibgtjEG3g%%nLhv%rWLt}V^f zPxA6|kEX%tgC(ux+Ca3lW~$k2%D>wijko12)yQr5rd~+SUwI=`y2Nc^X_;f&djf9R z4@T~nme%&#oPpD&2P3_?HV3v-^Zx$c9OEjAsS+Z#8y)!>wda=J?+rtc2mzgHa0x^~ zm4(wo2T-5D*u2F4|IB6lzwkEyU-)Y7J7FqKZS6{7DqQ3VSb&Lln0tp(U%pg?{XNLf zKcOFFU>@zK;7@bBNdyw#y=u}+HO;ot5{GWPH*#g zcg`-uf_+MZpF9a8Vo<;R2S*^j7yK>v8wUt z@ZaYLPA?^HbZl%w|7N!edh@`odD|iTg7-}kefso?=__ofVZn3jzm%^SUoo@2 zcEqv0grscivh-V@>Jv1~P5Gbp@|VT%@bLU+{HB3P=CWm{pPI8`r@93Gv%p}Wzs2+i zJk&yL`zF5MVy7XmsH{}_(=O0y+cFE&(P{Mbfe9(j3ig=Pga)Fv`{(vPaK;P`4F&)G z#$SlRG;lz#d}e0muOUwo@v0V5Mg;`$*@BzB%WDQ|9`ngS+*;CRqo7{G=H{)?)9`njcrEN^Q6O5fE4CBlEd?x2^PjP+M?>iNhl?%okc&3QD@~vY2 z97L@-f#~KPFsZEM6g~<~EvuQrn*Nz@t}oIKGAfzR6n0E3F1x8GyN(L3Ra=d?oI175 zQIFvIWlAZS$!PH7<0uI`?s$(`mEj_qf({ruCb?nbKR;ve8?s|jhfT=f*x!$fn~)iFJa*V&@XW(UkBkVDc*JL-qrhb7 zQ=Eit4-ymYAnq15BTqVTcOl~I0VbEAvKFDXAZ+0UeLM$(64-@T2mmoznRhlEghOur>( zIc!YgsHc4G8m}KMSLjf@d#0K;QupBl3X>U`nfJ=db}c56Z4?p}y3SoY^Y};=E>qsd zVnRAj#+~W%<;zjhu18LsIB_#EHA5SDm76Q zvmJ2wwnDpSf1U(5jv7)b#aC}`c?$?L16Vj`O$D+m!+UX&@^Ie0D)@hr z!wD!mIZDsrcYMGA*gEfmr)LRXby{lc=J&TC2>77;;FrIB`}QB_1XKDw#nX_Ij8n%& z_Bd}{mU|1LK!{+{($?O4h!fCkT>EB+3W zf^I&4zVELgIb*_qL8irU9yGju|Nd7jLtz!X!OX-I^nVg}4;(n~*Z%$%ckRaat4ec* z!EjupImg@cRR5YftciJ{?V$;xTq71f0fC)=1-!ojO)c1hCxl=vt>-UZ{59;~LomP3 z79{A%w_^Cu717w5nVR}{Z2j|Aog^nBP#k#d80*fRI|G7(a@{4po{b%Y%xecT^Zvnw zqkqBaUppAOc0$0Ql)ciAT0v2f1PtKb{rkSOvP)0u6Q-~@7<|P9)}+7s?q6$0<8y+C zm$$FAY(rFbbIrkH@!NGY!daItU-MY_s*M%Os0(+gBl+!kl|%e|&nb>~3~%T-E4MBJ zd1B~U*<}(1KdKyaEjTIzwCu?C=p>_w_PmtzbcK^A{eGZ!^=h@<9EwdMaELs0G#FFT z+WYLnYWf}K)U>po@|_N@5%LK2Ycl^d$*f;$^E2>59PKhO@LJ}nzRN})S$8KpTex_! z-7-qn^B4d;@Cgm=4RKQB1sxMsZnL%fXK>x?G$rl?zeK*JdK<4>*7%}clw*nM)O2i4 z(QsM*9(n)q<3Qj$5(szv{QA}j-8Hk{>vG_8yqkJcWt(2GzeaCwlFC|=`)sVQ?u8`1 zRnM6NXa)Rp=Y`R)OORSm56Nx5sqGikE!^?ydP6mbbEogzP{V4m(4IXQ2x}D(1Z{^u z?@1tNUA))_pOu7^a?qjpXv2ldWwQ~N>ziFt-W$@8pVBcg4X#J~b~Q)LnX;gfmyVOO zYk;8tL`-koMIjteNxY4c1_YzLt@lSqckJ9rs@HleF?D7pIHRPfsC~7BgG$Xx@+@`D z^ZuRXH1@zDF)}i`bgQ2}eZtM{*y2Qoe?`TKsTrVLs8~g|y?OHnjD3Ogtg5Plz5Nk; zd;4=2F7(U9gQeWQO>zTY^mQnP_vldu$S)vU4sSSi?PHYh%8Hxm_3Q3o;3`q->gv_2 zZ6)pn1eY*QnR^KdVUPwIRR!%VgjhR0-*ndGT>u@+(Q6@Rn__HA14S)cL`FEJu!mOW zM{eEUt85H>28*0mF(Kxq^Hf)t+&Kq(d(=+b+pnOESBcv~h1}-y+1s~o8^R}1XaOjx z*YTJgN{(gOfkB#VtSw8}4+IdR68WNzT%|a8@SrW;snwOd4xDcP2mUNYJv|N@F4>TH z8Fypg42B^Vt}KlC0|y0o;;D9)K2Ticutjj3{QLThHMO)b2!vqU`C*Mim$DHq@3q6D zqoc(J1k^SjAHAOKxr!}|OP-##ML8@bC8hTb4Ft}xurM3@c%RVClE^KT0?;LV|Jjpj zYSa)spFJ_BsGe)4Q-kdBcx!XJYdbJbpGEV&ON+9HhiW5Ir-av3UD{up7mlW-XL~Hq zUd%#Z$n0=&;C)Vdcz8rw6-_U_h)r%vKD!sd-7Rw3YM4*)7{x$RwWZC-67XvGA3eHL z8@_+aUG6)s+f5q5ijT>(1IKX+)QNyIyHmDGcbf z#L}#Iu{uoq+&Q1bL~f+~!z2D2$B{;jSXQT?$ zu(hzz)AzmVGBmTOv-7W{b5s-H&}OU}@(}mPkheisNkfg=;Mq*;_W7j6*!{IGY%EVX z-G=uJ3=H&u0lkGYIP+P7w)a_>Yz5xA8$UV(=l=Qg=Lo{-Ij`~X;X}tod)#f5^4wf7 z*dzr)=pDn^wi0&me{~Y{lv?M{-*lZDd|Ft@0vrO1*o`QHGKLvt5It5#lEF@?C@3iI zJ$`(kk2f(!+@|`uO1N!<48ahLco>f>z^lS_azh$0&#`ajK1tn=jPwVFl{2e!3^m^?_}&dR&E;w%(oOcsB}K>1iahY{RV>$f@^rb(Z#WRfcfBrBMuXJ$$Hw z^eDD&$-;7xJ35hRrqFmBk6l@-<@9nZByy>wCX=t}gE3QkJQ-CVtRf6v=nSfK`?9~rtpn}Gk%^!zzi!fQ;kBpn6= zTxj+|ZpKXG)6DA)1NmHFW1#DdcS3w-XYCUR00OrIANktEJZ|(wq<#gk*~K*ERKjQD0`?ya4B(zGjW1MZIvpCGrllP;bKVpi zaxPot;5`%NGe7URMS7X;f~|=VDQ+?DkLD@DXaZ*dOw%_A@RmJ9 z4`c^n_W0MYUnN{;pQl(uh71l!Wo6|pnttR(PgffO153iq8qmlvNkvn?dsylT<6>tn<_N*K{I3{=!1 zN#{v+#5G19d6J)h5nWmd6s7*Pv?^+9q`RlYgzF-OYT}%`4xm$oP#9qGCo4#wx@oMN zXR#9wi5cMtpnJi-s|&GACv?#H7I0izcg zNw;s`{>SGUj$Lk?7CKqbVKsMpjbBKJcB*(TGzEz2yLZ{d|1ctSk3M`jjf*r4F6j1R zV-vfP?Y_%v|AH9Zc!a_)Y8mJwbjYxY>iZ4k{R0As*ifE-)bm+iU*BgyH@{5}VgRyx z(&7@}FrZQtouuN_O|M=1&rJbBpf?2s4FnMbR;Y3c>XN7p{2R~q1+(f?sJAl&kOSkf zl~clo#E4nZ|FOUL$V0m%Y@eX^PAOFE12oCEpXP&RW6hBY@C{adj~OLgWUpKiSxpW{ z;o3)QiO>nev3_zVP{HIq2w!uS*8+bCyCi*YZ||v7r^*EiI&Z>{nD@q4Z3BE@`dAU9 z^?cqUAUG!561G_yv?hLsC+Za)I&%ew1ZsTj2*eNveX}z1Enqx*q-+vKHTh> zsD60h!Z~g2)}#hnN=oA0Hq5q=pH+u)u&v?AyU4qu$u$$^W%TuKa54*%90QCUb$IVm z!vg6(>`%`0x?T$S!`0#vC{_X3>zQkitAVQGVH9Z+CB3LPDJV~<%u91Os zx&9%PA`8jT61)#auWW99fKkae$y}I<7}&H*wD>*vao51mkoe{P z6pd$q%!f+2zb%y=pXw?(?6G7!-cdkX6UIfzA1$JRNVuJW7a{=@Bs1rvR9Gmg+8)p(^IcWTW zuoc7>Kdt?4zeh@n4aNKbMYdA3X4}l`AEPi^3ERv}M2i<%E`LJzp3?KWCZ1_EYmk__HlbtNmp&c2t19&xt*n6qS(cIPmqw7j}rT_7& z^=AW=Yo>Q473Swx?c7=Z^5r2rZR7{r4E*c~JA~1?_5lwn(YO~Lev3b=I9Dy&= zMFTy~iQM~md9kwxaekl=*akWk7LZ(E$J>1G-2>3jEa^yHJ$2qllUcz|WWE2b4{>M! zpvBc&E0R9e1#Dn+Rp7vG5_H8CjDOZY3n?%0RSIXD*3uV4Rs=yt~5`NO$soaAvT^y`KF@X53E)tI|ZOz_;^(CIvLd6wH{ zu#~d1fUDcxQ7qnt$Yp?zWMN0jR%LTyZf)=OUtXX1$vHnGk<~I%N+#X;IZlu1<0vTt z{2k&0>6Q_Y2VET%B+meH_1+clk_Y6nIR5Pxm}bRy`(ChTnrJx*A@&X6@j9IO4u%Yj z*>Uq$c23Vsgn4qgl5qRUb0->BVeYkm2gXd$i-7Ci10Kdl^3+9b?S5FueAlaS`{6IB zqQtsrgck+(2MSLJd6NKCjvE1jBM4 zOyT-s2PUdx#K2>wO02}~)b3+YI}*Fm<^viac0dwxD__Edt=dI&-6!%~ARD*(hS7sE z2OKLRq|0@PgNjXz3fRm_$jOVvYprY1>~|us)p+>x)A#S+mopoT*XTK8rb^vOS`FmN zzV$XhdLb=cT$^#ur-zeBsD&&6yiph^_GlxOh>Q{GnQT?PWNnQ~%U79<36KhQYz z11hctpM(D`Y7-1?~{-mWH2&traB!%Vr3>kN5z?#tj|^nU0(CAcsp94iC}nIzj@v zE?b=M_qwuMjg1UlT&s|Da#*&4SCuTv?1%Wkj6c8Z+w1{>sha)H=9_opLr9ntM|B+@w;tnpkuR{odHHdPL2ymjys93*KDelIcL^I zKPND?w@e!D{RvXGbR2g5)x9A6dIjLc87KiT!w>mc22g+;9vR0C6z0U5rS{m?(-`S;`nTspzLbAGEF0wDzJ^+;4G0D@`_dU|!BoH4~ z24%`&oVIUtWos5E@xiN8Wn7R^D?rUtXRXtl*1P8ZJzHk68<+03wOyK81*Z!rRmk=3 z+ogU(I6)vDJaj-nfE2OA)#wT`gO9fw3k?iB4%nX{DTR_kC_60PE23D&Q(w%v51(R3(p#{mDs_>)txzL$U>CiNKPF1uZ$$3b8Uj5 zCRY7&12;-rd4c|^y6;&ETI!|s4gev|)P$>g+_CR^CjF~x0=i4u z;5@g1CQrDru~GQiN0zDn!GQr68=JzQ+IngI|3;ZO8!FaX>EPVn;d~!Ga5nFtY_C|>r?^m4y`YNZ^9tJ zdZCW#z=b4{Ww+?0UMT)XL=(GiD}FdB&-?o}6S~}Kk#~66-TU{GgV--W0}sg$lyl!H z$zA)Bs055ZHpZa0A94kkzQFy_CG-$vfxJ5;PCmNBB^B>``k(0J0ttb+_5L&xH1I-c z4PRFdLNlS2jm6Sp9bmmdFeqhvr?gNCq?MMS361ao?^nfUQ*1;yvNlOBx8&RK>09Re zQOi}V7>%!@q8>SsP*uNUBKc+^O-OTp&sg^m5ua zV#BJcs`eZ{oKxrIJQ(J=#SiHFi;-7U-}^L7Lqd=HSJnYwkOVS{>0;M8+pk*MPN|ch zygnsBCHc^y@#(=#SrY6;XYD^W)oHBd8;~`{^Np(crHq|-ibnmy@<&G%cGGEO_c=f^ z2%I>YmjUY!Ojh;eRb<;*Z`ScA()+>9M}az4HAyYT5A=&c9Wvm|g@Hq?TeSA3@djFi zhv&tG7+l|u;jqcfQ~zwoR>CZPb212LBz3{qm>UJ6I=FSu?`O5NpeB*xP`0h8YsYZb zWai0VUx5lCs`o_ZL``|V0b1Jteys*1dn%VM zu^<4ZVzm1VAe^0JtctM4#m`-5Ap zS_IPBwGF3RS1XluoF1W(?Gnn;p_MUoQ5MEp`&Y)Y2xF}e#nwc7cAQddc17ox;4!-$ zWvDI-nI%*pvqFH8^Uw{P~D6YNA2`@C077|aQ+3j*6e(ma_7l7K-;s6ytf>#n+Q8$XEO_;m~-* z$qt=pQPD9FUt-()o%4FL(tE3Sa3_Yo1z-0DC~YV_T!oWj4LrosC+E_p17Y>OSymDx z^mKa1P}UEUHq84D(%1(NZhm>D?Cj#K&AFkerF8P-$;e}^8!SXP;{v(g2RQ(A9R?hz zPivL|ZFwhEqejszIxUGkd)`i775VZ_!BBf*^2VQQ0eK@aQi!)kw>m8?@#V{xl|{If ztI)MP}90(E#_i8Uyt0VP8A?#<-;J;L{jq#pb- z4v<+K0oe_@2au^S7vQlmFB+)d!3hLmF<#Z|RcI#*{V6<$%FnZcYVv-PBq-J0_w9Ou zm9z71TJIlB2}Ozno=(AVH`bZtmv3@1*dhW^K1Wnk6crk`4w1}GGrwPo1yC4)+B>g$ zYygCd&%j;cA%{l&)nM4r^mQTBAJ+GW0rd!Ljk`X`|>2~dkk#%;d5$Vn*Qd}-_h-uLBE z8zwd2E4SQ+5NT`YWDdY9Qs+)Pa>Q_RW4$f+DkZr6Y_|oAL;A&qUu*PpO}Fd2PlzU% zq@@|p4%C7=-irKX7wDB+dLgi8VEz40K2Z+qCMx8T+pz1%Tyy$ro!k@%nKQ|}`f+{* zLt#gqJ--K{;1ZW5RKoARcmo-<9O{DO2|NRoIqzhS0UJM{#N}Rbdppo6HufGZFE3w$ zqU8&LHF`;Q8Wz7V1A;336x*q8=|D2w1Xnbp!Ili{#}IRGiW*Kse?V_J!Kja5$sBwrcYI zdx?ahHELGJ5rd{llz|-|AAizzpe=rna8yypuY3)Sh?2mgysD|ItE1!Kz#lNUpuuPs zO{Uf)=ti1*bfWVO1CRpd_Ql1;>>3(h)WkdnzU!^Dj#J>@-eyw>2tY>(pwsSEjr;sC z24qm4IGgTL3A?`Ago*x|uxIc~L|JC$SU$~h1MhWFHz<@36s9ef-`^`Z-rX&U^PHHZ z5o0F`Jar7T{f9=n%e-IJm>3%aOd!{5#Y8n2=l~@T1RGTQp7I4bBkawe62dNOY69!g z+sNb<2$g`(Sq5?mCf4HFrYclv>0{Z~?skn%GY8<`F72DiUz3nv!F8PYc_vWJrQ=ve z!4|{=GB2C}q$iF0;`m!Y`iCKAor#y;1?rLEt`aGI&jl@HFzk#@`x#X3hDzo@aSnj_ zQkjYXrXQCwbGPeJldSvHCatqjuAFuUs=Qx8;YR43%<%WoN=fxzkE!FvP47=95c(}bLV(|A<&|>c*2wi!- zjbA(S9SjnKgvl(jaJr8lPN;!A!)hi%m`&XJ#v*E$**CuBh6ZNK&$(oK*Q^GlNZsVq ze6s1B)F1DvKIO1MPrrf3zq)>w9jffLCM3oMnPXjdWrFBEx@5cstQts z$PPa`!ZcQP=xuvL&^;E8ppET=0%y=7JCv&p=64&3~hi%(C*-CSQK(6$fl>9Qq$ zl2-mKj7Z@j;qX9kN6&lDT{5LzL^WOFzQwJ+@AvJNt(ts+J+^&l^~6?H&$REokS1`> zsP0d0Vl@AJSuCu;@n(BCV9?_sD`A~gK>(j7r z7hQEW{CaU43^OO+G|beoe|Pcx=*^v4(_LJ1GgT*AnG@6Hw&v-f9Yg+X<)+R~EoNey zdSaSln})uCfMYD=@=ue_CWJ!q_k+7!S&LbbZ%r$gyhDS&rNrXW3i0Rp!Gvz66p=7; zPiHwA#BBb8bwa`FxEDL?)U%ySj?~?ht32#9#G$-XYm0=1L2``V+*}1*motI5?YM~A z+@uHTNB4r%pL&^ByX3XB_<|byW+)9P^NogD?ubv{_$8NFUlkJauk4+hfvS41OMjk? zkOY3|~jk;zunV8TZ;*S&W_va8X=xp^l2 z1LGR!ce88UOIT`on}_|STvpYs-(Pur5=HpB)dN>ZZ`sw=lv!EKyO;MO?4gV7HqFiB zb{uyJPhVqon;11UL*CX2@!LwwKQXhIlz!ni@orOY+Eg`})d!=Q;4?JFF0pz&e`&qB zaYlamD9DI+A38+E8MfbSOQ%pjI7R3&v+yW>kvCQ}DbxD45!5lwwr2oZa121Y1nQ0H z(zu5YZ$qIL<%NNc?COWZ3<=Z@V45_pTp5*#kBIOa7%&A5!IPw1YA2>m4X<($mwtlB{+G}78iGd_0-Hy!3Q$EJe1(>oL>!nQ1EeC zHKF1%wg9fyQE&gFS2<%d_%Vp$$&=h7B8=a^f0wlk15GF7jv80akIwn4=<2dFY8|f~ zp--qeQ+NndbWQg18{f*_@~e@0ejpiomY7(PEGj5S18NLln!5S{)y#DzCgtb1xJ$zo z(YA-o%tcp~=OBB!edo@e*GX1F;f%e9h|t!U3Nw+E=(Cv@HO||&7aZt4GF*f`9^RNT z@{v?+#`evqklE;l)rARCH5oS1xRNIa*mv%HB;magODJ@WcN24nH~w7W?hKNcx5AEa zF%q>44nqe%xKdcymp_HI)od7D##bFmb{t# zOdByC8UcU+tb0{Uh7QP^e~6Q5p1p8Ce-1}7TgJ*kL*A097aUVo;;W~sjd*A0E=2Ct zS-xd?c;y32N6fKNgS)E*Sv8+&hw|Ikzu)D*@3yXn`O@6g?G9?=N=TV)L9?Zx@epij zQQGqrM`#)Tb_u`SLga-yL)jjTk(r5_ue59{Z;B)Ldps6iDJ|2 zMOUTe$$h%+%iQ}S_jV{km^#ce6|^@lsvu#pnQ~=~JY(5o(aYYXf|t%+|y>7ZX&gjb~U{GGY98D>5ANDGUh z8NWR7*eSoPom6VfQj@4$FN|E_f{8!|hy1JV4&Tn^uDN}?#C^}jqy!PyS+i0-8ENWe z?b63K_3&02Jh>339{W*v>aBC{MucBM@X?6l-?;>R&uaLZmn|>eW%7zVyP6lZilNuA z?ML`Dt*iu4j=dp6!fl=p{?9XB%I>Los%N&x|1Ex^lhM1HB29PTzDGU8-&_UUkn2FVUWeWTFXdEA_HoO6oHzE zF`#$|y5vwJtP=Cw_+KDbi`?{jeiDf(NgK<8vLCHaPLCbpVq$`UYk@4Ux7{*p;f<4` z>dV-%%+FTjzpyq8jVj?V`;uUE=egDdv@xL*&>P|t5U_0x3LsUWG3y>|F!*0U*jEV* ztNoYe-{gm7;5U-CsE(qKZ`9S)s)iE0LxFcen^J?Bg{&9mGX8s0MrKChsMY~ zqrTQ4mhg~k=gvEjjup6c_zs?l62?HCQ!TUs1VHK9S=NgVqu7?GYi6#mrk;IjTGAzq ze`|7&@rNu>f;~fSv-!gtUT%tO9xeMJL9FX9KfYSJ@h{m&<30ZN7P-k(*PxA?-lmew z>B`eFo?K3$gP#^a2Q(9&utowzn8mCG@q}HD17Q1)Xh}X$HI#VeNfn!_b3TZHpk2fH zg9(2Sky=xwi9;t%K8_zw)IWI&lJewa=UN9D z&<7#kfWXgUqGstn43$VlQXDRBsHtsfwyA*-5Q#;nlVm`lSJrr zfEOc1B-|Gd(K9g2baZbppm2~DoMP^#g&=Goo(3t?ktfVKmH&S#+QplkxP zom&jog(i_RF=EsZrt3?)T^}>ZRJe<*%8p87V=aM1t&Y68SGBr&L9b zt+fY2?2HGR@3-aH`$z3pw~Y3y^rtm}s)F(FlB6u)UOw&E|D?TuvQ3O)2j?zOc4&RY z+GK7c`$xTS231s3CCIWD?(D)xoqx9>%v7R0&-8U-#wFXbRqzi<6-p62c*awH{B_~j zkxOyweTUR7_A5C-3t?m9`9D61inI=GvSfEpYAtntJKNCbNNBPgDkB=!jrT=Js{9W4xm(O*c)9;}U zaHpGT?2ha+klNt+pF}H8mqpL<+c0NeeDQSJ_UV=o2g=+35#ppP8&HQlETEJ)bd)NR z`pp^5g01ciy5F@FXwpqLLnm*5)9&@gXAb-6A1)dHsf9w>4tz0ln<3%gT2@~k#hPVJ z*>CUh1rbSrD#edDASi_XYew3^BS((>A&I#}Z=sJMjH>8!0Z^J~CB)G%zgVyQuw20L zYUiVhPW(YPL4^FrGGC87bU;p@hMlz28nl=*{H++~S?o~YDE4PJ%kL^8)QCzq#w~X@ zpzDqgJr=8}-VUr@xLeFNY~7x%{01~}OiKDp+ZDf+P;5F>OMc;x!1)9Q@MWW<$9bDG zq?6h1J2#jKO%l3~?Oyz=%z2O{yGG$cX?yIdOz@K%uDdK~S_4M0$Ks$3jq&gG(@IYF zp+MI!{yeS42a9oiziv>PLo=jKwhqmYPDo&u^bYq??AGgI2yoZyro_8DGjACrfYLwa z4|YHw&O)qv6Mc{9h+6L`Dtx|Y9lWWYBr!CybIqlW+5|d zE1_Ux>CQ*H1mHofNF@ND+%BPiy)hSmax%{iBkTyk6uowHO>l*8A} zK$*MeM^~uGZ-ORxh=6LEYPzp6I^v?GL6hB{-P zjGFEQ;s82myHoBTtnL=${N`Ps?~b-~N1znJ18M19EEK~<)`atGX+y*D!wza(|C7A) zo!%~TU1GE7mH|)T%%YAtr4c6fL;V(#)tY;I6z;{ubc~wVv}I$^Ohnia*;pHrBNi_E z1hq>LPD=?^+>GDr*5^T(%fLc=%O8LPxSQ-NNl4%0OU;6dG$;lRpnwa?bG<-8D7m^yYHC#t)Q0B( zTOO)z9yzOBXSZ+Y)T=4WP7XRc-)@j!6mD*;cFY&*mBa)D+@u5-u1FY`r`$Bt-GU79 z)Cfv}Ocsp^LT@&J{S&QDvC^)&RWdW6SH`bA!?!?rZS0&_}Y`&I&!Gn(SQmrAUK#9fos!88hE`S ztONPN%z?zLE-~y^M-cRR0#Mb)nx4cd;dkD#Jd$Oehbt+vFZj_nRTvp$ToC(@Xkb(P zvVGc*C1v3d$K&QZAw|O(9+$2oKuZGk8 z$@ek8%fR(i1V7bVq;_<$y?7YZe(&YrcIvHK4x z71?R1q)@;lN3(z@Gt%o)p~EAFEM%ZS1!2%OrTcR)>Hb|?1InoO8*`CWmtN0O>MpS* z^|H3jzS%1*kQY`K`E}$umI0*DP%yAc93jixtQTX{&MR(O$PL)>Qs+qXP)(w*dJ}c$ zN`=?MW|7VFH)xQOz3zrJLi@?IoK2u43akeB44(|C?Df08a(ylXSb9(UsGP4_9-4(M1=fLg_m zE?9w~+6nAl(2s&VOwIZsTMDG7U7rW+-xLqwKpAxW3#hFuBwC>b{@>P;yA4iYu+Z51 zT^c0QDJgt2;^l)#8wS)=Abm0+966@dU|GG_Yfb z)%-Ba{PMJf`g+;or12IkK;m;T@7g z8qz1{sHv$_%gPL1ym;ZdIke{SSm!O5;?4!OD5 z!Mf&JZ2_CP2g5c&9T9qsk@o=`GX+c;`gtdml%7?{o>y1gOQ#jVXmR7U!QA!D%Q;as z9lZBXDehGcZ3h3I(RDDfBe^5z^6bP(RvQd4fZ4QpT%vdpM0@u&IigzW_j6@j!;iCMSI3WviiwRv!mqWDUc=qp zy-oQ;5wn4Z2K1Ypm*&(~Q3+%c)J*|k;P3hJrKP21Q*-JCQP5m~A0J7Iu|5x-8f`Tn z9>0BiTxR~WLXaZ2+jve*g{=C;j7vEu?w=aCS!NB7B+3qZuK=BaM1y|QMAVkrGb_qh5qAT>e zI6~{6`TEKNdIR7JUmL!?Sv*x;1$I}?qrw~h;5n#({X8CY?qX$agnZU%ar|<9yo}U% zzp0+8YVc%XKMl0l-0^%ED{0%~1LDPbP+)>ZsL0637;zm)@ABUCtdEtv0P9fzUr%mn zxmdEXGG@d@xd)y=L(;dh^TcEQWE}^9W6^*KVYQP$H}SQl#n1Ek%MNG&y4Db%v9aNG zms92nsL-Jj5?&#D@nQ))5nu&0dh?(y9|0Q;Qk>n~GXyH3XP~Hf0xn9w+iNugP{K3N z%ql_QN&{3huy=OQ7X(%?GE>9V3VM_b;6hUJ^0a^gx3IRRS#^28hio^Iofp-|WjPMT zXBs6S#aWreP0d#^8{GDcjfGx)4QJpd7Y@ZczSv|zm0Ma&_W9!B(nhB6RW7j zLs$m%REda)#ICNIHzkdLcoVuLA9Z=HTH(Dn*Z0I9a`*H17lm?JhVGm54@5xN#v$jW zYuWPB2#KCq&SKd(XI%hYDJAONam&+{wCN=!dJrtM(9Y4C+Q9V8qSLVIr+LHOdhakp zvsW@G>O{v)uGWLX?`ua#IvhTJrr^{kPvrIV^xQy5#u!{RyV0=P)AK}jd4K_3OnA1~ zXCR%x6k9YkHDgz~9-kqAjC^(@!$vnm8=(v65a^*wp42?}LYdQ55rmlW@$Qq7(AMwo z`8@XYi}N7Vx^VDOJRWzwLSs9GJ! z9VxF~U4VW>npLyQ3}H15p7{=jhVo#PaEQ+Xy`%3vI2X7-UV`A!0Qxy|D7PNunxwHnrzjR?4#4hhVnp-sF(Nnt=>{$ZLHd{Osum z(J?W3MwNc|)F0`=BRL*CU!EH>m~H?$M%D|}NI%=e&f$p(E$}cv4`o8pzCP-(0t~JN z^okX-tQ&@MYty$N6M327y>WTQMHl41UjfBJ^E1=pm)vV$#^8*?q3tFUm`i;y0=Msv zv>jnj{5(YlSPV%0$S(;RB1oq0884Ct%ZFl{#7$0(bfI#EG;s5Y9jQN^J$Rxs)?uahrDJ%C;v~dW zOYw#X5rVWCp|4TB^xKHQLmU(oYyrjT!&Cdf1%EQ-jAae05h&%?n*BW@@cWcs{V?Re zds8U1o*u8xj)p;Dgzny)Gsb)Vi}FQ?cJSw)F^|Ou9*KDE_t!$w5cyae3@r`KL8jnu zozV_|UwZ|#h!wIYK1qtHI!f80QRpqADF3OzM-JL4(joo@S||UEf>iQw^`rm1_8h4) z&dCnD=kV{iY$;hVak8FQ0u@ixnx2QM{`OS~1nD^f4{9UY#mQOPlN{XJYqYSqc*RKy zy&d{mia%unF%i1HDZPqVz*RybX8sk{`?po!h9HK1m>;hJ@<$BV1{N2NLzta$>HKrq z3w-Fd75HF~LVHNEiR?;AJqF&>{XGeiJ`c)59IoTfuM+P-kaDVjUVSCHi3IuiU;P=K z1q?|l1PsybFD43*j}`KTB4EScm+_U5BfAD-k^j4$*|v}MuKskBk_an$Ml(=wQxx|T z;-K*r783E{XMV+nj-xBjGE%F+aHn~0jA@WCpDq#QUBh>DWB KV&)0MoBtO>5T#21 literal 23309 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak02_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak02_test_one_moving_one_stationary_intr_at_start.png index a77da70847271cf91a9ec767c15851afd03a5692..2145e335de70dd39b6f972def41aeaae2d65ea21 100644 GIT binary patch literal 25064 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 T_lKM?PK1@kR&(A4w`2bTx%N)p literal 29745 zcmdqJbyQYc+dldLibx8AQUW3(f^>?Mq^N{+Bi$__^?-pQB_JgTA|f4vlytXEOR?Ic$eP1<~zoNVh0WKvj3WXw&y(g)JLSg!#P#9x4 z*zhmBokLUb?TnMStO^c%dEywqhM&*d-_vwLp@5#6~mINF>hwD=>zh9wCx{riq3Fh3Uar##l&iQom%7 zC3y{B_sH*;;L*{;*P$WSJxNJP268?h_$K+x;Q#B7Y-Z~d^@>cS0*+I!hmtQ4-)4X# zF?=g46MFbTkPHI@BUL?zhW^?$hoyebq}ieG&Ugvl2RGff7hd}Kp!W9n6FqiUGzu&u z9;#j>?jfWSqbG@!Pm!>;zNMC_;TxszO_AWaao%>M%>VUk9Ai^c%J`_rNI&$^B(3?+ zj~F9fySi=fdGVYVd+SplC9RztuC_+|yl&#cl?`Jk3816T`%)ip*=VB9U%+#Z<76YM zvU{(rCqsQQ#w@=2J+BpqVI2-i%*BOopwK437wep1{Tnir58h=qu{4!WPd8`$`tFCl zNKIv08Z06zvK=Q1Jg!Nzy?ao_qGSo0yoG7cO6ZB^S$=`0X1hYHh8Sh>91D z`l!gn@nlZ%U1a1$i0DbK-aUHyJCFaIX>Gi=zY;Af9Ypyur}Bid>x*3Nj}Lc6Pmn8Yty^)W~_vFSu{b`ND`A3>7=5>Ny=BI7>=NB^DQx zm%6UEs?QNrU>o#vH$&x3)|DR(Eka>pgJFmh-}=ax?K1qG4)&*S@&l0Tkt`$$gl z2nh=loa*Z71#1`CCc;tIHa9c!9517?bxNL%lzSwVm6hG!Jcp{UueWz~&DjtnA|k5o z%Sh^)=Wtoln3|q8_z`!zz#nEP-VYQ>XcrS3TZ0U(*9)nDOXD4)r;^jW*8BVWs_~+> zLjtKimT|Y8u!E@hvp1aKfz-|(F|*vf$>~`x$ZgtIwX;0<)wr4D$wGJYF9Au(ym5Rw z;@d$K+@_CvGc{ia1k^6{WQ4wZ_hM?w7^Fy63X~>A~fh_Sjdy^Uc&fT4G)|QP^X@eI3^@P++w_E+d#C~@v{aSu_3LxL^KZB;_4}S2ABwIO zY|eHxez@bx;V>cT=HX$~^!BP^n#${tkj7ZM3V&oNz{HvRm5g_ZUC+8$jSdwj;zem< zV$$^EN5f~?@bo2*&QDU-aA#?2YW9B$+&J7PRKPQ}@Sva&a=+gl&I z<^yS@61(Q#hK5!TJ$r0BbICWg#Gil;4iswNk0OEZ=l$S-a>+^*!f(Wrm9E~p6*R^O4iVk8g|Lg}13FDx&oD^`~ZMYa1J7Rvcl-n;yntFyveCP$tPdGUuUO8Yl?( z=TlT-d1CdSznX_P!lmctzWw)akhV3Ri@^ZjNboQFzWu$iv7uP$?KM>4Mdj`7?HFam zFZhA*_U+qiySuNHZvLqJ5FJ}0RW)Qd&B*6tjFFAWNKfx*YrWfSJv}`w9rB5ZoxKqj zT(tIuw)P?V3%vYaF&MZ4Qlsuaw*AUcq#@bPD)@giM>fo>`O|PK9UVkZpFUmN-i|1x zE=?l!94cv9qG)aGss0qw#)rB#b5ku#mK6{3_cW{6#aS;&_ z$0!L{FQ#yo7&)j-@MKfE#-Y}=vEs~_+7iEhAKQ-#I|~!0Gl}V&7VEEHzy50gk%xnH zbNH%;XO*uy#CGr7AofjCTv*2c-1G$V<2;l)#zkV{+x$OJVZSBy&U()Oy8iELZ^oq0 z!IW1}FtfeO!S56x){RU{Wa$e0vvmL5GvJATKBsf`;iWO=$8h@D1`08**rounAMwJi z|DM2_VpFYE#>U1R|H~sVRc4NWDWb?6fkQ}W`p*@>aQ$Z@?KfM)6^cN+b;5gwJe^N7 ze>TfByz4ay9>;xM#7#9(<&@XZ1XmdBgRSl+uvJtdw@)(xrxf#v;S# zrOV!$L0x@)bz|eX(9qDmRrIOVuf<~AXjrEu4%mu{t}8>;{a=mNk9S9typIn|%hje- zs{jfZ{%1_iq)xL{{kAC3O7dW0j<}zyl1^D<1*^M9jX47MesW&JGP2wnl{2;_TvlTX zzAW3?+Wwq>BF%rG#zYz|;w5NkX!x_#)$Rydp09k$bLk{st*mS%kEc&>^H2sEc-Y!z zcYdY59uEKLP|Di?0FU(2rB9ieZEL({9mXvJ5m8Y|xw+7`2?6>^emU2p_h_4nI4J9cg)7dJPI zfWe-Jy*-DZ>q?+L`j|{pQ`2wx>eZ{}ec4wCuL!Eoc#6Y&kRZYa>m9CfP9E)Y3)>G9zMi}bs8ELX4wBlErXbfDj+V78d@twA+3lf zIrP_BzzguFApnuaYhL0BK-;XTt<5lg1AXqw??sF z6BZuM6{e&6IPfqsP+3v&0*dbT?cXL`G2HU-uzZV(iXNDJ9~BrbaXMFZ+Av7Q6(cB5 zrgO9FdBgnC{wC^#e^a%ek>+QkH7wq~Kfi%MI za8!!K#KfPL1+U*g5s?3|R)1MPS_rGZ&_){&B9^bOZ=MLsKp&9zG@YEl>_$Dr;!Geh|e*VG|3;1qT0B47V9Q z56_nG;s4YO7k!SAkr5mM0^S4V96ezGgg-ye5czbb-3@&g6=gJ7X!GwvND?E}{opz@ z3n=lQW-eWUil(HjJk90{b!zD~;9&TAHco$mOWWI9^bHWexg&ZS7QIT-x=^&m>E2-ijysz{LOOrvFtYCy@pPwJ3^B_n%sX02exF zgIilq{%HySw>J3ao(XYq9{+RC|ElWVnOgdt|L;c~c2=?i|Dm)r_CHtiSI7QW z(KY5vR3=;sbe2~yUi{Oy z{@q0jkBs?(q>bS0LDJ8U4|o6j=&8{>muxmP!WfLr%>L^)@YERo1wBla(^QbYm!^V) zhiCM^j1R6`U$*Z5F+O@{bu=`Z{{6)N3o8bQHCY2}O4Y9vu^p`-5ET`LbwKq&{uNZk zy~9I1=h24hi99v!ps!WLRmC=Sb|@mHJU$q$3(x&g`b}vYLj_^RxRI4abMte zA7w&lm~P(mjf%P)c}w$IbToNt&jNEnR8*8iQYU%gWm3|QCasah&Wo2QdCbQ+V!ADz zg9fec$V0aSYAd!m)4o0vYbTzlDB#7Y+z7pK2+BTyVGw56Lg()mWb|0x3wr@f*6rz2 ziiW}8+^R*#BM-?Ybpbcu3!5VOQ+i!s#sCJabt@HTRQ}Uo$;hhv`Yvl_^&$n>yV604 ziBx(?pDEkG9<*_dv)gYVH`55|Ze~Hr#twL*myNZ46)rvzlgzM($i>9<0 zHw(aH{%AY=oh@SCds0P3KDkdMtMYG8&vN|C>k(xg(|?ZC{=F5~FPg-u9}19K;; zY3t)ak0ozQYisD+w?1=o=EWr?fO!@QM`P0r%Zv;S@tp-dzO)qdeJlU``Ha86zu&sc zOXRAj*8yy?g{Ez|{6O^v!gKtrl$L&sk#6BpPgUK$Om;e%*6xz5q`7=ngvBn3p?S@; zqG;!RuJSf1v(*U{beCqP#*UsCiL-Su38^^1%9XYl%Yh#cPY=CZR^9G+Fsf7E&^9GG zUx|h34vU=AeoXAlxpN4fV^PZ#gHw=Pyg1F)o){FmPZqf|8D2P#@a7pOt#dprjt1D`0y&=9PjXSSDU^`=j8dg3mJfPvXG;&enam0a`AFhk(P_wIot6A&Ey=hPryJ&fgR zSGx}Uu!oWzOQMDuKKb^lM6Tx!W7Xcck#Hm{azC(_Kcyxuwt@65JB{hjt6Ez<0~}Nv79}QrWV1#JAD?i!6Jb|6`S8t~HymzjkC#R( zY1h}+8TrvrlKJgMcy8`q3lVz8UU@_Uz0PeREkzOPNo)GFk-V+?KO+b#$1w%VXi8^H z*~!78fc+SXgoFfPLE-u-J(i)7k*1C-i2Mf?wWj*{xz2P|7O09ET6vjm?aR#nC6p!DxloTu(++d&qA%kmqJQf3f%Rcg=Q2V3n-v;Ry^cfU?l@@m;DsJ-NfC zUt!(HGNKSKL~(L*0<*Fns?pC%G#aG&-^+XO#C8Fdm}Z#A$4wXB1!8d*r1{`0cl?$I zi?nr${s6NgsT^9tCrm9ZEs909y3k>+Ub}`BM9G_%O6ZXxXKU8*_k>Z$2tONVL1u4Y za1|D>{Y2e)>(PoU@X+&mH-}wE4F7KnBBT+*VP|L8T!hEKxz6ol%x9)`R>*Pc zUYvjfCe*S5+Y=}_Y`Wi7GKSd8)-aWnl-@=}yaZl022j2ry_qI6bdZAcKU%@9G5ic4 zAj-0`=Ydsyb()n2;E>dN2*4QnLyq$bI17mO7{#tH4fMuRH!4e$r6}LvZ>1{%gW)pB zS3baFK3Q~q(I|H>7@AhGS{tj@D72=CWYc}K*q4(8upw1BC3wgL2AK}r0k-QPqX7JB zOjAx-YoM}g(*5BTbmh(^umxlQs$RHo!G}dXyGa-1v-8hD4r+g-j-k$jHtUG5htd66 zV5Oe1qMxWpM@Lt+P-52p{v|Z#CyTuVP+!!Bi+KB)i;|4~zQ7EhX3XGX+~Ukke9+z* zz!!K0g8bNeBW+YELw;RjqfuKlr+IfOaaedbF*WrqS6NBPsT#OOQ>Qv9y0d4`u5E1O zS!}|5bJ$tZjGYSh_rI&8L;^e*k${KFJ^B_JbKkK#-QoI|@IyV%#ZhE8+TeqMm21*^ zX=$jW>kBtB_bDhS_*#eI`fq6$;?vO3?12VuJMVQj|@nm=3OUC$S6j@(!vpt4DM};F^^2gED;l+sR-w0Let$ zm;M5)%QR1?h)W*ir9+*4+#Gg&Zm5L&WN(s)$NZ<*O4w`b*)7w@hYvrFEu0qapTWQq z!4|}i%weOy{6`g1O5<_=R)ky%Gczubd^ldzFx!_*6=oPH>!=|G;cZer+aVm;Fl0?? zDx4qWF1lu5duLjtoI*o*qPati-oGJY_ESCMDo2y)fEdsW?O$_S^2r#W!E zx3dMJ{5U+4S6W#O^Ia*RO5>G0pwFZEaB0uZyl19EEHUA{=Q6)oTAr1KWOgvCXpCI8 zY88l>(HsVt2ztoOyj9AN2K3n&LR)0D0*5u6Zizs&ORzz#izd|=Wo%`thFqGwEKa@N zi=y88JQLmS$mjfXSqSF}{&Tpw!6J4jF=ON7S6ihXI166M%gbA;(6ZfI8%L}a=um!q zHUo6muGMBYMzItPMGq2|tPbU_Y+CwGg6IgfK%VZ-9V)Mbt!nUDkkbD}F1AHCY&fmQ z@(eci1V{_O7;4*N`KQ_ZQ+LWJHFuv%8gudaO#MWfE`rNIM7$>}d-oOLl_@q^J`ndC z;1C~Gm_$gs8cS(`WW9ZRK~uezfRYDCCYZW9`9aiA7~VKR=a!kqCohH^AKMPjR5)P0UdpHu z-SNghz9ASGE0#8~ie)-zf`QYB2;B(p^T@=kaG1na%hvHXOYpj6SwIQ>f$w&3{(X3w z$_m0S0T>#bdJm$-;+x*v4xtXVFl zJ(HH62v-pC4G9UU(zJELrxv)No~=_oQ6GQ^8USs6nKn9p9@?oJDs)F< zg@#7Fue>l9Th=F!*;vW0ex{9LYrg9oAYd6d6fqguONm#6!@JIKQ>wukicI!Ld(M)QU}#o- zcV3++T{XQb3WBC{T|LGf7gUjLjE;NO+N{psbIvLov%;~+$*u2yvH;V#z=?=KMg&}{ znI`U#oRR`U-xY8{pfv~utuO%I`1x7(B7&>Hc~h+rK@8)F2oNVRpdR}rBFeT4aQUwT17Q~V zjqld^!7Dm?T3$^5hP7a1Re^0=Ede&GDkLV2uo)u%aJj_t$ihjoa) zUZ94dU*SmsM4yR;r8du`HS^JXIWTv?)@e;tZ+-dlr9sV$^KRgy5>ryXseMJ%=brH6 z?ck-Qm^&gOG%G7BJ$&df1+XgB(i=|Hs!v(4!Sjn6d6O>71I{w`%UYqCUa!g7br(4dgq&OITbhSJDfIZVu z@|UJiMVaA~pO<%mm>2_)FHC5mqqW*z<_=Q^S#i*El`|s;zdN(Q4*+%mA?ajz-Bz}> z$}?L5K8Q5doV;V01ADubr$N^rL`FL&j(`K4WKipebRUu9E#>@^Sv}nqaNI#GM6dyo zr&lXZC9~rGGSVig1)ty~CnpmP^)-c7W$TK`2RBb^2a3-AajO`x zKvS*oIt1_Kw%q2dH4>X}n*C7?;1(p=dk-Fjmoj`00VVS)6H}A9wuQw_=@6PA1<_;D z>gsC7)x`*Pz3P?-7LcBwUDk8Mp!MFndUCQ`*_U2{2%bz#IFBAZ;uT2&Uprb9Ei&^% z_gsPd6_xZ?_KRv~Y)3^*x5_{lhS@cKu)Rnmw6Zqt!+=4>*PZT3pN7%9ZKi+*s;#kDIuZavrbhq zGJy$C&M|hjEqYx*NT|kPV=4sZbt42uEVhKe`$rvU)}OQJzE|lUo#E@B8G=BpU#eA? z+4Ur$@gPBw$>pL^X%J3q9>uqV`wW<{HchRyz^acB)>S>=8U$48;ALkXejM7())RJ^ zID-uCD;js4`1pA9(F$S2x6Tha?3AHRgh#Npvm^cZF`Xabl{bhm(zn>1_MCsj4GYvA z9*@y4xwCGEhli68LXaMW3H*}Rsuv7Bi7d4waK`;+D^5=i8COf8`~W#*Idwx5%0_)#OfYtL1oK?c1F3M)9J@D9B z`Z^%8I#SNEzqfbK!otGOM)YXy`Bn={&OIm$zxFq0lcBBNha3L|5sS6~S0MPw!0Tjh zD8#?})zy^@iq%a40gdlYv%%xHfs8AC5On?w%v6gtoEljW0E6YF2fg8%=Zi+YxsUc? z6IY1;1bh z;-e9%tiuBWBA*>58)VT(S7ocK!@6_Fqkh%Aq)KjUdx(r;xSrRxs%)Cd{W~s890R9L z9l|%D)i+PMGsuR0`oxf?K%1{;$Y+K|Yv1o4VvrR&`;adJuoKW7D5U4$xw_3IzM5i7 zQ;XYII<2FDljQ+2SOdKK1-#SQ7TXKupzX_P-97l|g-Xp!$kr`2?1&dG z7;u$a;vE5|QHOxW9#ilBtkhH-fd76SuHQ>bjR2j_4VUsG@EnO~K~_WX(k+e0TY{i? zLSOGI9tEbI2&Cnjbf6ei5PY=A;SzVP6CB^qX*Ta?DZgS0;aUxz$=+O2Wuj4IFmg2c zI00WcCAqvVmKg9kz~<&pg2a{U>gN?$MvD!4Tia&ZR#yiufLqe-cv&nPVfpC&R((WY z>vO}<%u9IFai-9+2Z=!lIL$oFvMp5~Ug+^y2Kt_%mQ@21<1LY3`IK6#oN~W-VGl5c zy63F!-o0D=WIn9^(1mohe3xd#b5jmlYx2N@3gE{oB`S^OgGkbf8u)ufV+nY5-Il!W zz@;XgU|D;BkW|&)p4BjWGj`8_3N-p-~O1|kZx?mmj5#W1$mN~9&qP2b) z>=ihf`Z;KZPXl0W{H}wghtM!2*8-BG(dMk!dp?^t3xaT3>vn;(+%T-%NKUGws>7p!Gcx@3W$hRLTuq$K0%><3o{SJz$Ugs$`@?~=wqifchM!ruq_ zpfcRY#m9d)0)L^^Bj9!LBn=Q3ueUAG&)>g5HBrhiQfVY>93&-b@mh&v;I(0vy?Qll zYc^pgWASkHx@_Xx&sKfb`RG5?2Ix6UYg?Nn6tD5+Py9AZ zfY2j3$72-mSu0OHxe|!L1%gDV{@Z(@`zC_TOJ?J1Gd1&XrOSmelpSrfBH|)cXw}KH zwIGZ51E1D@5_ry`V4Y7@u7sO=n;Shca?n*lByeb_3eW3)@(E9FmVKEl1LC6b4&&_s z2SVm5=*mdrWt4m01T6-%HK5|9-RHgl-3$S7?Gtoew~gi-8RbSz$Bw(JqqKm;xW4-h zgN#E=LE(=eW27Cz;0A-jaBZ*+uS70EhU9G$h z_3M06aEV-7yEEI{J^bh$Zx4QJ97(C)D?A*3gZNBy7%20RvfH4V{491b0t4gXOFzE} z2pEF@P<>HB$QR&HxV|>53Ye7i!1dsS+*)@Bk{?{Ibz;*i!+9z0FlvNYF`%8vNJ_rw z^j6E#GI5jF(xQYy!3mMde6H}PTwFd)_da@id2Qb48@$6t*k4Xn>>?LGd9j3q&qu`y z5jw`IpCdvqIN>Ej7W%~S+;E`mNI}Rl@cr#9`I>6H5`p(gRq*ZSLiz~DN%`(bt-8L~ z*$?vPP)IQDyevBCQIcrHs-(ks%~>Q%3QdN$S7lg)K^DN~Mf{F^$T0-)k9vluBChNeIcFvE0p zu`Pxh0mouuD46@!imbmMn42@<;^HD27IN9#A}1Jw*-t05yw9V^B8_S8UeqTl6HUd! zesQvTqz@nxCLglo-g|y%1hb=T^T!>qzbfjtBO@Y^(&l!&-N!m|Zg@0?`yi&$2laSX zo{mFt#GR4{^(kpP#aG{3b42TP+z0Wn&*`V1Z$$Auu0jP;^5W`#f8r~hRDEZ)>^bz> z3BaU~wjIIJPe@200$&XZ5=z1k|1Q81mz5!ljdI}+5r5QY#f%!-fp#KT#lAHbKdemX?kfxJFN}sH9~0#DfdYi!$#? zC(|mhdS-$U zTwEleO&}TH15NPx;MVIUh=gCjc_yI*`t`w8bZ4j&!MzKhPlOPaar5Q35FG5fN^H)EIpz_1duyps z*AR0(eTwnu5p$*%p!r0Oo66GzRs(ukT9!N`!6NcsjJZtWn7x01sRi+99eO0KLzVJo zboY}Xmd1l!J|18?20H+%@ar?*#)MGYt(5^tWzh4pK?>)(*v)fg!ZSxUqkl?AyRkRLj&OEExj^wU?-WsG%ye9FN6QGT6yXnk+Tiz1{Biz zXilR*Z&}O({nrRFM}op}!XB5L2Y1D*#tuh+;i1BIsOz%0!|FvnA{tqcAQGCcY2Q2D z{9Sl>xGp0SG@6jIE8EqBWV}XTo#gd50Xg)n?dx0x7Mm9;P7XMA$~1!g2(mWwT~Cgl zqE4yoWN2}nf^ZfoDd`KO5ATb-ewN~6)%^R!nTY%pZxP~0l7@!#(7@JyN)V|Y zvS)gjp`08Ye`f36futqU&n2KzL+IEKhV7I52SI35ucVVWTU5ZF=+4on1-|X~yRd~9 z8yj03qy_2Z(sFfUP#&IvEP|wnU_HNUuC2ua10B>12?GOzh)hsB{bFOOVA+^%l|N#R zK;jES!^5FbQD)}eEDdQBi$Hb3ppP_o2rh}gUb#DPavX@hA*zgg3OD5q@HC)Djl;?T zX^FdKVSF3|0@F}eD36uWn;;r{4y@g&nVC;WnnAw?vhpuMUxVb>BNY{69{KypB*--= zrPaYh&Ny1yKRl#bV7+-0W34iQvp|ag@^+uV^3dc)T}ZyvL;;qyhVXK(7_SdTh93Uwu=XLWUwSItoH z5N~5K(ee3UdhAa}eYNOfghf=^P3L62j|NQ8=R_iVDD6V)yOrL@ zZ37AUAWO@Dg#fC7nK_P5sM?Lh#aI4KCCY?Syy|bl7_JCCx!%8SDKJrFGwoLDbMeO3 z?tsk*_3IG!#?WiQ2_8S`==d-97j+08UbHAxOy_@#A8bF_(igZG?`kTBaW>HV z?mZF))Fch--O5*(w@29Mgmp)cgpWAh#${Ia=W}a(CnXo9X==fISaxuMShWW4E?!f& zwsp^E!}rI4Tp-z11>=C|f50#y>R<$<2nQFp2GBJkS!hdtWr0i!ShZ^V_#aqqdoK$d zu+0aINtf*1%DzH*=uYk>{IisBh5CSmRz9fqO2-{)yBn@Y#TENjzc_Jtfmy@2JY1^&p2s5W2@sE@ zS%m8fe)xfXe(I5$8l%ln@grsy7J%ik0`A+XDrgt4wAN>Azm_KkVO+zcGs1U_b)rt} z#u+VCTR5Auf=l1!a^KxpooC-aYL^j&kBo0q+s!&|r84y7u*>RxzxQi-@N{tHVaYk7 z$j>XoS^4Z{EjDrxe3hNR|LDVT(e|s!8&LIYT3hjeXM!X|s|d<5l8Jy2DQb&$ZQ40G zuC_Bnrqfkc|C>cWw(Mls*zEW@l;TaYxgC2fp%wP=wCt;E>FSqdx`OGQWEkI<@JmGf zWYdT*rbaam#!w5VC+u5wNsDgI&faj9iu4b_BBVyK>4ue((9c5B`PR(Lj2|o%BS7;g z#1X#=PB|nK-j#51HHK!$Tqxkdy-FbQc5CVMeWiygjh!fwC_{Pt83lcXKw54ZnH-t| zryk?9Ycf8mOmqxq?%l`q^qS6Ya(s@Bv9i*8hu|Rtz*ytLH<~m+XF-@i+%6FFkpK^} zc>xyhI7|dTJn2&0m*V4&>aC(jvj&o^{^EB|UG91E5m(Ttmio4ou!OiOpMGf)c;`#l zb%$;v|6b;3sh;1N!pX2nFOAWo0y}-D&Dn<~UY?*wZS7)bv;IBINB~YH6Y~cYHVDQc z=nIrGBOn5Pv%pNxLPF{8{rk8OU%h2ipb{>DrV-!zWiCXrhEph7dPQVKgvc|9K~}Y) z^y4>_&8NY!nekYSJcsiQ+q7njznU>$5n^<9ikUOLef!ZaUZ?sESylhns+V|T0hb)r zC8mTB>o7xu^-I@0vSG=2K?N!`x$rC)eT@iz06Dz*(I+{89y;HjG+$S1y;A0Qq4Pmf zCui<8k_5RjyG`}muFjLolPk}Y7K1-|4<1AdqL~TxZkvbT@XabsdMS<`IWOT@k9wcZ zbo_SIUgXKmpDu*l{KY@J0(yS4(1`AhVZlz5j=9^ARPP6=7TIM2^6Pk&FP2MA*8mbo z@9N4J3jXo?v#z`Za_<9kj~D{we2PkUy%NxND+>*!nqu5Kf=|vH9M`T%p5Dl{-xQDS zv14cB9S?!cTc-}6pZA$C%GC^HkH;}x4uHqTQR_dTZAbY}~9fW7<$8H?H&tjz`ytKqV)9{?&~V_KYJ!O%!%IeD%pipFk3V4|_E zHY0d`*r%j~ir+kNi}qLNo}p2lOHh5$Vnx9>Yt7r+ZmT^x!N;xoZFVPdoJCQWFHmWh zc2)g|9;AfL2T0~IwG6kvF);as>*`27Y(WC*8U$P4e&>p(TX!T2lNWo^edk$zmX%cW zN$-QZ%k7o+L4M+2+-F`gNiOWD2oWE>&<$q!F6;poyl=LyFRQkX`woTe?<_q6p-ud? z!&R{iHDq4yA@j1-mH2fUY~*?cP}vaB59rzzU99+>fA+UzDtl?T?mPhd>xSs z!?Dhdk)7I#eOcL3hiP)Q?5^w#5AXSm@`{!TEJz)_I|`TLZK|GcIK1q&*;iibJ(H7d zQoH=5gav>%GNSKG3;%5AkYxf)H*WQT68jf=Qz`r!THMB&&RAC4lgz|y zZQZ#0A}>wLV+{r(E$)@SW!7fRX698z-+Z^WHo%Mi!Nx`?;H`tEjDEcW>Ui@fa5wiB zGIC&NNGJG9pTB$oSGTp_+2FEaWaGzK3E{6#-<7rNpGE7V;|5&_KRg$_w$XXdbAL0+ zF=~p-W%(CBTG#_KmVZ&<`5R_N>Cq!cUXIS^u$3nNX2kuZ#sTx+dDjJ<7hZ&3lMy_6 z_)#fM(%wE-)p4-php5X$8ks_(`len#kL5+7Varhh4VI#m*c%i2!7{b4s3vm4Pv3k% zFJ(I06i$&&mMf#rztb!Ck&DgjI=U^f^1eGG<At~i>>c7QnG0VC zW8Scj-g=*{?Z2p)UBblaX|tpM0AtELuNn-%#$FyX~rQ6lltSBC?}GaZ*ogu7`33OC4~eLrh3^DE|_ zV1jXhmv%sHuxnVw{^DRCA2&Mq{h*5T;zFh9Ogy&B&QK)DpWRRACdS8oLGL#N{Ses@ z8Wu*KbJL#3zw(CRTE}zZVP?w3iQa16Wj0q?#?8%*TG});ox2JTb^~GEs{oOAr3|m4 zqH*wP@Fisy6`a4{>98ME)uCQn%&GdF@2D;gBZmsBeFPFjMi04=8wVs1rq~({t{XEx zZfdzY*OyM)8?3Xa0&~r^;0|Blh!1KNb!4<4nrpmE0*^)G{Q0W4SH&v5s|E_JPgcyT zP{+&T#gx&hrilL5t8-Q-Jc32taHQ-h1o3L&f301poq)W)c=1A@&az~$%?)3dmlR8j zsA@o9kPlt>V>#QUv83AxCzjN&SvLIZlMba=>P8(x-jVgHpNR(z4ZZCN*QN{KrKIeq z`08FQy8d@j%iUofJJkGYcoxYVf*X8|kFWPjqvNH)A2zjXJ+;JLjMy2{nc`PeuRuEG z4VMi?jXqvur(MXz@zd4G1m)A4uCjy%gM5$o?2ma@)Uq%aiW}?)hZ=&aat*5HyTlH6 zkV)o-OfuO1(wW2>M9zu%9Gjr#vVK#gk_tpw!GdvV)(vN+(B`o2;ixP0FVNmJ%NcT3 zaejLs%lwRnsHRf%gugI;(6Vb%__ajf?j^5_7pbf&XF7--wV#*3&0H@k`BP7tG0DOk zcA|x{l~V|NvvmU?+hufew0}=tzHpz@ivCZKz@+r?_Do>AoBMVbIW<>*HaB{wZFzeB zWxyf3VH4W#aTArq+A8g-&8AVWYE@6K1kW+ziWY*=Y%4muvbcc<)Eb&UP1 zZpOU;G6g*v*$wmU8xJJFOXbY?4eAz%$$#16czYk16{ihNu{E0xsn}{9w^{PA+XnBZ zRD>v~dDFYfx)fQ2pBOes_@P8k@rz4V><3kJsO=Ztoe&XID7WgOLeoIP!2)&#N(!hx z=Qk6l3C#HDY;CCh3aI?1Yokh^Y^qnwP5Xsw%TKI-4VnDV?fUbevzL6tpm@mScfB9M zL4!#@$K!oRK6F864(-@vk|@DZ(>3IgXw>bAGHFI2iGy#Kfw6h6RiA@h{$jO$1YZqm zu}f+6|7?M5%P#3l&Nwm9xC zh}xKx^)1F$rX=)8bVvSA764l<^KHt0xK)`=;)cc8xewz{l80tsf1(2!hh|lLhEGOP zk0mGUl15^jpu5{Ub>0kfPU$n~{{D!()8I@bp*C)TQrr2%UmHr_{LP=YzG64(2~~aV z!6UyCW^Fhu__&+tIBhif0Y*V|t&OvG(E|JV%|Sac^VFf93%3c8EgVZFxW$6NVPU&b zBjja6V`40dI?h=BW$Uw*^u=jCH|rI79(qN(W#s5Lx2yBe@K9*Xd;jPTLk{<9^ENHc zR<_21MYkM`_@~(9x0Oz26js&?3+K#_;eJ@L9SVlN{8e%A`klz^^-9LRlgat>2ZuLPQm{S< zHtQ0E9wEq$g`J(>{Rt_|Hlv2XYVh9REe6k~Tcfm{PygE35v%INF8q}gIpYiYi@Ek| z;;*bvtV0JW7m9nTvpZZ8bMn|v_~z`~){`!0eMiRz?kah0@*800+9w+Ep@RiS3VMpz zVWV(+hOaK~?(@HPu;RV(_pgQk5~96nc#Za!snmpBe6TjuFw1e%nxumENcbIYqt_k5 zh3oVx_sK|3B7EL@UyT;E6N!x1u!{Z&5QPmu-qR?u{V;T0bzS*DAv)IqlTnn9VwB+EM`Em~Op02X zgWxz%e8Q$sL**SBcJxjj@|Rr-2bz`5;l8UCPD?W#5%u*Lm8aRFz(EC1DCwh;RhS)M z&uk#|Z4$7SqDrZsOEq3LnE2u!z0ptFhPD)m6=hLmey71yxSO6r!IWtDm#u$}wR6KkRUhJNz~O1PNrU*IiWj2!RL1z6o(F zvda&*cXs^56LZaJMQKin!}%2&@IoqmO1?UM__UudZR^o#&g*8_a#0{v==E9lTUGDa zly8khsWu$S9A}Q=v7?-31!aKZPTKgx4Zb5ie)xFWEjzxH5fBelpa9r^>jnwt&hO4v zh)DS~=5FvMSR(^vUUyzU&m! zRK?}o>qp1OoZd%n2%QGy_|h_L!~s%P(J+LNK9G>X3e%Xj8l^p^Q7(K~y~WnW$#0t7 zbDAt{+0Ep6vOlXfZ1(cpvw zS}9~cSsfWRO|Wq;T<23aX84(F&=VkD>b~;+uQ^Hw#BAorhXAnsk01th@BaO~15Q)O z1Vd)+BZM&gY;wvraNif%1*Z*vsX_aT&fv!xxooc!E@=347URHc^4wSd|-Dts{D|&iF zcf<5xo2#$p;V|svfkgcaNCtshVLep*wZ#c}4@=p0uQo)odSBC%^7B95TRS&O72VVW z7103x?3?v(5)gvsMk_^Of0JQ>*JUy?AfDb;Kw|8^9T&w`Ud=GMG_Y;^>dS~6>-&8c zW@d5l9XTQM10k^Dfmy`GfD{Kru4AOOOX(r>nZS7b0!MNzBdW5d4&Afz#NMPQs0e7q z@qxtKgi4BwjB(JB10e2Ai0mQA^cscWAz05f5LmME`~gD2BT%GZhe81N>sxGu#r7Bi z?kYf%r)srB!tM3k#?K;eHi4*i-hjyD6I0)WSA zep`hwIPRb3I?+PJM7=zmfvbx_N}kHCEZu6yKWdYpwIFB z`#Q{%1C5dmsj>s+wdp7y@lI;?@+}gPCi)Guc9X{BD7`41Qj5htID5s!|N^XFmjMezh5M2sP1e@{-X z9>z$wg)YCs%XiJb^%1b!@?k3a)iGi*N3HsY0~s-o7UkZ2dJHiwHxP&&I)rz}AjR)I z=L{)uID(6lnW^a~7?s{eJhbNPNApP>g^e0*D&2SpFkzUC+E^#BQno%>>aNgn8D$&QDZG5GjaE&I2D6-Urls z02XuEmBcQL-C;8iN)5lEou>D(8mO=-Bs858?~V(yw1fE}ywj)OrUSMssi=^m9#?nZ zt+n-aJk|+uh~|DA+!(3$m$O0voJw!;Fq^F?N0IdGY00GMT<=#ZC9~v-lHDuXH-09r z>!Cn%;IO6UFe3!_;rXAtY&h>QdmpL)}=6YXvH zRSp_A*@R@4m^5O(jhhL`_sQTkYQWFbExiPx9|;$i9kL?cn1>)3`@{}m z(5~m>Epy0A`tpx{qu!6bMw6(^Tc+Qno#M9X5cC>jolWy zb}}G69^SZvf*|F1=kE4(Fc7W2WLA&8u8!t4zO-`1HRr+Md5GopW=RVj-s12Uf@~+6 zef!rp3uTB9Uqa{%Qjeg9!Am}JFDYw4>I9pBif@Y2mMzbfGWs6lEtEfM$g!0*8kFr; zJgEdLPr^Z0o5mL-7daMpH1#wep}`MD@(gfw!Y3ohn0N}zNNl;~p6m7ehV4|;=Il-j zwwuA>4)w!mRNH&iV?i`oika0R)0M{*tHs5|TBA7+S1M_lm{8s)zXye{ZV2gZ%bt1g zhyxza!vv9Gtuv66om4H%cTL=i%e=k!>*zX<6lGxL(=xer*R`>`$lIDA$%WVr_~_x6 z72rLB2_G-v#RAq5DD>NvAy@8TKd<(Imp6_3QQ79&M#0`m3@mH`nt}5tF22RmNq2i? zG^4kU83JQ@3AG39>KnU6v-3U-ug7C~?oVI&Y0hYH6-t=8$YwO`Tv9^ zc9yE~*vouiyVGDMfoAxxUrN+MZa)w9V52JsIllQ&F(>SEw6K|V(=XSyJ4=6!H9*{T zo?c<4wfVia`?Drl*wcmS1F?^F7xf`Sc+V214}d(?pusOk@95W<>mE?)kw8Mo5MJ=b z*Rea_C4)-caGq)+UgSg7!RE>guMiN_`-f$~Y|I?gDYm~06#F&o1QVcAw@goeGZ_C} z4t0S@!K=7oSy|}?>V@0<^+zUU{I)|(;DFx*qz{1#A0!A4dmNr|PzLqdFgI{ryOuPt zi!6gXBe2=7*Cv=on0d>+99dE~`HyX;?p@XTcA>_4$3@|_P{3Kb+Yqe5Me&^)ZQg)W zLKycog!KYI9>cx*f+Gf?lW(};^b9rfy~bFreu>r$uMC&-X{~W$dO8Bcz!4=gy>X)8 z2=Bjum)z7rATcMsW3_BE7<$#I>T;5xX}%_GJgQ04si?E&3#fDO#|#l~>lcu~dDQOK zQAmmozk!#SUX#2&QtXffra76}kGPU_kq{^(_*8sL={t|EplMfIZ3Y-#NOSt@>RVr` z7iA-xk%)cC5nDFQ8WL(#Hg6}i!jcH#TntF>BfAZO@O*_J;*i(wFk$70HQ%7;ETzsO$e28y2w(@pc`5yXnu21!@OS-*$VgP_^m}$i z4qMDmg~#izM)sukv(_Jn=~kWFB#f!-4r1xg%!)S8Eap@;Ks@;cG|aIPk5%XIC?T%{ z9$35JalWw1E@=o7-mZ|jQTZ}(gDU;u!Ue@dvFeGdy7p#=rg{q>%pgsTq~W2v{9N1~ zSqav5rdnr^_ZvCx`y5=^sDtyMv&gNfo!Sl^wt04~SrO+dTWr&2-}6KD121Bx9=C9U z$U_ojHwRosu*XVCA9Jc7eKF4}SGM_TPFE%#`D&8=ETGg$-ov_8 zpMYs!cI z;4G^Q!h64LH@(U73)u9(<$rf6*CSF@wUO^*euMcz-fTIc*;xGP(~^SYjSAT5U2Dvx zIT$2;4b@*(!Df=zx6&eDBkcM8mqk_j8K0W4fVtBXW%HkF(d|x@^&569s;PuUcvtDx zc4w2td_OViS>?(Q7Iywk|dR(B19C zNuq2+LdHxHk|eRWO~y)l6PYqS@5}j~r?bA#dVc>s|2?hNYPHJV*L~mDeO;g7{eE4F zQEwCVS6B6Pt&Nfy$&WX$9AESz!|$Fax2l&w_i7C-`=+Y3ismd%g(@0kew79}lfOp^ z>jWH4zWl_Pa{M8@wU+Q2et3m<%9P#wrim>wV8ZWe?As_#0mJsytD8(SAGK}_fctnz- zJWX4-(ZT=7+Jj9KVc3uYcPGEB6k2Ql{JP!ZxeZU^6B8?%6V}Z``}9J3x}q)3JWLtV z3nCWZyZ35lKAQPtF(oZ#tg*IUi2kv9Iik@TW4cWl`Y)IrFVxv+Lz6=rUh=k>u4pL!C|FeT)0JI*!k^yXmFqp_Hu0_Da_d?&is3jed~M(n zo3cHF$6P<-Laaravs>ChtE9Hqs$b4;g~VjcFd@2pJ&bD5&0c=uKEKUyV90N-ZKjF$ z&o7UV6gZ9YSwa(=QaI(=tL*P0f5cv#YkB&&E$^)wQpGgS(iOQ*i9`P!VEyRI>c=&{^fjdWu4 z9%Xp6botP~6t}&Is63u4+wp$z4_zhxxkcY^2B(hDrFb;!Z%|6Jr~*&Rr_Pq(|J;o( zf1H=Mys4>)WG|4olG)7a_^GR;NqG|-?ArHDUxC#^=g->4a#09>!2WamxJTZQXTF71 zlH-KxjhpevZI`{TZ@m!sN_&;@`b&pf9NZm+pFMR5IC{iwv-#teFk-2Hg@z5(L4)VU z+ijy{oLytBiuX!rH@rP3ygw&-g@2OKWkdD5PDZ)sf;9$KXi@4DWGc+--)#N#KrtlC zK~`>dc?ge57H`A`m~F&Wy|sgH%sD-+{Ji1X=$#D8wz8FB8kSt^?qkL*72xe1TCyZ7 zI>~!-_AzEtftbkr9I*qtxb2!_{+MkUHhbTN3QfMYuE>DK9J~cKR-F$#RU@Bg?c+u9EOMivb?Ed!Pq9@0S{H9K+ z>F5@)KkHYyZ!n*yWMe5-U-uy3hM>d9wM5RR^_EW2g{|{au;+?F32IH%keI!R7XQ%r z_O?df?>(V8D?SD1@Xzztf8gIspL6tSdhEN}noMuEXQP8<%*>r1n5En|%no^sQKAx) zf>3Qy$O;wWCWWVt`Iap8D&>>Iqo&k7Ihzs7JR<84lgTt`vhdx}|D!&lc%$-?+loA@ zPNhyJ(*xl`L?~urVv;%D?q2mL5{kuP+LtKD-CsK8w@!>j)L-mWgNPU+mzyrvcNRI# zZ|<@{erv=$cwD^y{gI;iTPSh9^VEkwF1!+2$nQ|N;_?ka9`Kc(4n#xOMS!Go=dVl^ zbKkh~m&7IOo3CQkiWm;Frl+#9yrd!#;R`{Ewd1aP`&F4*d03NCfcQX1q|D&#aB>d# zR1%DYLk;y4gGr{GsV$}16U3bN8!Q~2h5;vh0ffBZM$$K@9ApF zRNu6J>L$yd=c^vK?!GQpyH-j{V%4foL49<%)ZzAlBnNiJ)YpT{9dew6LMb=-WsaIg zvPHHcn}i^)ntke@@3aX!RkpHiJjc8%g$X$%*p0z0J%nr8-|tAg%1!CkA57g=><|F( z!?ELfQKW^5G<&()Nww=1`V(ra(H6%~xyE(;{Zwx9TixZ!JN0To_wXt$O6?9?WQ*TV zR=J!C8R%jfm6+!Y4h*0rYxvNIxQRN$5B4KP{Zuf{DM5_<{k1HA|Ho4i#eK zB;{H(w#qQ`34fO3s(zLidO$4BqRWASB{oXUKGbPn%g=}I*_+hd zxXvq_hgfqbsvPhO8hdS9GoX)bse*1G?1##6U*SUavA?psv?+u%3uk1^^L(#>RlEE@ z8e5j|f-nO5!hBeDciGrXn)H>Rwy{W5)TnoS&47*^rShy|EjN7NCpcU88_I{PvwRv4 zPi&vc?j0X^$jq!X&*{tVSb+C@&h7_`3a1yS{}2@XZG26^&vWag^_bTk3b*s!p)NXn z_;g#VUP|2&s7^1wq~JFNkYGLm-dT`|+dqeBzZ9yLZ=8!A@ox9+$VU<+q!+iluWY0Ys9lXrsw1qHp-DWLRr&ygS|Q-aE(oe%l`L$9E<_3^6%}V{$Sw0?yX^HzWsq zwn2$yPW!i}S)+}GAqXu*7O+V`ys= zoHomc%8m^gwOLGazi@%tEH(B*ZDm?@-f%-P{lcw|`5w+fXSjs)&2J6zr229@4llGl zve!fSwd7|6m3uUYC6YDnjr~!{S}%Eggt?`yb|sIrzCIZJz2F)OLVGBcJWKqftj15> zud@+E%EzX<$L?|Nu{OUyI*Y;;yZw*ptF^@u#b~!~UPhVHU~P}FJ~337G+nJ6q`9kJ zq0L6*ZF5Up&Pe}Aj8zHhUq?w=WG;ff4xwx*z|HX4$C{R5(pJZOxORE7U4Nn8y^HOv zl-o6@i9fc{!Y|)~9`@n5>TuMytttgUg{@9q(jxxadSNb)XNPuC-}sWtdW12>yzMRzi$JsmxE4m5UbJCozXeZ^ojN@(xZ4FAfrD47sb0B$fc zfV`F!p^uF>DMRQR)ZWei_NySh^LfSsi3{{hVM(@n#_Vh7JIv?oaCW#!&6}3ArJm%{ z-Ebp^q7=0sh4RCb_kWmB8|~)22eP$uF z3U|s|IHcrzV-)6wp0{F3wrFJ6J@X5H5k{g7}VJKKTqrx}f-v-Zjz6RbQr_9M4~d z)Iuj$E=GGJfIPz5QyzbmkG&Ps0y zY{O-w7?Mo~LQBEESqUuxn@JgYd6(>sNOVw1;(vNnmWA*!EIfR*^ufDws6+uRoigkK zpCh;b$1I1q8n2j|(=qH9u51~W@3?*7c*pvXYgzfUB)RqL_kwiEM=7>Z+B!6a=rA66 z&cF z%I)-NX#fNccevu+K^jfF&cJ-(Z!~kB-`?I1f=IgoZ+PV;G`D{AHr6IghHT>$K`4CA z+Xw!bI=Fm)z#69k3-O;l7z=S3wV~3!V5CxLxme%V^7TNQ6C6Hl?)U3dr_VfxqZH+V z61cmm_TcAcBQ>&}sNT14-=Y;Ou8YW<5Ly`g&X3a%fTIb07`uQKuF>N%*BN2H`+N!g zJ18;*CMG7zQo~^YCmt}+3JTj@VcFXa5E)_%a%upOI8S{dKiw z$U73+TQShcuR+y@YT(XJXTEzawU4^4vP)a(!B7!e0YU_ zLOd0?3DbqhSw0Md&_^kX^PBqeydXO`pN7K7V)XtMtSSUUM;^hu2T1#)AsYR7z995F zNI^vD`NPqf+h^Je?RY#NYU8eS7O%z%{q~FcphE(J`=!@+=hk)s@$;NPEkQj}0mjrv zBj_f&-QF+#C_;WNurbJu?3;n%H(#-`SK-O?(ZTn%9_A%X zDIpR6PNn?g4%mb|^Tkof`k~9o&Q=A1$lz>i#+ii(8Ut|-0IB~!^!ZJI*G4H?=F$1& z2aUZ16=>J|tTJH|`B;WpbLVHTEw&%36YPKWA?`Fs=Bg>OhRfH3R0zB2rI(ieFD;93 zTeyr)aZ(V5r#cjcr36j_#$!~H3?WN$}(zq$U>YpivMdr92XlaC+;^vd!(`2&DkoC zeZ9VG`JMSbIYgYpmJ%M%&j$2NdR6?U#@2$s5C{k{MH6Pvu;}O@V(vl3TWj2E`kwC7CoK zsqn`g7a~1;2=)cgDZ=Z?*e_5Cdo5rjLuqw3rTA&`roov*JXj!Afkb`BB?i{fRkE`D zq1%UVw~P#RVr~~R5gGOKNvP2i6Ll$q;M%b`L3`i^xe7OL5Q>|jd95#8dbREBo-n4Z zeSdX5*gN{(F#pr{@O#>qrJ@?m_>@Am~|3{3kH;5J`P$X-VA+2y>O@Of88}=C>jm!kV{Mcgo*OaiGcV|!5mOAW>^zivoF15zq*BNXipQBC zh74biRl z^u}?Wgy^3s^}C{t;x0>LvaY)EykynTD|n&bVvut+T(g1)&|4G)$ov3=^MKP#hU+2X*wvSgBQPSkNVGt* zNSWFzx2~e6hPSwgd6WE8z)S}{=N^JE%w@9l35cuT{xv1|H8EWzzob&69)XV()0d7p zfHnHWuZib^bPJ^rkOUo0RUSnBu6l4lXZvIWL1yN1UhqR<0CfT=EiBH>J=NIGv2O1I z03Ipd4V+(t!ly^BDK*QcPV)S>kBi`s#rZ9($e})9a5OVo29_e+A~h5A3Gs%ZjmF6T z`8D~Fa9MXUo*;`8v4>Pi7Hdw{biK@iWmQi7Gn|9>kA=W< zo1=M`38z~*0>v9>Zm&O*a1Yh{S-b*8sCneKC}*8Rhn^^wPa0#I<~;P%Wm`C@z48WaP)Urg}yTEm!}+ z?o|p3iy%fCz}0?5SdMl~InL`Lhd*II@ygvt9l;8D5Br8Y!m%(=^x@9<1pWbe1Q*?B zV=3x=dQoQJwTh`;azi{J2y{oCA&f%eO=g%o<>G__e4P+!Vd2!NRCJT^&b?u@I3;60 zCfH4c2Aff$vd-_xD(q$DZzIQT5j+|sAI5p^3RB-h{VWmEz|lD1I>PKmz-Ii+W>I;_ ziePB)mZLhl6u4btv_Y8U;1;Uxk6!$NZfi>!zsSo#5)ce4U|G5}dtnLzpjd9Y2NH3z z5q&o>#wrf1Z&^B)J9l!CLxjA6(;#XoqE-?AojudZ(Dlp8_~1)H}Lg!71%pKvKY zmEFyWOiKFPoGA;o>{o;MR&Kqc7Zm4#mjtnM zJRVl|_wwIpP{y&=aC(2g{R)*Uf%gJ6p8bNON9if!o}!3!gUFge53)7@Q+TMSqbd^Qgw zy?S=wsTY%jvXF+rp4SG23R>nLluITWa4ymfAe`|!u0j+-^k#VOmmCVl${FU)F_883 zX5K+%hR{7wRi)J^H;zs!$3Z`o=W?eOwe6GG%CV8bx{;cd+kF(1PX~#>Cfg5k2tO_1 zxgwzw+Oh5Il(0Z7b4f1=R|w1Dv6Y43`B3~ZW1bkN74OS;DnzuvMWGf>y2cDc>PxDl zLt3Hg9Z2#Km9B#hf}rq-SOAgTP8c4rmN;ER3Um_qRkT=@5GVB4`b`M|>qJ6XG9E03 zCFE!~6bT5Fx6#~f1)(<+!W)aT%!AK?XOA8L#Jj;`L$mxp8-Tvy5`;>G<$O+(k8JL@ zO;cvNNkv}daGEidi1E&6LAIZ)ayReBfh2_d^(zX%qllGcyxX$mw&{jydC_CeRUxS7 zWBIm1+X#Q|{R11y|E+SQ8$JFPHx3>GrE;covRJJwPE@l1Nj|@GmCgrd`l*@P>hU7b zqpIcS0>LUaBXFDf;K2X-9#Ww~(Qj>cNNXMkkf@IF-$q@ z8(GUy28|^rJN;|#B11p_&(L`!!i11wWaYLk!L@Zq1QQ7x3boJRPLxEin-s(rEEslm zLx@nZSDjl|?}%Xoc1{DsGGud6ri*cHiZ@^@qDYA%R>yva2#DxTocEE#a(L7KU8TYV zk`hB|_AH3OQ|Zbe?MY$b(qCi4_373q^U@(6L*M-0Pok2CT>nym|KV26T=Vip zi~e=Z|HtP_-M~aw{IB>>?DkAg@n1nB8Sjd}i)=ShWYa^vfyA$MHg9pl*{@;!J50P8 zHxou8A>Z_0A1~sFJ@0?IE2O0Is);7KX0TraXMFmtOL_%5x6-gzfOHe>UIv0pa35Z39f*?qWbSxT?2I&sz z?&g~h?sML=-S7C$H^%RupJVUg5T3Q3JLWy-ysml8+fPa1)~SM zpz{gw;z`lTDHT=KYf|vXaH>QMixvK?a8h|9Kd8t=orQmry})H5B_$2v;Y9iQ`uaXI zz`6~;JWEI*i9Bqefg*$7o~Xor1;4ya10SWZe$TB(6s_Q6h1u`yQ$EeQA_E`2{q5sN zR?($09AAI`>tEE;c%F>kcH10q%!%2YlsKft!6%Z66nJd?>z(>X$HhUXiEvXTP0g9- z_sL25gIoK^Sy)%70;->$AZHtH`EbK&)Q_Enme%iZ7jszYOM1q7xC~3%bv|cfa$yL= zT>0WuW$OLxmah+F8AP2(WZ!d^tLwQxUt6=ATHo8eLb^>1qdeOg!Ec^v+RT)yTSBLt zD2IhQ%g!Ee+8pDwGo6(614}nXs{`^6c4k`(Y)zwtY_L6ZP!>a_ zVwRYFhuzhWA3wf|ih8Liu}|^t-MdqzlO5`Mr^;Mt!hOHTBCC$cLLYj}^DI@7dx4Xcj7efO?ox3Hq(`q{H*hx-d`yR(e&KgP#nq40^Bs>-}@%o$5d z;Kg^<)LtAOY+{JU*xsCY{`|R+?F3=2MbA^`)rr$*&mQa2Lzm1}l93jW5@V5v42AI+ zJl$7HYfO-NL&D4)oMYZ)xU)8$qiee{cmE}m7~QX5ziulk-s(!%nIEdJudiGhsWdN1 zyx~KH^5ipZiqpe*Y%IfmQ!OtqZ)C*B$1nGo#(t2G6liR^DK#$Bj|FogWni#4JoNuK zytlnN)f$gqQCT@V*WXxISKcT%L@0gNj1rAf($x*Rn4bT!b5=9g;?bdpJuffsZF%|X z7pLf#x-bWnX_`5P)I6ly=N3?8AwwM8+_kIC62Xo`?$iYZ1xl(N2PLDUqngdJ;_kvP zZ=Uhk8o}4L?@-MtWoBT|o^(fRHvq+^KXs6g@a;KjCuL)qPpSAc-_`Q(IN>w zeP61DlvGR=qa^DJJ+Z_d4;8oW%kgnzx0O2f?ynCB?kOv`=04Wa;C!#yjM?AlyQ`w| zOkLOcQ`6>b%Lkm5l@+tVz8YbNx$a>%i^em|=sg?dcoI@)N=KC6cPlVSJXotLS?&^J z<}aT=f6gP=9Pwek8O$V>sb7x$?D_MNO&32|`2UAi}8LrQCgk5>`dVjABjwFZwz1fl>m)T3GvbbyBS4`pj z;~gz-n2-&t_|`BEjO#QT8=mXtLN#)Vav%2zY!#yS#+W&{xN5*gNy*5bx-OPbgMk+> z*U$lVtb2#2oG~Zgg1c$R(_??fVElW?)>^w_NN6a&s%mSA zt0SjICQ4Cs`IzRnha*khQc_$=%H~Xpr@@nb^sKS{fAnzwADrX=k3K3xuBvJ?-FEJC z%FKK+2`TAa@+{O@d4GR@5-O?}U>R15)$t7`d_l|-MAOSTw0dx}e^@L6Ui4+S;#nJZU*_O-*ld}JFYVtHhEIh=v%6HmBY zckbiJ&;4Y4I1QK1=T$X$_V*iCW52qR^_W4nPf|^l^4z&|AD_rJ5c1?DAWuE9eM9+2 zpkgCwOZfcxI0UVHr)5@fLM391!C4xd9Gsj|#>QvYTxbtHUWd`@TgnuiGr=35V7o}= znQ)@W6N29!wX8>*)LjanTjwdH%M;}zrI5+~?MW&5v&*kf9F5QKXn0k>10%z~V(N)! zSI%>B-E?vi`n}Q<^V3c*=PQy=pFZ6(Z8sPbbnEutMh~tdfo%QCDYf;TJO2M%j(t8vIM_zF8w!k$KqQ#63rF`I~CG+9MOg_5@R%a#@; zD@7j|T!g2HXM$g~p$%ArVHS&ogx(+40JDn-Yczp%1_Rt!7`S)=_WJL(_xH?1hP>~w zcfx@9?WA@HZc=}K9W~FR3NC&4$YC|3WSbOB$;2e_pHsRL(vKSz5_0;#zpYNE?C#yW ze_C3Rrwq9R7C9;DHunPRHQVb*NjN-Q|NJ)jvwCpt*?KU-fBVkJ}1@N zw{IoyzV)p8*)0sg??XbuG5AYKm7nGE)oca-k8ueJRR^x5$HVF9@*bp=4(3kox+d0i z*5!7lq~OUV&WxREEZJFfU@?AT5^Z7BmW8qlf#iY|yly6X;FByhAq@}8hnV@Mn%aAJ zQDI@a5|{OgQukdYB_)04;DCS|khX=y#00&5O}6Xg<|f*kWA1ZFD_3Z*?Ipuivhwos z+cGjXVYlwxBl}TbAM*aa2{RvEAY_EtCkY6$92a#_Wlhl{S+1Lw5ZDQOdU}M=2cinm z!q4BnrGPMP@cq?kqHyt@sWYjXIVoxj-@aXe@szP&#*(~!`#2dH*{kU2z?Uxxcb#;? zzojZ;JoZs2*NwSrj~+deG&Zw{wy>3xmp>II*OX4KKX85s^5rt)Cl1k&YvFK_D;)~= z9J>c=F}=Hp!C#vFpG8<^kfdHtLi3xLnw}9CXVP<9#>FFII1V5o0u0g~tCa{tSpch&9O4 zP}0!w{r>$n?`HGcKVk~@ySHyy`1sllEIL!~Pj!5uj&WO&S)1?6Yu(g`WSBJM(6EkM z3D$aNV}5oCqn4)m;c;KC0;JP(S_k}j2RP9mIl8|+dh<_*_u22P?&WJop&;ZaYIozx zVY*A*i}I2r;aD+MKq3r(47!h9k3fR5s3?Q9wDfTTg4GQ>(VMEOVAd>W&n9$!x`zGk zZw}f9|J7%|r{3NrVz|L?j;3?=D3(Gf4Hd76`xu)4bX z_^DIt8+H)2KA(Uv8KJ>R1!0MkieP1R^-oU;v-1PT0#VIEz-V!>8<3fLkg4kvtwnqwKF= z|NQvB@~D4v6G!1qSXlGV@b(`uAEF~~xE#cmFgZ3rEVurA6tazOfuK*1S-zzBKYfb* z&k*_t{}BN(3XFgd4+qfZp9B2ou37cv%KtB~1iR)sf1dOoGyfZ(BH;Ck4UQa`Us-hk zH7OI*0+KIQ8(uRoIL&(IOm)A6^4~H!4ahtG6|A?Py8r-e!JyI4Uc6wva)koG`POIv zca%rTM-EsG4*#cs(EoWxp3n3b@V)1}{}f1>;XW&j^!4l52vlCg91iv=uR4=)hqD|7 zXUJ3`HhUuU%p!s)E4u=yxq%}o_R7E<(7ErdEw`n@$iI^V7Jx)fEkif3K9n20_25xz z&njp{?i&Dk9-OJ&E|(G}Jns*KHjrOfFUxzEqe^u37M&Vxue`izKCf%LTUxpt7smpR z!UuM{0l)KFbn~dFsKnXNb~+vIZ~k`I!Zd+5eG1go)UMy9a7_dhV>jD*3Y|a&BF_tUG_NK0M(4|D2(3KCodt~`Z%9GckTlKT?n2Vyz#9_LK2sm zNdo9RCpgcdhYb9HkjI`7FmOTB?MX(Qm|uzdxDeH=DrquI9+5p>q!Q94NwBEjeD?{3Uvy*W?PRYw^P zMu@`&kJtg!_N*Uo5bmi-7$b@cI97pqRvSp~V>wVb5-2$M&<;Nn#wq5yA*HL!1pJqq zfO6yVMEaX*!}5v7NM4f$n%&|(G58`C;H`fCR5{DW#tJFqUkMTmKYvH*MW(+Jq|cu- zGaMlY!)Ar&jkRVI63#;A=J{R4y|}bMT}5TMo*VP+&=UVT+X6~BSj3adkcVbw4@Y&# zX??Uj9Ly-rBzSgxN0@u#5xu%9rT@q7NhS9M{-Nd#0xAj$V{{O=NlJ3TtnqF@)59yB zSDDcbKfCiE2VJ{%jcE1MGr6Xhvyc|ls|@AqW;kkC^_gzFCQ53vt3UYaesjHfc~egQ zK6~93IjI>?FfjJTA@EEL5B2?=IClLkpx6@W>| zVcq?Jf|z^KLKOei{{j_LQUC=*FwAKpAW-=`4i@nu;lJzbT#%PEZ1Z;ndgZIVjZ9JC zt2*QB|8H2%uj|ck4E#H6gHO8&uKc=&2919}04W{a%>48bV_*$q%o;e6uye`rY^Db1 z_vU8mfB3W4Y`Ly{YM5K`$4s(m!B8px@x|S%@*uokAc6J#}g@hVrhY5rVx2ZRhy(SKpL<;==?zcQ{s4f~x8tEpaBr z6=K3>lV5Ww0cr)DB6yC!VuaZ1-EPw|c0Psx2~_@DQ$~r6@ZCvNdd@fCK)CeVo&gm4 z$w|exlu?=!AR!WM&%UI1%SkBg`zei$Hwd;PW)kK2y_iK}juSC>{t_r9FWG|5$pYFg zO*PA}2{xN1xgP$Kwlw><*sNz=SZAM{dB30FS7-bL5-a1&2Ec^=m7Ekk5ure@ z>R(zpu%ieoAk80p?ABv&M)+Wnbo_;L`qr3c{SSFHPT0J@nyhc9j8#?dDk-u2wE|}x z(?*+bTA|Wu@zx@r(kGtsE`M0oo5OXuG6kdu-U#%D@IMovEK zE)RHVX}wFY52Hr$X>f98-G%f1*JHqQ-t_Pg2f*X&N6yYFB$VH2i`kx_{{|tTEJFmX zoHXd&nHGv2)~6pdZmd5c$0A5Q^)tCVi7ezMl1n12aXba^r#3b=M~k^-x}f?+ZREX{ zhnV96AYDm_`Mr6L2bwOYeg#4DFs zBF5S6(=77;3FfcLj-F1x7~tR#i#igIs! zUi5*RT(odUazEr(VZ26ogKn#h!Way|+?7!9ISic;Pbd{SZKSicW7jroHA*O z@&jCUwRpn+V!9-(BNnRChxiu6F~I39`j*mnt!o(_hnvv{d@l%-cexm?Fayh>m8H?v zlhJbJ5EkN5;+8PyW4Ee!M>>=RIP4X1obH@iYyx?j0 zWL;c@cQzM;;aK#e5BIl*y@})6r{hvCc*Fn5kOJs^ocNq+lO6qwQQb zFG>=ibd1v|VT}6*LvJ4D#25A2(Zop03dq%4lN6azow99&OrkWxI_{f?_TzPxWm0WR zYSsxdckhxyq_kchm44>q;sxfFa3z*vcxpQZJ(` z=CURUVB%|b_JBCLt%%_xX=tPH-B&RFJicdk&F}j&q z!lPI@kMPXmlFG7aC48g{qFMx!e&0F|o)Rd!^A{Z5!_5a>QVTbS(9H2S1E1{hnTex^ z%e=OBW;1dWdvVXE^S3xzDpI38cZp&2h}%sUzDs`9mfBlVS$!fRk14w+-{y?N;$UF3 zh@_u>;|gZ*&20Ny#?(VPTl?Osq&k%rj9GGuxA~wXkdO){7!TqwsHo)mG76TPC-qYpEJpNWr=o3M7{=Uw#!5;>B;?i9&76_xbc> zn|8Sz`Y^d159QX&l|Vx@My2|E0w)m6YgFUJa*n@B-CrVd+<2DpTK6frpKisJQA%Sq zftAsYgMQ$4Dok0x?t&I zK)>RDab~ZSs7%%1Qr2wUF`6~6Z9bH7s=bbiYW3dsJB{M}Pl{j~EQToy$ET~9;!!lhQ8jXb4m5Q3~rN$KEn#HQJ|Xl2!G*DwDGWWyAa zyjveW`wi$(K&Dk4a97Oyn@`T23=Iv92Usc|o}B(0E?v{qqyz49%vv{6!Zf8o0nACs zY8fAO!LxYu7SxS>rPQubUT4R-ato-e7XQt(npM@T6sD1iUG&)yei z$BEJzuVqHt3HhW0Sw_R7k0N3gf0>%fx$9(Scg1CW<~b-PKE%b9i8Dd^lde<5DkjDV zVRB=6Ys=}Ic^8pZu7%CkC)%q|&H@k*dHs5nCm52Xx1phDE?sIAH@QN`Yfy0vQU*g{ z(l(Z%282y(EGu-)8pM5BB0V{rYG| z7)$ceqvT5dQ~P4dH)gLmTGHw|ec%T-fltV=rI(PjtDBgRpidKs$EoYaK+b;9|B%hJ ztFDH*vrZMgQF?gbijp)lGXoC$h^t>F$qd-4$1Ke5g#KhcSi-j$ET#qUe&jzCjdK4PP*=TKbt$)4d7c;XVI@K_I1 z-&_z_#rWBZ&V>iH<3aj-|>L&*+7 z-Jvwc8KkCRwgKSPM|ZJ%Yro|Nu|a#HJjgq0`Mb207yHdiW9O+kIXJ!_FzD6&Y;m&f zlDSI(j-4j3MtE{87)+~n^P$hi2lZhK8)>mg+~g?|s+U_#^E0COE!2Eh`DzPm9<$ft z-%Bj4`Qo@MzMTMDt#RnqCtlxmSw1qcvLRg3qjb=NCcku2q(~w6>eh;IPyR}C%>3fl znb@&Kn1sS>8+;`WRn_ICN@63}H=v|N(n~ga*-8$;`vd=c!^Vd9`i&a{S7cZ4s#EpL z&SWdK?I>u>VrHacPEwXlc_l45tW*w$vlP6|(3z>GU6{dRdkt8E!VFRXjVwc4wRCMi zFsUdpS1MS4X+X`&8F}+4wIQ?6vZIouguZR4>RW@Vp_{`}-52_MlTeHm3|6(Br#Wfj z@uMn4Bt)N@w#Tlwaf+R3>7x5ww6*HfpI*xGO~Tj#KN$f_aY|Oj%Xk2n5zP+do#h9Z zLOQV-LlO4)odQ}iV6o-~iUe6~)x%Rr#4gjh>h^m-7z-VFN1L4qekU~_O=6;LUgN)u zZ_xGTgp+G;rG}8<>4~I9;we_1SMWykWV7CrqLq&=2d{fN5}-`YL_zI;>mXUUI(4{7 z)sa>3BDJkvbinS50elqClzsk4gn-bYw?B9XBZ*0?gT~dg;76Uc&XxP)-KVjZnk!5B zRWX7*#5m;qi~#LMeq8uL;;O}|kR$$lU8~FJNk$zM+oa>rC!dWHTSHvLe)V}8AscfS zlpd)EcTL-2*>|`hTk#D`DBOjNU`SKLbh%4uLXry`=W!a=q`w6EM|2cnL)0TNLhTaz z{N%m!*%xJwDtm15-MDjy7v9~GyDyHbH@A;XKu%@2P-4rE>H5eRkg30m%}H0l5$9hf zNyZ_9?#QAKyDft7q5x_6`1tn49q&ui77{N81qNGH^4+ zBItwneUt-b2k(1Skrj@?xqbFFyv%ZI{*;hMhfQiP=42htYn`0~FE@oaiIY{Zh{)*Z zAql(AVS?-adS}>f=h5Ek8+2juR<;4@6#ZEWGz!w^Z+~I!Abrl|vEGlG zo!}@;Q|!e|k?z%mxjofdOZ|_DM&!r;Mdo|F(c-OSo8w)!R=kYcs8yZg|$@NiPBXjX?!^xe& zPU=JXZEmX49Fo<=$i?~d9RUO7jkVF3UdU0#MG<}hSRg>vJK76(K9MCCl_HZz9rf8ecB@1nD|TAr*gppVZ1TjCS+`43xq_wJW+K|O4UyOX2aLHDG_?oZ8z zXz{L3i;L+ErMky1-+l-Tc-qxCR@lS#K5=Wi7n34-;|cqS|i;4N%>KZbof-$AgF<*pon`9>oYKqCko- z$3_mWbS$SI1~wJaf@7|y5nykXwt9PcvaX@@C(Y=54qh?r$@PT^Gc!SJ7URzAW|m(^ zPwTf;<=SvQ#<{Pm3dw}iIT$Fox-c^RVM)-W*>g0TXdfVH| zGOyPK$;c6eljRYY`jK#qD!8)M;nwoZj{5Raf=`LqxxAHktSwqj-Fe$c+Q|bCil_fj zc^-4dmDLf=H8`{_o>;56x$#!?x*6&B(PsX?p8A_AsmTcO2jlPRzVG+AL`zsvpktb} zqXh#bt;TaH(FD{k8C$CpE=3X9K3+KIZI%DyFnYi;_?DcZO1iFSFyC&zzrfm@e)fY% zzRR-UkfYVuoI1QtMFOb}f!E4=+&8fSr~X?1Pob#2m9sIln=jP^BorT5`U)0$i-q@v z`b+3(SgG6O(hI%1EchI;vm0ecCJH=q-bDIkRf8FPp}{4cgNm#KY` zp$Q`Eb)EO(?VX{s;|qBLZkbzOwBjhdI1fa+W={T|RYqXiVtEhlZgpk2EJo@M`f^Av|5{EjF+mz@A z10X3_6N9A=v*G>T|IQDcwjT;vwWsUlqNhaxl8(RN8;F+%)-8i-h;Z-?O-zxM{(3Mg z&lS(%55$%KM}5dxxa!lwDEmtmEREGoj0Q22BdvA8h2!ozbsgb4bq&*U zi?+KrmQBa%XVW@0`~|o&iOeQ?Rfd=@BPt!&WACR?bWdoOY1cx=nDtf zl;GVNKpVG`39IxH?IBufwJD~1fAb_$!Sh4@C%Af-uqICbKLmqL>H%Ip_8)hU5g`X`%{hSdv{`I9eP`*~!$%q&e5Z95*1 zX@~SN2S}i`789Kg-DeGkqZn%8s6-WoJ(vhMWv;?w6@RK19%U+SNm?7woO zt39G8QoEJ0KdS#gdvANpMdVAV<*;N^KM7)LP?Wb!45O@)_p1z!L|1)uq{mFa%Q&Blb_;y1Hj7y4#e!)%OzP?0V;;Q{i#r<;h*JNyO%*xbEG% z_Y^oNY}D7UUlC>UMNMt5W~LoN^U1Ww-?kzzKRAg{K$Fpqy|qwc1O~R6AV4Dlkz%-TL4X-~qVq>wCCdo3jy9!*x;~8AV&w!z;p~cMPu3g}i;MV!H64{=Gr( zw?`~Rf+R~G= z(3i(;Su~GoifJsH>#4UHE}OeK)CUpc_{(+6hM&o03j>{%Wu7k^?Em8IjtVvVhunIl z3_e7R*eH~O`I}WZXG|<7+(F6>-sxu^$I!)m7%}ieS5vKOu#FqK>VKVf2jGy zHbDY}Amo;S@8hGcmM^N3`q;!K4N#Fr4AkU%&!KDVr#f1Znt@0v9bh=l)iRy^AHH>1i{C!5c(vQ~T; z8Jo}Z83A$o)=EA1GKhH1W9YkjZQ&JcuV3IF_+5#(YRd-5aTzq!71#tpd)CKj4;#t~ zH#-aV?s0=A70ZMF zktmWmny_c4_h(=R@wT@^mmBz~8e)l~gzbNL9G~}L_K*ac5(s31G6~p{hV}I12?PBT z;j^s#f>=s^S3pIrhV>bACWA5lU8y=nYGUZ+Vwcq+E44sHnvQE{@RIe=`%n-_aoJvZ zkfWTWU%U!F(=NoRLm2oisIO}21y4>IDSaMPNAb087S>sEZK~qBPWlqsi{dp`T`2wcO6t! z3px*mOEyzy!{3a}hm$xn$)ek;46}qp@95`#-kO-azGs(6g75ISGHkZ+!{OG!_kq{| zBpP(&=>!ssZ=u)~W2ykkW;w5#fL5t%MC>(40<_cs@Y8!&A9@q4Xs>S zW^oqduIc!Af61`l3<}BrpmjDzD>a*WgHdefh>jBMx5hDP2=k)lGx_PFht@V{S?Vf6 z3J>WI4Qd919nSC`+Ea zwW5o(PoQ>XX6`Ad4Y^$*Mj!6c0Po{LTR<0^s9W|tg=?#xpgoR3+4`O%84!;(?wbQX z^p^P_nj%w!nI)KjP;uO`Z8YJlfdco`)I;iXkAy+&UgEmR3VL+?!!vhFj*Hq05Y~G5 zC+Bub#J@{Fr;rvY95(VwLtQvn$!%Po|zf_3&

vjLX$gmX3V`@}4IC{@DRr@h(A#`we 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 literal 28603 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 CpB*az diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ak04_test_one_moving_one_stationary_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ak04_test_one_moving_one_stationary_intr_at_start.png index 91ca1ef6ea1dd2aa4bc37a6a0b24f4fadf367d2f..a791ede3d0ef323ac506db8d4e9c65f54b5b59db 100644 GIT binary patch literal 25890 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 bWx7Q=`_hJY>H;`Un6gLPVAoSEn{)pIO|F@U diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al01_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al01_test_one_moving_one_stationary_intr_later.png index e9d1f8a93163d46038a6acec9516af9d1cf914ff..2bce05ad6cbb82a500ac4f92841f775b8ed0a2fc 100644 GIT binary patch literal 26141 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 literal 28906 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al02_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al02_test_one_moving_one_stationary_intr_later.png index 2bd8066deee2b241f2f2d32cc3886278a0e5ca16..b9cf2205d892be155444f6fb580b40b483f3845a 100644 GIT binary patch literal 27478 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al03_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al03_test_one_moving_one_stationary_intr_later.png index c5e03890ee12b9b9cdc8bfd5a0316dc612ecd09c..48ecef6957ee7ed2d444d086737606127b5c6553 100644 GIT binary patch literal 28551 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 XJey|o`CSEe(xa>~G%;Z5GeZ6chm@C5 literal 29295 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/al04_test_one_moving_one_stationary_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/al04_test_one_moving_one_stationary_intr_later.png index 6505281579078080568936bafd639bee98c5af1d..17f79da0f1657ce0f5fa1e016dd501f3170691f2 100644 GIT binary patch literal 29530 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/am01_test_one_moving_one_stationary_distlimit_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/am01_test_one_moving_one_stationary_distlimit_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe487e2eddc3974cfa2e41de9b1f8ebc47581ce GIT binary patch literal 23949 zcmce;by!#X_AUGcu@g}dB@99YL8RM20TEEaKvIyFP`YtjAOa#thX{fo3aChjQqnC- zcS?8Pv2^cq_jdp8d;WOubA2Aq_IzutPt7^z7-KHi^Kz1#H|*I!B9S&rOG#WLk;t7% zB(k=3Yw!whRZ|!KLt%DOT5%oz*sr_cg8#qXR7%N=MA~|t_)GRmJX)Vb+DDR>IH71A z{G-{%x^^maW~H~3@yR_#?-2HF$DbseJ+4H4U^~UmTf$e8ICj1keRORo-pZuW>_>A= zLs?BrL(5PV{k7EEueOSDl7kQ49o(mQTw;|MsW_10-ALojZ1J8OjPE@CpV(y6*VnO? z`AN@;aC^`81kKqOQm&&QcOm}Jl!vN06aO&h-0XY+e+u+SJ18kBxz4P5PQ1*uhjdy( zLgH~1=@8!3e7xp3-lWvxAw9yIyCcZXO*RNkMK)dB@oKg+<#$A-_@8VazR>r0qP0X4t>b-n?@;W`m z%Ps0v3ppLfHqu+S-Qh@PV`Xix&tB$z`SRssI^mBGFS8xkE+)Be+q%ig0}>MDt0N>m znT3P`k0^iKwsYs|98br|gY-6Cl#krpXt*>fNbc_L)*|#5FJ82s>-I}+f3WvzrY*0Z znyvoUw`vkyll_~Xy9C!vkF-`e%rr}?snI7UCPqd@-Ok<2pJ39O#gV))5w`L;w_Rgt ze#*XAxOKm%Xh>uv<1Y5A$0a4#T3A?=hKYxDb=`RC?LGHtt7A^p%JLBoj;NFr|MZb8 zVV*^@CaYEl3UV?v$GPsx#C!KBa3@*gmXu!cXKQ0j4jia9<1=X~eXx0NN`F+)?xPx{ zh3O%!_RsfKZ2MpCpr)pxrmpXv-YPOm3J3^ToQxLlW>}eBD=#+3C@n30^IO85rY03) zw7%?0pCdfQiv78?{KcKbNDPj%`$^QQ<`?`b{6a#?oXJ+5bmBO$eLa@%i{Mb~>$e?- z>I>KWw63T-@UC9HdU3{Sg+IC3QrS;@ur*s;#+Ut5yQyib!%U)X1wFmPtiCrS4PIH zU%h>+^DW^zBNJ1i#o$*hoebQjZO8Gx%(ZKK`uqE9>*_A3t2>nr znVFfTXN*{;lkFBTZR095G&DRlVzni3XlSU=zWn3Ij~sVjxk#BrtCP854(_a_Zwt^3 zZBK7q;=l}~G#k@ySl#FJ(h{x^U}zuK>8 z8>L`0PK%dWLkVYg=}>ZOxryUMP-WuBk9-3I1LXs)-eF-|b9|2|r){#+*4CyKGIzml zScqG8IB-BzI-7i#mswy*cZZuFo5SK*;n%kiKSCe042uN2Qu4c=+Xk2oz+u8niv z6+FGrx9p9XWxQarGHs&T;xykMeQHG=(Ia?p@}lX_kkTjkew__F|U9O|BKagZ(ef_qvrmHf2%1${PyC0&h5N?SA2bA z_nVz+@qU+HUk>>FGV5h}U9}8Zo~*h<1kb3nBYbz$j#wz)T$A3sJ@U7>Pvt@k&jSI_ zz|c_o?Ad|-Zu7m_t@4*H?bO%T7YN~7Ub>M;Q)?81yZbieyKgftK19BYlCnROXI$p0 z2)(>t@@2&57Tdui3Ydoz&A!C-nvK_2lMdZ}z^-=e6EUpqZe<$D%D-}t|6jSsh}(?C(gO;eYlg2f1h4N`Y$w(+}(%znaqWMzQImh2>I>$ zyTxlch(4#>TUu;b&3-*GW8=5MsqH&=YU|Vo=j)tLerf#k2LCW$bG~a+ z(#Ma}liSlmh&PyiF0CHP=crQ4>I~Z{gMSSY*Z6yK4Gw?x>Q$)P$>jIM+UF6oh6(dM z%FDykW|;$E0fXB6O{NQ2!xd5JedlGboKNE{_|cf$z-m6*mzY!B66ns8z-@*v$b&HABsW*zlQZd^f-S>lc~WLs&fCgdE>O zL9TfD@^82Muj4;k7w>pKx4jJsY*^pvaY^^U_}2}7C8r%7vtqCv{}xxM6K)}S^c3th zVdUcS3gFfqC%*GROfKCS5YLt~gp4OHCdO6SB=gy6w_RSr!S-hu3~i`KV=uk_=O#E5 z8%@29)m}{9uU^4iC?rMYEfxKYZKkTF8q#;LT<>~MJCRThCv`=|(YFg7{KKvul9H00 zGYjb%eKVOeEhU$(sGh!leZTn1T*cVJ5{^Am?u82%RKK>gw0IPDuIIgU<;tqcs;WB` zy~4VILiLU>I@PBg#}}4(`1m@;tPe!>E6ykYb|Ea8o11T2M{(dqzxgnWXW=O=Ev>$V z1KR`TEHmEs_bsGPOlM{iAMSOa!>6M9`#M>a7phtty(-Ox@G93J4=I!>-D)HXSZ>nM z*qEcU(6blVvnS`ys_;%M0b&5i|rP7N#Ypxc-O$f##v@W>@fp; zHJM?)oa*$qWKBC3ViXv8Lk1ih61CQj&dpdd@`RKx)!LK_iLM=G@0VRM5V0QJhf!rL zO*fwNKT4L}T2UInO~Y?Yn>|-%A~(261Mxif;nwJkjNr-1NqUokS~^`)t4%LmPiX+v zwJRnjLUl{E)zzQJyGsH@?f9yyswk_>({xFGoa*JzuBf@@w!64QdDD&DM3>-0Cnt z>FN?yBe*KXe(rWpd5Bw0|6`Y^2+uIRAtNIrcGWbV$xOQSvO=q@=XpqbCTFr&LQq>| zmGC=P^yapkwwVj*o0y1q^GhP`7ZnxNe*OB?$7k{q=Uj06%tB0T?13Xk%1Q@yul+rK zt$Ka}i}#}y;WANpIOQ(o!84ISe7aMePVP;r_0X+E6a0+H~xG>lfWBpYmTq? zMnrpkC7$p1koa3#L{@$DXyCW3ia@RaBxIZ%G(T^fIiYh0y$Dc!y6$TbRz_^aZEU)e?IE0p2{%sBkq78e&4EExn$o%L&? zD5dI@fIZ7l6bTEGe=iTbWMIW@2S^6&}g(e(~bKaB468*SD%N zh{IMbHY`YtV(q<~Dab#3_)r>7HgsFof=pQTJTsFnyOqH<;DyaZ&sc{WXXua*cgK{iQj$R(Yr6N- zr~V=~#}G-Qr)(;^hrM|vk6ASK{|UxWRdh?FJ2y5q{)%>+o!`AXcKi12lTKn9InLf& zoJnuqym`Er-{a1zwc|@8PGLSiJ4k2T_vA}5IGFQsmtWnt?RjG2m``)Nz?F3QTH5|v zqv-!2^xKz_hP{J>7hj4=-n_}q;4n!^kP>4Z`Lu$!Db}eawe(K3Pt27UT&y_!ni#n- zDwp?%nVBD;#;#oW{{6d;ukV8var3@y_;>VFDl%MAMTPEALsGaFs_S6;&*RkT*^gUl zkKkl_BhZw%T9QRaMpia8HFeJ!R*0{Nh=qA#t%Bur^+>c_nt5Dd$?x7hO-mEnm-5;Y zakZv5DRGe>hPjRD%x21&zkD=)FgSN)qwrjXlJI& z>|}q<_Y50uZx;EUKQ?k`O#k?fAF4_=Q4h5pVBI&%R?{gu5{VqwXp$}ZVSPu|!f+=( zN7BHZBOms%#R>67*Vuf%{-bZ$*LT;0tqgJqaoCZC^mdO$?WQM-|6Hc)L8mCZf~+Cr_Si^FOA2R-@=CQ}k4#TA27~`B(W>w+?cy&v-vo<6Pf6GTytF z@8-HDrlc@2vc)5KTkR*x?t}7(K5MWpY;k%f|A{YE+WnO*7jlb32`=F#p zf_eYNEevAzO^s*HP6WJbIFh#Q11(_xeQaYN6Nf?N!len~=0?nv=Q>sujES32J8F?% zd0aGqw*DJcoTb$`uA%hqUaDDd=(NS=gC`iRR=QZk+jYekXp&oO*(yY5RQ$x?GG7xlIqnu-<5DgfC5xDPQA}-_;qsfUDicp-W@x4j=8BX z{z0~C%_#VmP=>{}wc#a4T(3rOJL?jRz`Iqo{pP6Z<*b_!biZ$EyPb;Cg+*jJzy1&R zM;nG)=Q{cqsOUUBJPJl;tWtfOriU5>#2kbGn(_(@Cw{!IxZVBiN{6X{3lj3XX$vOF zl!;UY^~WinS59eqZ=oDr`^w~1VZZrPU*9th4x%8&^78VY_&<>Xyjyk-W3<{%MvjWQ z(_BDWMm{1u{0;~$@N904Lt9$DjueLU6||e5zjEavlI@Wr?om<9*OZm}YofOnNf#+z zzJ#5%VTywdCkI zJ!R#+Wo2b~sRdqpX6IPbU#rbiYAqB#dHVEo@iR78509Rp)}4UaXpxbTriFA? zqlMzjUOhcJ1&?WRE5lFOOqB7vK6=#gvC&wozxpMui1iad`r))ej$IroQVI%G1eQl2 z1kt(kVeY3g{?<}ZaV1#}3t&druO>L(-$-5k?b{dp6zicwZ7==Q4s2UDniTKg4njG> zZpIjAW)>Nw4D2VWZ{5o0CwA=G^}teJ-EJre1nmU)x@`;$1bbZg;_VLeN;K` z^lO+kwX{+P-==8gLwe~@EIN-zkS)+~p)ugO{YAR*7$ z*a(7fX>wc`S{(CqicCs+wvi*n`Nxl&IL*7}ZL`M;_97}j#muT&HRppHJYi|&>(Y~uL;xB(`(C^DA#KEpwF(BAuu`Bl4ik%qlyB?6vr$*BBt2#$F~#Nj!P*sEp|2_5pfLnv#>lge4F|}H`Hd0XJKxzpxGga z2q3r*pwwEuan~pWfoH|VXWzYhmx7TgebA%CW>&df#DuyK;pB{_rY1pEr`u-&uU}pU zabDHXP@LyVg-xY{a1P#iIAcOC)TW09H7II`8#+1{RaIqiDnP8Gps22@I)UWJ%E~Gb zB4=P=(1&e~JAUwBO|TpbNax9s*056#x7>HkGIwNPVPZnnd=9&rmzOuCd6=Vh0)xQ5 zS5Q@TFX{f=zRs~iI7ALyEw0p#NCU9(#NS^^yL-jHf`$1hzKb1@l$3;1Y_$|BFUy2v z8W^~T{0<4%#5uz~LOF?yj(%@9Gt3eHc~xeou1#;n4=OtG?+ttR>~Zn*ENnNGkf`Zz zk`F12tKn#Se`99286@JpmWr}6?Zw$Kdoazk0;c=SML0Pq6CkOSPTa3K-BLkC<#D=a5ZTh2gm?pn#3jw5 zvZ9w+;h`19V!8ddk8v2$B3si5TefXT*nt(VL?uOt%-%{iLky=3BRJVHwOCjgrTf7e>IVN@;2y0Qdl5 zGhSxmNCl!7M-c^XxYNoqu_1l@{J72gDl3gVX$4Q7I6+2i|IM2>)4V*1`N{rMXU?nv!YSw+OMpHA(07`6fm!wdxSzeoDR+_#>yct`RVKVJ zH_`iEyJXk=%!oWTxgP(dQF8McL~2|cf(-;Y3Gg*w77028aW(2(z)95HHPQ0AU0=L_ zXt6PIL{#j@@_#fYdxBazcH_%7;!~I^TvHRm4~{|2*RN-w)ljS3a|v7i&?xp{CB}ht zc;VW$;``KUQWr07f3I7?48$EAOdBN|g!6kKH8qv^-P+pPQRobJ5r1m3ot!u_Mo$9h z5~Ie^a9o=A^7cN3uS2}rd;0WgfORNwxu>aB??GUJ#HRR9rhE*Vf zf!75X^S=;rCh>OnSsZObdsB!y*WMo;rh~LXWGNgxEa~iM?p9Yfw@&0FWMe|?+OT26 ztJqjgz;Hx}&MDhdr*!1xwqTJq(Tn(_z#bnT|CVmWiG>P}zurso1z`n#h{zrYIGc7K zbq0ZiScI)PD)`ZEW=(dlZdu@IED4IP7g13U5b`nq^iYKe2^2Yd)?N(7%9qkoMkFn4 zw$)C2-96YgpqyT0W`;n>^Lp~+ICwM1Y;p6<>XzB}BAB+%pHFU~7y0thsPSZBO-+sG zoRXtCYWxd%ynpgdA!H&lww*LNoXZ;rfwF#P42YfA!^rH1%ia7%7`ub@=R3x@GsC`) z#I^xAifPYGtcbYAv|22Gc>!{|f6OzKgx;Kgf#Gj>@Y1{6Lr{CBYofZ`dWc16`4T^Fz|F&B_+5*X zo=`~VmWKyl1QOEka>dG=xQbaBZ^m?kVVrXE+mZ&)<&^U5K@}6B?_=d;+K9qL$f#Gd zb4Q^PS7L-b6!m`U+u)+G$FiNRT}?ofysti$%Z06?lSDeu2EHI5Yvrk} zi8^I_01v))wzPDck9xnBBnumH9IBmLmVZlcQ94@Rs5IpJ#cXA1W&$|*m|4#`HOSYM zX0!*tM~68U6UPWpuyvtj<{KDD?E5LMUV&lxE&X* zJ32cFNP^-)WO%5>x^wgL=tFVyi2(^)-_TWubW3};n%2u?>x}s(+ZZjsFQxT1?AYXA z!JtvOa^yx&&R~j3@tbpdo*KLm#>!3E0$B?6q?&q_YFh2v*5;SJ$b^D_D{{L|8Wi^H zpeORePdzNVBLWyk(xHzGnN?lDrer%n$ahvs^p>LsO%HGAdYCYj&`< zp`oEhrjK%0IyX0Wx=4S^hS$9(*~JQ&ehP(Ve$P_J2x>k0X{{{puL%K7k-(6v=ks;$Ew#mEKKs&4Vel^Nl6{8gJ?wtBrR)UrM9NvBKJ4P#}Jle{DnC0YYuNG z-?IDI4VReVSFa9j*tpTomZrJffIkO$_nc@!p(jH{x1TyO%i;y6A+eqFwIZvps}C5M zURVNu+={y#T2nf-DFiu)*wg2D?+z8F{HgKT&yHSKXhv!>YWx^ruqLP(P=N4Kj6Q!8 zGQ5$RqbqIjEqC1}K8DV5LFL}`(-K|x;0U>zY)ps!FPiCNd`VqhUPeYnp7T_sGGR_} zAt8dyI<1VXTu@M`sgZ$m#2=Iip*Agb%m)lu3eWBIMvdgWkm}@j1GIYKGjmi8z=(uxi?BSnd z0r3!M0QuKBRdyc$5F%(Hei$=Kki_3hawwk1rWOBO#K_3JpVM>b$PwN;hk8}3v0R4b z%D+AgG2Xa2&0=xL#A&c!+r^xX*tg`zZEb~STAjpu!<-xmh1{qmBLFM~B=r5&Z*Gcq zUMdePSJes$I#Fus+&IKnH)JkUR941|NlaJepnk7Yc0gFTQ878UJ*WFNG3B1O=7NVU zz@t*y_d%kfSCgJ8DK0%$H*`C7x42_Qj84LLRVAe&)L!yNMsH$_!L*v2f56LgyZtH% z5gx3liepL>u~|ERN`knOu(HhAv*#=pmK;UsJ%9VGx;oVNkr}hL95S4j>=O9aSl^_`uJRhmgT+Rnuh5kE%^HbCZ|xOS1EyHEpO(uNegX zyd^cYP~uMM7#QTwp4~vjeC}x7Qj=LlA_^&7WP*z$tR^0kEcRyf%a_;&sVcx|FNhP& zZdq7Zh-?pWp^p-Kpmv7$*Rg{BC=|x?W6IXfnyHz6n|+9)Ofx(HoA>hh6Wa&C2riiA z#a{6sVymN)B3>qD6U!{)+{V#X-kjshlgtw|@TWrg=eKxxct!zY0*RM_3IDpiziAO% zMgW4F_VB#=xuzf1OMKR}q;gqxjGJ55B3*@Jd}0D2quJPbqFlH_afT?;Bc;86ohyP> zE&8FY;mm0Dl$e+zC~?W{jF0_!teOXZGUKR!3}YJyr`{RV z9mXxa7Y1d49Ju*m?)BIOY$4Y!N2q2}@* z@Njo$5)*6rbs!u;w7<*Pm;xjkm4*XILqj8)`Pf)DY41MPqOWo@1X+L*8GE|X^HvoN z&RWIDs+`WT$GxrOev5QS{SMS6 zj_k$p$_4R-?-jfGZte#B)dA*VS^5Sp8*saTu#FwPP7aR}2We_*sx(A+hD~**e;|XR zoSLrL0UMhD<>$_Ag5ifjeonAr%J{XPYr@x%z`$aZ;ug2f%(e5~9ROjj|^Yvth4j~Ll7Wc*>X1EBkIgeTl)DE8&JSb_!!puD0*t+anukN(;LF^;Hl}wilNFwmG5hz3n z%Z)l$2$|1&V{p|3A|hpg9B2Z24|W5hsT;CPT-=X)48nSq`v93qUrI{Aa_u*FkNuN^ zcbp=-E|eyWI;6;(g^G^O;Tl6@P&(6Xq7Kt4*aTZu%YP!UOt1G#VRfNc1v@+8OP4N1 zzQhT>eEE!=oLpbU+D*GntI0<72k78bmK^6K*w$UtEuPAd!GH5tv> z;YNfm>(pPdq<#7{!-5f2e=~e{qVqE|J6;p1rysIhdbyLSk{0ql;iwR*G9)X^%d7nQ zb(gI;n5ydP>dJ+OTj&r&7b3&b!TA}+XZo^)TK{o9_rZOS>x<^x_Dqivra(~GA43>ZA5Vw#D$ zRf@H#u4XEqeOFD*E~=_a*<*O&Az9Qares7t09qr+IL)kgdM;MTos96@0uVFsPl=khcsW9+WIbi zTr+EI(%0LvFhBoRU*&$-z`#ptSA>cl9~t!hGKTV!8`v(?e!PgPg&8aWh%7Du7h{$0 zS9)vY#k&bI6#-jOQ89SbQZ1f3tfJnXjjG?qBWFxbQYtUK;}IKSSM?XTbpZK;0TBCU zYgR}{hb9V0t0qqyT|2=UvE*l*Vj4nWLYaW?DVpbYkt#$cHd!^@DpXQ70nNsCFmCIDbi?5xMP29k=5dv z#pA%EkHiukW@nc?ZwZAw4&ZqZmBuW_w*0uq|7P)^ncVlKyOLpDA4^y|O$DrHnysXz zq@E`vJZVn1dT%qKgE(1)m4;Zl6Zx5NOM@AC55fzTzdx_xt}usb8bqi4hzbbh@8PH+ zm*^D>^QVR}R z$`-p3(FdDoK5P4_76kGdeoHc>26;mm-SI7yiUC|&YXH1afO|mSIf|IbXWT?kA*KSf z#PQ5Pz55|KnH$CNp1pgO0Qf=dM`J*5l#@Xo<;{+D((oGWz_Ex#5H8_Je+*^{1)wZg z8erTGkl)1L1LERgiCTpKHL;baT^1($bK%mGI(O~{JoONn?*ceGgDT^`{+Z%(+|^HB z2POR>5COC!>iK^Ab`^t0biO{(QwB4=Z;V3pyPMySL8u{QBv8!6r~LhQ!~gOL5{We` zdKxi%0Z8#0P+jdo&J)uF+a8=n<>ev5bLCc9r(ltSQ{x6m6N2v~OzBu7Ztdb7pt1^}noO*U>ZLK0c_5GdpMsR;B=2fQ&5)HEcLvUgosa@M) zizF^YP?Xpq_LEhTHyb~?FD}{>UUMjmrK`4z=?zwLXk4TXr9G{5O%Ua z!?*3={*c*3i7CtWRETo$GV{MGM48DySlob1OyZfH>V?y^gwd$hKSNh*tXYG zkP|Bekz;zexn#6GcW%BuyPR-gvxM1y?yHKxp#eKXNk>-(l1m1pCLyXonIMX0LSe)( z{J69Vh_KV*xL`!sta96*zkInmzMim{)QOjPS}jT#nwXgA!mm~uDjL++*XIIiX(499 z-vZt%U-0?wOU(KJ?r6jvMTnMywOeS{(N&a`Xyv(35(^EEuyPF3xn}d8JnTaN=S_5+ zhYsyKcBbW#Cm^;kmt?Dc}qhwi+VLK;7$8g)d&bNEwKI4Ng=8bU=7#$f@F% zOuJOTHDVrGSC(3(<>hrji>n6GJ2@P*tBwvEA3Q%dzw%PM>zW?9FXbXj!HhHYomDwU z+xE0sIWwdLw(Xc=ZX;h7Z{uxK*hihRes*))Dvq@s&R5op*-bU(+}2=uvbu>(WP`Qy z$$guxUEB22?3`zuJy&{X9dhEGw`d3*UDs#d&>_Bxft=xZ(>)ofu%){-10I6!L?@fX zommy4pqNBeZjGSf*14zFnGDdriB8DJQ+#>1vnv(L_@}iD_l$+jdP*xDzD3J3fT#Xk z>EH*{0sgb^VF#h~y^hb?Kru3iwQb+xQud*?*uh;&u!nKF*=2gAiJZx`k zoU@baxrmuyw~H(5O(*-R!WV7-bW%MU{VaqKVPGKClSpBTE}YTi?4`}lAgF5)A0Tw=$zm{D9X4k#PsP8t9@8YD zh6d1Gzr-$No2d@mwv|Y@=5uqk`q-qKXpS+Ox6+oin~uW%deo#PqtmfvW!7`0%}bJA za5#wrNIeHByP;b!U(yZ|84=OUn%pm;#1JKRyF;d@ub0;+jPRs7_d2mqpuV}u8hN{+ zigCp6_rNBVW1UOv;%WT|z3Y}T9{EJoq=pH3Dn*mQT3Mz`8iC)a1x`tXa-t2#V}Ud7 zmoD!qH)kaM2USs~OO9D9 z2K}tD?TM+YQZzrGhi)h7LAxK~AL28_|CqQq!cvSdTwGEDCWFvz!KopiAUdHZs0x+| zBcmgbOK>^F+j9`)(a4mSpAVhuLF>p?hn7c=h#rHpJKeG#)r+*NGsBP2px z2qE}oT->JkdKp5!0@DZ}^blu?m={bPb~1~gU;x-bn6FRh=;(}&sa!gZav!%&bXP$+ zGB7xd+yXJPrnWYZ2-Wiguce_}qS_C3TAusSobLBh#_yO(i^xxV#~ZL5p)j9StH~_Yn$c3Sy<$x@NaD_{UPvsXDa@)_E0x*3C z-oiG*7huDAT-bRX^&vKY0unT&G%)hm-{&t~I=!;I)Q=7}43V%{gob)xmDAGp_?7Im zHSR>_Jc&I42+qUHOBe!BNZSzs&NzF?a(QNDxpi`|-V=cA_E1uNpwOys$nYrtEY?&W z+U#7=3|H1qjRhEK|EUKkjY2B!3#+tRmg=l?Y3lu~G$a;?8v`04%wiwZ8wIvY7+68f z-YUL$bj!oL>dWJP@HYFv$}IL_j_qQ4E7CH(-48B$`_U87Es*iUdxa$pCSss)pi|}y zN+P1$iYRV??s5@xor*pCn>KGWr+MI!yqE7Op@dw-Cc~J-XFqKvIvj1_tV$XB*l263 zq#gsvfi)mhJb0$0y_v^)#a9AO++8y@SuJ4;Rxe^WeMBtOY1u{%W)=>=JFvvCIDAip zrD_5Or}Ufaif$JYYR~D(Z8wtkt~1(>gPq&|!K}YhYLFgab)vVT7kQ6y+q&S<$MTF8 z@qlD99I5x9zQF5N*ki+0EzI)y!#jM`V>YjocPWIaDuO!eW?usNP6(-5(k=UHe%T zowjR?KiR?Eyq)GJZ?(ReLr7@eCpXOHl29)j+`>dZ4w|6ipS)2OZD}|4PdCW=yR8`f z-+GzxeG);{W8A)t-)suQW!FgBCm!|N6l19V~=JH#F4v|7_7E znt*)y?*OdT{L}vYlhssTgBFLp-{1I)sr>U|+jl|YL_?Tdv^VnaZ+7CpwdCws_(?bu zUywBsbbq_uzp>6g+m+8=RpGdTo*Phr1kL8Od<{JldDBHUm7RQg?h3D#(wLF1pbNXFDx<$qnLYm-vOjX(b0Q1-J`8?x!o*=?XW zaGhuk18<3x(PV5T&l%llt|q{{e?Qs7+$uB~?D|J*9nEns?j3vgHbRNC{Q1UJqPgz{ z6o?yhNzQ)kO8?EI{<9UFSTiu)3H5_ahYuH*z7_m?)6vgvI|C!5|Eb$9W1}@Hj(-jE zACpP+R3J%+X5KT_{YPKLbpt)UoFPjE$Ydz>IejdVu0h2P2(=v>; zN~uyzPVMQaZ@1Di6|>_V?rzPU`%yQV&h@EtjemM};`g6@aZs*NvJ!Qt_+tB3(M)s& zOO6eWR@>_x8nn#_7qM>ovhC0TFZqgPo&oshy72c06rf~jeBSIvBwh*WL z2J7FNl1Oya#B%{CuiUArD|4fw6ig=?m57dri9;}+arh11D+B{8Ig))VRRzs$=)bZS zQC-d|4^dXnaPIw2!&UHrl>n`(aqFCwIlZ_o$h0ABu=5H)HGQ4-Vy%Mp=097jHc*hm zphr8w=H1d{9=lM4rbY$^hHHk5JajXT4J-5>oS}1r2S}S=T8k^o)FuREM!0fkhk0aW zAACu4SLwb-V~_u@#vP&$@o$|)o1Jxusuq>^`pmGPpc2p4a>CZS1zkz6`)R~Ok0b-t3Xy)R4sOb zddE_6ng8iOA&JeltpWrgLxT8KKdM=`uinL}W`Ax56)FV4MGStl?F5*aT|$l-%?BkAI*&k8n+L$rh%Ebqtiq4X)L!da&~`1K;~AJPrX1`pEE<^%N}G zVW?uirJCtV@P_AZdjZ4vH;uiGpnAUTB!VI$%$d)g)ph6B*qPPD3`b8-TO!$l^8eItenz6^)=0F&py^__ zfn5HAd$!~x&2i5{s zrYUqd9@01K%8_OBqBBIdH>-54++>t$DN}vXKcap)Uwm+Jjqv>5eiZ|usxeMGaT^hO z%+wi6%jsM7HG6~PESmbw3Azd?H$5(ypP$ZZ=x)>ndA{{`ZU=j4t*FxG+&Rb<^lE}b z5cZOoC~lFK)ai2c3GV~d8#;mE8A}smp_+xFV?;|Znd7nywH5m^ z?b6j3`MVQv&n)*NZc1dsEk#EeBEZg#Gsy-@tY zShC99&J~l9mb(#YgDald)7x23zTL*Y|6Vu5@@VU=-oTVu8SmJ5(a}Ip*ZlB< zhCk|j6PKnx&%CyjSh}p6r{B3FhI;nWjkBpcXp4tfPIGKdzPx+e{%+=NpSK^Q@NQmO zN*q4B?@kv_y6#Lym?sU3w=CaW#_SH8GQnPl@>3flgIkVd4VSQ1cjSV)g7eL1Z3S{Z05YwXIyi=c88XIio$lOv+9##64EpiW+ zgJY~3hFd8;B@Q$sn}o$Q^*@<|1HJ}C8l&{xHJhu!Hza8lZYc{BSAX{G zS-t%VO6d<8pZ>_}HS3Y$%-B{LVkLKeW!dE8eCX@$>D%ki{r%S|o=n4I6A1=a=Be0R zkvy~UL?!;b9rVi@z0Y|_SXlXDNlljcQh(;P6w~ksUYk@3@=>t|$4QY%Zq%FusB#9N zqI4wTVF?3?h4eKbYTjBm~BQnShlU}!$UDleyKQ3>nC@&Wm+j%a_1EUh0*OoHr%7&g9k~g=Q@Lw%u|6b<48&i-dvRXw!LF=%U&<%QSoyXv$4zpS= zwW6}+z4`5^==hg|ww><$T{8=pl$BqXm>BNibYfzf=^ILBs71kaNkt`YV8B4S8t9GZ zR!81tCjd*eLwEWUT4Qv$-rwNo*A!U2Y2T1+n3yWjVaj7rd+3s);;R=gIv$N6y2`jI zfBukBG%z^L-qA8#`y`_3m0XCB_F*gL8*&9++2y4n($ROhuV)Jf z{kdu+@-KS*)(y$L0gB{g)(oq+9WN;M8K;(9Pw|A~kh5vtctjg!PUo;ynvR_1oXq86 zbIv>cX{|*!e$Aaf`GbS!$Z}-^EW6@)&#hf$N~Ms4FYOpbQ-C49q%C)8PR4TBJYB;t_qfMn792UsI>Z*f{SziR=aiXYjOu5hU2f> zl3E?*+>RCu1vk&jsJHd!#=EggpUqVt=sGiJ#+KYz^J$Ua_+ed>OZ$$al_z$Y1Uwli z?Z3UF^i8Jag89)E_r~kI{D+)L)#uWD#FJB1F;#mpRSnM{miAv>uGWuNnA7!^OZ{t@rWD)yp1)O1Ps_aL zBV*ZP&gOKh|6P5I*mi%8RE46SQ*m_lribj}8?B)fMcrl*HcRu(Hg6nMlwBLGJgk`D zukij03aa(#_h2 zo|V;iPjD-kg@gzy6st4;usF8N&b{AC_x*of4r&GYk`jAWH+()c*e~k&dD%`BMoRy#d zO89vxK|w)d&b9i7YD(0ZJ1gjOl8#c4OCIo&!g@*^pbQbQsa7;*3CKKu{FqI=c)5lY zbFXFbUmK}iN`TgQtm=`eKpedL6^g?iI@2fTypK7>hxq24s~EcX>nOB$i95@6J{#}d zx#vH8JNC5@K}N%I=t5;-ZayyzoWxOrP{j zb{*dzJ!dvy^WS6D$g{y)JMC8Q^Vq+Q*y!kM$&I?Le&oI1#{1MWX`*-ctCcz&*~Kkm zX?F0zuf06-EiqSd_~S9V)J5r*=0U?}$K!jl{z|93&LpAI!S0H|-J8gclTlQDl)9Rg zyCUyUp25=EPTOD5$lL2g?jyccFNxygyVmiwD#{0)yTVDIiFk}&9=_X7DT=ne`l~DG zYRaCPTZf)Jd~xc9AFpotjS4^Ujdl+D>)GAe>+Uuy4=3M#6e-Oqvx+%AwKVd5Lj9Y> zz`a~p3CbvE(c#>e)hlnF)Q+#vAGi=^FIF^DNnYVcF4JPKAG6G@vOkP7*7s7IdRSts zb1yMrs;VI{9GUl&(scLsre_BGtbdr>fSzZFR6EvLPu5;#WM3ND*WZ+QIh*#GyqEE5 zp{efXP%+WnTOL{f6gOLUy0gt1nf-LlBU;+aiHOgv%bHBrC&E3Q|hQ`Lm^@CtO zA4wcI5|s&C+#jDbg5uTFrjev$0h+z~!I(XbL|XyN*8u&1NRJT(#_bm@ERv9NsRoND z&-slgjDFGS{&-=Tu_*c#`DV$fQKO&_%cK5$*_;!r8K0$Ox?7j1a z{-z7}EwdwfI+U51MzS+Y)aC11;WTANXY1>Pg!7KstyBRV4w-L~`1$x^)6%X%0EU(| zE)g~T!y8#2=DRtC)*U%==hfBY(Q%dR*Zv4}X?iAw`MZZ}S5GahEOzl`$6HM&Gwoz{ zIw2L?@;$m?%As|(*h#NFw8zlt;1jYGdsl^=kk1{IIUswR(U@fmF|!U7+2c}13;VE> z;ZMXS0xJ3dq`{p}NJL%sByr4%r}20A(5tlNKGG(D2CV&@o;G z!+7EEBjy!5>RTKj^VHz$NiaZk_w?8vsCgNmoHVTvEvJumf`&}HWK5r^m+L|2p+d?W zxweV9bE<2tVlW(q?@P{YrQt{h*Cok{q`Vu;kqWAUpq*q!75mrZr zlkyzdKGv_m68J1AXmBVq>zn}XWi71;+sVG`hxs+Fx38mhRX=)j=<{`|)TKM$-iR}* z+FbvZEfzL;s>1h<0F~X5#MWaU>ivivO=RP_3#NXKlW}C;TFJ{_`kTk6f)8*fQ*gbn ze>%6smsIbU@auC#CDakI6FVmGnD!(0rd7-`^21g4AGXw1cx+vDX^XAY3nW>O1fd0 zEjyeYj~uCcr(MFB z9~A_X+;HUEy>wRnYK22hsS2Mo&ch{G&fA&|CHWpIhfgbLs2HyiP^?Ag^q|vC~f#ft4WC>DRwi4HUA74RsT5O4&BEq5oe5`~X{72V0m?!-xJyGm)os_#;mZ%gkJR)O_0jXEE^T_0PPmjZIB)(V@0y z@eB|J93ZH^uOSG6NtX3LdIBDBo!28W51al%Vc#qSG%ak|0Z8GWyv;iUu*G9@`$t+F zNO)%BlVX~A>*z#nCu2uclMJ2_o%0qWEvk^(_lQ_05SUOp4Z%IhwEZ(%i}#j*<|kWH zIT1YwXvhO4(_ug%EUm{b8KnmLPhMM%v<$RlrV~H&2Eg-Tqur60lEaFBrax?t?b%+v z-Taf2u`vDhVU{78cp+Gzc>hr>#G#h)3IXCZ;OrH9qfdXV-h)#9QmfOCZ(LLTH7sK` z@Ho8SfySf)OOBlV&|2}?J1~jFz#)oII0((X9^!!ztMq&zzey;Z952vngo&3Wgle=s z28>&%WYr_;j8#(~Ysen*s}h~~M5lv@#ti#p=EHOA?bCa%vr=oA$NMw zYv^sNgH-$me!o{}WZHXTuLK!ILwH7p3LH3Z)digJ2*((xJo$zwscIqH8og0^-xFA4 zj|~(1_N|<~Bg8EXTly*V9OcDMYKCJFud3mj!j!)hbC}nIDIyJzpb=)f*pP~2#+ZM5 zq%~We@QzLmypA`3X@&KOv){-RQB&fuUb=jlDDkeP-hS!0ve0S>JJ_47YB73xsYnKwu^-Az0$Gc=#vvjthJSuPprRoqm1N%zhw!1!I!Y@Iu<eC z+wi&pP%aqCN_ccWptZFb=F_K<5Y|+tCa)aYaW?J~fr#*wrI_&W6HqK!mzpsifPJ(G z?xzznmm+F#M?B?^rC8l?!4kbodI$_cj*BVfVdC-HCB96|j|K+@YOxR4S`?I&VgUJ- zVc(P0d^h>dX~nS_lDRD;AVmxoX(!pwM^VO)qYjShIJEYkhfrRHR6F%reW`dz`_pP# z)bG9zk26|DhZR1iiNJm^K$Br0gqCG=5%-~gE|9VReb`bQ(M8iow9l@MSC7RJv>h*E z;Wh6&Keyyq79z|)=77f*q;&WmyvRQBWdA81cx8zlgZlrhaSjjBMvdAZd*cF}LG_Sw zc<_`8pZLz|Ok){PlCS+3Dej&?dzN@LTy^16j4wtUXVM3%A|6J5QDxm8wCToZ z6c z+O(^@{Yfa#3Ws)7qdk!atC=}o%*LuNX*ZpQL)|+6HMwDlJGVUn{gIK-q4NyU#9j|B zh8L17N*N@TH|p7HgsFVTrZu7~aoh)ntcIJM14#)ck}6p z3w8DNYqbZC#}TK&Jux%QW) zqbPnS&H~Gp30V+XCZ_nxOjI&Mr_)v&x-3)hSuQn|nJH10SRj&&8Tm*{v^24@CE>;j zwN~Wt5j`ZzX(rC_u^cJ}l4hT~Z^GOU^#}C(-S?b(ckaFC^SPgME@CHs|I`|SqTWfZ zQr`1`FU7I3G@al10e0u#@wQK3BOqIhLVup7?D9R3`juB!((5fCcU(p#pJ^y^iN%en z<@2lcdi|@m+t6?z(T!AQ4fWsUZ4f5RE%b|oPSXZez9D`I>D6%u&RfL9P<-tB-dp}6 zRI}D}EH4?R&@ST6M|pxAl{oEqanJHx?-GVXmsVRde4+tOX|FdxnUwZxalxa-RRu}C zbHq~=Qp8bxnS2U57fDiRvt(8m0g443#760{9#(2!kC(2tshJFo8$BywoKiX1HQ>qw zxI&L5CDl{^kqM+@LsSP|P@t&K3Cz?aIxw_$pozh=cAthS&&eMux04M}V7mqdB|u+| zY?fm0O(k4gq4@Fa;$iR)IdR>Y3`u}YNQagP-F(B!GtiQ~tA>6q+4waeTSC5pwIHN4X|1L7YVZzRMHBkZ zPw@S7)QL_>dS0HQMBI4DcQ0S3xS?h6DP;g0Jclh+6cFmrW|7h#z)!LN0SH$d=2(xz55`pK?sm#1(LPfPn4?VmI0p&qKp{^RJfuY%iaYwRNpQlhRXS zagEtn251xFy_rXhlmQUObqN&i@+WN?tqUyv> zWg{I+fjLMjwVf9sH?KKT9*m=b)Wm!Y1@FUFsbFUB(FI=>B7}GW+!KNET+9LXQXfj=tD>R)E%p)BCVFwfTK)svU%2V>oXKQpp zK|8d>=Vg9`Z299_R{;%JCXhl{mZm8r$iABEw{!3ux literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/am02_test_one_moving_one_stationary_distlimit_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/am02_test_one_moving_one_stationary_distlimit_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..3f750b4411c22950b52b1e8c5e75ab7f8d54598a GIT binary patch literal 39122 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�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 z zWl%GE0+$!Bd7S#H4`OAQ1pyBVEPB8s@Z396pInK`AaLD4&W1nkp~Jnepmf_q-6ajO zw>-DX@CE`2pZ@$!(LoZ3h_Rh%v}TQoZ|FVHp!VP;6ZYbL;(%l`G|<*kGGO7 zzchHjhjL!*)GrHCi+x$xNLxuA5_Q7GNdF6 zIWAm!fNdh?={~7K3Dr~gx5YjsxAN&O_m$q(?*95JaoxL+c|i3fwll2uByqKZeAeCP zWqg(qK);!FP9uwocAK&t+IO444{NR)FQOfFutn z%nGi5d)a0_CbhuXjbR0HpUV3B>N(xxb64?mlLQsLH>nOmdt25-tGauo#CKgI$N9v# zcc}O{qx*^-gHp6v+1M_CQpw1W)xNgAQM%o>K2=c2XUw@GO1V|s<)Rf8| z&e3m&lFbSP05goD$RgGHF*Xi~wM*(s3(*Wfz&(Qg&qffYy#!|1WU zeXkV(6wxT3S9wXhD4MW{C3JF29<|<0*L?=-JHbg56pes$w8BLk+5*B3V>5EYHpOiNm6c(oVBO*x|j_(z^*HB3+<_mCGN zeetS&prr4OHHOB6`G}*f-Qcvwd$0TN`YMK3dMW2%OZ6p{zj6UWq*PIYIm3BC&YQR0 zH)TAGjOK&#S$^b;8`$d;42$Y@gt?Hm@RmcgIV9_cI-&8*B6)AW3O>KBr#QC>)Q9mPCgTRdL)rWBHy6ep*_Al+!H5Dw)3PT|Tt#yS9mqgNn%2bId@4d+|X! zGt~C}IrAnXsC0ma!EL&Q;x$n%VytB5RD&4Dux&`(QmNlElnn`tG0)ZH_YGD-6z)L< zDDV}e0xWmw*c`Yg0u6vLS@xF zKIed7@&Yd--P$i14CPH3qXW4?4b7bkgoLEGVZk{Z#b@TJIu2;!l7NW#8A;z~o>LWX zY~gsn`Nq`RI5uC^1J1YeQ%3doEawOFH0^kC^vCTBOP+>D+RUpF?EV5DbJ34+XLrf8*3KmH~x&KxB`=Q9Q+a2e?SqzR}*@6Q^-) zSJs`tfC_|aD!WW)dMWGn?GT+%W(p8>R`3TvDdhW(C1f)u7M$YkT~wUy<9H7LW*J{S zdriTk6qMHmW|NdVrlKl?4;M-6KWdc8h$(OoBJiKXw+BL44TdgXWtZ-* zE)i55B*P<%#QVqn<$~P;466F7l_wSw{)GjFw6fUCD%aODoDd0{U9L0z0WJ|)1VDsJ zp!=?U&k@%#Cee#UDY1*>H=4|D(!lNyg16dp-8~8QfC*pCqaxe!u-b zc8P03Mfz?&M zCpo9L95vo(8PoSZ>K9!{#`A%9XNL3)cTyKk4w;)PWiapz&q=$db+sx09qF6WnRrdVkV7wF> zdNqhm1^g=s#3+v!=Z>VVa@S4&jHFECu}JU<1hrGu1r;$G#>JW?@|aN!loL|B?r>66 zHjv{zN{$~ei=r{9M_(Q1kvaz^o%%8~|CF(d1Y|4}_&ps#BUJekypRsY1@YYaAIO^q@cbe5H<0TECX;XwAA9RSt5Wjrdo7lQEU&0I0*FS{D{jKr zx}g2sx=9EbMu-Ps)}_qqK6-?~)$;R}kg%X_5o>1AhXDGZAh@=;P%}SB69ADu1*k@k z6|u4sm&?WqJxY9{`UZ!r*De79waNvl1q9lS9l`EfgXAF+ivw5bYKO!FV5%gwk$3N| z9~wkf0jWVLiu!b5U}dS5rDYA+8Qh@JSPi$}+PSEg;UW!qv}R+F&{^~wm^_aTV_=%2 zSqGe6ip{>F^vIDTq+?|i4Yrr!C$JQaPVj{O6BmChfes-m&?m}SbcHl z(6cad0XKa9+L#p^8(SHUj1kHtdHi_urOTI96Y8$hAd{4&2vz5{`|RL&@7LAM0k5%i z*)k1H&7ZbjTmRE#E%p=xGKOOz2$xAQFfcfQj*x|cx4gs5%u#3y>P`m5W<$l%)lTB^ z4J-SWQ`^&2CyekWTdo=+x zH)R(<(+pmIMy2&~MuE3oP1Z7yQ4#^;>*sS%C2$NqQ`+x8_naBBW{#L?X!v^-A{iMH zi38UF`$1Fv6g~apj6U9QiA8A+ec0TgUC#Ktw@Faenf+E<4(mQq+swR@)p`!4cI$ff zIh5)!U3C;3zp$kBA7m=Ue`rw5D`7n|GR??fOJ=6uoD=Wtg#>mU=oTvo!mjnW! zB$8gSE$i^R@UEthy9UlDrM6S;@y^-fv7V8G7034W>MY5*piSbRI=Cv+GX(^q~_h#b1JU0e`)MVk4W=xE){*^OWCv2^s&uDQD*JgEf z9opBi^=$xHMDb$`6|99sA;H4S9N=(Yz*F)0Ck>t>f#SUfV%}Uoa7WqMvs}L)moY#6r{9uy>gi3vYPv6T7gE@sd$nfBnm?KS zs$j&o+2qyJO%~~!&L;~0o+3BE-h6LS&O4>JO&ioZUgWU8nTmC01uDv+5udM3txf=% zL=o5ozAR~E5P7f5(WDJN77Ypu>KQ%+`q!X$;O1fP&a{Kh3G-A@bRdL`^I(tI-Y0!; za8XbC_lb0UKc__2lI6`*xGwyl2xnXF?$+O&I|tSIBS?2wz<7OVkuoCiVDxN$9R?{r z#Rs8Z7g%Ivd;36z#>1D_XRhSu2BMj~oo|~*NX5C9X>X)*1$7?&ae~T5DaOkpY}U(< z-gV|_0VA^lk!!HDlc#y=airTlJIc<(AXo$wiz&DWM43UFnZwXv-Ui{#W#;rw9d0q) zoDr|N5#dv`f-p#@^CI(Wd$1sMf5W`KnLQ{$KEHndsYva-K%ii;x_VYIYt18Ie2bSa zuaT}s1N!mMk+WYnX#dic-2brlY@3#Uw3sGZ@Z&lz`CNO;`x5a;%KMl8^+;YP=jVVl zx}Ka|F?Iy_GbU4I>t3iK#Ka!H?Ox5#oq5fn;De#DlfN3$3Mo!X&2;1AM%i_?^J*Gh z)}222#{n&XS@YJ^u{Y{m^~87z#4?M*kMvBzV&T(@O3cRcun(coN*&B9absB>BFEhkW4?T`oSbfAs>0rizLU8B zihj<&?w^JP&MP_v$646DD8&6%MJWfND4=$YK><|H4rzs9`4N?o;Q^tlZeS4d`R!ti zmSV^r948pVP9OH@5?zHLSTq2SognPs(YTQ?qqM+b2F)>NWZpxUJlYU8R3LsWb&z$Y1u2m6@*O

    WBt&M<)XfT>oRli_RJHHO6;c0nI$hoRLj`5#xi#tMJgNSCuLgA{t9RWE-{z0?@u&0;E^z3f!j_XClLHvcK8Qe?oNX2q}- z%jS>kc>M;BegD%OPNPnA6NI0lyMyxRlF&KRXV0WQeCeG!WlBdZhU7obD{Hb+($8lPD457(FFX0e4>5XlIp23dpy`9uQ}o%HR!_DWBqb)^8hu+O;j{9t z({&-^?2zkrhDKpQCnO~#D9tkTYH$1iyW8_-ou4iLIHE`tSpM{9$@7=ng|NWc#KtSV zk~4Et&Ae@MECLIBQ^T5g|9sydHxr+(SDYRuUtY9l7GDuYTFe#D3mLQXPed-FcVSzy zWahu{Fk*<}=Oldj@&yO_7&UjLR*D?7acBP>?dc&$yT6~Aq_6tfj{bhrc4rT>S;@<8 zOYSSf^Y3=#`t$kY2TA6B$n?FcmQZJbiG8rkJzMRTaCl^-Jo;?mZ23PgbCQJJ+MF`e z&8B(UW_9aRP%%WN&vctXL;VXINK_6B;Y6ua*4eYZ5xq{F|G~9_D+P2e=69LI*)@cO zU;aJpoViEYOa8wm=WDLTJ46xYSH7gWT}#q0t1S6WNh)jJmVuJle=HPpzz7C|V?=Dj zs>=R8|7b;7$)xMJv}GO}{=Q9I%SES8YBi=#GB{@p*OKr+t!A7?bqof|v&{l$ON7(f zwf&=GW!GtKF#N~gK81^o12q5x`Ud9n`_bU&GR03@%MJ#W$i`dBgON2b&zs?|gXysbTY zC;uqt%`IP9j(exg4KrYA4VN)+6q(KQ2Ym}CHaL?Owf7%+U-^h$HyTua*)?_H}lat@?B|oan^Z^@dwt4>pXJ4%ooyybi z`K;crP~&iyHTKT!I^)GYd>lq0!bVd(hMLvI76N6vjDB(oJ9`^sLRbRyK&r>q_fCeH z`unS<7)UBE%wL+HwCU0P&7*J9^u+znSSOml|4Fsw4!4R+>^-*QLdBAz!k5idD|>|{ zie#pQweQJg&TLaOyZn8#y0Ec_B?n3uVD-}j4Gv8<*VpTN?bf5e-k$r(fcgBqSkmv4 zbzfT2Q~rdl33c*sasmQ4s3*)01;M#7Hfh+iGabyr0#t`x+UN;57$nXu?XeB_EvdeU zz5)7W6h4*hF2maT-I^B<@{ga8OpN35bWn+~{IK9!rn0%WDUO z*)$q!_K2w+>{fZyo%Gh(xL~BLtc=9n5V1h8pQjQ3r7I~Wh86oJB(W#NG#xJ_eHeUE zV&;_!v1YS~?uIVSU@lmv@`hw+1$aj?TKJb25iD4Cp!xuJJ+j{q{N_4#rie=pFB=!>j%}Z-1fFSpvLlL$J9>u z?s-L!p;KW6k0spiE`i#^mAY8jq0*!5P|VeQjrg)sy9M5Ge34-emQfJr*^eL2D>~86 z6+In@$#r}>!sx~H+%;uaRplQXDB|!nr5=DG|81fshp+11SGIvnzABF#=b)&4xlBL| zHa0dSe)?Ki$~-Uj6R;Y1MEI7-nK!d7ePL3!$WwqnH+ex=U+$RNF!f8x_GktGpsy@ph)juI}o23@tF=n zg7KI#4k_^(OWd&1QS^H_HewUB3ec)>6^*7F+S}V_&e$j-GK&bsusjQ$-5SE0vvD@m zyvhQcIjeome!Z#YzI{tc1PrgbW!WWhGII4Ew#V^3C*)aXd$rBojnEsWdSBZRYO z|Gl^w{lYx?LNVTeNoD~J*EFNsQ`<`yjKmK2H`O1W{Q&?1`quoaQkW;_faX<&XOXnV zWZS|MVE955L}Iz;Lhbh90JZ@eAak;y`@>qOv`CwV-HQ5JtL&+@y**sIgUxic}!B{h#b}L zv1l{}oFR1N;|@Bn7DEu><`2Isr4;zDsyvp6m%AD0A{-7H6~SCkhs*%6v{T9hSj^d9 z>|bJJ5&a1k!sr`CcL32|;d2knI()LzP;3_AL6h*D+zr465fhyL<)8pFz5-T*hp^L8 zRLuixh!2Ty}mS1cY^B1#(t(Q@FN6csR> zmxWGmz>2`U3a0fEx7l zYHpHvVA8Fn9nI2NbrGM?A?b4*=HifiQ4!{7%0MLoheJ?V%^t7${ZDXt|gk>}N`A>pd$@wO} zLkZLgxOgElNor`Y6Q2bVD!W?e`Jkw|2;c1Q)b~)PG@Olp#sHu@?fPo7cW?cu^LtQ* zRP>Sq2J8`;IAMgDMxy7#k&ArxXYLx}UzlXu1(itU-QiczvZ63wO~ex;(RmDl6d7P} zr*MlgP}X4Okn@-euR#n%vzdii=%mnLZ{M}+G^h;YO|EM(x9?-R!Pt@lCZr3zB%J|v z?dX^N6hM!zuSd9%&b}gzzc!#!dZ75GK@f2gic&inhFBg&Rv%-OxhwM^HUbhUVl+wX zL9o}h^@CFwuOJ?zsBT2vTNS=PWCO>?eT4AfXtwEK%JH2;-!MPzq|Zp`GM|(F7a}6( z)*~arva+>>EOy%!hTt%L4^+1ZXWJ1}izBQTYtDv-*>((v_dIq+2@Kx_vwfjDLP58G6n!)d2USn-wTp*vo;z&7KO+<{LELtgvqLT~WP9axVf zSBmW9Qbvz?@^^N7%Q9w1rW`@k7(r{_$zg#S+OI31#(YltHhIS>KDhmK(CA|T7Q}y7r*3y#TVZuVC#o8GHavt3k&5=Azg+ttF4C0G2U+BMc^Y8Jv%QOHXmgM>`x603><`L z^|g%8=fK(x8CP*Kc=h46;A85PHqV|mO(kY3Ij11ht28Yl?+l<$nDnuMbNFxCyNKo) zl3;J)$(a-$o)0(~XofGcL5!m$+KHF|)kP;N5~%F+t#>z_X2aYj-_C{Rq|$pG8sYOe zY!{jzYz8|oC`O(8P`gDYy!xFN0=}fo?(zdcz%bcyXrH^B$AAfCMUeLMJ*W{&K$GN` zCpA)Bz{VLR=!aPdJ_oIE<(>}=X)KIC@>=3*68n0wU$HSriOyRZ3Xv5ATFR2Yst{0U+luA3+f530eClc`mPFlO?KX{70fELq#9ez70FBE&a^$6R^ za5`1@kCTWQV%WlF&p>~RU&Xh8z{Whcr5tr=DT-QKcVoFf)AKM1!ap?=$$2y7emKHe zcCyvZ9nw5+CpvkIw1_30A`S2%Sq$wz=C<&^4#gz|1Hb$%Sb!tr$lpKz$hRCtt+aXM zR*th9MYZcAP{DTbivJ1gp|}(PhH0$DQ{49B>CBLiT!ukptET2G3Hsh2{>q=X^Zo9) zF;X|y?pyiq4`^W5Ho(L3Ln(M?*D_QqmxN|OF(=PTEBw^s#n6|6DgYhyuXBG1xAmJny-o&I#9xA4CXz5jSo{}`D6_thV#>Hp$sgiY|2yfUw82o!+-gu&3% L*s7kYX72Ytv7R3Y literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/am04_test_one_moving_one_stationary_distlimit_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/am04_test_one_moving_one_stationary_distlimit_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8edb4634b43c32edbf8335a5aa9057ccbda96c GIT binary patch literal 32540 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/an02_test_one_moving_one_stationary_distlimit_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/an02_test_one_moving_one_stationary_distlimit_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..70a0a8768a29d93cae63b48a1bbaaf2765417035 GIT binary patch literal 25471 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 WL7gAX3NOT(QEV;ke=M?aKk^^8lL*iN literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/an03_test_one_moving_one_stationary_distlimit_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/an03_test_one_moving_one_stationary_distlimit_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..aa9f98a672d82cf94a23137adde27c3c4e1cc87a GIT binary patch literal 36212 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 VRVA=VmVtkE@AzFUNyXUXe*k}eZEyep literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/an04_test_one_moving_one_stationary_distlimit_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/an04_test_one_moving_one_stationary_distlimit_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..2c434ca070426e7268238c80c87d577943f625a6 GIT binary patch literal 33175 zcmc$`by${L*FE|Gf=Eb%qJo5|fJmqyEm8tf(%mgBAdPg1s0b)X3DO}Vp>!!JNT@VO zw{)Mm*!z9I-}(MM=Q?L!*WPTA=jOiGnrqH6#~AYtRg{+^CZHw2U@*k@q{Wpn7;Ik* z25S@_559A=Yw!r@aHNk+bQk@n%zPZPN#yf>lvf@;`1T^?RHBb?JEQb6SBl zM&=GaLjb8*T%j}29Tx-3%XNtG6a~C&7t?1YI>h=mAqO`!*bU!X_vvSZLl! z=eg0VKIz>wGD1&HO>O_^QDaw{REdy@7=G5RiW749UFXi8JsZbmjCcOR1w%8lAoq>A z+UDkyTgxNY*D8cOHhr5X7+6^F)}}jyBO{5e`tu{l>VsoHf85&|@iG3Md?#$21S5Q~ z{(z5Dt;T_xpZzg2PnJ7S$pP#?-_ph=YpBR1@rJFM*nxTAAad zOnJW#tT$Q|SV-I=jfjW{B8;e#5*g+S!Iy5UzFf_zn+5vSOyq$;udeGq&A9(2RWgz`Q@>i+#>VDZZ0!4)uh;U{y}U364<8a^zP7jHu4E*$ zU%h&DtGKbT(NwS4VM5Zx+#bP@I4(hmMX8MAj*~ zs9*?yyNuB+yo3%oB?ud`KC>im9jSwXSXR<|cp2?ru>7e-;}08)-W@aQ*%JSLL_< zL{p@pv9W(cLxbapthBUmaWN0(*V%dqVuOR-4UKAVuk!v|cEjiI2A@v9WQfn;?hi){ zmX@2lZosc`LOK`FA2uL+B)3l zaOeGC=i%Sh>mlLccj1NuBjGTo=KOPScl_}fE?&gEdiBcUM+Wiu_&6yQRUqt6)|bxZ zs=d>-wYBI}B;0md8E+)qA2~Xp|6OVqb?*fW7RIVKJJ7H`C}!^$gdigWLrUE;L;yz` zq=r;pxN{;VCZ>gfQWDsMnXa^xsi~>o3-m=|wtm5FCJ4BmhEvo0{F1DJl~tG@&PgK( zEh?9jaBdlr&9Nx{Nh+`Wj#J0~i+KmG`~N(7{r`6n+-T{B4N`mtEm7QyN}(#O5_j%k zLE!b@WeCW;r=>*;2cpn*SuZ~rjyxwTCR7Gu4W-O4Uj*}mQ&o+M&cLxC4R6#Tk+9Zi zBPxs$U}io6src^R=3?!{DyPG^c&=7S*u0@7v8pzuJz*pi$b)})^Ub?d9dY4q0#}>ye+rbcYl>dBCGtNiqdUzY zeyTZ&Udqjl?~~og(}e{aHxCbESS))dr<|1y$Ss-b1$1h;8YyM$P=V}vPKc>6>a#_Z z+^iR8BY*RMLC zqh2s&GWgmg)9FAMZGiKsxJ+^H@wgI-ugY1Jfq{W?lV)5z265$1PELl9ERwu;Pw|+w ziMqSqLby5=7*4b^`<(5YDlLmST)-3o1g?jiWd+NPy;0qN^>1# z2@K}&@UZaHr>1hJX~i_j$gQO`XEF<0+ozA$rYxP?0!Z7Bk;9oni!Mgkeo7(tbqwa+ z`}a(ooTLz(mX?+?-RZJ1n-kO1C*hV%Oie8v%K}J=(^yDTpFg?yO3DDAqXU|2 zS|1g^=*17def!ql)wOxNG5qH1J3oj_^J5yVY#HzJ$g40Onb!WkPAr^6qOGl+;aD7Z zmNQ}y1!i#Y$&R-|gtD@-600XM`kt$}b#-+uls>+WoFuov{lpqkFkkI&_(E6&Yp%H=*Of$U?d$AW(ZF~|EDOkRig9z?&$o>&fRaz@=Hr&a^G5tBtCbmrlCQ6wesV~8@c+` zbS03J*QaB?EzZy9T*3C)9t*aLd?UNd-`@)lCx(F7nU{luI@{aZ$xv3PIJ%dXmq`Q! z1mqI=RUbC5Z)`NazG;nck(P1*snDI{4}{G37ffu-_wzlPqug8`(Vu!NBI>ev9X1S3 zfvVt|x^C6pk^m$Iqk&Hke^xxo(b~F?uOxz!Pef#7tEXvTQ4yDpu5NrwyOEjbkz;UR zV2aap2R;FT*hrOEtIlRjPRpz4Vwp}m6v9T;+| zqJ8$!l@&yfBibEq@<)ptNDv@ zECFB6A!wayE+!^s0H|Pn-MKAEq`JGc%GXT5CuiKBMA%pKVhupib@w6*F(P6i!njOk z5fOSg313@V{nOJg_1AaNW~mTFOP??{o^X`4Il~HBq9XCLY3r+*!Ezqhx}y$2UM%tn zAz!~r4_11V%HSqvIPUH3L9~%Tq6jJ|DEPgZbGkyX|8)a83%WG{SF$oQ@c|m^klf9I zdNHH71Y0)-5h^Vw7Z4NE>v7cWy}iPKje}EU`GY0Bi=s7OK*67{`9 z)%1Ta!Hoc52p#0m=C*jAB0#yUmBLI+I0!;~Fm2^4-zwm)s;YuhRxd^G6|lYSmLGf< zzxa4FE>M$`Ke_ercg@hyg>$^Np36c$j;*oRrNqSps$G2~OQBfqnOROOst+5{I%y#Ija$7LDmf8+ETNPR4Prqh^N9@6s zQ&CY=#6W8JGd-OqpUAI65=`pvG|@y1yFNbGn=|v{y+TaqK30qCp`+!-T(3rz=WVq- zt#sa~NTvo-K+UP-q2kI@Y;2Iz-ir8i9OwAKDPiw@KK@5@0XQd5kN!{)QO(}YS*q~) z-J!c1%7B2K+S8p|?oq`t$2mfUkvbfmHw|`49i8(J$~D`F?B597xIt;$6j2Lc`sLxT zXU|A)*bZuBb&PbE9ml%J;Wkbr?aew^krEf3+y7kad!rBF2ePrTv5==vy_eI5SedB9 zxlCIqfzr%-`sZoUV;ZZ2{n~n`%}a`1DVnH86rqAGroWRn4si-`}S?t zW#iu;Ezj_n5y6kXZ;G~5So~cw2FV@Dxx3AI23kpT$P<6Uzkk@=z6hzBkdW}77_nV~ zRG932u&eRe<=RwRd|J0~_m3Y%9$U6HgJnfp#$)bPvDdWmvQ)BrF9+Et#-m-}M%y3; zQJX0xEsgK#>1n?-c)P5uEb~j!^{Q=b$g$nw9V6M#Lm?~WROb! z>a#BoH+S4|j`ApYV`Rh#J+5}1@%~CZNnuHeYWZ5} z4c*svJMq;3plcf&al>h@_kDG6zFK^%2=e{+2!O$_B&4J!V9zB?Oql2T3-lMOJ>T50 zeDZMM)7ggfkuZ2JgKy6-@vk! zd+4Lvs?itk16tVVlNfg+dlg(j#}6_vFrdIRGB)NiY6!7fzJBc* zagxvB?ZfQ}k`gN43jUG5sdhVmCr8(ItaL9cs`FSML&Qh00E#r63@zVUTEqYsaoPOj zJTK^`c+F>a?gx)guW9@1n?H+;PjYi}&s5zM%k~o%62HXG>-X;6JI-S?>FzZ0qf=N=o9nEDuKloKwBF*R#>~x(=nMmC;(9%UA|CObjs|p zKD#cf?Nzn6wV}poxY8rXYh+hkZ(WH@I^^#RIj2(S{*-l}ZQaz`4uC{+gaQ2KCgo*h z>Ix0(R~CNplti%!30=t3DiMPxH8e4Kw|Ou>a2#lmC03wNEDn^a{tm7(RijaJqBuK; z&BB_(VIao3IoHdEn%WvaoH$;)x4)NmUKkgxm9qY69D(#aHZf7ZYJuP7rLy@?Y`%Qi zaGX-IClP!oDY^Mp*egsToI0y=`-ciz8vc>fr%yv4&no%!eAYTt(VI?>P%HxWP^ojI zu{SegInF4VulC;9Rn-EU(UtY!a%9B42k2<5dG2j*8}w$YLim&`OC$@M=buKmYlY1a z@XV^heheG1D~Enn?kn>>HF59Fs7W}8R}LDUb^EXcyp%8pO#hA+uq}?Ot80SbWAaa* zKGA+oIRrKZ@L;%P=iylb$TN-cHQ&E0LTV3@hculTFv(#cB_(y7Ff!ej0HPW0uFuMh zxMoBEbFs4Hsq@86X~O)7$h7KUf1eb}0EceHXiE&+vS(h3i5fM682^T@p)O<$$j5;Q zBAS_*(F*l7gi=Ju#f3o0uvq5{nt_jP&!j~ax^Gx%U4HgVIdkDMD_N+xY1IcYW^!O| zUS$o!nIBHvgQ9kZ%jg8~0O_kdj(?xV zjHa?ti*bymvuCzfC$<-gJ6Bq-S6fU*oPTtftuV`22)#XO3!0f21GG^Am8QDDXODrL zQ1|ECixS5#`rbPdIj}s51qIh>Z&>(3+y5`IGwLoKU>~%E#k{@ROpp3PxO3K{i2bwg zUb|6eaX_Yg0(8Z3JiKi88gDp-dJQZrEZ{K}_b7x}Cl(hYM@J3v-X8F*@4SV3`10k8 zBEa-UA-|xv<=p7VsbIL50P1fqmX1IyolN(BI%#SE=(FiKOzj*mU%qTS^F76FeI~kT zd5f(bC_1RqccbWpKDx;HM(*S*rQuOu*CT?k$knTS9oj}^h}J{X{3qm6PTN7gg~4)) zzP>)019r%9<{b%!$M{=wDI^46Lqh|_Dx{>~zNd+A-#(3DQy&L*P)i`=Jlh%q&l>Ez zz!sS^t_^6!TPt%_oK(EuVB`=#ef95-=b5u-RV#Fv$zx`}KtjV#>MU^ntaydpNzmB% zS5M_ZZJy2N(9l!N# z^6eWI2IXcTbj-QGHS7J_oa=ZY&UnYrkRd=UrPjoKM6eS68oC;{gWa3&l(X)bWVZ+& ztaXZP@2_<_jMd?K?k$#LlDBW)H~+h}6`YrM4Pag-U&be4h4g9dLwDV`@3T#^ZQj0O z*Te?e4IbAB*vXmRoY-M=WwW>9j7ssHpBT_Zzm*m}B@n%NPgeG>l~wk5=jP_-Oiva? zzV7Fswl=v&7dUTxw{Jt8z|z#z3|s8z=&Ikcd+=VKKl&7got=GjYAWa?3Ejopw>66@Q{}ST z9sr4fg()g3a$6k_yn|NlTQh8yC1?CFuL88YKQivuL)R5C)&3^-TlTEnP3t~!Nb*oE z19{9lGOxY(uts_IY}VS^I~$hd1wlx>BydF>4D+Q+Sl_EhChgE#{UHo*6&VP6mc_cp zJkrGPP9E}l=0`Oxy`UQg9zKE30XtE^HAtM%FDHkM-(?{LS~QheA_EtfTj$T8U-|Qm z0v^l$?LGN(<`^bM#?jf?tTVAy=4glAHwb`Y09@=F8X5|>-!ItM&>+ehQ#U+Jr(U4f zn0&{-WoYmHH@OEHa(4g}*p5``X2_~)C%qpZH)`~J^ZNDNg5cE`S?fQsepPk?PH#+? zjm3PW4&Q{n4nABny|%&eB73#u0lkY%#a(QmAaMNRoG>9NT zg_EM5KYzaE&4&o2hYus6Yt+!xv~>T<5A5hg0fBSS5t>gmS-#?yl8`X0@x{_8G{6D^ zxBlJ|5G2Nc5w>^d3rbwtx``fF_2+8(18y0E)M#&SFA8WN8hG$`@0j6|XHBMDx&D;1 zEKA{D^d}%Bge6ci8+do`#ps_u0l@O7>3()u9y$sA&Y4tSUko!d^C*z#eZQ5jrwe&* zlfntl)cyRaFX~|k+-afbj$;DkQoyAf}p<@Ja#NcFMaizj# zk$|3_-UgUg78Vw*&O~?y6iVeJVT3_9Mj-wDEU~6he()gr&6{v0siy{OQ|%fR&R1cd zh$$#2BIrfv;J)x)Xd;40{4r$YRA%Z}InF5BA!JP7f%kSK^9=N&{_o#kZZP6{#i1LPnR#V>aexNS3a-JKc-2~H z^>u6h_yAYY3S41V#XzZDeP16naJe7{jN6=FZ`0oh2@S0U{sF+Kx4bwNTZ*enHe%~NKto+A4eMBup8*T@A>CgcHVZjin@35($66^j{r8LR78w`AJ_ z^{DHEsjSWKkEalE@Y5k%CTU6l*dbVZaTOIxL{w9;sTpjqjG6LlJy2G*Kiq#DaY29@ z&bA;HqXl^Fzl4LibUd6-``PYG(4vo4`pjA~m1bpK1+Fsx zf%%cMSCz4mkv&|Zth~Ior-w3_gq}lv8>U(X(7IxhH=pAl>G;LJ&9_@-9nJ0={fiCi z0-ir72Mq_2u|KQ41p4c-F3zhAReJEw$S1hU%E_rvq8il*K+EB9e@BMqIyL?Yi=m2} zf7jN?NJ$YSh}rS3_C8pFPQ=o9CSZmg@vnH-fi?!}!EIxX>eV&vCd>NZgfDBZ(2qDD zsa}GBk4#Nv1er=#Y5UUU%j)h;3LU@^!ny~frKM3z$%c5Rc%aMNXN@relJ1P48z;1h z^&9q-nQNtvTwGil<&Kv?FtGpgm8_w;nT<|$hXaa34X_l5-Ud01vo~2X zlOD!q9lvLsrXT`A!@6PJM?_3}L(%FR$^9vLSy}%VFJ5#2erlTZjOEy8ouA8-laV0+ z4vknrLE!`*9_u3=FYhSzlL!-nIwXFNo#T8?RD4=$>ge2D*hF(wn!`jBYu;8y*5KaO zvXnm_vGe8vJji!Kk%_sQW9ChX3{VJE zKe@@i{xiS-R%hgAE=}G-6wpl7+c2zrgtE;R0KX$ZV-Atx=ayRBx(Xx zhtsG59}(sm85uex?-PJ!+y^RkrZ4YY|J|_w4fZBzVp`azpC=>`0dP;>f|i91R05Pd z-YX=j36A-bD&PDk(H*6B1-Aje%gM{z4E-4dSMn>bY=P1$=fi9P*MC%ir${ce=n_l! z*q5QeKe0XPPqG39+o1LdF01aQ*Bjw4%{Tpk*{kpk4I>~RK*9z9eE=K5^JAn<(D@M! z4-cb8vugjZY<}wV;Le(cKwPz9h!JOOCoAVgUb9vP|1KFzp1 z2N^j}D~f>>AJqg(8X9BZb)7ru8LWVDhWdCgAC*W`#VrDfGu4eH+=PZKZ zZjgmD5o8j3N5{HOk)vE_EobXI5(rUKRpE62RtwBvwGTbuo39#`+5Z#E!zR zb>21`2S<xqb zSMAqmrrT_XD(#EQ%LQwl``3ng_W*&W0^H*B+P(3mvXUW2ri6clO+8;6abGSA8hPgn z7}>q^v0RQbbEu4l9v;ihn=x5~zdOD_mWVii`}vP27{zO@T3WB=T@UrXxD~ZIasY&o zgw8a+-@>};!Gi~={E8gyQ=B?=DnWS6zp?XXjjb(Xnux0^g&2_*BoR<9KrQ&_eo8qp zU#~KZL}Xuay5rE)#3UI?)tTFl%pgZPKn}^%pSyOAhlc_h3^6$SoZkCx@=c=n^XqG+ z>+>M0v$>yiSRZCY7^9zpeDLs$LtC$ z9s?g=Trn4E9sj}peObQCN3D1Dk3OhTC3OZ@Rth~RznQ4XOkO)Ucpg?B$wHD(QwU6* zP(uuhS}y;E_fKHbmmFR`zB5p>e9OysJeuEs+X46ih!O`_@YCn{YGzGGx;6H7a2EcD z+!en74~^;|W!7a;7?g`))K(QD^U{8hJBSjY8{={m)A2TD>B2%47BmfQq zf`fBBv(zcp4raQTKsKTA*j%Uu0q;@%w(+VHap9Z)#gW~NzAY?F2L~J+F9eV;oc~^> zS8Z=Mowl2u)S(mcjsVIx1(>%poCdxv<_A4OBcLUS0XaPi0smIWqpqbz=Gva>WonUr z%;#hMJ%BV1GyqB@_(4rh1u0d_XU@OkA)Ls0^CP6VPfn_u-Hrv?eSK+2+uArY8x$Ts ze*W>J!{wtgIs%4wln5Yb#Q@a-W**48QS&L8fj~-NV`G1G+`JBGgOG-!0pJygPia^7 z%a-QyLO^cE#V=itPTr&_uDG;ihH*cy=%-r}- zgx@Vj5-gz({UM|JWw4OIG31KTz7W4WQcYrKX9x7cT)WTbtw{iN^-pjKpT);#fxcMn zUHQ)uYCQ<*Ss9rcV6V(O&WlS(%r<%!|0i#N?*G5YyWVzBD40m+hlAY+ zrKeYrzx}bk?c?cXXhwUy7oc4geEjzW(CPI65lY;%O8M8Wk>Vo<8uX-zC&S_597xDaxtU7Ihcu4`_VS|)h1rLuzU#Q~c*k5|WjSVJYQ%4=^N;-Pot>y6-l(_8(4 z-MQ3Q$d?)5=#ZOKV=2~P4~maJizH@fyd?VF3TleSluf5Hl^CUch4L4bjy0g<4y59svg%$q0JxH5}L?G-mMf9LN=k;yq zW)P8}nnSIYual)tOiz_{1woSB+}vYwa*Nlp`yF>{IWv%wqcwhW=RatvJgN$Yh8bh= z`(xIvpme4Gu;D3j?f=4y%TGtsg$j>ov!tzal@^%zt;i{9**T52Bvz584@cZE+sj91ac+xk+#Jsh2M)5y${x_I!j~vCK4e zsQAk2YSuct9>|kn;o;G-vBAJaRqAv|AsELZcGjky`1som{!Ond@0?eY z{tq7wZ-|F)h@;ruyG0KNZb5oJx35o!nph;?fYj+Y^5Xh5`Ps9faB#*z9yuSOSPbp# z>R2#+Dx{k-&z%o?)FlDW{?5E;%LGk{3fYjrnxpt${sO3Kqd@$t9zIS{)BrUWFfe#L z;#v+|rXVfU0tAH?hi7J7;jPD5UEn0g~R13P-bd{B{!ATg; zW6sFR+QJzw5_%?e-GX^h7f;Fk#zitGA;vtz)vdFS{W-9BvcXD+NOp90VyrRa$jS#H z7ya^O0Jsz!g#;6u#-E@1+Xj|XDJbB`n}OiNgp#EmC^8`GN8NvO3kw61@o6?THblKZ zd2sj2+R_EV1rWmS)-nlr4{|k%p3E~?Hnl5WG~$XNq)Vf~3=R?WSe{tdKl$-&-Nwwv zCygWK;!TC#*3qozpdAOoeg$r+4(wOfeYt+%(jA|eD5s7qk=Ay&tnsM z6ZX-irKdnOjX{wKf_qw6SRnee^4V+e7ATmj0Mf?6-s64{5G8Z3LA1dLLp6kbRQ-@l zHm>5l+|RqQzP;k?)IeumIc%F=1L;j=)+Jh6#ccIHRGpQbeVNi~uc#o;^2kz!5%o_) z4GkyALr)m3zR|b9_QN1B1y;_s_I9%K=OX}nkupZ(LwjP{qzAj7qL}#=`2j>fJIPgt4Y=w+PB_*M{y(Sr-~ZGrHoFh`lj+hWT!f%NvI3o& z)_H00?9gY|>o2Z?Tn%hKd#nIAH#w|Hcf1_3WIH+41EuyXAtCptt+DX~4vOS`!AA=} z$-tG@6i7%z#PZ|w)GT!0XKvY?Id)p}^V5oFxVHZQ=gFJyYkjovgY>acX^tr_E*={l^#y9Brm0ENoTsv~vSN)nTAGxM z3`;?wlRKPl-YKJHDztfG3`kc#=NZxp=h-J%IC#jtRluWqL*en`$9zzYDjv-Tfxr5K z$o>kBn;;!{@J@q^8h#L*=Ci8sTv8GPxY$@3@`+*9hr5LBZ+N9Z2>><%n9=Ogc;B$; zt3rvvX>Z00KaO4e5;e1yhUbM>SXOohZVfW!NjV@|7%395a{2jjGFia$NL7`>I-vK9 zf&%@Qc&o)`dToblxRiN>qnhX<{oUE3>PnHFlWoXkMyuPl{t1MseVW9gB8R|?k4@et;7$?DO zcvU`u4~s79Jx#od*D`oIiRgvTLnQ{OT;1ln?!vrwM)x0M1zDW^1HT&4WJCX@?WuW5 z&R9XLg1SA-W6?xOPTQ_?qt%-0di~t0kM=%K-Sdvx6n)s0R%_3X#gj6fE<7{M?^Lhn=YuF zf@47#5SmK4pVJsp>wkrVlI)D#bJ>@k&xi~RodVO%f*AIWbBf; z{x(4)Z>NtA%8#PL#-m8@ieKVNgN*$Y1tdgY;m42SfKVu7vGG51=zR%+etH71GB6#N zz#-qFBhPgL4n!TSBbW1xB9H{NU}d7=&=CdA8l_%aTidwA0=x3ZYb?8)i{ZfKPLz&# zPq_10sqaQ4B_`&syy2%(6l^JPCpGw^r^#zS8}y7n(xj1|X&yuF(j^3V4qT^&A3lib z>Cr*cSWfq}@9SrMpi79Ch`Qhgxh%e4+}_=NrMcbzjE68#42Wqe=tLyJ%M%Sy2JBXC zaa{GuPB=9Xzer~X3L)mI+lJ8AK;TGsx*e6b-HVVSb5$bp4#E0Q)eAM&eg5%0KD)yG z@7#|$cUD%`ad&)LppZBp|26U48giYiGS7?$kQxRO5EIZdkLG%6!>HJhDYtQpn5z_; z6Cgr4?S=&#nwr$yK0Tm!Qg_Y*1aHun>q_Z^so|~jTCeMJwj1@=YoqjW+~w;R7XmVa zHQLpoX!8t1v~&RY(fnJy7JhOO(cZuZzP28C`j(;OhavHkun4Qbtt3M?iSa!;+#><= zKOVSb*Z%%Rsw4O(W$ePH`CS3z!FfK3LFFhnFK-O$kGZ+|!q1|#!FgF4@AvXlY4={_ z7Zy1**;SX^6|IrSd{CtYC5p{!Di8GCd-p=`v_Dd{7wQktb_NRy(PyXW(?BR78qDA8 zL*oFz5AZ=_1I>rDfTBuJP(jJQ0|FM``NSzC8AD-#9CUN4BQd9VtrC$7v^Ql|r-2AV z&}ULly-UdZK}L_SIC&%rD`<`^MyiCs8%5b^2ZoO(U`tER29qYHzp2K;XP}LZk3WTs zi-1VBp~EPHNC5JW7}zanS4HC&ou=AqA*0@=jWGiT<>$b_1mH!DO7{|Z-g0pKklqba z8TMVxm#s826YR;?J?Cq)s2nPuYGDNa0>!{UW`^8U9^Zf~-$?sj5D*hLLQy9@b0!4N z!I!O#pl6y_C>fy@1q|m0{p0wDf>f=KuMT!f0xq9J z&wX%ENZ-HT2yixMzj!y{+_P(&!ysucj8yAqB~5U@?V)M>As3MqWZ{83>XG0Lh7A?KHyJ20KXstTC z=aHa7qPu@N01LJW3XsMZH-~tMx5Ps*UxK8NbOI4CkWWyL%E-w{D)sdIm^+^;%krGp zb|Fn&{dL11844FE>FOW@tV}1dKtgT+Oo4>~&sXNmQaX}MV1OrVD(Wnc8FEfze1QU} z2QzO@JpQpvURK5+gmcy*h1qlhixSR77m|{+!!(2y^7tfygLId$?U>M9Xa8Xsa1i(Su8&ULP z!@&gL7Tq!S*YNNpjcWD>TgdPqYJx!Ivcw~%4Pd$dI`bomSDPR(k*MMUrOCQ1HR34Z zwMz*Iw)$Z6obb*c3Mg2aAL$=X=I?7(a{R2^8(O<%P~+>^y8R^_HumW7fGXC1q-g?6 zkWSxjN=tWrQAoZg{2#JiV@tQf`4qsjXVT0-_86Fz2SYMlpYJDu@N3iAt^BtVkugc4 z&Q^zHI`O5qS^+h91P#e<`jH;HC8MKL*2+O*MNtYuavJn8y{w1pmx>jyG(f5A0*YSH zV>9V9`m$FucOok$T+8RAZPF)Cqq@aTcq~7V#dl0gBoS%{a|Q@q-0rJ-3gcu zB-5dxKxjphU$s`HXT8>@=h#pSYR1|2y!F}l(W;RANB@7f&lQF?3>renK-k7Wxq*7G zh94*fJVF{Q@z;(HHTKO`Y@j|NOEIvr$}Bb}u{sy!sB411Rzn;ab~S9VVal*8YY<4I z;L=iFP=!*X59YPZK*$7dKpo%{aCFnM9Xcb9n-+RSQed`z{?v%1@=ongVW{H-* zNM7{oM5^qvL#i%lgfWF*h~xmp%Kt(64Gc%57cNACcgiA{Of;4o=Yx5L9t;RUfYA!= z<;s>X4_AiM3Ar19GXhemKL}(^PdBOtgH*P^0gen2x8cA^V}nb3A^9;F5!sWIfxyw% z^z^($rxT(Kv4?QX1YDOmi@)+*^k{kr4znVdKkaBT2!VZIM>?1gQ;ZDsh5^9XA|(lp zoltY=gn)Mr7p5)7-LGgdk>Zbzk3WF{$#IaYzziV;pA8B{hg3L8A4r64PvM2d#oMhH z$jPx`*a9Vc=&8F}cI|Y`!S#2Aon1Uh*vtO!pL>YDWozyY9K^vRLUWNe4vkKZH`IDS?CX0GoPqyt446-vqT1&GXs?ZYn#NfQa3g`J$IC3%?mJ{+_y?SrH9Oh)vR3;JyAO&b$J1lD< z!a$2H0fi6jJ!u=pPBDAn@Ifd7{_GF+*fMY1!zoKWY{j0z`%u%U@ZZg)tjZWM54d`~ zvtW(}nznb4jEoEoodTbTSjsc!thca)bxa_4p@2?EOk4%AMxIu<>?<(_HritN%WcHR z#Y|LsMU4azliQ5Y`JLryz|;R{j~k74y(Ht%SPMS~R9l$pYJjs0DrX;}okqO(t^vr- zrwG4bT@UTz3OEgoetj^7DYeulC-uHTE~ktW85t_1q((C{nl%A4nSdbBEF^THCQC~9 zfiSHBMhQuUh;)Eb08&{XbaqXhD^<&ym0~H9Bnse?|MvkGW@a*12ceM%TSgO-jIJMk zi~&G1o>NdI22wtfha>57SU<*qwCUG5ZH#i$M~mpDsXed2q=Zk7^W?|AK;sN<9Gi}t zkNwROGsTAkYQ!#ES)$oAN5^i9C13*)@rn2l*vOkM3EAC}kPU!<-&`Cx34A~#-TUm1 z(b^YDlVK{2&td!oD3R}@TdP{~C*J4n^j(5n)6~QwXNvbT!TK*A%9o7MnK0THBF+dn z+KSy3wi!&AK@c#=n4zUPz3g=(5#ch>Gyw89fu#%%QhM~n71-AAV$#ADr>e*NXnF@$NA`tT{@9aKa$wO37!1-hT9L8%85V6x<9 z0l|H{fw%%M`M8?QOg*0nS zB~7~Wr;gA z7|dRvlndp=lBN=%Nhe5%4lXWg+O|9Cu`m#cENW`4!oBy0;;}S`p-Tr6S_NDLypN`l z!1b&6GFs&C-@jY&dRkoNkMVzji|<(e|LucI?j(=O`eiJ;Ml$cuHElo zc0vOL{9P+;X0y8g@d7B3Ju-tVg7`Az4+48D$|A%}Jw%VDU|kXO3<4w8xpQx<7G-~! z@At%O>#w+hi?yhnh{)RM{&2G9@%i6|$${PuT^*eW;7wBiBcnluA2T=Z>c$6(F~DF$ zAcR~!*m$7bw4zNh%Vcv^Q=@itbVL9PM*r}jB&u18{I2N9$sgPW_A%{UKs$#)-xS0E zayhfRVu3KA#E+`vm5;9#+6Y*UAV7Hrz{kHn8yA%IT$`QRzj?y2 zF5ncH4J~7)wABejZmT-Z3(!T82-6!Z^q+kJn{2SKDBmM-h4R%-3jr`ng@uKz)84!5 zSAjA``?v7BM7BN+#vplcYM}9r07VN_pa=d;KiEzGgD#-+tW^*>SRZb!s&LOzkJ;&S zg^^8|?*5;20`p=YE>VDsvkNA@F`~dwYn9qYLS?M$@25drnLz)J?EU)^;NnJJ5k&rh z>V<=Wp{e@TR@noFmnyxcjBxD0s2>32$^`JYNGA=F%Ft|Kk6LZ#9jO5)BiI&}Jrnb( zz0-@z+40{b7DB?rLPUa9@jo3f0S1xz7}5E@ye?R|T} zn-4F9hyq;VygaO%Hc`M4D*goU3sUHSu0qb{{=3~_fZvd#!q3kyQ@fM{TnegV^UjOP z*BJsHB5=WiB2Po(jC_)CBm~X`xGpr{MFBCkg&ex?hmJHVj@ZeSpWhHQtF~eQ^SwvM?4Sssr!o9+QA_NhU!Vj z*q1Mn{}x2!I$tatQhIt49v+^Ur)0FWVI7GAY_$0Nu1gWXP*_Fjs>YbUq96!_ZiowN zzNzB;e&u!EV|NI&ib&&Z^-@3}@f~Y9F>z9-6z~dhEkuR4|H-FH$`XOPkUxRgV1V&2 zpj!6Ve<-jn3c%nUQj5X(M>zmC)s^+x2Qke#rWD-%R^32oVXz_AZRY!^Bn2 zPh0#zdd0`KcL8lG>gcqonEAGsv)FxqtS^>53s#3XIPY-$a@HG8Lel`_NH2e}z@vhd z((_=We`S50eXa5z7g5%uw%$vCtAHy+9stm85fTIoJ4{CuK3+3JS~m0o&QbIX;@6e1 zq@}4sFDdJM*`nt#UsGHj_OZ7#4YyW*p#*_}`eIbFVH_qxL3rl`%o;)7!$F2Nz?o$h)NE4A~NiMBFPcC^EW~@_9vlCKJ4AYbMY-J9El@%y4HZY@{1-{_?boL6 z1Ie^kDUt;9wjh7~nVhWc?p7vbnv#e6&p4@K`d?+MNTVpSd7>8b46p>he*MB= zfYWNM#+Qw%gx9@5M;v|ca2I^N;HjB6$q4(zCZOOjs~JP>L^N6oMzMN=D$(Ug}i8HI>9!Neg5H0zr!NMB2hvj#)G|JQ$Y87g0^=itQ$ zh}D?1xVVVs(sY0dgO)IC@#)j20G$C?Vt@GXfpP%qa2H@IV7TaD!NV3oss@C!RZP819K<(z9K&BvQz*5uFs0Kim?S~Zks zRU%O`G^D5Dp3*BjXrvn+L?9tcL)D+5>~N}Fn#JLi`BcIP{aRx5vwLRp9c}UPo%1_x z>s)VMlzZy!-TUn-JpHB9{4%7@K%ic5#X+CS%HMe+dn6|KVfvhNRcV2~N%l8EnA^BE z%8eD%`Qv)EI8NbW6UCKy-?`~oXmv3*P8Y7k>%?E)CScNF zAX0T!Un3?D^U1pZG}KcN-d4)xv<`a9_EhMaJipNQ?u?TR;n?CTzA`;8lZVD*H2Gs#{*+49T5Tzi>MU}>SLZs|NPZ6qfx+wh)8%gd`j%N&?sZp$7-27wEE zi_7LmxP+%qy9hR`gMu_T^f;`V7dzUJLG>-(QzF7UQ68_$gj~#^GOwx(Gz`9TyH?Wqrx!{xw~(KfUe2;yQKDWbl-@VpysH+$wnT z>Y=e)zH*pte1xl3JP|0ub(T0T<|mdfHm+mf@~uZ;!fJ20LvA9vkX2?uzZ}XF`2(;?Ke(oCf_JyQtx^KUkh)GL_ zD8^%PO~1A^#JX~2PiVesdz>&JCXRQo-iC@D`r?8(tx zy&)xT!D-v$Ltn5+A6jP}$R8=M{hWC$kVa1w8U$pB2Od!Ll__Lr+6Vt{;8$5vBBlx0}=q*i{p!bW!7dL|*i=XJE!RO_Xo-F*IVw~TnKXZS`9R;FN%oML7!MY+4H#wP7 zB5OSfitW76jU;9JJk0Xp3P*-ZQrMBY2)59YZ2-r8%Js6(WO9-?Mz5O;_R1Eqluir- z3yEqkqC8=6q%wGdN-c*9crS5CKVbiIn?EN>@lvh2c1LnmQR@JYbNKOnrDU2X;*>u% zFyyLZc|vxz2Arei+tUfc%_HHW_nvb?{Q!;TBv=rk`Kunj`!@_`^WxggzHIbqODiZy z0q?F_NkVvs@vjs+<{s7FY^`XOhv!ajHOr%ix>b1oDczr^_MFJT?kV{$J$=mQXv>G~ zpsKiSSVc=K3(+bKt~+ckt9h*>hN*Q4)uFJ#b@5 z%gBg9|GMOs__-V>ope2LXY-an7U!9W|18}W7PBhY7{QE&SNtmix|4%kI=XcC=gfxi1{Gv>MH7m!hVw$q?}xqj z9s;{g3gGJa+fd8vO}H7r0t-vBz3g)|zg~i5G#EaE{O$n#BX~)TU`*&|xzlCzG7x~d zY0v<_jw;V3()e(~ZGw2T`;tN1nNd4*mV5WpGK0)Ip)thkNb2`s79Xys5>>wR{j)Ed z_5qH~^GD>%mA?ka1^Ue=j;&m<_2#!TJ2TWSKY06J+;|Sbw@wW&h7!_S+yLA%r@URr~9Ra z7-m)MO2VJNN_-$B2~Vv)>7@H@;U2H;peO+1*Eh;lLzaJ+ z5F)=56vSblBd^%u%h#`yfL0`_s7MN(4X%H!FEr-x+OC4`Y3rDQ5rR9F)7m5-az&pr zr*PvKb=(}P!+th%t3&N*a4bh6nfcy!J^i6?zn%v%3>kZuS+ zaPYY-ocUz)>k0VzRQKq@QZHVij;s zW8o6WsIdw!_(QK?a3^Urg^ANEY&o86RnW*V@bZ?{HEoo(0+xh1FGNj1?FSB^eYNt# z2X2@Lky_(Y4-C9Wwu4RW`%Wg=1xvkj*PQbV*fGW&ZS}8WU!x}U-krS+S}6h8x+KKJ zp0pM`;w|n2`(OaDJ^c9(S~@yhY*>8uw;ez+OLH*RF1`=_{j%Eum>rbh7?{6(j0cA_ zccl`DDH(knH{sF(>L>1%O?l<+dzRupI?t6mAdb=dF78%?p%%Rk5HNJJd6E}iT2~01;g{7} zXlez$1w(M7=RukG0YAKyX{pRh4y;I+i%d-Q4j%CXkJ(BKsGd}DjtraKc&(VD_VAyL zi%BERvfue@itFnL|E&y8jo;7Nk*VyTyUJ4?Kf8XLI$Ywm_kJ17AP;&UF~vT;Lbk^A zQl3!YDy}-A6}L)hf{=$AxFAD6xGZX^78Kkw%L8#%DxTX^CZ-c!>GtApr_bR7B}$3g zkLF&IlaZxFoZ(7s=@$gXO5P`Eqs8l>B6WXWKaBir))mRLROZWUEm;qS_dHQpd(2+S z>Hau-KZTnu3`Mp*?lYBB4Fff0j*Cg`tuVd$E_-lT@6=1?Q}7-SMue$B6ol)G_3rgB z7ps9Y4F-uJ*n#Oo?+wHpQy37&=nY}=Np`p1a6SI}M}SstVZ9}9D=hhXTWRUlFzj%N zwtf@1j4k+UP4=&9MKt03`~Kbnbr&a zcxo*0^0Fwwzag*g_PiX1IK#a~?JNF0f32Tt_zJe&@Rv~FFAP8}p!+phM*|j6^l{LZ z(a?kk-)ln#Y4Nu;*w0kBXd|iU4&nuJd?eGz0Kw!s*eX!@K~94SrJ4Q$`nR5c@4-it zo0hXw%@is;cewL)%AbIM1+OI0eWCq%Tg%oCcKX%8IU+n9IhGgy*6*?07p$9kWeZV< zZHc`iFTMr9idjD&ppY1a1`oY~64=SAre)Ljre+H01p{bM5?q6ZpfIVv-Fy^WFtzE- zFq2a*^v&W1BVXC8|H1<4>=P|&_Dgzu|5tP09nbaN|NSLOq%unxkxE9PK~yNS(y}uP zC1fVEj1nQDql`itN@mNRk;*<2MPx))Un47g-OqQOuKS$px*m`F_s@Ml?*2HP^SCZP z+f6GeU|1=HuDw+ss|5-KFE14LJyRiBn%2-XF|YI%vILm z11BYT;qFQ={2|IMuJ1!wp%Y?F+{kBlG;zkN1it3OS*YJOIP2n{NA|TSSw|t9 zCjs!h;dJmgeecInPR1wVUG-`L<={WY`9o{TIHsA=sV7f)uE_YqW)*NTlClxD9y?l`#5f(-_Y}fOa__>Lz5$0&Z#h@bf_~JZXGqkah z%g;9^PZZ}}AlJq%YkG_tBrt>`h3}>Zf<{%$0;c&K`dc@0a&sffhRtJHwGBzM!&2x1 zNBYiFgs$8`aH{+IdZX;aho~KF;Q^Tx;X6~uFl|trCDE3snkEQgrm88{)jo}tTV5$EU6Y~9a>IP52sL1=D@81l%7H7A-XF^K# zE*%<+(yHgTtrWVn+46iexV#7HC&p{qTQnjr5r7gdXV8`mhh1D95=3B+Dlv0tZMi1q z{bTtfn<(RAVWBiigedJjV@l(5Z|-15DDWrueIp@p22U4y|7eKkt$6lPzL~GB3cTDE z;8w?Bv0SNeAwR7=UdDNb-Sb<*nqWzpKW5%_lgHi*+Grg(8tYAfZix-9{)?wh4L=t0|x2{Wmbj!`wIKxY~RX7=Gux#H!L?GVBk0^_r>3>*q5+@*f~jvfjl+;A{PAcv-D-` zcb3B##G=UTMte6cRw<2|k>s&p5~XEO!=8dUc4+yiN(d< z4R{-WGNz38$D`Bn^2+bYS*KAdFh8Z1KUO0TclrWYRg67u%LFMNvRr7Jlz`dJ@7~P@ z*^tTDWcuPmJrkB`JxlNHsk7RefCKxM4LdW7;?eTLeO&{Ow;fBT@my5}0k1vQ3jMYm zQCFam$eufPXoYXwTk?wYsD-PstyO@Z^!oNJJ;`ZC&eeI*9ziR~mB+Wn$TkUc*2p~) z(m3j`X4-wlW?opM6no6J$}^ezgcjcUui-1|Q&q}oNBW$IspL=$`88g#AbH`428 z+@CPL8{N(Zq=!h?NwO|5Iw&}eo=(1xd6-r4P{VFsf}woy64&^tTl$ovKBECO?QrN4 zK^O^zB3?-ML#FmiaN={4N(PyaiBQZjv9dOLs&@<044K%k_%g0x6gK@f8!5cldw!<< z2&pjQ_U5^MA4uCK}*TEHz4L{0Hn~v@_6=k@hj7psT^5%0ioWS60c=0?hvGYrM zO*t69x}(NMP*NBWm?171nK~6dZ!W0bZA|9GRA;}blan;zy--vls^C~trduKt*btZ2 zd^tpZVd*KOBl-B^OfX6X{zXf99dbuqA%!MU5palBux!r%ENh3l%Hs94Rbf|WInYc} zf1ZTLR%B%9&SPpwTD)F<)5$PZ*Qn5o2ll$sPp<7lnNm4>HQDrade-f~VTK}y;)Co8 zujwy0MMOpY5=El6oH`h3Tm!Dot?&NL;htD~U0Hr^?#lp$PJr*Sd(d!0-kDF`Yh9KM zixN&-_=rDk@r+Hc+SYdw^Nhhhjb;oZ*jp;bg8)%*SXba@&&m%Cgv1Ed8T6n{P%A{I zNQ}b7fr>mFKPb8MrsJ^Rl8Cl2*VHVPt>_Kddnh`pn*b)TA%sulDta7)2e@UU8nuX(GT4rp{I!;&F+&N zUZm;x6ylaMAUA1DZ}Jm!<_q-NmbHOJ$>0V|Dy;F9gQpASnz~VyyrE9N{ke<7M&{NX zu0|YP>7V*lQe#Yri0f-}1hrrRi;^eY4N?#Ys~R1`6#i5nz3K)fpPY=}WpS35jy()iPoGwy>}u-5NPBG9c9l z)NVMQ{r2r!w~NP;*|D$2V9s993~MZUyD5q`-ej6-S;EhETPrN!gb04m#n9;HuVpfuJ zr5{PkS$_tLO$X$N*v@_>Tn9w~as}Uo176CX9j(kp0BBH95V3`%hwQb{;quKo^+F!v zdZZl$CBRq+75!*U(Aqn9$H}>fnt0E- zKx_Ajs!OxeGhnldcA;80D>KDpFQ>$J-?H06Kg7`ZaoUp%@warD*Vhv*wO_ zJZ?PJQQz`CccRw%`3b10GLEI9HpkQvz=b}`G|lQHd9h7>E`1ajKf}sDKfGx6e8cIT zw2oz8cggTAh?`}B_TwVZV?k6zXpM9Vd*K#^Fg)~w?JN8nAM1LLjS5Xdi~nfd#N}7< zo^C#{#7+1_$4idmvs>Aw)Ix@`DfE_U8hp4t03o6zUw_l*7+ij|qh@UV^~FFx z`W!VPM7`qX5`VPVf9@M}b8wKfFi6XIXD_)@bZ0w_XQJy%#RcpF>Ji? zN_Wj>)62G$od6!gO)YZgvc<+MGWE#;N6GG*ro}u;?wU9-(aIgX&P+N|!1M4mIxY4| z`bs;)>Bow6`)Xb~$t}2?=RGhM{jTP^cx7nL(mxKQRb8Kp`l?T{?#Aix3jP2-(=6K$ z?8v=(1%1FJln50gXoR5d;D?Xp;@vJb3U;P?*s-yrBs_ce&T%K^3`mD^sFTEI|0Ll> zMBfjlUNpq~^)*2PY@8cx?vUk1XfwoOgh2;R5raTW34J|E-y% z*_XGGp@vb}x%ABsG*{!M?m%o~Qu)0zbVcTHg}>~0)kfvZDjq}Ws=?)ccyc1bBBACm z`7HTT!#6!(TKc8JE>qtuGF3mrneWEECKZ<(3Lmy5=us>URPF3Geajt4lg|~N+oq*c zF%*qD5@-QQjfy((z~}YZisssHj5k>Kx`>;P;G0SAz-4-gZK5E%W zdG^{`n8;n;t`z_B#NyPmRSPNArF)ip+c)e>r~4jxK!?xOayK3Vodq5u*yoM*C&!uQ zFy0-0dEas?M+|(gJ@V5n@L5=WhE?F9Eo&KNt5s-%=Y@gng>}7KbR1hhG}FoU5N5@B zy=$+A#UTCqqC0B6R7moI!gl{)nr!n-Z`$1uinRsOe8GR7s&MSBJ zVd-;@!m^ghxu?fcp`?99y)Y?{ShqbAF5iNDr#UZY{x={fW2d9MBShWmpVT}oAoJy>9t+pC2C^-_#Y?t)lF^+;q);X@!Lw%hN59pIl!@v~vHnhSd$ z_1=7y33WbKO@W01pO-HRuTHq7CR+;5+v^#0$ULr1*~g+FB*g5slkq^Zo3og#eJTwN zuAYfIBM@yUi$E^pUm$`Qj!nIuEZ;c5>|L3{)$@LX>*>=Q(G4;DigxGc4+R$itmOn| zNn;@m7>x?z_4z#qr7ENzHwGaOroBG(7;Ofv04wR++877>G|LLyhfEOyg@~k!1oRzR zdEJr+QvdJM)eX-@W_hV!Hbg&v)%v5`WT7gx%7bm2%m;w;@ja=H3I;doA#@`46Et0uUr)J5-0&9&=SNDMlvnnT zg&_oqx^u_1trWf7@u~jD>DJO)6Mah8FCR5%YaY{!5Dr-_vlMCL_#Q}s+U}RDTTg#m zGph5i+A?Q+20`|rK#Mz2%akb4MwS6&+Slmm`n8S@P}6&B#Qld6z=ay(a?bp;gq!&| zHF$Gjak9>1(mLOav){Ukq^O1UoC}a)Rxqs`l&Bh-YXv!uSbA44z7;D1FtOjIn+ibj zybkIJ)8nh9TvuLI)lb!}X#0}o9p;*JMD?M{HI-h zI4WGiVswPpK)BMpQwO;M7$uP_*In8_M=iCN-zZSSYz?*m93wHTe^9je`03~^eAk-HT zUng3)wvk)pn?>j)BMVUmT#e*E1Ro8so2`6e;R>Khc9&moq7|S7hP&ZP!@S}YJNE_Q zWccuqKbiQpm*7-_f+b%jpB+mj*=k_9Y~*$(`jn8~MSDfY2Hp7-T`>~cNgNuOc!6PI zdUGbIRFEsgKM*rkURv7_eV)sC;HD>Zg)xN$HGzVmfjYD2?X;bE!L1d3Y{=U_X7J+l$ z>g1jlnb|oy1xN8Lmy!8^cSX>__tta<13!TffPzxi??eECLKI*lxzDf-BFQf>P)p?9lqff<^07#N_8#b#BQjnO^>Ok7NZ!qJUzJmje z3Mxm)luR+qS_&Gj!R*quiqf#aKri4*M^!3;-5r~|F1(l!FQ}7&mg{yo>bwGdxPANk zFRi|Zr*dL<9RBAuMUQ=2s9M=r1ToPPI1I`Vb#C*0w+=z~U)*(Cznob?UT@2yRXyAR zfzfo1&evH9pqHBK^IV@?308oT`Ptg}&zJz}2M(mvM0D;cj?lhF5*ehJSm)_$lYS~fA`!&k& zR;$p-g=N*6+kuVB97~~n0?Gl+`KG@B8{70+!lr5F`Pk(Ckg<6$E^d;)GIsl!qvIaWm#8jaj^R!i z2rv$h-mKbz)ed3eW}~Dv&cW9W%c^{`bKYF`q`NMx-M9Asr>9iKXFWh!{$q)(2@TM2ydqP5im z)bc2^s~$lFAvRj0!H$z-o4_GW-C2?aGVSJd8*{3M`^wLm#eu_ko$Dn1xyg@3P_UEG zN0`Dw`lWOqJn$SpCeDqlOpS*uNmwqDS?a%6O*Xwce{W5HJjyhv5)uD>1!!7=vHTf1 zJNK&?_IkkTZ@O9y<~%#EY{&rn2eG&6_0BLdCF*Zu&8g)){hbzAy`aa&#c5{=O4S?ZxfI7>1qx-Gt(y+ne|R9mj6nukbg3_fLuyNLtI(I< zgUG?;9`ZQv!t5N?yP{}*&VH+Xo6-2G#%DP%`4EQR^nGsD_wP@R#rr05)93!QpM_U- zHE|sh2{?e3_8~{Nr^6uT0h0)7H{JUAV;i%6zOn19>2$(j55Ij>(1;ku*E-B$4aj!r z@M}pDa3jwi?ty1tn`}5I@6^qNu00G0QdW=x_XTw1+bZa-*NNTL%{K;s;w*s31kX(vxf2lj1y>t@*p(; zi`@b%Jj(Fi-xfO8&*uIcv>|jdz6JJ!F1)eZY`9@!XG5ukAPL|+C4Dn*gF>POs+4b^ zbdek_3D4lqI5BzYQ}gW9$^5My>(F{eD{g|~38sB2U(SN)f4(*r#Xm#NkEi$Ek6Q^H z%jFv2xFw)|enXw>*4_WJ>7(APTwyz#vuR9locF+$)V!=cw1cWM9z(~aqb1FXDJe!d zf5wJG6-LiaeqF&>)>lO~1hg&Hh#lAY7zD{;TV`k0(C6*>!*eVL zS&BeT%InTjKI44knqazN$pe(ZQ^|g9r8Izkuo0V$TQ&8LkJ?h;=}JW3_@-Vt`W)m0E+il~<*>H) zC3JWmn=RI%kbsI^_&=`KbpDYlbNUK7-T7`Y>4nSqLlA0v*JRE^-^G^eBsKc#_2V0k z^hU~A@x5PVdSPUp$BV%$0Hd|fEgMZpSd%~96H9UtEeu|vVF<&(EucWNCkYj%y_zug zU|B57Gr9&PzPwxd+a?XGXcPNanw8Zr3rnnYHFj9vyJVvKTS>->%NK^b-={q*InxW zxBaZcq`3P@`W9y?_i1m(-en;}>L#g8Be5^WbM!W2n+Y@LV9F^I6^kmM>8~pnpfuAw zY)uF3n`g^z_-vx#9ix8|e5caz&y~KDF@;X$2#zSDJCSWxTT3mZORS&kdO!rPZRH0P zR&v$VgJJE3i_+!_HMxV!?{@*^zGj(Ix;gh3-P{0}sc`ZpeRoV{@|1UpPo*BGm$U3@ zW5dhSD(j2q+_A$DZv#?={5?-iJ3r{}>BCtl>o&ZGH!^dhESMOk(qYHnO>;AT~^5ueMJBfo>TYvg{FW@UJNb3l>0l>d~ zM1a}5TD#HF^8u>Y3NIOynrozWWDdbx@Ds2G{f6Ea^4QUe+gEqti%XEWg|-hVzAocZ zY=Y`_;gW@W{fBDkkL+<Zb|I2Tcuw|4y|?RJ0X1b%!*+#?{kTOK2%|wY zz`O7w9oqKyp6dLQ(9Ds73d|$v`&C0$`XaESf0uX|p`l3#Icl^7q?-}v9RkKuCNuJ1 zoyau9SBxZAE+JG&+sl!MH%%|_K>S#$fTpp@Q=i|J#Dybl85Jf;I$?w296a>bUE-tC zILSpP{LPPWUxRrgh-kHT?BIdKkzHsK;A411gdgw-@=XQ=Uy8x+ABg_-4zBO9tk#^c z;;!F}NJ2QVsKP);2n^CP0{$*)dpVX364D$#2)EC^i@x&*>9xX?NGdY~YLTzn5P2I_ z&|MpIm?T014mttH3-MJz3un(Du?AA4P3r3EkocAI8S*ne0VTbPg36KL^(3eYU%)Gd zVkfYjHjyP4R^trno37bu9$%6mBs{UZfo^5=qI3K5mg}#;CKysYmQ{$MP^*J_9=^%D zkn_=b@Bag`p^mh?Z>1aJz39%W;T~BYZ#Px|EjfZi(O)ND>4bH*5j| z>5~pSH^GFp_wo`YK(2VirdeDZsdHSksR{)lyh@mDJ(j(>OWJ9GMknAKv8qpGB+)^D z?bNBq!z? z{aHp@ook7>xfpjRW&Uaj#$yqB^afA2ZWSV@4YyyQMLWWPW}37RFtHK29+CB;wp?8IUK!jn+||e3cFYtwa(?zwC_|#B99t^1upkaH@eo&A=xeiRw=- zw8|M`DI@}pK#jJ5LXxB)B>{>X$e3VOHl4om^uA}C%;Y^y!Y69HdZJGeoQH7s&{B~> zgfPM%xBk+0dlz1W3Pxa%jf;N**Oceoh4&}#QOy&c?SBMvh@}lP^LpZRQ!CGE}t1l*?-7kWKu*&El$o=;rtQ~Niq;t=K z{L!~!I75pK?F;-j#JTOE-U+|yC?hhm0 z%+cTQ1L|t#NqUq_qo(515RX515E=@hYaX?0%|7z)`?xseN~`e4RC|il-?|`dPxw=c zE**afuiWl?P4whb9(*Q686s8;$#-18+5Xn5RjWkHOdk0}k@ogq-I^YLBj;-wrE{u3 zD`(|jT|3Sb;Zc)fU=i%1q_6wi58!R%PYJ3!{KdZH_kXfPX|v_9G@r;^BO;<6mA2!b z&zMGG&*{Ua;jye_;MWO;e*$1aue(pkm5z!ej{owgc(n{K>9650bxHE%$P~Iaxjg^i z-|rOd@KFR8;W42LsZUT^P!O;eufgs!^O|3+-VwZdEWtbEl>OUbOSIl8x;Fl5M}WHy ze#+DPKVBb0^Fk@{jDQ7X&v=#EWc;cm{xyu`1OpvHhS3P>d*z>Ds3C_5Ch#|C01qsR z2NsY!tNuT@V0fMndj3lUy7)VSvB~VHzi~01k`^q6rtG!m8UXss|8t;@s&uy$-@=D! z{s))3Td&`7g!7kbmh<0#6@k~z(QyE<+I(XU7c?$L75g9mF9P>e;(zf4|T39`Emu_n)`p=-4~fy6^ilUDtV?=Xu?}it^HXDUVR1P^i5! z*Cmxus2v_C6v-e3IsAmTxo-siLuPYTMuh_YxKJ4Qz`u7}URSq4p{Va6e@Q-wB|bo* zj-zBGuc$ag&0w5eZm&eoZFiQ8?&u!5N|Q$NgpwZs!E+0;(a_#S70KZbcBBB%rKXHqKy^~}e|hdzGy z8~Be8*Z%nxZ`VF;lO4lE)Hs{ZzN-{sS^kb8`47DJfSM!%FK-(~A%Hx-B*EFMYd^uBfgq zgGTeA?Ck7TT|_tB#7b8yIaasur3%-s?HsOpF55D3O_C;&+k>UWVx~7Y(0MlBTPEa8 zP)tnY_qP)H3ssB?tMOe5qH9kWEsBDoqK=a9J@PfIbmM*~o5o>$6t8KAqJ~DD2)^%N zu4{ALwa=eFe-#m9W!+Ue;C{D2Qqn2%407d%eR)AE)16tmZ z--osI^c->Se=FhrnoFPjf?C>0jPvXetJvCZEEcQjy3)SU>AtBp;~2?rK|Z*#)D%b% zZB3A?z@n?&bR-SlESzyhv9Mrx-M3uK^M;=0nW<^n9fFxF+E}dXv#w)9Z7e5>jlxJi zYUBo_yNq5y^*N45N5Lpv@Pz}T5vFP7ShVu(+g{bfC&a|WW_gvBl;{O*&&Imq)aRb~ z`Yd0HCZP>-J1HU}f-5C`gv!p&cA1pbVYzU@uXJlAJ!3$l#N{%brsb7~i@RO~1(gqM zZw_SH&uOD)x<~|KNp8x>Tpq&Tkd=*3O~vxO^6@zpMx2k&+1U#f%v&!WKi;9FtX$jB zaGHZ7aDCnB$dMy@O})7m%pqsw1ZSt?Q|$5B-dzF*zcn^C9&}5`;c$7o6MbsL z^<-bb5m1$tm8hcaEkb=HKL@S|Kj0o~DR7kFdLZbLl-Q2LL2ebp3zjqQWnri59HjL6 zk<$>#AGnv1Pf=C%aBoLT%a=L#ZRe`zjMBGm9YAFnHJxE)^{(`zt9IS|QR&CPW4wQ9 zyh%*%Gz&}Zd*VjabR2ypyj0I^U}&hMq9UoT&R|irKrZ3E@40jT_D1Y>$at)KOiPPW z$tKn!BqXFlSwZ9)Y-f(rjZ5aaOBMsm%eHPC!^~O6%`E0c3sPf^(RBrO(+;?9qqSNE zx2y8<@-w`QFx9y}&UlPH$!e}Ufj=`dv*z2kAN|gA*!SCXl9D9?nB9_+>(60TN(h*_ z#YC}9UmOn2UNFJJi;eZ{oh2e|Bt?V3S#p2uCD8+Xk>7Tl9H0|ym?4oK56Uh3<(dHadmag^lnMH`gVUI z8p}dUdD{7Gag`qThhC-JO2bdRZ2RO;r%w!73d}Y?vlO`L=$M~m?$_|fTo!XUvfMmZ zfQN(@Vmy}=?0NX3k6hS6I3`c}f-n;`?CpdCHa^b+Ham@nW)X^ees7LiF@3y3k{#j`SX)OOqmX~ zWW+hRh&(uWP6Iq=piW`w3(fBp!=4!w^lBt)_%`cAD$svUVzF^owFj|SHR5CbAWN+=VC0C@O+2=jXluF@U0U@$W z1vZjm?t9oaFtDQ$s2f+WzEykQaI&mUqr{HY=?dp}=I57twYozAUv z;LmFzqi#O03;SnF)(Ey~s2a&!Z*J3{A3|<;F?~mW=6%2ax^?ep?~DoyGx~FL!APGN zANu6ubA20vXz>0zKXEj+=l-7`LQY922PuFN^MC)vA6paooO!O$Y%^tUZv!Oen}4qE z?XuwgsXGn>YAWTyhCPAjDRNvg{Kp(2YwfVTwfX1q`u=PC|K5pYiZptThvwhOg#72b zka?EFfqh(le7ZB8za5T5n^_VZFIZ&nGakV&CVcfxSznwCqG)e#|8F;3om6mtRyX=X zXkbk~x3p?_;j75qp#_Jt?CgAhURafcG1qEXs${)A{gOe=e#3@{%F?arQuOrnXUaRU zjka4D#492qBl9N{A{}Njs%sh>XPZ0k!hHNAHaLWccszp0Rf$n(#-fK8918lFsK|#^ zwH<|-`poUadP(6p5Nu*& zqkKd}#Kg=D#91nzgxQ%y@#Esk%E~jYT>B$LEu243PHY}?b#u26>~?!LJAM7sCEbXC z{w+s+vGrn+{SgIOv2nd0Tgm2WyNjLqM@L69bOIT;pC&0MW}5Z#;pPUIdqp3#oTA*b zr~A`AQdooxEJRlSV?v?XrkyQqZM41GN=jGV+(gq$x19PS4Ld%nze`Naa#>rr_2S|p>`N)l z)}gu(CQuTTj+FsVU364kEpzf5qi8M4c zkj70K5Y7o!-A+;6`#NEEmesQHWx7VLc^QwLy;$nqY?CtHE1iUMCdYZBABwrI4tbXi z^!Jj!O%fuUD`*gOC7-9ARMskn#ikC*3^S4TPAyHmM6 zU<@~-1cH*2&%@IO_tUmB8llua-YFjq(_vy%BTlr5nc4mJV^vIFnn# zzh8!i{;ti3%(^-XtB2P*Oym zuE4v`2%g)-#H6O7f!AjH=ATKE=R;DGuPXspX;!$2>pgez;>e?2OuCCBwXCjtf1m$R z{+c;Fx8veS-ZnWkQ$0ZKLf$n}y~K?`krlD;J9m)45*Yp?*f`bvIDHTjQvq8Bk}$5N zc#M`7uXJeCGCcoz(F9F$bWZbT znGjRnZ=?Z_Hu*LuC&z&LZ71>Gdc^DuG3a<*ibv;1b^U*g_U~CA!k$yj^van(Gbw}< znzsKHaR?j@0K{>0pUvw0y?;hoIP_M5s!y(-fEw}NLg+uz@TpTyy~j;+sjc%hS2x}M z?OHHu$rKMr1nV5pfRK=|ZZRPGZyy4PgM{_EP`3XTWs$IMsjVIJXFfwl8h5)4rh7B2 z5lMO+JG!$?!~Xmb0?_W1Q2jpwa(S3p$P0bu{Q6b?T>l=vWv~7Y)Sq>TX=bb;@*hxz zxYnBleB^%t7&1Pix67b1yYwILLIY79PzAZ?N1f9CeB{6*aa0e#7cv zU+2$Xh8GkyH6J3|%Eiqd7yz5`#+|wqPxsQ&(J5kC&J`I}1TEN&g_5M~lx9V9)>u34kAz23=Q$_LoCr{~*Xx#xoi4~C*_ z8i#=5xBy5JskQIdzvgloW*nHPjF=TFV2lcd)OFBTGHw^C4iwu?Dy5aIo1lPTpcV3LX=!;}H@e=}X_v1_#UxDc5fHHN%aG-aswRZC z(;P+fUy|x4GG@`FNS#<8BNBP9;%W4<9l<&`z)A!213(6G`zb4jAUo^3oxQa5E{Mk? zV`Ei0slWxq#j!wHzSdyjX4BGXZfdIk?d3UITH5)|Irms#IZ)4@J?ny+F=_AQ+gUU} z56}GSaG=eAE8dQfO)&Y_Jpf3Wn3~o$HU{+a*^J$UELHyP)dk0ix8CyWMF6BQDZlb=mZO_>*~YHKsW%6`-;yqtLC8-qkqWEb$&f99km%@Q@j<94nBh_BQ9c86fshSqfR-Aqfm)<+a|M?Az;U2fY>r5G<89GsDQ#zL z_H`p8Bd8)xFY@h@7^*2)^bBI&tTqj@8{KuXTv1>a-;Hx^;qRpiKR6zhu4^zKYlFEV)ie(Vsl%EEjs zTCsi5r5{_nh-U~2uaZzZWK}tG00qp>Cz$mn*Jz+TVAB?Ex=Os=ucm2rZKgV|*z7o3 zAyzb+FjpG8z0tHivPGCPBH*w$!!LOaRd_Sw`ySc)yU#ff3`6Q3tfbQ!DOzgO2MTQ? zaC<>ael@=TQ5%~`{GKbaH|6E`Ay_7VI6z2#y$=wjwT%rdkFRTg?PKxdWiYYf{1)1Q zs$w{!& z3Iq1pnDM0pP#C6Vt(5O#=7duXC$YAsW^ghwHsSMU+ORsW>ij&Ja%?i68G!(a~vI zT^LSEOFJVZRM^CGt-8M*$59Xq`G}2;4G?bi^Y>!>03+?t=$5{|n^ICzGtM}C!a-~z zUNmWRI&jk~;BTfTIDQJ*8rJT#dC-Eh#u| zZ_M7n1|P@{`XPHlh&3`|>d4ih{cfeqv7ObxB9!ffll(q4`*~=`VK`k9Hcyqbl;zIS zvYb5W`SK-gK-=Y}28aOh#hzoKhDA*2HijiRPjxx3R}E4rwJIg0q9(^QaMb|wzkc;S z7|v&Qgrj(whCR$L-4$yJc`!!A8OI3))NH{tJMn{ET{SRk`Kv$t9AS}sBv~}=F?J8T zGra;u*M0o`sb)(E=1k5rTvOB24BUoPknl!f{?E`-asktep6hQ2I3`3d?7)fdv!PZH zULXT{+yCh0;FR=|h|{v6`zgp?a~tj3Ma^UY*$x%~!U+D8!-5|0tH8d;=jFYIP{9F& zIBf9+!Y0)JuNBWqnoPNGZ|^cNGUC?zN|BtB^1#^mIACQs2|FI4JjwU62njKU)m_ul zItGc4%=5|-Mn5T1~fntGa+GAKCs3*_Im=0LZvTJ{*Py3r|Rcd_V3v6D!RW`t4*!W7y= zmCr<2fhy^>pxyc295a0=#WS#gU*bM}dI9Y0SFH;lVJ3j<%|v7GLT#wmD|_QcO;gkO zN~cbsb8CGBuOBd}NGRkFa9kQ|?&zqB;5F6jEz;%y!ZtA>;moYm3QPsEZd!%t41-!4 z^Ze1nZi^wYmi><7TmZ=O5)i8Py=)j$XR%59`2_js9-|0QA%Fx<$jl68)5!UnGd?Q!~W~rw+ zP6mc68)eQ$+o>?88Q$!thewO;aJyk{&Tiy?*%R4JQynHx4ffqztf@Wfb94|UZRGt3 zBF)4ki>z{QXeznvMy5umLG;oFgMS^pv|J%~5~Hv&=ecv|X4W23=M4sPXkFECW^{L) zkx!e(^;_P__%n;ebZR?42ZRAD3`;{U9dL9gMQ8K;kmc)V&nRIZ#7jN@ zfkZNRDnRJ)sl16ezt!bdg>!6d_pAIFp#J^d++5z3p)aGLV6-|vM0@B^(5qLK*XXpq zmbelGpv=vi$*eOrG5HaqAUY(gvrYpcp>lkQ%dCfoy<}AnQW-*)!(S?9(I_N`PfeLX z*^ZnuRE0M+D})Ngns5glboc$Eg0>Xtow5%eoZGo`Cl3#gR~t$Z$EtS2@O3A zmCpQ{OO)eSI8=sQMvX^Bw^sFG?U~&-xIpNjJ$(3*-INMo3BYg{cI`X*rl26gYPgEa zbsgExjgb~5wJ?DSYlI|@ZH5CF!{|m-49n&M)nLZt`;eofqifD&7gons%&X!a0O?HWOqZ3hYG^pDVj%`=Rrtd#J)Q3uo8T2>VY`4cN-tSIkEo9U&W*KI{hbj7HZySk{Xwn_ zgqWO{9$)S~o-!P_`&uj73AF30KA+&rM% zf<<_O-p%J}3ESR2FrV9=eydqW%=UJ(RmhvI*@;>G75psZ9m~o?YDm3eUrNvt-I$k1 zE0{_)pq~Cr06Dc%Y-?Cd>CT-R3wMGBQspQqDFusMoYdzz%{MhaRB=%=?*#x-$Z?k; z)2QcLpSBsRm%)9P3?6${d-9IUlA~2;1?f0dS950tqj4NY%*9T~J8}y*T(s4XU0Oo| zF9QR^Mupgh1VUUq-OE@t(HtMnd2h$TGdHi}EZ+sTAdK+;#Bh}B?oaPzBrMd58)aOk z4d5L2Eu5ISIXTpYCeFJu{gRQ(XcT(VO2OW|8P9& z*0F>FNS+U;Rs+_%o7@sA_dlHkPWi>ed3Mv>1C&tOs%KRprLBkMshe_g&-2Ya%zAUe zr?fK-cKaP>yVOqAIC_`KW&Vl{u@aM%yy+*&a%Y1_1%g0oDyDGjJ(Vz`uNPx2LVtS! zeoF7xsnv^OURD~G)f){4yl?XAwu&>I@!iX}trEsDGvP<7@dIX6%-t>1yE)||A8DSJ zIn1fyEd8$6qOJu==7H4`ckf0djeYPv$Qm(o7+4IlYjb4Q%WU=+|3>p$iqds7H{VNR zd{gqaUj+{$z09p!K}m)l06fb2V~2^=BTX^?a5LWc^Kn|rTdJx=221=21%zv^&b^;Z z$Jv!JAYvc0@3ZoTFA_OGyAJiSf}hgIYf$|H7Y044&p6W;&jv{|-2+Ho%k=b=FCrP} z-IbHu3$YJb1P$0z5Vfo_y-&y>TF0pZ!Iqx$GJrA%=7?NXnO9vKb}k@P^ejdtw{G;= zrjeY9Nph_@C<-!)%bCYJ*r`EG2^VpOY66)PPwsOFmuK%!dh@dVvn2D}UgYyIB_K3b z803PIL)24%)gx*~jpqjeZrETv@^23S7EwHFkbF70q`%{t#Tp|~El?w|=+3M}7TZ#l z1PbBT)8wllciyy1eD@B8+Y%-faF~Asj}r*Q(bqhoxuTF05>HPd!+z_{6c-59D!xdG_;p#yCb}YJZVa+8WBK|2gvw5ZlLUJ0cUEbXL1r~)^ zJ|G+B!cE9mJ90~|0jHY(Q)~t%HZLiu_Sfm$$tF>#xCWFDgL8z-c`ddnWRC%4xu`LfCUVELKC zYj6&)Kv8;C4#8P+-^GSW1SaS%KmyzR#*$bd0O zh#=Vq+vUXxiF(-02gQS!ZYU@y;PyL3R~n*ntH+pw&Ly2gglL<5P56(J@uE>!gBWIH zPnHYE;AmYKk@khaTj9Mga+=)1eVC9?P%*>_AR0Ch6t`x7o-r;qsKS2*)yCz=0*_T7^H;h7`OEYTI5xna;WD{ z1Z=MQXX68N#dxL^)l`rME!RfFT7iy9P0s~VAA-ftBSk6Tey0Q?@KR!|MKS^Osxbs8 z!Qm(ZdJKWx$l-u#hrRT}tr+S)*wo#h9~^}6Wfd&dE(ZJr)T&4fyr02v{3s>(24tGM zo5MktNruWa3($fAb$sXMlv-)r+qaK`gM$sIuLX-AEK`QvcVOQ(mIHRo^XlPAYiDp< z6gIr99tNM5eg0;bGq2QkC3 z4MxCWu9=gPy`>Xwl-?BpV4l`-lnT%4G;HRB7zkzcbFdh2LMh=QI)DgmZqJy;ABhj< z$v#=`Olaz5GTYIWW5&3|+Q@qP^nG!pJl*Me1!^H6`ayvpX|`R)rByNcN`Cn8;Z17l z-k)mT-!)VFKBEZ;{1t6U%H41!0)8&gESBd14X}m}yFNh?Hr0iL$O2ZNx}I!PP;Q@@ zahy8`uC&-r9e0sgId0RAi!H6K>Lo6YeF7k3&=K|seVbmn1cV6acW1$oW`-whB2+l! z_6#`Lje^q`L6=p4!E+nd`bGH=6|;BTD3h^&d9`LLp~3Iz;NM5}JFmKlD{MaQAA7h8o5(81flamakw zeW@c&tB%1as(G|4(6xAiv3`81GNx4xq;UcrM&Xe-D!tRMb6RA`VO_tqHbP9# z#foB7@Yvje#+`JUy2%WKK*Iqo*#=Bv1whWL1H#LDU~U}f4w#Y`pjMi@x-L@< zHYfJ5{T&Ez1-1PJgzdp01MVt7?+Cxg1qC<}zJLD!R=w8m-^&oY8(0eUwxf;TR{Khd zg;*^cabE;M11eG?mfU~h3(S1I9qCL@ew_+lmZSKqg4^Oj>zreIRX3NS8@H zzy|vGm_fX=MfVhp#cw=s{FnC@1WI*(eU3n`@A;bS8*Zftc0sX6)ydtNCcn=7(mYwH zpr=>KM&&044)i#EC3J45urqE3;)xo_u|`TSAYLN{f%Pn{GR8bNvaL-;x#5;kl+{x} zso>vw0U{otac&}zYO2l2&JLd@uTNc%0oF21)7lr{7ht_%b{94@0^0sAc4krLy?t8_ zISNddddY+fI%||bWC8A)$Mss+fW7dqEQ>fEnVcrxB4N%I^sqsU{Qy9LQ!>k*?f`{T z^Yg>O&58Wh3^bzp`g#LuiC{@0L{%dJM(j5@2htXDI-tFTf_VJb?6#x44)eNzIiVaw z5n=u79bofX;q?)^f0wG@$?-V!(|hM3i4%QrFNx(3Rla1xUG@ zQ00;Wi;3h^0^+FL2lNtxEZ_(NF2=1-r)L?|LZFZDJO-J5WXg!>m-{cExF15L5PAjx zBtnQF2|wZ&{9kYo1~d)oB#?>`f8ogbdLHDM(2JF;2dL z1BXi0VrTAnhzK$LJ`yieu~E5w`xSf=)I$UCBms^mip5Zo0A7ZCI8_1OBJdc!Rjh%} zN=SGTKa05ej=GYAtM4WOGTIFr8yh6?A{NmPx8j3EsAOn!D$B9=m}zt$+iz`N7S1kJ^aqeCr?&r@{5;G>`=yl0J>uvzrCfS+%OnL zqFL;e{Rr0-Xm4ObE$@ zeCgL|;^*c4eVU-cgPJBayFtZXODj76RTE4emDg1S&46z(y$OpB2@ckSV)0E`huQXs#WKVd#2f%X>~}eOeh>nWO|^iyDguEK^#GPn z#ik8HvK-nEoDYxx;osaJ@Z_@X#0$8~b4LD%sS==Z5T`zX_(6n1==yZ;XH9~TBnFSc z_nP}npW>=mE z17hl6>S|BjJVP1+4j+W37;lIqS}&n^U-BM}{Y1#9W*RotAsj)4uqqgWvWmzdAVPgI zZjK8n!2umt*Qy|PEVp5J0fCp=E(?{)2j_Q2iEVC#pgnCEf_5>xytr&LW;<<1FtI;H zbK>;r%04bPVA`ep>F*JX*JsPnWTBDi{e2oZuO|{i2hDW~Y|p9bxbhD6Np}n{pg=lp zNo{`@rtNgjt#msN``aTyN57B+xZCjyR@(mWP6<1>mvwIY^w0wmA833bT2H}0_ngQS zeB6P;8aV<7LtI;A4hB1AL6)ty}kg7BrJVAf;tyWew*vL|qO!CWQWEJ$eI4l23Gc zv1n)E4oUOiR{!#3Yf^G@97t$G zoz&hH8O-PKr>oHxJ)eEA`5opm?-Tgl*PxoN9X&tIn&mvxl>zb^%eeueZ~)OVG8y*G z7FH7>u`D763#6@wBZt1)d)E-X5nh%8{=L|QpMHHP1%>Qq5t#?bfgOs#6sKtw7Hn=J znx326);UJ^IC-7}LOIUZp6rZ)LTpa&olm+X01C+0b?|JteOI-$wOdNuGm93#U4Q`0 z{fi8fxxQR2n)ss{dI~@o+S*wA72+LW+p^BYT(&vG$Zt*-)wGS&u}~D40|OA_IK}|_ z5Lh6!*e?PHD$3vQaMB$dp$wqLAnh@_@C=%6Yom!A$&m>Pv2HE1Y0K5KNPmbovs+gm z7o3&AkmzW$UwjBsJH;OY+6#0VBz7OABxleWPFQW_WG-4_y;|*ZeG57j#=4DScj^v( z@p1thB(k#+;ZzgQwTF#sSsMH9EC9}kRBC263cLJ1R23ds-*CV`3p~Fc%Rx(ZiPiSZ z-f7j?&je%H(2GOQE~KH>Rq?Q&!lB%fQKMJ8eR~0JvG=w9Mzz=$7yp0@H$;N1zVTwv zhKsh=r%4kuoWQpqkD&A0YFd@RAz9^XBJ(M-zCPido$6{V^qZo+yEOJn;nq@(OTxFG;cqA1=DasJ?POEK6vMoKTlmh_tEfzlWKZ5FU~?c2%$@Q-Wx-gbRYh| zTJEVict@1MV#`FmhmKwNeR{VRX|@o^&WKK!kZ=YFC3!e{U>D&7Nl=JwAU*vxzXcN@ z-XSnpkRm-Vuz=$LKszNBei-jCRsppRur>u?ZmmpjmKN40kFQ9DiconFUS~5m>ja*4 zUd?0n!`UA$;J$Qe-l@0+ zzOgYbW>g(;td=QenS?J47ft?F@$9S(t$8kEV0Gx#3*JP54z1ii|dkb$rDPx~f} z+Yv*ox1c2{PizMIUiy~e2Tm4jPGs2I+JaE8CkJ@P*H!B*?Uaq2mf3b3;T(gC84BHGdb3d8vo_54uV4d3JXA=xgz+Y`=Egd%Lmfu)}1@oe+s?e*?SEE$`j%2 zvrLPHTV@Z}GbX_0ZB9B3Z9OY)VQ`AFt#j6XFJeA%OQ$bbaC^H2$O) zq^PBz0XYw9E$Y{Z$0)Q%VKQK2`G_vdfj9A4Awciq!&FWk1!D<#d#B zQjqTepV8yD`^&}WOJkYO?57w+d+CMUA))Y!OJ{tS6@L;JrUu+_9|PK4dHnIby9K1( z{f`?1_Q7`~kJCH~2#_DgvwZJnD0|Mx(kOOUNJx-A^p>;cu&-^KS~EDiq@|@FGDBSg ztI}QKDg=lAZC2Jnu+xCD4qFdY5wIdM^zH&@_ruh_%uM2r!TCyZj@-_jA-~!U=dsY%+1fxSOtVlOv7A4{iOh44!pA9`m(d* zg=fmp|Co^x1V&aMEWy}?^vY@zp7Zy=fuH{D&Ol542o|s^vTDX z3ThdJ!u`Mmq5IY6fK{i@bdwxwufnlo$BqhEdfbYa8bTNDl5F+GwFa!z2{^aQMb+c# zVuqr^)$o321lHVoR{CQvk2h!(v}>)7wzxIZ+RbF-8Z|KiI4wtLC{SGxqa>vB!*H?@ z=Z1M-Ue}Y4r99>1%+BzmK(Q_Q(t)NYyAS3;I$y)PZ`%V=0bMI9s;X7}y_@g<;Z(4< zyN5~3vA2s(h8-l=G>4LNpV1KN%K?FzBR6i<7BwAn)-joC#Ki?W9(Brc z#>D8C*z1@HM)YFO9NmYsDQml}-H(AL;H`OYF>rI~ZTsvY+hJ7=4e3*j8M$D(O)H!g z1Oph5paIdm!actIy{`G^rc{nOhdwyq<3lmH;I#JfYkr``>g!lPNq4Q=i{BAjg86a# z&i3|&(yh*IsKY(M2ZTi8!x!(MqE^{CNGpL*Uv1jnPyq2GA0W=T3l}QJm-bE=PUdgn z145PKfHs2p6u?cxCWNs=E9*XRS;_pUkqkDP>eJ|^^1tZ(`rZaM%gS3zBI&%NPm+y= zT>qea{G%Q%Xomr@9Qe8or2QLu4I6-T02ajsIF=@)fkrL&{w+Eu#&xmA(S@dxQ z#09swIg)=&+~;y+1UIc_J$##aepJ@4-d01n>Ss&l%O^a4>&$zRoW_Ad(Z?h21t50m z$>*n}qnWl>t49Lj`Hu-xoRlgvO)uYo0{gj7lsq)Zf)! zp_LUERDMzJTWeNf0TbW$^7o0O(dd~aok3eI@HADY>iS!=mp8W=6~yP5W1e+R--l^u z-CUO}DDTIXuYci+p;9HbFoGCQ+0`TW6|@=XcSCfufPSo;PT>GJoDSy4x{fv5fi(r}=@)n;>rmiKhOC!Yv!37tz;FKX%UkA;S0~+X>O#m2V*<;Hez#Z{i$7$SuJMY?Yl+M*n_o&3{2Fsqi4n-5_XB` z2J(WM1pxcUtVWOWkmc$VGYGc8jEc7YFDCad=>xa<%OJ4W`ZMZg|0#LT8t{*gj6hvX zLwMr^Ubh+TxW5&0%d6ybkbyv4*?v+==PPM!Y&^mJzggQ8a~PwX$EN6+S3mx0!bKQl zJlHcZbP-04QMGW4NXD1k!M^ww{FJ@sh0l#*9LZr?%*@!dv^s2|zC)1J#zLUG0jM4i z`->QUdD?fEo`D3>(a~d6P-vZ8NCK6V-OsTUEa&ux;o=4pqML}=Vxb^rIWVC9@aY8E_rMH^qaMIFD`Qjxtx~|e08KYE zT3!sU#CB=7O(#S)Ct(TV1iLQ6E^0vs=M3IKq|^H!t*W7a5sat%BfTL98z-0lR1B%hv zzjx-R%KjgS!~@sS=m3OB{BreQ(*#zYe`62HIC**7+f2GXeEfLv_s2Mw4~HqA+fRXT zwG?D`avp{g#SuucVDJPDqbtuUKFK_#I`3ydX^}Y05v~hn5!v!Pw3J@KB2To9R_Jqk z*nYm*=KI=OKb=_QRn1R|<>mLZWV9Yhx*E~3u8mSE40n96bT*C6)U{=K^nWuDtm zrw=ZhpL`#(jz5)yzZ$|RyibC+8d3F$W`ut&_W$&zmEmWSEI|g;SJz{~5Dm01(y7SJ z4UEYoFPJunnr`K&^=W5;;xBsKW$kLxaB-kK*|{;hsK59enE!U+N?J*eegfQNYdhCI zJ>yoWJ5yDu%?BS&kt;zGJJDKauU>xQ=|M(u{Q7O(hVvWh*%Nz)-yZ)FC%(MXB#vg2 z)vrqT6ZuOmFT0Eb2gp2WyLOJK$m{L)QIt=3|MIQMS#14`pEvp(?SpFc)5f{=Q-&>X zTl>`vzsEM!Zwjjx4h>QqS5%^kO?bL6eyG~6)9ZwFh`_8hI+6j zd*t@BWrrCpl1k#mx_0_=MvJ*?@7}$8k+AtJFfb5j?Lp4(R%BDCcg?o*fXwYe54E(H zOipKeQb@kPez-Nqww0;Nd1tuenJ(uC;s!h%d3v0d0kYdz!RblhO<|*#RHdRT%27U_ zz!`cZSCwoBiPUVM9Xif0U)XiO3ZhA*oq1754oagA9ENEL zJSKz~?XpH5?#OpoptivT*JG)&*N^1(?A=9r{EMC=-TW-35Qz+-Q6%5z@R9H+P$IOjgPaP;MLmzd19z)fq$JmI^XZ-%1zQWB@#M+DK$^8C8{ ze_j>wn=>Uu5fga@Z>cK&#^EiS(y%;){~0_KF5iVdyLf_WJyGAHleN!HfZ z3OeIHg4H3eILZfFxCMdg2Q{80u)0b^-!Q_HWOAVO{ZgXI=I{$m${geLxN3Z5M{iuY zhtd|e)@-J7@}|Ixy2~`HO8#~_mG!0@N02SYHb@Q)zG;OH1-;nN>fu|*_kUQ~g8EQP z#MxPxDIYV-*spWz)~#WCr{YFsHR#bxBnl6YlS++)D!2F=URf}~QMme6mTH9iS|K@l8CGzSkJqNAfbD3>jw z5HqaNwn$zPdn%tcIC19P7J9(YOn`6s=|E>2)!gT`?Ezfs?dyW>N?Wc2DVOYCyqgeJ zP^u`!oj-pb3hP8rzu-Y%8yBo^F{W+;2;$u`ufD3R6~mg_oBH*u<%Wk%Xfj)}V5@%8oPYKB23efp#b z*5NiV)SDb#d-zR`UwFsrK!`2(mUPLBY38SVzGo)KnnLhjRZov>m_`@quTbd9$oM)f zPrL;h?fi)oC(cBqm269ya-2V}umL z+aw-Ml^G_d&a zwvN<>5RYr`NsF)pQ_J($91Hz@CUeD1IeW|&dD#mwmX>7u%h=LCe^#Lup7%KQ065O6 z*2KW|<;i$ZUroU=%I~@XJ(aIQLlfAw3eE}%X#_9jbb_v$)?4myA-|yT8xUS2D^4q* zYz-_g$YnE%59`AilhGBbn7dHi!Z!_*3980h;9BK*5Nz`-6q;JFefi43Gk3uIhoCEA zB{2|4+cxOJe-#;-QdA^d4DUKR&(01fsu^nU74RUoujgr`YFNu(<^>JsIg`kGLZI0< zOpsxQdS>t5T}^^t^z87j;Q;2EV{Y0FP&UAWx2`TU8a2=64F^nRgGBv7QwE<* zdzzL|_QP%^YLVp^Kp$U_aRPEZ8<5;xX8RO7*%sjYc&taRV?fj7cYUZl8^Gh&5R5Sw zfb0>Pe9%$b`D)XhZ0Mx~nNS|;-LSgR7U<54FMcP52j`b@nFq<@nhVg~EeJLS)16Ox zd{L1mK-F7-Wm4vPKR*a5u%AlZ5Z?$vsqnW@wywq2yj4ocMI z`_emBrjbJSX+ZiucZX)$!`S=01t5}5`Lf0+g8!`TqdGUdRK^r2JCw%;P6Z&RV4Gj~Z`NBBP86Yq8d?>|=y1s-Jg7a?z?3keCpvPUXvt`(U%%@`? z+yiXSRM{iao)XtWZTC&PRQ0SgA7eqZJVZf8OF@<#`1lHwz~MbUGdT>Q;Gz|Swi5dvQIhKd$-y$e;#4Vk3P^&(i}bkW7rGOY4Z ziluIw$))?qJ$awLfrb_t>jLUyg72W*kb?4{4P=#*f++3YVw-XK(UB4Ggvr99H^cI+ zfQQdyq$Vg^w4?+RY&-O2=Y2y%;GSh+Af|(H8X=w2w_$U_INkxhS+#NQ7C6ij3ug;t z!OyRB?V1;K3-dsDdp%dR;;@HaJQ{kFWE$_!vz)tpSsgsA?Vb1yV1tsyoaVt+Hvve( zq&@l7srGdo1~~5&Sj#EU>ElsuySFKt?p{`J6vAw~uVcU4XK%x;zf^gHPoN z%AIJ7zPww~flTet7P0~@o>M^Ar7&$BNfv?!h9dfn6Hu}~_j5yG0)Y{gcLK8PRd{$3 z$i&EEq~6K63f=sjP^%|E*R?U2?$)7yD!%xlBnc5{M2er%D2x?h3UpeTdJh*cfu#cn zXW;6Qr~8g2!)%)lmObi$LxRjfUY-C@AvdAO59-CLLPSipXmBpphEX{m5p~If{0JR9 z?Ng6nHJ%>z-QG0t$y%U zu((L`G~b=To3%kKYJV?Fhs6}CK}SFa@+>fny78rJ&W_K20LyjvlkOvgmjcFD0~&(c zp)`jLXagGI>7F`?Q(hjN(3kw;-3#E6aY`)mN@rPFS$pbyK8(jWvxDm}@jK`a@rwk0 zi~ge#f_77}ZcWLzQ?5cQUwUU#w6LS~Sty4K2z7OJFt5ibv0WJ_c|c}Tge@W=w!L9f z?1q-`QL(>r<;n+O^xr~$R2krRS)Kn5D?6P#cqR=h0a|8eW_Vd$08Z(MoTjFxF$5pp z*+@RKyFh7NxpntITxH`uDxR~Zg&rv?D|ZXfV|zG?-T*B=4RV4a*ceqhIKkhvg6+jC zltLq#1P3&%MY|gw-~S!_A`r>Zm{<(D*KDdUKMT?}SmxMPW-%Jb5by=t$=B`XAg+UB zW(rPBk#@Q;Qy@@OZ(z%aYp3&%>C8c_Ux#k9_RRaTcG#ZV-qg$ixZopluo}sMhH7^9 z*dE@ofpy{*zqgyAcc*5h5;$gBK0jz(Zr~r70IpUM;zN8v46r-}SKMPD;2Ro_?cElp zrA&ep_EzzFxvnCh>AmZO>GL!g=;dnx2yyCiqz<21&pQZ>nqV#u1m^$H67$Ljr!-kv z*_G+^(kXE8`@@4Y02`gGFs{o6;&n4g^HyS5Z+Pq4`zH z(eC+4I1V~43trIDmIf~LX?QQ6nxW=XxZ~DZz0te+sLNUF8!=#GSqHb(=z;?eyx7H^)G0JSsdDkKR|GsdOF3(L*vVpnHCHSom=^ zHQ9>o&L{C;+wDz!XP!GSWlqorANMJ)2E-E;i16~UqN#AwQglk)?q(UvMYESaO&EnX z;s{~K%x8Xnqf2W@G6b94%F{&JXFEyBsTAeq1IFsZ<3TM}1~1w=VPHG0n%P~rM^@rV z{?)_%byq!s?1=)bt)iq9_x0;nV-8lm$K|>!?F=7h$a1y2vMMtD#4P6!2WNi`gD(sdtfAc>Qr_5){h+-ruV(G|9<}q4p$ds;b}zj_Bq! z%21CZz8J68od4)i60)gD2rbRpSHG%144ugNN*p+q2Sv!JR@tw2Y5nc#HVSuQ>je*?hqk+`@<&O_vd6#wgeeLksZ!3)(!;e~2pE~2pr(LqCe&7Lg! zU*#hT6~P_=7lolS3!&@(c{lh4ys4u1-+%E(ag7v}Kg+-WbO-)NBje+UN#f6)Q@Qv+ z7o;HL|F}Z;0I>s#2J`P!R|XI?|I2-<+@4e}vJV3IM3|-1#J3TK&it&z@AU7~R8-Xc z&$r1a+9SZm*6`58A%8J<%zA(3cq5Z`1GqTxCu5)0|P z_$dX;fPp3}ONFkc<zp1?p8Jydh>~`X;-<}KwiRzvEsshj(|v!YaZvuF$U)ur ziHS9XwNbCH`FKE3wPH9pE|&-K$+o-5fqeCL*5?fQU>drwPQe`@;a z(mh`DgTCj70>0ZlVcWEpauY4SxC7#t99{8MbwrwUMqFI{@ej(2_+Q@k|EE8Gw;9c+ z7wCE+f4eGzmOa?^SeelH_ub6nQw;{(<^zhUroE>-3OtIwer>&)HMjN5nKNA5<6OVS z8U0euX4R-0FB2`xbEBKBE3+?frDao$zqzjRopi?!3FfZow4wD5s=B%d_3A&}`0m4H z`m5Y&{Ro<$`>l!}mo#@m|x?A^Uuea*y@$M3x#$+yv)f=vt z1_;nHC*1zQIyF$2`{ukC>*p5B4v!ZvU!JjD$ng?&q~c89B6IuGEQYm;p6?AXt5G7US~QsjnAhtx8WrwR zHOyJXA1E_6HfETj`X)SFqETB_mGOx3r`ELL%=w(rg*F<8>@MS7$M(@aqYHdOdUP(s zsP(jaU!N`(K&&?U+WGV6Z%p=8w>5N^1{Uwo4xkNMAltKVpYh^kZGv9I@ywZaDwY|B z?BwL+T>Fn_Js9Nh)uE{7uxO@cJ9@@`^1ZszSP?t(9Y5D|fxnmQ(WCW4SG*8WB6Id^!R}y(ZwJC37`U`Ph>wcui&cLgA0J=vGDGs! z;kF*pWdXLck6YVZm_=$1(>@an7bSDYWsjHejVEO-dNk;#d3^YA__>#t5kI4WijycSz}|Pn1};HyRCuj7&kZB%tWPZ zQBl!4hsN+=`$sLqG%ZYHleOyH#+~OXDl2_YSa7(xxfQZYiNAT$E1QisPFCfh7BTDP zE)%+6*5m&3m6uoUqpgP&Gi|LbRg{!=$iI^ckq?)d`1OOrF+|LzBHhX)$Zo36waj6v zPMZkUFbPj;gNDRA^tmoHg}tW79F}Y=Dk`2>1Ywa^>>68Msj%!nuTnG*(9FaEPi#Q5%Fj{@k4_6Zfj8fe77j} zMs8oX!#&rpMz0S!xt`0w?&j^XXw3Pblo0XZL+5wyvd+lxAdNg%+6_!XKHlo~0t;~} zpYOIIL$qg1H;2W?Kd+QI;ekUW+8&|ywJK8HYGJgnF4gQ1@ z*$&Ki%U_?e9m!c!$bDJ7Q{wHq*F-wxvflXn|9+%L_;GvKpI`s~`A6}+o7Tn}w1|*9 zo&4a!iZ6-tbSK>|$jQ+nGPi8qns2?|>|4)xoKEFFTM_jSE|;_qAHSb^#7yPx>a?cK zZ`QpQ&mW$aNKgDSJniN0e)1GVS)Tv&*ZhO5vbr3NxZ!39J_+-!C_6ok45xal|^~uxfI-0zTnl z(p!D^lIuw-_jt%&L_DBoR5{_uxR!GNfdgFCdT~3d^dfOFKL=m2{G+NJA%7NuJNxlL zi92(7$>!3fOB%uff*sTI2M!Q{BwhO+TL>#q%%)0p~ii1 zx!AL^^l`-R&tQ|DcikZ?3p`Q#&$ZZsCF43vcakXenmlB`e|+z__u#9mWHuRUjrvKx zmree5(X=O@g(+am`*&9fxR<=vm&6A(=>rsm-n7~}5_-m6irDXeU(-L{n+|{8X`ZGj z{6J8fSa-LT-B(_9SPuD`nTR8L`pQo_m5MYHKp9W&Jt19CSg?0M94y$2&d$#MJq}i4 zs%QKRVhV9*J8S%3EBp_r61q9{?$gBLH3E#(&!0d4$E6bYjVobgz2wll7Qs4puod~h zpIF_#&s7MM0dvWx`y4lKEq?Ea%Jshk_;3uljHD#@-y`fJ`KyTATVq{a&n>=XBi_vY z^}oLjv93Q3UZ>>t z%D-Rgr}aOR0h5e--+EVk(vf%Gu;YuDtccS4vdTYqFG1RP=*W?-Z--)T_Ekj!-VH>E z)MA4lQqlYUeS=TbP~6^+{FOJkB~XT)!~1=~pjr%{M%T;Yt}nf&HOU#Nse933S^9?QS)ANzh(FJXWt>$TL1(^=Z_EGQO z=Sl+>kiCwIS|40y@rCDMfm-F1W|ORaR`B!ZoAK{Er7E9I$pby?-Md%e@@3k!lnmnX zdQ+jAjl8D?yi?hrbGd^5;+A@? zz`t)gbV~Pn|!80!}G2mwRZAaD{n4~p5259{9 z<@75~b?WTrdnJM152)LYt~y~cbh9i-_-<3`%M_EI=dWI!H8(dGuiR;np7VGIH+8St zr`xo4a}xr){YW^5+XYSc6Mr#SpV&6&a_5njC;%aq~l}EPhWu1)tVbjlF*A zzE0Gj{k_&_V|yiE@%X%}9|~VZwT&lvUxbzDL!LM9*apMPM3)(7hE39T^HghzKK!f{ zUQ1$PpX^O42s~l&{N>Ahhoy058PP>kBoi^`4Ivi8%|c5v9f^YEii(QolJuLt78kP} zIdY_1dbgPorD1cr)dpq}A))BGX45x|3TkSl_f}DDKYn*RlV|uTp6aQ!t;El~x?8AS z!cOrlmQP)jzjf=Dr9)wUKCkP$dPXu_G?{>a08Z%YAJ`zj0yQP2qJ`P{_7cXM%=BHfsYE?}(Vt0FhcS5zxf+W&uK9X;vrH#zu>Ec7l za|;r-IlEB%<~*J9r`vMxi1MK;Se=6ty3q`;Ut9-mz<$ zfJAXj_lVYzcGsWE;eK+@!TkLEH*elt1mHF{HvZruuTAbmLhSC@yLXqd?o;P)|5@}= ztBqfvZPNIAIq)N0cyU;r%5tbN<-hXB3i$d5SRm3|T>AQ-{gdtHX(b>068>{x&~q@p zMfp^u2`N<~Dw770$la00_acweA5s3V)ca3B$GA7CVb?$E-NEZ_6`6MPsLAh8paFvm ztoc#0jklPh65{ByH7mDG&li=I@%=sfOOy5<6ba^R|F~5o*t4tH`@gEo@52ADM7a57 z`K|jOu8DkYGkp5u#Xm0fKhwJe-WWyOpe3{E@2QahJV@K==7Y-rvpQ;6Z8cO@_WMUx z-Wn@@=Dj1D|31!LD{n>_4~X|)Zx*UC%X2g(<$rFOcz&($x$AFw)gH(QW*rS`+&f zLQz;l&9a7^Z2kK6|9}ktg>Kv){j*5Tv<)G*pMAWYEE^5j*YDr=aC3VhbmDDi$C%Sw zh*q7yV*`3TqCZ4Sw(8#1Tl_r%CK1umB1>EnA)lLe_t$*P9W>`QXimo;(50w&8mRzJ zU(VjV73aEm34OZP^XFd@YtD-f06d%3Hk8h zv08?8ob{wGu&gCIs^0PtimR$dXLi+8H9IwJy1PTzn#bv+ql!Vs%V%s7H8UxbDJpMv zSJ0kZK@U{)96Uro+b7!;Jl+xDury2J(Qo9prF{G0!v>e!(fiZ=hWxiH-mD|dPY)Lk zPrGpDn+>J(97D42@HMK^ZP<8Jub#)5de;RkwWnnkyKxdz$LG|&=YUZObb>@dY^hjD z6aM~prmGtHjC5ZfCP9PlKVN-m%$u#*0wpNJX8Ikn-NIaL);p{5ZW3DA`)2($yIP)x zDKreVw`-_bwyo07n5T)DzD_1S)L?wPl@#HmxKJ`MqMczpjZg}Tbv+&w)n`<1?nxiLex z`k;RL=vhItzC5gRKA0uNWWyUDhu({rx$`I>`w?+p`t92>VySh9^qbQKP*>V&WAvI* zc^4R>zzd>+iE=lh+bNh4Pa7Hyvb zMp&hv+WU?<-4j4#b&z#mWY}CPI)1C`XbB~Rn>+G#lky8KS%}upl(Ia+e6W7>SD2?U zI3v2Xl$KpDuO_$Nqf$)J+87>Wt^2{n;&g)LH%iHpagpMV93}OqR~cFI`_d4d z((TtVmw1hXzN64nG`E0Ji9VIHPXVOb`G^Kx1Cc<`^>3rs_UHF=Gtq2uVeWq6(u<+(`U%5Mh~CQ zHU7rF$f;lc1OBQ}SO(l}PWJ_qHZs3U(Db!zu*e7Xte{;d%z<}r-Yn0svAFUZ2oX9?RdKIkt2go_wmmyR;5`O)PL412ApOfx`9eyOa@gfn!K8v zK;n=1H#>Fm5)9i;UwST20Oy9!2DvJOw@%iO+S}WIrkJoZC9PpBe`7>P@Sits?0#so zK6lzHAV8}B%EzLHml9w>Ep2q&6)wrk*WuN-x^A@%epF6m-7E0$qe@bImac=P&Aj=b z4sy7<{?f7bHR?SwfkrlsSV{qn1%j_{*5y=5(p&X9_7mMRW+TgS(FLF4vJ^LL22pUp zuN50O%&XXnFau%d44PNQ-;#_^NRa(CY{M%&g^$&o`srRhu9NG$abtAk@%aOvN(6V2 z3CS>gG5CTb^hVN~Luh^=K|<*7n0)Yoo}lG?+z@+KOIf{ z3^VE|`0mH+9u;+PX)?yaXs$P$+kU|kDQI+l@sne;;IQbVB{`Z+`b3p@Lo@JglOEN|xYjCXNYuUrAmx-detFTHE85B9EYHEK6bp`Le) z(wTSia;d)?(`zg#kA=j*wHErDtWT&#INf2^ut-pBB<9LXsO%k@5H=CHLwL6-e}&S*Jxb4LePG? zTlXB@B8_KZF41#-{mQa;Zd2}`dR)PjNcI+7Il!2JN$gbk4j=C*# z3~THI(VFqh7adz<=IR?t8`i3dkRx;-1S264h|IK7be9D)_lLOUJt*$IK4vAH+?H6) z&%aPShHOsZU1{V~Ceo_8iy9~U%dqFJ6R+Yl3!Ph*Q6h+%fby2tF$yhAF~gb{XrTKc zy;`fUc2Ed_hV68dg{tX~GbsAUbSm}$(|ofT&X9nx!jEI`@M1_zd1+WrFBQad(dDbx zw%RX)ucui)0S?u)_Y!WFkhmacp+OTqtn&GBe{|ZDrNw#qD_06AXoRvMZp|PlrNd4G8$r;{M$RZJ=zivpMZkk@cLovH|dC{bKw9lNM@us%6 zOG{S!qeIE~{xWQU#=o&q)p}~+JYWeyGz>Rqpp=h}@vbWHh-)!HewXKuZMrlo2 z_CFQxPR&wmurXr2e0iPF@iDd1Uybdq64`yHjf}V+K72^jC!E;vZhr$p;uy-D*H5(= zE=2+;5uR?$&32+l8Hg|bRTW9MyfmE!s^k`^hYbuou4ELeV?o&ps)SKzX z!DMgvRnh)nw#_FXfN|;Jp%W)gv`5rmRku5X`-IB$_RX6IYnW}H0u&Scm&n41Sddls zj%NFLy=@$-=d7&-kt?#0fj1mV?x2UOD7?MIKLD20GY4h^)(d5n|I?khvDWw?i zCAbWn)y~e&qqoah0He>McR4R5^`Sq{Cw{8&)iS}4Z&uE~HF)f_T8#G@_iZ4QSK_;Oa%jl(+ruILs_w8d+Geh%ITFc^-mc=0p#3dv38k6qtH=0t-Zr-{T zXECe>X#E|!&sQdvqzwN7J2YBp95$~?s}#2tKuzHu-(*-KtVI`)7!Xo zgnWv-LUk(NktX_UJptDr8mOe1>m{dr`t$;u^R2j8r~cCcb-T%}gamqE|Nht4(#%c! zYc{T3I-iMFLkMEtL|?W0iQ#lF{EOVBOQ%5xyScl&pYQR^=`$fjhAp&QtfqTRMp|CmH6?J1`al@%HHd(_T>nh!EVIx_^e`_#wvCD*}cs6GrRd34JpvO5eX3zAHu4} z@W&Z?qrt@5F#^;3_>e_vDg5OHIG1I=NS$WPz3p@fbic(qSMK_fh|3D>7t9d#K^ z6kB^@AS=5dA%yHXeKu*s-1M+#VMiOHd85Jf{Nje~M;*t;j3GMq)+Zh!x+i2j4cvc# z%}@%F3vYef0%_FhSBT3mG_;%<6Pt;wf){LH@wi8)iFsVmK$ZDs7Y z;&$-gP@BJ6tLp~_T?YMk?yx!%;!0ASwiv9>FAY4AOLeJKpobCo73%f^GK4ln_5h1! zDCIBJ_y4)K-V{gpZiUi2?7|kxXBxuX-lkz!v>(*XQU+ z(Gel*usq*FNTn}cy)s634I0H|1r90nSa zJaH&T+)K|e_>H&lGdnt{FAZ<^d^3cgJkwvO!aYA$_ju^|Tyl#81oj#6AH>F~J1p`N zSc%zgf;Oqe{sd@hx&HL&ld|k4tl`6! zVeRhkz61<+VX}@W%`}*`6`2}pl2le^AmV;`rcl%{t!bf~FRLwFbn$>YJ*QTCp4(&8 zVMOk;SFZ{XwLdd#_=Yp4nd<85Kps1zvv1Vr1D6q5UAvKz{O-?KC#0-nU?GUC%8}Cf zoH^x6AD#3fh?_%BjFv^as1}x5zc^M^Rnc|x%7`9!FWIy}rhNG_E{?By<3$D4i7-=U zOZzVbwb15(t9}W)2Sad~OL12_>izZJinkNJl`a((m$n^I&I2TxDU!ASf(x@8h%5Z{ zGmedrmYZ#cyPzlcJUSHJ`XQmT9Zm`s^blBykwq67mL@P=E1Ec}1~BOYo9(>k>~@P3 z)wVb!77qXiKHCQTmtLg4chZ_@uF+C|x>NgvC|-!_aiWOitfDUmN&m>*eRj~mp%~SC zwrSX&Kpe^Ar6 zoyGT>>J?DL{J8B@)}smKzU_{)^7XhKEGHcathYc>|6F<}Ut95q`JwXQAe)3WwsbO7|Z-fO{b+`=E5_EoKO$<0AAB~t{^Ktv6<)_0Z@C;Wj3Jy8V4-~=d# z1*h4vW24C8g#13)ASuX{-aKY8nlbw&x8#I}W3^jrC zp#Q(cClJS6%Kx~>0r__$Kwb#|rI4e&ubJ;a_ebPf#)X5COv2VjwZ3mhS`t8L?=(_5 zeVQD%aueFh;cKZAPve4-FwjmsLJsPEsvdL#v=7mY9J{q1TlXlrq+`?&ZkNiplHMbG zrwC|F()#X`gB~&&x8TcXzyu=_3*v!5obXCbyYrlRx$HqBFYIjaL3qOxBVgaqUt;LcTJAf<`dHjP$*a z8H3;DxxYUZAK^>t{zAoh6Z=E!Jwrv*jtuKb zjc+dwxJZ$3FW+8XRkQlJ?m8SmaE4AFSiR)>BtnWu>xJ;XV|04 z?5DVi3`+doQs{0=W}xWuY}vv@xTuHXS2lA9;&SUUX6ow?o_EOwDtb;Z!6a%%EzV~z z%lSi2nbFhJk7rZR5Rkgrs%IB61CgkRyovh0(TiPHYqUKdZ!4^EdEgBFHH8j4{hzTR z1r1<|4iIb+gFy?9lt&U;;HZLzxv9b8#pxFHjzLg09+nPpJT2h3cDk_#wW7{+I;~;4 z-ud;Js!{${v?J)!CD9h`tjc^<4`wEG^V~k2!7bzn4J70O>+NRHIw;vQ;XvwU>L6vv z_BXMlhRX(1pG39f_02y{v|Baz3FsC4q1pDi!x`D^?MGHbi zhe^eGb}ks(#6&VpdP+BjsyqprN?l>Mp=?2ku;J$PgHD}uIs4_ym;0`g_4M>~3@b0E zLDRYb3Wo?;e?Eig(T>wsg>=@=r{Yrx7V+A(5@agNJWtMpb4FKei```Z5V3b^qu&Bo zYGvL~zU$n2uoYR?>%AikZTDgv7UAp~O1m>@gnEGfb9Gz{$P9GBS3Zi`qt5@nxMWvX zpPCdCZ7kBx{u@;(IKp(y%*_2a&OQFM7SiTX+Wqf&wv=#zRy8Ziy=KSBm` z$=(PCa^z~&RgCoX+R;1j_0%U+Eh79zvXBzVh7w@psm>@j>2L`bol2^1+zBT9;h+u)@LKtP)gH#ez5 zO0VZ!(MW*nRtR;&8z+BVGOV%9=(;0MkWj64+QGcl8w^W$Ye&AadHVDd)|bEe0C08D z5fQk$i%-?BN1<&6UX|h%8}Uv_9yptkLm<*`q);BC%Tt6B$8DHC_O}$H%c)Z=Ixa(N;25{M@fOUyY zez&-JYfSCV(VF!!wZ-wbihu9h7sr*$S^YEFC@gY_<63I@XFV195)uyBJ5Wh~*6{+% zCRfWlXIM79e*HT8&)P>vMIFQ4sjA+MvVkW6Hc??j6_J0Jfb{(T++p4)con@Qa?r3J zIC${UVdWSSRg+5(r5`0YAGvJkt+$#6+O9Yz z=RDMw6%$NCeEjcCIM@nQ>)XHjm;D6``6lqc$;tfkCA$Y38d3*>7rfOdRs=hKVPWCF zZvPmMh)6SW`+MtZzFl<5b*k*;sb++FK!+m)Tg==4GER{#kcpx+AFtgQYut4~z6ts% zv@?7PfaF`OG3CY1h~I9i*rad5c|GI#)@#ka^$C#3;2-+n!on2_8>g$Q4w~k~qS~BA zw07Yj09Wp(MBNHTp`|i7Y3q&azCpYy4yG@^ zzkU8~I%JrfZ&?l^l&2Rj#L?|*7Chd~$H!NbyO}o91i%^mOd&Rr1CSIuh5g*jraY%v z1+VZ|qEW^P1I0j`0QemOI5TJN?UVLn934Lb8LFsg#V>U4yg9u|#mjL_rvt6g#PEYU&>(^kG%ie`Su5A*H^t0OsO8TEWy0yai!XPWBLT!Mh?pJ- z_4~|h`>~+h;O?53<|v)C!j2qx3su{TRuT>PTV!r>l$Qs!{lwNiwgaAo3(v*>G_$&# z+$jx>_H}ip$%BQd!LWirNYj`ZX`{{Jt?eOPBybQDP#Qz@`2*nrU(mil!2mWt z5!#ELzYZ1G#gtR|ldFi`T!5kUzic=qIX{NOp%#0QgWyGir?rl%E#@a z(usAlA@f8B0FbmXbe+AW=wMSCU%Fn-y;Unq)(g6lx~2J|U+dTT13XX4|82_YS^Mko z)50@$OVXBT_P!%zz{>nU6PLT>Y?jRCh%Cd#$?1vSi7vXgP>7r#ZeV!{QgLyyQtWl7 z6gEdqt;Zp+Upsp0FMRz@n>{>bC(*!OZ*0(GlQQ3)R>DX|SW~RfFV`jB@s4D3B<2AK za$%<3U6B0t(! z85F0nx&D}Oz%}%L6F?CHN>3iG?f90pY9MBb@}|K=69*E_W^Rh^AiKBc{g5# zaPANu)~UgU-zc*G=AnZJznf8X_VoDoPt7lO`;oy%BxUXnQ|b%CnUZFH1hK_sQct;p zQ&m+}AD8uTS8t5HRlLo1anO{|6OcF7iPaRjyu@Kg^@&%;rTg@QDO7q3{S!kxgD^AZLHR0c^&NupHEmn6MQrEnst#nj@R z0a;ecGG>PQkr~h_0zLJqg31RlTq(OtBb=3_3fIuS_19Ky;`R?>6Rh!ue5VS6k zr>ee43>yUj_voJwquab0oATyuxNlz&dT6khPb0O~2CXp!)l5W`&9zXdW~?w^8K?ZJ z4EH2jMsyJY0ReZTcecLaVE66gK-xk#0tR7dAyqOxwp4=yb3&31b$6NX(O-z&|Gq8=oeMKlc(&RB8N`0I1*vN2;l-@ z^#?6VtN^MbTwKox(*S}TG5qV8p>r?K(G@JkeeBp@SSl}19F2%xLn3druu;1>n$kN_ zJ6h3$vIq#&5g`<_VvHJU&PZFiHzC32K0ddjcm9UXqI194-pK~*N9};k^bzv?Z>+xe zAY81logwmIn(!qoemM`xY^H~R5@U@z&dN6h+m5Y+OPvQ@0s5q|pPHV&f4TyvlPvg4 zBq&Jzf8B3X)HhW=%B#-GebkiX0001D@Tlw~+~$Ot+~og0NY=T&hv>2@p}_ss6dY^? zA5R4B#DuAQ6VebDJfhryv6ds(S8rsv8Le{fQ|(II!THDNzm{Xe{=@;1 z!jJb(NqE(Fm<;x#HvLx{a5-B^N$Ia+2@)0&YATvv^L811J(@tAo%*CCvpUgPPJ)gl zY}7$POlW-%{O)j>nGKMZo<0xISZS3^1<@+;=v3q(jlqc?Nm!0QZmq7a28B{cv@axw zYyzy}sz0cvR47=WQ0X+KCgL2(ESV4dyn%&5I{Rz9;6DIyUxg&+TUeEdUeX_w_4_Ly zS9+S2EGy-Y0XHjWH%uP7JmHS-M~lGT(Isd-2hk`8eq|t3{5x;lbeQMLQihe zhxHowpuz1}*@gj$YE`~$5RqC@4ZWtDag$L3Zvd26qU2fFtEW#l{kBz-WV}lZo*9iA z5opkapAr9)x;>`tT{5h1{QWXuHa@;W!Q?BX;+4dNjz$$j zUre6tHMyH2Vc)JfEKb5}v~u0xY2QNcugQJ7otR>J7N&6N(idp0BtnWoCwCJ@ zXz+J zn2F~o!3g5TzuS2XgFrO>Jq$uIW4Dy69}GFSC)h!RgkoFJWlVPQ%9ShctKZyTLnAT} z%m}ek6`8|+1Dl9Q)D-hl*}XO96a@WA42YrOR&E-0Yt$Q!;yweYUF;syKzf2n zq9V(|;niWKFU(6LYlN6+0A{dT8^bG$!1(H_Djv0-xDAKXDUACeZEAwGC3Fm23pZiS zJ2B`A0BMmovpYLn?X!$xu~xlHm&D()Q_v{ znXGtQe!lVoXRsZQyZq|MU(B-Q%8BWRS~VLFY#m{uLBHYf)$W60Txfy(7i6uT*alF* zMp7}mg|3Lic;CqMI-nN+v}|lq^rzixFjxW$!*f50QxW8_WQ8G3{cfbgz`zn5ic&yW zkXD=D2$1>GhxC3Rv z6AA{`sIzl_Iyl}+XIb;9sbjPi_H*jV6O2z>J!$Mb%BLs_|22Km0%>(-+*YJzU9G~( zYm0+XD0eViI{15s!qmx)^kasCueaJH-yRr0+)zXBNZ~EW zIHMEy(|#o0ynW=4HuYg?6a6b?BuqgSzMzZqccE4 zA#98JvB^(2A((m~Ns2DJ<0foTo!#9SYk&=zkWY~k1|X@W3$wA^M}bSw$baN&^6=LG ztMQaCu2j|Rd-pz+ZHU#ajv85?{OJ=91S~c`LXU#fVsvi$%R{Q(%J8yvwVzCSWNMx^b7_3ycUIk9fyiFN>6r*FQN1o6&I}VtL|)TQ2S_sgv%)IAAen?vCL- zA(zQBFEG#S-YwunB1>;xUOH*YACQ-CHDYZyW4pZQCle0eu(Vkseb#c8Xsap*pMDbD zXS(E0%S$XKX~M~>GUy6e?bq4}F#$JRo}ZR@%+0}pZc;3%uuzO;QzoUNvh850QnDjO zjlo}D0Heuc`U@?haxe}N$psR5DToItoO<>^)6E!7QL}3~F%owbIm+64B()5_im0TP zV$Z4BPDB2+l;mwa=3=*_O6=F`C6v;}T9V~4pR!x}_@m8m1g;rlG$7)4MJs5ti4?K0 zU<=!d{TJRvMTu9iVzk)LA3+cJgkM6{PG7LXz8!q}^o$zuN^7r<3d(y2!|P1e=6AQ~KQ&3Jh5GX%cKepv>{R zKTo31Vk=My_NV467+REww>d>sL2g5Bb%c>poyvRo_NneV`c~sKE7(20B-z27G0>Re zg*e3`!=1nCg!#a0)b@pb_2u@`6T^GZMqoGyoq;5L6ojuQr7!9|@pytGDxW){L9?K$ zF1TO0CLC;ivnzIfk$i~F?5|#Xhnv#8v5%?dgAhK~uUfSVcI0+bLDbS?h>UiK z$UO_=Wj*LvLt$?D9w6Wag$WlFYzWtaQMa!)rdvQ~xdd3IMF+`Zj=ZhRVTpU^@w?d_ zqkk6DPsC0T5(TtJ?)Ltwe^DH+YjKCO9CwcC6zk_OyQ*$#Th6-AWToV#W9GxW2fjbB z_YYdKfNj1kF9k2pG82>II1sQ23XOebgP8h);1v-M z;^(_N2oMGdjIa=(3XVbJedg!KurNNft~?MfSlHx9+5twZ@qKpYbNOXCzvFrr;AkQw zR*aXzVKz>%CNLwop>-l$h~P-j{1Vm+0{tyyEl)2KelaM#dp51T2p4aV>hku?*=~Q$ zR9kq4;KB(^C=)rcf-qq?hpGfJ`2EN{6vbO8!x(K3pxz~zXLyq}u2MUXvWBGhO7xuM zlFfw|wh~lh@%!-02N6Sj*gzqjodU*t2wQo}XS4n*n4?03f+nkYf0dJgS67^6({;Qd z;Wxz$hL1t!tTTW;Ej@i9+lF-A{#%%oeYRAm0{w!@0qcyhIWa`K{^h|sTJ6c0^S}5;nfv+1=w9Zw z&B%F*2e^LVo!-Gk)*^7#xWR0B_wHDaL-x&XOiE$YHk1RF>lU;0Q0fUuIJcn%p3{*m z&`$Fq#LR#i+(YhPDa7a?qe%J#;XhC2lA(L&LsXV5PpH=jm6 zIWH;sK5o82KIZ1knemj)^s?KhUqox<6SF*d|I$L=vKUO zBZ!dl4|teJtz|}O{o0J6FZKNgAy$K$|E=l`7^l_6_Xv@!H$EP{zT}zPb{*ESw&_9` zACirhucZ@i!Z@_)gxCOrN&?bE9egox=n;2I057C2l(&O~d$M7$8^jx=W)X-S%OPkk zOnaY~+fI;jKIC$s~=l zAuBw&1+Mu{qIUvekPcS@VWcMlZn>p7P~wbPuo1;_>6dLzH@wc!-u@s*yCrG6hHK7| z&2-Z9@6IyZf1an6qo7y0na)J_)mh>Cf<5ehbmtRhKKs=wK2Fmz3gM7@c1H7PyE9h= z%Tbp24cya<9j_wUULSSZ;nOoOz^>id?AtbN#xc{`JilO%^YGxx`-f?1X~`|xq;i~v zXDM!noSp{m;aqj~;zgE&7TRA`;qHNm&g__4a~Ea==wyUD+&_{{8F|DryQPI0gI0<9 z-2Nro;R*4gE;#!rw6(7~O2#WqPECzz!de(mT`NKO@Zk-34#wGw7dPo=Et=Z`H;zn9 zh~K??xUauoPEpYnc8c}NAGckNRz0Pl@FG!60FMNiZZx4O4HBjz`G87*iF%_~(E~ge zgNE?;QWjk2#roi$14QzDAB49eX*Z3%DxRnmT`nD=#n1Q)E5K)y?e`jJT$PyO8mmp~y1| z72uMYD)NzohqslU0k~YhQPeUcYfx9C);-N1ksTloEy}bOZ8Seg{Fe-Zu z5>*4Hp0`?5*`=*>jU?g#qF-Zx+4@d(zlwiDQ`0UdC#Ph~xKT4V41nw>hEY(Gl&;Q4 ze)#YJTatLEwsmmO0|gl-*45}gPm7CFva+#}MND(RDSW-_+e_?EPJn<3dUas3m0G_}KQ zvHH{J&+q;E^=n(O1>AV;XeFt4(wlJ{Cb>n(zkmN;41BS)w>AdH34o`XZW&jkOQA=* zYnMlQdivCMt+X_*q#w7%F?SAO;SONMxORqxiV0uPuCd98F`uZGbX>)jeTkCuR@{t5yTgK2AqvX4`RTVp2}JboKG* z@gu#{I~HlEPR2`ih%!_R?fik(LYsV#p}Cfa5p2Ge1AFnjDuV)dh1zJ4{A1x^xdGqd2i;(ri zeuyiyTeq%CsCx_;7m}R3eVh9#!g&iR`T>|yJQ#(D+6X*E0=SNlwyWP?WfKx&1V}SX zs5G{+wr0f&Pfkt}lPhX=lb1nt)JfHBj3^PSu=n(Ogcv+yOmB$V0t#(^xA(gQ?lqK@ zuTxVQ@Ik0UxV<=;Yd@0f#jn4vPcH{kh7|p2E(5x&N;;pU+!naIzucV~+LAIoP^a0% zr&+K;Dp0Umc_C3-pG2I}@7?=dx@vS2k4qnfGvb`IbfUc;4+HG+_i!R%ydeRt)Nq>@ zdvhi=Zzh~5=sZ~Y`M0BYAjXpk&jdnQ6PmD(fXTbb!#}|#8Fhc(0Z^W+5r<-tXnFQi zn5B&k8>Fkb$w_S*dJa`rNCS7Kjo^8pW)ixcQELeO84rQV!}#I|vPe5-mU56qp85K^ zA-{=*{UCzf_3`68RLeN~MQdava12}V6o(g+!&vp7Z7Go^*U8SAKWkj2s-W-yxsogE z=n1iI;)n{GuEhw<$tzc0O={WE(9nEPPW&dAcwSQ8Oe%n%b`1@aID}zrKY`TX``-@I zlK60cJCD%)5s@jY-Mc=cVD23Z+(|<7bv;hp)K3%VWfx3-lq8I1FvFXfYSsec11E$A z1`Z#oeS}at(;FVVY1=kuRLGSZ0)aXL*CPunD>?8ko}a~cJx*~14>uuBj1f~Vo32%b|yxoTA#L}#62)faEy-j5Nc zM<_%Aq7Kbk!7|}uXb+;*GIUL1LSkY#!B)G&Bfx@yBNEBMLx+rdEA|pMsgZbhW8B2ThLm*wFN0rGBiFlbp-(LWqEnI)^yCZv@2F^59$4y_^ifm zc71)u_UOucz4)@+T(K0}+4#*ncQy>%k?>%s-a{C&uZ<7qa3(R&q;pc1|Ejc!)2o7$q_t{ zH9hKIg8W_3S>(k9sQ@C(@!7zx3x&y{`xU{afK2u*WU|=+iOmu_^b9qyGbQ?kfBh4p zuExi2UVWeJY#423W@af9wOpD%&w0DX*qoFO!#4%whL!uSw~K3gcK6t{yRoge=`R2XG%b0w~hA#5@$8CM(g_H`eW`4czPj`#8c6FImwwJv$mT!n7?MdSa z;(ujMt|Yew=g#%p5iV}h{`D8t)!8}tUdyDh9!P4`RMpbIgjeFxADf+5u|Pe2cJwf* zh~v5UJ}cZ$By2C8~iWw zzB?+DtgV_>-*Dk4vGDUN{`Ky`Cm z$r9;<+Z=Dw7hTInDGN20{JtULTK2|`8{3U3PD)FAL^K+E8u_N2&nJJ1$FQ8+zReLp zM*K@GZt~m^`4dl1dSabU>XDC5(`@qINdg#SKbTadsj7?nqw*PGO`+oF=l@xkYq;Od zmn@MqF*35LdSe5gnJD|Wt1P;CtWM~{jbpyV#>l1Y)mlw*&%cKj$E|oH2^eYfOO-w@ z4qm=Ufb_&?c?anBXsxb_yuRm{e@Q9Rz1;J{1#i3e{l2(%T-={^tveG_+aPoyq_+Q= zkI#N$1xT-}bvJFi>_fna{eyjy} zRZvjKzJ8S7hMziY|9S=n2At!NAGZU98C{>%xvzH~iq|IcJOwtdt2?k5$u$J*Ob z?31o=D>^c{-P_M!L5Knu%gf9A*TrsgPv6Q#dYzfsTqkD8zY-~Vrnp zk#~tbwYSfVXuRZU6#0L)r@Cxz#ruf+XYly0{!B11ee1M5lHehvKCBq#BFHY;f&LFw=|e~AN!w^4DZ zXC7XOKEX3*uU!jFZX{illiU5TC_yOslxX3l-?g|ge89Q#Qf1OBZ*OAn!B*l9R9R9Vg@6J2_e*OS=(=^YwA3sw!1F@12gxr5Ar6G{gge1_J#35B<3u z29L8wDP*kxga5poBqKA28oL+U+ET3t4Zv_ie=ZyE3cj2s?fX;GOtSH za995RYpHDe?e`9+$9tT3`h2qmI9|;QYCIX;c@C*Uja+}tqfj0tp=8l=ciO~~t) ze{%au;hj%`sR*goy~bKO*`UH;qo?<=r0nydo4O@EZ>n|MdV1KGD)^|f&GGnvhmMXU zZJOKz#1O1DjZ?%mDUTnTlglZCuga*#XW1Nwc8RjASvP(_r+Pfdcj{;jyG&D5z=Dyd1!CvTwQTah55m~_dtLgi)UbO439v=Ca z1xZu)iCSm_M=%g!%%kZnKa&=A!aZM`}+J)IHH70w2= zbN%Rc)jv0L{`@)(4UG??4be~Cv`H$S+N1_26i74X#!1v^@msaJ)sftLyN>(+AMKra zJkp+h68`}t0tdrIe@`~UsdYw-Pjf8XW#yr1X!Ok;L#uC15Xd79sdB8$gg zzv9J16 z+j1==;}d2t^P#WkF#708e(fFQggdlufa)cXB2+ovAcyjboY=}WRI1vwn94Po4xS%> z(J*1x`>O20=l#Ge9_L)WT8&;GS&DhMKpjDV-0ay*v^sgCE{q-h0Sy)KO!mYMpRA~; zNO{uWfs*Q-kE))X-g53MMi|=A8rH(Kc`~>WLr^O7R#v<8(7&j+ot>Y}Mf`g2q%PcM z`V>(1WmMnPWCuV&3N>Iz{QQq1+^gXTEDLC@`e@B0k$dr;u4%wSS%i&nNL z=%1*A9p%fvx)AVNP(td>9k1M6&Z>Apc1o1xsK;nrQYE`Jwoz>Z8I>U?ou8bZCE zJDo{)gX5lwQexu)2nqT~fdv=YTVgpSAteP}HVN;+JX%;#$h4KIohJvNaIA0btP{ki z@%*w_0=UrWccdOND+uohUB)u#Y9lq%hA3$ufChmz{h4_lYOc1P;Cu^huA|DjjOUiq zQXODg6JYB0;9wk+=?klvBk}Ro$lAaWFYa#Yd`+BS*s#L3h|T<3E=sAFMn*=K?F}$J zRo09;8v*+Hl&@dEZap@(SCVXO*ij9_IKr23VDw#M#!0kom!xtON-ls~EDzSWB0SuD z{=r#CB-NdDQRt+xV1fOU#J7p7rRJqh#ihRj&*fU$ry(?_{a6b!^>IOohsw4?Mb3QtmylY`rdKmYx| z38>&j3b1)Ef@6WNQXckqm7yDd1~Pa=MgWWu6JnZQAf^fo(`}pwkxDE8z@FvR)PCbN z2ldr*i8_bp#O{&)O(ef4ghkV}JDyQpXt1e)1qTC&KE&%rQx~pE0t}F3OavWQm^pKC z)XKU3sLLW&kff`ZB%n$EH?dvtlTFBA_>t)S%u>px=MQibVmaT2_$5FaAl5uu8d)Oq zy}feqgo{BR#X^trIk*^cbltkTE(am$ZXl@b295mT$c3A3NWjG4AowEKo*%8M7%=yk znswz}T9T?|JlG%b7pG5`O`%LNCf^ZI-QKQ@Dz+m@Ndtlmvr?-t2afJLuwnvDiMoT} zE7?X*)SYAGBSB6ga=u~G!asd@my(>!Kq9`XuCA`FhA)TgQ7!!H1WfC3F*JlwQB@d& z=9KD&hUw7DVIzY26b0%Myc|h}kBQP*O9ken^H>NLQFCO5VZg1El9F<7^li`Cp%3p~ zx3gfg!@v9hey|CoN1y#_UutUVN#MqL?fkyJG#ncLV9KhkC$v^uM`z_IN-Q{k@LpFr zmn6i;r$L8m8yGw&4Mfq*J@l8in|A2um6vZB93EbWnw<>GG?~us?#p0D?Ez6JEkB7v zqrqO2>X$-SishXAMZd!?F+w}{>?j&sh;xJxT`BUassm|81UJ_lPy6V~Q zEgQERqi3H1^kCZ7Gcb^povnkXEJrmw;k_aTaeS<2k1JXETPmX!2|M=4XF9TKfNch$ z+?VFJmW>bcAnuVNlj8Asq)Xmu{l4GU83Bo;tuuI!(}oSLdB5E( zQb~!z;b0DeNGTfC#!*WuAc$)N$k?fyEf)t1(dkxw#f2phb{=1XrMn%Z_UWq(CAt}J zvi%JRB>zL$rkMo=4>^+2*bFGhp(0*HSna6lUbhmv;pWF-gKMbu?|E>p4ixQ0cefN` zfk!UeQ2!_kyfJ0^^cw7>K}@VKIzU6${P=h#E`*J5UYnd=1xu9WXhQ|C=uL~Vn%jk* z`huo6o1B~&NHomG{y?cflj>&XY3v|k&{B?Ey09gG{~;v$H8nLSsYMH73Ym5?wc^Ry zGiB7Qj^W_rw;p)^_#B0TrC5ivsz1v)=!bC=dA$6J5hZxW zB;EY*dKal8&agDuW0**Nv3XWe8H)RbV`CQ)gCQtwQcbEs_K4pnz1AWInl;^RZ4hK` ziAY=Z!%GdxCJHp4r>Cc%EE58n!_c-y4CP^Nuj@(VhHR@EnEU5ovJKm}K{3cADek28p zm|+w6@?NSs8&u}2KX~G-R=#98nifP_`wZgw2ypp6_G_T@={|+-0FyfeED$0~><7eoC3KcZGT+x*Ko|rUl1ywRWU`j@UxKbE#Unp# zL{7!=t5H6aTorm1IkPG+M)M9t2l<6eq&RE>Zy5tvB;4_Nt8)maB;Xm;ceJda3_+$hU_e&+et9^U*K{S&l=|qt+#WF=}OMfGQ>ET#EBm#4<9Nv zLtZ|_9nzcV!sr3+;_oL;1Ut;kHn@^C(EW270V6?wk9o=%=xfv$0SUSTSpg)zBhTwS z+fZKKx%Cct#Jj82KdayS(%%fe&34GdaK2-P96>L5r{w8BM{a*U&zH%)k+43eC?ain zP77Y*@`=L&ovGIMqEa*S61G{3@&s_3|NcdNq2gK-2K$!?|FT|03j_rPGbfA+lC?}H z{vh(0I39vEcH7%8$Y@U0YLbXIKX zmF!uJv&?+&(p1b}2x`ba{$9hJ*SJIyK4`-~MW25~WOBn(bXV^7q^p;SZ24OJj;D-a zt~v)J6a48W9Y1+Z3jX{sz>y50JxPoBJ1h-Pn}+psPU4UkiSTPw$N zl0iIVeB4NMrS7!)Cq1krk42&RzFZs%Pk;MC|HCcjAuB8uoDt8)a87xtuQHr$O&Oh&g?#$0!2G9sg*{OHBp zUEkG9NhQ^2R!gOw!SloN_V#vefm`yVuTS0cV59fURSR;|NIjKqT_b}}h}Yic8;7Y@ zly7;tXn|$_DaznuJ_j3AxYw(zjt*=*;f`=qhh7Y$ICbhV99r-D%d5^UsVOP8yX)qt zYlRlw+{Vr1li z@abKvRrj%6f(uQP-0;qxJuB$8dcn8sm~py7w1QYnP7c=zJjuX`OR68Md$Kfh%{rL) ztOm&8GMJ;}KQf;plfS{@f?{HlJ$nN0TcQXR^0{H3qtFxq?!5ebt0SMoeK*nV5xXW0FSuOhG)GyvJxau9){g4v=s@`{4wjvVbs9{?RfP6l8LfY(oK848 zI%?Sxv~>#mnv4vd^L(F@0XYv@WU(O$BN>}amG{B&cY$F>Mn>cSg09Pq-iJG;u>L!( zE7Ww{jy>%8cs*I%i`)Fi1>9rDetyWQ{8H*L^+~@L4;`QlJEeTBRU}T(j_KJ+x**u; zhQpO!>V*~*li%X~UcY8Ui)$8`J%W|P$jpofTTt%KoyI)lmb>ce0d8xP^6vBj0hoHI zE#zZScf=p5eyE2#7@3?L4!7qg>;jpkp^Al`vZczsh*z&dW;!zre|~xTwXIFICFb(V zSh&Q%#w=F#TAKt30|SHSat*$moZK~6S3&XJ>GQXeMEk8Pj-O`MTbume_u1)^y@LZ8 ztYV!C_n+Nry3)avmqmx1nV5L&;0`0T?B|vLx25j?Q=R<(+n3YWVap2%34K!Mu$Mi@ z#Ppn)=$bM`g-*DyFKT+jy);$uyAkituFQMf@we<{?Fb!i2A8I1jL)a(aG>Px!)hH= zyU3I9UC?W{U^MSaaY3A>yF#ntEb>tQyJ09(WT`&fx-Va#aoNDYfIK#_G`$}4;K_V)Iqq@=#{^Oh<(I@*hZ(0B6mNEkDNI?M|8-d~VOB@=O3RMB#tjG=V6 zd8esgzCs=K{JpwJd34{3RjztOLc)iV`EQpmPsSuY&yRA?{htnYoiUBwy@DPVVTs!s zvqjgtb1t+QaoV15`_&#(!JWKtn_Aq<rQ<(}cyDBCnko}Y4J`riK!ixxy^m4fclY)r zQ#-!WHR}KCr12xk0bS?zrX*TPQ_=89h`+x4L#hz{C-P#;@?cJWNVkb{hveM=ZU}NtQ%bi zt81jj@Be&V^7lXHm@ALYz2u`N-aj~?`1j(0hjjlZs~+5mP1N&dRxk49owcd|`UItK z8oL6+u~#o&zW<+dfG_;dwL$?pl%U74pnJv~1ew@|(kbvp%>3JV|&-GI(aXZ0&_FAcl?cukFO zm&GocvTXclqVxTF7N8IPm)hD~gL*=A-ZNsF<~U?Cxj|P6dL9ws3&2Bvy8R8o@#EL$ zda`mIXOv3~0dlbsdZ3z&nWLH(WBeHj+ARu=IR&UgS%oL%K6Kw8eZm_{MM*h8cPFFs z=X`&@dbukP^PQxSSY7Y4vf=dgY4TAcV`F|~=Vkh`md3_#{AzsB#Wv^|V^dS~Vb%2E zRcc~*_8eB&sMHSi#Z}m)d=^~<;^N{2Cr(J+xPeW{r4w>=xK+h!Jy2k7){%0oA)G;X zG(N2%l*SNxC<1M=wMvyoJ-v<&wzdK8DO`S^>^{r3zBJ5G`;53YQN(4wk_rm+!QNJ? z&(R@LPzJZw-Nj_W=|f9O1l2iWPFZcNtUT(sENZbh5N+1rte-OCjlWxLtsQrZ*ESuNT&3v77-k$0^=jJd=E?PyyInzg`q?1{h#d~!;Z++dd%x8YC`-4AV zjIrWj@7kwCRF*C0&z~owpm_S?1v!AKftbd+y4T(ZyM1LYT+lnLS_};hkp_~McA<>H zdhoN8U%#acZ0h!0Ls_j#&$CXmT{Qs25Xe$Cg>n+6gSN}Qu0(C4He(jsv3H;j&#lxhuv>}|@ zpI_TgG@JE(I=Aj#k@c?3apn}g+c?>ir%%saxwPi3+1fN$ExN7&8biRF<09rPRMek8f45=V17UKj$Lc&j0X#QAnmQwTug2&qb zc_NB9lAKYg#UHQx;Z1j>;>U12Fwm@oHT^CA3O)ct=egK!oW2q}Lnze!w{gZ6#C&n^ zPu4X>u|!5jJ^~b>-}gzMfQTr+h11mLfm?s=moE|V@qs`9sJY6Qv0w6ASrk_aY@rSh z_m<3hKAvS)%bsta8Yi}5XJxGpJk8Sn@xc|dLXDic%a=afMn$}QY0;uxaC@jrbJENi zDoXJf%N@@A!?Drn)jaR^7loL{#*Df=z$fR##0D2VW@cvI=~j7X&h72&)U>s={XA&t zcpDTmx8ZI%TuFz6cLKp&;`_^z-;yO5%3PLY0F7A9Y1l}+JxqYb=bux#OE~PcMMv*3 z&r`M(9j(2{ul?Ea_+`zag4@e;-=J7ydSh>7cSst$wL?!9G{kYG64Un5yvT^$dT zkxJ8m-XU#1Tq%Zdy0ceIMqqKuz|LJ+X=I2!gR5lC_p``mq{fimA>n_=sO#R>Rq-IL>|ZKqo4_V?G?rUwcyvEP4> zi$bvI!R|(`$#-hUr6KLfuFV@aZXnCApnwm4J(IBTfOVZS>^&aak!$7fGu;KtFceN(9`R3`rq4m;(>Ha9(7OC^1p2CqE6-k>H)%!Avqj~kr_N`oG7cjtas#&>SLf4l_cc&PGMw`OwY8%-k@S6FvGD$SPF>dZ0e$xxK7k0A(Meb~XOH z$@+Z%X~V{_`gcmH7j8|JTvE$^4e)MxW1~=0+-X+DjE@?jBfJ;SGbwXH5qZyQOuqbr z?Vj!USF*CvHZwkhsn$g2{$tmx!{|gvX=sQlbhu=@2%YA7h+&glvTKztIVqPS~`MgvUMtEyKQjKF@2_5(XN)# zdAmKWD|>=o^bD-C8@9He@S_5`n3%9L?j*}pxNnSy-H=LShmvrAWmBoTp2de#0d5^X zf6=#jpvN-m>SvUdl||_~&7s2>Pg-M2c!Ztj1EMdfDbT#frbx80`HTG#aMlxB=rMN_ z?XxpM6?f~cvdt0UW8a8~2;Tg?y}eYE?=KN42#&?p{r-Nf*VdrgqEL8PSVMwMC7U)Y zzKUaI1;w9*=voMb0AH1yLGS0~&&~@$1qB6gG)hWJ11P)3CRDgsA5^oxEdQ((gQEeO zHfw)x27Vr!@tb~uOr`=I;(IvR*wZh-)F96@!#xE-;-G)cMtK@};HG&beuoJC{5 zg94G6nK_Ytuguv>bay({bu!+x+(PP;a>j<${?}PAYc61JU#s54?>c>e*KYLQ(DLC z>p10yyK|lqNda=$o)om13eL{_KxeRibGFj4KA>$+o;+a`7pIS6zRm7LH)oW8czD=u z#z(Q}u(dc?a&)+-l%YtMJ0^UQgX4r@LrBdlAqU##11OBOW_-vso=UrvkUxdix7mclXb=rO95K58$NJ($n1p@9(@48yc+gYobWvP`1r*<@R)HxG2JI1qtI+>d`V-nzBdG zaTuZiD7a_`*JG!45F{#2buEm-gB^k2?mF@a9}_zF{L?4y5C#c)n~IH?d!;r*<$<6u zzPXbuPJc^{U#+be^LLMfAaPbmc(=D%k6X|yg!%SM#`EWK;55rS(Lwdm{$n^eILPx` zpXg)3?zJdH06*+Wt-zTgXdtC8 z$}GCy_vINAseV-d`AB8LVal^5@ITBx(8zJ58VeCC=_OhX!^NJ-M=`&FFVIWG#J%J* ze+(4syr`(wBCC|t7CC6dyb6knG2=ZS840$bokcu<{9rkbT0x8kv{lP&`&2#)*cY4FNM=^`tkZFI4 zbZ|suUGlel>3 zQe=Wk|Nj05W`#xABqKl4Z;A|!l|*qW7g<>Fv9PedwzkS_%ywUt zsMN`kg+}oSfDp*Y%By2k8;JS|EOmRMSGVJ{)5CDODUki&X%=%L+Dr4{kIqhnZE;m@ zV}l$|Wt=P}Wl;;F!3%+5&(qYQ4U1Lp-m&@@$9j-20|&8P9hXN$$r-EfCRbp$acOJ< zU(g>acYCK@R>Zn@sRh2~2S6eyMg+Q4ODxxxSqEW&Ph~o26~9C#*c*a?6>BG2Vy%uA zfQ$XKnxH>sNq0a)NjbS*#2j@TN_mPg^oY)kJB_BvUe6>Bw zEm_cgowdk%kbOWr`1GFV&8Pp_GV*qg!gLnB*;acwASc<&+6Q1#eOjJ_<_%!_D_yNQ z8ynjh3Gec88+@e4+LCjZeuK3#xJrtPrIA(iZK9rKrQ4#A6!*=y2`F*Sjh!=&Aj*Ma zifGIub92G?44$OW$0VWsDuh@dT)0NBdI4Q*)nYwVetcx{aze@;?D+N>M|!I$r`0Je z9K60TD=#mVmHG6`#n$&!ok5T3#rbKLVA7TpdW?v&+K4xBQ;6cb^cJKjpb|=laUs@&`$Z0d466euIj^@a4-F+qKEt$U+4#05FcA{djKzH$@jVwY8Bz_i^6Y-CQ67 zbprr)e<2$P_rx^(QVI$|R;ADoKD#W1txdI^hXbYaPfShK>T&CVO_SoOD2-n4x_9S| zT8<7B8X+K3Hw)M}IZr}$tp(VdXbswfjD`j^kpA{cFOP5?k5*5`#e&T8wx&q_1u%Nt z+}wg5-h+l5@#2M%8j5Yg!2(1QP~-J`X|mEDhIa)XV=TQDMt`mPP(TM-Ih1{{4aBSC zcns%zxU%rM1q7(zOzWU#C>2`VN87Wxqa5t*@7}%Z3*6iutukbPXXDES7M3v}Lk))q zdn@qupk1M>;0z#k7c}jQ?g>EV5J7=Nd>aMrDrSA)l1(W_%-8ZXx{m(Zdjb$W%b|jd z9UU$mal0&H2zx6)D}DU!$#0`9a-AZcT0@y`Sob=?A4x* zs`{P1J;UAgnKOK55%2csz!)pC8Rnc75B@RZh;T|EqTk7Cq@+%QNg8B7^W)+P263c{ zBm4d`1T{4^_Oh4m0l5Z~$qy*USGx2Yh^yzlzapzNb&QWXls=gu3tH~iuV1S{ z%M*2{WlHflmV9_Y`azjn_y2Kr)Ns~NR<%_pcyDfedT?F&q z5#PB0FvK4?X~!lFHTCR@13eX$KXm569wOHIolV?-xWWC%-TSt{Dd16DV!jnOvRQeH z`81FeX8BDhi(}DhI%HNpv0S<_7q$TBFN0zBB2J-}LOIEX=ih9zE7i9#oFN?O_Vv_` zk_xW;{tzN6PPyj?op&UpRa9QE?!CX45oUFg_fCS412gDG*gPi1&sRNz|1JseOhu(~ zdJUm~JZ}|XjR6g7MB-?NL^VfeVY3qWZAZT89Wv$nh-#!>YJX8RTZ?VCfE(b*DS#vN zDQO*5=|Xm+xH4h1fgl%^6ej!AyMImXtR{~IeGP1(kzlUMi1|3M*udLXk#1J1HV8c| zJcWw|&-ZyK-#jQ$AcOhpdhgU{9UulWb*M}p2A;Mna9g|S_H)IX=QnmJiT*H;ZFWKB z=vS|3adB}OMMP-2Kd5c>*@67AShgfy4uCsO)GeWPvCp zxfN#gRs78YOr8ZYeskQ>IA5Kk#A}Zq%;AM@2dPtJO;4+`Bi^g)Ixug}wFc!YzTtIU z*6Y{=L=gGv)%?o5^o*nMtvK$QgQKC7?_D;KW5-s}*T)5i4gPSFU*5(; z|KbdhN(T4ob4Er+uc6eYEOY|vzjCE>tUuTTF+f4AdnMsBG~ord_RUoch>2e$j`scP z>ZD?eV&^=|{_%kVrQY_=b-YtLul3ncevvf=Has_!k*U@E5aC3{nB(@abP*9zjvqTd zKu#WbRUpT?b68Vt$w+G(4`U(>mGJ{-7-fYns{dK*pEz^~KI8K&0swAwi2e(dq{-fs ziOB|RB^Bu)wVFV&-Cl%nGBeA>4DroLwc1o26m_ECrlm1*bKfoMH9Cfis|PzLZDsK$M5(5ruBKDe4YUKmzQfv#-M=Px}#z5 zH^qnm)dFr`3r_fASAbq=Tk(f~FrP|&XR2>F*ud}{0=@SDdtgAY zEy#$asib60VF*5Ek;UTD{!9+?V)FD};SY<#fY8v5pvY&)WdWzA)7WZaNv;D0vVv&~ z!A~G&3$Js$7D%)){adP*z^qy6Dns-O5Xwjy7{Y;A1QzMq6oR3A;w&#NVyQz4s^|fRNMu|bD+1R0 zA&jCTozdCvMN!+AYsllWsFk66b&>;s4ze^}4r&90^@Bvi+dIiRi|zmj*56|QF(HCv zL&({ClMCiHqQhbTY;-08Al9Dn$lj^tBwc7+TU(177iQ3#W!Fn zoyvG02l5%*gXM`>-I&rafg~H*KMxMTNoG*r5_XKidQNnQnUsM+O0SruxL!3Xg!=0H zZ@qd8Llrb2Uu}HGfWhzuq?tfCPRy>Cjo2{7AG!u*he<&0>TYks@yEU(GE+k#1X`vX zxCATz6ks~u3m^JGS$PCOqS3FB=Mg*lIXQfZ3Susn=ptf}e@ie*;Qf5t+M3gSYmpcQKEZj7BFjKHL<$h2bjqmoQqLXU_i8y|K%i->2Q`1dgK-kv z0=-}bc)ak{`?otVfXo8|1Fr)Z1+#B!`kmMYz@F6I4C4w1WJDcl%!`+%*H|mhHT9ka>`eO z1~tX7v9a&w=!p4y&;h=2LlkPbDqA)e!1Z?P(@JS?-x^FbM?;_@MRG6his?z{L3(@n zsvo2Q2t;T=K1Onv0Q4t?BISw43c>Tc7D{oWK~bY|f=|D10Yo75U|tGf}}(LoS|0 z@m0in37+5eA7esuKq0}WWb4>d)yUDiejO_>FYhjhaHod%cIR?H;10JBH|C?}0iz6w z5nZh81+qstd{_AeM1c@_2ADGXGS`AWpOWdUJfGLS}D?l(=o?^+(K<9-~9>*ZWg zVPR@>bMuo^oWaGqEXGO}*4O&`<$w9+0at&OXu$2#@O0_}CJ-eWu)o`eTrEhp=Rl#~ z6s1RjVhern#aAyVfBS!BmNxbmn4ey(I`YQ&935P&WFf!?D0PcD>Rx}a z@)sv%>hwvx7m1+GA9PD`sux=)&dMIe$dKY*xNw0H;X;;3)CC?yZgx(NP2eLcxIU2L zsev&(0(T|W<0JT#U@0;HUGdk+@rNY>kBZxU-3*)(5iu_G<6}f%W@-F%PoF5V0NaLB zw=(40w_CXQ__3c`AQAhwOhLaK|sO1ba`v@wWvvAB7wTRPP|fD&*neIm2s2;9K_eP5#1A znM;naj69;kY>Z!ak8a18lmy{3u~_j@H8`Osh<=#cM;(Ug3r)qbJ}iitJ>_>p{u}$%eRZ z%yQDLrN`>r01gQxWbwzQg&uzbkA;k=qT0i!A2p9WINABCsq%Ma$08@+pnRcnkD_g= z>c2cCYQglveIcWyG=T~n0PcqYXn*PAhU$^>Yq5s9LtZ5hmaB}j$A>`dgFeawo{@j} z0myU)K;r^JLL7w!$Re*G*#alHD;y8=wq65taQgDtBpS&Z#WkNKxyK-SM=I*A$=!2H`#onUkWm&@3 z7(u0Q21peFO%SR`#FQ3lWG$SPabcYhW>d^8#WIG-#i%6FIB!&w(H2e4KdA}lHYxK$ z4T8saCs#*v>hi=54WUTsf5C;)hmTlukf6}dRaf}<@2JFJx!dXL!QsB(>>RMGI%n7| zJ0a`V4!9URy$-ZWhy7fUv9UnHcjqIN(7@Z#mO-n|NTU9dSK6D5ghakA{X22X!>(N? zo1dz-e*rKgG+%h8#oU}T=<|-J+LUqgBX@t z2}Ahv`Sa)8&hzSE2L}(lP3gya4H7%|nG=154`a0xe9P9_AK){heE(=OkZT;cZ8$2I zAi5%S_QuO-!Qu4&^*!q|UMFiHc5IU0Z=Lo@CiObBP<`Hbh5b~GOy!GbLS@PfEebWZ z!8-l)seO?_Fi{a702QRk`VLYTAnOA0%Eynf(Gp)ie>u4<*?;Wy{U4ROwg=&5=ocG8 z_4V}-vS?YXs8;q;?3o+b4SBELo0Ng>f=EIcMjAby3AeQ{6Oi}Cyx;?ewkX7oXC$?c zrxo+1;?j`<4^Evhc^J!D|}QG|@hU!gi)~ zKcKc0YiSBOH7rl>!*$cd7ySyvOEz?gZxmv(4;f2R;$V385h$C%pqA$8w)x zc>nDe4|(Gkhh|UXl9Q9a5DCl{N%aLtfDb|x6%ECk6nu$rxmXv@^0U#9O;{(DO zIQ+%yLe4zu>gpmKem&C4I)XG#5ZbcqD4+IQHh_FoVUhNx-*YRztXIc_7-26tIu*9F z;ZfU0w@l4Y>UzoD2DvCoB9o2q&Cg5^Rw ze2-XUJ|XdqHJ`*5;yZcv*LFj+L|4o^MH6@vD8Cs-Pl6DpWd84=%BMK^?K^< zcRF4;s$$(I;i;%et;kA^vx*H41v$Hv%iERjd%1D41obBm1setm}K$VaJri93y zfto7(S+B1bS{#jRW|iHmbltPkWnwbT1u|1V;5T*aPSUHT!^;Y(9gKp4>OXYk9)=G` zoRb`xn({}K7*LCgG%Jkd1rvR5IGn>1pbLR^_{O~REhKBik*NYu^T(jkA)yDbV(m8P zAHXw{?_riTe|;Tt$*&_82BdR|0w~l1QdkoD!Rt+0ZF_=5sKo zt6pFhS$kByu~)>9N0gUqgBf&i25}ipqlv^p<(vGH!enDOq5+ z7`SV#C$Yh6l2cIl0%%a|Y|A<5LEw9=Zu?Dw&Ykbkumo2FR$Fduee%ZUQu}n-6o;4? z9aOw+VE!o7(N3F>EvQF13_RwLS&fa&D8b)L|EyT|_BUEUVypM-n>1 zB_QDIRU}wIhFi1v(CyTzQ;6~}B`xhH93zQ){Tgfx+Gd>?I8h{aDkO9kj#~pcjOBrc zIgnqz@gk(&<_J4|iV_zqLBOT~dYY6_HjCNoN6E>_np2u54YXM7@BStT6~7$Zc%|yC zA7wtlVY9@LnNv_8L_~5@QpQ=kpzy=2uMm(#6hyuHAc~YpQXE;V(;XEdh!iI%OxTwo zbEFY}iy4XBWkx;=io6e^$e!NV+87eFhY>?agxh3uueI1Iqg0qU)a`KqXv zecI;rzaP0H`KRJrhgvV7`au|xmfqYfR~^|}Wiwi!Z3e=l^|+vG4!+&00|_-BK~BXc zHDGVi=S_5!>M-|0E|AyRKUb&8`X2}ts1TWy6ow4nfN}uI?V!R&E(qZRjX(lo+DWbT z50Dth4N}~1Nn$h!{8nFpk9JEPEZFV_O-tp03QCVka+O-fUsPLt3o1z}nU0%w;Dczf;0xyc4ww&w_c=f^c(34|RM z@=}KauAmY>+%`m3B$5wA$~qWjdL1d!c@#dzpaH{&z@Oq=d!?EF_H7D)J;bzSF%bT4 zkc;dvipfp>up}Fs)PFs_TxZwV?v)B~sdH!!9u~T;7$CtJ(8clxXT4_9W5>hpFD~eg zES9zcp@Rbh(>@6xyABL0QL;{RN_7a9B@#M#(8#tG7yn_e6@mm$-UR@YPlfKMb7fZm z@^~O=NJA_^$LGKaSUe>n@1~@tPK23^Awdz~Az-Az1BGfKen(nr{QCa!n<{nSet}%# zT51S!so~A+A(+OvMv9BXP*%sAQYwmWpP(2#bW(*42;glgx_BfoVDTan?gvw6us7ud z9u6|Q1U`;DUCUdup8~+))@QqkK;H+Yj`Vk&U*S7vY>@R4wym%Wl))7Qr^C;wF1@|U z*ACI}>JP2O=gU`w?VkKCJ(`fJnz)T~1^DVVm@qr56UvQwZXm7aT6D96rbGw}{H3-{ zG9v*rflAAMg|V*-x~9LDK1^=hP>=H{eleKdVFo=UqeQb~$Td;$#-G-z+;fMYNg(r#mkjRtEwo88x-WB>(R~ zmd=$Q?UCpz-?>r}Kygsak)EdC1(}8gUAwqSoE10NqH3B_P0moPv*id zcnd-;aL)!*C!8B(Q({V0nmWZv)wZ zxjXlIIZ0Wlo{JNTH*eO0zG37h5`aeyf{1(lj`K4CZI;%*r4yM+c)?F72(mV)A!J@% zGtf8{FtZ2SW8rT)%(MpJ(E*NG2~x^z#T+`ZxWsa5w-;GyLM(PLI?lSoj1L9^^VDA1 zn7Vd4jh^_s-NDOJ0IPXW4Ui`YaKZfT)q30`Faab9&5Yl&Pj4$Exvbco2-*tF;AuLS z3VQ7ICSpLkhc@pDTMfkHk@d|*Zq08c?i=str_c|E>=OlV{^feCddh{+ug-y+3Jl(Q zA!Ga95S@s#9wbqj()Sr`;!M88qpMUG$2Zs35Ct|8LLcCGmX$N8u{x<_2xzfn|G5K+ zz?k2g&>hUpE(`;EC^OyvDCP~-fBOWns_O!%qGY9A8cn(IY;XF-R_5TnKmOrK-n zk#yUeuG@eZ2Au}FL-VQ5QdT>aoYeIlcT16c;&1^Etsi42p~^!7;XKR%TomIZ>!|pp z`YC4Qdlf1k&VQTMohx&v;kOI`%TW(<2_>F8c^950D`rT7Z*FN7;diOnr~WIL8{kMU ze?1>Q0@-TLrN&G{3*4^v_iy&BEfCt2C~Cd=r;2s&!o*cOfF^(IBMqV|5XbZZi%xfc zpn`UftE;OE($UR`O->klXbQVet!8r+6fFYrb6|Jm#=2po1kJ>CEuu@Kr07`qt zz?U|KFvK}@nk7e~Ne_lj-jH(4(F6N84~jZ6APJ~Q76dIa8k%6J;DQy&F!vXG=AaC$ zPI!zT)pM~yoH%u<(xB<;ZZThl$CeB%d|MDr5g&yurXi&(UQs?8F^3^^4uLg@U5p?@ zbpYg%lms8l+kIKc&(BwaBrM8h7>kyi{0SnKgHi^O3O=M1!yKH)gbF7V8gLVZ6I&;G zn@VTr3UYWR{dr2(M=xf0pu{54a9ogu02twc`pwxa9_-=xJr%aaw%vC4^JE*BuWpGY z|6wB#v{pDeJm@I4(S>swfv9{V$a6?P29Nt|=7A_o+(OJA2T^1pGe0`s6opU$gc0U& z9DY23=f~0Lw6&SjR|<0?hX+eOWqkgrSH3al%Wf^P*=w^bD*usW1$wkn z37|j9!r6s>sEz94h$WGc&PrGFA+UISR1ys16+Rva7uIoHHa?)X*0i3S(crvTRvsp1Pox z087a-w#+O+bYn~YBmY&%LrOW9ddrmjfFT`m968RY55@CfBA3|y#D>X0WZ)FpT!^s( z!7`g-Z*wtU0h=LMt+;q6X#+rT?vDu`BpS=4MKu~RzIfZBG=VUje69Vbu-V^u0ZVV{6#VH zzgd9Hd5S_d7_5Wzt}B>?xpreRN)jxg%T?t)_ z<^^{!=l5$_SU*g_eAnr*=NTARaJI2Hoe4=~Wl^{T(5w7=3J*V(!&L1EOz^-s@hE8W zMd&+2-x?e7?dAYg9455Ww)c7nO5h94`~JO}O?HU^*Z(%u9PBjK zKiVHG<3|uRfMN!eqh!!m6w=aD3WW0_4XAP=0wJ;*Y!`pfQZD7EljJy~{}0 zae1WXeR6v@&CtQzJH&a0aQWA!rbrP&vPdSx*JZnK0T)cVdMIjPkSKl)_In(!F(Ic; zc>tj6pOF5xmwk~~T)x*!26zT^n&qvnMv$Dw!z87~H+~JfdTdl4?mk3av#?;-fWd0u zr6?4Th-Z*I0o_5iD8v|m6?`o=%~biD%aKC72b6&`V(ta3dq1wFepU03cdM*V`={sM z&sD5gZoZU*DiQI04MyPhWP*+5oa-Ek9SEc_$a9m|CN{3vC;c0g^dlM(=lN=QLYSdg z&{(rH3dsfTynHdGdFwBVMP_E_SSuiBgmST=gQ2oESC~Qix!{nJ0Q!Z5kIwVRX9h!u z(Y#yLk6c)6C=Ii(KwR3d=51TC5+r58PPkUD^Ij?X$^Se z!PS~w`E{UUX)RWuOOle4k8cL(5&h-XnQg`D|5_{xK=U3CCc|3`KEX`CX4~tRZ074W z=1>ni(&SHbsDHYK#F%x0NjONcAPGi_Olv)P_N zIdtSIltQh=|6b1QJxcDzp*`qQ2NvjO?8X=TAv8&z+M9I zA;#bR1dfKC)TT{&o%9m`BV?=<7_5W42hk#>uR_9rWcJzu=U+^Jj8TaPvbEEl8Q}{H zj23U!JF1Kyl-Qn2g4lnlAt{*~1w^*$k%>gBfr1+7PZMEGZ0X^Lms+AX=q<_gTQ|5cxR*Y_PA1P~coXfzo%OpPdO}Jl!8ynl(9t@`nyXmngV)E5+i` zWB?Isk=PR0q^V#6owUh#ga@z0$eVDE#!R8_|6RH{s=w#c3pqfXsE2G=0DM@UtmT|W z79}kCZ0@p4qHcS=QKfVn(BEF`*FFP{z}b}so;g@}4;;$A(6km``uC%t2*u_EQ&xi zphwTmsGo#+duWS~r_U2_?6_Yzh<@^>LsEJ$CpyDkM3NNOvOn(_AjZ$NXmveE2;YTe zf&_*BA#SIluan{;VH=n~sE3Txc-R=v@r={9jgI(|DgIyS>Qf5#-USw1_)MC z$OP$iQqr?$*=FS=@7xA`i^aYSxf-M}C_xT@u($h~9}E__Nm~OE1djQq=%(k|+H)vF zvh81qIv3Y6D8Qp|FB?GP6pd4K*Uj(><&g-fNvGnP%xnrGMq%@NTl19f zEtVl3dFhxlM%59YROApmX&=67aLYR=P9N$i z29dP6nfbvWi+I3mIxD;yn|Qr)BwN%Er#+^j3fso5lnRt(wnnREa+Y<$0Q+%V#|So z<1j{DHfT@80plI%lRBRr*&z6UhcX)~7Yd^n3xcQpQLFS6v~P|rS7bC31WCnLf{!5V zLy6E_-?Dl$P^dB9VEDGVJotMjhOn9KpEDAGvXlPt-j@=|@2NgF*T8tw2jL4wBC>1I zNJa~C?^jUBtAmOrfb=|;No8|ErxX*yTspkk2M1auR2vu#*9Q{>f$&jTj7;_?K|0bx zgcU>(gu4+X64coxzFRDKos=8g?{bLf%H6#A!S(=fA83C46^f8;`ge{-$a5ZMWg*AZ zpvqTd-iZfP%f6CKN=gxF1EY(qBPpC(CB885E5{!i04WoI&6@q`l?OxtQJREEC`H`s z^FkZ78R?lb>P%a}tjW%tF)N;b<4^wuHX4#5Mc~z&u|x?UdakN{UU-X*nICS=v~O^CrF`UyM)B1r}i zp@)Q5%;kIT?!wFx93ImxGfH90i%{MOqy!RM-X&owLBsMq^HyU`p(qWrIMJ zLd2DUEOAmYA*i8j&0vLb8#bIkDspIODAJ`Op_;@{HVJEI>(Fd2|zV*`_RA z^@!3ERaA+kqEpgOc?Ro3+c5){63+*P8lghLl_20!js9r!!a{`~%`tw)EvzjYGmOM! z5TTICOo$9$*12@?;xWiqob*|O3xxoLfTrFJsc~X<9GC11$1YvIEDe+%Q5YbqS=HUB zrlRs1)GS2Sl$D)>K>QOV>jUwElC2>RF=y?YZ@-)1U}I|xKFrSi;G{-&SZr%_!FVM7 z9GBb0WU%$u~izy%6J}Mqr!J1@hS99Cn zhza=Jhet=5NR`)DXJNEFTYUx}s$V(U8Hug${n_0IObi+f#W}O-$t4!({tc$F? zI=2N`X4dh_i*u`8qnUjI6DrXjG(@jE_YSM#y}bAa=zn*bx;oA3ao$8lQ=Q|-&)6gb zVkld<9p3%JjPLG;ZfA5tYt-u6l}hc~QCScb*74pkhVj1>pr%=Gx`OvJFrcAT=KLMw zJkd;nLeh>|^f}6z-~~*nCRgsS-dv-%&fd&S-+cBA4|xp(WJ^`ix8w5QtqjwSpG_8k zhJOgl`qKXO4Z#+PzhXwz`jk;~;`8U&S*qxdIT~3#)|+n^W*vql4c*YiXL0Vj(T7S* zRktsQXY8)m_UkGs>w9>_(x}PEOViok(QSxWJjcH`tB@?ZGL%1mPg|P~>Q+Qt96^@q zT;x^~xz~@m4G8k_O%=^Y2^_*4z@4HzkGZxefn6zs(K|_6&L9o~fc~-XrlLX)oF^RY zgxBxheZ|m2;u-8V2>A_Ll)ZpKCr6kMhgUVdd;gxdxUsPjCNOD1c~PyxfJur_d5HI+ zsv*r51i%iG9p2aO-=~0S8*}fE5U*Xr+`Y35?qCej8wL3owBr^^T3ya&LixnoVxKtZE<98jWx6c_RHhozS zn1O41u|H+>qpvUE^Jn1%iHy8FUI?}p^<@lb5TB4e^fR|=f4@J7wmo!BzvngJQc8BM zOf@I5a1Z}QGWTJ<)zZ|sSu(1vV(XR{Z$%EgaN%UN!;+ZIRwlSzs->6r#uq)>&|b4J zev&^wbhtL&Bpw+jh##TFJVh`9Lj@rSWCJt=LUnBE;PVQyYUCAPK&FuvSvq(xl^evd zMi4A>Vf8>MsLK>D>{*;87|AO)cD1OzC%8BIz>#>GeMc^u8V{^3hSmn+K)G?D>(hb=g?W*NNvxQZz?h$vwQ9V69_P7z}eQB}MR99dG zxYLY}KU_So*LsO6w8FWQOZg^DtO4j~0Q>}@Tr1AQd9fjw1fRsv7HU|ntt@VukJbeu z@9*n?E}qa^+&yVoRxxi;I4~)XJ51>vtY1u0OLxviz0hNA%IJf3y7KjOWuX@ppQ+VL zPpKEkh2r3M1q7f>zGEl3S)BRAkNuA0(Sn;VJ0mx?x66=C;l+@w`9k7C_5Cpe&yp!g zt@ou*8u!FOs5!W+GibKdJWbn`-5eTnM3bz??*Y|nNOV9 zbehL716~Ce;)biB)Z3|VWCU&3{FF?Q!hF=(rEE=C?FBEMZwKVa%sPpWE_)Zt4|<37CWhWj({}7Tr=~tlzL+@Vi|LGwge`G_n89GJC@05$!fTZ1H!eCw zH3cssr~y;*u7*Ys0Q)yLsoZ2j$3^#g=`~Zm@=XeP2Ta2?a2y%J7RMfGx8amIR#N<>|0v?|5eu2k+eq=B*2Aue3FqgCb@ZXrKX! zl#*03Wfw|CgiwZz^+9EfO3555$xt%0?aGjfln{F(GLIocNauRe=Y0GA);jC_b^bg4 z*p{`nz2EnFpW(i*`?{`MRNhM4bo3nLVl47DvsY_oJ11q~YQ}2|r@e80o&b@9Xt-FG z2#kSMf+9?iFlR3_am=at;iq*QXGA$CTZDJ=YMeg33LJ|=hYw$-(|4wN6yCothGSci(pwf#LS>8tK`e{I z{_u=_iQZXSp^{7B=Lev@=2J z`PF&(FSnlDDl>7T)Ouw5@TE!k&=EhqY=mrwH1obt`+Wwipg1weJhv1C#m<_GkUb-l z5_!{K#wcuSYvbVNwyvRp3URJ!TB#x;>~s`EK-4;dF;;bu?R?kAqkMeACE`JfR{$g_ z+?s@z!wDGkAe2LQ8Gs$$nMt$NcsEHgj8rf;B3w5KefU5x+Z9DU|Mgu@-~O4W)6x<@ zOH9TEvDn~M<*64*j0%IH@7+xZm10x++oPPStLaVC4omDiXucB@BH4Bc>(0EFPiZa4 z85k*N^ngxLyk926T`2e2GhQfRm$$!<4nin(kI~cJjbqd%A z+GL!D%eTa8Cmu2~;->ag5K9tL5=U+7nxEgUW5ZRT(C_1M{3ztQ75K#v)RUz zUV~o)L{2f=JA3*p|9vWwCcM6%l04U0HRSTczxD<2>HJY8#f*upE(wvb#&8%x@f&3I zFDljQN;3tb4l4p3zbvot#_svXivj~IBo7b)5ch77e-}bU<7-q}Xy3E-=dsQtm1c}cD01~X{ zPZsZg3cUkwHN&-O$H0cR6w4>Ct}GL9O8A!E zn&|AAT+m4K{jH2#xjuz;b?oaLuFoIghUW*0Ycm8`s2Zj+YSS|&YHQ4+H<=Ax^4+37 zb?#^m?_K%%Yb98=JC44|S}vxoSi!O~_H_YAQ7ciNLv~V`k@VG14ugq&!RpMGhUo(| zw~$`@NzHo|gZuM0edycf9{BB(B0UtN2ggmgGmz2a^^IWA4YZT0otnJ`$bEf9frnd3 zJ+<~Lf;ahenKDJMiaJZ#wX0v|hd4Imwo5rDR3cJ{nPj`WY}2y+CF=$)n$1pbTTm&o z4mali=f-exAs>JWk#rd%vhuEud+nn??N!8w+^0BHPC#AUXZfZvxzU=X0q3{G*~L+F zHPt?C45aXu0rPS0>}^%ccrZEI#V}@npha(f$yKI4Nf|iT(X#&EH)304q&V44@;egV z66$9JsTFnorji$wlrmfIN#&QgAkm#FmuoCm4fqdKeTW_9%Jt6n7){+Ie4L5o87>&B zx-6}6;njU6t*`qyXY_@(w*0c3#rk?I)Oyqfz{c<<#c)LS854$j@d5Eh)jg8r zI!-P7m7}UUcw3hqin7~fEIg7JQhK95+P3?1draGlmIPLZ=?~@FgW`0opgO6l3*6H+ zKP>zE6?f*?{n7HST))_JC7zM-IgL6&oAk%((p4rfzJ>7?ObWYuFxSj41 z+14+tTtIWSmdI9Ea43b@KVzDD-Oru^jRk*328dUmoEVUHYbHE$0bYNNB-Wx^x*^|su_#h{twL)>{Hv2zv-x;U{ zCDraYzH0SSud0#pMzH3srl zNy(n1pvIFnt5U_yhCr`QB}PW~GPcOepTy>Ce(u~khe=0xG&_ASQOiPvLAdou!Yurj zuCo~t?Q`JcOkZ@PUaHzPNgvGV4I6lp^iv&rGSc3ylXI+?6}l-);jgW1gOy8Ha-WQd zNME{og7yirc?SjAjLM;+{qdvrl6gL7vOM&Y4ZT6QrcelO4c-vg7xh!3*pecrCilJD z7x53b)pi3V2Vf%vsGOVX)yLGfHxrGC$Z437%l-~Ua}qOh+$sdOUsy}%(m>bvP+(I{ zPu+6-C)LbVs-(qn^N zF%T?9PH-a#M*$)AnURcuhw_FE)9Vmz!*;B}GABKISF+x&hgB+YvvqKW0jy%^C>?b1#Rs#pqFW4~j>b|zLq&+wvP~A5Z7^I}s$q8PVKi=Q# zXl>JhBcuVSUQV0j^5c5+qYqJ>SdU` zr_$!ijf<<_S`2qUcLw2J>uYfvb-`a{Ntf3aq-;3VX@CFB(2QDES&8E-y?F#D5 zp-_Z(ksbk8<+pfgJEmPi_!wc6O|O8fjQMdn3V);ewK3M!fDYMnO28cGZqHNK>0ijrUi^E zoWQEsiAe-5bD;9k)PLIV9MkOkI;UJF$Fp(tMPGkP>qtDxas*l_?vOEQdf)chb(D9u zkLKAkkEM}oL51nqIhw_$9)P{3XWJ0%LRJ{1exv%n3xO;;m zB&_h7eM?jQSm*3X3t=4nbB=&-cn9@lh;xTKuw`Pqvvx5xjjI-38nA~A5JXl%*V5@oi`KRe%0CC(%Ib9 z*tVKqBS|pWg;)aca~Bvbi0p6A-*a1I78rujokz}}m(`Kv2Q{ob`es3IRBx5r7|UFN ziRL@Tf`|}I-MF~9eY75K68Mtou9aDz(0wzx_fkP)1mn3!T>5}g&IBJX@5u_Qx-|!< zoQE8uw_of&b^Ew)6Hiq4qU+a{o$cyS*M2gZ=m+8ym}|ChR^;R74`al|#qlg!^bcU( zxaZG5F^SO$`0p!VSEZ|~+dc|)zSq^O;t+Io-=P9MhMP1fo@cEU;G9Cv>`yf{#GA3* z0r%i9qOiEhb##GZP09!@Vq3m|53}t{Ed=D0bYfUuk(E#N2|gtC^yU z7yAInp3sa273;(2&*sA&I(m9OOy)6rmz_H)IK|sO?2wb!W8GU)x~#*r{oVPXpAo$U zWAU9glcTEuJ|8-MJUM&E2n;}hrazVRRs7LW7XAnP(w++ZrW3taQzGBd$4Xgwz}6? zQR(wTb&8OnU>b;7uqDJP@MgPVO;+l%J^q!ZFIaVx+%~ppX=-{E78dG8_m1cW?vN`t zqEh{yJds|xdNq*$iB|KlWCt*G0XW)QzuocUqj^|d-8R;}v_L$Vusv~4w{;X7pO(Hb|7$wE5S=Ipo0Cd|LPR^YUnX@14-~Mq8K-?CWcSdw4g?&J;DBdm0TjYqXrX2nzu>`;5b zIX@)C^Ju!K!T|e@AM9zix%c8XTktoEEOQZ0l&k6(2n-tOnzfu(a{DIr z6720WeZ+$YQl>M%u5TG-@oKwr<2UTIvzOhzD)9*2c$(F9dfT_~CW=kLtf}cSb9u3~ z2>|E6HI}d@&02B%N_}&~;M2YRRl8{>+#9VzgcdF|F_lYyzTRlFHD|ir=^n<5ac%2A zE*nKKNhyl0jmm;Nl+dbbTxGkuQ_nf3*;Hi$nDk42UT4FpE}PZbscNA^j@A5MA9X|5ATS_xVnvI z$#&wwhCV4oG)UYMHkj^7dLIoVAz&ZY)ek&Rl z1^;SI+4V1pPlWqeUK8Ajh~5;w`~bwKB}6H*kix;kXS3z9E!M&i-gFJ-OS9ijwKrS7 zx+KT6`PwyWIh>R7BO@bgrKENN4WxVlg%kE0Nk4kPe@kBMISL+q3kYfD^#@#Ra`Jv8 z3VX)@eg~w^pJkgQ)9!Ezr*69g`+rVd`5Dw?^i2l*->P#W8pSTIFrZR8h1u+j5tYEZ`chL=yTqW7k3NAH&MigF%Gk9Jow5&}E=N zfI_S_@~AKW&oRQ7LM7Khfh!u3r~3VJM8f8D;`L9cx+v(1c%2)7KBw-)hl&nLAhedE z-70CE%_Pdkd}6Jf;~sWYqyW50QyuhwSoGJlvrORi-^hgEGxdv07>rlXOKz(kLihk9 zpV8imp*H5aa<=byopD1U&mh=8+d$1oT%C1|7UjbZ&9^4X0Srh1@t}!&*FK8I|k@%3zqQ7sgpaymT6{e?=nnrQ_52MPq3j4Z&X3)G9juFj%~5wyJ=`s}kbXA@Cg{bzw5?*Dd#!Wo?#+4R#mxNc3EY2fWg-pJ z7*bV>?WO5(Y`;m>I?%x)xytd#f37pv`-k?5&K?rfUH8J%pcrsu29ht@OQ6nASc>Ya z4kuNkj$tR2heeE%d~BEE&V*L$zd;jbcamphvF@vy-=A~k*Rd6`Yu)(IgH@-VzJG&Q zX8^Min8cxdIqUvSFfc{#f7hk&-o4wXtiN2fGCW7A+)gwm#E$y!o{Jt_Vb^H}UgTod zg8p-OlbFC2MS;85)aZZy83Ad?nK88$Yt^kC@3ymqhDu6hUH@ogv*=HCwOE(Fk}rkT zA&4W%$C=!qC%LfA^74jmIw8maz%AFW>D3D2=)PDPSy6JZX_`N`s?M`$$&1-vJSKMz7ypyp(|OFC z=Cp9UX-A2Jv0fUBi)hzB`l=;TQe*RJ-*?#lp?0-kBUW3VuFrAi%sJ2Ip3N~sS4I{| z?)OZsa?QFc`I+Jx=@TgE-G=U9ynxi~!cVW*x_aMLT1QjbCPBM6tDbP0BULw*4P|#a zMK@h$;ye`Q0^?|#ajOhUAy6UogrXl;TOb;S{yn@8ReZhOmmvax$0nn(veINk>F1Qc zP3?o>b8xE8Fhsz2KQpt2i7kPXf^6g2r6(E*SD+Pb=%rPzL5u@_am?e#Z@TLrknps7 zCF?dsrmU_*^(+_0ACz(2<0tjuUrKUw)FrQ~BTzfx0bKcc_f46A z(7LzowZ|Qs;RxH_i*3oclxL^ib&UjKG|t>$czVD%1C4q>YPnf-R#6-R!mRW;YgjMy zlz1;n8yVQozi`Rr7+RU9q4>q^lUHtD7U6o=ptfrlTX%Oi`PL@)=*_Xfh~ec^+&0_4 z4zVs@SY%Q0?&WH&M=j>xP#h~+b3mQn+BIq_c7PuuyaQ^jtk|Slou4l9lz4lYzP_dp z-!=M~bEwrKK-+#1&$jD`gVusmtGDcSJV-`PeHpb-=l0B%c2(_VUw%fq`(R(umgt{s zH>2)dMv&|3!G0hy$L0`ovh|NFoqYRBzNlF+sRs37<&r9{ya!T!w_;*riA-7VueL@= z#IN%eHN0y7w+u0yFg;P;z)VPyI%t4u2JO zBd0b@!h*%sNn-`*10EK4z@pO>kSI>`R{%x^K^u>G`jkgSMFm^rO9+iul{LTyoS0$~ zr7r42$nZb3*b4~>4H9j(f`Sl`2;$%4?7R(lH!`HBmqsj7vDAljanJ0}ApL}`&#|)Y za5fx1yB@@YBE&aT*M4Hw2ak{oos}$bv?53mxA0a9Wyws8Cb6#{LXll@8`i&ml$dz- zA{&Ebe+cV3KPJp2CXSelVp3B3Lzrr6G^pq}i=VsDy5e{dkq}SP&YEN)QTQMZC+nM4 z*Ve{i2E&B3oR;bO!|wMmbr>T!?EZf1_3OR%AGX5tte27Xeky~QsKSP450)hHnuk%< zSB#VBTf$O73`lyk{TeS-K2{+Dtr*r8RmmL!5yERjF6*@>%83>JNXn?Tv}ikQ8%H-7 zI0>TP$)Q9Y*hhsjgAKozDo>L-Az?)mb1ATu!0_7BZ@|3`c1ofiQ?`UNP0CrQ-w{;< zx&Un>Cs|NZV&aPi$EE;`Uf#vXp&`5QhgoEnpjBQ0)ms&&lMo%4PrE`!f#7*IM(-+; zJ0JuE{X|qKTBZc~6Rbc?pj!Pc7q3XxONy=PdJ+fGgRJ6Etc=if#a&i*=i!H1@ z?i2=nBB2{}1hHW7L36&Bm=HF?HaeR31mC;oOWK!!F-Lk1K(sO^iAT%W0evz^|A@JZr4MOtXn}17c+XQ1y29B! zW1B{wCA8;$P;-e8HUcSrgOo@75fDyaWq!CO{1TnB7UJ<@c5Ya9$^-m3(kx&cTp9>i z&bl-4n5-JPwO}d%^84WG3;49T8cQ2 z6tg)-tj;Lg1 z&wruo*>p{YVD`j^R00UpzlOQ`K3 z9S%S`;zPF*TLrWu$g{=!#PI>db{pJoZqVm2V?Wo|Ho{iOW0KKCe4t2s7_{w^6YvKC z3icZoqY>B&iCH6(z!I#xr?4}_s>{7~Tm!^XH6tU@D0Fy)6XQA5=*eb8+SUjdIk6B2 z4q41@9bMfrk>uUb25ed^ZQzLm?*v8;tbU^K8HC)0+HbBFxM3k@{F5i|DD*>mdaE7z z9v&}rZ=lfAuy5T-ed;)1^a@{1b$th~goCd@@QKXrXIr3XLOjo{-1~AmqBfyN(^Aq= z@nOo@vS23WyHC)LiPwoeTH*5LXoL9qNdb-42$_=!875-F;)A*M3bQ^kH}jLPukSo$ zU_MxDf@o@BmhJvC_e9Y(9v_%e9PKyf&LMvTr6mq2Lg*%&`z!FUO=Owx zc7V~=6)u*~&=46BHuCV} zLldl%r~zev4OEE8OyKzg`7 zOyA#z)kCW+X^p1`VUa$r=8r?n? zFFQh|&ZRpE>to{sF}sK%AC+s&m?B+zb#*nl;2*D_LHkVlBw=mi z3=G*8X+@-PsQ#w8|GY$e4PdIUMCsCI!Vl4#J9$5=@zPvuY~)-5McEc6rNp2Hd#s(h zk4|LX1p(~=G z@EEMu_lHfj-fj7sV`yoHTzRd8#ASGI5s4-CS~M&>+;5&0-_mkY6CUvdx8UHQLt{)- z44CO;L1C^E!QEgD)utJ$IO1?TjlOWid;6w>VDK)T+5ZHbwpYt~ghh@*(S5A0d|n+1 zX>|w8TBfb=|L(!~yPU|UcHK{((jF=}1D9x$6c&go>BY;>&yS+aEd_4$E0!j?;fBc7 zCng@P1UVW8)&C=++PC(B{e|O72lcf;{)DRbuYQ9h6-QJNY=Q^~zd6wYnR9o7_E9$- zUesft?kPTPW_|YG>}@8oB7Gq_mUHguO7eUksqpZxwt~NTGPh`4ThW{7uf~4108a4i zc>i=xeu4hVzw<-`gS&sV3~Xrug@Q|;Wf2b#&#o;JU0`Br7|j=dvemz@f>0w4Pe^{jY4Bh7KGWDz7O@(- zpRmI>`*$LXT=c)LFbR<|D35^KF*&}x=u=Z$DUBJ3pDWEya{ptb|NozV&%6IeqtX70 aZMv`hdA72}GV~#*?AxuSmZEBM<$nQ}TN`)) literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ao04_test_one_moving_one_stationary_distlimit_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ao04_test_one_moving_one_stationary_distlimit_intr_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..ccc44d732f22ae6c14823b734c6c8dafd208ea44 GIT binary patch literal 27907 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 Sad>S#W3A2x?Zj19$Nmecun*Ay literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ap02_test_one_moving_one_stationary_distlimit_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ap02_test_one_moving_one_stationary_distlimit_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..60de7f42e720be89d6bc153c5a40d203e3f65a1d GIT binary patch literal 34266 zcmd43bySw=*DwA6f;564sFZ*pT?Uc{sVIs_cM8%-ry^YfQc4O4O1E@_zypZ1bW4|X z{r2t5yffc<&spzpt#kf3E@!C&Ja=8!-k;jH-=l|8MEDo*Q79CVjI_8s3We!`LSc;K z;=up8)-^m0f1I+pBcp%|zg%$jec|7DmeMLVC=`hf@*hUJSeh{kMURpZzpda9yENjc zuCR41w${&aHhol)U zBdbrXz>r9RjUt%(=Bt))mSn{&)%3^7I8A})J%9arkzre6Hst*h>$IxB80u$t8VT~* zt5pXb`I&mn!HSJ^DCDz7%I%vQ11M?4lo=RUzLyE2NJA@ib#*NdcdY`cZ<3LS{5q4Z zRUJ&hu9#@l8UMv{0`v3J48x-1=Q)))Vq#+G1TnfOE{!^W3idbA(Y|+mh;OILPt3Nz zmzI&ao%S%!zd{kdoC`lH&wrVPCE0HI2k}Kl(okx6fT27%gj60z39fx6gNe62&ybP5 zG8-z^`Sr6)Q7l6~6`z<|07XJVg1R-;6ofp$!`-P6Dq#m6^RX%-RJvBRTWJ4ht!mNl z-@m_!it>TeI`@7K9=dOEaFf`{o}3h6h_Cc@;Zw5Wb!!_N`G?h-In8jj>pzo2>N-0~ z^78T|`Vy`hho$afd9XhDcq^k<)o|O|+8UKOfZ5sI-E9(gIyEIlyC?nevmb@5hVAd3 z9^WPWF*D*0M--L!@#648fKZ0*oaa~i@mGZ5lqoV}v`}gmk7d_M&92}$)u%zeX=g)%&!7ztIMp`OFi^koQ&?fJPF8gyr8^S7kCRx86d z4}W#bJsT;r-NU&nK79vSfmCWG=8Xe+dU^USWNrDw!|M9_`sC$qckW=;)zxu~85tN% zY%dS}9IF;X!QID!QgLNlw}VA4Ufj|$x0f%xg6rEA8qx2Til9VRmxPx@T~Rl^~G(=*Qxi`>Ce{qVm0M$ zFbM0=a&Nt@JYA-WHNwzZMkGjcV)N~F4p0AZ*F~W zF5zyfyh@+(K<*`CI?=!zV=iY;cALc>rQV|;q~bx{kL1V`JmKczB1WB|p$Yo=^Cv@& z?edRnP|lbLNAZJw+2Wv9X%By~^7Zp$-Dc<%7r)nR^S>^E@mPOU$XJa3za{bisGj~m z_QMKPGGUghqaxB_(+gLi6-+a5peUFb8L_IWs=j{xYH3Seem+RDp}D#K+0`;Z|B+}F zS_VU$26Q`mL)$QnfZ&!FZ;Y&>mV`E6jOG0I%Z7G*hLIt@r7G2uNn)G>7QjXr;d{|0}XXN(LN9Df$-HgpWH zhiP|%E?iTm@qy-~?vYwn_jAiBBZmQ2$v~y^4Su2X{B2SV!)Oi?L*`QGXqTu6ag?O4 z@Eb<@_{L!H+VB?$N5@Rp{HwRUzeO&Y)?M4#*=a3ui&Q%7H5x6uySsZURlZa(SmR&U zXM~c$)zs9?4t`_^hau(1(w#LlbmZZ0d5N7^7cJLAG5=ZvHl~R4Hcvq~Z-I;W-#6xe z*?u)@@EJ`gb8EFd6f-D3)(6JST+%hXh5qvzEOFkveiI%(wSa5Tgx)yA%TI4;ZWwu* zKOE{hTVT3I&Ev<9(M$Sh4m#35FRt!i7e{c5?3H4Mt?g?*z5lqY#7mfp(at+7wf+5+ zf^o#xOnNMBso@N*F*@LrTlDky*)X9ry?smmpHC1l4Uc4U*Fpwvpd{mm@AxOglEeA4?{08;*a%87NpPUoYc z(((QePmDq`OHs|0;-zYqWU^$?zfK4qWIdNQ+(F&aY@QEx7zsCRykp|vc{1w$@yOKw zd}J~*GXH*Lk9claj5Y*tSNWsy%AENQjf+0{iyn&6|aU--%?kPHBh;A%VWlI=E7MN++^f2IBzfIwGLFfpXfGU)viIMeEi5D zDEK3P7~pNC)0Xvn-mRZqSk))TLMx+{?8DK3RbK%TAy{|b-|E*2efLgvA$r(s?0NS` zBEVQ4!^6W2de(D0;XXd6;oE%Jm9p3P>tys6`g7<23ciVt=NgW7`t=jT!ootwP44B( zm(RLBV88X}_n=^!(^7_qDg{W-a%q6K?Y%jGPXXJ7w=+ZvKM1u|RWBf*v!_R4_uznF zT}cmM69Xe-SBZs|gM-7D!yHNHCMFrO?Uj+|E$Tm%M|5PJDrrMQLvcw+qFW3lH*y-ek?p-gs5nM&OR>$#}?7LFqZbckDIkTqbY?+SnmnFobdYV-kuvM^(vS1K^Je>Jw~cC z87aZ7m*{9-ES86{H3zHJA@GQ_0Tu7=FXr&tE+~{I)E`oYNq3LJvaPMH{ns|OL17m> z@8?3ti(JIR!$ZLAsLSSqio=aIJF)m3z?}>X9VmQ5Kwbjw$HLY&HdgDCjeHdDHDfFj zq7Ho7Li|*O0uF2R|Jti41**;0InrmV!D>C@&P@5a`*iB+?-EfAR&P2GH9P@%JW<6>o4!6TEm&}6bOr>34LS! zEdL#-urn1E73wre=>P1pSb!o(w=`>D|NX0D{BP)Kxd(-050|!QEhn)%?HpF{V>lii`if4G&;v^6adPc;@7AzYwG` z=}Dhh5I{f^Cem)gTlBY{o`NFD%F6n$wSxIb2Pwcxq*OtY0KWPEr_R&l@}4%-ygym~ z)A-a>J^CS_0a9MTN69JZn3x!cg->ZHa&;F+;B?Q1iaAwF%!AtB--y~DrlqCDB_@`H zqRIR)7B_Kx%?x@+QvYIHSj;db+%<2F8gX%5)v_0?0L6IR4jm5H>PZlQUv;#tmXeY} zFCaiwVm`vQzP`24dly(+=u7}5H`4xiOnR;uNwC~#I1kUNh(LgsH}vl{BPA09eIu~e z^R!x3XGe#3i~b!&#d8aNS!yf&)WFHEoBdE&X%6@j=ZBp*>H7nlnv$~l?~AHeoUN!3 z{&UTu@cpmL$;q91i?lfnGU9q}TIYv}1whk0|@ zXgBP4Ry3d(s#TppDV|td3;>ok(Hg<-us@$>b$qx-w))iy_yK(EWStiQ6^}M*a&mHf zagm@%l_-)9c(aDM7#*O}sqo$yXq_nieMXEu-zTrMxNR7v$ zqN2i0)NabLUF?&Vmd-sy>+|L9J^?M|H>mkfP@)#|yf4%E<{Sx%*6HV^Hl1PQ#NfuH zE9KCl5+wr8NyOg}5upJh8@c6vuzW)po=9Xu@24lt6EQ87d4J-W>G(iqJeHi)OPBd6 zZC!-BQjH%x>v5-is@D`)+w$+^EBuAH0%G21wIX;kdbm=I=zI?3M;z0%4x0ClPyVkvnb8fx_l@KX&0z&aE*~ z0W1L!YT3yJ;D||Ire9&<)r?J<;h3&x;s8g0E;FMq;s1@dZI%y~ub(?~z$meGr<=`M zUG#JGRAs2Jbw%BJ@#5-r^I>0uw#Y%3c;K51mo8ygRIGcC<&yA$TX_)cMcpjWVWj(JbX&cZ zm*D6qdVmNtf-kPDm%_qmRX7Ct0`gT<`7Tz&V26H?Mh)h7lcGo)5zxETCBt81i)r4n z@|k2pv7rduDmHu>jc6AMs^aQdl@av`wAqR^6>$9t>N4?348A)BwOu24Q z5ngfW8F3Ny&YB?^jh6}o^ua{W!*eD+KHdQ&t~|?$J8dl$IG(j8u7Ip#W2xJ=Vn9^M zbW_|ddjMESHA``uH-=knP1|nMdUJm^2R85Z0;CHr4hSjQQ-$Bm*vm6G5-By2^(qi_ z8nc16i$52-c%(4OOW{Uie-M~^?PFa6&C2$9oeo;p%c)<{S~_GNLuKl*6_MV}@Au1R z=HmAQG~0kj*brK zM|JTc&Y67hiF63EeQlYO}NJtD5`CTVytL4ggfi53y-Cu?QnscqWfB zdd&~c>pYhQAY{ICUWc~(IJp}0N+qsL3)=R5C$5@anfr<8XQiAK#RSsJL99GHxdXw* zsoH0yu}k;4C!oa%@Bd6z&ez9dmW_V2K&WkK$o%fQ8GhWu(*WQ~_U|jdt-f%RIoMBc zGMf6@M?E}NhxO{TNAFIYOEZQ#P@)3NkKN?%C1B`dDC50Y89wj2|Eu(v zo4Jl85b5eFRDd}D$*+T1WXQ;}4__MfCET^EI<3(7%iuGrXLGB8d-Yd-8B?H;)y}eP zqaJ1Mcz%BVS~Hz{qTA8FT^2Vm0D1X;>=R`Ge~glWx4zwPx1^!Fi%r3#Ja;w9c@wAT z#n2>)d3?^%)>o0La%I#Mf=;=`)oz?rDWjS-^ z%=p4Had8C@G!?Z$RB|vFVgJ&7Og#JIz31B{a)q2wkExuk+R_x$C9!?>eOq_xOCfz$ zi!owk7YT0Fn*J#KbSLD7)~gR|saJ;MfRO!@i@Qtm90!&PGwWpUfV!? zw(BrpR(aT&*TlhzahjC7=lV6N0x1)MCx@j&cFYI4c;Y$^+`!-*8=IPR;gohkhstF& zK6`BYODnqDjQHHPs&7jzr^Uvvx*!(hicr4&CckX}Ga z|NG}n0aVO(CXj#v4i$28Ftt;6h1-U+G2vcn-GS7Y)PtON4yoPj=Aoq(;%Hgn(@3jI zBE-SEbLWob=IjGRS>~nXji$Ld^m(^D-ijt;N>R^hwNd!jeXiQ`h#zqJ4HKT&(XX>` zp6eTJ+>F<+pDX`vr(-xRn=wgpE3d#^+*%hH|7=EKz>6X~c>d$#+JB$k3&6&A9UKG@ z<^DXsq4t5+PypvKy1?D5^T_6@p%e%f(6Fo!0zRz_3J)j%wLs)}Eyr&OA1oDs$kN<+ z&K<=w-z>9qcsXi{5UBVMY?rn1+kYR!Va#Qd=)%=!9zY$m+uvPFJ?DP8{kSD!unVpj zq#-HTEg;zZ>j#+S;sb%TV%_pOS0os11N~BW|0TazGFFneR@U+FhTDoJpl{ zhlAVKA@}10U$lS~0~DjjH!V}eZEWA zu2B>{?>{%I8UB|Rr08S_&uXy1h>?SX5UFS&S^?cd9r#x-p6~B6RpIAYsid;-s=9pN zu+;bWqbEibkX9~XVd}1~u7RTGlx6m-<|^iLe;k_xaCz6_76@vI{fl|dJLZ2~XhgJ1 z7?bJn7gDJZ+D7NqN*^d05gEJeS)2W#F&eiU&<&VxPF*~MygTS@p{%wLN0TaCdlb=l*)dVxsr#ZM3THr;QDw-v>>@2@v^ zXjv=$_Kl9`%2%uE!35wnXeD<6NG0K>897OECHiP{=a4N1azi6tYx%P2%#;xzBct zNmNo!EPpGZi67K}+a-V{{R*0d^*`h+dxLhD<3mTn^L(eE9f79pnz#72Xcy}^{^o@{6SW>@%Y)zu5h`)w8Mg$B`@r zLZrO>RtWSXmrm=}S?Kw+_Ul&z@Kn=mrFgi|lO?)PbvPSv*a{rhb$?qXeEPoawykQ1 z5%$|5(hq;D#}cr;fJ2H~Tl0-N&e2pHZ4aeC%}~r+jD(vma3H0tO__@qW5j^+b)Wd*xd);zk65u1`*)6LI zZ+vBZ$azd{wUUrNq*92iC0}2*B+v^dhD&XbTY)$~rejr=4O{H0hZw>;Aq{nRfl4TR zQm=HPfFA4#6$(xy5OkS(_%*v9d<7{C0Z!bybKH0@`8^OqRZ;!)uhqG{5_4JRj=4D( z85!9b(0u6J5A%A^@I$EPj^ok;JFZ|~IByWyY(Sev44bs>Bmm#p!C=FjL7bi&=G2Hk z2Wa|s7MH7A{o_V02_bhsbvP8h9$!pmm46NF*vpr_{$eTioi4j;I^vR&x?pfbPUfVb zgW3LhG=!P}I|F%{=Ry#eU50;ZmqRrC_rqS#v_&O9@6Sg3KEQAYv~KG(GqBTNpZi(v z_GQYBE66v-4`Gpb3tvMSqXli*?%cim7~G0-{F_ox^Mu@G)P9%%#N@`k(lYrcEgEpQJ@E@fydU4adX=U)o*GFQyh z)D$WBdQZ|G)^>LnG)(4L8p0=d*chG+8wf>t!MSME)cO1Q)gq?Og=;4CP@cf6`J@q| zN6AC#hph3%zAP$H7lC3hGXV!Cf!$^&(s#a*4$kyNEC%@_AaI%v6WE#RrDRYD4V*GT zeg@C;LOF_mie~j#|d-+L1eSlbv zg&;+tO4TedxbjMewRsZPQZjzikm6GHoPM>+c*TrH;4z>}yktpmAzQ87p_OG0pUEQ` z4d{Z$2xR_yTtsA~VMMuQf8@PXMB;9V_HQ%Sj0ZdE%NK!Dr%u(>*JJ&KpqXUyTmMV= z0@#U=tlRULpFoGG6BDSV@v?#w?Tvbq>NI01Z;{+qfCFV>i-Compboo zJxmY{a@?HN>5Lco0{_g`C2TWuzRJkdR|%Ri=X%5S6N#k zxitKNb6x`cq2;oUjT~>Q>~hfjNWxg-tDo2o#VZB4?Rbq{$x<}MtDFy%@hyUGyc;&w z9qb6+7ui}KqV(9RnlMiwEpB=n5rGX9p=3Ysim~i}X{d83#W%71_YtL6S{fJVMMxy4 z8YXK0*Ssg_ViN_OqFCBvgxZ_4?I7FYySuxWM02v6H8FrJ3iROTP)W`seh;|1B7H8i z%oQHyO3je3U!{RY67XY1hlhI}9qgzT7nGwTBd#+8xdZ!0d6|v@jgpj<`~bHtl9!w| zoN-JJSiSW9`}JV<^4iSG22$~Ukk#AgnB_+Y#`?u*7%^OBA&2#FH-hacb^hw*k^6T7 zW;oYYbKUitrudg=pQsq30uGieeGqcOw|WtF2W(7SBNV%Iau<0y)}X5SqMKiFB;_#* zS+4T(^4~xuY2!=o@=cZsLCW0Mwl?-{?>Vo|2-acjOvQ|VN{z5sy?i4_I3hrD?LE|K zZT|A|z!q&D@)q^)`^QURJn=$ZjzwF!T$Bcj`MMoY=c25KbGYzNPKPSMqjb<;g5m*u=J zC*dx4+12jLK7XB}-DXu1aB2BZpdo+A)RQLzwUmjU|11<4#Wn=8AwEEy{b(MwA{!n6 zm9H8GhK2~I;I2O86WyB*=R09s4m2OD8`!%a0pEZPLWL(ND{4ndl}@%0!f4B$BssIA zXbDk~zp9oHzYX9)r|l&_Xw$c#3J&HQ5VIar$EgIDyIDf9`mGRhW7+&+Wp?o!85&N0 zN{i3m-vf}B)N7JwF;>M8Qt5Ui2uv{;&@sec^uV}ItCmKdXaP2E{eHT%uL&Ml@u|~%*`QKQAI@s;wzye{oCy5K6C;jztDbsbun@VYxG~n ziD?9<7jVVRb!J*4A`LMT$A!z`@M>jj0YI}a#tK-~t@Ipb@0t1LO ze-y$80WT;YzPpMCCV6eYmb=-`;!{KL{GhKiMf2)e0^BY%ANi5gn2@|4U#&2RC|+z{ zpdae3jn_u5LhL3)v(hQae58!nnFzKP3R@$D#LhNycD>ckA|J(iUi6nY@$SMJ7e%5 zqOY5&`h`?O?&U{`MF_-vCIM*JRT?TQQ-N$4AnLkLE_84jh45C8{MHgq4x963Q{|In z!kK+TLMWZol$Z*bWDxia*$(cCz1jD^K|vBj#b#|=>f7Y*!9O~zJC0dx$LJ~FNI!ld z7+LPHt!H~~Pz}CAb%g9x3M5AE!FK1|h=xE1>$Pi7!H_^v*_~x^F#Ta z9USOEbj&}5-j6_tcUO&HWvP|uE)C>?QIOcHm!X*D54soz3T&g7;L6ZnyVjfCzqP$B znIP(#Yri_mAVxq)cnSqd=+vN5LL+#J9Aa(l?Ost)QQwBjgkxa!1}!a_0+`T-y6i9; zW7Ha#%;DoolNUE5x+7R z{iEo4SB4UIM)PQ?P4fmx-)i+qFr>Tg-ySHpw-~N)>^3=qe=@PKV4*fPHgb`D6GRK0 zNM8J1KdgX=nK}2v_0z9jy?Q;`XV6~Zv}JPD`1>gkOKZQU-sd$P$h9`QvUt;-Vx%Km zU`I{{&g>jSgg%o4T?&qljwb6bwOu^7zq3k`m?&)uS`_R(UJ$f1wW?{Mf`u_5>TkMA z!N*>`f`S6xXW!@xK@*}8vJ;1ffJ1cQ6bhk!590*AKzkP6>Uk1rTV}iH4G9|*_KtEk zfQ8VxtR=VIiPIGut?cl&6MmXcgKN2oM#N1r0sYkr;lX zH6Uu*b+7RtSS00@&`Hsl;J9t^cvWKQF!dg?sSweeoV)@3klAS#!Zwh{P};po=e)$r zp;6X@F`wxOK5X`rEBnP_e6xmm04-1-CYyBUd%I3d1+%x2gmX z9faCHK4U9Nub=(pvmvMEU>XGf0*ambhVF>pE3g+TpM+-PTWo>SHDpFCHtdQ;K|7J! z`4@tL7p~#o^(L&1y=ilXg2D^LK%u3*k%`=#m~!;*`VJHaHFY;hn*UTC6NQ#0*ezh$Orc|$@Y$uaH2ZO_X+eMG06AK=N&MYhwWx550Ufc%mmy0~h8MV;@dE>m<9m|9nN;yri z#UCY05<$4FUH%XwxP@Z}tz{fDVzu3=u@e*qyc{K+as{L=G8A-;-rmPckqHUhAT!)= z?d-IN>=ds}<8ZmX9C-c-z4<^?WRkn25nRc^&SmrPVQ^2WjnOBKayxmb>?t|b$EwhG z_^1fwb2KY6`>s(j&8J2&$z(;QSX6WV(v|dN(hy;gnJXrDxpo2RT0|G|`&{Q!Uo}TY z37I{I|1mJ2Jm1D${T6!nx_qD3`O8q14uqS+nbsfDGo2#k=B`1{lvvN)1H@XlQOP6|E#iC~Br-Mqk<%mOFxPI;EmQh4d{E# zd#Vi9Lho-_G>zA~kJ*_4UIy|(xzNX1iKPU9z-jB1`?t-F4alFtZxjmaG;ssOLGE!K z-&==chNzVg6W^p>VuN*AzdqIcxWMoMhx(T@U^QE{E`E7ZFQtRjkSVAkr4i5x+VEy> z)y_yG#s+-SI9N}`i#Nds{Z{l`Nxjq>o6c?b64Wm|)U!W4NVS#8PIM^$%WO!myaw0= zRP{8%I^cQ6ZV0ZZ9+qx`bY!aTO89O%A~f_8#v9Pb)M*;cnZsoOk>tnSn8rn`yZ!G# ziE12{vg#~YEC|(-x3oXW^)XgEcV zeszD3U{`AWHIT1w*Lc&NBtK%1rt^s3CTd4V1y(GRpO44ip*D3<@J7D2w->p%@BcEE zjT5AJ@a}3Yz-V5(C1q-1hi@C3VSJ}gokE;psbK0n>g`JRvDZWwug<*NbABX2e7dbN zYjvzTgp^S-5t6Atza?QIO%qX+44jD7VjwEC-t$CGr7GczK7*ks|Jfp?e#r&=n@@ny{82_L%G3p{$W{>I-^ z{PeG02;gwH#K{GcEWwwSk|GV+i7+OL7iUY1yCwaDMA$2Tg)x0nFqTi2T&9jM$%Lmn z&<9mC9ArU8vyrkQ^$>2>&9KY&Q!J|XBw@$Ct2U~7UH0aqSsZhWEb~0@NZd>^!S{U`ao{3L;|BZn_AK)C_aeEsoVOch#62%Th#Tz=0LV-PFabH1J~WX~&DaB>VENrL_n{KA5|gWZL%>1e zomWc95}M;B85!)GK{p)k_yZPsGa!)2b8XEMRRbw{UW0pG#2uhEO`>D?1)R4zCMP?l zdOop6dWTF;w@35nyn4b{u188mN$CTq^#jDv*S5FqTAxS1x9d~a^o$AR?`kPHtEy<` z2h0QM=RPEKTw6B*dXW?wcjG{kxsFoHMMq^c>F#NSAnB;I$5l@a1tO=}J^unUkK5I5 zsVAWjuS6t(Bv`A_H*E|!KQb{Vp30!=9 zYe{|7N;eHP=y!6Wd#3=u)q}-|dY=&V*+8DPBV~6{rdI-Q8z_YfC?TXeZrK7gt>xQwm90?)(l|BxgVi zgS-EB-v#og$PELQ=?P~&0l;1YY&GD{I#(~i?eaf|wwO(>$}NUQSC6a!Dk82)MC76%klV;{2Y9AiKo z$1cT4K%#Z>rU#QRNKSvGahpA3*sVj2r1Iu0bCXMo9;Vg9bOJKwkf~9A4mMUntlHca z62oKghoW~Dg?CL{*3CQZK^fqIqfm=DkwX;f=FRghEiDL;F(0k)16hvJu>-n-YWxlO z%3McW0a{rT>ND(@bj#V(t9vlR@j&0mNG;AHy?Y*}Qa&-*zh_<9T7{bkRxS#g<{J_v zL35;~rA0Z7CX2*KFzOnn>LKRW(3bCuAzIMP($lX1FPq?dAINiTg&S2;Nis#}gI{Iu zIoX++!tkwYNKi=VVw|9D9dOssm>9oMMk&FBWaeRu3x{14c1`BvCq3?Lsi+=l4_sAXbof#^q4SZ?HBWh0o07 z;(juUwm90QILzoPEL&{$43ZSGUxC~alEC9=TQa-)j?Vxe5}eOlOgnGBF2>yveH|U+ zH;2MEYV@a2&eO#P;zo>m1|d9Tx&l7DABQol+bgc7%098uo*)iIZ-vd2a4U0n3M*6X z#=uNtLQFv?-diTT>f?QO)nZe>v;?;cPd>`RJOdH+4kl{*$nGK%mVm4Q>O$sy0c;C7 zk?eO>&9N*5D{EFCe&7Lp!w3;O7C>o_RyaoAu!!&7j1_hy1HGDa;}FJy8uvEm0$i5? z`AmSblwoO@D74^U*Vxszb7r(G(Yb&4nSO_`)30ZNv?4#U(X*1tlQ7p%`gOo>7$SSM z!oR-VRjzR0h4=}MOjs^rU_jFou$c|)HlGupR^(bbRdo@o#>r5!%>H5yPT=jKnZ<8< z3SDi^U+!5+Br-zg8$gNEwVp6Cl>U@Vfh|#L zTMWO?hOv=`IQwgHM|-=3o!#}Y@bEm_Ma4pkvC)^t1XK^mAYGFb%}JD==#9@-QND;7 z`0>>>P|N1N_3yxp6^wnf{fZ9bdmqKQ+vON@?E+C#H2V?0<-v{)uQ)pM1>2`DXQ{uM zBav=#UC2HKN$S~@)@tVpriuTV20k9=^g>(kLADNbL_~c6R*GmVQ11d_J$3kEpn_se zojknNibjjWElh$4;PSGW3Ng9*utG*}*$dfij(;YApUhB&v#nD;yCLlPol0vM=s6lDpqpKvj~k;c?ymj7cNn-we^@>>tQQupTSACl?*By|5CdCvhKKc2Cs$9W&O!~ z^T3V3)z{7M`wI0H77k?Q_2fS(_*W^A+~5Ac5`Q4#2nh_*%v{%7 z7%X4`v>h2sAw?gz;*}@fT7gC}TI3{CA)DSk2hS%{bc+?i?O^*pHd{l-gWm zygb9jEbChwd-hr9Dk~=^5i&x9%+n!B7SwnluR&koD$i_%=Y2~p=Z0+CxU6?cr!jdl zdbYOdjwtN8&yi!VY?o5f(gq_zEDhNoBchD=_J^SXyyHoj0kNH8g^%()=+R#(+;u?M zoLcD3_+r0Gi+D=VQ_He-5O0tD!mKWLoPkp4b=lpjU*ko-G#C(;!Kx zmcv1vl@GIoiBtku%C|2BeH@_q+GnjcCo`a`xrlSJNtXnZhLclu+eSdohXouZ47V>RfdIUHZD*XK(D1L4`X zL<}% zk}op*V>=T81bsF(fNfZg544io10)t-2qG3X;uk?1LZU7`S!(_BrLa(u?5Obm*Lvlv z6^U&-weqcpM-{g@M?UOAsM%pLtK<<&;`Lb)b53zX1|>a=E72fdPk}M|1%z`@QA3b_ z!s>9Sb;?TaqP-4x{zhv>O)OWI{?hHz48VPgFwY=?dcldVUECds#@adTar^Q2HCeI;Y()LAUiRCri8 zhaThO*OBx$($jtD+>|2;L3XW&a-9ck2ZGuTPRAOz&Oab~sCobHJwvXAU55|%yWg4f z1{A~Bk)Xvum8%dm`A1o**V;OVuknYLYXe02ZxdCs!84#Vo^yWaE2L}aC>-s0V5j}_ zk#@azHFwQYu>Vlsm>WSLt=TK4tVVAluywsc^Jo10{qKOzz~i`~@3J=&WoKlU3i~J# zylE;vecWR65mi%W`!-W#wrcH0D$i^-+mt5@btx~j1rRa}?ebgSIDS2&JuN-H)&Fu@ zpVEiD*0VG`EbI(vsJBkN-JL8qJh2nu{I38%Ehp-*k(@k&l^_jfdd|Jkz%HVpK^z@> z^DLx&YQWM#hExYR1cxu%sK9s?GFkMLtt}FRmbQjH2gN`=rd(o90}bCB84Xq|7WT9S zx&7i@>UkvkFkH%Sw>nA$x#2bus}YrZ_wW%{0TM(g6jGYw?Ijf+LXah0{*%VV-HrR& z&BWSMl1gcL55kz>AyA9DP{F6NA@O}wmX?;5QZobD1@70$$Pf_lWH9NUenfkbVDGFD^<>O_@VFi;;(QK* zt~i=5>k`PAvxJ+usC$=-+F)HjUM4QU3Yc6$bU_#t0$1eSNQiCkF+{f4k+>u95M(wO z23O5@^w_&dQ@Ws3Qj+72UJKIJ23mTE0$`70m7^REE4g9=UrtJCc34Z1%blc;EXOk8HZ zfnCYnT5ydJtru3VFAPoS)_W5@8_3o13$bdL&<5KR^ps@d?vJ1zG{TZ@dwSSX>5hJP zjQ~*)fCH_=P-kSuZieYWVL2H@!%zy;o0Vh)WBgqsK$F$WUVy=n$!BPnmOXxB)By|3 z8&CsiAQ)o>6RqXNwh{p~pnM?sA6x-etKz(?)+=;7t7FZ8EPbI&rQ9iSi?B+tlVbR- zVk)$h=Cdn@F&*wypTH`=n5$ijiAaSIv}E1fe4B==4l4+VfG4;&$fOXsDl=3sE9_Q= z{lE{PXJ*EsWV;>JRrqAibhjrTtl2>G@MSbjn{@0HusxWN@8d zNX4Lo!(M3(d=p|=1c>DZT0D&Cl<4h7#U7jVh2M z(q$NRTI7^X5T$_x52UUV>J5+BHbs{o!t#Jgzu(KFrI(@tstBUa!Go)pWO;D&Tt7`L z%yfg%@d2Q`FBAaSk+B;;fT*R6p+0OCEHv!M|ken&?~ z6QDtaKErwFz<9v*{;Z$HTrL8;sZoTxJJpm^;5;Jb3eth|ZznrL52W1OM8T&$dkAB{ zuxzk&_4MN851($k{y?%_ND314>OaQg?tNX#%pTv}btrt^PYi}yoi8cl8f3$eSjzQ& z`-Wn-32g253umvJKGGSjzyT~F1x_JYu$n7#9Da;DAuw}{c*VD2>mxfJ3@{;joyYeE z(nenX5zJu?P4cb!xsF}mrp%d@{D*G#~@V=flR3yz%51I@0 z#mrOpexzy0KttowZq%XVdHizY1vZ42pt_R5rPKpFgTnF{ddZv*cCK+ZSP48BFk;aN zAEq{KyR31O1;^Vp89t$r>u$pR0f|nr-l-WLS)cS(?_KRHkt3SlD6w6dw>=PL1 zf^>Q<$QKi)?amL_~N&Vme~psv{PUqg~CS(hC&-$@#Q|$W;lybTkt8^EVVF z7k=@qHc5Mv@EuGe!w>^4m~Jj>wWp)`4E*cOA1j7|pL)2cb#e!W^>SSg?BK-)$qmo( ze=tbt`KrJUI0y9uK>P&AZQdX@n9fO(J>ElN2JI)u*x$bFFRk&xXgr9Z5IB2cJ$sr2 z`@L+*w`3_2n63mH^(?&3!v4`D=H(e$@V;QAF92XMG$w_gw$v)8BHucKucKUQeYr1N zWAWPoiPGD!9pjr2GKNVdfhA04HqF~gxv#gEH*@t{o6&xigh}S-b zsKoBxUJ~qSVrO$B+tZ-sBJoUc?qA(Yy#r{4X0t(j`i1c6M>?RSivFHgi}}v)>^wKw zB_-A*C+5f?SjKwYVsxo+ap3PMNO4C&fgFJC zRAghq_Z?#-66=7gYz3d(fkx}Y4RD%8W;)%E_psv~bWa(!o4kIB)n@BL6Yb!f!r4+_tcu%b-e&$SR{dX^@jfur7u?qoGW5`!HDVGW!gFlPR#bGR6HW0M#u(G)4lQ4 zuZN^#iZaw1B%-zsGc(E;xTtM&wACPay#mrVU{1uM2g$XQ=7iz$mCoPI5thYpnJob* zCUxMV#nHX>jrE6#xo~)y1$18+nW%>e^j@naU0~FZtOA5cV3Q+b7%An*-wd3ia%Z$2 zpbdy%k8+~*Dm%qU4u73pJ6OGSv>)8!jJ)yz5+5)zvkNwlMp@Rf8DXj8CNtc6oGirv z=qZ|{2R`h)0Hmr}y?Co{N;rjo?lpn)hd68|pMfZt`DAC$2DqZZpgnWpfaG)4d%zk@_831}(LsFN1*Fjat4zYN&+W(wiaE@=5C9Q|!ih^jP!Al5*J8B7T4MkywTPAuj@c9hY$0Th2*7QJ zW!9TJV_4zy66zHL=es{Xl{(rdDHS9my-A7;NdA7u0SVGTwzh1MxlnGtg{dh$TY=U% z-U4A-v`8Dn)x6lwo8;f!ubXQ}n>pOY3>h745OAu<}>jniamtbPBWym?9&q ztFK>fUA_k!2pL_4i2}>X20VQOk)S-irxInJBdi6Lzaze2E7z$MJ|nFwu?#4D^CAfC>3NB(wxW*nskvohs6IFh>iF5YG8E22qD$68*!y2)11Sc09)4 znc!hy0p^r~(BdpQ#uG^@0Wx6Qc|Ise?s9VM8Y|`wsZ&~n^Fqc&wA`lLL=7Z(WU>OL zhLNZmyfuLnrV?E2b2Ip(PX7*WLw}wS-VJF3KJzH;Aq`TJM4WzEK4xR+7X-El6dh`h zH@{KGxYo%&C14;gNSZ->bE3iT?C+Q2U}3TU5+t#MR&k>%M@tMQqQ+tHMjToY^;L#B z896yA5Qh<>4P!WyFxbaoS9!YJQz`QeD?Mq;D{O6S7>Wbt)3)>X3jwrk>rI0sv5Hj9 zZ1z0+pMEzXa5I>#E|h=r1Oo*D;7H@$Iyf(&{@RCQ*j2~w&i1r)Q$;5jhx~&LWMpc7 zS-wmXXC&OoDH--#029t0ZxyGWszxhVhLqqd8GgO7Z9o$M~E4dmWDPHXZPGfPlk?TF2@+7S&zwKM_w^tr)0K}c zR>FTL9P+P_Psfmwk^+UGre{&<$0DzF3Wi`DhF-HEB-6DAa($|mei(@xo8_z-`FsbJ ztWEQWkq;UCWr$_!xxuVwtdM=jFB>Q;07^oD4MS6S zUwp8;TLUlYK=2xHF4-X=n96_`A5FljgS>pUu`^uEV;Fl_8YwUN`o3xRG$&jjM0Ds} zf02T)gS>zXq)1qQeJ|ADb|FKF!or84!(cHtATAZWW#NZnj;09U*9U#BY^G3PFRye% zMAhnO-xjv&`{MG_QUt3(a`j1rD7^9@xnZ%UCsz(S1p;6uwOAk&D7-UlBjEJwN+fJs zNTemnC5Sp~w6K`{*#6$#4QVSuCKeyP?i>(&~LK>NWZY|LkSQa^AV#kl?O4ZS*>58z%79LS@js`Esx~Jm4iyCYmfj zXJHtiPBRac$#k>&TGdvc8oaMT444H%m){jrDps840Sg{%pc**e@!8prKP~FKoKXZ? z+8jG2k~Z5dyHrhtGs_ud@VE9#*ytZei^4QXQeDcS-!(%l8pQ0N>1qA$5=XTi4jN&H zGZ2TlJye|b=G_m>w1@LuDSieA)8peFu(WF6r2svmrh9Jp;H_N1qY-!^8!NCL>dH4~ zyTAXOs43XCAtML#r~?=SOW1CcTEgz{w0wEG*y$ zNhU{k;%=iNgRm3tRU%gh2}fkk0T9l6SFxgCOvNE`EVQXJxP}5Rex5z zDd0~iEnqB!Tl#&0z#j=Z}{%l+sYyg38uk;rJt-rk5j6A^08WLSyoR)YMd+$p$~< zegIvVn)V zFZ*0Vd;>5jf$F3wAOTSNdl6$C-TQpK?a~dRo z*YDq7gl5?VZr^)hxph|E9!tS!Uw>Va#8xWqKJMdHEAHdWLC;GRhQ;x9jam@ahsN|0 z20}1%-H>s3#6g3;q71JBJKjt~AjT4ahoeHV*19^cN+&4KMpMNV&DYaF0rP~3o>T;k&D_}B=!tBB#V>4n$L zhz*%P<)RAtn;av4-P?c5Ff>CCxv-k?g|&giY{>LP{82;&wona}_< znV?1x&g%E5D6CcJn%V&Q;Pq}rjUjq1pR}J($HV*IkS;+-7Xqn_L;yV$ZX7mmBUC;~ zB!>McERBvysSDp0Pr1@GX#sEZK&(~Cqid5j13*^YPli5sMu0v7l^jW-!bfNHOi^gD z51dPT<#h%?2eM<4$p-)tswXmR9$0sMd%Q$E#8apm1F9j}9ODM>UJ!(L6nuc)qUe|n zDUBpZA|dAg@xj=Msu_L6<+N9vMX;5-$w8V zurE3{;b%yjUpj@P3}JIK($m-Y`?c$t8(!Wz#g_Cy%|AwljT+n3NB}?jtu*dSP=r3f zKq6xLz-^PQ2K66FXK6alP$08x5l->&kdaUkJcDQb*)-646$gK&=J%zKg9;}LA$1rV zLL`<4i&<?-%azJl0ZyYTBmp z=#d8qn^Q0q-2`eXWWG+p?Du;kuKN-{e1;|H$9%p&(leaA25+GYpKKfhS%t1N$ZC2O zzF%`<4q1c{0zh10;Y~DuM37mie=t5RukI;?)`J%wp}hOqFDx66>BET*2>>-+fCdKV z+-J6qBj%t%BcKL2i_h!Vr&8`NP{9)GG9iYKHP1ynQk5!QDH13q?8)p^PWJ zIlMo9etx&W;Y*818Xsvq&-1@;SkyfKm0p2x(#wH~gFswy`il0uW930*2i47F%a0#N zhuXgY%t%X1OVoP~*eozRe!q!b!r9D6k8ai2K1A1!0F=joF=`>#P{Ee&=DaL?utTSL)56=+;dwI-Ls9sE@7A|I*^0ille5L7VqfC60x4+ zLp|{*ODwQPYl9u-{yN60_u@JGIhOgiKPp!~L!FNAQGhI(dF>Gu*Ly4ntOa;@{J4}% zSPwkc7*W0&z%6ryT@l~;hb;>$(GlQNafmj)n(KDDBEy;LNFPGE3V*8H?4Kx*N7A8w)@ph<92}DJ=HI+0lnzoi02#&^OlY_2qzFiDCti3|4a2_rVn!(KwFsPl-aYkbHF@$6@Qy zqd$aF&WrBex|InB-+447tw9?&1?B7K32D{78tR!VY8$H^?eHXP~ET6DA+)S~)bj+E$1m?V1Z8|AOBR^ngshh!gj zw$X9bW_=*y0%@jUQc-8O%Wd?#z-N(n%;v+B<)%2%vEgS+&zCVA5iLXXOh3Nhmb=#u ziT4lVW1zwblDNyUvBAj56rYm!ot_*f&kV6Vv0MHwcVmO|uzj#j=T(Dol-$;=rS)S* zjTYt?-Zg6Nplu!x>)zkXosfGn^D}RvWlGxG-k5JRFTX053pnHA3o|SXY_IeaNKPx4 z^}Q7yIsmK(k+OcEO%f1wLPkK;j4s}hudS72j%ZTWel=73s9WuW zf*1j%*$u_~eJ{dZxOP>FJ(>h^BJVRMOH3BLXHTJ+uMM&P8)YU@Xm4RNq7nf%rgeik z+s?DSHz|ycUK(KV@ONMVWQP+y$9-opsLn&C-l*oA)@2Nh9@eTX}_p7VXs z3(uRyZ5o`R&Ax-T79KX%+J6`DGZefZ`nR3Z8AuySAiU?#^RcoL#_J4pkPvePFN)q_sC1HLA@`jN8@RRY z-bd2TZc^ZW-k#}-+`Ret=&A@rj*JW-6%&ODfi&eUFn}z18I3@`d zEim7Rh`wcb|HV*bIz%>@u(7fAz44t|Mv(=mHz;x9fZKGq%PO5Yh<|;xxA1j$%T=}N zO^%A3=}+6>Z0g;XzF~{88(zfgQ2y!C$#qq5%D0FP=nD_^HEb;};8PWRbb*~2`LK_M;)D=*n{)b zLM>y5(^0A!qk5V3B{7H)jH^!lMl_5)XFG`aceDRHAc_`T-*VO4eYvv%g& z0bOC01ZEYZwu|_*N)FOSqUI0+VcV2TRXh^|`f55Zg&P(NYFxH@wnRS|4k{*9r0$mS z7CYdzOn{kzouvYQ7Ya4A1f-+~+a9!Oui6m;?85}cY3MF$|sC_esT()wIcq+YpmjvpO+|CV>+Y6ec8 zkK2&56@*wAOAvnd5FUMMv~z{T+U)13-hf9DR4MQNlM6SN>h?wunzr6gVJ`_@P|FrMKTb zIfYOF_3Wb`)p3#*gQ(a5YpeLO{j7(_+bR2@wYOIiqC_!1#S`Y)C30(rFRfDhkiMa) zrBID)f#Jy?YUeD7o5~y(&Y3fZb~%LCZA6>;bf8+nx@v=sq^paB zqrt>7 zc)6>Db3(9|h%|(p>Ym{PZe?JkOTXT@!mKstTKd!Ma~JPftz+!#!ixe$1pH+!f;vE1 zi+KopEm#?((k}c4d}Pju6!Ha0bGBypbwWm++}zaRN5w8$bARvJRd>>!;#Y`{ICkt9 z!8T3J&7C1ddWF`a8LYD3Ztn=%meAP$_D(U=T*Cl$jqN9%M5h8b(}ZT@0GJIFS#W%C zHk+ZIOh1^Pn7qXLXmu(IGLVF`85tJEY(e~Av5#AzAS3Lw4V^<`&rC%IOh41BtDMi~ z*`W zDhLohVy~5!1<5b^Na}fswi8b9USF(N*tPlhFI%@4zr|(QMaQJ42DfdW{nqOtPtAqp z{z<2Mf(=vFW3#o*HUZLh4V&$)TMTln-8eO7hh_xDz;X00wg~$qnpW*Qb-zW}?sabu z@6{MC8&RI!G2JBLn7?NIqCK1U>w3-Ga5}c)?c}N1@y5e~8Iv;&U@N@Yj13nk^k2e)zvOoZK)I{MB4rRkaWc z)Uc9()K^#YQhk_Lk1O*+afJ5tC6d?rKiQ|>MytXwukF4H1PHYe@LC=qb(Fd|W1Ah% z!U|h=AZG!HMonw$#C^lxNlhHq?oi$B)>+PhDvcNB1$ock!W005Pk+bQ79^nMY(M6D zC<(M?L9xgRB`?KGk3T1ehVcF>c$0q2|BDVs!&;%cr!-}s@Gf=@SRumO99r?Bi=q4Z z>ka4K?Jphi%voKBDb~Ts)irZRV`i~3LJ>`#TK{SHt7903$9~~HXle?m{30MeqYtyb z0fWN@qIcf5V79TCcrbzlZjv`Mk50jZ*g6LK`6} zA(}1$=Z_YMsB)h;yqLKJGQ;GLr$}x|{)V*>$$ep~n9?m7e;U>{4|KECmBPxI4xZr@t`Y;G{Q_qdW|@-2D7@ zyf_5=L@s=996DkjuJ_kpe`y?wHCvi(Ma?qWj)&-RfNqqfR-#p`&vh08;^vQ(2y^(O z;GFZi_!zp%<5J!uPRQRNM@P2TDc4X}^jDOT2$=_wOlqhFtYR7$-}4^75a=bp^-ovT zyWQ*$0ya&$#`0Cge|njzxrRqpWYX?ELr&?8SlQ`w($jq@t@109UL(Or_iv;W2SGEz zV8DEt;r3l0s)1X8GLckkmp8oMo(aYXe6Dw{FJ2*MRogvC0=r~``)46X%am3*(Z?XQ z9=WPuI3D`pG2x zXc_)Bgy6M6=_5I;40$-Qi*Unka;P_Vm%0`n&Wx{#it9%i>l5p`A=n9nzy*cKVQ8qr zZ7v5sOXo1P=(p);VXaA3kgV$+b1Gm7Qi&G?liYA|_>1osgNbOFGHB3aP$-39&uc|% zrm@CdG6?D&6eSO#ZYtNzsfWg17d#Mw?x@-K{Y>Vo6&{{l<06(hA{6i9%zh!Rbv3)4 zsFW)i@6Mjxc=)B?QeQLqOm=1nAmN942@}sy>GBOnq(UYpQJ7Njoqh2Jz5e!}U%#@z z^p5^?YfVq%r=D$rdWG6Y-*<8PYL`1mqDboFR@L_hwws%mSH}BFP`h;9Ov_2LAwW@G zJ30QZG?e7^-lLC-U9E5|!7r5nfNIl*sbEU1qyRc-ZMJJ`>sLKJ1cb$32bxRAeEbwT zm!SzUfy}$;;|ul{%-~=%6o#4_D;;ilHZtoA4LPBd0IzBaT?xw3G+lvgc)VjmC)V#u zdf)25;*cuDWLP@;_D(d!`_zx2()*NkxA^8#=@}FhdQ!e^uiJi+k^n-D{;rtgkzS2J z?n&rM>>W%&OZfSZn+Uwp$AgL%e&&lZas(PMWQZseCQ36wAh2;9i`BN_;o#w&bTa5` z52%}1VvONE@g=+Z+l~V?Kk``_y*AEc76!rbS)5K9q%XjzjeC8QRUFW6KoEqMP}ZTI z9hi02sB3az`xf!2V*ao}Kt=mDrit8N<8q`Ly)hIpSUm&LA>+q?-wg$6X?+Ge;+PCQpN7NUq|RWU z&$;elgR7#X`%iXec8dY)yekHKOk>&Qj{eh@oBsDYvH6yOQ$VPC#>b{>Y5 zjf(cqKEnrdb92G2j_p6mRX4F)M<>0ns74dZCrZX<5#k!5sbghfVc8>bSVKRR!*u1( zQK4|Ybfzqsqr7usBO_l|o^T8Q+6G@0DP*xyRN*fs5Zb-pW=GdcAzz>-Oa*{!=u|{s zP*_}C{IgBxlH;t)%8%tV=QN6Et`Aa?%YpQLhG(Kb6}0(qbkGXl;=8NF9UIH;jScn!LxH$KU(_0$nu0GximLtc|TI@d_DR|d7 zP|bs)j^SUyn+XAO0hdKM0*XhygYlAADZUDR9!{OgRH(rLL_#UC=!?%VFS_GdAPVY5 zMIyA)^a}Cb_1Vkz^RF>(e(rOC!4C6AB-jDu{eUw|ef!*@y`h8a*D~TRkj-kPo-_qTKUNt$62Wmjf1n~_+iPr`WbP3enU=Itq^>%+iPB8SrA=lqIS_ll9CAt>@|*=>33m+VZ*rxHhMi+&-H%nZFnnK!QaBZ z1_dpP*IX#zHMG2~_u#4?11W9!>PQRh0U&8tX78Eh+S{}_zx*jCKrG!qA`fXYvgOa9 z!!;87K7I9CgZ%Gd>?oPvoR=+K>IBshVhl|tmxpmT&b<}fB(a})OS6fUP3UR%0vu$- ze<3ON!xoS;tSyaaPGR?@zm-BEn;{ zQ%Yuse;s3~STJxsATTiJnH@%xO#~l}X(Oc)njlV{2#W{1B7-N8CPz{=+$M6=0#WU2 zUk+cV_gM1n!&Y};k)Gl@vsuQ*2m0Ub+;AIJFXJ@O@oS#bDD-I{6?VJ1xJ@Q-$xx{f z56mTN%TDGoR4Dyf8^Y9Ze(AG<`meg~5B3RSwWu5|1ULeCHp+K@;Ls5K%(p9KLJ3MV z<;g#Lafct0D~iGf6;Zr;O(G80c*XG-3l*m)JPjTkRmBH&cq7+Ccu|(F<^JmlYMC9Y9VHgaSP}$9++~Fir^eeCR>}}6t#K_yNw5&ot#ub#PN4m#=jMQ1KfFiXStW@$S5!E!C{E?7qjNV)PN54>+DqiW1qQ=rnq!n)-lumN|btud@2l*{wXRc zF)_|BYA(67YTuDxqkCUE=PZ}GVqiqzyyTo~QBfoH)~8S$?f&Dx;u!mrR+88_n>De8Yh7U!ucUkEXM9)d!>*s(#mj_NC*1AP0%tS+iar)*V`A< ztG&m2^i1;v|3ei*mLY`AAU@=#mh>>V37lFQ0NUw1f_BI4`#S*43l^+&Vam22FF*BZ z|Gbh0{mNbXhw)lJY+;jEQku*todB|^@>{?Y16HVJp$R*{8~dyN`ci03)NZm z2N#Ae|7>Qa43wa3Yu6@eN!L9%u!4-#ASi2)o<+j(m%dZ&ep8c7I&Xxcl*W%gG8;&` z+U_uK=Ijv;zhIc+|M>A=P&f(r6|nGopGK=>4z&oGxyj6eza_vgP(H$fXSBPm?JQ{) zMh~Ks#Ecp8s}WjBCpuojn!WnT_W;COq9g!c!uC1KPO|s&?!wCGq$NB&3tC$5Pl8&C zJTZ+WL5v1vu*YpVx4Uja&hZHgHsz}hDi=y!KoSWrLBB|xot9fCH4V`hMlTXHaSJ=({X|rSF_|rH{ zPuza{PI|@7AI0x8IdAw*d5Xnf+qt8p!4%(3D|nv(d!~wZd>lpSo9Mho0XzHP6Su7h z?xa{WEcbHWbam({$gl-!fSNC$%a&!~A{g3OxK~F>#6$6sfNLFFm!hxwk7AeR>ThmO zsLF&&8u@buahp-+Q~nus6QJ3I@H7#&w%?%NrqUDuqR7rja{!q2|2P84y@1W$0s)3t zJ`oDZ7wIsVXhIjX%I2)t4daDS*oV6Q2bIaC;QjGKzl2`_v^WMap17zH{Dd;eU8Z?ept~H?flb}sbjTgSB^#OYOnVy3C_n` zcNx?j+`5*r{lGcvyc1u zt7cspbp|ISIGwWCq1*WI+R>{KyFt0*i04Wm^caH?UWf1oq4>4{<4Y<-XkR-*c5d2K zxt9Bj|I@(aPZAnACu>WKm|yJIQ(AA5Xr*po%ro1<1~19-N#f4HyH8RJfj{9jqLk39 z5|u$IjTa5kG&4gNz6&dBYZ55X*{T`Ba}nTH0R&4Bi>Ak+Nn+}InDkH{%M6q~k}8#? zN0ae{Vq;@h`-wXLSOiE7mAh^BC&462jYoF3`SsLKkfhn!+0~;!B^f5*CAXeW9BQn^ zv2zXa#tgz6Z?Qx^_Akvl8*b*fQ1|_^sPF~yr7Fjd>@aYS4I-vwet|Z-S_{r|jVXqL zygXfy*R$tEJzL_^O8E~$0sEf+cX-Z<=~>52qn@28)cxcRni8G--bf&-WZr__9Ot@b z*gi1;_PAQ@sL1a$I8)WB?pC9H8=0<8B!GC##7R@Tx<>$ zn2s|zbP_-bCXdvfK;cb#H8>BT-FxI~FKcrXU(MTijrq`tKQ9er)t+3l&QBHD%9y`% zIXwIDZG01Pi&KGkujp@U8w_J?30PjzN z^SpK=b;oFmZGr+lxocI1VamQEjUX7_9?dSV?)g02DtBsgG(-Ex+7l-hny*JM^K7ne zdR@#XEzo0~A(op2{2n!G&I`WDt0V9A+E*@-PV;~3A0NNjlu_9R@&GqSMFEEN6vETj5n_-GrNdTab0pLhV08n|^M~ED zDWm*vY{vvY&@v)xvD?r3CD`18nliKpp@mj5nuTG&jRMU|%~zG_3Vcaj3dWY}l|Epil{dV=1Dtl(%FZxf`M0 zAY!rUg)cw2Aq@c4_?YAC_3H2;zlOGc0oouiXXKV9`82dTSfWB6PhBR_mC&FKimJ*> zxSB#iRLGST@H>s^0VyddO=0CoboK|d$O%RdK>wNZ=UFJ^NkixK&C8d~O}47Bo&g{& z09*vL^tH{#-w_k+N5fu;jYHu;YT1@ce|%^KK%r``=v0cF9&MYD}R?;-su+dEmPUsd`ln$xorV-Q+lmLGw36~goK28#0iJx z&>SqOlS2-9?O`iVutk*y08C+0m8;N&kcW66&<%jVQ<|L1<;Lvb4}AkJ~r zQ-6*MQ3L!K9yRjfE+GPyqC&~SnTWyCNSQ3-t#Ba58(k>qRE}q#?ZMeoY%s=}Ff-_7 z&@K({8Llo4ukBE}@0}I-5QTy4y&}e8d^YLyMTa8ujV;X{Uy1=Q2BD=Z=S|v${3e3u ze-8|_c69|H9fg|bUZW$(T37}BgA_>9yo9Ju(jUXehQVi))I{a$x90r6$Zd~P9D2QP z=-*4QZ_z;FfAO6H7~AxKLx8eJ5e7iFM-ANo3Cr+}iQ&`-@`NhMA9U#-FC{XD;D{>Y zeP94OoGuAC*J*sY|B4krIh{vfZc~3LraoPC=)j=P0tor`^*h$%>7o6lAPMZXCh*8=`|8@=&T_$=&RA< zheTNrikU@=7Lo02pC02F6kVhp$CuQkSN;dpra8nDG>(uI?i30I7LbaGKhCJ#mr;E} zaryWI5W*}(MFh^ya^6do0>hha!)vkG&1MinipN@Iz7aYR^!k8A8i7ozW4RQg5$l8s z<6PltNOk-Q&Dr6VUxI&dMM3{QsFm4_RV1RhpJmSSi+G>sktI-larr zA3Eb=3@u;dH)7U>s(d~i8qrrGe!-2j9GBIG6MNsEL139QNQ%sv0!7my17K|ZG038_ ztnx}sj06TM&~Jmnq`^-vT7oj*2LvUS&NvZ>BVB^e6lX#OZr{6%izGl?WqG5L*M6+|lJAXALq$=~#8b^m;(!y1k-zy)cD3XqV+x2;fQEZeP3W zwLzCL0%?)X8H#-u-%2-v#WW)ID&D*~k8fqc+;hSAD=AGJwE@9YWJ$g(u&pCR-MU50 zT*1;bO>1Gr5Di&_S0597=P(G418`0zEewYecYPARJ63)PnHrwMD-GQt8x|PkjWT5F zN`{I?l);#@Ylr$)gMBH~KTv!SW*ZUU2V1J?bMKX?cV41A>I^Xy$M;Vm#{WbL(F{Av zAV&ouI^

    a=lJA{RrfW*z{(jP{S}F{a)L<*O4QQ-XtJYd5jf(>nosJH1We5lj2;o zB(8uG0wzO+Q#-my`ZHtW;yOe2B?I#JMtMbJEm4g0lYJLf%_4}1a3zUAaJI3Y!OlxD z(j@B#&rX?kc?n^gJ9^Iw+ugV0jzWpe)Dq?kYy!WuZ-*z-1$1H+SakqeH~@7nLj@NP zxFH^D(>5@qHH|FJXI4CWHRGY|!!p$;0H!hMRd1aV<$Xv}Ft2}CyD1*oBe zu=UeZuER-9h9 zXbZeEkOEsrhHzu7wCoHAf&nlWN~`~~>gfqK(PDz!AvD@CIQnkF>wn6k`~PCOxEwfJ z@Mo>Q{N>d6rT_l#kX7So+}tiSS^x9rktVz(Ebj2kU{Na@f|6KR&eIK{)xr8HuiW&y z@|_;+2a$6DHOaHpS351=i2o+T^zjVV9~D*l-~W{vGz#tk9i9LCvxB_%A*BudA5Trl zPZg7C;6loE`irj5;@|75H`|G)N!LkJSQ}RUGo92u;GgNC|K&FR|36k&|9|pWqNiD0 XeFx1R8t|tx@V^}zd(_j^%+LNW#WUSS literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ap03_test_one_moving_one_stationary_distlimit_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ap03_test_one_moving_one_stationary_distlimit_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..161d789e5b4dac6fa1464d135ad6dfdbb1761b7b GIT binary patch literal 28099 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aq01_test_one_moving_one_stationary_distlimit_touch_at_limit.png b/imgs/test_geometry/test_extrapolated_intersection/out/aq01_test_one_moving_one_stationary_distlimit_touch_at_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a488ed3c5ee7c1261c7af46358b498e32204aa GIT binary patch literal 29749 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 P$=JDFS3P0dfph-@=4Yq+ literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aq02_test_one_moving_one_stationary_distlimit_touch_at_limit.png b/imgs/test_geometry/test_extrapolated_intersection/out/aq02_test_one_moving_one_stationary_distlimit_touch_at_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..68bbc760889bb7bfdaa506267b10e9331734e4bf GIT binary patch literal 31722 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aq03_test_one_moving_one_stationary_distlimit_touch_at_limit.png b/imgs/test_geometry/test_extrapolated_intersection/out/aq03_test_one_moving_one_stationary_distlimit_touch_at_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..156c87ab1fae88809cd6471e4422c92e8c9e2818 GIT binary patch literal 27229 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aq04_test_one_moving_one_stationary_distlimit_touch_at_limit.png b/imgs/test_geometry/test_extrapolated_intersection/out/aq04_test_one_moving_one_stationary_distlimit_touch_at_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..e441d159780436f70d052b19ad9b8fc01a750d89 GIT binary patch literal 25328 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 bFML{98s)D3kB6VAczMFu(9|GX&*{SNC=-of literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ar01_test_one_moving_one_stationary_distlimit_intr_after_limit.png b/imgs/test_geometry/test_extrapolated_intersection/out/ar01_test_one_moving_one_stationary_distlimit_intr_after_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..c33430956c4e78f0a2f195f55294fa6f7f554b75 GIT binary patch literal 29717 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⪙$I%FULsJF`Ew?KxY@d*K&=nwNn$PR38J0V-< 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ar03_test_one_moving_one_stationary_distlimit_intr_after_limit.png b/imgs/test_geometry/test_extrapolated_intersection/out/ar03_test_one_moving_one_stationary_distlimit_intr_after_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..8082c828bdaf3370681e41ca4643c07ae8836d05 GIT binary patch literal 27026 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 HM?djz8snk2 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ar04_test_one_moving_one_stationary_distlimit_intr_after_limit.png b/imgs/test_geometry/test_extrapolated_intersection/out/ar04_test_one_moving_one_stationary_distlimit_intr_after_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..3677dbaf3e0104d955caa0a9c8d88a2e7599b4d1 GIT binary patch literal 24787 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/utils.py b/imgs/test_geometry/test_extrapolated_intersection/utils.py index fcca67d..500565d 100644 --- a/imgs/test_geometry/test_extrapolated_intersection/utils.py +++ b/imgs/test_geometry/test_extrapolated_intersection/utils.py @@ -7,65 +7,80 @@ import matplotlib.patches as patches import sys -def prepare_figure(fig, ax, title): +def prepare_figure(fig, ax, title, xlim, ylim): + """ + xlim and ylim must start at a negative number and end + at a positive number. they must both be completely integer + values + """ + + # set small title fig.suptitle(title) - ax.set_xlim(-1, 7) - ax.set_ylim(-1, 5) + + # force limits (defaults are always too thin) + ax.set_xlim(xlim[0], xlim[1]) + ax.set_ylim(ylim[0], ylim[1]) + + # force reasonable tick sizes (default is always bad except for values between 4 and 7) + # note this is not the same as the defaults (removes the outer lines) which are clutter + # (the edges of the graph aren't used anyway... dont put grid lines there!) + ax.xaxis.set_ticks(range(xlim[0]+1, xlim[1])) + ax.yaxis.set_ticks(range(ylim[0]+1, ylim[1])) + + # force reasonable aspect ratio (default is scaled wierd) + ax.set_aspect('equal') + + # remove outer spines (clutter) and move left and bottom spines to 0 (instead of xmin and ymin) ax.spines['left'].set_position('zero') ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.spines['bottom'].set_position('zero') + + # add dashed grid ax.grid(True, linestyle='dashed') - ax.xaxis.get_major_ticks()[0].label1.set_visible(False) - ax.xaxis.get_major_ticks()[1].label1.set_visible(False) - ax.xaxis.get_major_ticks()[-1].label1.set_visible(False) - ax.yaxis.get_major_ticks()[0].label1.set_visible(False) - ax.yaxis.get_major_ticks()[1].label1.set_visible(False) - ax.yaxis.get_major_ticks()[-1].label1.set_visible(False) - ax.xaxis.get_majorticklines()[0].set_visible(False) - ax.xaxis.get_majorticklines()[-2].set_visible(False) - ax.yaxis.get_majorticklines()[0].set_visible(False) - ax.yaxis.get_majorticklines()[-2].set_visible(False) - ax.xaxis.get_gridlines()[0].set_visible(False) - ax.xaxis.get_gridlines()[-1].set_visible(False) - ax.yaxis.get_gridlines()[0].set_visible(False) - ax.yaxis.get_gridlines()[-1].set_visible(False) + + # remove unnecessary tick marks and labels (why would you label 0, 0 by default?) + ax.xaxis.get_major_ticks()[(-xlim[0]) - 1].label1.set_visible(False) + ax.yaxis.get_major_ticks()[(-ylim[0]) - 1].label1.set_visible(False) -def annotate_point(fig, ax, renderer, ptx, pty, dir, **kwargs): +def annotate_point(fig, ax, renderer, ptx, pty, dir, family="sans-serif", size="x-small", spacing=5, **kwargs): + if dir == 'none': + return + anstr = "({}, {})".format(ptx, pty) - an = ax.annotate(s=anstr, xy=(ptx, pty), **kwargs) + an = ax.annotate(s=anstr, xy=(ptx, pty), family=family, size=size, **kwargs) an_extents = an.get_window_extent(renderer) an.remove() offsetx = 0 offsety = 0 if dir == 'left': - offsetx = -an_extents.width - 5 + offsetx = -an_extents.width - spacing*2 offsety = -an_extents.height / 2 elif dir == 'topleft': - offsetx = -an_extents.width - 5 - offsety = 5 + offsetx = -an_extents.width - spacing + offsety = spacing elif dir == 'top': offsetx = -an_extents.width / 2 - offsety = 5 + offsety = spacing*2 elif dir == 'topright': - offsetx = 5 - offsety = 5 + offsetx = spacing + offsety = spacing elif dir == 'right': - offsetx = 5 + offsetx = spacing*2 offsety = -an_extents.height / 2 elif dir == 'botright': - offsetx = 5 - offsety = -an_extents.height - 5 + offsetx = spacing + offsety = -an_extents.height - spacing elif dir == 'bot': offsetx = -an_extents.width / 2 - offsety = -an_extents.height - 5 + offsety = -an_extents.height - spacing*2 elif dir == 'botleft': - offsetx = -an_extents.width - 5 - offsety = -an_extents.height - 5 + offsetx = -an_extents.width - spacing + offsety = -an_extents.height - spacing - return ax.annotate(s=anstr, xy=(ptx, pty), xytext=(offsetx, offsety), textcoords='offset pixels', **kwargs) + return ax.annotate(s=anstr, xy=(ptx, pty), xytext=(offsetx, offsety), textcoords='offset pixels', family=family, size=size, **kwargs) def create_moving_point(fig, ax, renderer, ptx, pty, arendx, arendy, dir='botleft'): pt = ax.scatter([ptx], [pty], zorder=5) @@ -128,26 +143,38 @@ def create_still_polygon(fig, ax, renderer, points, dir='botleft'): ax.annotate("", xy=(last[0], last[1]), xytext=(p[0], p[1]), arrowprops=dict(arrowstyle="-", shrinkA=0, shrinkB=0, color='b', zorder=4)) last = p -def create_newfig(title): +def create_newfig(title, xlim=(-1, 7), ylim=(-1, 5)): fig, ax = plt.subplots() renderer = fig.canvas.get_renderer() - prepare_figure(fig, ax, title) + prepare_figure(fig, ax, title, xlim, ylim) return fig, ax, renderer def run_or_export(*args): fns = args - figaxtitletups = [] - for fn in fns: - figaxtitletups.append(fn()) - found_export_command = False + skip_next = False + found_an_only = False + just_found_only = False + indexes = [] for i in range(1, len(sys.argv)): - if sys.argv[i] == '--export': + if just_found_only: + indexes.append(int(sys.argv[i]) - 1) + just_found_only = False + elif sys.argv[i] == '--export': found_export_command = True + elif sys.argv[i] == '--only': + found_an_only = True + just_found_only = True else: print('Unknown Command: {}'.format(sys.argv[i])) - + + + figaxtitletups = [] + for i in range(len(fns)): + if not found_an_only or i in indexes: + figaxtitletups.append(fns[i]()) + if found_export_command: for fig, ax, longtitle in figaxtitletups: fig.savefig('out/{}.png'.format(longtitle)) diff --git a/pygorithm/geometry/extrapolated_intersection.py b/pygorithm/geometry/extrapolated_intersection.py index 71da52c..1ea5b33 100644 --- a/pygorithm/geometry/extrapolated_intersection.py +++ b/pygorithm/geometry/extrapolated_intersection.py @@ -12,8 +12,8 @@ .. note:: - Touching is not considered intersecting in this module. Touching - is determined using `math.isclose` + Touching is not considered intersecting in this module, unless otherwise + stated. Touching is determined using `math.isclose` """ @@ -24,6 +24,12 @@ def calculate_one_moving_point_and_one_stationary_line(point, velocity, line, of The line is positioned at offset. Given a moving point and line segment, determine if the point will ever intersect the line segment. + .. caution:: + + Points touching at the start are considered to be intersection. This + is because there is no way to get the "direction" of a stationary + point like you can a line or polygon. + :param point: the starting location of the point :type point: :class:`pygorithm.geometry.vector2.Vector2` :param velocity: the velocity of the point diff --git a/tests/test_geometry.py b/tests/test_geometry.py index c453ab8..5accaae 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1626,8 +1626,8 @@ def test_line_line_touching(self): # af01 intr, dist, msg = fn(((1, 3), (2, 3)), self.pt(1, -1).normalize(), ((3, 3), (5, 0))) - self.assertTrue(intr, msg=msg) - self.assertAlmostEqual(self.pt(3, -3).magnitude(), dist, msg=msg) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) # af02 intr, dist, msg = fn(((1, 1), (2, 1)), self.pt(1, 1).normalize(), ((3, 3), (3, 2))) @@ -1636,21 +1636,21 @@ def test_line_line_touching(self): # af03 intr, dist, msg = fn(((1, 1), (2, 1)), self.pt(1, 1).normalize(), ((2, 3), (3, 3))) - self.assertTrue(intr, msg=msg) - self.assertAlmostEqual(self.pt(2, 2).magnitude(), dist, msg=msg) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) # af04 intr, dist, msg = fn(((1, 1), (2, 1)), (0, 1), ((2, 3), (3, 3))) - self.assertTrue(intr, msg=msg) - self.assertAlmostEqual(2, dist) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) def test_line_line_touching_at_start(self): fn = self._calc_one_moving_line_one_stat_line_fuzzer # ag01 intr, dist, msg = fn(((1, 1), (2, 1)), (0, 1), ((2, 1), (3, 0))) - self.assertTrue(intr, msg=msg) - self.assertEqual(0, dist, msg=msg) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) # ag02 intr, dist, msg = fn(((1, 1), (1, 3)), (1, 0), ((1, 2), (2, 2))) @@ -1659,13 +1659,13 @@ def test_line_line_touching_at_start(self): # ag03 intr, dist, msg = fn(((1, 1), (2, 0)), (1, 0), ((0, 1), (1.5, 0.5))) - self.assertTrue(intr, msg=msg) - self.assertEqual(0, dist, msg=msg) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) # ag04 intr, dist, msg = fn(((5, 4), (6, 3)), (-1, -1), ((5.5, 3.5), (6, 4))) - self.assertTrue(intr, msg=msg) - self.assertEqual(0, dist, msg=msg) + self.assertFalse(intr, msg=msg) + self.assertIsNone(dist, msg=msg) def test_line_line_intr_later(self): fn = self._calc_one_moving_line_one_stat_line_fuzzer @@ -1732,19 +1732,19 @@ def test_one_moving_one_stationary_touching(self): # aj01 intr, msg = fn(((4, 4), (5, 3.5), (5.5, 2.5), (4, 2), (3, 3)), (-1, 0), ((1, 2), (2, 1), (1, 0), (0, 1))) - self.assertTrue(intr, msg=msg) + self.assertFalse(intr, msg=msg) # aj02 intr, msg = fn(((4, 4), (5, 3.5), (5.5, 2.5), (4, 2), (3, 3)), self.pt(-1, -2).normalize(), ((1, 2), (2, 1), (1, 0), (0, 1))) - self.assertTrue(intr, msg=msg) + self.assertFalse(intr, msg=msg) # aj03 intr, msg = fn(((0, 1), (1, 1), (1, 0), (0, 0)), self.pt(1, 2).normalize(), ((2, 2), (3, 3), (4, 2))) - self.assertTrue(intr, msg=msg) + self.assertFalse(intr, msg=msg) # aj04 intr, msg = fn(((0, 1), (1, 1), (1, 0), (0, 0)), self.pt(4, 1).normalize(), ((2, 2), (3, 3), (4, 2))) - self.assertTrue(intr, msg=msg) + self.assertFalse(intr, msg=msg) def test_one_moving_one_stationary_intr_at_start(self): @@ -1786,18 +1786,138 @@ def test_one_moving_one_stationary_intr_later(self): self.assertTrue(intr, msg=msg) # calculate_one_moving_one_stationary_distancelimit + def _calc_one_moving_one_stat_distlimit_fuzzer(self, poly1tup, vel1tuporvec, poly2tup, distlimit): + fn = self.extr_intr.calculate_one_moving_one_stationary_distancelimit + poly1 = polygon2.Polygon2(list(vector2.Vector2(p) for p in poly1tup)) + vel1 = vector2.Vector2(vel1tuporvec) + + poly2 = polygon2.Polygon2(list(vector2.Vector2(p) for p in poly2tup)) + offset1 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + offset2 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + vel1scalar = random.uniform(0.1, 10) + + newpoly1 = polygon2.Polygon2(list(p - offset1 for p in poly1.points)) + newpoly2 = polygon2.Polygon2(list(p - offset2 for p in poly2.points)) + newvel1 = vel1 * vel1scalar + + msg = "\n\npoly1={}\n\npoly2={}\n\nvel1={}, distlimit={}\n\nvel1scalar={}\n\noffset1={}\n\noffset2={}".format(repr(poly1), repr(poly2), repr(vel1), repr(distlimit), repr(vel1scalar), repr(offset1), repr(offset2)) + + intr = fn(newpoly1, offset1, newvel1, newpoly2, offset2, distlimit) + return intr, msg + def test_one_moving_one_stationary_distlimit_no_intr(self): - pass + fn = _calc_one_moving_one_stat_distlimit_fuzzer + + # am01 + intr, msg = fn(((0, 3), (1, 3), (1, 2), (0, 2)), (1, 0), ((2, 0), (3, 1), (4, 0)), 4) + self.assertFalse(intr, msg=msg) + + # am02 + intr, msg = fn(((1, 4), (2, 4), (2, 3), (1, 3)), (5, -3), ((0, 1), (2, 2), (3, 1), (2, 0)), self.pt(5, -3).magnitude()) + self.assertFalse(intr, msg=msg) + + # am03 + intr, msg = fn(((1, 3), (2, 4), (3, 4), (3, 3)), (3, -2), ((0, 1), (2, 2), (3, 0), (2, 0)), self.pt(3, -2).magnitude()) + self.assertFalse(intr, msg=msg) + + # am04 + intr, msg = fn(((4, 1.75), (5, 2.5), (6, 2.5), (4, 1.25)), (-2, 1), ((4.175), (5, 2.5), (6, 2.5), (4, 1.25)), self.pt(-2, 1).magnitude()) + self.assertFalse(intr, msg=msg) + def test_one_moving_one_stationary_distlimit_touching(self): - pass + fn = _calc_one_moving_one_stat_distlimit_fuzzer + + # an01 + intr, msg = fn(((0, 3), (1, 3), (1, 2), (0, 2)), (5, -1.25), ((3, 1), (4, 1), (3, 0), (4, 0)), self.pt(5, -1.25).magnitude()) + self.assertFalse(intr, msg=msg) + + # an02 + intr, msg = fn(((1, 3), (2, 3), (1, 2), (2, 2)), (4, 0), ((1, 0), (2, 1), (4, 2), (5, 0)), 4) + self.assertFalse(intr, msg=msg) + + # an03 + intr, msg = fn(((1, 3), (2, 4), (3, 4), (3, 2)), (3, -2), ((0, 1), (2.5, 2), (3, 0), (2, 0)), self.pt(3, -2).magnitude()) + self.assertFalse(intr, msg=msg) + + # an04 + intr, msg = fn(((0, 0), (1, 2), (2, 1)), (3, 3), ((3, 2), (5, 3), (5, 1)), self.pt(3, 3).magnitude()) + self.assertFalse(intr, msg=msg) + def test_one_moving_one_stationary_distlimit_intr_at_start(self): - pass + fn = _calc_one_moving_one_stat_distlimit_fuzzer + + # ao01 + intr, msg = fn(((3, 3), (4, 3), (4, 1), (3, 1)), (2, 0), ((3, 1), (4, 1), (4, 0), (3, 0)), 2) + self.assertFalse(intr, msg=msg) + + # ao02 + intr, msg = fn(((3, 3), (4, 3), (4, 1), (3, 1)), (2, -0.25), ((3, 1), (4, 1), (4, 0), (3, 0)), self.pt(2, -0.25).magnitude()) + self.assertTrue(intr, msg=msg) + + # ao03 + intr, msg = fn(((1, 1), (2, 4), (3, 4), (3, 2)), (-1, 2), ((0, 1), (2.5, 2), (3, 0), (2, 0)), self.pt(-1, 2).magnitude()) + self.assertTrue(intr, msg=msg) + + # ao04 + intr, msg = fn(((4, 0), (3, 2), (5, 2)), (0, 1), ((3, 0), (5, 1), (5, -1)), 3) + self.assertTrue(intr, msg=msg) + def test_one_moving_one_stationary_distlimit_intr_later(self): - pass + fn = _calc_one_moving_one_stat_distlimit_fuzzer + + # ap01 + intr, msg = fn(((2, 3), (3, 3), (3, 2), (2, 2)), (5, 4), ((3, 5), (4, 5), (4, 4), (3, 4)), self.pt(5, 4).magnitude()) + self.assertTrue(intr, msg=msg) + + # ap02 + intr, msg = fn(((8, 5), (7, 3), (6, 3)), (-4, -3), ((4, 3), (4.5, 3.5), (7, 1), (6, 0)), self.pt(-4, -3).magnitude()) + self.assertTrue(intr, msg=msg) + + # ap03 + intr, msg = fn(((4, 3), (6, 3), (6, 2), (5, 1)), (-1, 0), ((4, 1.25), (5, 0), (3, 0)), 3) + self.assertTrue(intr, msg=msg) + + # ap04 + intr, msg = fn(((2, 1), (6, 1), (5, 0)), (0, 1), ((3, 3), (4, 3), (4, 2), (3, 2)), 4) + self.assertTrue(intr, msg=msg) + def test_one_moving_one_stationary_distlimit_touch_at_limit(self): - pass + fn = _calc_one_moving_one_stat_distlimit_fuzzer + + # aq01 + intr, msg = fn(((0, 1), (1, 1), (1, 0), (0, 0)), (4, 3), ((3, 5), (4, 5), (4, 4), (3, 4)), self.pt(4, 3).magnitude()) + self.assertFalse(intr, msg=msg) + + # aq02 + intr, msg = fn(((5, 6), (4, 3), (4, 4)), (2, -1.5), ((1, 3), (2, 3.5), (7, 1), (6, 0)), self.pt(2, -1.5).magnitude()) + self.assertFalse(intr, msg=msg) + + # aq03 + intr, msg = fn(((4, 3), (6, 3), (6, 2), (5, 1)), (-1, 0), ((0, 3), (1, 3), (2, 1), (0, 1)), 3) + self.assertFalse(intr, msg=msg) + + # aq04 + intr, msg = fn(((2, 1), (6, 1), (5, 0)), (0, 1), ((3, 4), (4, 4), (4, 3), (3, 3)), 2) + self.assertFalse(intr, msg=msg) + def test_one_moving_one_stationary_distlimit_intr_after_limit(self): - pass + fn = _calc_one_moving_one_stat_distlimit_fuzzer + + # ar01 + intr, msg = fn(((0, 1), (1, 1), (1, 0), (0, 0)), (4, 3), ((5.5, 5.5), (6.5, 5.5), (6.5, 4.5), (5.5, 4.5)), self.pt(4, 3).magnitude()) + self.assertFalse(intr, msg=msg) + + # ar02 + intr, msg = fn(((5, 6), (4, 3), (4, 4)), (2, -1.5), ((1, 3), (2, 3.5), (7, 1), (6, 0)), 1.5) + self.assertFalse(intr, msg=msg) + + # ar03 + intr, msg = fn(((4, 3), (6, 3), (6, 2), (5, 1)), (-1, 0), ((0, 3), (1, 3), (2, 1), (0, 1)), 2.5) + self.assertFalse(intr, msg=msg) + + # ar04 + intr, msg = fn(((2, 1), (6, 1), (5, 0)), (0, 1), ((3, 4), (4, 4), (4, 3), (3, 3)), 1.75) + self.assertFalse(intr, msg=msg) # calculate_one_moving_one_stationary_along_path def test_one_moving_one_stationary_along_path_no_intr(self): From 4062b8a3cf680d575509d5b1be91b482059cdec6 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Sat, 9 Sep 2017 10:47:33 -0700 Subject: [PATCH 215/251] Test one stat one move along path calculate_one_moving_one_stationary_along_path + imgs/test_geometry/test_extrapolated/(many) - add new matplotlib files + imgs/test_geometry/test_extrapolated/out/(many) - add new generated matplotlib images + imgs/test_geometry/test_extrapolated/rand_moving_stationary_generator - this file generates 2 random polygons (one moving) that are usually convex (or easily made convex) that I use to add variaty to the tests --- ...oving_one_stationary_along_path_no_intr.py | 34 ++++ ...ving_one_stationary_along_path_touching.py | 34 ++++ ...one_stationary_along_path_intr_at_start.py | 34 ++++ ...ng_one_stationary_along_path_intr_later.py | 34 ++++ ..._one_stationary_along_path_touch_at_end.py | 34 ++++ ...ne_stationary_along_path_intr_after_end.py | 34 ++++ ...ving_one_stationary_along_path_no_intr.png | Bin 0 -> 29478 bytes ...ving_one_stationary_along_path_no_intr.png | Bin 0 -> 47286 bytes ...ving_one_stationary_along_path_no_intr.png | Bin 0 -> 44546 bytes ...ving_one_stationary_along_path_no_intr.png | Bin 0 -> 44055 bytes ...ing_one_stationary_along_path_touching.png | Bin 0 -> 45198 bytes ...ing_one_stationary_along_path_touching.png | Bin 0 -> 40395 bytes ...ing_one_stationary_along_path_touching.png | Bin 0 -> 48236 bytes ...ing_one_stationary_along_path_touching.png | Bin 0 -> 55516 bytes ...ne_stationary_along_path_intr_at_start.png | Bin 0 -> 62088 bytes ...ne_stationary_along_path_intr_at_start.png | Bin 0 -> 51442 bytes ...ne_stationary_along_path_intr_at_start.png | Bin 0 -> 58730 bytes ...ne_stationary_along_path_intr_at_start.png | Bin 0 -> 55393 bytes ...g_one_stationary_along_path_intr_later.png | Bin 0 -> 64110 bytes ...g_one_stationary_along_path_intr_later.png | Bin 0 -> 65158 bytes ...g_one_stationary_along_path_intr_later.png | Bin 0 -> 75501 bytes ...g_one_stationary_along_path_intr_later.png | Bin 0 -> 60524 bytes ...one_stationary_along_path_touch_at_end.png | Bin 0 -> 36536 bytes ...one_stationary_along_path_touch_at_end.png | Bin 0 -> 57804 bytes ...one_stationary_along_path_touch_at_end.png | Bin 0 -> 38916 bytes ...one_stationary_along_path_touch_at_end.png | Bin 0 -> 50559 bytes ...e_stationary_along_path_intr_after_end.png | Bin 0 -> 34489 bytes ...e_stationary_along_path_intr_after_end.png | Bin 0 -> 47943 bytes ...e_stationary_along_path_intr_after_end.png | Bin 0 -> 50364 bytes ...e_stationary_along_path_intr_after_end.png | Bin 0 -> 49351 bytes .../rand_moving_stationary_generator.py | 165 ++++++++++++++++++ tests/test_geometry.py | 145 ++++++++++++++- 32 files changed, 506 insertions(+), 8 deletions(-) create mode 100644 imgs/test_geometry/test_extrapolated_intersection/as_test_one_moving_one_stationary_along_path_no_intr.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/at_test_one_moving_one_stationary_along_path_touching.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/au_test_one_moving_one_stationary_along_path_intr_at_start.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/av_test_one_moving_one_stationary_along_path_intr_later.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/aw_test_one_moving_one_stationary_along_path_touch_at_end.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ax_test_one_moving_one_stationary_along_path_intr_after_end.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/as01_test_one_moving_one_stationary_along_path_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/as02_test_one_moving_one_stationary_along_path_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/as03_test_one_moving_one_stationary_along_path_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/as04_test_one_moving_one_stationary_along_path_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/at01_test_one_moving_one_stationary_along_path_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/at02_test_one_moving_one_stationary_along_path_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/at03_test_one_moving_one_stationary_along_path_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/at04_test_one_moving_one_stationary_along_path_touching.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/au01_test_one_moving_one_stationary_along_path_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/au02_test_one_moving_one_stationary_along_path_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/au03_test_one_moving_one_stationary_along_path_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/au04_test_one_moving_one_stationary_along_path_intr_at_start.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/av01_test_one_moving_one_stationary_along_path_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/av02_test_one_moving_one_stationary_along_path_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/av03_test_one_moving_one_stationary_along_path_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/av04_test_one_moving_one_stationary_along_path_intr_later.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aw01_test_one_moving_one_stationary_along_path_touch_at_end.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aw02_test_one_moving_one_stationary_along_path_touch_at_end.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aw03_test_one_moving_one_stationary_along_path_touch_at_end.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/aw04_test_one_moving_one_stationary_along_path_touch_at_end.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ax01_test_one_moving_one_stationary_along_path_intr_after_end.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ax02_test_one_moving_one_stationary_along_path_intr_after_end.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ax03_test_one_moving_one_stationary_along_path_intr_after_end.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ax04_test_one_moving_one_stationary_along_path_intr_after_end.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/rand_moving_stationary_generator.py diff --git a/imgs/test_geometry/test_extrapolated_intersection/as_test_one_moving_one_stationary_along_path_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/as_test_one_moving_one_stationary_along_path_no_intr.py new file mode 100644 index 0000000..a9e055a --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/as_test_one_moving_one_stationary_along_path_no_intr.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'as' +func_name = 'test_one_moving_one_stationary_along_path_no_intr' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), ylim=(-1, 7)) + + create_moving_polygon(fig, ax, renderer, ((0, 0), (0, 1), (1, 1), (1, 0)), (4, 3), 'none') + create_still_polygon(fig, ax, renderer, ((3, 1, 'botright'), (4, 1), (4, 0), (3, 0)), 'none') + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-2, 12), ylim=(-1, 10)) + + create_moving_polygon(fig, ax, renderer, ((11, 5), (8, 8), (7, 7), (6, 3), (9, 3), (11, 5)), (-1, -3)) + create_still_polygon(fig, ax, renderer, ((3.5, 8.5), (1.5, 8.5), (1.5, 8.5), (-0.5, 7.5), (0.5, 3.5), (1.5, 2.5), (4.5, 2.5), (5.5, 6.5))) + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code), xlim=(-3, 9), ylim=(-1, 15)) + + create_moving_polygon(fig, ax, renderer, ((0.5, 9.0), (-1.5, 8.0), (-1.5, 6.0), (1.5, 5.0), (2.5, 5.0), (2.5, 9.0)), (0, 5)) + create_still_polygon(fig, ax, renderer, ((7.0, 6.0), (4.0, 5.0), (4.0, 3.0), (6.0, 2.0), (8.0, 3.0), (7.0, 6.0))) + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-2, 12), ylim=(-3, 10)) + + create_moving_polygon(fig, ax, renderer, ((5.5, 4.5), (3.5, -1.5), (9.5, -1.5), (10.5, 0.5)), (-4, 0)) + create_still_polygon(fig, ax, renderer, ((7.5, 8.5), (7.5, 8.5), (6.5, 5.5), (7.5, 4.5), (9.5, 4.5), (10.5, 7.5))) + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/at_test_one_moving_one_stationary_along_path_touching.py b/imgs/test_geometry/test_extrapolated_intersection/at_test_one_moving_one_stationary_along_path_touching.py new file mode 100644 index 0000000..029047b --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/at_test_one_moving_one_stationary_along_path_touching.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'at' +func_name = 'test_one_moving_one_stationary_along_path_touching' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), xlim=(-1, 16), ylim=(-1, 11)) + create_moving_polygon(fig, ax, renderer, ((3, 10), (2, 10), (1, 8), (2, 6), (2, 6), (5, 6), (7, 8)), (8, 0)) + create_still_polygon(fig, ax, renderer, ((10, 5), (8, 6), (6, 5), (6, 4), (7, 2), (10, 4))) + + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-8, 7), ylim=(-2, 12)) + create_moving_polygon(fig, ax, renderer, ((5, 5), (4, 5), (2, 0), (4, -1), (6, 0), (5, 5)), (-5, 0)) + create_still_polygon(fig, ax, renderer, ((2, 11), (-2, 8), (2, 5), (3, 6), (3, 11))) + + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code), xlim=(-3, 12), ylim=(-5, 10)) + create_moving_polygon(fig, ax, renderer, ((9.5, 8.5), (8.5, 7.5), (9.5, 5), (10.5, 7)), (-9, -9)) + create_still_polygon(fig, ax, renderer, ((2, 5), (-1, 5), (-2, 3), (2, 1), (3, 2))) + + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-1, 14), ylim=(-3, 11)) + create_moving_polygon(fig, ax, renderer, ((4.5, 4), (0.5, 2), (0.5, 1), (0.5, 0), (2.5, -2), (3.5, -2), (5.5, -1), (4.5, 4)), (6.7492919018596025, 4.29500393754702)) + create_still_polygon(fig, ax, renderer, ((8, 8.5), (5, 9.5), (4, 8.5), (6, 5.5), (6, 5.5))) + + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/au_test_one_moving_one_stationary_along_path_intr_at_start.py b/imgs/test_geometry/test_extrapolated_intersection/au_test_one_moving_one_stationary_along_path_intr_at_start.py new file mode 100644 index 0000000..69f85e8 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/au_test_one_moving_one_stationary_along_path_intr_at_start.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'au' +func_name = 'test_one_moving_one_stationary_along_path_intr_at_start' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), xlim=(-4, 15), ylim=(-2, 10)) + create_moving_polygon(fig, ax, renderer, ((5, 3.5), (5, 2.5), (3, -0.5), (-2, 0.5), (-3, 2.5), (-2, 4.5), (0, 6.5)), (9, 2)) + create_still_polygon(fig, ax, renderer, ((6.5, 6.5), (9.5, 0.5), (3.5, -0.5), (1.5, 2.5), (3.5, 6.5))) + + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-3, 18), ylim=(-3, 9)) + create_moving_polygon(fig, ax, renderer, ((6.5, 5.5), (4.5, 3.5), (2.5, 6.5), (2.5, 7.5), (6.5, 6.5)), (10, -5)) + create_still_polygon(fig, ax, renderer, ((6, 2.5), (1, -1.5), (-2, 2.5), (-2, 2.5), (3, 6.5))) + + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code), xlim=(-1, 16), ylim=(-6, 10)) + create_moving_polygon(fig, ax, renderer, ((10.5, 3.5), (8.5, 2.5), (5.5, 6.5), (9.5, 8.5), (11.5, 6.5), (11.5, 5.5)), (3, -7)) + create_still_polygon(fig, ax, renderer, ((12, 1), (11, 0), (9, -3), (8, -3), (5, -1), (5, 4), (9, 5))) + + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-8, 8), ylim=(-1, 19)) + create_moving_polygon(fig, ax, renderer, ((3.5, 6), (-0.5, 5), (-0.5, 7), (-0.5, 8), (1.5, 9), (1.5, 9), (3.5, 7)), (-6, 9)) + create_still_polygon(fig, ax, renderer, ((7, 6), (5, 6), (4, 6), (3, 7), (5, 10), (7, 9))) + + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/av_test_one_moving_one_stationary_along_path_intr_later.py b/imgs/test_geometry/test_extrapolated_intersection/av_test_one_moving_one_stationary_along_path_intr_later.py new file mode 100644 index 0000000..6207714 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/av_test_one_moving_one_stationary_along_path_intr_later.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'av' +func_name = 'test_one_moving_one_stationary_along_path_intr_later' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), xlim=(-10, 15), ylim=(-1, 18)) + create_moving_polygon(fig, ax, renderer, ((-5, 9), (-8, 7), (-9, 7), (-8, 11), (-8, 11), (-5, 10)), (15, 2)) + create_still_polygon(fig, ax, renderer, ((4, 15.5, 'right'), (5, 12.5, 'botleft'), (0, 11.5), (1, 16.5, 'top')), 'left') + + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-2, 21), ylim=(-7, 11)) + create_moving_polygon(fig, ax, renderer, ((4.5, -0.5), (3.5, -2.5), (1.5, -3.5), (-0.5, 0.5), (-0.5, 1.5), (1.5, 2.5)), (13, 3)) + create_still_polygon(fig, ax, renderer, ((8, 6), (10, 6), (10, 4), (8, 4))) + + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code), xlim=(-3, 25), ylim=(-1, 21)) + create_moving_polygon(fig, ax, renderer, ((3, 17.5), (3, 16.5), (1, 15.5), (-1, 15.5), (-1, 18.5), (0, 19.5)), (18, -7)) + create_still_polygon(fig, ax, renderer, ((14.5, 13), (14.5, 9), (12.5, 9), (11.5, 12), (12.5, 13))) + + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-10, 8), ylim=(-12, 6)) + create_moving_polygon(fig, ax, renderer, ((-5, 2.5), (-8, 0.5), (-9, 1.5), (-8, 4.5), (-6, 4.5)), (12, -10)) + create_still_polygon(fig, ax, renderer, ((6, -1.5), (5, -3.5), (2, -2.5), (3, 0.5))) + + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/aw_test_one_moving_one_stationary_along_path_touch_at_end.py b/imgs/test_geometry/test_extrapolated_intersection/aw_test_one_moving_one_stationary_along_path_touch_at_end.py new file mode 100644 index 0000000..3acbd53 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/aw_test_one_moving_one_stationary_along_path_touch_at_end.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'aw' +func_name = 'test_one_moving_one_stationary_along_path_touch_at_end' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), xlim=(-5, 10), ylim=(-2, 5)) + create_moving_polygon(fig, ax, renderer, ((-2, 0.5), (-3, -0.5), (-4, 0.5), (-3, 1.5)), (7, 1)) + create_still_polygon(fig, ax, renderer, ((9, 0), (8, 0), (5, 1), (5, 3), (7, 4), (9, 4))) + + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-1, 20), ylim=(-7, 10)) + create_moving_polygon(fig, ax, renderer, ((11, -3.5), (9, -5.5), (6, -4.5), (6, -1.5), (9, -1.5)), (7, 8.5)) + create_still_polygon(fig, ax, renderer, ((14, 8), (14, 7), (12, 7), (13, 9))) + + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code), xlim=(-4, 7), ylim=(-1, 10)) + create_moving_polygon(fig, ax, renderer, ((3, 0.5), (2, 1.5), (2, 2.5), (4, 2.5)), (-0.5, 5)) + create_still_polygon(fig, ax, renderer, ((-0.5, 5), (-1.5, 5), (-2.5, 7), (-0.5, 9), (1.5, 8), (1.5, 7))) + + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-1, 19), ylim=(-10, 6)) + create_moving_polygon(fig, ax, renderer, ((15, 4.5), (15, 2.5), (13, 3.5), (13, 4.5), (14, 4.5)), (-1, -9)) + create_still_polygon(fig, ax, renderer, ((12, -5), (11, -9), (8, -9), (10, -4))) + + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/ax_test_one_moving_one_stationary_along_path_intr_after_end.py b/imgs/test_geometry/test_extrapolated_intersection/ax_test_one_moving_one_stationary_along_path_intr_after_end.py new file mode 100644 index 0000000..7b57850 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ax_test_one_moving_one_stationary_along_path_intr_after_end.py @@ -0,0 +1,34 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'ax' +func_name = 'test_one_moving_one_stationary_along_path_intr_after_end' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), xlim=(-12, 7), ylim=(-1, 6)) + create_moving_polygon(fig, ax, renderer, ((-6.5, 3.5), (-7.5, 0.5), (-10.5, 1.5), (-8.5, 4.5)), (5, 0)) + create_still_polygon(fig, ax, renderer, ((1, 2.5), (1, 0.5), (-1, 0.5), (-1, 1.5), (0, 2.5))) + + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-2, 19), ylim=(-1, 11)) + create_moving_polygon(fig, ax, renderer, ((1.5, 3.5), (0.5, 2.5), (-0.5, 2.5), (-0.5, 3.5), (0.5, 4.5)), (10, 4)) + create_still_polygon(fig, ax, renderer, ((17.5, 6), (14.5, 6), (12.5, 8), (14.5, 10), (17.5, 9))) + + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code), xlim=(-1, 16), ylim=(-1, 12)) + create_moving_polygon(fig, ax, renderer, ((1, 2), (0, 3), (0, 5), (1, 6), (4, 4)), (7, 3)) + create_still_polygon(fig, ax, renderer, ((14, 7.5), (13, 8.5), (15, 9.5), (15, 8.5))) + + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-3, 15), ylim=(-8, 5)) + create_moving_polygon(fig, ax, renderer, ((2.5, -4), (1.5, -6), (0.5, -6), (-1.5, -4), (-0.5, -2), (2.5, -3)), (6, -1)) + create_still_polygon(fig, ax, renderer, ((12, -7), (10, -5), (10, -4), (14, -4))) + + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/as01_test_one_moving_one_stationary_along_path_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/as01_test_one_moving_one_stationary_along_path_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..a9cb26f35508a1455d6a9dd9433d9a2616f26cb6 GIT binary patch literal 29478 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/as02_test_one_moving_one_stationary_along_path_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/as02_test_one_moving_one_stationary_along_path_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..575202d4356594bd315d847dda047fc6edaad5b8 GIT binary patch literal 47286 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∨E0j|Q0TKgvYjN91dp?Y4 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 R$qj`cPj_#(1Fovieg%IQ$@TyM literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/as03_test_one_moving_one_stationary_along_path_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/as03_test_one_moving_one_stationary_along_path_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..11f47f6f1f4c7867a57d4e8bfc93619f36e21c5c GIT binary patch literal 44546 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

    kUTF99QtSJmIzHsn;u@|Ov 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/at02_test_one_moving_one_stationary_along_path_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/at02_test_one_moving_one_stationary_along_path_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..25e6de55a3c452c3f2c60324db09f5ba2b4ff3df GIT binary patch literal 40395 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/at04_test_one_moving_one_stationary_along_path_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/at04_test_one_moving_one_stationary_along_path_touching.png new file mode 100644 index 0000000000000000000000000000000000000000..1a4db32857fd079142cf7d18b5baef18edc7b256 GIT binary patch literal 55516 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/au01_test_one_moving_one_stationary_along_path_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/au01_test_one_moving_one_stationary_along_path_intr_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..bebadbb654a6a558b4502fa3e3eae45387261d7d GIT binary patch literal 62088 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 H=;r?df8_m& literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/au02_test_one_moving_one_stationary_along_path_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/au02_test_one_moving_one_stationary_along_path_intr_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..748979850643f80a7fde80dd042ca8feae6a63d4 GIT binary patch literal 51442 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/au03_test_one_moving_one_stationary_along_path_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/au03_test_one_moving_one_stationary_along_path_intr_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e5998b93ecc1a0c2d09dc7500ad27284a26d63 GIT binary patch literal 58730 zcmd43bySsm_dU94loljJB~&`46ci9p5D7^EX#}LZTM$G*KvEDX0g>+RQc{rakZzH# zyB^Q`j`zLa-*?=*{^GdkJ2 z8}DtXPVPr6hD-Okg_z$F2bT{1N2)0WjrQ*^c;XnM@S0y3xj(k|-?y>j6QC|2uW3+T zL0v*#E9T-w-9%n9(R+!KLN3tP_yZO8_nNPh|NBBxK~9U^*MhI!y~NMY|8k;|Z_;^= z;Me>-GyBfLwn6pT(dyRk->-6V*w@zAd&{hJ)+TGH|47J+N!i^nT_c41GHCDaZmsvh z&@(m;AQCwt=G3mPk7j=!_Wu2=&!2C`e)xcf`n|Igo{$hSr0qtqv9S>*b@NSVXj?E9 zPgr!cKYS!VoE2_x;)2@IKooJ`tF8ngiYc%2`-)0RGaDO(s5=fTWc~!y{#Lbz*j6>W zsyTU~!NC$@V(4#!f*QDF#O*&2i>-tZqLGTlg#-}M=x>ZyAh(>BcI)c3YutK`m?yhK zI?^3ET2P({S#S}=1zmWa9NK97{!FJI!&EcgB%!I&x@KzOj4SC{W`?1+Db7q`r6%0DV9O4}v$ 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

      _ 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 G@Baaf=L$st literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/au04_test_one_moving_one_stationary_along_path_intr_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/au04_test_one_moving_one_stationary_along_path_intr_at_start.png new file mode 100644 index 0000000000000000000000000000000000000000..21727e9f117c7c2294c39636fcb3d080df9b05c5 GIT binary patch literal 55393 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 Ss%D|!A6c2B(oqL=ul^rC$MD(! literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/av02_test_one_moving_one_stationary_along_path_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/av02_test_one_moving_one_stationary_along_path_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..73fdd36d00ba71b88760e0ef248bc00f4561fdb2 GIT binary patch literal 65158 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

      l-Ny*(J@HZneBe{e#C!Z#v?`P?1+8UR-37Q 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 IohIl13zE(-a{vGU literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ax02_test_one_moving_one_stationary_along_path_intr_after_end.png b/imgs/test_geometry/test_extrapolated_intersection/out/ax02_test_one_moving_one_stationary_along_path_intr_after_end.png new file mode 100644 index 0000000000000000000000000000000000000000..171ab6a63b456107f23dd37087308dab057cdd39 GIT binary patch literal 47943 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 a^L#z8qc_hDagp#p?U{3D+|pdR_x}TX;Q90b literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ax03_test_one_moving_one_stationary_along_path_intr_after_end.png b/imgs/test_geometry/test_extrapolated_intersection/out/ax03_test_one_moving_one_stationary_along_path_intr_after_end.png new file mode 100644 index 0000000000000000000000000000000000000000..93d7e39d2548ce66ef10d080927d29098541a448 GIT binary patch literal 50364 zcmeFZd038X`v&?p2x(N2Mu|e9L8Q4vrj%4Fnl&gI(4bi}O+r+fCz@0$MKdWwqh@JF z(yV#j=VPt!x4-YVzjf@rk7NJ2*Kw@FtF?OG`?-hfIHxy2)Z@@n;8!r3f?;CASXx|`_=naW~$)3qRy+R^w zC!JK3S9gpW>2kirtg*I!qJGTN^W(8~>Z<1&6dBhIFT^{N6>s{nueRp%=NDW}dB24} zHH&aeqH;XuDwIuIDKri*;cJrqc!Ctb1P0W zB6W3RgDw#r-)+K06Ac1|85B0~cr!eSfB2fhoA|7F=^$w*@hM06|H}{U2QxJT4)?e) z#l*ze+`Or1VGXUS$*9=Pfx#-pFi|oikRB&X#-zX&I6Zx{Ch7>2?(3Vk z6BBuLUS7Skk%@2nzI{PGzQVo}6E=lKMFV)4i?g=&Hgaq&C*^0#O1V&)keNcR{%8xXID;W++EeVT32 zvbT8o_b2~=fTLPktYbZ8^d!~Y%bWhLtiC$^NU-Ajr^h+Brc77s^D#wl zc|)Yg&CJYlqt=$n)+k7rh$s1?Rrj7e2^bl<${}e_lU2I7SA8$bn>TMLGa?xjGV0I% zqGM1vVR!8Kaiit=Nz-c~va8~Y(?eddZi^f1WtId z<>7sg>TP3V=$d=;l<#Qcbuph4bu4#YjhP-;W7%Sr>G4?p6h{UwCh8W7ErhxFzA(rpl@+g~Z0*udi;j=bF*q4G758-hr?1{PPuw zd3nsA9v`UwQTrq`B4T5c*i|1NAC{MEvz^v`SefCrEM8&Z#;c@_Qmm>L`Cq8(o6HX` z52Ub(S$J1?t*0Oz59YWd??n}F-BUU-F;V_Lly~?NH=gcON4C@ZAZxB!ebsty7Z3he zm(7w6V~S_a&|p(HzA!m$!*RiIDN!lpH$`#4)&rW3#mY|(z5nc(E28EqRMTt2vo*U~5m$2I_v$lMrR5`Ix{WbMr0f9}#7d6BmZG3i) zx8})V`nSHcUIhh*%ajcaw)YPVoKsi7{F33@w+|1N2Q(VZ4~EsrY*skodi>85k0z_d zFDIWaTl^)!O5;o2Svubz&?`>YT#(A9R5q@*PFV%NyRKy`>;g+aM5E&Kc-9M#$< zhk3=tSx3L*Q;;4$d^nLFsJt@Wr1HMLzS=lM+B9?XMjl1xgA^w=ToEEB2`gOj?%les z*LFwM)Hb^)08n8j4Qwi_0@@#73h4q<@r zOt?oux6>vBfn&se>T>Ae*|(3D7~q;yTb6z`eqY$OUlC_pK2^QHCPK8m)KyaA=1-3! zH-7lfDR1{?5Qvk!&49z{=}BI^x;Q+)Fc=%(Xx>m@t)Fq})n?2Vaco{*?eKJ8U0B~$ zg zPS$^_t$p{#XH)3Cdma}HtmL0IRdjZ;hlYk~725E8{rXjLMFxjQw-JXIQM9tE;fTkd zczVbeJCXR&|Nr5CPl8AV>(O)P7+HP?&aMn(kf9Eb;~g*4K{o%uQAleVZo8#lbv_SB6t8kzmmSL&=ggJItLmB3SY=I2d`KcjS< zi2LVJ?#$bYR}j@4o=Q}i>?CiYX0jJ{;vc1pP#T~pE;33t(DdGwyy4MGmE8>>3^LY ziW3%@d3oxy|7E$=jnfhK5eM*I$M6`C%l_zJPQdHZj z?hR`go)OZ0ny8i#Jex{4Ld`+e7G*mJwPn$MsKDZ)j99Ykk zmhyYFsx;D6Cl?G7TyJZ#EFL)G5dxoK6~$|;Ik z@u!REXkH8V<&Yfeqj>oM_il@40?}R-o0~2cxgKzrXO%%LSkaAh5Bx0)$|t67G`EySbEtIT$lAv3vIHIXMye zar|j}yOzAA$kO7~K@&e7 z$|_skoX0odCNd^DP^PfvBGUTp=g$qYva$>}Zf;|}t+jYfF<#Z6?YS+ZF-jLqr)bozhjY^gWDYPzK3Z&zd=mloAv9tT$>9a^1Fd+W5$bmjnC!gH-%)@PR z!2|amKlani)S1jOu8lmiWF^EJ*ESrApFP@l@eNMk1o8ja4AyZ12i%X1W^$rZjaTih ziDCX zRfB=hM0Hw8NeO=LRKf+M@I6E$$CQK>tnKDjs3VC~sj8}a0OdU?@x_xhTuV1jYFpLZ zba2>eLY1A75h!~$?9{GW(y1WEb7Th2b7Ps)IZqB-i;zZu8^zqZzJ9$#@j~_oOen1o-Lu6MA`i-2z?uMYI)_g)RQ3Evzj`1PiIx=Q?TU%i@HMRLH z>+a$^-@aYWGjAlvmaQ&vp1T(sdb_j0nu6rcb#%Bjv+=c^<;g`NFf%M9Y?EV*I&yZ+gbnZ!$)s~#jdWde-4Z39wwfeD5Nl)*XC5J zd`ViA*JpldG^%KA5&f?(Ll$@DgzdI)BDuSLAQ%2GspFr9qLzA)fCX5}fPaDo|1lcY z{Y+{Z?Z!7y7%uHT;D~8|CbzMw2hXu5$mgPmFC|*m?+%UC`ZZ2 z_>aGpNxns1L4jOmW%_)SwDT5iZSD3VhXYlC+uq97vA(^(>vXp5z;OhYI8-891y-D> zlP`_Z{7;rQEZlJF)TxGCGnEYO+?3DNvJ2msGIa8(5ksp#Jm7E4yKvP#MEVz0(TB?{6@tFF5^ z`-VNGu0(yB7G@arp2bq(v9NDc6i4Ile@OqN-3(q81}~d+Q`Hrc)yNztF5W{XBPAs# z^GHgv8yXtATztT%%)r4Bn3S|LkXyEUq&DGy=Qc9ZO$p952@+CSwOQl~WP@s3(>7zZ z-OSkt2JKcl53cwo>&!U0CKJhRF*0nXYhK)#CQvxN?eZ4~uZr@)p_>vF79!UU%k)ei zX?>3L6nZ5^%yMs!mCJrSiil<($N8H$cr3_k<{nJu|66Vw8oYD%DN|C)Z`T8BN46^} zfA0)Rn_4gps+S(P@ku|oF7m%-Hoa2KcsH4d*{;IOAz?+XII=jo=lW&A*wB;u1=c-W zIQAqD)OT-?0!TJ%tFEMSL=RM}AFRi}ee*`}-??+AT&CvKsO#eNZ9l*DrZwTWpFMj< z{R-rV`RAmKYj(&mr%s<{7vLM3cI(@D}_EXSO-F((P%s4-Wh|=(Oc;d0` z%QnAnHNwLw@DT71Ic$r0X1hSUbmCw<1bj-V^mmsoq;{>se1?3u$_J ztux_V;_-wU65!9OR(?UjRu?MOtTtX=UN2dz%1AOn_YCSI6z^G&YHDr)4z1NY`fOYI zzaY~~%eJ!*x0SzmA+jp2u{Z1>#cpB1)-&;{;hE%Tm6d(6vJN22`jwZo#}tX zb2vIX^w>tNg#o;UpQp(xryZbJ_G+13;*u7^@Mc_73BE7q9&x6)RaBrLPEqQd)sUpw82{ID(Vglw>;Lx_B+8%HmV zhOFO)yIa6hfMXTEKu7ZH@z!m;CPhUW8YY>k7|d786`WI>t21q+*-j)7Z`<#r>>Jdo zH#>_c;e%mq`iQ=vZ_f?#G3b}}T z{d(n%jg1LC1!^^CUJ(VM*hk(67FXwQC0yRplQU*tnf7;4m@Z*Y<2cZz+0t34Empv* zdF-!JTkBnpad~e=xd&N!=tG9D1#^^M$y1wHJaV`8a_+F;{y^~;$$TO@oNoF0bq{H0 zkK93ZbCKDBHM+Hr^yF(xGZP`^Wd4fg|2OqruI3MXk@Gm2t*u-LS9#GmITDp=!Q#re z9jSJUx45%3>vE$VX%}d=q*g>rli2^5s;vDHVYTzolIsIGFIr8kmty@^TjI?*D?8xx zmc1fnb-DNRfrIl8n88mFsT`3vAxn$tKM{-GHBrlh6QarLJj#t*C9?u=mtNyu%(a%5 z`!f+qWNPUxtcR|$lD6~mQn)V7`he{QtgE+v@aU0mit>{kLP89;Z{G$4v<=HDvK!XC zIo{2=y1F`#6G5iVF~6|n7oU+K(CvJHp~Pw3@A~LN*Vqu}OuwJH!|;bAS2#hD2as?k zN}Lg;(nuhSfF_{i-2%-`8#a{RVd77liA0ch1mS2qJEAQvA<@6KYQ3R!%}p?va|&}t zZ@PRugo=uevNfw`6S6|?U_Gj*SohT<;0aad$nV6NQ)S1X!U>mj*pD>P_w%R!y?YEq zr2l0l{V+OuzD(9X`rl^t^We(-KnSbYuZmkY!R>CKqw_5(ag7!MPTuJ5?j9vO9>~Z$ z5*o!32uf3PNu{KsqC(thdbfCR`Z-zud2<#UX@d8=^!nyTfM>6#Px)V3_XHm(ohQHW z{L<~mk1vGPANUVyMj-^y>%_72mIM%Vg|-8}+Dk>_r2(y(7YDvS)~A~2RVfFf=Ya?b zzHR~}AqZNoE&6l470#@(tHS07?@Y{D`!3C`?_C(IHf&6AsCl_*(UmkYm`PMrCC(R`dwy5e{hwUN@u8{TzkefSP3OP=xtwCU7M}-q;@fi=jEHJ$uUS3|>MW|haxn=b-+rY7zu2I(- z2yI9C`Jb5o+@cf|3-g1K7}D25VQ3y3NyM8GEIA4%nW-n%&kf%*Olg!HwhmT0^>G^j zOL<4fHoS4##B1n1B%(4ihNK{V;|I-J`0+$YC&oU5HXH-)-HbzxI~Z=W(op60Tz`0K zm-=3fBlCQn z(h?*vQe4we&CA0vJ?Gpa%1TP4!3jF^?q#M13!;7X@MzIrs8IS$y^zpsms-(~rDm(c zz(AnzDtXG^sr`0+)6h-NmdjtPTuO&-Wayq>uuuFLENt1VUfMN(DR`hpuR2mJtVbo~ zNPgzYOig28bI|CRaHXjqwK>MsbkIGh&ZnG_x3@n;06gI1K5*6IjuYE`={Oe~RxUh7 zo&3CQxHeeBa)dwbmvQ~Hv%vpCk@T7w+7E`@(tb^4x+r5Bkp23W3?w!hEW4xPj*bpO zT9r#y>-!icuzUZ0U!;Nlff?4rR;<+2FL|~j%vygtK|!MH=r{sBO$orKzrR2GYKKVf zxTG=7v17+j&ifostN@uMWLC#v!?7N-`0yd~{QUexz3^;Td)Dt!1@}knWj&RkV%J?? zS+vVdp7@)8*?+0fBQTJrv;;YJVruHGWmbuA^6AG3NB!u)MM2ptPdfR)W~5yhfN`pG zZm4NJ7Z+E!urXCaLc-o}Rn^srCm--Fw=ps@?%ucWn2U>4kExlN-~0C`zWw;IW6z#D z)(+RNzd`M5JKVYtxMFJbZwf~BL1=O$_JI#-i&AMs$?op%6DLl1=wv=uJ%8p*V8?oS zM@Mn+hPA)ebGc~!fvIU%W&ekKfh4pb6>mw-HNp=aDff(Jn|epida3!Tu%R9NmaRai zB5Bu@*@CEmW$Rj^eRn@{n*acj1Sv z*%#;9`YZ47sir<32s&(K&|i6Vd00QB|Ld#uVy*}{@87?d%QdZ?s6E`%3$5b)hYuCt z&xKv)Z4?z1d!f9@Bbb4Tg8Ec$%K_#Knxv|xrs>OH?S-*wYR@Tt){GzJahLf6tE;Kg z!#3_CXFPMwooWA`J@TOHq2UBzB=Xq*YpW~EvyV(kEf!)>PTsG*G~3y1tp$7x(Q*SV zt&c)H1BjdOBL?LJ6}fTsqA?WF%}h*;n>TwN4`SOWL-7oR5yTYa5I4zqGtxHW`IWhz zS`nWpvgY9#lrIWpZYwob(!0LV#0}+8ms^O1J$lrSfc|!2YEam^TZ(esI{Cy#15kb8 z;W%&%iPSr7UpPJe91PXV5VM&Jgyl(&g~Lc%^yp07?Ubo;Q;9r80s|CUE*Bx z?wyb8%1m3!m(uL)dt?TXBFX0h89E<5dQ>&`_0?NMjCV*h?hZUz|MCJnffP90T_QaS)TR1qbP6ny# zVS`YV|DKv!H#S5;<#jtbIr+{ah4RQB@Ym5`=`xi3I9ws#;Kq*{L!Hb=-@kts4m$o8 zsi2bYY}9)is-r$q`8u_xbx|Kk*$|l1>Rg}Ej4FK;$daIt&9S^x`nCL$?#y(6sx(EwoSIa1&G(kA8QWSjw7n3g2R`t}R)X%! zF|B1w*Q55D<^8^`<(poKQQLdlnyaDIpXFYg zm?i4Fx^(}Qw@qC$Z9hHQ_p>E^D~e5DoUp4MFV@-G+LHD@=lTlU0P!}}T+TEE6FT8& z_nV52!yh_z|Es~6w_w?G94GrF)K4rmZkfsuo?t4gS|4G=b+}UGHBI1|h7ymBsS!vT zgoWS%zshka){WRdF0&nG6SK1~=c6FFPqqCd7P1j+l*HTsglQYZc7!;Dn~DB_1ChG+ z-VEozuQe}?710i=l-xYfyO>PIA(ABVKYSqh*1yno>ti;0P6=-%u3MDg)D;1)R#%s- zF~P&}US;Q>o~;0@A-lFLiuW|Now(4%23SKNGfI|~^sO!%rUi~dj zL37wm=|`4;Vd11?xke3hzY2ChyJoD1aJ0QnMyP)Pm4}F-l;4RO_Q(1~_R7;wDgq+@ zfZF5?Tku^!TQk{-vnaLrGjSf)2b+N^+QPy@^#wL8xWagM$z-Q>87P?F@uD~LGbb|( zx)m;6;virgm$Xx}d2;r?QKgO+$M2*G6NhIngFG*MHo_m|r6a3xoNrPf*?liQC&Z%I>~VZfKXy5wsaPkAU4#?HV?htkgOf#fi z3`~2*s7mtNN^%SJxNp_M_tMw#MCd72cOm~73WZel1k^8g%kjR^ zk`Bi)z4Mhnf74+U`?`5l$qpwFZYUxv9KSyDrauK8%QC? zea)>VMw%U^NWNR`^0Le2%a?oSdfcnAlXu46g3`NzCZg4Y`|wcgyCv@6;+^&{AHqAgc*nFe_~jZ&Mk08h%14@G+a`wJuXwUc{=+D z4+LP=6WUda$X8dI_z2OYtmUHedL0E9l~4MIvzK4_)7r_l4xXu)iqvqO3un7_Vbe=h z-kd<}R-SizdlB*)FOc2+Yo}(0I$&4c9B!p0CQe6(&24SP;p=O=O#rQ_H&TX4($bYj-cxv!CTP|HwAh?|)9A7B6|pGWs^EzUh{hVc&m$xOSaRD z#q@Any@j^y>b$WR>vBY-)Gd*+_sLMo2q4~dzA%315VhlVf!?oG8QOg#cTRV`?0;L5 zC}b}f*Lb42OhVj_npJ}NgdMBT=W`e1cVFO*lICvizV`4S=T69HukIPK*gW2^tEj(j z_g}JahE?~<(p)2)CV;F1e%x;5D0N_KNIV`y`Jtw+t_sm02q?LA!I|gBT(hH9@AASF zfh~!B1xJr(k7Zb}hQO~w)Dr>TeLrk3Ki!#V_f+ng#OzV}Wa_d)GF~N_!r7kg5|nFp zi9TtK;`38;>*+YjBgI3=J@>Yr5Ox2YpiwS@Y; zm29$F#E9(c-%l;0>{U%=o25_WRSG6X0946EOlByr(jotdGru9`(^K6xG<-uto|(Da z8{)>%qCY*fo#~HkAp9E$?%1clRk25e9|5vu#k+v5#KA$*HEho|1VL90@Yz`Az9vDx zD%fH!HJIhTwyMdwd@`S#lY=80=^C?TJpHrLGltzfpgK+cmKPOS*)lnYG6sfxR-~sQyd>Xkf-KZ>t%p0~}?J4DKN>M(Fs;m3fAZL2r zyoP4tkY@<;wD!JFYB3FGMEz*lt76%;nw+WI_*4YNYSsUVh>3{_)+=%1L5U&lJX?92 zVy$RjL~=2=+dL94*-yYQ@RB-127H2oG|1M+V7?-!pjem%`09gDE%vKskf6DU!UT#5No!1} z!4oqx??9)kl+FpLppAt57SA69JL7yjk7oq%b5%)ZWw z*w7(63h1t?>gwL}^Nvrn_belzBEGB_IHRkp%gDiTsZXx~@~^@`RS+2o%9TzJyH|w= z%#?85K*CReb+TpbJPc&PT+%wjuBvVftSlOKLHXw%uzgzVaOf?6-Eu;)(*K*xd@n^S zEP1n#u(BcgzQEc614ibA30%-z5(CuTMtT$*d%!?tt=d2+J1_4baQ5HIuY%dH8K){% zV?d9~B(2Mrlaj;;NWD+5INX+l|CF9S{aLe+*SJ83A<yEzrO8y(mvGyE_!TMMwJd!X7YE!|b19A-8Jui4wzav@87#Y&XBDLAn75S@bp+U<`L#3S zEf-6rckZMF5H5t01SJu^RWBGHjVt{bVWu(dWS7kj2nc|Up?VD_18EY-ywr}_Kw+V( znlFKa&%(`uOhDF5kJX5u;e{gUWRxwU9eG-Sy2w*&1#DtottpW2MuHE>ISd6M% z^J(Pu>(_1OCk$7m6E)LqF`(R*iK=T`59kGM)pH~x4)5pW)5FEFX%e%6)j_t~4TDzH zTXM{tGGsDR;6)~4J@I6mxFGzMnT4fgenlPSzWvt?=gu$8ehk()y_9G>Pz4MpmX?a0 z0e($+bYSwpkFW|GQ6dQlG=Cc#qr+I;77`}(9dl$KB_g^(Lp2|a6BTk2+8dSlB0o-ZmoI=*R$;V&+r z4}z6x1ggm%6|=gi+ozH}i;5&s2@}RrNWrJKLa())79MnZ# z9-jEmk%-bYnooTE{NRITgvMeTQANL>$AX})Dl0eq@eMUwhyjx_GBNQwLNNU{JZ$+$ zyD1WGBGkTqsJ;3z@p6Ed*z+NMK3nyAL!_H@Mn^^nD-L|#IKgeNQ&8V$=oW36ot-6o zv)wLJ%23=5N7{1;5}R?$7GJ<9!hVhCc*VwYYd*hp2Q%DuOIBm9eF-s{$g=4pPk(Va zBfM+0J_Kb0HtcOv6BA*1HZ|pgF)}nP>|K40y4}bM4BV#GLHESA&7B7?D!`GhQ4&i~ zGr5tZxTGZS9+?9N=&yarBfJGRkRb@^8R)&xd2WBV`)hvbHabJ+$JdoGo^af0I`5%%3aV0tA~M{#PY^Y!5M{_&oLgUSYS=LCJ{XrKbqotV9y@IrPWs*YML$bJ)70t;M#*> zgfjg@o^E;zILj9G(vpmf3QX#sFx*zBEHj?>D@CdhB5)IOfdF;WqT-?=!bQ}yY?ptRdXTODC< zNFRNg7A)OloS!1r_3DP-p0HC}*w{Wk*DKMG2wYSMqg06G_fu z`@X=j&23u+>ky9JJvBFHh8L1rn+ILrKGgJ7TV9@wNV;%^o58(qj6RA!OT3m5-sAan zdpel-7dnu~YtAAF85z-J*bW%A7UtXv0yp;O+hF7%zI{Z0ZE-7@V%8>vd5eQxDgv4r z1}L)(F}kauD3_P)zP%sRZc2HoWs@B_Gtv=|WeZWqMH%bq5`>j;iqf20xlEWz)|hS_ zBxS5eKDgMYNNm(tyP?m?U$StdKasM*0$4g^sa4S%4?NKbh6O2I`3Ev;6|m{Yx>(tI z%?z!IZl_^ldG=`ODMJnnB{NuCsCN%9E0c8|$*E>F4!q^)I6)yNe9(JEOAiTmxFMdx z5>Aq(U+GzCQYXuJn#04x-y^VVq-O|Rc%BWPy;eyTkW3DERLw=LYo$+9#8zk7jp^tD zX}Rn63eu#WQMQ!2bzgYv)+z;s@D9(A-x<2RjC8c5;oDFwvOyI@=DVVUBLiAiiyQ48 zO|qU>HhJn(or2Sgi<@uvU{hG+(YhQL+=xO{# z51sFnYGSjL*pOjmYPa4!aN~JiMk->Az(XPj4jfn&5kk|6p_P@@RX7h?+=37psXSOT zXU29WQO%C`)FW$Y1GI-%7#P54U!1;@ zJ1Q+Dh31D(Nk1*TV4J9Rn)&q(a>06x>ZCnouO!3G|imL@M?2TFW78{ zgO)~0{(5&cjz3)A8R=foJO|2_HxCUBL9=;>)hEOxP^~9^J(qsSe0X{b!PHcp$=3<; zT2HU=w24SUauybQmseJZnpjY;nCKwMwa`<}&?{jhIxny=!dKgc;JbWKW|lrAwgN4l z;BNytC0j=p2yuA{`&^61?G zU-jVq6i5Ao@Zuh*qX0fafSvoXk>G|%=#I%OMoQ=d`xt)k%4V?ZJ|IG;$9uSuVbZck zGcOiQV8a_hTLwFsHZc#4rXl^p0jbsb0i&C`ns45|we5Sej$jxF8Vv)_ab2=^baXt? zC8oA+U_0Q^dav>lXR`HvzoaibtKd%6hr^wL{pRZOE#evBpdK*8IhQ|d{#s~DAtNIL zne0BzYPk0zXj_un?pi2GVSL$(J3xeN8U1FYs>(bAB)UIfe%b1?T@OcCTPG`G) zihl5b$z28g2UnNTf3;gcAkjJOFi9+8xN1RI6_!SnyRYXPjOY-W@Klp zHm@T?hrm9SOwC-p>xjV$@hqeTNwo6LGCYdBhYlgp!{mI+59x?g2 zD+?W0gwzcj5Q4m%p_M}pOjm)38OZ+y#ARseI+aaa_68%~e5onM9zDLuj>o{nSSJ!}pcl_Ik;px1-2TNc!@nHp+bwj*_^-VDdxd z?i^Jr(K+&Fn(LX-_hU**0Zs~8?Gd!n2f&$wo^-KUJZn(6O| zF2AzX#Z5$$4@87`6j6q6sa!C=pI=|)Zhz$t(#)$XWJWlb@LZO<9KrnGrdYp2T3WZE z#&^~2p+x;nhWVj93IqL{e*Hz&h6Urhc9%MH=t&kCo6eKT;~W(q{!{HM9!Fq;*CXVu zAN>FhH5y9Z;Qa^#1;BSaNYDE-qp$$`AVGCI4$wl5?M1JEoQ_VUftL(#YTcEGl5n{Z z>K00u6Dlgz`0eDe&8ctVdu$B7 zjf(l;mCux5q~1WLo&$Fjs)V>L6ve;_Yt1tvuEju21{;k?$n~=9|vfDhA!}hd&VzkDV|zK5l5ms zKw92GmVD|i*Jeh-&qS*Q@erEEI%MzV$!c!&MEt4YpyZuyMHYnWgLY2`QI8;LWHSG^ym>&8dr`h&31z;@$xB{=_wN2F20A(0~-w1Ml zcbM2xbln#*Jy=h$fhuu&2xB0K2OR&203pygI{6kpu!F1vLQA`_l*3~tBbZfK$O@gQ z8WI!(8{1v*G1?}FvSnJ@4W{;wQMpCx&Dg8BY@!S-a4KdVr#0GEOS-S~z)17hNX_Cy z2Rt76!MNjvNw}yP-B@?YCb;KDIt%DQZlzE5W=TY}V6V^;ZJ>?__6FA0A^3YAmI>+; zOL1}W-i-3F{=&wgn+ZQUemf^3%xe|d?}LbZ5B?%-F5QVU@$dI%X@76~oH1jcFPA$x zv;N=hOgEWDb4$P3a`>6W+@eA|-@8aL%Zb*D);yx3Ou#rSg1LL)f84lnBe8o?y%PO% z^NWiKh*4TOM(dE+Oj?RxzrHn<@@?td*@%`8?C_of*4@SA83Df#b)(w(^XqE!__TlA z@*~y7c)XJ(7a*Bst?%3@mo_I$oZ*eBen|O*!UwS^5xx$b+P4KgZUHDt;biaV*A=cL ztbi~+?KpUl8JUkrC}_gFjZq(eArrdzp`wDUuC9*wHhlT1L8?>AspP)y%RLAF%}o{* zN4A}3<^=4OgqXx3 zWbmIzO1_RG<@|wtgfjvV;&&Tu#;2>>Q@yMbJ@^aA>#o&wMoV+&IXsyCNTw(?ovLi1 ze3yIC$n0)J0T{GD{vhl(f{sJ(#}QSWxO7?!mQZ3m5NFFV1-2;uiH=5y%)(m)wG3vY z;vwYwyPe$ZWUc<~ZxIH@8bbYuaqQoSPL;C_HLveq(I8X?7_Wpwh>2_8IN1vU8Jpnv4 ziLk3ok9KaQqodO*b942%miyuboN+a>rhCR=3fn+K^KFg5y=W1*&^LoV=!SgD3vQA` zzc@kYA|dSmE5DI;Gf{a}jOYvhM#Zm4(BJ;WI3j(aN?e5OL4|@54pU=v)!;CO?d)lS zJJ$t52SJ9SlqKkONcAj)8UwF3m-C2l`j3<6jNw4W9{m!BS9x?Lv)IGK!y=ZwoxuWd zffs7}29k}r0J-|Vya4w0Rbccds@Sd7UypjO+az@P{k^?Y7^mM~Y%V&P8EYfOM4e+& zQM>%^WUKwlzW1udB4g8@Zg!$iqLl(0%R?dl*+h>(R`CwIHh-37c=U+b>vo;fogV9A zC)_R&EaKEo7JNSYwCT36@7nU9?EKHf5C%@ppcrZA9Y>CA10VV@&${v@Yd!5jy~Ek4 z&1vmDCID)F7wF%#vpWU}z-QQiTn;S_z|3F>RTJAnz!swGXS2 z5$G3G1+RcWz}kUBhqjP}4Bt@RaXxM#0GW(%!XSGR9S1n{gy2YI=cK`TM5;DDXIkvy zc1#zF6(1NL4WN48pY~%&M7HYhe-{9OP?q5M5FJwFGnrd0^8fPxb{;K2okj@l-Ol4B zY-WUDuOhRM^sbu!Y?MDl07J~A%M*ooIbSYpEUUT<{revNwlLI4hezj{b=VGD2@bOjFF7Z^hWovt$iX@Z2Zulf za&jaYs9T^)a=Y8Y|E61Cbs=06^M>xDgyXm1+8~^ihpf9V4GmyLJz$;$(M^OdI4`|@ ze9(O%%7?BCl)UNZQu0sEtnzOWQp*C}_lGLSS#SP%3kDS$l7OHf^E0z=hM=p60(ui2 zo$1_okC`7mH}U7=JQXy60&L#Hc?cpi0QHf9_R7yPCkZ3?NP1T3{nzYCzF5Jfxw5rd zQZ_8<_Q+$YMboON=4*O-$`qE+-qMbwIiH1#2Cn=mfPhJ%J^!IU;GMkieHg;}6XkHB zcpcY;k=*)r;De9u(pF!^ABBf&We#rclo$0N7lws#@Y3!--I4*La3Tc?6IVuHd;|$f znixF}>~Jc1GdQ3Ii+mSn96yis?!H1L4XnNbUWT|b0Bswi==6i>vo}No{fy~t>ZRkD zAM`XX+n(=?jB#JRwR6`lL&P0N*vclb9leBo!9fv`knrX}{LXe5*P9;cU@BW%l|*&7 zVB7*Xq_tTf>XS_%hE1~!Q~A(wM)bU9WYk>s{Zv>VxK!`>+UHdA8^Hd)v9VynIF{bB zLrRK6c6ovVf$Kv2c#-|+8}E%wdq*x{To1#-ct8)L{>J)<-~7oyfZ@`VzYL0US#3{7 z`3G{ofY(9KXxp#$^bbp^f4BA}8_33@ZO6FBA3eO(-$0L=o*st_HY6@?J0U<2-J8x3 zZhHp@{a_m5;pbnEy|%~G({tYI5ITM>@*{gn5ygm09?)&Tz`~-zGY8xuTGXxmPu(^B zozYQILN>i}P}V0ky0trd#5~0{zJm z)|=4#_dNmcjga@yIU|qX0;zt%PJ!W<$#+6IZ1gDnwYcuSG*e*QGi zJ%di!pe2YxeanJpb?44&RL8*k0Eh8iXvRm;1uR2ho?#1%I+6+V-@UJz5Zx(b$qv%B zLnX?$P}>_uv=G8PbQ?=)408`LOz>MF+1c6D)oJKfLT~`tk9LLdj*-T<7Q~G?f4ui) z%lECb#+HVVT8Szo8-qM0+hcLD3E>+pd47l&8tp1o#&&<%02tu8%*%TydlrTL6)IID zG%GQLozfU0GfVA)po9bJhlaM}AzZqBDjeU%EL&-icGDZItgZEjOxEwUJij;0RMtD) zB1>60ET>sdn_Iy0upXb%&q!h)qqkV_QXvEAbO1R;ctzoY09}kL)hK(5bYXZ-7Q}D@x&bdLSRD32sRVF z@~B^@yzW9)vuwG1MOI^0BCMtPsS5X{5~uvnqv;Z}NCETmk;(N1Uz)%5_j_Vj$lR3O zwx*v^|NHln>d*S?YDZqvoRP*MLgo%cNzwXC?+!Y$?9s>Unw-cQfv^wswN~GK%kP-& zviq_t$A)MAYLrDrN3c(hQ!*>C6!Fc*ZDdPmPY^az3d%|3t9s^f$LN4?PJ*ZB_P7Mb zP1OF(=gvjuC3cV2j?e?4I<-`^1ZRpT5)g5tB=CEXJ1OV(vPZ>9%i@kh# zNKjCaDEG9qwf86%@U6o2AdH&}fZG$nT@ZT-Tvj;R%i{q9^8i&_Q>+pLyGJPShua9~Izj`;Hw7Ru!=?IzxlpC|ov-XkdQKtD$)h z5Ly(p45AVwpy#*uq5l5<gR}4)4%GBmo*A1anekrrYJk&r^ zJ+`|{D&WO5ZUG7_?JFrhxRGZAT2{c0ps4X9EIuIO{DOn&kZ!2i+1ZnwnTNYdUD;6* z&Hs2}O*B*xWgC)+c~eTzSN-Vh@8=>`Oc7OkCmr{W=ET3`UFhlmiRN7Vy&cX`$Xmq8 zyV_m64gP$h6$l(BfH3v`#{oFc18C6Wo|*Cem6P);C;o%4(%q}*4_o-Q-P-^$DLX&^ z9aO#Szx_`@aYmVE$9u}EkwJVA_c)}Tm?1e4BQwC7L3fCQ>X6ZrnUk2De2m{Sw;WC* z%z}{9v^i1OVMoF5@*?R#2*;7l1b0kL{RYK)-}rb4oM`bl@_8k@nRlTB>mxr|Y<)Gt zmZ62kT`Ur=>EeZr2R1QY(uvx==c&9I(1wtJct%|3gImG8fW9F5GUCDsv*fdBRrpnC zrB(J~G8?dIIBP1QDH8)Rd-Euu8fs|5-&vK1*(Y} z#FY{#R1OY~37qYIoY5>B7YM0DU)o5AC~+}_N{rNPFR!B|!*L&7HCUEtJDnb;#or+9 z2|~Krj0Ii>bxzD{MrI~q*QS2rmn*NQ$AvrARMphTv4MUL4-?MopPdB=%4B2C_rb-X;bCKxyf-VZQzze6P{LQz zSzBAPZrf%!+5e7cwOCymmj&oOePz?3)4ZtBU1Ye^H8bC&X{4)aY54?}{aqZF@-_Kd1H zaFYZ~C6X!dsSykb)Qt}ge{8+{HZe1E9}L+^pSixr@7a8Z0X7KS>_==Jh)fKFqk}qIAmvPi+IX)@<6It( z`HMbA5*P@LFUGnDVJai06>GO1CGz}O(KrKKFNoKkZ~N4@Eu)Xb5InAssOVcFMA7+C zV3YY!xuQ#A=X$Tv>am}P5`FU5TVRZPhgY{<_-%3!@D99DB{Feb zN{TOFG0EerSb9QnHB^8^ICKdf2V=wPk|WG~w5wEMoXd;9LJScW6AV#V?AQ)Qf>K7J z;RXE*ex)2mQ+#5g*R81^6}VpS%MdeC8PR5os!RCVmxGm+mE~wLi?L5i_~n|-=QX*gY08*4L|32ON>)3`0+@*6D?%qTkZ=`{0 zfb@x$3;MU;_Qj!;&1eZyNEJXa`3~G<4(5&E8o(K+w=6)UVFgV&Ju{O79T*arXUjJM zY9BQRq(Vc&iA5v|tUIm>fSBX==+Tz+ZMit_@`wP7bK@ZxM@3By4dI%jp{3PMXG(TM zxsdneT9rD>Z8;B=mi@R+k+}Y7%l=FL@TbNrC@3kTRi+Angs7|f9_zaiUGp}uX{>9B zREXcbPT|}}IFL4wK$0dhOZytaDoSn0nxZ)f={*$h{{Y6}P>6Cb(0P16GBQoIHu43w zF1ZKt>|=k$9X`Vv$2**^V#5d@I`l}&bx}Q8`cd0uR$od=%6s4&?<1*xh8_O}_L`cy zy86@MRdBjVkRg(A3cc$G-IJaQs+VMac0P6P5OH$M-)om+2@0V=f#4##W(ZF(!Y#yD zqaq99CP?CzPePAFgChq-b7Az{E$W>1372)3A=U^iK&~!}kD87SH8ADX&X=_CT;OUP zCJ=?1gN$~s{SNpfd}-Lpz#<=^T^{JaefbvEAr;HXH!wuY`b-`CE{g09oFTlahX6!U2d03HigNwvgGDs;p{XK6b7>FXG7zDEd&f z-OqfRm!EHFYKqq5@wR!Fge1Y0l-w{`B;fp-)+}Q~3!N0fH0Idn$ zr9YAn{vU*W2Uw4N-~O+mlBf`AQ<@}Hl9n`8qM=e66m1RC9$Hol8KEI*sU+<*X&I50 zQldg78q!q%^V|Kb_j&L4_#emPcy8f0uIqb!#(AEf^CJuV@(}DlaZg~GMoowY_OL48 zyhP0B=l4hUXyH6hIYudo3+Le+^Q~Vy^@Xp6(XOO$Qcz5&5+D~Xn&vIf?$R)7{!PXK zWAD|gcmtVjLVB&sSi19hD}hFU_}-swr5dl`#|WUbsHEgGf)o0b8dOi1X4(n#F89bT z#uRbF(V~7m7aF=O+pPE;o}AMooormI=&6GeU$@6fw?{d*swSl=NG?~|E5Sq)qaiS3 zqNB6YOx(!680iH^esp%y0aeDg7X!-pn@Flaaj&=`yWo(*8-xZ5 zfos<;tryLf`>MQeAI+v12BsQ~Mj5VEsBu!RfAqN(p6-7(W76;R7bRm4Dawr(u_k9t z24WY_8)lbk2q;4#kEABhE)s>Z6E)Ktd>xV%yuH22TsBU(jdxbY-4NxCkMr`9a&nl@ zU|85w)Ixmqg=p|SIBN~Oy`2U6XW~U~xXW+>x!ebe@}7vUZtM%hWsI#O1sj1lnFI(J z0^sfRj}IGAwrOZ-k-p7Sjt9!(LrIai+oU!?e?pI|a#mOAxyR}$eHt1XP+<4XM^0nt z7(#W173;QCf=z`rTgcCfMIOYz^fw3ag=aIu!qg(Yl2lKnr@-MXQu6Zm7GqocDiUbOwFuj8364*!d2vi6bzJOu^wad$lA&<8~ViMjva z!Tv@sIUe#HDl-7XSn1&4fXVk>WDTO~C*Cs1WDR2&@3ieMks^)Y8leNe_kHH4T@lU= z#wVbGJP4~bs8Tdv64DbG%5-er98 zh4uF2J;8Qu@|I|2klRpr?Dt1$rAS1am|N15KU(fvTpdg#yPch#P~fK}ZhWN=Dh47T zf-aG(3p{-vluQDbWV9wwwHs!7=oO@vJb9P;c@Tsu8MlA(VHV`dM9R}*1?#$TJWTRb1IQl;vbXN8$BUuv;ge!2??n?j{rXmf_4Q8SQDu;@XV2 z43?Np)z;P?#nEA$2sE&xJ;=wx2O+ZP;3 zdCYW|CXKJiEW2fuP!{nY#yF@^==~7f#?OeJF~#kUD2U&J%8zQ4l9aqJxJyF}7v`#L zyZVutL~-vor(UbBv!Fy?>vyGQEgD*8+d3{^^nrQqTw_M*LpKx64FfOmyb#AKB7X+L ziw8Y8FK;ISXbAbK*K}iGd0NTcXE`c(z69!otFN-J3g>?-wm8@MWGRYV;(gFO8zCpB zDYl+5^q{_ereVUh0ZreP$B!S^z9~V4?i)r+)lho?TBJwEjgv6gnEXIf zy46TGcKEf#<^Bc3uf&qdw7{_neaH7Jf`stK(5g#QV@ z)E_9>$;3Yspz4`nCZ4r&U?kmbx2o*v2d8L|0!ymjNKxbh7R-j41sumDCzhKZUoX>} zIR1Gx7lkWrZ`N}YrctTzv-fwgv+|GZnEZ_X9F#*~e!dhk&P4i{y|z(k6*rY5g{bu~bwE%aL7ljev@~Iq z;nnT!H%2n3C_Jf(VNWaMW%GZ84Dfq)cx`1nHL+iyVpm&hb>~}otD3x;xL&DIrtxR* zJMv^?e)DOs9NP7hVBVa&oK*myqaL?%aJYn#n92_y%E}9bBUr+$$XpU?%O_CkgE+*M zAY%5nDO&3Z7=Wj`2wz|Q>kt}Q2(%E$l%UvXX=!-_AH@_O@;HJ=fYo6L!g1)2^tmsu zIFWjKaZ%xZQ3v&yHjN@<=y=fVkIm{a%us3y;2H|X#l<~qX}N~));2T`NP{{M$WLRw zc~p=5rdiWT&47djfl}eyEXwDjS!3$g-|APfroP}CqZx8Jt$O#TZ8e%x-Q5?y(CIvu zKemT;NA(dq#!zLqkxr@cp;ocagM*sT?P?(+ZxM)Xr^&y2A5s z!sX=T7$`d+ua1g@+-JoheSHiBY;3iMiZzg(gX0Q1(3Tz*DUEkNz!cC+Y=m?l1+)!y z;fa500oH&Q97p{SYIpr(&Drt(2Df)HDXB~xS{6=QmWuS4O`IH*42Fvgl$2!w$5b}4 ziin9_o!KkCMNB}^{7;Nan`?b9O|Yip3C9S@Q00x=ckbk;2<&}ioGh#3mAv#>4@X(C zkJm6OMk8@ufx7bwkl1m6Vw&>55mJfSxK#7Y#>P#ET80`d!fmj}-V7|hAJ|Vn+K-Lv z)~)M@*3GRo;~^Ss4NMZ{=H>BI>Va)&`1_YDPhL~q_cJp>XQ_VHv))Ie#0D<$5`_=4 zZnt7{!z%c!gAj}XjU0pFV$mG^t8Xj8IA29I5RY0b*81ehtK@S*yx(e~Z@vU&Nxenw z-VdzI8iDjaSZR!AM_Yd{|RWWKF>%*NC@iG)6v3KPEIRUxfaj3Q3_sMgy913$aMM=;v67C6Xv6@zlF}U^PA{*A zYRQ~H!OuJEYr%!Dv;f@5&<8rq9HT!ls))eU1~F@ce(M|(Zo;3;q&1JD(^2iF#zYu+%OC z^vJnEm*Sd-iAKi{MXaQohL)X9OiXOlvy9_z7anxDx;;5i@|n*CU-F8Lnth(53d#T? zFvcGe&m9OdcZDe%YqnJ`z-Lnx0c6i&OM<2l<8_g#KUgs$x3{cV_9`EUt+^p z!}v!#zHOhK@1&n7`_eEld#$z(nDlnP+0z1og47g9lY$VClkkdCs}}kJY$*^}AF7Ab z-`-GxQ)`W%Soq_EjsV~Zk=_s|n}~>&06oa~{N|R~ni7AM9b_t(RE%io#Z+%Vu*2Y3 z5&WPf3fLcTvGGHz>k-czU|NzPzlig_5feK?`?$kaJDZBzDW*KNe*Fu??(|lcZ=TgdEt?j>h4?a8jT zS^&B7l_LSF-TG*?z=XjRIypI|e_bA`jBnz5zYxF(qWdu@8gF7o z0e2CNE8m%6p0N*=rp|@YhSx&<75+TpcME@cRK?m(l+mzVKkNkb1H=jhjYA?TIAe_F zT;FD~D$L5#);5jhRbxx-@fp51ZEfqInyta}OT^{~nn`%fi77U$LN~f+CvN(Y?#XO{ zstR_X6rjD8I5z?pwmr$wds>_L500jz{_VSW`@r*r>O8WsvOnT#6j?VIl{?*VENy*8 z-}jC@+oZSDsK~C&7;Q5zoBnpEkww`BN_T?rBVv=i5Jb{EIJg{*;xCvEb$Yj+k&JGZ z060;FlTsC-kH6a1=#XvRoGT<{R zq2Wcn=l-m#^i12&%bWMyu)J0yOd*Kjc8s)9lz{1D+l8RvPN+ff6$s}B{e`8C%`zz| zDWG|!2Y3`3*Zv+1xA^W~b+77DrD5`IuU+e$KbCLx+I$Nh1|VZJxc@lWB6x#HqCtW2 z48}B|8v>Yk6}V84ldcKZIx*E~Y9M;(BBCx>Lnd4x;53>)w!$N+Wj)d~1*iiVOQcY6 zkDo*LtSBpp-7^zk{OXHhzmLpSI9kX%$!p)17)f>~Y66_j0E2P}a^~S^N_;wS=feS@ z5+%9Y*e0HpW^2mmw1Thi|GoCh24D7A10y5n8-{1(y=;3x{b4dZ2=EF7kl}bftRTPH zG4vOv5EfF2o8-~K z)ekd;KKa93&E@+iIf4nSwZn4v^3Y8}AYYkLSq%&rdYPTs<9i+~&Su>B*m++-!8<&@ z8?R<(*Eo=%paU7X26Q9?hXd?dHtXNK$JJ92pi9QbuUx;b23emf=D9Rb>vuusj7uX# zIger&2AM%he3LS&&YVUY#(2t+FoiG-bSQ0IsPfDc0z*TSx{neKF6>rai{$j0t9S3} zfalc&kbD7L2Z?E@tU{uh1Jdy3%WEXuCio)8eHcx79tp6zvNE=>P2LjaIM`~q6E(@V zp`k0Nh@%lwMa^=`ueAf&-TdXtmwpu60x~i;5ivp#N{xIXI%$K>Od5MJe*_)Rk)Smv z+Umfx#IHU0r29Ilg(1vJbiQy$v-#ZN=jcw};@Xka3e*UOE0`(0CU72S2~Ek1maFRr zc82b}w8QFb#5HJ|rFq)d0hJI_fic4$- zoies(RAO+48ley;5*ra#;a0tAZqE44@%ei%(YuyDKXz2^2lVA9PMkm`{R~BOE|wkK z+Auxd{E&HNF=9hl=09S?^zwu6dbgq9g(Dq0GG)-NkFaM51n53A?>cdkhupHnj&;A~ zm^#@Veko|h^^e8}c810(f#LG_*%N`}hleznnTe`+-4pzwb9yEh`lgn3Wm6 zfB*gnP6ue$xQMhH(@hd5Ua}Wt8g0efg{7y9Kygh$bAAUFZ3KwOQfskJdhmb_(Vq@m`OF_8c>)E5BGVEbNvohY=8rCx!Rq-UpLxQ=d0Cs*WdVqTBtZe^Bqs4@ z#cs<8yZrcZMoc{NyxpSn3=}^u3n6KdgwLaV*fkygL_^@55+9ie)7H@e zrWi$N-7o2)aR7rLa)O{SOHJz;i!#}>;py#NU0F#9SeOy=>()v-*b)4SX>B7th5@uF z2GezYWA?t~=*TL=MeYxtlolAZV)Tms{Ybgs6yp30&XMNn(~|G=9oFaO=Wm8z$7IIN z8VQiSsvww~CB;rM*4fmG80a1n*8d5G|59&ITDk_r!Q*4k8ABabZ&HjxYUBfQBt(8u z2L*m8^U^;dowMm@rpz8s7}&NBVPIAL%BR~fi)i;wbF;9~(r+a=cn!a*^e;9Snk2+v z&$-`O{T3J#iFjSgF|iJ)ea#;gCZ;;iYW!dA4}aR@E7zOF`)=4OWqOay6+wDOjQ+q| zOS%J#+s9wuu=r0_dSp zM~#tr+A#|o(|>;_Ns1$1T4rVq0?v3-Wo2Tgdvf){Xgtd;I|9euRcYEk`gz*x7>i4hLRFwx*G>(4(ri(EZ~c?G;!} zG_geTiE)A@_d?R-Kv~gc7y|JM4o|K_yExE{{aiU7}7_2vx=00IJlLhIPsTWIYKY6#dh@s)$Z0j(uHfkRzgtx^>3#|<_^ zBw^cCuoZ$T13U5+aZxa*=`pk5EN9Gx7EI_Vx^ZzrQ5MR4}^8)U&y;#NLUh5}ajW z3}y4rN=l-N(J-(Qj<5NogiCS4Yo-Kv6+1gSK&tv*a6V0GJ9@ZSi7)M-x@+L3?9zk6 zA?QT{nFB6oj!UM!;`?y>4D)bxo96Gezqtoj#4G4NNNpSuXhZwVIAKt1_R#2~M;v+( z02#f1EntI9f{EMKTnp4jE;3wrBZD{B3RA}i(0&2Yzw*>stX*D2WH~$mLSkZAQK!*h zWR29)baZrAyjRek6IIlW?MnBx$jVH`g(O;H0I-M~5)u-XL_X-~$OKdaWd=WBJfH_f zu;_qxp9Vn>LQER8e^-a{rJK$V&6>}Yi$-}+XZ-L9iDvXOWL+X8?nEi@j{h6efJnn`CbiQ`etkA4%X(C`ErU@1Hro#HQ;9FW@&>W@*LT!=R3bx;g5IW zM=)jO=00k5I;yU(3c59n7Qq9acGQYn8tY`pm;h$FVc8$l?}^Ot#JQW}z{f15b5+sy z!@2JFHgJ^|s%U7OzYhx=ZiuhYgV2$3QKTK+DO_pI%Y83EeY(F9VaE!n`!-z)@jU#$ zf%{%NIFrEXH9J@6m2=!pe-GK7wPjULq~A$&x=3C&<=kbDYpMyQ%3r`i5CQ;!1(X>G zs|^}d+Ey1d5qM@IsTzen+$PkO@C|{R)V|~q2oO(iWxPWVK2;1xHD_7z%B05uWMWE9LkxT^C$UaH}t2I61W9sTx*GPao z2ZbZAr0_jJe7!CsKqYpd9=(k%SKbU?2G&1N8=;emQBZm0+GOvTt4EfXaxQlupwOmN1#Q zpWs$(CQDtv;}_ebbG>fGdVB6X93P*^1q@6iPk|uQA1F-@d-&;{Zkl_A2Q#;yHw(9f9Qrt-7IChGy{-*~8)iW1p9KBltV$zLL6q zynXcO%{LCz0A;LtgMzM{p-DL!4%QLZrAWa~!XzrnwT9j*T)1Mh1_fvmpXpv*s${pBJ zE()5Fm4Q}I%BJ<`VK1EoAL<~b@lfryoyt8;PjO9Sqiz^Z4K==Kf9h*t7?Rpp(%gBF zH6Wq!hW>q^SR53^Kfl(1H6=26aAw2^2@w`}Q>@o2qln=AWFKmlRNr~U&k603KbB{6 z-1Rh%uZuxWZF|F2NGdg$s~DoHTySGhkGB7oMP`l$2$lDUhb5 zZJEK3Q7H8E^u$dNp6dzLK4l7iv%SDh2}eHcb3$Ku?S37i0U&_&O&Gl*%b?4kMSDoH z49>k_{MY8vmA{LBhvzy!pKQ8(CjU`WzM`3T;UVjM&aDw!^{2sYk;R&rj)mrt8D{0a znBXShWBKe*rW)&MOeB$gsAK{=?NIV45NcFekB?^AqaAyWe~C{V3h?}UcjEQO>0cNiUuPyUi_JINog!SE~GlSi92jnBH${ILSr=(n*pDKQTB?}Wl zU2xXG1Fy|^r){^rs7}*Pn-gQr$jjx!B1aRi{3|25EZ$RG3q3c=?l)+Bh{6!Gp5Dy| zaw6j5weUzFnn^UqR?rs`sTAExju1fMlHdIGp(;Z`l#KaW?XF)@@9<{DoU{Q)bA0vU`~)-VT551z zq_PLz8kCjg6wEug=7LI*_oOH;=G$WTliIhXSCS?edhuWjcNPkm}3r1E!TVY*^ z3%D86jBecbva0G+^7o8JVRx+r+>Vq}ruT()?A&P*Y~=Lg>d=i;!)*tx-E(;UKtdgi z>#U@%PLFnsam7NvtM2pUShD{W7?|sLza|ul{1~G{dEp+~o3rsZXPDI}#DXZ}*y&es z1!7zPH09=<(=>tT{|RHO7hDncEjJhVb~=InAAee64@3#_OU#idBn}d$3Ca_qgCX`_ zBbY0hCGsgA1>f_~_fe*!8wBF_ZH`@x=)0~PY$Slxf;wscJ78D?#X&Ulbe2*=9 zSCtGiBHZfgs>44C+13?7i3oo%g#b5Sb&S8U-7}4!{h+VRfKdxNlr{vk0zd+p>48{% zWcCVB88zq)NvR1Gj)2~FDO4-pq(bF1#- z54GT5$&S;#`ucfl?RND%BB<2_Au@PP_R?XR3iT2t5O60WXC*|7<((7>;8VnQ9QrdC z>|D|G!bKYUc4+dFqW+Mse#C>0A4S}prA{h`bA5M&V$t39fCXQoqy~MAI(4sx1_Ken zqROO`ugifg#ACW1C=UewfUwFW4;ltG-)C8_B%K@B^+#xj$X6h;Y%m-gzx-0s&8qID zQQ8do5nJ*=g`F*lxUH*REYad8nqN_db`n{A*^-B4_l$6VmIW>h!&9<90~3 zwzNq2S9;311W=-ac+MQz6>Y^X=Q&D2*$4;gY8=vFoTnOS?-5voi;KOMJq`2JMa4%2 zyb^7cC8{!FW{Ctc^yK@69rCM{Axl79rN_MomB@vD7b9vYstt|bbRO)=B{a>yk8#|x zEhhmeF+=(epr7(jrFO%I3Mv}9UWmF|UvFQ%6LNB5k%eE(YSVrM8~1sH7$J`7((@hYl;e`+iK~40p5F8LW2LwYk_4VgRG7PoQ zS3s>xbQ*Zdh*LCl*y$ceb-=C6TuX%1=P%4P$@a^3Xy0FP&DZ)18=@Ao46!G9br#(Wk#@X(2x6#Qma}HsIoKPb583W+ThTz(6qWku|lrHuI;H9llE=z3RPKK;V zwSq=jR7E$Q=lP4*q=f)m7zQajkDMn3>eW@@@AzgTGVJ~%KD-+>I_VUGQ`d`;6KL!y zl!vB;WEL~iMccsOTFYiD6e>%B|u&8 zvv~jzOM2Q;(kNTDZe>M9Ij|jR5EdRa4!$~JR)omni8A^)bZAHu7ziQhHr)_0Y z|H1;7l!*SJeTAHW1aHJNW$3D4L#AlJuyCzAvUQME8CWz8xFzUK`!G{VtZIoRJ;YHh zBGV4GJcfI(dOOblGx5sOA2hVwxS}XAQ3=S^#TN8Sz+0=yb8XiwKtd;!17q#nmH*TN z1jWX(p;b5U8$Q1?v||3d)=N3XHGh0(TWuu|@+@FphuEPL2`K!A5G)OOa=v>!-2W4} zFj3iq1|9_=34|{R7ZUJbdbK25kf^_ON89mz|AvB2(?*Xs=wquSl=Xx)0Eh%}1_xkV zGIWU`((W11(b#fQ@{x2IC~zE8b;NU`m?X93HjDBQ=-EHy_rJpTAQltEJRUuEbN%lrO zUP}T^RTiP3ezV5Cn0jK%7J}R{Hg*~Gh$&fKLd-hK48-08ADd{CmxMGJD@KeDcoLph zCckd^#YeK9QvOdT#OMlnF9#oIK6i4|%7j-<#buYsiVJoo-#XhU>jdd~GyJ$h*0Hhe z1z-+rgE)ZVb4mm(%*(cGz8{%}bcNud3JN@!8~fIrvI0}U8E;|~Y0s0Zfk2R!eog0-h>@#cSPn*CPX@1 zcCR9`ow_G)mt;Gin&)cHy(AMp*d#+_tSCOy($n`^SX3Oco&a;T4q7Wh?Ga-TaP)+% zC@3g!G>Sk|pkQLl&{Ii#JOC2CL6O>t4Nwy1d@S`9dU{}paH}3S{~AgzMsG;KY2=V_ z^xp&nfzro5SW(q$i{h>~!$XQUedJ1%N9id)$M^TT{-Rpv_-75S^*$7c5RUa?m^s?NgqZkX?U9n5Ena-U3s(reXr;tr!sW_OE{XUd zK(6i=4h937N4jldjTR0Y7ytPDagDMP!%Y1e%)sF`kaZ2D1V+6R0`)88i<{%0wMTzR z$3Ns1V_{hPdC+;>r)--5#hUgsMH$>|7UmAO)=GShR&(uvS&toT4Qf4%3a9Wyp}O@{!VM1K7lH${{rsX zpN_jL5diN}dc%YcPm}yu@xY7zk-v~T{bzY*4;v(y@EzAKY{~g`|7|=j6J(<2C#hJZ*#{D~gp?8SH%IG)&LKBnXD_59vXltsgq21xz-P7E> znp6>(y^KPeH(!zXHGC07y}`|cikNK$od+?Fir$0l>`0I=B($R#zkY4_+qX*8s&MtF z#*NxMfG!;z&TRcvc9VD%TG23F6#3bn!;6V&fp_|rmX@LPL6~cYzMq(&?A3)Y9g^p{ zR6J-zxepwPSZE`#k?quFK2xhOFZ(c8$ZiB&(tQ@)MH^R&!Q#RF+Aoy9ywhlC%6Cf5 zm^Fvb%w`^k;R`J1&>vUgiy%eHV9p8SWGovtTp-s1YJ6XX#pH5&-wxdwBp${wfvmgF zS_*%*ewkRiVZ(CN&!Jvd+71B9WF*>MLS_G2JFe>TZm;&VPq>hOhrj4(E3LLayt56`ctQVazs!(CWga4XcgDX-5^N5X7RmpD^_JPK889KK$M6L zZ8Qrto>%-9<3~j03+m`Ol%3mAtOF!I4qNmq^k<#O#|*Qo{5k<4t2@TxfHsyaoZ)SC zoiE)xUG{GAq{j>QC*TiOBHLhC`&NIen~prNiSPENb~$} zfr&Q`P)HvD`Oe|AOaGzLbp(zUJ0jG?s^qH3)~?zEjrrY3N@ExzQy|&#hN_EAR=7r@ z*F^?m*nL24^Y0qnS$4-~ccC&RP54=kF#5Ow1)(g_S16Xv;AV?Tpb9?t``>X&S`Ml_0-a%2*mJypIXZpenO*R^@Wl=zwEkAF%8Tc>T{ij> z9|^i`|J^s7>(__FAEF9tyOHo!z}W-)&U$oNPu1)4tIMI27H!7dk5}*Weo8}sC#qU; ztjR%r%D{M(-ry%ZKE=f26lJQ$cR{rVYKoX6SwSItUKBZeo<^Pi4-Wl zNmP6(RWZo62pzb1bkLC_;}IV; z{NrgLUIS{+8}Uo3VEGHfh*=TkoB~+v5i2qLTihm9tjA#m^0IH=zEHd73qLZFH07oJ z<)vZ1sZn!IFzDcrHZ&J^n_dBXBr-y*io5^dfiec@$;>6hCXSAd*5zNaqE0x82nz>Z zx}+8Q7~g9zxD+s&v0m{91)jByW=TwKS3lstipg(f)ygl*ru#UVYT%W!_lxa=$MbNv zTC$9r9_s_(aSDadCX5&-RVA?76l^q&Ye}~MS4BXSTp83WOe!I4%x}}e9Nt0UXFz9j zfq#_w|KZpd##9BOm`rPi+P1NQngV5&S1lXz*O1xOm+sFtl#2x$9ji)Q#(rb_s)DwH zD<6@n0l5;cocC^~Z9q~|5**c4;SEq^CQcUQB4_kLcmvH&re1lBSn105Z|?IL{zsiH zNx3h)4C(|}>5u_%2n&dok>GW=KDM)9Af5@ZsKCq&pguCVAS-L)-?A-7fcca2r|I$+ zQySVD&(I!6zHY5XBi=%fBSgI^RVL2d`K7K!9*6D1|DyNlB zq!=TeGsp#nk^&@F>&)WDmUau+1=mLLMu9IU8zTtW0O?&KDy;X%_V>i)tCFEcy{L?T zV@BL@%N}kzpBFemJuZ-Z*pX=N|AFwF19XbZ7<(ml%c=ham2hqaZr_JV^ z#>}RQTbMqQ1+2gkz~*33hJ**G@X@3%rx3yz16cifMo4f7e8gN3p?ojY?F1e{_$W3@ zAdg}OJvWuX_Qq3TS+;i}X@s)R3Ij;QMFEp1#Fw2^s$}A@`Thm7V8z@AJLHB22a`av zAe07U<_pCSY4A1;F7w>yRnHs4+#JgHVJp}A_2%=oUN@kc>O;c~zn~y2xkjTauq36y zV(6{wiN!eC;|wA}jIbO?z__v*uA`|heHz060{!Q+RF52%QN38}n)39p0WFF!0<$1y zKDOq)E~WS#ZIQ2?0B-WvRtuc;6l7i%~Vw>J^Q=kO!rQzC#%2X zNgLtw#-|6Xq9~e^UI7ULu~0+vK^j6Z6l5+8uo6Wn>&vvrT)Zfm!~9o?y_6nkl=f$h zVNo|Gdg0woh3PDeACc`@ot=-@?{>aSh#8bU^S0R*{h=E3Plry~I@t0r>F!=-j>{6? zWZ)Q^W@g~L0fgpo){vgDF$1OoG5orgX#LQ0K63e_Z0q1qgSwq;JH4t7WG~4#?#=s~ z*En(k6%YeYcuJ7@4AdZ-lYKMd3}wNLJsIj?EC_cR``ER3|MeuNg738Yi!uXL8+g(n zT*`bq7Q(`!jHZeg)#B1b8JJyY@f=2A7mO!oyClVcZDDBOlF*2qq@MxfKpA)+7u>>{^l%z zDCa&8XT?9gEpRxMx$^?C;QS(}wm$Hc49k~S;VL~sb|(^Y=$WtFdi6qr2{lgIugg-Z zc87avc6ob9(&cZse=rJ`Bt*0J>(?)$cqP^+Fms0O&0XbR_mjSR807oEWBK(z-|{up zJgpTwSt&}8OU&Woh7d!a>ZYcskqi;;B#rajF?$~U{&M8B^ZVjzGeyW5&pw3;dfvk4 zEDw+Bt*=z`T}G>v>s2L|-&A4{aJ$4ucTiw^2rX;dGC5&GUF=PdKmCrIdN5&v$ zRH1+R{;?Ogy)%j1DrmK((KC(+<9vHIaziPAD1Lhjva-gANe6OR=B;4gBJ!=dJLJ@X z*51hT8tlJ*Y#~}awYbKD>MS)9D&aQX0Hz|aGXf7>3LHw!=LX)ov(GiJ3X$Bh_jDug z=(pOR62DWpr^mnTuKP;fP*-k@mc%FQoZ&~Ou{c+;xB_0nm}a-opGbv47dLm-^hK#t z)&-MH7Q4rZ?Gp*O>KEB^S-ICPp!wA5Qibk?_c$8+3*$9cRf zn~TsR%%H9K z;h&Jd4Cjc)t)Et0yE&QHH9{^eoMJ+zunsc8cYHazeX{bk;)srpipt&fCn?fRJzuJN<|cSV!sEoVxao@6?OA1JgFIcwOw|&$Cc#?c%MPu@LV?7AECxS?BzF zM`>SB%@-{m`DWc3xjQ+m(F6S9JcOc4?yi{hBS17r$WLSyCLl`R=UY4$ zw5UC3!xb<{RvW+EPHB90B5(KBGgw-KEu1`cS%<|!SRTE1oQ4}eW-S9@b5d9I%u)ib zeEf^kCU-LJ#>=Q=xi5F$JLK{9yy@zk;8y!HCABZDcT_nS?(yRvIxWi{p%&GbRoHzj zHxWcGq{_X^T;@Y|HR9k;Z!V%ug=BtKfCTn`j z67H8_o*Q+`3qAc|r@|vywsv-|-|H~aoYUT4GIBVxb+9NVS+L#pY+c4K2RH5;_5e8x z9i{Snbd6*yyznP~1Z*(&VR}8ztnlgN?pEs^4SH9H3$zj(B-oW+cTgG;)oBqMA}i`( zA_Pa*rFIOQLY*fpAds;MY%Mol&yP1ICN>1xN3tU;Mxe)Y_w@&(2sKC0Ku!hCXr(zmQO!NRxg3z4Y|Ki&F1HR+>5#d=7rcn|M+~ zcYgO^lZM@assj@TqNIwubWh~HchZ5`s1i_d;*M2WsRYWC8L>t6z=79>?N|{XF+1z6 z9=~f!-?T2irBdrw&j($wM7EBOWsZteN;Wo|;X=1fOXo+V`~@@el3?2RdV7~R{`K-E zZE^SioW|A|_4p4`R5yO>tEhzNKPbc@(nU0}h#(hVQ@-@~%h)u^)7VPiCiX|EsuFHZl>K!X2U7K|>E1X> zABTz`e+@rby)zK+L00>4*G1qr(ziz*A2 zG$_z?baZ@^Ik1~1P2n}3eM^ZV`Chq*vxCjcc71T6p;)%09U==9i6Q4hv*PBFxhT#z zYjUlg%UHbY|1GP;9eDE*--i!EjIwuMyH-2uh%OG+6I%-&9np-P?%+)Yq&a$r0gP_}moFok#oe$s>h-_V+axXn8dcdGEG& zlLgQA_46Par-Rl(=}U41kD~gKWlWXn%hx{IN6+0;bXMX4lUDTEeS27UAD(vZe6l=X zzK?f1)Z?TvA$brMU~e$Ty3I)n8Fajev1pCwms=;{mncqVHi()m-s{T-G*MRQ!JW#T zKPMVLoG$!ye)$SFj;JAfC8yC$&xuhkvnOWPY;HSAb0Xv1M=CpetNn3x;Z|Z>X6`+> z86W{2*h!Krhy7x6 z95Pb=`{R_+Jz9f306O93r``-pY*JuaU(prHI%XyD?M%_uPtyG_U+(=K{{Ci})sBJ> zh0Bg=ch2P7m^O_*JwmQ8DLbH}Ax}K0f|{*`AE>W35SrS@>&1oh=UeJFD6PC2r?mSd zb?fL+)w+{^hzB=@k1fGUkr^`piG!a^ZBJ|xGOlJkn2Sxnoo|yP}|M%nG7oLbVo;h>POefJiM;(rI zU9HA$xiyhTe;+OKdiARPbXEcjH9#d61XnNgik!NSF4|l#?tK19wJpw)vlO7C=2}@{+%za)T^EvV7zV=h| zDBL|#jgpFSw7p`14b=A@#CXE~5*|_ZZgx#q{|Lt(Q(U-*hd6INd^`15`Dq`_mvdXn z;W{aM`+h=&$cAE(4GJh0P)^DW8*#JA;Quxs7%cgV5s@97H#ZSnjCk1B)uF}~z<5Ew zbl!spY7`a-){XMBW)uf5MXy&@=`4|a`=;5&FlX|5-}=Z)w~an-`L&p|Uf0=2&&;v7 z4*OM4sbkuB>88fKMioGsfl#v^^nb8L9MYOj0HrkO13+^;P> zg$eDD?Ba9@BWUvz%c6yasftT*9&YTJ_DZgOedn*TT+rdy9|X_Vv>3U* zLvtIL=;TH#Y0Uka+O8d8cS~{jbAL?@x_6wUAb6+{$eJkP;6lM>H;=)}Cy^`pcGq{) z7UWkOF$7^86xyZLKg;LDdAz@EBzyusN1jn(5dP}4u*@qQH?k-pBO?Rqf}W%)`=;Z4 z-#tqE!rG0zvy)q$pIiK%U#2y2{oYy6Q)P++e)r82hNh)X;dCxc*C`%rye2{{;Nrc9 zMCxAUpW~ykr5~AE4jeGh5Zr5WX)qjxS@L|n|jG&?yf&Fa*zm(EA-GmT0?k$ zs9cHbnsL@)Vh#ckO(m#G3<})){bhHzkjs4IN1FV1V_Hr-DKra5##bJzIX8OS)ymk< zSG;^?hEuyhS8ZWp#+bc?1<5b+E3Z%Am?QR=w78nlHZPC8aRZ7;9`ZI$h23r0cofGuGK2-n5;Iv+CW>{z3TR>FYNCIPfMVNt(&^h+H0nB zwa)vDth|bg49i_w{HXytMjwu|M>l*a8Nqowk+;Fb#6;qjHg|S|tz4L4$f8dEj zqh(@mFYladjCI3@u~}ROyI@A*%<4uw_Q3S-&W@)hSBHz9FhhI)?KH2%QoDQqCGhlb zr)6{6X=Q#2iJU?M0nfYZDG%DZob!*oZEpT7b2#|ixiWKnib7aH0l`1bwacvq4Rqdn z@jZu^UJ~1YA=1DeUn>cA>-6+V|B~jJSEgUb+vYSIfqB8ZKDr&<+3(s~wK`Y(9k;C0 z8_sm4G&wzG9$bxT3yVKpkJO_*h~hj|#)`q1S|DUxeTc5a!rsbiW8;e#V_48Zh=ysb zJ)@#P(FGr+yL}T7WCG@4COtCJPK`}5=8jI=Q}Xii-gb1HM+lXzy{yI$usP)7MMiMx zGPO7%G1!EJ5)pfa>bLV?naQ~L@{x=^Q^S7WoPYi_xN418!VKA{vA(l&_PYy~LIwTry#k}BTw zo09nW@oG%4-$)TWJEytHNax4zcM$%t#y)jLyG~Mmnm(PncxKV* zHN*YiBd<3oy{5R)9jsaEAMa50Gx43I_;H=2*kFC~2OgInwV^DY*f&cCf6=xi!B8YJ zO7kOMHfC~$et&5YyxQREcAEQaO8aoPLS$X{^eewjteopYCZu#+rq%?nQqneN(Yxwh znb@9RJQ82q?UY>VdiMbR-2?5P;sOh%^oIqtXSs^)se6lrJJ0ZX=K)o}UG^VB# zUpwjj$8e+~GktmVSw%07v)vvdS{LH(2ZZPdUgg({j5`vgm1FlucK6iPU(Cg&$6HOM zygGG%^r&Ya&&is&UD|ZYp{vX1yXIm}%hc6jg==$W2Y$Gs`B(x00SJ>>S`>C3m%~Ft z^XJZ)Y(7jC;Ps1(XR&K9#l@aF#b%?}f|HEks*ACkIg46^O|uRI%6fkIq1|p$tEc^s zdYyCc5}v69!GUwd9}je7vI}rFIW(fEEBpJCa49pJP$0oBvm$AZfeVaObx(?5#qpV?QpxJhW!8=t~qbtuM_ zM41Kf1id67p#V3Loj79U1w}<2u1!@C3h*l`@>ZreFyiU5>2^kf(4*&6T1i|vkZ~A$ zo1b1W_nS0?8ULfBIV)koy*S^rNSH6<3V(SX|7k1Ajdh8nk%q97$70xS+08rGUN3>H z|CP})1EmPiKz0p9-@JJqHiZNa#xdRpFAku$xgHf!EYv^-WC9lCuqTW-jlsK#EQq@1 zI*c@}VRwh>mn%Xqz%Q2%n=2+GBy!p?e-Vi6$1M=<5O2Bj#=jXvATtiqm)z;&sLPT!aW zJDgNdunybV7AGwhL$L)0JHD&Cy%R_^gMOD>ttH-(2v$5jWxz3pqEIQkh2;~d94;!n zRv*;P!pZxu-l~Yvm?D}C~Ro%ju$N)bgs z#;MHaL@kZrLsB&Nqg3Ai!->44v^0$|Hi!Ku?B)OW^F|kqgIwSAh)RIeEjt}4Qp!gR zQ~K?*af|-Xw=$w~P;qkFiiKZt+0=sghgV$a4)V*+3Kuyv%)#86t-{iz;qR_U2gN?* z$wTvofq8(p7e78$`ak}b$7&?1YFOw%w2crK4qK1(rqGx>P}LfU5)f!-`H641(>^c>S7~6G?X{yxwuq+SJ#MI-s*6aP95gLS{Ej|;5ygL zRz^D`h&y`U=_)?QfXRsDDhkd7>J_99TW4pF%NAvxteD{;566*Zj*{j>V_AnY-~GO& zE!Z*Qk$TDX3;=w!r$P5JsEj;K`K|U?OB|$zK_F|f`~h=bO#|^ z-;A+Tk9m2(3%hze`N>KJOw;YIg#?w%*uh8ytjwNTF;P*9S&8(c?CjUu<8e4Z(f5+A zY3SO-;TZNx6$BAiK-25jYABN+@E>H~$q_-;wW7&`POq1p8L~{M`N?=Tw&c}$LWF}s zO+OPI$Trv&{e4RvI8f?Ct{~TT?e^{A)0^-^In;3w=kysIKXF13QxMkagZ5Kb3+)^6 zHZV>FuFIB{js!-sBM}OuH+1Jha1jn`Sx}dadRI&TKqGen1;&fR`0o~wCU85QdzO1P z|Lb|;5TxL1{5B49KT>X`hSl6AIl8KMxJ*D?l|O42j|{(nC*}``-2Ow$kpfe=ikWk%BSWz^|}#yC!h?_7QFghQA&E( zt{O*a;sy)J(c?t{$A8s)m4A^8McvMDmXFkba7VFQYt99o;DHLdEAF-TCUZ014O%DU zMvn_>-wcEfNcDsjt_@e6J*u?tc@qDL8f*Q98o$1^8DP!7fnzCCkCchqTwmQpc0#KG z>EPog3e3)ABlWK~JlmiYOAZEV;}NQ_c4o6`(He^~C6QXF56I>=b7|)tx44AV+g**k zpZ1L8v&Yx&Ir1*{KMDaMADyh*5`*sj8Ox`?>YJHOCEc0Rl(j0^<6L&=YO3o~^8mxS zoIEZcr-)ML(rYOyI?amJs5)XctApc7X@BB>7k_^?{6lx{P!>>sp|d~v+jHC7W?prF zEzBPok^g;v(P(I{;S6u1pSaMJ=Vox5tT73n&>tMKu!us`tosNL?h80&5U>C?Tez5W z!+(>Wo0Jg%z0YE8*IxeboJEqW$7qcS>C! z7yIv*YcQ=m&ErV<-ycd}KN#lga6`iC5AEM_gJJPVe{Tj)KPFYz-=w6Il)*UgL=Fmn zliKCMiYL|P1;R9cZGdyim0N$`>Erv5tn@!W3qV~K<;0Q_4xpslAG8mnd$P=X{~;2U z<&z$^rI_8*=jrDsPoB>{)C9zw&L0jmsp?f5BGf21EI4g<+_Eg}vdVkUbsSk-E%|Mq z=djayGOHApJ_?-1G|S8PmtH<;Kye7E2^e)~gcBP|S|7#IRy zoxm#wPWWFT&wtC8g<%cy`gmn9zLAE>Z@*2(eQ@$|chBoH2C34Haz7l6VCqk1G@!CQ zv*3cCcYSrUQ#?92FIZP>*2u)bVC%lbB{TEa#^dW9DK>oa zH*VmlwHWE^_et(n#!r%JnR>~12n3^KFUt9-sI!+}Os+X>Xvjv##2!e-BT!3Rd`ZDi zmON45iUwhl&0=~k8Z-=q)k58koe7)gn25~gB3M=evg1vnQv}<`P`zL{wGTa4r1tKU zl+26__%&3#IFT`Mhw5QQ23hV&#)Y9=cz=?T(g%N*WauUiThomq=AYrp1TA^PkM7aE zd(@CYpXSQkj}KyG)ECC->@vF$?N0XyhX8}uWKY>U=3j2FDCSGo;=`nItPkCzva%1Z zcL0Q;Iso|4$^O)EE_>V_Uik^9x;Tp-`RK$Q6|BtdO49f$y>ih7g z^?@@m_Zna$4q`~qkH2bW9((uh9e2B{?bg3}h<1uozdb)RWRGu?n31tR#vu?~0>Sdv z-x1sU_tA@9Qu)YW{||-3ZUby<*9u=p3?iz9|4&Fld3T@FtkEy|1rR+e_@$!HuY|6P z3=qDEEBp@_?R}n*IkutC16+E1A{*Pwp#$9u4dIW9MgI@p!~WIn`I^jnV=&tw5K z9zW<%LL5zS34#x#lI0%+hXbkxlE3~sJ%!At0Xp7}4F{y1A!iOm62GZAGo)&1xie!s#C(_j zUwh{sR&$=m@guj49iolLr8b$urWiS82vJNIGOmf0+o?#R2ais6Ixe|vwnU9)iefP{ zx^g^{sa8u$9ZiEF?dFmaCc2lDYF{5SJAdqB{@nl838{FKHvA}eHlD1j|n5D z9~l{w1k7#aS$G#nV8@o?sr&i+s3Aaff90D_5(M{Ex}8)B~92;TFG?2ajSeQo2qDLCQAnAe_(@wzGzx`2J+B_J8Y z@~-7fr>*Rk10m*jwD9{+YgItBpbuzKlTp#{7!ZwRZEahJ^~XcQvADiQrfC>2(2)E) z6Q0X{+HN$~AxIP?sTcTwu>@o{FUe}U?N-v%=@GSl;!ufG02MAT^-Z{r>aLz3RAbH$ z8P%zossdbO99cykhO}=KvmAPxvl$n{I;MWs9Uaq=SznYoMQBEoa;m!F zG(zqH@TbBmwj?Gc&04kU1ck~TkH*t;&gS84@PXn9f7$r^`sf!gmRb=zt8nu4{K`yC z14nOX>rY8(laG}wsX}EfA-R$SIcw(3-9fJ|mZ)?)Xlmz1k6D=2(7E;1B#?c-WW8RG zn_kW`pMWVwH;2QY1~b3JNdUU-rs`4(1BfU&qCcw0Hu_HkvXQ1mDFX0!Y@Q{>o z#HyMUl6*LA<1t{7BOCnfd{pz^x(!9NS(t^btP`TQF13!5P!6%Lq^;2p^@z|V#QhFN zh-X9c5=-!7tkl@&(NhEO?xOMPmD`17oW3FcKCSY$X;I(rr!Opl{T!eqCMr|t))k!^)Y75LAYDz@9)GU6Db}2QHS&_y0(%RBGIkhx^){t zWkl&DuuU?yR&Sog6z@ZNHTU z4@`ihg@+HA{?4fju{Ldsm@|FsVO242c4CVIewJ5VTN^Ra5@OKis+&WEoGL~_nEckq zJ$jp0t)^Q*NN5gYN_=#%Lao66;~HSwH_qK#Nfsgw<-)ZR+lxRl=rGao?BX21r*OvmBLfd2mPgv^y7<8;>##Bzp;Q`aIvW#cT75=mbeL9U z%xsf{CNZ8#>uO6AEFEUp!#_991wZxFJe3GlP)t4N1{n=AG{L{q%GYIO$c%`<1?wxEx&R>Zm=>23|S=s7ojV)b|w^il;d;Y^X*U zvfjEL*2Z=V@*t-?X*$0$4UGGVc6PcWQS5a%g`J=$QSXa;f%pT!(^GW}byM0Z zmF2kA3MJay7jmN@E^V4)QG*7!ITNM-i`45FfEl7RMXxc9f@3m*f;c68+$IT@x zwx0yv6@m{7c?(mHYksjSWDzK;R@eC1qe=OrrKR_juE-s4jn2&;eNq23{V!f;#4*%S z+?YN+Dhl)0!4GLCN+OmpsIgJ|2Q_jyPfm{8lP29~v#7giQ*4UV5`IW7Va9c`Q2|;u zwiSFfka7#&4QqlVhzLOzE-`?KD)U~wuvr1yZsD*4ezOKC7|fIm)?rmadq=J25UX7U z#Z5ki{d_O42;rj>1*)xdVKtP*;WG8JOXal~`D&cs&f%F;Iu z3pJnwn<+y$xY|m1`O*t7YVz%Wcuf-%$VQOJf73*vKuf+2_IdSr#2&!Wz&4GiPx(SiJ6ADU?Ms|4t zTtySZm|&0T`B44Lm;xo;@zS{OZii%*TV>DwP@(8C$i->KqJ6`Th5P``jZK$eF>Og> zNJq1W5RNE@#M~ND#IEUY%lpes`S?^ROPos_?kaCoDvgYc^mYOgMk;-YW6;a-){sqP z{D{XsQ+CVk8`x~IoSMK^l z5*E3Ko&A-~rOKW$MtTU-(#t_4PCXW?;8N%U?*$}&)PLc%)^%!JNx-EF&Oc$(`YwI% zIqSXx*2{o5Lu_|)X-*;gxQTDie}J~l^EaXR#W_PqgyKbMjLn+Sj-`|3^A`X4eB-%a vzQ^<(>bCmVTmG*<^Z#G}JQDr~kL8V~GC(;wH8$Bz!9SN-?oO#QSMB~cce=;! literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ax04_test_one_moving_one_stationary_along_path_intr_after_end.png b/imgs/test_geometry/test_extrapolated_intersection/out/ax04_test_one_moving_one_stationary_along_path_intr_after_end.png new file mode 100644 index 0000000000000000000000000000000000000000..352f9190abe0ebe919bf35128e859664397f2bcf GIT binary patch literal 49351 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

      ^x0-~CHPZl!=-_LU<1sM1qTB1K$unE;A0gDdT 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/rand_moving_stationary_generator.py b/imgs/test_geometry/test_extrapolated_intersection/rand_moving_stationary_generator.py new file mode 100644 index 0000000..5bbf13e --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/rand_moving_stationary_generator.py @@ -0,0 +1,165 @@ +""" +This library displays sample problems that you can tweak and +outputs them to console +""" + + +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.patches as patches + +from utils import create_newfig, create_moving_polygon, create_still_polygon +import random +import math +import time + +def test_collinear(pt1, pt2, pt3): + Ax = pt1[0] + Ay = pt1[1] + Bx = pt2[0] + By = pt2[1] + Cx = pt3[0] + Cy = pt3[1] + return math.isclose(Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By), 0, abs_tol=1e-07) + +def gen_rand_poly_verts(minx, maxx, miny, maxy, minrad, maxrad): + x_halfsteps = (maxx - minx) * 2 + y_halfsteps = (maxy - miny) * 2 + + centerx = random.randint(3, x_halfsteps - 3) + centery = random.randint(3, y_halfsteps - 3) + + centerx = minx + centerx / 2 + centery = miny + centery / 2 + + result = [] + + curr_angle = random.randint(0, 120) + start_angle = curr_angle + + radx = random.uniform(minrad, maxrad) + rady = radx + finished = False + while True: + newpt = (centerx + round(math.cos(curr_angle * math.pi / 180) * radx), centery + round(math.sin(curr_angle * math.pi / 180) * rady)) + # the rounding makes this function pretty inaccurate and can have dupl points + found = False + for pt in result: + if math.isclose(pt[0], newpt[0]) and math.isclose(pt[1], newpt[1]): + found = True + break + if not found: + collinear = False if len(result) < 3 else test_collinear(result[-2], result[-1], newpt) + + if not collinear: + result.append(newpt) + + if finished: + result.reverse() + return result + + step = random.randint(5, 120) + curr_angle = curr_angle + step + if curr_angle >= 360: + curr_angle -= 360 + if curr_angle > start_angle: + result.reverse() + return result + finished = True + +def get_rand_move_vec(): + dieroll = random.randint(0, 100) + + if dieroll < 10: + return (0, random.randint(1, 10)) + elif dieroll < 20: + return (0, -random.randint(1, 10)) + elif dieroll < 30: + return (random.randint(1, 10), 0) + elif dieroll < 40: + return (-random.randint(1, 10), 0) + else: + return (random.randint(1, 10) * random.choice((-1, 1)), random.randint(1, 10) * random.choice((-1, 1))) + +def gen_problem(): + stillpoly = gen_rand_poly_verts(-10, 20, -10, 10, 1, 3) + movingpoly = gen_rand_poly_verts(-10, 20, -10, 10, 1, 3) + movevec = get_rand_move_vec() + + xmin = 0 + xmin = min(xmin, min(p[0] for p in stillpoly)) + xmin = min(xmin, min(p[0] for p in movingpoly)) + xmin = min(xmin, min(p[0] + movevec[0] for p in movingpoly)) + + xmax = 6 + xmax = max(xmax, max(p[0] for p in stillpoly)) + xmax = max(xmax, max(p[0] for p in movingpoly)) + xmax = max(xmax, max(p[0] + movevec[0] for p in movingpoly)) + + ymin = 0 + ymin = min(ymin, min(p[1] for p in stillpoly)) + ymin = min(ymin, min(p[1] for p in movingpoly)) + ymin = min(ymin, min(p[1] + movevec[1] for p in movingpoly)) + + ymax = 4 + ymax = max(ymax, max(p[1] for p in stillpoly)) + ymax = max(ymax, max(p[1] for p in movingpoly)) + ymax = max(ymax, max(p[1] + movevec[1] for p in movingpoly)) + + return stillpoly, movingpoly, movevec, (math.floor(xmin) - 1, math.ceil(xmax) + 1), (math.floor(ymin) - 1, math.ceil(ymax) + 1) + +def make_tup_to_string(tup): + pretty_x = tup[0] + if math.isclose(int(tup[0]), tup[0], abs_tol=1e-07): + pretty_x = int(tup[0]) + + pretty_y = tup[1] + if math.isclose(int(tup[1]), tup[1], abs_tol=1e-07): + pretty_y = int(tup[1]) + return '({}, {})'.format(pretty_x, pretty_y) + +def make_pts_to_string(tuples): + return '({})'.format(', '.join(make_tup_to_string(tup) for tup in tuples)) + +def save_problem(stillpoly, movingpoly, movevec, xlim, ylim): + mpolystr = make_pts_to_string(movingpoly) + spolystr = make_pts_to_string(stillpoly) + mvecstr = make_tup_to_string(movevec) + + # this is setup for how i copy+paste the result + print('--graph--') + print('xlim=({}, {}), ylim=({}, {}))'.format(xlim[0], xlim[1], ylim[0], ylim[1])) + print(' create_moving_polygon(fig, ax, renderer, {}, {})'.format(mpolystr, mvecstr)) + print(' create_still_polygon(fig, ax, renderer, {})'.format(spolystr)) + print(' #fn({}, {}, {}, {})'.format(mpolystr, '(0, 0)', mvecstr, spolystr)) + +def gen_figure(stillpoly, movingpoly, movevec, xlim, ylim): + fig, ax, renderer = create_newfig('rand', xlim=xlim, ylim=ylim) + create_moving_polygon(fig, ax, renderer, movingpoly, movevec) + create_still_polygon(fig, ax, renderer, stillpoly) + return fig, ax + +def show_figure(fig, ax): + plt.ion() + plt.show() + +def delete_figure(fig, ax): + plt.clf() + plt.cla() + plt.close('all') + +stillpoly, movingpoly, movevec, xlim, ylim = gen_problem() +save_problem(stillpoly, movingpoly, movevec, xlim, ylim) +fig, ax = gen_figure(stillpoly, movingpoly, movevec, xlim, ylim) +show_figure(fig, ax) + +while True: + input("Press [enter] to continue.") + print('generating new figure') + delete_figure(fig, ax) + plt.pause(0.001) + stillpoly, movingpoly, movevec, xlim, ylim = gen_problem() + save_problem(stillpoly, movingpoly, movevec, xlim, ylim) + fig, ax = gen_figure(stillpoly, movingpoly, movevec, xlim, ylim) + show_figure(fig, ax) + plt.pause(0.001) \ No newline at end of file diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 5accaae..1cf0783 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1920,18 +1920,147 @@ def test_one_moving_one_stationary_distlimit_intr_after_limit(self): self.assertFalse(intr, msg=msg) # calculate_one_moving_one_stationary_along_path + def _calc_one_moving_one_stat_along_path_fuzzer(self, poly1tup, pos1tuporvec, pos2tuporvec, poly2tup, reverse=False): + # i generated a few polygons in the wrong order when making these tests + if reverse: + poly1tup.reverse() + poly2tup.reverse() + + fn = self.extr_intr.calculate_one_moving_one_stationary_along_path + poly1 = polygon2.Polygon2(list(vector2.Vector2(p) for p in poly1tup)) + pos1 = vector2.Vector2(pos1tuporvec) + pos2 = vector2.Vector2(pos2tuporvec) + + poly2 = polygon2.Polygon2(list(vector2.Vector2(p) for p in poly2tup)) + offset1 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + offset2 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + + newpoly1 = polygon2.Polygon2(list(p - offset1 for p in poly1.points)) + newpoly2 = polygon2.Polygon2(list(p - offset2 for p in poly2.points)) + newpos1 = pos1 + offset1 + newpos2 = pos2 + offset1 + + msg = "\n\npoly1={}\n\npoly2={}\n\npos1={}, pos2={}\n\noffset1={}\n\noffset2={}".format(repr(poly1), repr(poly2), repr(pos1), repr(pos2), repr(offset1), repr(offset2)) + + intr = fn(newpoly1, newpos1, newpos2, newpoly2, offset2) + return intr, msg + + # i started using rand_moving_stationary_generator to create these. this still takes + # a while because that generator doesn't guarrantee valid polygons and certainly won't + # find the situation we're testing for without some work, but it's still faster. def test_one_moving_one_stationary_along_path_no_intr(self): - pass + fn = self._calc_one_moving_one_stat_along_path_fuzzer + + # as01 + intr, msg = fn(((0, 0), (0, 1), (1, 1), (1, 0)), (0, 0), (4, 3), ((3, 1), (4, 1), (4, 0), (3, 0))) + self.assertFalse(intr, msg=msg) + + # as02 + intr, msg = fn(((11, 5), (8, 8), (7, 7), (6, 3), (9, 3), (11, 5)), (0, 0), (-1, -3), ((3.5, 8.5), (1.5, 8.5), (1.5, 8.5), (-0.5, 7.5), (0.5, 3.5), (1.5, 2.5), (4.5, 2.5), (5.5, 6.5)), reverse=True) + self.assertFalse(intr, msg=msg) + + # as03 + intr, msg = fn(((0.5, 9.0), (-1.5, 8.0), (-1.5, 6.0), (1.5, 5.0), (2.5, 5.0), (2.5, 9.0)), (0, 0), (0, 5), ((7.0, 6.0), (4.0, 5.0), (4.0, 3.0), (6.0, 2.0), (8.0, 3.0), (7.0, 6.0)), reverse=True) + self.assertFalse(intr, msg=msg) + + # as04 + intr, msg = fn(((5.5, 4.5), (3.5, -1.5), (9.5, -1.5), (10.5, 0.5)), (0, 0), (-4, 0), ((7.5, 8.5), (7.5, 8.5), (6.5, 5.5), (7.5, 4.5), (9.5, 4.5), (10.5, 7.5)), reverse=True) + self.assertFalse(intr, msg=msg) + def test_one_moving_one_stationary_along_path_touching(self): - pass + fn = self._calc_one_moving_one_stat_along_path_fuzzer + + # at01 + intr, msg = fn(((3, 10), (2, 10), (1, 8), (2, 6), (2, 6), (5, 6), (7, 8)), (0, 0), (8, 0), ((10, 5), (8, 6), (6, 5), (6, 4), (7, 2), (10, 4)), reverse=True) + self.assertFalse(intr, msg=msg) + + # at02 + intr, msg = fn(((5, 5), (4, 5), (2, 0), (4, -1), (6, 0), (5, 5)), (0, 0), (-5, 0), ((2, 11), (-2, 8), (2, 5), (3, 6), (3, 11)), reverse=True) + self.assertFalse(intr, msg=msg) + + # at03 + intr, msg = fn((9.5, 8.5), (8.5, 7.5), (9.5, 5), (10.5, 7)), (0, 0), (-9, -9), ((2, 5), (-1, 5), (-2, 3), (2, 1), (3, 2)), reverse=True) + self.assertFalse(intr, msg=msg) + + # at04 + intr, msg = fn(((4.5, 4), (0.5, 2), (0.5, 1), (0.5, 0), (2.5, -2), (3.5, -2), (5.5, -1), (4.5, 4)), (0, 0), (6.7492919018596025, 4.29500393754702), ((8, 8.5), (5, 9.5), (4, 8.5), (6, 5.5), (6, 5.5)), reverse=True) + self.assertFalse(intr, msg=msg) + def test_one_moving_one_stationary_along_path_intr_at_start(self): - pass + fn = self._calc_one_moving_one_stat_along_path_fuzzer + + # au01 + intr, msg = fn(((5, 3.5), (5, 2.5), (3, -0.5), (-2, 0.5), (-3, 2.5), (-2, 4.5), (0, 6.5)), (0, 0), (9, 2), ((6.5, 6.5), (9.5, 0.5), (3.5, -0.5), (1.5, 2.5), (3.5, 6.5))) + self.assertTrue(intr, msg=msg) + + # au02 + intr, msg = fn(((6.5, 5.5), (4.5, 3.5), (2.5, 6.5), (2.5, 7.5), (6.5, 6.5)), (0, 0), (10, -5), ((6, 2.5), (1, -1.5), (-2, 2.5), (-2, 2.5), (3, 6.5))) + self.assertTrue(intr, msg=msg) + + # au03 + intr, msg = fn(((10.5, 3.5), (8.5, 2.5), (5.5, 6.5), (9.5, 8.5), (11.5, 6.5), (11.5, 5.5)), (0, 0), (3, -7), ((12, 1), (11, 0), (9, -3), (8, -3), (5, -1), (5, 4), (9, 5))) + self.assertTrue(intr, msg=msg) + + # au04 + intr, msg = fn(((3.5, 6), (-0.5, 5), (-0.5, 7), (-0.5, 8), (1.5, 9), (1.5, 9), (3.5, 7)), (0, 0), (-6, 9), ((7, 6), (5, 6), (4, 6), (3, 7), (5, 10), (7, 9))) + self.assertTrue(intr, msg=msg) + def test_one_moving_one_stationary_along_path_intr_later(self): - pass - def test_one_moving_one_stationary_distlimit_touch_at_end(self): - pass - def test_one_moving_one_stationary_distlimit_intr_after_end(self): - pass + fn = self._calc_one_moving_one_stat_along_path_fuzzer + + # av01 + intr, msg = fn(((-5, 9), (-8, 7), (-9, 7), (-8, 11), (-5, 10)), (0, 0), (15, 2), ((4, 15.5), (5, 12.5), (0, 11.5), (1, 16.5))) + self.assertTrue(intr, msg=msg) + + # av02 + intr, msg = fn(((4.5, -0.5), (3.5, -2.5), (1.5, -3.5), (-0.5, 0.5), (-0.5, 1.5), (1.5, 2.5)), (0, 0), (13, 3), ((8, 6), (10, 6), (10, 4), (8, 4))) + self.assertTrue(intr, msg=msg) + + # av03 + intr, msg = fn(((3, 17.5), (3, 16.5), (1, 15.5), (-1, 15.5), (-1, 18.5), (0, 19.5)), (0, 0), (-3, -6), ((14.5, 13), (14.5, 9), (12.5, 9), (11.5, 12), (12.5, 13))) + self.assertTrue(intr, msg=msg) + + # av04 + intr, msg = fn(((-5, 2.5), (-8, 0.5), (-9, 1.5), (-8, 4.5), (-6, 4.5)), (0, 0), (12, -10), ((6, -1.5), (5, -3.5), (2, -2.5), (3, 0.5))) + self.assertTrue(intr, msg=msg) + + def test_one_moving_one_stationary_along_path_touch_at_end(self): + fn = self._calc_one_moving_one_stat_along_path_fuzzer + + # aw01 + intr, msg = fn(((-2, 0.5), (-3, -0.5), (-4, 0.5), (-3, 1.5)), (0, 0), (7, 1), ((9, 0), (8, 0), (5, 1), (5, 3), (7, 4), (9, 4))) + self.assertFalse(intr, msg=msg) + + # aw02 + intr, msg = fn(((11, -3.5), (9, -5.5), (6, -4.5), (6, -1.5), (9, -1.5)), (0, 0), (-7, 10), ((14, 8), (14, 7), (12, 7), (13, 9))) + self.assertFalse(intr, msg=msg) + + # aw03 + intr, msg = fn(((3, 0.5), (2, 1.5), (2, 2.5), (4, 2.5)), (0, 0), (-0.5, 5), ((-0.5, 5), (-1.5, 5), (-2.5, 7), (-0.5, 9), (1.5, 8), (1.5, 7))) + self.assertFalse(intr, msg=msg) + + # aw04 + intr, msg = fn(((15, 4.5), (15, 2.5), (13, 3.5), (13, 4.5), (14, 4.5)), (0, 0), (-1, -9), ((12, -5), (11, -9), (8, -9), (10, -4))) + self.assertFalse(intr, msg=msg) + + def test_one_moving_one_stationary_along_path_intr_after_end(self): + fn = self._calc_one_moving_one_stat_along_path_fuzzer + + # ax01 + intr, msg = fn(((-6.5, 3.5), (-7.5, 0.5), (-10.5, 1.5), (-8.5, 4.5)), (0, 0), (5, 0), ((1, 2.5), (1, 0.5), (-1, 0.5), (-1, 1.5), (0, 2.5))) + self.assertFalse(intr, msg=msg) + + # ax02 + intr, msg = fn(((1.5, 3.5), (0.5, 2.5), (-0.5, 2.5), (-0.5, 3.5), (0.5, 4.5)), (0, 0), (10, 4), ((17.5, 6), (14.5, 6), (12.5, 8), (14.5, 10), (17.5, 9))) + self.assertFalse(intr, msg=msg) + + # ax03 + intr, msg = fn(((1, 2), (0, 3), (0, 5), (1, 6), (4, 4)), (0, 0), (7, 3), ((14, 7.5), (13, 8.5), (15, 9.5), (15, 8.5))) + self.assertFalse(intr, msg=msg) + + # ax04 + intr, msg = fn(((2.5, -4), (1.5, -6), (0.5, -6), (-1.5, -4), (-0.5, -2), (2.5, -3)), (0, 0), (6, -1), ((12, -7), (10, -5), (10, -4), (14, -4))) + self.assertFalse(intr, msg=msg) # calculate_one_moving_many_stationary def test_one_moving_many_stationary_no_intr(self): From 633400b2a8139a56e01949414b71f4ee7fe2d5ca Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Mon, 11 Sep 2017 09:56:12 -0700 Subject: [PATCH 216/251] Cleanup tests, add line2.contains_point * imgs/test_geometry/test_extrapolated_intersection/as_... * imgs/test_geometry/test_extrapolated_intersection/at_... - fix point duplication * pygorithm/geometry/line2.py - add contains_point * tests/test_geometry.py - fix test errors (not failures) and add test for line2.contains_point --- ...oving_one_stationary_along_path_no_intr.py | 8 ++-- ...ving_one_stationary_along_path_touching.py | 8 ++-- pygorithm/geometry/line2.py | 45 +++++++++++++++++++ tests/test_geometry.py | 41 ++++++++++------- 4 files changed, 78 insertions(+), 24 deletions(-) diff --git a/imgs/test_geometry/test_extrapolated_intersection/as_test_one_moving_one_stationary_along_path_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/as_test_one_moving_one_stationary_along_path_no_intr.py index a9e055a..01bc79f 100644 --- a/imgs/test_geometry/test_extrapolated_intersection/as_test_one_moving_one_stationary_along_path_no_intr.py +++ b/imgs/test_geometry/test_extrapolated_intersection/as_test_one_moving_one_stationary_along_path_no_intr.py @@ -13,22 +13,22 @@ def setup_fig01(): def setup_fig02(): fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-2, 12), ylim=(-1, 10)) - create_moving_polygon(fig, ax, renderer, ((11, 5), (8, 8), (7, 7), (6, 3), (9, 3), (11, 5)), (-1, -3)) - create_still_polygon(fig, ax, renderer, ((3.5, 8.5), (1.5, 8.5), (1.5, 8.5), (-0.5, 7.5), (0.5, 3.5), (1.5, 2.5), (4.5, 2.5), (5.5, 6.5))) + create_moving_polygon(fig, ax, renderer, ((11, 5), (8, 8), (7, 7), (6, 3), (9, 3)), (-1, -3)) + create_still_polygon(fig, ax, renderer, ((3.5, 8.5), (1.5, 8.5), (-0.5, 7.5), (0.5, 3.5), (1.5, 2.5), (4.5, 2.5), (5.5, 6.5))) return fig, ax, '{}02_{}'.format(func_code, func_name) def setup_fig03(): fig, ax, renderer = create_newfig('{}03'.format(func_code), xlim=(-3, 9), ylim=(-1, 15)) create_moving_polygon(fig, ax, renderer, ((0.5, 9.0), (-1.5, 8.0), (-1.5, 6.0), (1.5, 5.0), (2.5, 5.0), (2.5, 9.0)), (0, 5)) - create_still_polygon(fig, ax, renderer, ((7.0, 6.0), (4.0, 5.0), (4.0, 3.0), (6.0, 2.0), (8.0, 3.0), (7.0, 6.0))) + create_still_polygon(fig, ax, renderer, ((7.0, 6.0), (4.0, 5.0), (4.0, 3.0), (6.0, 2.0), (8.0, 3.0))) return fig, ax, '{}03_{}'.format(func_code, func_name) def setup_fig04(): fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-2, 12), ylim=(-3, 10)) create_moving_polygon(fig, ax, renderer, ((5.5, 4.5), (3.5, -1.5), (9.5, -1.5), (10.5, 0.5)), (-4, 0)) - create_still_polygon(fig, ax, renderer, ((7.5, 8.5), (7.5, 8.5), (6.5, 5.5), (7.5, 4.5), (9.5, 4.5), (10.5, 7.5))) + create_still_polygon(fig, ax, renderer, ((7.5, 8.5), (6.5, 5.5), (7.5, 4.5), (9.5, 4.5), (10.5, 7.5))) return fig, ax, '{}04_{}'.format(func_code, func_name) run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/at_test_one_moving_one_stationary_along_path_touching.py b/imgs/test_geometry/test_extrapolated_intersection/at_test_one_moving_one_stationary_along_path_touching.py index 029047b..23e67c9 100644 --- a/imgs/test_geometry/test_extrapolated_intersection/at_test_one_moving_one_stationary_along_path_touching.py +++ b/imgs/test_geometry/test_extrapolated_intersection/at_test_one_moving_one_stationary_along_path_touching.py @@ -5,14 +5,14 @@ def setup_fig01(): fig, ax, renderer = create_newfig('{}01'.format(func_code), xlim=(-1, 16), ylim=(-1, 11)) - create_moving_polygon(fig, ax, renderer, ((3, 10), (2, 10), (1, 8), (2, 6), (2, 6), (5, 6), (7, 8)), (8, 0)) + create_moving_polygon(fig, ax, renderer, ((3, 10), (2, 10), (1, 8), (2, 6), (5, 6), (7, 8)), (8, 0)) create_still_polygon(fig, ax, renderer, ((10, 5), (8, 6), (6, 5), (6, 4), (7, 2), (10, 4))) return fig, ax, '{}01_{}'.format(func_code, func_name) def setup_fig02(): fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-8, 7), ylim=(-2, 12)) - create_moving_polygon(fig, ax, renderer, ((5, 5), (4, 5), (2, 0), (4, -1), (6, 0), (5, 5)), (-5, 0)) + create_moving_polygon(fig, ax, renderer, ((5, 5), (4, 5), (2, 0), (4, -1), (6, 0)), (-5, 0)) create_still_polygon(fig, ax, renderer, ((2, 11), (-2, 8), (2, 5), (3, 6), (3, 11))) return fig, ax, '{}02_{}'.format(func_code, func_name) @@ -26,8 +26,8 @@ def setup_fig03(): def setup_fig04(): fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-1, 14), ylim=(-3, 11)) - create_moving_polygon(fig, ax, renderer, ((4.5, 4), (0.5, 2), (0.5, 1), (0.5, 0), (2.5, -2), (3.5, -2), (5.5, -1), (4.5, 4)), (6.7492919018596025, 4.29500393754702)) - create_still_polygon(fig, ax, renderer, ((8, 8.5), (5, 9.5), (4, 8.5), (6, 5.5), (6, 5.5))) + create_moving_polygon(fig, ax, renderer, ((4.5, 4), (0.5, 2), (0.5, 1), (0.5, 0), (2.5, -2), (3.5, -2), (5.5, -1)), (6.7492919018596025, 4.29500393754702)) + create_still_polygon(fig, ax, renderer, ((8, 8.5), (5, 9.5), (4, 8.5), (6, 5.5))) return fig, ax, '{}04_{}'.format(func_code, func_name) diff --git a/pygorithm/geometry/line2.py b/pygorithm/geometry/line2.py index 3dcacc4..bf8103d 100644 --- a/pygorithm/geometry/line2.py +++ b/pygorithm/geometry/line2.py @@ -397,6 +397,51 @@ def are_parallel(line1, line2): return math.isclose(line1.slope, line2.slope) + @staticmethod + def contains_point(line, point, offset = None): + """ + Determine if the line contains the specified point. + + Optionally, specify an offset for the line. Being + on the line is determined using `math.isclose`. + + :param line: the line + :type line: :class:`pygorithm.geometry.line2.Line2` + :param point: the point + :type point: :class:`pygorithm.geometry.vector2.Vector2` + :param offset: the offset of the line or None for the origin + :type offset: :class:`pygorithm.geometry.vector2.Vector2` or None + :returns: if the point is on the line + :rtype: bool + """ + + if line.vertical: + x = line.start.x + offset.x if offset is not None else line.start.x + if not math.isclose(point.x, x, abs_tol=1e-07): + return False + ymin = line.min_y + offset.y if offset is not None else line.min_y + ymax = line.max_y + offset.y if offset is not None else line.max_y + if math.isclose(point.y, ymin, abs_tol=1e-07) or math.isclose(point.y, ymax, abs_tol=1e-07): + return True + return point.y > ymin and point.y < ymax + + xmin = line.min_x + offset.x if offset is not None else line.min_x + xmax = line.max_x + offset.x if offset is not None else line.max_x + + if not (math.isclose(point.x, xmin, abs_tol=1e-07) or point.x > xmin): + return False + + if not (math.isclose(point.x, xmax, abs_tol=1e-07) or point.x < xmax): + return False + + ystart = line.start.y + offset.y if offset is not None else line.start.y + if line.horizontal: + return math.isclose(ystart, point.y, abs_tol=1e-07) + + yint = line.calculate_y_intercept(offset) + yatx = line.slope * point.x + yint + return math.isclose(point.y, yatx, abs_tol=1e-07) + @staticmethod def find_intersection(line1, line2, offset1 = None, offset2 = None): """ diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 1cf0783..f0f30e7 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -340,6 +340,13 @@ def test_are_parallel(self): _line = line2.Line2(vector2.Vector2(5, 4), vector2.Vector2(3, 1)) self.assertTrue(line2.Line2.are_parallel(self.line_1_1_3_4, _line)) + + def test_contains_point(self): + self.assertFalse(line2.Line2.contains_point(self.line_origin_1_1, self.vec_1_1, self.vec_1_2)) + self.assertTrue(line2.Line2.contains_point(self.line_origin_1_1, self.vec_1_1)) + self.assertTrue(line2.Line2.contains_point(self.line_1_1_3_4, vector2.Vector2(2, 2.5))) + self.assertFalse(line2.Line2.contains_point(self.line_1_1_3_4, vector2.Vector2(2, 2.5), vector2.Vector2(1, 0))) + self.assertTrue(line2.Line2.contains_point(line2.Line2(vector2.Vector2(-3, -3), vector2.Vector2(6, 3)), vector2.Vector2(3, 1))) def _find_intr_fuzzer(self, v1, v2, v3, v4, exp_touching, exp_overlap, exp_intr, number_fuzzes = 3): for i in range(number_fuzzes): @@ -1806,7 +1813,7 @@ def _calc_one_moving_one_stat_distlimit_fuzzer(self, poly1tup, vel1tuporvec, pol return intr, msg def test_one_moving_one_stationary_distlimit_no_intr(self): - fn = _calc_one_moving_one_stat_distlimit_fuzzer + fn = self._calc_one_moving_one_stat_distlimit_fuzzer # am01 intr, msg = fn(((0, 3), (1, 3), (1, 2), (0, 2)), (1, 0), ((2, 0), (3, 1), (4, 0)), 4) @@ -1821,18 +1828,18 @@ def test_one_moving_one_stationary_distlimit_no_intr(self): self.assertFalse(intr, msg=msg) # am04 - intr, msg = fn(((4, 1.75), (5, 2.5), (6, 2.5), (4, 1.25)), (-2, 1), ((4.175), (5, 2.5), (6, 2.5), (4, 1.25)), self.pt(-2, 1).magnitude()) + intr, msg = fn(((4, 1.75), (5, 2.5), (6, 2.5), (4, 1.25)), (-2, 1), ((4, 1.75), (5, 2.5), (6, 2.5), (4, 1.25)), self.pt(-2, 1).magnitude()) self.assertFalse(intr, msg=msg) def test_one_moving_one_stationary_distlimit_touching(self): - fn = _calc_one_moving_one_stat_distlimit_fuzzer + fn = self._calc_one_moving_one_stat_distlimit_fuzzer # an01 - intr, msg = fn(((0, 3), (1, 3), (1, 2), (0, 2)), (5, -1.25), ((3, 1), (4, 1), (3, 0), (4, 0)), self.pt(5, -1.25).magnitude()) + intr, msg = fn(((0, 3), (1, 3), (1, 2), (0, 2)), (5, -1.25), ((3, 1), (4, 1), (4, 0), (3, 0)), self.pt(5, -1.25).magnitude()) self.assertFalse(intr, msg=msg) # an02 - intr, msg = fn(((1, 3), (2, 3), (1, 2), (2, 2)), (4, 0), ((1, 0), (2, 1), (4, 2), (5, 0)), 4) + intr, msg = fn(((1, 3), (2, 3), (2, 2), (1, 2)), (4, 0), ((1, 0), (2, 1), (4, 2), (5, 0)), 4) self.assertFalse(intr, msg=msg) # an03 @@ -1844,7 +1851,7 @@ def test_one_moving_one_stationary_distlimit_touching(self): self.assertFalse(intr, msg=msg) def test_one_moving_one_stationary_distlimit_intr_at_start(self): - fn = _calc_one_moving_one_stat_distlimit_fuzzer + fn = self._calc_one_moving_one_stat_distlimit_fuzzer # ao01 intr, msg = fn(((3, 3), (4, 3), (4, 1), (3, 1)), (2, 0), ((3, 1), (4, 1), (4, 0), (3, 0)), 2) @@ -1863,7 +1870,7 @@ def test_one_moving_one_stationary_distlimit_intr_at_start(self): self.assertTrue(intr, msg=msg) def test_one_moving_one_stationary_distlimit_intr_later(self): - fn = _calc_one_moving_one_stat_distlimit_fuzzer + fn = self._calc_one_moving_one_stat_distlimit_fuzzer # ap01 intr, msg = fn(((2, 3), (3, 3), (3, 2), (2, 2)), (5, 4), ((3, 5), (4, 5), (4, 4), (3, 4)), self.pt(5, 4).magnitude()) @@ -1882,7 +1889,7 @@ def test_one_moving_one_stationary_distlimit_intr_later(self): self.assertTrue(intr, msg=msg) def test_one_moving_one_stationary_distlimit_touch_at_limit(self): - fn = _calc_one_moving_one_stat_distlimit_fuzzer + fn = self._calc_one_moving_one_stat_distlimit_fuzzer # aq01 intr, msg = fn(((0, 1), (1, 1), (1, 0), (0, 0)), (4, 3), ((3, 5), (4, 5), (4, 4), (3, 4)), self.pt(4, 3).magnitude()) @@ -1901,7 +1908,7 @@ def test_one_moving_one_stationary_distlimit_touch_at_limit(self): self.assertFalse(intr, msg=msg) def test_one_moving_one_stationary_distlimit_intr_after_limit(self): - fn = _calc_one_moving_one_stat_distlimit_fuzzer + fn = self._calc_one_moving_one_stat_distlimit_fuzzer # ar01 intr, msg = fn(((0, 1), (1, 1), (1, 0), (0, 0)), (4, 3), ((5.5, 5.5), (6.5, 5.5), (6.5, 4.5), (5.5, 4.5)), self.pt(4, 3).magnitude()) @@ -1923,7 +1930,9 @@ def test_one_moving_one_stationary_distlimit_intr_after_limit(self): def _calc_one_moving_one_stat_along_path_fuzzer(self, poly1tup, pos1tuporvec, pos2tuporvec, poly2tup, reverse=False): # i generated a few polygons in the wrong order when making these tests if reverse: + poly1tup = list(p for p in poly1tup) poly1tup.reverse() + poly2tup = list(p for p in poly2tup) poly2tup.reverse() fn = self.extr_intr.calculate_one_moving_one_stationary_along_path @@ -1956,34 +1965,34 @@ def test_one_moving_one_stationary_along_path_no_intr(self): self.assertFalse(intr, msg=msg) # as02 - intr, msg = fn(((11, 5), (8, 8), (7, 7), (6, 3), (9, 3), (11, 5)), (0, 0), (-1, -3), ((3.5, 8.5), (1.5, 8.5), (1.5, 8.5), (-0.5, 7.5), (0.5, 3.5), (1.5, 2.5), (4.5, 2.5), (5.5, 6.5)), reverse=True) + intr, msg = fn(((11, 5), (8, 8), (7, 7), (6, 3), (9, 3)), (0, 0), (-1, -3), ((3.5, 8.5), (1.5, 8.5), (-0.5, 7.5), (0.5, 3.5), (1.5, 2.5), (4.5, 2.5), (5.5, 6.5)), reverse=True) self.assertFalse(intr, msg=msg) # as03 - intr, msg = fn(((0.5, 9.0), (-1.5, 8.0), (-1.5, 6.0), (1.5, 5.0), (2.5, 5.0), (2.5, 9.0)), (0, 0), (0, 5), ((7.0, 6.0), (4.0, 5.0), (4.0, 3.0), (6.0, 2.0), (8.0, 3.0), (7.0, 6.0)), reverse=True) + intr, msg = fn(((0.5, 9.0), (-1.5, 8.0), (-1.5, 6.0), (1.5, 5.0), (2.5, 5.0), (2.5, 9.0)), (0, 0), (0, 5), ((7.0, 6.0), (4.0, 5.0), (4.0, 3.0), (6.0, 2.0), (8.0, 3.0)), reverse=True) self.assertFalse(intr, msg=msg) # as04 - intr, msg = fn(((5.5, 4.5), (3.5, -1.5), (9.5, -1.5), (10.5, 0.5)), (0, 0), (-4, 0), ((7.5, 8.5), (7.5, 8.5), (6.5, 5.5), (7.5, 4.5), (9.5, 4.5), (10.5, 7.5)), reverse=True) + intr, msg = fn(((5.5, 4.5), (3.5, -1.5), (9.5, -1.5), (10.5, 0.5)), (0, 0), (-4, 0), ((7.5, 8.5), (6.5, 5.5), (7.5, 4.5), (9.5, 4.5), (10.5, 7.5)), reverse=True) self.assertFalse(intr, msg=msg) def test_one_moving_one_stationary_along_path_touching(self): fn = self._calc_one_moving_one_stat_along_path_fuzzer # at01 - intr, msg = fn(((3, 10), (2, 10), (1, 8), (2, 6), (2, 6), (5, 6), (7, 8)), (0, 0), (8, 0), ((10, 5), (8, 6), (6, 5), (6, 4), (7, 2), (10, 4)), reverse=True) + intr, msg = fn(((3, 10), (2, 10), (1, 8), (2, 6), (5, 6), (7, 8)), (0, 0), (8, 0), ((10, 5), (8, 6), (6, 5), (6, 4), (7, 2), (10, 4)), reverse=True) self.assertFalse(intr, msg=msg) # at02 - intr, msg = fn(((5, 5), (4, 5), (2, 0), (4, -1), (6, 0), (5, 5)), (0, 0), (-5, 0), ((2, 11), (-2, 8), (2, 5), (3, 6), (3, 11)), reverse=True) + intr, msg = fn(((5, 5), (4, 5), (2, 0), (4, -1), (6, 0)), (0, 0), (-5, 0), ((2, 11), (-2, 8), (2, 5), (3, 6), (3, 11)), reverse=True) self.assertFalse(intr, msg=msg) # at03 - intr, msg = fn((9.5, 8.5), (8.5, 7.5), (9.5, 5), (10.5, 7)), (0, 0), (-9, -9), ((2, 5), (-1, 5), (-2, 3), (2, 1), (3, 2)), reverse=True) + intr, msg = fn(((9.5, 8.5), (8.5, 7.5), (9.5, 5), (10.5, 7)), (0, 0), (-9, -9), ((2, 5), (-1, 5), (-2, 3), (2, 1), (3, 2)), reverse=True) self.assertFalse(intr, msg=msg) # at04 - intr, msg = fn(((4.5, 4), (0.5, 2), (0.5, 1), (0.5, 0), (2.5, -2), (3.5, -2), (5.5, -1), (4.5, 4)), (0, 0), (6.7492919018596025, 4.29500393754702), ((8, 8.5), (5, 9.5), (4, 8.5), (6, 5.5), (6, 5.5)), reverse=True) + intr, msg = fn(((4.5, 4), (0.5, 2), (0.5, 1), (0.5, 0), (2.5, -2), (3.5, -2), (5.5, -1)), (0, 0), (6.7492919018596025, 4.29500393754702), ((8, 8.5), (5, 9.5), (4, 8.5), (6, 5.5)), reverse=True) self.assertFalse(intr, msg=msg) def test_one_moving_one_stationary_along_path_intr_at_start(self): From 1cbec4bfd7d668453dd3d188dd212871f7ccab14 Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Wed, 13 Sep 2017 10:10:07 -0700 Subject: [PATCH 217/251] Add ay* tsets * imgs/test_geometry/test_extrapolated_intersection/ ay_test_one_moving_many_stationary.py - 4 tests for one moving many stationary with no intersection * imgs/test_geometry/test_extrapolated_intersection/out/ export ay01, ay02, ay03, and ay04 * tests/test_geometry.py - add ay01, ay02, ay03, ay04 (see imgs) --- ...test_one_moving_many_stationary_no_intr.py | 44 +++++++++++++ ...est_one_moving_many_stationary_no_intr.png | Bin 0 -> 37825 bytes ...est_one_moving_many_stationary_no_intr.png | Bin 0 -> 48010 bytes ...est_one_moving_many_stationary_no_intr.png | Bin 0 -> 54089 bytes ...est_one_moving_many_stationary_no_intr.png | Bin 0 -> 33239 bytes tests/test_geometry.py | 60 +++++++++++++++++- 6 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 imgs/test_geometry/test_extrapolated_intersection/ay_test_one_moving_many_stationary_no_intr.py create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ay01_test_one_moving_many_stationary_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ay02_test_one_moving_many_stationary_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ay03_test_one_moving_many_stationary_no_intr.png create mode 100644 imgs/test_geometry/test_extrapolated_intersection/out/ay04_test_one_moving_many_stationary_no_intr.png diff --git a/imgs/test_geometry/test_extrapolated_intersection/ay_test_one_moving_many_stationary_no_intr.py b/imgs/test_geometry/test_extrapolated_intersection/ay_test_one_moving_many_stationary_no_intr.py new file mode 100644 index 0000000..05deb43 --- /dev/null +++ b/imgs/test_geometry/test_extrapolated_intersection/ay_test_one_moving_many_stationary_no_intr.py @@ -0,0 +1,44 @@ +from utils import create_newfig, create_moving_polygon, create_still_polygon, run_or_export + +func_code = 'ay' +func_name = 'test_one_moving_many_stationary_no_intr' + +def setup_fig01(): + fig, ax, renderer = create_newfig('{}01'.format(func_code), xlim=(-1, 12), ylim=(-1, 12)) + create_moving_polygon(fig, ax, renderer, ((3, 3, 'botleft'), (4, 3), (4, 4), (3, 4)), (4, 4), 'none') + create_still_polygon(fig, ax, renderer, ((6, 3, 'botleft'), (7, 3), (7, 4), (6, 4)), 'none') + create_still_polygon(fig, ax, renderer, ((3, 6, 'botleft'), (3, 7), (4, 7), (4, 6)), 'none') + create_still_polygon(fig, ax, renderer, ((4, 10), (6, 11), (6, 8), (2, 7))) + + return fig, ax, '{}01_{}'.format(func_code, func_name) + +def setup_fig02(): + fig, ax, renderer = create_newfig('{}02'.format(func_code), xlim=(-3, 9), ylim=(-10, 5)) + create_moving_polygon(fig, ax, renderer, ((-1, -9.5), (-1, -5.5), (3, -5.5), (4, -7.5)), (3, 6)) + create_still_polygon(fig, ax, renderer, ((6, -6), (8, -7), (7, -9))) + create_still_polygon(fig, ax, renderer, ((0, 2), (2, 3), (1, 1))) + create_still_polygon(fig, ax, renderer, ((-2, -2, 'botleft'), (-2, -1), (-1, -1), (-1, -2)), 'none') + create_still_polygon(fig, ax, renderer, ((8, -4, 'botleft'), (8, -3), (7, -3), (7, -4)), 'none') + + return fig, ax, '{}02_{}'.format(func_code, func_name) + +def setup_fig03(): + fig, ax, renderer = create_newfig('{}03'.format(func_code), xlim=(-1, 21), ylim=(-1, 15)) + create_moving_polygon(fig, ax, renderer, ((18.5, 3), (17.5, 3), (17.5, 5), (19.5, 5)), (-3, 9)) + create_still_polygon(fig, ax, renderer, ((18, 13), (20, 14), (18.5, 11))) + create_still_polygon(fig, ax, renderer, ((5, 5), (6, 2), (3, 3), (2, 4))) + + return fig, ax, '{}03_{}'.format(func_code, func_name) + +def setup_fig04(): + fig, ax, renderer = create_newfig('{}04'.format(func_code), xlim=(-9, 7), ylim=(-4, 6)) + create_moving_polygon(fig, ax, renderer, ((-6, 2), (-6, 1), (-8, 0), (-8, 2)), (5, 0)) + create_still_polygon(fig, ax, renderer, ((-7, 3, 'botleft'), (-7, 4), (-6, 4), (-6, 3)), 'none') + create_still_polygon(fig, ax, renderer, ((-6, 3, 'botleft'), (-6, 4), (-5, 4), (-5, 3)), 'none') + create_still_polygon(fig, ax, renderer, ((-5, 3, 'botleft'), (-5, 4), (-4, 4), (-4, 3)), 'none') + create_still_polygon(fig, ax, renderer, ((-4, 3, 'botleft'), (-4, 4), (-3, 4), (-3, 3)), 'none') + + + return fig, ax, '{}04_{}'.format(func_code, func_name) + +run_or_export(setup_fig01, setup_fig02, setup_fig03, setup_fig04) \ No newline at end of file diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ay01_test_one_moving_many_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ay01_test_one_moving_many_stationary_no_intr.png new file mode 100644 index 0000000000000000000000000000000000000000..b05815241210fd74c76d5610b3594ea82c6cee6d GIT binary patch literal 37825 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 literal 0 HcmV?d00001 diff --git a/tests/test_geometry.py b/tests/test_geometry.py index f0f30e7..a1b4244 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -2072,8 +2072,66 @@ def test_one_moving_one_stationary_along_path_intr_after_end(self): self.assertFalse(intr, msg=msg) # calculate_one_moving_many_stationary + def _calc_one_moving_many_stat_fuzzer(self, poly1tup, poly1vec, other_poly_tups_arr): + fn = self.extr_intr.calculate_one_moving_many_stationary + + poly1 = polygon2.Polygon2(list(vector2.Vector2(p) for p in poly1tup)) + vec1 = vector2.Vector2(poly1vec) + other_polys_arr = list(polygon2.Polygon2(list(vector2.Vector2(p) for p in poly)) for poly in other_poly_tups_arr) + + offset1 = vector2.Vector2(random.uniform(-1000, 1000), random.uniform(-1000, 1000)) + other_offsets = list(random.uniform(-1000, 1000) for poly in other_polys_arr) + + newpoly1 = polygon2.Polygon2(list(p + offset1 for p in poly1.points)) + other_polys_offsets_comb = list((polygon2.Polygon2(list(p + other_offsets[i] for p in other_polys_arr[i].points)), other_offsets[i]) for i in range(len(other_offsets))) + + msg = "poly1={}\nvec1={}\noffset1={}\n\nOTHER POLYGONS:\n\n" + + for ind, tup in enumerate(other_polys_offsets_comb): + poly = tup[0] + offset = tup[1] + + msg = msg + "poly{}={}\noffset{}={}".format(ind, poly, ind, offset) + + result = fn(poly1, offset1, vec1, other_polys_offsets_comb) + return result, msg + def test_one_moving_many_stationary_no_intr(self): - pass + fn = self._calc_one_moving_many_stat_fuzzer + + # ay01 + intr, msg = fn(((3, 3), (4, 3), (4, 4), (3, 4)), (1, 1), [ + ((6, 3), (7, 3), (7, 4), (6, 4)), + ((3, 6), (3, 7), (4, 7), (4, 6)), + ((4, 10), (6, 11), (6, 8), (2, 7)) + ]) + self.assertFalse(intr, msg=msg) + + # ay02 + intr, msg = fn(((-1, -9.5), (-1, -5.5), (3, -5.5), (4, -7.5)), (1, 2), [ + ((6, -6), (8, -7), (7, -9)), + ((0, 2), (2, 3), (1, 1)), + ((-2, -2), (-2, -1), (-1, -1), (-1, -2)), + ((8, -4), (8, -3), (7, -3), (7, -4)) + ]) + self.assertFalse(intr, msg=msg) + + # ay03 + intr, msg = fn(((18.5, 3), (17.5, 3), (17.5, 5), (19.5, 5)), (-1, 3), [ + ((18, 13), (20, 14), (18.5, 11)), + ((5, 5), (6, 2), (3, 3), (2, 4)) + ]) + self.assertFalse(intr, msg=msg) + + # ay04 + intr, msg = fn(((-6, 2), (-6, 1), (-8, 0), (-8, 2)), (10, 0), [ + ((-7, 3), (-7, 4), (-6, 4), (-6, 3)), + ((-6, 3), (-6, 4), (-5, 4), (-5, 3)), + ((-5, 3), (-5, 4), (-4, 4), (-4, 3)), + ((-4, 3), (-4, 4), (-3, 4), (-3, 3)) + ]) + self.assertFalse(intr, msg=msg) + def test_one_moving_many_stationary_touching(self): pass def test_one_moving_many_stationary_intr_at_start(self): From 30b71153feacd415ff82310345ff579ff76cc14f Mon Sep 17 00:00:00 2001 From: Anthony Marakis Date: Mon, 23 Oct 2017 19:04:57 +0300 Subject: [PATCH 218/251] author --- pygorithm/data_structures/trie.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pygorithm/data_structures/trie.py b/pygorithm/data_structures/trie.py index 5637cc5..c9b2dee 100644 --- a/pygorithm/data_structures/trie.py +++ b/pygorithm/data_structures/trie.py @@ -1,7 +1,6 @@ -''' -Node class to create a node -for trie -''' +""" +Author: MrDupin +""" class Node: def __init__(self, v, p=None, w=False): From 08fba2bd0adc1225c1c29a637bcda413d2a38957 Mon Sep 17 00:00:00 2001 From: Anthony Marakis Date: Tue, 24 Oct 2017 15:45:40 +0300 Subject: [PATCH 219/251] update dp init --- pygorithm/dynamic_programming/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pygorithm/dynamic_programming/__init__.py b/pygorithm/dynamic_programming/__init__.py index 4a7d594..b3dd710 100644 --- a/pygorithm/dynamic_programming/__init__.py +++ b/pygorithm/dynamic_programming/__init__.py @@ -3,8 +3,10 @@ """ from . import binary_knapsack from . import lis +from . import min_cost_path __all__ = [ 'binary_knapsack', - 'lis' + 'lis', + 'min_cost_path' ] From 75a721261a3f16ded767343cd184057da36e7b2b Mon Sep 17 00:00:00 2001 From: Anthony Marakis Date: Tue, 24 Oct 2017 15:56:22 +0300 Subject: [PATCH 220/251] test for min_cost_path --- tests/test_dynamic_programming.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_dynamic_programming.py b/tests/test_dynamic_programming.py index 6489fc2..e6c6327 100644 --- a/tests/test_dynamic_programming.py +++ b/tests/test_dynamic_programming.py @@ -3,7 +3,8 @@ from pygorithm.dynamic_programming import ( binary_knapsack, - lis + lis, + min_cost_path ) @@ -21,5 +22,14 @@ def test_lis(self): self.assertEqual(ans[0], 5) self.assertEqual(ans[1], [10, 22, 33, 50, 60]) +class TestMinCostPath(unittest.TestCase): + def test_min_cost_path(self): + matrix = [[5, 3, 10, 17, 1], + [4, 2, 9, 8, 5], + [11, 12, 3, 9, 6], + [1, 3, 4, 2, 10], + [7, 11, 13, 7, 3]] + self.assertEqual(min_cost_path.find_path(matrix), 38) + if __name__ == '__main__': unittest.main() From 7c2908201cab353a2a77bc396249da02acfd8ce6 Mon Sep 17 00:00:00 2001 From: Anthony Marakis Date: Tue, 24 Oct 2017 15:58:04 +0300 Subject: [PATCH 221/251] Create min_cost_path.py --- .../dynamic_programming/min_cost_path.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 pygorithm/dynamic_programming/min_cost_path.py diff --git a/pygorithm/dynamic_programming/min_cost_path.py b/pygorithm/dynamic_programming/min_cost_path.py new file mode 100644 index 0000000..ad01edf --- /dev/null +++ b/pygorithm/dynamic_programming/min_cost_path.py @@ -0,0 +1,51 @@ +""" +Author: MrDupin +Created At: 25th August 2017 +""" +import inspect + +#Path(i, j) = min(Path(i-1, j), Path(i, j-1) + Matrix(i, j) + + +def calculate_path(i, j, matrix, s): + if(s[i][j] > 0): + #We have already calculated solution for i,j; return it. + return s[i][j] + + m1 = calculate_path(i-1, j, matrix, s) + matrix[i][j] #Optimal solution for i-1, j (top) + m2 = calculate_path(i, j-1, matrix, s) + matrix[i][j] #Optimal solution for i, j-1 (left) + + #Store and return the optimal (minimum) solution + if(m1 < m2): + s[i][j] = m1 + return m1 + else: + s[i][j] = m2 + return m2 + + +def find_path(matrix): + l = len(matrix); + #Initialize solution array. + #A node of i, j in solution has an equivalent node of i, j in matrix + s = [[0 for i in range(l)] for j in range(l)]; + + #Initialize first node as its matrix equivalent + s[0][0] = matrix[0][0] + + #Initialize first column as the matrix equivalent + the above solution + for i in range(1, l): + s[i][0] = matrix[i][0] + s[i-1][0] + + #Initialize first row as the matrix equivalent + the left solution + for j in range(1, l): + s[0][j] = matrix[0][j] + s[0][j-1] + + return calculate_path(l-1, l-1, matrix, s) + + +def get_code(): + """ + returns the code for the min cost path function + """ + return inspect.getsource(calculate_path) From cbf44050d244e6ecb7a897f053ba8c5ec5d662f9 Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Tue, 31 Oct 2017 08:55:46 -0500 Subject: [PATCH 222/251] Implemented Radix Sorting, thanks @ashaywalke Implemented Radix Sorting unittests --- pygorithm/sorting/__init__.py | 2 ++ pygorithm/sorting/radix_sort.py | 38 +++++++++++++++++++++++++++++++++ tests/test_sorting.py | 14 +++++++++++- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 pygorithm/sorting/radix_sort.py diff --git a/pygorithm/sorting/__init__.py b/pygorithm/sorting/__init__.py index 0781eea..e91f6f0 100644 --- a/pygorithm/sorting/__init__.py +++ b/pygorithm/sorting/__init__.py @@ -8,6 +8,7 @@ from . import counting_sort from . import insertion_sort from . import merge_sort +from . import radix_sort from . import selection_sort from . import shell_sort @@ -19,6 +20,7 @@ 'insertion_sort', 'merge_sort', 'quick_sort', + 'radix_sort', 'selection_sort', 'shell_sort' ] diff --git a/pygorithm/sorting/radix_sort.py b/pygorithm/sorting/radix_sort.py new file mode 100644 index 0000000..bc4fe4b --- /dev/null +++ b/pygorithm/sorting/radix_sort.py @@ -0,0 +1,38 @@ +""" +Author: Ian Doarn +Date: 31st Oct 2017 + +Reference: + https://stackoverflow.com/questions/35419229/python-radix-sort +""" + + +def sort(_list, base=10): + """ + Radix Sort + + :param _list: array to sort + :param base: base radix number + :return: sorted list + """ + # TODO: comment this + + result_list = [] + power = 0 + while _list: + bs = [[] for _ in range(base)] + for x in _list: + bs[x // base ** power % base].append(x) + _list = [] + for b in bs: + for x in b: + if x < base ** (power + 1): + result_list.append(x) + else: + _list.append(x) + power += 1 + return result_list + + +if __name__ == '__main__': + print(sort([170, 45, 75, 90, 802, 24, 2, 66])) diff --git a/tests/test_sorting.py b/tests/test_sorting.py index 7f08153..89c6157 100644 --- a/tests/test_sorting.py +++ b/tests/test_sorting.py @@ -10,7 +10,8 @@ counting_sort, bucket_sort, shell_sort, - heap_sort) + heap_sort, + radix_sort) class TestSortingAlgorithm(unittest.TestCase): @@ -105,5 +106,16 @@ def test_heap_sort(self): self.alphaResult = heap_sort.sort(self.alphaArray) self.assertEqual(self.alphaResult, self.sorted_alpha_array) + +class TestRadixSort(TestSortingAlgorithm): + def test_radix_sort(self): + self.result = radix_sort.sort(self.array) + self.assertEqual(self.result, self.sorted_array) + + # TODO: Fix radix sort to sort alphabetically + # self.alphaResult = radix_sort.sort(self.alphaArray) + # self.assertEqual(self.alphaResult, self.sorted_alpha_array) + + if __name__ == '__main__': unittest.main() From 38c99009e7663afdc886681410a53fdd3dd6248a Mon Sep 17 00:00:00 2001 From: Ian Doarn Date: Tue, 31 Oct 2017 09:01:36 -0500 Subject: [PATCH 223/251] Updated CONTRIBUTORS.md Updated __init__.py --- CONTIRBUTORS.md | 1 + pygorithm/__init__.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CONTIRBUTORS.md b/CONTIRBUTORS.md index ff19646..5f53af9 100644 --- a/CONTIRBUTORS.md +++ b/CONTIRBUTORS.md @@ -17,3 +17,4 @@ - Sharad '[sharadbhat](https://github.com/sharadbhat)' Bhat - Alexey '[aesee](https://github.com/aesee)' Sarapulov - Anthony '[MrDupin](https://github.com/MrDupin)' Marakis + - Ashey '[asheywalke](https://github.com/ashaywalke)' Walke diff --git a/pygorithm/__init__.py b/pygorithm/__init__.py index 8117acc..05bf36e 100644 --- a/pygorithm/__init__.py +++ b/pygorithm/__init__.py @@ -30,6 +30,7 @@ Sharad 'sharadbhat' Bhat Alexey 'aesee' Sarapulov Anthony 'MrDupin' Marakis +Ashey 'asheywalke' Walke """ @@ -57,7 +58,8 @@ "Emil 'Skeen' Madsen", "Ian 'IanDoarn' Doarn", "Timothy 'Tjstretchalot' Moore", - "Sharad 'sharadbhat' Bhat" + "Sharad 'sharadbhat' Bhat", + "Ashey 'asheywalke' Walke" ] __all__ = [ From d39d762211c78c1faed539eee7fc1fad0e6623d4 Mon Sep 17 00:00:00 2001 From: ashu01 Date: Sat, 30 Dec 2017 08:01:39 +0530 Subject: [PATCH 224/251] fixed shadow --- pygorithm/fibonacci/memoization.py | 15 +++++++-------- pygorithm/fibonacci/recursion.py | 12 ++++++------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/pygorithm/fibonacci/memoization.py b/pygorithm/fibonacci/memoization.py index 6374aa4..8a522e9 100644 --- a/pygorithm/fibonacci/memoization.py +++ b/pygorithm/fibonacci/memoization.py @@ -2,7 +2,6 @@ Fibonacci implementation through cache. """ import inspect -# TODO: Fix shadowed parameter names def get_sequence(n): @@ -11,20 +10,20 @@ def get_sequence(n): """ cache = {0: 0, 1: 1} - def fib(n): + def fib(num): """ Return Fibonacci value by specified number as integer. """ - if n in cache: - return cache[n] - cache[n] = fib(n - 1) + fib(n - 2) - return cache[n] + if num in cache: + return cache[num] + cache[num] = fib(num - 1) + fib(num - 2) + return cache[num] - def sequence(n): + def sequence(num): """ Return sequence of Fibonacci values as list. """ - return [fib(value) for value in range(n + 1)] + return [fib(value) for value in range(num + 1)] return sequence(n) diff --git a/pygorithm/fibonacci/recursion.py b/pygorithm/fibonacci/recursion.py index bf14730..beeee4c 100644 --- a/pygorithm/fibonacci/recursion.py +++ b/pygorithm/fibonacci/recursion.py @@ -8,20 +8,20 @@ def get_sequence(n): """ Return Fibonacci sequence from zero to specified number as list. """ - def fib(n): + def fib(num): """ Return Fibonacci value by specified number as integer. """ - if n <= 1: - return n + if num <= 1: + return num - return fib(n - 1) + fib(n - 2) + return fib(num - 1) + fib(num - 2) - def sequence(n): + def sequence(num): """ Return sequence of Fibonacci values as list. """ - return [fib(value) for value in range(n + 1)] + return [fib(value) for value in range(num + 1)] return sequence(n) From 26d5e47012442adf0437737765e4ca54ad9a514d Mon Sep 17 00:00:00 2001 From: ashu01 Date: Sat, 30 Dec 2017 08:02:22 +0530 Subject: [PATCH 225/251] added missing import --- pygorithm/dynamic_programming/lis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/dynamic_programming/lis.py b/pygorithm/dynamic_programming/lis.py index ae8ff5a..3a111a5 100644 --- a/pygorithm/dynamic_programming/lis.py +++ b/pygorithm/dynamic_programming/lis.py @@ -2,7 +2,7 @@ Author: Omkar Pathak Created At: 25th August 2017 """ - +import inspect def longest_increasing_subsequence(_list): """ From b8d54def554354b68751afa0aa986a33de72741a Mon Sep 17 00:00:00 2001 From: Dat Quoc Ngo Date: Thu, 1 Mar 2018 10:42:58 -0600 Subject: [PATCH 226/251] Add insert and count-nodes I added insert and counting-node functions for BinaryTree and BinarySearchTree --- pygorithm/data_structures/tree.py | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/pygorithm/data_structures/tree.py b/pygorithm/data_structures/tree.py index 2967bc7..1a9c96b 100644 --- a/pygorithm/data_structures/tree.py +++ b/pygorithm/data_structures/tree.py @@ -72,6 +72,16 @@ def __init__(self): self._pre_order = [] self._post_order = [] + def insert(self, data): + """ + insert data to root or create a root node + """ + if self.root: + self.root.set_data(data) + else: + self.root = Node() + self.root.set_data(data) + def inorder(self, root): """ in this we traverse first to the leftmost node, @@ -117,6 +127,24 @@ def postorder(self, root): self._post_order.append(root.get_data()) return self._post_order + def number_of_nodes(self, root): + """ + counting number of nodes + """ + # need testing + left_number = 0; + right_number = 0; + + #number of nodes left side + if root.get_left(): + left_number = self.number_of_nodes(root.get_left()) + + #numbeof nodes right side + if root.get_right(): + right_number = self.number_of_nodes(root.get_right()) + + return left_number + right_number + 1 + @staticmethod def get_code(): """ @@ -359,6 +387,24 @@ def postorder(self): if self.root is not None: return self.root.postorder(self.root) + def number_of_nodes(self, root): + """ + counting number of nodes + """ + # need testing + left_number = 0; + right_number = 0; + + #number of nodes left side + if root.get_left(): + left_number = self.number_of_nodes(root.get_left()) + + #numbeof nodes right side + if root.get_right(): + right_number = self.number_of_nodes(root.get_right()) + + return left_number + right_number + 1 + @staticmethod def get_code(): """ From dfb83dfe55c21d9dc9f51482f733fd7bc036dff5 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 18 Sep 2018 09:25:24 +0530 Subject: [PATCH 227/251] Updated README.rst --- README.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.rst b/README.rst index 43a41db..c25b876 100644 --- a/README.rst +++ b/README.rst @@ -2,6 +2,10 @@ Pygorithm ========= +.. image:: http://pepy.tech/badge/pygorithm + :target: http://pepy.tech/project/pygorithm + :alt: Downloads + .. image:: https://readthedocs.org/projects/pygorithm/badge/?version=latest :target: http://pygorithm.readthedocs.io/en/latest/?badge=latest :alt: Documentation Status From 345d371be024461bc6adcab68a896301903f2014 Mon Sep 17 00:00:00 2001 From: tsehori <10086302+tsehori@users.noreply.github.com> Date: Tue, 2 Oct 2018 00:07:40 +0300 Subject: [PATCH 228/251] Update heap_sort.py Added explanation for how heap-sort works and corresponds to the method heapify(). --- pygorithm/sorting/heap_sort.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pygorithm/sorting/heap_sort.py b/pygorithm/sorting/heap_sort.py index 9b02024..ffc177f 100644 --- a/pygorithm/sorting/heap_sort.py +++ b/pygorithm/sorting/heap_sort.py @@ -13,11 +13,15 @@ def sort(_list): """ heap sort algorithm + Create the heap using heapify(). + This is an implementation of max-heap, so after bullding the heap, the max element is at the top (_list[0]). + We move it to the end of the list (_list[end]), which will later become the sorted list. + After moving this element to the end, we take the element in the end to the top and shift it down to its right location in the heap. + We proceed to do the same for all elements in the heap, such that in the end we're left with the sorted list. :param _list: list of values to sort :return: sorted values """ - # TODO: Add description of how this works! # create the heap heapify(_list) From e3f20690f55818999dc5474c3a6445749fdaec4a Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 15 Nov 2018 12:17:04 +0530 Subject: [PATCH 229/251] Update README.rst --- README.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.rst b/README.rst index c25b876..1f1e000 100644 --- a/README.rst +++ b/README.rst @@ -2,6 +2,11 @@ Pygorithm ========= + +.. image:: https://img.shields.io/packagist/l/doctrine/orm.svg + :target: https://github.com/OmkarPathak/pygorithm/blob/master/LICENSE + :alt: Packagist + .. image:: http://pepy.tech/badge/pygorithm :target: http://pepy.tech/project/pygorithm :alt: Downloads @@ -13,6 +18,10 @@ Pygorithm .. image:: https://img.shields.io/badge/Python-3.6-brightgreen.svg :target: https://github.com/OmkarPathak/pygorithm :alt: Python 3.6 + +.. image:: https://img.shields.io/badge/Say%20Thanks-%F0%9F%A6%89-1EAEDB.svg + :target: https://saythanks.io/to/OmkarPathak + :alt: Say Thanks! | A Python module to learn all the major algorithms on the go! | Purely for educational purposes From 20546c9c9b80211ebe3609f51f1c45429909e0bf Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Thu, 15 Nov 2018 13:44:36 +0530 Subject: [PATCH 230/251] Update README.rst --- README.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.rst b/README.rst index 1f1e000..1528dd4 100644 --- a/README.rst +++ b/README.rst @@ -22,6 +22,10 @@ Pygorithm .. image:: https://img.shields.io/badge/Say%20Thanks-%F0%9F%A6%89-1EAEDB.svg :target: https://saythanks.io/to/OmkarPathak :alt: Say Thanks! + +.. image:: https://img.shields.io/github/contributors/omkarpathak/pygorithm.svg + :target: https://github.com/OmkarPathak/pygorithm/graphs/contributors + :alt: Contributors | A Python module to learn all the major algorithms on the go! | Purely for educational purposes From 24210ed4fc6cc2ef165aa3fbe7dbd1c813a69783 Mon Sep 17 00:00:00 2001 From: Sunil Joshi Date: Tue, 30 Jul 2019 12:07:55 +0530 Subject: [PATCH 231/251] Issue#88 - Fixed (#89) --- pygorithm/data_structures/linked_list.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygorithm/data_structures/linked_list.py b/pygorithm/data_structures/linked_list.py index 0107b62..2df8cce 100644 --- a/pygorithm/data_structures/linked_list.py +++ b/pygorithm/data_structures/linked_list.py @@ -50,7 +50,7 @@ def _search(self, node, data): return False if node.data == data: return node - return self._search(node.get_next(), data) + return self._search(node.next, data) def get_data(self): """ From 0be25396340fd002f08e024dc90a0bb9ed0f1792 Mon Sep 17 00:00:00 2001 From: SAYAN SANYAL <37104041+s-sanyal@users.noreply.github.com> Date: Sun, 6 Oct 2019 06:50:57 +0530 Subject: [PATCH 232/251] Added Longest Common Subsequence Algorithm (#91) --- pygorithm/dynamic_programming/lcs.py | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 pygorithm/dynamic_programming/lcs.py diff --git a/pygorithm/dynamic_programming/lcs.py b/pygorithm/dynamic_programming/lcs.py new file mode 100644 index 0000000..cdbba95 --- /dev/null +++ b/pygorithm/dynamic_programming/lcs.py @@ -0,0 +1,48 @@ +""" +A subsequence is a sequence that can be derived from another +sequence by deleting some or no elements without changing the +order of the remaining elements. + +For example, 'abd' is a subsequence of 'abcd' whereas 'adc' is not + +Given 2 strings containing lowercase english alphabets, find the length +of the Longest Common Subsequence (L.C.S.). + +Example: + Input: 'abcdgh' + 'aedfhr' + Output: 3 + + Explanation: The longest subsequence common to both the string is "adh" + +Time Complexity : O(M*N) +Space Complexity : O(M*N), where M and N are the lengths of the 1st and 2nd string +respectively. + +""" + + +def longest_common_subsequence(s1, s2): + """ + :param s1: string + :param s2: string + :return: int + """ + m = len(s1) + n = len(s2) + + dp = [[0] * (n + 1) for i in range(m + 1)] + """ + dp[i][j] : contains length of LCS of s1[0..i-1] and s2[0..j-1] + """ + + for i in range(m + 1): + for j in range(n + 1): + if i == 0 or j == 0: + dp[i][j] = 0 + elif s1[i - 1] == s2[j - 1]: + dp[i][j] = dp[i - 1][j - 1] + 1 + else: + dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + + return dp[m][n] From dffa590e7ad28b2bb991dd84ea0aadca6d9ae50c Mon Sep 17 00:00:00 2001 From: Abhay Raj Singh Date: Sun, 6 Oct 2019 16:05:26 +0000 Subject: [PATCH 233/251] Optimised and simplified lcs.py (#92) --- pygorithm/dynamic_programming/lcs.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/pygorithm/dynamic_programming/lcs.py b/pygorithm/dynamic_programming/lcs.py index cdbba95..e30e6ee 100644 --- a/pygorithm/dynamic_programming/lcs.py +++ b/pygorithm/dynamic_programming/lcs.py @@ -28,19 +28,16 @@ def longest_common_subsequence(s1, s2): :param s2: string :return: int """ - m = len(s1) - n = len(s2) + m, n = len(s1), len(s2) - dp = [[0] * (n + 1) for i in range(m + 1)] + dp = [[0] * (n + 1)] * (m + 1) """ dp[i][j] : contains length of LCS of s1[0..i-1] and s2[0..j-1] """ - for i in range(m + 1): - for j in range(n + 1): - if i == 0 or j == 0: - dp[i][j] = 0 - elif s1[i - 1] == s2[j - 1]: + for i in range(1, m + 1): + for j in range(1, n + 1): + if s1[i - 1] == s2[j - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 else: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) From 9fab4749ca13ec0649d3ec6ed87596ded1d16c88 Mon Sep 17 00:00:00 2001 From: Abhay Raj Singh Date: Mon, 7 Oct 2019 04:31:21 +0000 Subject: [PATCH 234/251] Fixed sieve (#93) * Fixed sieve - Algo now printing n when if prime - updated tests * Removed extra 'this' --- pygorithm/math/sieve_of_eratosthenes.py | 4 ++-- tests/test_math.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pygorithm/math/sieve_of_eratosthenes.py b/pygorithm/math/sieve_of_eratosthenes.py index 4aa4d52..0b877ee 100644 --- a/pygorithm/math/sieve_of_eratosthenes.py +++ b/pygorithm/math/sieve_of_eratosthenes.py @@ -29,7 +29,7 @@ def sieve_of_eratosthenes(n): p = 2 while p * p <= n: - # if p is not marked as False, this it is a prime + # if p is not marked as False, it is a prime if primes[p]: # mark all the multiples of number as False for i in range(p * 2, n + 1, p): @@ -37,7 +37,7 @@ def sieve_of_eratosthenes(n): p += 1 # getting all primes - primes = [element for element in range(2, n) if primes[element]] + primes = [element for element in range(2, n + 1) if primes[element]] return primes diff --git a/tests/test_math.py b/tests/test_math.py index 983e5e2..66c764c 100644 --- a/tests/test_math.py +++ b/tests/test_math.py @@ -17,7 +17,7 @@ def test_lcm_using_gcd(self): class TestSieveOfEratosthenes(unittest.TestCase): def test_sieve_of_eratosthenes(self): - self.assertEqual(sieve_of_eratosthenes.sieve_of_eratosthenes(10), [2, 3, 5, 7]) + self.assertEqual(sieve_of_eratosthenes.sieve_of_eratosthenes(11), [2, 3, 5, 7, 11]) class TestFactorial(unittest.TestCase): def test_factorial(self): From cb83b18c84ebc2de2f784869aa320f685636f9ef Mon Sep 17 00:00:00 2001 From: rqj <9392566+rqj@users.noreply.github.com> Date: Tue, 15 Oct 2019 07:27:28 +0300 Subject: [PATCH 235/251] Changing implementation for weighted graphs (#94) * Suggestion for changes in the WeightedGraph class * Suggestion for changes in the WeightedGraph class --- pygorithm/data_structures/graph.py | 50 +++++++++++++++++------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/pygorithm/data_structures/graph.py b/pygorithm/data_structures/graph.py index e477c66..2b6cbf0 100644 --- a/pygorithm/data_structures/graph.py +++ b/pygorithm/data_structures/graph.py @@ -6,7 +6,6 @@ import inspect import math - class Graph(object): """Graph object Creates the graph @@ -37,16 +36,23 @@ def get_code(self): """ return inspect.getsource(Graph) - class WeightedGraph(object): """WeightedGraph object A graph with a numerical value (weight) on edges """ def __init__(self): - self.edges_weighted = [] self.vertexes = set() - self.forest = None + self.graph = {} + self._forest = None + + def get_weight(self, u, v): + """ + Returns the weight of an edge between vertexes u and v. + If there isnt one: return None. + """ + return self.graph.get((u,v), self.graph.get((v,u), None)) + def add_edge(self, u, v, weight): """ @@ -54,39 +60,41 @@ def add_edge(self, u, v, weight): :param v: to vertex - type : integer :param weight: weight of the edge - type : numeric """ - edge = ((u, v), weight) - self.edges_weighted.append(edge) - self.vertexes.update((u, v)) + if self.get_weight(u, v) != None: + print("Such edge already exists!") + else: + self.vertexes.update((u, v)) + self.graph[(u,v)] = weight def print_graph(self): """ Print the graph :return: None """ - for (u, v), weight in self.edges_weighted: - print("%d -> %d weight: %d" % (u, v, weight)) + for (u, v) in self.graph: + print("%d -> %d weight: %d" % (u, v, self.graph[(u, v)])) - def __set_of(self, vertex): + def _set_of(self, vertex): """ Helper method :param vertex: :return: """ - for tree in self.forest: + for tree in self._forest: if vertex in tree: return tree return None - def __union(self, u_set, v_set): + def _union(self, u_set, v_set): """ Helper method :param u_set: :param v_set: :return: """ - self.forest.remove(u_set) - self.forest.remove(v_set) - self.forest.append(v_set + u_set) + self._forest.remove(u_set) + self._forest.remove(v_set) + self._forest.append(v_set + u_set) def kruskal_mst(self): """ @@ -96,14 +104,14 @@ def kruskal_mst(self): Author: Michele De Vita """ # sort by weight - self.edges_weighted.sort(key=lambda pair: pair[1]) + self.graph = {k: self.graph[k] for k in sorted(self.graph, key=self.graph.get, reverse=False)} edges_explored = [] - self.forest = [[v] for v in self.vertexes] - for (u, v), weight in self.edges_weighted: - u_set, v_set = self.__set_of(u), self.__set_of(v) + self._forest = [[v] for v in self.vertexes] + for (u, v) in self.graph: + u_set, v_set = self._set_of(u), self._set_of(v) if u_set != v_set: - self.__union(u_set, v_set) - edges_explored.append(((u, v), weight)) + self._union(u_set, v_set) + edges_explored.append(((u, v), self.graph[u, v])) return edges_explored # TODO: Is this necessary? From 953c2d48d4cf51861ad55cc07da27d88f73e374d Mon Sep 17 00:00:00 2001 From: Pratik Narola <35926958+Pratiknarola@users.noreply.github.com> Date: Tue, 15 Oct 2019 20:41:05 +0530 Subject: [PATCH 236/251] added few sorting algorithms (#95) * Create brick_sort.py * Create tim_sort.py * Create cocktail_sort.py * Create gnome_sort.py * Update cocktail_sort.py * Update cocktail_sort.py * Update cocktail_sort.py * Update cocktail_sort.py * Update cocktail_sort.py * Update gnome_sort.py * Update tim_sort.py * Update tim_sort.py --- pygorithm/sorting/brick_sort.py | 17 ++++++++ pygorithm/sorting/cocktail_sort.py | 57 ++++++++++++++++++++++++ pygorithm/sorting/gnome_sort.py | 32 ++++++++++++++ pygorithm/sorting/tim_sort.py | 69 ++++++++++++++++++++++++++++++ 4 files changed, 175 insertions(+) create mode 100644 pygorithm/sorting/brick_sort.py create mode 100644 pygorithm/sorting/cocktail_sort.py create mode 100644 pygorithm/sorting/gnome_sort.py create mode 100644 pygorithm/sorting/tim_sort.py diff --git a/pygorithm/sorting/brick_sort.py b/pygorithm/sorting/brick_sort.py new file mode 100644 index 0000000..ae4f879 --- /dev/null +++ b/pygorithm/sorting/brick_sort.py @@ -0,0 +1,17 @@ +def brick_sort(arr, n): + # Initially array is unsorted + isSorted = 0 + while isSorted == 0: + isSorted = 1 + temp = 0 + for i in range(1, n-1, 2): + if arr[i] > arr[i+1]: + arr[i], arr[i+1] = arr[i+1], arr[i] + isSorted = 0 + + for i in range(0, n-1, 2): + if arr[i] > arr[i+1]: + arr[i], arr[i+1] = arr[i+1], arr[i] + isSorted = 0 + + return diff --git a/pygorithm/sorting/cocktail_sort.py b/pygorithm/sorting/cocktail_sort.py new file mode 100644 index 0000000..02f84ec --- /dev/null +++ b/pygorithm/sorting/cocktail_sort.py @@ -0,0 +1,57 @@ +''' +Created by: Pratik Narola (https://github.com/Pratiknarola) +last modified: 14-10-2019 +''' + +''' + +Cocktail Sort is a variation of Bubble sort. +The Bubble sort algorithm always traverses elements from left +and moves the largest element to its correct position in first iteration +and second largest in second iteration and so on. +Cocktail Sort traverses through a given array in both directions alternatively. + +''' + +def cocktail_sort(a): + n = len(a) + swapped = True + start = 0 + end = n-1 + while swapped: + + # reset the swapped flag on entering the loop, + # because it might be true from a previous + # iteration. + swapped = False + + # loop from left to right same as the bubble + # sort + for i in range(start, end): + if a[i] > a[i + 1]: + a[i], a[i + 1] = a[i + 1], a[i] + swapped = True + + # if nothing moved, then array is sorted. + if not swapped: + break + + # otherwise, reset the swapped flag so that it + # can be used in the next stage + swapped = False + + # move the end point back by one, because + # item at the end is in its rightful spot + end -= 1 + + # from right to left, doing the same + # comparison as in the previous stage + for i in range(end-1, start-1, -1): + if a[i] > a[i + 1]: + a[i], a[i + 1] = a[i + 1], a[i] + swapped = True + + # increase the starting point, because + # the last stage would have moved the next + # smallest number to its rightful spot. + start = start + 1 diff --git a/pygorithm/sorting/gnome_sort.py b/pygorithm/sorting/gnome_sort.py new file mode 100644 index 0000000..742257b --- /dev/null +++ b/pygorithm/sorting/gnome_sort.py @@ -0,0 +1,32 @@ +''' +Created by: Pratik Narola (https://github.com/Pratiknarola) +last modified: 14-10-2019 +''' + +''' + +Gnome Sort also called Stupid sort is based on the concept of a Garden Gnome sorting his flower pots. +A garden gnome sorts the flower pots by the following method- + +He looks at the flower pot next to him and the previous one; +if they are in the right order he steps one pot forward, otherwise he swaps them and steps one pot backwards. +If there is no previous pot (he is at the starting of the pot line), he steps forwards; +if there is no pot next to him (he is at the end of the pot line), he is done. + +''' + + + +# A function to sort the given list using Gnome sort +def gnome_sort( arr, n): + index = 0 + while index < n: + if index == 0: + index = index + 1 + if arr[index] >= arr[index - 1]: + index = index + 1 + else: + arr[index], arr[index-1] = arr[index-1], arr[index] + index = index - 1 + + return arr diff --git a/pygorithm/sorting/tim_sort.py b/pygorithm/sorting/tim_sort.py new file mode 100644 index 0000000..a9d5f28 --- /dev/null +++ b/pygorithm/sorting/tim_sort.py @@ -0,0 +1,69 @@ +from insertion_sort import sort +# iterative Timsort function to sort the +# array[0...n-1] (similar to merge sort) +def tim_sort(arr, n): + + # Sort individual subarrays of size RUN + for i in range(0, n, RUN): + sort(arr, i, min((i+31), (n-1))) + + # start merging from size RUN (or 32). It will merge + # to form size 64, then 128, 256 and so on .... + size = RUN + while size < n: + + # pick starting point of left sub array. We + # are going to merge arr[left..left+size-1] + # and arr[left+size, left+2*size-1] + # After every merge, we increase left by 2*size + for left in range(0, n, 2*size): + + # find ending point of left sub array + # mid+1 is starting point of right sub array + mid = left + size - 1 + right = min((left + 2*size - 1), (n-1)) + + # merge sub array arr[left.....mid] & + # arr[mid+1....right] + merge(arr, left, mid, right) + + size = 2*size + +def merge(arr, l, m, r): + + # original array is broken in two parts + # left and right array + len1, len2 = m - l + 1, r - m + left, right = [], [] + for i in range(0, len1): + left.append(arr[l + i]) + for i in range(0, len2): + right.append(arr[m + 1 + i]) + + i, j, k = 0, 0, l + # after comparing, we merge those two array + # in larger sub array + while i < len1 and j < len2: + + if left[i] <= right[j]: + arr[k] = left[i] + i += 1 + + else: + arr[k] = right[j] + j += 1 + + k += 1 + + # copy remaining elements of left, if any + while i < len1: + + arr[k] = left[i] + k += 1 + i += 1 + + # copy remaining element of right, if any + while j < len2: + arr[k] = right[j] + k += 1 + j += 1 From 3f98cc95108f6533a59c4ce0f47d2bc091d74afb Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 15 Oct 2019 08:12:07 -0700 Subject: [PATCH 237/251] Improve sorting tests (#96) This verifies that sorting algorithms are either entirely inplace or do not modify the list and return a copy. Furthermore, this standardizes how they handle empty lists. --- pygorithm/sorting/bucket_sort.py | 7 +- pygorithm/sorting/merge_sort.py | 16 +- pygorithm/sorting/quick_sort.py | 2 +- tests/test_sorting.py | 282 ++++++++++++++++++------------- 4 files changed, 173 insertions(+), 134 deletions(-) diff --git a/pygorithm/sorting/bucket_sort.py b/pygorithm/sorting/bucket_sort.py index 4f6eb31..3fb0d05 100644 --- a/pygorithm/sorting/bucket_sort.py +++ b/pygorithm/sorting/bucket_sort.py @@ -14,7 +14,7 @@ def sort(_list, bucket_size=5): """ bucket sort algorithm - + :param _list: list of values to sort :param bucket_size: Size of the bucket :return: sorted values @@ -22,9 +22,8 @@ def sort(_list, bucket_size=5): string = False if len(_list) == 0: - # print("You don\'t have any elements in array!") - raise ValueError("Array can not be empty.") - + return [] + elif all(isinstance(element, str) for element in _list): string = True _list = [ord(element) for element in _list] diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index ccd79d9..be1fc01 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -3,16 +3,16 @@ Created On: 31st July 2017 - Best = Average = Worst = O(n log(n)) - + """ import inspect def merge(a, b): """ - Function to merge + Function to merge two arrays / separated lists - + :param a: Array 1 :param b: Array 2 :return: merged arrays @@ -34,14 +34,14 @@ def merge(a, b): def sort(_list): """ - Function to sort an array - using merge sort algorithm - + Function to sort an array + using merge sort algorithm + :param _list: list of values to sort :return: sorted """ if len(_list) == 0 or len(_list) == 1: - return _list + return list(_list) else: middle = len(_list)//2 a = sort(_list[:middle]) @@ -61,7 +61,7 @@ def time_complexities(): def get_code(): """ - easily retrieve the source code + easily retrieve the source code of the sort function :return: source code diff --git a/pygorithm/sorting/quick_sort.py b/pygorithm/sorting/quick_sort.py index f3b65df..53d62cf 100644 --- a/pygorithm/sorting/quick_sort.py +++ b/pygorithm/sorting/quick_sort.py @@ -16,7 +16,7 @@ def sort(_list): :return: sorted list """ if len(_list) <= 1: - return _list + return list(_list) pivot = _list[len(_list) // 2] left = [x for x in _list if x < pivot] middle = [x for x in _list if x == pivot] diff --git a/tests/test_sorting.py b/tests/test_sorting.py index 89c6157..e4fe3ba 100644 --- a/tests/test_sorting.py +++ b/tests/test_sorting.py @@ -1,121 +1,161 @@ -import unittest -import random - -from pygorithm.sorting import ( - bubble_sort, - insertion_sort, - selection_sort, - merge_sort, - quick_sort, - counting_sort, - bucket_sort, - shell_sort, - heap_sort, - radix_sort) - - -class TestSortingAlgorithm(unittest.TestCase): - def setUp(self): - # to test numeric numbers - self.array = list(range(15)) - random.shuffle(self.array) - self.sorted_array = list(range(15)) - - # to test alphabets - string = 'pythonisawesome' - self.alphaArray = list(string) - random.shuffle(self.alphaArray) - self.sorted_alpha_array = sorted(string) - - -class TestBubbleSort(TestSortingAlgorithm): - def test_bubble_sort(self): - self.result = bubble_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - self.alphaResult = bubble_sort.sort(self.alphaArray) - self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -class TestInsertionSort(TestSortingAlgorithm): - def test_insertion_sort(self): - self.result = insertion_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - self.alphaResult = insertion_sort.sort(self.alphaArray) - self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -class TestSelectionSort(TestSortingAlgorithm): - def test_selection_sort(self): - self.result = selection_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - self.alphaResult = selection_sort.sort(self.alphaArray) - self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -class TestMergeSort(TestSortingAlgorithm): - def test_merge_sort(self): - self.result = merge_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - self.alphaResult = merge_sort.sort(self.alphaArray) - self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -class TestQuickSort(TestSortingAlgorithm): - def test_quick_sort(self): - self.result = quick_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - self.alphaResult = quick_sort.sort(self.alphaArray) - self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -class TestCountingSort(TestSortingAlgorithm): - def test_counting_sort(self): - # counting sort is an integer based sort - self.result = counting_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - -class TestBucketSort(TestSortingAlgorithm): - def test_bucket_sort(self): - self.result = bucket_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - self.alphaResult = bucket_sort.sort(self.alphaArray) - self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -class TestShellSort(TestSortingAlgorithm): - def test_shell_sort(self): - self.result = shell_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - self.alphaResult = shell_sort.sort(self.alphaArray) - self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -class TestHeapSort(TestSortingAlgorithm): - def test_heap_sort(self): - self.result = heap_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - self.alphaResult = heap_sort.sort(self.alphaArray) - self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -class TestRadixSort(TestSortingAlgorithm): - def test_radix_sort(self): - self.result = radix_sort.sort(self.array) - self.assertEqual(self.result, self.sorted_array) - - # TODO: Fix radix sort to sort alphabetically - # self.alphaResult = radix_sort.sort(self.alphaArray) - # self.assertEqual(self.alphaResult, self.sorted_alpha_array) - - -if __name__ == '__main__': - unittest.main() +import unittest +import random + +from pygorithm.sorting import ( + bubble_sort, + insertion_sort, + selection_sort, + merge_sort, + quick_sort, + counting_sort, + bucket_sort, + shell_sort, + heap_sort) + + +class TestSortingAlgorithm: + def test_test_setup(self): + self.assertIsNotNone(getattr(self, 'sort', None)) + self.assertIsNotNone(getattr(self, 'inplace', None)) + self.assertIsNotNone(getattr(self, 'alph_support', None)) + + def _check_sort_list(self, arr, expected): + cp_arr = list(arr) + sarr = self.sort(cp_arr) + + self.assertTrue( + isinstance(sarr, list), 'weird result type: ' + str(type(sarr))) + self.assertEqual(len(sarr), len(arr)) + self.assertEqual(sarr, expected) + if self.inplace: + self.assertTrue(cp_arr is sarr, 'was not inplace') + else: + self.assertTrue(cp_arr is not sarr, 'was inplace') + self.assertEqual(cp_arr, arr, 'inplace modified list') + + def _check_sort_alph(self, inp, expected): + if not self.alph_support: + return + + self._check_sort_list(list(inp), list(expected)) + + def test_sort_empty(self): + self._check_sort_list([], []) + + def test_sort_single(self): + self._check_sort_list([5], [5]) + + def test_sort_single_alph(self): + self._check_sort_alph('a', 'a') + + def test_sort_two_inorder(self): + self._check_sort_list([1, 2], [1, 2]) + + def test_sort_two_outoforder(self): + self._check_sort_list([2, 1], [1, 2]) + + def test_sort_5_random_numeric(self): + arr = list(range(5)) + random.shuffle(arr) + self._check_sort_list(arr, list(range(5))) + + def test_sort_15_random_numeric(self): + arr = list(range(15)) + random.shuffle(arr) + self._check_sort_list(arr, list(range(15))) + + def test_sort_5_random_alph(self): + arr = ['a', 'b', 'c', 'd', 'e'] + random.shuffle(arr) + self._check_sort_alph(''.join(arr), 'abcde') + + def test_sort_15_random_alph(self): + arr = [chr(ord('a') + i) for i in range(15)] + exp = ''.join(arr) + random.shuffle(arr) + self._check_sort_alph(''.join(arr), exp) + + +class TestBubbleSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + return bubble_sort.sort(arr) + + +class TestInsertionSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + return insertion_sort.sort(arr) + + +class TestSelectionSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + return selection_sort.sort(arr) + + +class TestMergeSort(unittest.TestCase, TestSortingAlgorithm): + inplace = False + alph_support = True + + @staticmethod + def sort(arr): + return merge_sort.sort(arr) + + +class TestQuickSort(unittest.TestCase, TestSortingAlgorithm): + inplace = False + alph_support = True + + @staticmethod + def sort(arr): + return quick_sort.sort(arr) + + +class TestCountingSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = False + + @staticmethod + def sort(arr): + return counting_sort.sort(arr) + + +class TestBucketSort(unittest.TestCase, TestSortingAlgorithm): + inplace = False + alph_support = True + + @staticmethod + def sort(arr): + return bucket_sort.sort(arr) + + +class TestShellSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + return shell_sort.sort(arr) + + +class TestHeapSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + return heap_sort.sort(arr) + + +if __name__ == '__main__': + unittest.main() From 5cc90d161cabf2d83c3d1b1717ad8616fbcf22bf Mon Sep 17 00:00:00 2001 From: Timothy Moore Date: Tue, 15 Oct 2019 18:27:16 -0700 Subject: [PATCH 238/251] Add tests and improve documentation on new sorting algorithms (#97) This effectively standardizes the function arguments for all the new sorting algorithms to be consistent with the other ones. Also fixes a few bugs and performs some style improvements, such as moving documentation of functions to after the function definition instead of before, and adding documentation where it is missing. --- pygorithm/sorting/brick_sort.py | 42 ++++--- pygorithm/sorting/cocktail_sort.py | 83 +++++++------- pygorithm/sorting/gnome_sort.py | 36 +++--- pygorithm/sorting/tim_sort.py | 177 ++++++++++++++++++----------- tests/test_sorting.py | 43 ++++++- 5 files changed, 238 insertions(+), 143 deletions(-) diff --git a/pygorithm/sorting/brick_sort.py b/pygorithm/sorting/brick_sort.py index ae4f879..333f05e 100644 --- a/pygorithm/sorting/brick_sort.py +++ b/pygorithm/sorting/brick_sort.py @@ -1,17 +1,25 @@ -def brick_sort(arr, n): - # Initially array is unsorted - isSorted = 0 - while isSorted == 0: - isSorted = 1 - temp = 0 - for i in range(1, n-1, 2): - if arr[i] > arr[i+1]: - arr[i], arr[i+1] = arr[i+1], arr[i] - isSorted = 0 - - for i in range(0, n-1, 2): - if arr[i] > arr[i+1]: - arr[i], arr[i+1] = arr[i+1], arr[i] - isSorted = 0 - - return +def brick_sort(arr): + """Performs an odd-even in-place sort, which is a variation of a bubble + sort. + + https://www.geeksforgeeks.org/odd-even-sort-brick-sort/ + + :param arr: the array of values to sort + :return: the sorted array + """ + # Initially array is unsorted + is_sorted = False + while not is_sorted: + is_sorted = True + + for i in range(1, len(arr) - 1, 2): + if arr[i] > arr[i + 1]: + arr[i], arr[i + 1] = arr[i + 1], arr[i] + is_sorted = False + + for i in range(0, len(arr) - 1, 2): + if arr[i] > arr[i + 1]: + arr[i], arr[i + 1] = arr[i + 1], arr[i] + is_sorted = False + + return arr diff --git a/pygorithm/sorting/cocktail_sort.py b/pygorithm/sorting/cocktail_sort.py index 02f84ec..f9f6ecb 100644 --- a/pygorithm/sorting/cocktail_sort.py +++ b/pygorithm/sorting/cocktail_sort.py @@ -3,55 +3,58 @@ last modified: 14-10-2019 ''' -''' -Cocktail Sort is a variation of Bubble sort. -The Bubble sort algorithm always traverses elements from left -and moves the largest element to its correct position in first iteration -and second largest in second iteration and so on. -Cocktail Sort traverses through a given array in both directions alternatively. +def cocktail_sort(arr): + ''' + Cocktail Sort is a variation of Bubble sort. + The Bubble sort algorithm always traverses elements from left + and moves the largest element to its correct position in first iteration + and second largest in second iteration and so on. + Cocktail Sort traverses through a given array in both directions alternatively. -''' + This is an in-place sort. -def cocktail_sort(a): - n = len(a) + :param arr: the array to sort + :return: the sorted array, which is the same reference as arr + ''' swapped = True start = 0 - end = n-1 - while swapped: - - # reset the swapped flag on entering the loop, - # because it might be true from a previous - # iteration. + end = len(arr) - 1 + while swapped: + # reset the swapped flag on entering the loop, + # because it might be true from a previous + # iteration. swapped = False - - # loop from left to right same as the bubble - # sort - for i in range(start, end): - if a[i] > a[i + 1]: - a[i], a[i + 1] = a[i + 1], a[i] + + # loop from left to right same as the bubble + # sort + for i in range(start, end): + if arr[i] > arr[i + 1]: + arr[i], arr[i + 1] = arr[i + 1], arr[i] swapped = True - - # if nothing moved, then array is sorted. - if not swapped: + + # if nothing moved, then array is sorted. + if not swapped: break - - # otherwise, reset the swapped flag so that it - # can be used in the next stage + + # otherwise, reset the swapped flag so that it + # can be used in the next stage swapped = False - - # move the end point back by one, because - # item at the end is in its rightful spot + + # move the end point back by one, because + # item at the end is in its rightful spot end -= 1 - - # from right to left, doing the same - # comparison as in the previous stage - for i in range(end-1, start-1, -1): - if a[i] > a[i + 1]: - a[i], a[i + 1] = a[i + 1], a[i] + + # from right to left, doing the same + # comparison as in the previous stage + for i in range(end - 1, start - 1, -1): + if arr[i] > arr[i + 1]: + arr[i], arr[i + 1] = arr[i + 1], arr[i] swapped = True - - # increase the starting point, because - # the last stage would have moved the next - # smallest number to its rightful spot. + + # increase the starting point, because + # the last stage would have moved the next + # smallest number to its rightful spot. start = start + 1 + + return arr diff --git a/pygorithm/sorting/gnome_sort.py b/pygorithm/sorting/gnome_sort.py index 742257b..ecdfee5 100644 --- a/pygorithm/sorting/gnome_sort.py +++ b/pygorithm/sorting/gnome_sort.py @@ -3,30 +3,34 @@ last modified: 14-10-2019 ''' -''' -Gnome Sort also called Stupid sort is based on the concept of a Garden Gnome sorting his flower pots. -A garden gnome sorts the flower pots by the following method- -He looks at the flower pot next to him and the previous one; -if they are in the right order he steps one pot forward, otherwise he swaps them and steps one pot backwards. -If there is no previous pot (he is at the starting of the pot line), he steps forwards; -if there is no pot next to him (he is at the end of the pot line), he is done. -''' +# A function to sort the given list using Gnome sort +def gnome_sort(arr): + ''' + Gnome Sort also called Stupid sort is based on the concept of a Garden Gnome sorting his flower pots. + A garden gnome sorts the flower pots by the following method- + He looks at the flower pot next to him and the previous one; + if they are in the right order he steps one pot forward, otherwise he swaps them and steps one pot backwards. + If there is no previous pot (he is at the starting of the pot line), he steps forwards; + if there is no pot next to him (he is at the end of the pot line), he is done. -# A function to sort the given list using Gnome sort -def gnome_sort( arr, n): + This is an in-place sort. + + :param arr: the array of values to sort + :return: the sorted array, which is the same reference as arr + ''' index = 0 - while index < n: - if index == 0: + while index < len(arr): + if index == 0: index = index + 1 - if arr[index] >= arr[index - 1]: + elif arr[index] >= arr[index - 1]: index = index + 1 - else: - arr[index], arr[index-1] = arr[index-1], arr[index] + else: + arr[index], arr[index - 1] = arr[index - 1], arr[index] index = index - 1 - + return arr diff --git a/pygorithm/sorting/tim_sort.py b/pygorithm/sorting/tim_sort.py index a9d5f28..95d0a3c 100644 --- a/pygorithm/sorting/tim_sort.py +++ b/pygorithm/sorting/tim_sort.py @@ -1,69 +1,108 @@ -from insertion_sort import sort -# iterative Timsort function to sort the -# array[0...n-1] (similar to merge sort) -def tim_sort(arr, n): - - # Sort individual subarrays of size RUN - for i in range(0, n, RUN): - sort(arr, i, min((i+31), (n-1))) - - # start merging from size RUN (or 32). It will merge - # to form size 64, then 128, 256 and so on .... - size = RUN - while size < n: - - # pick starting point of left sub array. We - # are going to merge arr[left..left+size-1] - # and arr[left+size, left+2*size-1] - # After every merge, we increase left by 2*size - for left in range(0, n, 2*size): - - # find ending point of left sub array - # mid+1 is starting point of right sub array - mid = left + size - 1 - right = min((left + 2*size - 1), (n-1)) - - # merge sub array arr[left.....mid] & - # arr[mid+1....right] - merge(arr, left, mid, right) - - size = 2*size - -def merge(arr, l, m, r): - - # original array is broken in two parts - # left and right array - len1, len2 = m - l + 1, r - m - left, right = [], [] - for i in range(0, len1): - left.append(arr[l + i]) - for i in range(0, len2): - right.append(arr[m + 1 + i]) - - i, j, k = 0, 0, l - # after comparing, we merge those two array - # in larger sub array - while i < len1 and j < len2: - - if left[i] <= right[j]: - arr[k] = left[i] - i += 1 - - else: - arr[k] = right[j] - j += 1 - - k += 1 - - # copy remaining elements of left, if any - while i < len1: - - arr[k] = left[i] - k += 1 - i += 1 - - # copy remaining element of right, if any - while j < len2: - arr[k] = right[j] - k += 1 - j += 1 +def inplace_insertion_sort(arr, start_ind, end_ind): + """ + Performs an in-place insertion sort over a continuous slice of an + array. A natural way to avoid this would be to use numpy arrays, + where slicing does not copy. + + This is in-place and has no result. + + :param arr: the array to sort + :param start_ind: the index to begin sorting at + :param end_ind: the index to end sorting at. This index is excluded + from the sort (i.e., len(arr) is ok) + """ + for i in range(start_ind + 1, end_ind): + current_number = arr[i] + + for j in range(i - 1, start_ind - 1, -1): + if arr[j] > current_number: + arr[j], arr[j + 1] = arr[j + 1], arr[j] + else: + arr[j + 1] = current_number + break + + +# iterative Timsort function to sort the +# array[0...n-1] (similar to merge sort) +def tim_sort(arr, run=32): + """ + Tim sort algorithm. See https://en.wikipedia.org/wiki/Timsort. + This is performed in-place. + + :param arr: list of values to sort + :param run: the largest array that is sorted with an insertion sort. + :return: the sorted array + """ + + # Sort individual subarrays of size run + + for i in range(0, len(arr), run): + inplace_insertion_sort(arr, i, min(i + run, len(arr))) + + # start merging from size RUN (or 32). It will merge + # to form size 64, then 128, 256 and so on .... + size = run + while size < len(arr): + # pick starting point of left sub array. We + # are going to merge arr[left..left+size-1] + # and arr[left+size, left+2*size-1] + # After every merge, we increase left by 2*size + for left in range(0, len(arr), 2 * size): + # find ending point of left sub array + # mid+1 is starting point of right sub array + mid = left + size + right = min(left + (2 * size), len(arr)) + + # merge sub array arr[left.....mid] & + # arr[mid+1....right] + merge(arr, left, mid, right) + + size = 2 * size + return arr + +def merge(arr, left, mid, right): + """ + Merge of two sections of array, both of which are individually + sorted. The result is that the entire chunk is sorted. Note that right + edges are exclusive (like slicing). + + This modifies the passed array, but requires a complete copy of the array. + + .. code:: python + + merge([0, -1, 1, 3, 2, 4], 2, 4, 6) # [0, -1, 1, 2, 3, 4] + + :param arr: the array which should have a portion sorted in-place + :param left: the left-most index which is included in the merge + :param mid: the first index that belongs to the second section + :param right: the right-edge in the merge, which is not included in the sort. + """ + # original array is broken in two parts + # left and right array + left_arr = arr[left:mid] + right_arr = arr[mid:right] + + left_pos = 0 + right_pos = 0 + arr_ind = left + # after comparing, we merge those two array + # in larger sub array + while left_pos < len(left_arr) and right_pos < len(right_arr): + if left_arr[left_pos] <= right_arr[right_pos]: + arr[arr_ind] = left_arr[left_pos] + left_pos += 1 + else: + arr[arr_ind] = right_arr[right_pos] + right_pos += 1 + + arr_ind += 1 + + # copy remaining elements of left, if any + for i in range(left_pos, len(left_arr)): + arr[arr_ind] = left_arr[i] + arr_ind += 1 + + # copy remaining element of right, if any + for i in range(right_pos, len(right_arr)): + arr[arr_ind] = right_arr[i] + arr_ind += 1 diff --git a/tests/test_sorting.py b/tests/test_sorting.py index e4fe3ba..f7fcf6d 100644 --- a/tests/test_sorting.py +++ b/tests/test_sorting.py @@ -10,7 +10,12 @@ counting_sort, bucket_sort, shell_sort, - heap_sort) + heap_sort, + brick_sort, + tim_sort, + cocktail_sort, + gnome_sort +) class TestSortingAlgorithm: @@ -157,5 +162,41 @@ def sort(arr): return heap_sort.sort(arr) +class TestBrickSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + return brick_sort.brick_sort(arr) + + +class TestTimSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + # use a smaller run for testing + return tim_sort.tim_sort(arr, run=4) + + +class TestCocktailSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + return cocktail_sort.cocktail_sort(arr) + + +class TestGnomeSort(unittest.TestCase, TestSortingAlgorithm): + inplace = True + alph_support = True + + @staticmethod + def sort(arr): + return gnome_sort.gnome_sort(arr) + if __name__ == '__main__': unittest.main() From 4e41b3fc248e07a00a011dcca649bac24767d682 Mon Sep 17 00:00:00 2001 From: agrdivyam <56672552+agrdivyam@users.noreply.github.com> Date: Thu, 17 Oct 2019 13:30:45 +0530 Subject: [PATCH 239/251] Create GCD.py --- pygorithm/math/GCD.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 pygorithm/math/GCD.py diff --git a/pygorithm/math/GCD.py b/pygorithm/math/GCD.py new file mode 100644 index 0000000..424f2a1 --- /dev/null +++ b/pygorithm/math/GCD.py @@ -0,0 +1,18 @@ +def find_gcd(x, y): + + while(y): + x, y = y, x % y + + return x + + +l = [2, 4, 6, 8, 16] + +num1 = l[0] +num2 = l[1] +gcd = find_gcd(num1, num2) + +for i in range(2, len(l)): + gcd = find_gcd(gcd, l[i]) + +print(gcd) From 03be15c5c9c072baf830bf3da27256a3daca9549 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Mon, 13 Apr 2020 10:14:03 +0530 Subject: [PATCH 240/251] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 1528dd4..7823a9a 100644 --- a/README.rst +++ b/README.rst @@ -20,7 +20,7 @@ Pygorithm :alt: Python 3.6 .. image:: https://img.shields.io/badge/Say%20Thanks-%F0%9F%A6%89-1EAEDB.svg - :target: https://saythanks.io/to/OmkarPathak + :target: https://saythanks.io/to/omkarpathak27@gmail.com :alt: Say Thanks! .. image:: https://img.shields.io/github/contributors/omkarpathak/pygorithm.svg From 36821a1531a5c03df214e0955b2297e288f7c410 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 21 Jun 2020 18:24:59 +0530 Subject: [PATCH 241/251] Update README.rst --- README.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.rst b/README.rst index 7823a9a..023f2f0 100644 --- a/README.rst +++ b/README.rst @@ -30,6 +30,10 @@ Pygorithm | A Python module to learn all the major algorithms on the go! | Purely for educational purposes + +.. image:: https://i.imgur.com/6HOIlCX.png + :target: https://tracking.gitads.io/?campaign=gitads&repo=pygorithm&redirect=gitads.io. + Features ~~~~~~~~ From cf932ce8f527ff449829c1e14b2d812303741544 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 21 Jun 2020 18:25:36 +0530 Subject: [PATCH 242/251] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 023f2f0..2800f8d 100644 --- a/README.rst +++ b/README.rst @@ -32,7 +32,7 @@ Pygorithm .. image:: https://i.imgur.com/6HOIlCX.png - :target: https://tracking.gitads.io/?campaign=gitads&repo=pygorithm&redirect=gitads.io. + :target: https://tracking.gitads.io/?campaign=gitads&repo=pygorithm&redirect=gitads.io Features ~~~~~~~~ From 07b5496897360ed90320628f6d38609f8a60b99f Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Tue, 23 Jun 2020 10:41:40 +0530 Subject: [PATCH 243/251] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 2800f8d..1827a86 100644 --- a/README.rst +++ b/README.rst @@ -31,7 +31,7 @@ Pygorithm | Purely for educational purposes -.. image:: https://i.imgur.com/6HOIlCX.png +.. image:: https://images.gitads.io/pygorithm :target: https://tracking.gitads.io/?campaign=gitads&repo=pygorithm&redirect=gitads.io Features From cea6a35fb0012c404720f66d24c4e84259f52d11 Mon Sep 17 00:00:00 2001 From: Ashok Bakthavathsalam Date: Thu, 27 Aug 2020 12:36:11 +0000 Subject: [PATCH 244/251] verbose merge sort init --- pygorithm/sorting/merge_sort.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index be1fc01..a410e49 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -48,6 +48,8 @@ def sort(_list): b = sort(_list[middle:]) return merge(a, b) +def sort_iter(_list): + pass # TODO: Are these necessary? def time_complexities(): From 5c0973e84dbe8096dcf4f5eee78bca8c2fa0da57 Mon Sep 17 00:00:00 2001 From: Ashok Bakthavathsalam Date: Thu, 27 Aug 2020 12:37:46 +0000 Subject: [PATCH 245/251] docstring added --- pygorithm/sorting/merge_sort.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index a410e49..7160c35 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -49,7 +49,14 @@ def sort(_list): return merge(a, b) def sort_iter(_list): - pass + """ + Function to sort an array + using merge sort algorithm, iteratively + + :param _list: list of values to sort + :return: sorted + """ + pass # TODO: Are these necessary? def time_complexities(): From 63b706e31e1c1abcbb792501904514c9e79b2aa4 Mon Sep 17 00:00:00 2001 From: Ashok Bakthavathsalam Date: Thu, 27 Aug 2020 13:45:09 +0000 Subject: [PATCH 246/251] added iterative code --- pygorithm/sorting/merge_sort.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index 7160c35..50ff6ef 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -48,7 +48,8 @@ def sort(_list): b = sort(_list[middle:]) return merge(a, b) -def sort_iter(_list): +from itertools import zip_longest +def sorti(_list): """ Function to sort an array using merge sort algorithm, iteratively @@ -56,7 +57,16 @@ def sort_iter(_list): :param _list: list of values to sort :return: sorted """ - pass + # breakdown every element into its own list + series = [[i] for i in _list] + while len(series) > 1: + # iterator to handle two at a time in the zip_longest below + isl = iter(series) + series = [ + merge(a, b) if b else a + for a, b in zip_longest(isl, isl) + ] + return series[0] # TODO: Are these necessary? def time_complexities(): From d70c319ffee40998049712aaa9d26f3580ac16b5 Mon Sep 17 00:00:00 2001 From: Ashok Bakthavathsalam Date: Thu, 27 Aug 2020 16:33:13 +0000 Subject: [PATCH 247/251] added test for iterative mergesort --- pygorithm/sorting/merge_sort.py | 1 + tests/test_sorting.py | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index 50ff6ef..8e50e27 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -60,6 +60,7 @@ def sorti(_list): # breakdown every element into its own list series = [[i] for i in _list] while len(series) > 1: + print(series) # iterator to handle two at a time in the zip_longest below isl = iter(series) series = [ diff --git a/tests/test_sorting.py b/tests/test_sorting.py index f7fcf6d..e7acb99 100644 --- a/tests/test_sorting.py +++ b/tests/test_sorting.py @@ -116,6 +116,13 @@ class TestMergeSort(unittest.TestCase, TestSortingAlgorithm): def sort(arr): return merge_sort.sort(arr) +class TestMergeSortIterative(unittest.TestCase, TestSortingAlgorithm): + inplace = False + alph_support = True + + @staticmethod + def sort(arr): + return merge_sort.sorti(arr) class TestQuickSort(unittest.TestCase, TestSortingAlgorithm): inplace = False From 395c2cd29c3817fd6f16b35aa64575b8301cd3c3 Mon Sep 17 00:00:00 2001 From: Ashok Bakthavathsalam Date: Thu, 27 Aug 2020 16:39:13 +0000 Subject: [PATCH 248/251] added verbose option --- pygorithm/sorting/merge_sort.py | 4 ++-- tests/test_sorting.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index 8e50e27..b41fcf4 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -49,7 +49,7 @@ def sort(_list): return merge(a, b) from itertools import zip_longest -def sorti(_list): +def sorti(_list, verbose=True): """ Function to sort an array using merge sort algorithm, iteratively @@ -60,7 +60,7 @@ def sorti(_list): # breakdown every element into its own list series = [[i] for i in _list] while len(series) > 1: - print(series) + if verbose: print(series) # iterator to handle two at a time in the zip_longest below isl = iter(series) series = [ diff --git a/tests/test_sorting.py b/tests/test_sorting.py index e7acb99..c9c650c 100644 --- a/tests/test_sorting.py +++ b/tests/test_sorting.py @@ -122,7 +122,7 @@ class TestMergeSortIterative(unittest.TestCase, TestSortingAlgorithm): @staticmethod def sort(arr): - return merge_sort.sorti(arr) + return merge_sort.sorti(arr, verbose=False) class TestQuickSort(unittest.TestCase, TestSortingAlgorithm): inplace = False From 88d7ca32e5fdb3fae3e7e591cb0d16ede0eadf2b Mon Sep 17 00:00:00 2001 From: Ashok Bakthavathsalam Date: Thu, 27 Aug 2020 16:54:23 +0000 Subject: [PATCH 249/251] get_code has option to get iterative code --- pygorithm/sorting/merge_sort.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index b41fcf4..df35117 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -79,11 +79,14 @@ def time_complexities(): return "Best Case: O(nlogn), Average Case: O(nlogn), Worst Case: O(nlogn)" -def get_code(): +def get_code(iter=False): """ easily retrieve the source code of the sort function :return: source code """ + if iter: + return inspect.getsource(sorti) + "\n" + inspect.getsource(merge) + return inspect.getsource(sort) + "\n" + inspect.getsource(merge) From e0b5ae368b51d4514082064041f1dd94249e7f3f Mon Sep 17 00:00:00 2001 From: Ashok Bakthavathsalam Date: Thu, 27 Aug 2020 16:57:12 +0000 Subject: [PATCH 250/251] get_code has option to get iterative code --- pygorithm/sorting/merge_sort.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pygorithm/sorting/merge_sort.py b/pygorithm/sorting/merge_sort.py index b41fcf4..f4c21a3 100644 --- a/pygorithm/sorting/merge_sort.py +++ b/pygorithm/sorting/merge_sort.py @@ -79,11 +79,14 @@ def time_complexities(): return "Best Case: O(nlogn), Average Case: O(nlogn), Worst Case: O(nlogn)" -def get_code(): +def get_code(iter=False): """ easily retrieve the source code of the sort function :return: source code """ + if iter: + return inspect.getsource(sorti) + "\n" + return inspect.getsource(sort) + "\n" + inspect.getsource(merge) From be35813729a0151da1ac9ba013453a61ffa249b8 Mon Sep 17 00:00:00 2001 From: Anubhav Sharma Date: Tue, 6 Oct 2020 09:03:37 +0530 Subject: [PATCH 251/251] Adding Two Algorithms (#102) * Fractional Knapsack Algorithm * Longest Palindrome Substring Algorithm --- .../fractional_knapsack.py | 67 +++++++++++++++++ .../longest_palindrome_substring.py | 75 +++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 pygorithm/dynamic_programming/fractional_knapsack.py create mode 100644 pygorithm/dynamic_programming/longest_palindrome_substring.py diff --git a/pygorithm/dynamic_programming/fractional_knapsack.py b/pygorithm/dynamic_programming/fractional_knapsack.py new file mode 100644 index 0000000..83e88f5 --- /dev/null +++ b/pygorithm/dynamic_programming/fractional_knapsack.py @@ -0,0 +1,67 @@ +# https://en.wikipedia.org/wiki/Continuous_knapsack_problem +# https://www.guru99.com/fractional-knapsack-problem-greedy.html +# https://medium.com/walkinthecode/greedy-algorithm-fractional-knapsack-problem-9aba1daecc93 + +""" +Author : Anubhav Sharma +This is a pure Python implementation of Dynamic Programming solution to the Fractional Knapsack of a given items and weights. +The problem is : +Given N items and weights, to find the max weight of item to put in fractional knapsack in that given knapsack and +return it. +Example: Weight of knapsack to carry, Items and there weights as input will return + Items in fraction to put in the knapsack as per weight as output +""" + +def fractional_knapsack(value: list[int], weight: list[int], capacity: int) -> tuple[int, list[int]]: + """ + >>> value = [1, 3, 5, 7, 9] + >>> weight = [0.9, 0.7, 0.5, 0.3, 0.1] + >>> fractional_knapsack(value, weight, 5) + (25, [1, 1, 1, 1, 1]) + >>> fractional_knapsack(value, weight, 15) + (25, [1, 1, 1, 1, 1]) + >>> fractional_knapsack(value, weight, 25) + (25, [1, 1, 1, 1, 1]) + >>> fractional_knapsack(value, weight, 26) + (25, [1, 1, 1, 1, 1]) + >>> fractional_knapsack(value, weight, -1) + (-90.0, [0, 0, 0, 0, -10.0]) + >>> fractional_knapsack([1, 3, 5, 7], weight, 30) + (16, [1, 1, 1, 1]) + >>> fractional_knapsack(value, [0.9, 0.7, 0.5, 0.3, 0.1], 30) + (25, [1, 1, 1, 1, 1]) + >>> fractional_knapsack([], [], 30) + (0, []) + """ + index = list(range(len(value))) + ratio = [v / w for v, w in zip(value, weight)] + index.sort(key=lambda i: ratio[i], reverse=True) + + max_value = 0 + fractions = [0] * len(value) + for i in index: + if weight[i] <= capacity: + fractions[i] = 1 + max_value += value[i] + capacity -= weight[i] + else: + fractions[i] = capacity / weight[i] + max_value += value[i] * capacity / weight[i] + break + + return max_value, fractions + + +if __name__ == "__main__": + n = int(input("Enter number of items: ")) + value = input(f"Enter the values of the {n} item(s) in order: ").split() + value = [int(v) for v in value] + weight = input(f"Enter the positive weights of the {n} item(s) in order: ".split()) + weight = [int(w) for w in weight] + capacity = int(input("Enter maximum weight: ")) + + max_value, fractions = fractional_knapsack(value, weight, capacity) + print("The maximum value of items that can be carried:", max_value) + print("The fractions in which the items should be taken:", fractions) + + \ No newline at end of file diff --git a/pygorithm/dynamic_programming/longest_palindrome_substring.py b/pygorithm/dynamic_programming/longest_palindrome_substring.py new file mode 100644 index 0000000..4329364 --- /dev/null +++ b/pygorithm/dynamic_programming/longest_palindrome_substring.py @@ -0,0 +1,75 @@ +""" +Author : Anubhav Sharma +This is a pure Python implementation of Dynamic Programming solution to the longest +palindrome substring of a given string. +I use Manacher Algorithm which is amazing algorithm and find solution in linear time complexity. +The problem is : +Given a string, to find the longest palindrome sub-string in that given string and +return it. +Example: aabbabbaababa as input will return + aabbabbaa as output +""" +def manacher_algo_lps(s,n): + """ + PARAMETER + -------------- + s = string + n = string_len (int) + manacher Algorithm is the fastest technique to find the longest palindrome substring in any given string. + RETURN + --------------- + Longest Palindrome String(String) + """ + # variables to use + p = [0] * n + c = 0 + r = 0 + maxlen = 0 + + # Main Algorithm + for i in range(n): + mirror = 2*c-i # Finding the Mirror(i.e. Pivort to break) of the string + if i < r: + p[i] = (r - i) if (r - i) < p[mirror] else p[mirror] + a = i + (1 + p[i]) + b = i - (1 + p[i]) + + # Attempt to expand palindrome centered at currentRightPosition i + # Here for odd positions, we compare characters and + # if match then increment LPS Length by ONE + # If even position, we just increment LPS by ONE without + # any character comparison + while a=0 and s[a] == s[b]: + p[i] += 1 + a += 1 + b -= 1 + if (i + p[i]) > r: + c = i + r = i + p[i] + if p[i] > maxlen: # Track maxLPSLength + maxlen = p[i] + i = p.index(maxlen) + return s[i-maxlen:maxlen+i][1::2] + +def longest_palindrome(s: str) -> str: + s = '#'.join(s) + s = '#'+s+'#' + + # Calling Manacher Algorithm + return manacher_algo_lps(s,len(s)) + +def main(): + + # Input to enter + input_string = "abbbacdcaacdca" + + # Calling the longest palindrome algorithm + s = longest_palindrome(input_string) + print("LPS Using Manacher Algorithm {}".format(s)) + +# Calling Main Function +if __name__ == "__main__": + + main() + + \ No newline at end of file

      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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/av03_test_one_moving_one_stationary_along_path_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/av03_test_one_moving_one_stationary_along_path_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1d4c76f0421aab1499cc23b9b58285edaf5ad7 GIT binary patch literal 75501 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 K9HpRt`u_l$(Q$wP literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/av04_test_one_moving_one_stationary_along_path_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/av04_test_one_moving_one_stationary_along_path_intr_later.png new file mode 100644 index 0000000000000000000000000000000000000000..e3eea09e264b433eb09ec24557a28b5c36b9a9f6 GIT binary patch literal 60524 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 KYs_Z-%l`v0BA31Z literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aw01_test_one_moving_one_stationary_along_path_touch_at_end.png b/imgs/test_geometry/test_extrapolated_intersection/out/aw01_test_one_moving_one_stationary_along_path_touch_at_end.png new file mode 100644 index 0000000000000000000000000000000000000000..94d4083a15e954af9b1876440c6adebf64e8bd89 GIT binary patch literal 36536 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 literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aw03_test_one_moving_one_stationary_along_path_touch_at_end.png b/imgs/test_geometry/test_extrapolated_intersection/out/aw03_test_one_moving_one_stationary_along_path_touch_at_end.png new file mode 100644 index 0000000000000000000000000000000000000000..4365fdc20104094d07053f2645553b25bd0ed6d0 GIT binary patch literal 38916 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%0DIO* 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 z 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 W!+gJ?z;1I2{+Ss6z)0Wfc=9jV|AO-X literal 0 HcmV?d00001 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ax01_test_one_moving_one_stationary_along_path_intr_after_end.png b/imgs/test_geometry/test_extrapolated_intersection/out/ax01_test_one_moving_one_stationary_along_path_intr_after_end.png new file mode 100644 index 0000000000000000000000000000000000000000..42a15f9bf63bb8d7cea9c17e6ff5f32acbdf2d74 GIT binary patch literal 34489 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 X%-G2?7IhD+gCr|;Q8G*7@}2(&5V8eB diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aj02_test_one_moving_one_stationary_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/aj02_test_one_moving_one_stationary_touching.png index c0470197a4c4fe631591c26d987162da46ceb7b7..3b469e77dd8cbad11d6122e49459d454632575fb 100644 GIT binary patch literal 35153 zcmdSBby$^aw>~;S5KIImB@_?=K~h4xLlmStB&9<-CWuNZ0s;ckf}}{7beD)ocPou_ zpYh`QzTe*a+t>9w=g;G{)-~63%{kxqePWDz-1j}60EI_Vm(G)&N1;%cWTeFvQ7BAr z6bfSk_bmL)z3!12c)@ZIl~KlpKOVS7{_y^st+a*%3WaBY{ELw;^yw)Ibps_ME~4!6 zVQJJ=TY2^vXRWKlTeOWDckc5jmbQqsd1(aM-O_gqCdQvNGNN;0RQt1;7Sl`|bGHkA zC@NjEV^9;t=O7l9czjbv;=wx!4RK+UZ+l0zajgb%q$X&=)&4AEJCnH&^V9X+EM2@^ zuGjLJ+HX+99|L-;Q55nY`FDxD#o^C$0}N?+p(XkM`gZ2$)bw%u>UXHQrnOT4FsaYGy|NXJcc1$RfA4x0moi z)ZLd%?L4l3XgxeVF;IG5d$&xw;$JsYx?ikx+j_2<)3h^=4w-HanI5*OZu}?{Zb|yu zzr~0N6(G%%;PL0&Tt~F8Ve^|LtrBaL_s^fo&lY~3D=_V9@}u&?Me#VyU5w#;`n>7& z^+iD~P0hf!Z?BA$J6=%xteq!w5a7QM808(%a?{wzNPmCxH}1uYFDfed;6Ct4Ndw@< zeplvZx}#E3Qo3`rxOLWXP$D8CB&_-;l4aWsmdul)Ixu5h`&GX;of`#Jrh%* zG#54X14EdE%M5I6_%M8Tn%+Ov^t}}MMgQH7%uk1Rvbz))RwTH1>Ih!#~!@XH*_#`Civ-3SYJ@{9z`nI%4rz>aP zPrE^#f9Va1AXLoW*}4A+t)W3`@8Do}aSz9|8eYB`&Hkf}483GvM`mQcKS6A1Tt}ghU zp}M@n!onXGw{G2n)ewTIU)Hv_UpW5~6DIW~txT`ix8`P?t;K#R6BCov{=(r*#+9^3ae)b5`{x$>a>P!K zk2;B8__v%@M;K@3s=OsrGPVj* zq(UU0JW1BYe;*n7%JX3RCOf<0YURoCPWAflPYF-PzPi4@XA$X2CNFMeNR9ym#A!Le znypcAR##W|*Y~6|m#GAU6VS&RC4o{8)8rH0MBGt(0)OvvwADYkun>6bL1dy#IGxLK zQU9~m;e6u@$R==F9!i2ssaH7VjCs}7*LQ!ExmsXKL!HkFdvoS(B(v7p2-%m8i+xES zKVrddse@$}EaH2%cV7b!53ixQc{)N(w-$%W10@rNEIY&BKT_8=HhL;qczH=tw#SEi zj8u0D&?jD}KUaE<9G|zSw3LVcPYVr?%i0aMofWIaIS2*VV`rqrA3fwND47bg78j?U z#=U{ho0^g1u8xcgvrtYX*V~jX|^X5&_St2%$nh|Q`<%YF25%YhrRglft=HN zghV!#q*^H8J*mERsD03T(ktBD5fC5gCYki%cA6W*666$BRny>6jE#*UM))a|NpxIf zEs;iE{9|L=Al$Hr`G?3|IekL>(+7O=H_MU#Gc1#|SJ-8|yac~iR)$7J;lML%aW|V6 z;yv10Tk{r8`r_!2E&AV|K?)TRJhQT5y-24XcRJDmrvrWUf-rk%iv`B&NSRXl2(`)C z_gWv3mxj)Vvk+lmUeCS4z5y?x`u}=c;N40~-G!-|)oW{Khi}sN;lEEDgj>>#($ayx zhhOfWPC3EpjMEW$8&QXvVyuo=>;2y^MA`~r`G5YxH%z*#gx9XsK)Br7+gsb*EOd16 z_xEqXh42$D9rh7MG>rD;i(Em!_?4I2@_BPZ~?D*nH?qIf*^()|2w zWn_o^myPlPTkhXW2Va;ype0;bQAz1#8}kzr?=lJGMR;UH`3-D7@tNkDkEyBW{x8cH zW;{SKO<{tOBD!fPk(;MTAf~u;?_BO%e zEo6m-il~0p4!9lfBDzz_)c&5&`7Y#vOJmId!qz8z@fNDoGL&)g@S4*e#&!&;QfHDP zkJD1%edf%Wf5s%Mje?NyB|eShuPVI)lS}(Mt08m`V@L{DH|D!&ARLLky4XD|2+7KF z;7gMArQ9>yMe4B0-Q(nv6*D#=N~9{@q^FnuJ7X13R(||YoSB(Pw3}{1c^@8nct8R} zGGFb17yQ?Hw-lAi&{&cf4(;vR{W+74HC04+{_gk3S-oz05=p9A>x;S7|HKrvj=0#^ zAj#KczpKzYqt0xm-^feL%gGAIt%i$l-nfCnz`%&mRbq_zZpO(K`?~G)w;b{u&$O^T zrJ`aOGNd)ukaTh?{u?oz8%M0It?3yUx;+!#y?eo|Rjl6>Oxn`gTKie2;)~aj+a_$b zwj)Yjd#vkRmNhV9wu^nt?;;{>I~8QUQ()15_k$3clBIGpthU)}A>$J( z`q%^O?AaK~#LMD~7R--N6VCGoa&ist*$gLs{|@jv+9%aU*)!`?&*$;oy4ur6DbcU9`Lrj^05I0C z@oJ$l^ob{=r2Kq#`fKM)OG|$hRRUgyj8iUGR#t}c=5t;VPU#+aNM|*iHLTn36-ImR z<;$1!ckVdE$Q5n%#PK;RsH^)UpNcg8)M6wp6cG`T^yQ0!vo4QVT4pg-rHj~VzKsOC zcgGg8bK~B$h_Xu6lWS{TeLzq?-mfn}(4wQ*q_!U?&A`$SL$3il3kV zdo>!ZU1pDcTR#4$RW4&V!_m(&2UAo{ZuM~>)Lpz1X+!%m!%YJN>YrMT%!DvzX=ZWo zD4)g15gsrwNMR&yqc84I@&}GM`Hf>YZ5{lz>I9oG5U(8{|{xP9&SiIRC z)!7j0W$_hmuCA``3#`%?uU?6U(QYpGiH1T-d~f?(p!?GG3;g zjK;gdd9|s==ZxdB{U$P7%flu3*RKbyt=U2}xi3K{CWSIIG-NYsxdM}4xx;7vcgD_4 zR~=m{(%{>}_(X{j{Q9+oxH#53*;FN?a(8z}D;5TZ+IRu?XUGjs;U-S1qt2T_#X-Vr z|8eYGVz*hM0)3(~<6})t&BfN6f0*=_?bVYzVy*%_d9)Ii&-d$aOm(De`tr+U`$wb% zoPpXGe^G`wQ@UN>IT*3=Rn?57_tXhZKSfg*ghWKtG&Ev1!%*H{xpwUZuftrT(x*p7 zE549a$@QYsF3LCZzZ78TpHyP6@R-&~i5oh(K6XTw%u?l>oy-)x$bQ*o$MKu!TWMO@ zZ!?pVK9Az=|32zZ6gjiIzfY!oi1Gc>o*MbSv(tZtSUhNJtMw9Q$Lm$D9(0kCP7Rg1 z)=;YTw_j>+emS+#{Ar>t`-1v?GluQsJYo^Ovj$Ur0n*i>)+v3lQ3X4Wj^ckY5vfdr z6rKNjQroc+XJYi@l;pM6f`p09Z})gM=TO;khp48K9{uGRoVE53$K~@UWo4xXCLz&} zv~cfR==Dqf9BIIOdwg3^aBRX)_-g2MdByJVwX$<#{gvxb?;F&3V<<2X{_5_-Ik99) zk6rnZb1&q=5)$xi zY;2$kgqpIwuQQKKBl5AjI^@d`*^sk#ssQXhusEwUjvpT#c9Qy zZz8yNnku1s%Di(-D^nLpcxMd~>hDNyPHrhCtN`&k%(wn6=XyE+5JOQ9(QR^}H;c#y z=Yk0J0Su#mOY2XVYhgu20?9YzPuG0MJAGc>2=zqJ@wwYR{ti8baL3J^I$G<_(@mEk zrMbAdsg@mQ717~xATFP0;B0M%V+Xkbu~)hJdLEawTAG7IExM611y*1qwrDr+1* z)u1Vkst%nNUI((oJ3`Bh+`WQRZYCQL(tm}<+X=(pfsq+=ou_bdcfVe!=iXwqEc&Iq1420o zr`Z+M4M9Q5*JSrZrKNF2MMb|nX$&OW(NI);4lEW8EiG2ueaE`Ch&x#xda+zqSIEhO zfi8lG`l}d^N|2n}dW4lN)L)!XkK&jA;9A+vJuNF+IjrjVgl#3c(ntzdUO#ZEf=BzP@bs zGtx#zMnB6}r>363o=h=rk93)S%{?(at@K*}NF5+4M0Zw3@hK>BhF1Vrz{h}(YyYTS zl($nw*N&8RGdF^nkG=ok2+6-^#W*>f7s~lAx|r7_@Er2A+0XRQm4ol!6|}#);J3E6 zl5m(@q-zN7Z-!F zvzZEJZkAs^U0V9G>&~-ng#4S|#nda^ie|5y(L^#~jgE{cC@Ll&i~%x)xxzy6@6Cks zIIn!DJpk%b43-b1V#dn8Yz+>SFhECqO3F7dy$iZ`7#MsiDk?JY{WBYp0oCD>E}Zqf zb{-qD=nJGcsj0G$RXmgldyypOHbOxs5aB9&CSg;tgH&F03YG`tt(5|WP`gJvn^3)h^MG=OxEe)F986G=hNuw!4gzi3q)RRbhnH_)ChUc8uqtJG(zWTD>aF@9d~ zA&ZWV{slk;)Iq{B*15(yX zK|&~iW?}&SSNNlH>n$`P6QNR+Y>Qq+A98YAd6w)>izxYceumTf zv$#tqYRcwddl}d>j^96$avWl{9BH15ReN4w$rkvmc8F0^bVwkl%(?ng z;@daM2b843CSK>>=zR70g5K54wG&ru(8D{e#kV&${_;t~Gkrv8Ev1qeWn=|HVL=2% zl6aPCj-0tK?ophIy5d1>uuDP;K~ipp8^TCIA-@8^@N~(j3+;?H>OC_ml%YWb=xc#o$bo)oKYsl9yLH^k zI#mt0NtA466Xz?c{{=QbKvi|Yf<=Js%Hv-MQoee){Z`t1?QIZmWe}|g-I-A=1 zZ5e`im#K3eTfJ%~)=3*=Ki74?63xAIuiT8%P@=&pI6Io+e)&dd!PHAMe1TOBGCB*d z6QE-vZ^?nLt{f(kl2eLJ#@Y-Sew8>OQ=wy{tOC|ooQ_>tbR~tfxIqqh+X>-9>s|t8PBKn<^MJcM2h%#8 z)mO?G2>k9+iRP+ST8_#E5v1m3m_sf2pNYnvWbW?qlP6DD&41Fz2T4L92=NYR85}Y$ z%k+~NrkgGjtT9}cft6iLMUO88FohTk0U4rEbNkVUzno0_OmRcY_@CK!h+EdhQ(c1x zT7a^bhlyccp@4NZRb_nl{^YwygRXyLQoEn!h-SO}c2!yoFmb2!2YmByb~ql1q(4UK zgEF9AVjZWkjm?8bH#ap+LD})^M{1C@R%1s<37S0akk6pj2fNrjO@+r@PpK0jHZmSE48uP& zttP{t3c`&^f%Dr13cb6?Ld{pOp0swRLw!43rZA|p-?-aV>f?W*HH1g)weokvY0q7~ z{ip$ip3dT~3SL9>gD`}WxIssk);5(}-tkTF{I6iohp&*$(tVjchzpowb|B49S(}>8 zkw~Uv6e8(3uZ+}c*;E?$9ht+ASR_Qa%(g`^>g6&NaExF0*Dr`0(M8@pHqwxkl|2tq zhoALmd9>sBH%myhBwUsxfJK6jvkO8_$A|zw+9x##w&T$d0(&?(dX^5HR7-5eoAQm@ zzqoFggzrpt{2loJg=1E5SgETMy-3E1i?UrBV8imms$Zq@^7rB;qZ&C8dEKZdBXbUs zvH&?DN*u&)NKlORe`zh%WmEL-B+f;0o-3WP+_{G33%p9mxCnagPt@ZHW!uHg46*Yq z(gS$DM;d|@j11_e^y1~7xpPSaFo3oCxnc5K| zjf~UG8xrWVl@U@9v;07_Bx2Tl0mb!X#;5qqOw-FI9UtPMcs#zVG8Tt0Dw;!b& zZuQ}x2e0wGxUfvI!V4yG5#kWQ?Dq0$%=C$I_y}N9PN5CygGb^g7h`zLpR|h zg`cH*FGYQT)pJj;?8{F@a;t86bnx%7})=x~a5@ zDLMADv?{vkf3{O8&8=vHq*; z#`g@R+rEN^aweu^*v~er(#q}r(u~A-#8&ursfrmpc!jutK9s+C?l>G%t{kw&5OTpq zM0eJksp>(;2I{1_XTDzLUtWNidlo`yaBzS18w0RpVh7lY``cDf6>KjSl}DI5MdhovA+bqPS)3yt%S> zu-1u}=d`Ses@Ywiwwvo9g&`r33ZZNi!xO+tJlyjJh?ZWsdRM1>0;q23M~|9*_k2QP z=BUNv$B*B$8=v?76PgWs7}54rKI>U9ycrue?TVK$GWz&Ao$Ezjbe!?E@7)J63$JLr zpPP3lVVgOBM`Nw(P;B&z~hq z)4sm?b^D}hp5@-XqNXEQ$_6&D(&%)~I)4BX6AV9>(h!!A%oMv72UGk#p0?-}d zMnQNQ_|-)gJE$RvK~a>OvBHB%pFUadM?+1Gxja-PCM=91x~uIEv0$ntl&094EVOg! zQENkCQL|%XLSG!a^KRrf5l=_w(PF6Uqqhb?W&=*M-?Q4Zi}E7H{htes2`Ru4o;iE5 zruuj*S2Ll}?D9AE^U_mL!T?)6@WtRvU|`@CA|ew|PzPT~h9Sgk`a*!&dHN)8%nM%p z7hW6fnWhmE5+dTWn4Da2W5_JiqYpejJ)h(aM@sEf`RE`X(M&7anm}3hOnw8W&E~U8 zhH|g98W8E+{#nY5^bu|5C2C)#>KjuJ7d#s$4;G3m%FBT;tDFx?{rE9aK0y%Ja1jVb z>wxnOTi)JOpuYwpRkwxv)29q=ZEeq@fmXH!HT))&7f=`H$I1;AtCduKKKcmEma;OI zv$Jz$F^@gad%q#AlsYaFArONvEyXl5GvSSPOJn$*kYp~4+d|%B7!R2u&!H$i)Z z%bk`3fh(H?Oj5oKyB+uZ`MNyA=FNCQA_9WveK}e*H*aD<{a?Ne(PV9Br+KW>ed|#S z5Zbj6=75#?X(0urFz_9DAcT){5fc-`{33-dkH_v8>x$Ue>yP631Hf65ty@Xf#lLY8 zSvOFEZY~WfvGnY3E#earsxUZPS~9_{m~%(}AHGy#wVM>Sa0EL>(~gp@Eo%(7%^O&@ z_aDM|GH`MA{bpC`m5+8UG4L-Ht4?zEo@EC)ZvuAY`}>ZWV+na2@$z$R9~J0X-M1}0 z4%eH3wGEVsCgZlYR7{)0?(A;MAvCdydx?FbKA~{*Y=84<#nDb{n2bE1{o?>@3o5)aGnWy!4rE-X zrGdxB@coSJ?2CDMc_2u7D`s%sSK1sj<1d?)L1tIbYM-ZL+#Q@Dr-a!^@jN==VrK)s zaJ?PYcR6K7l?Wk)UaRT~7gnQ+tSpPTk~BdgY`v|^cX=aWD!+?eBP zUb7rwZ&5-ay1T5jRC$n6szZ6$$?Cd}j?UK5;>GBdzRDby7`HN&7}Otb(ub8JSDdQR zudQ+)q=6fQ^p0w_@Uv&n?pb{~+6w|1{l3jZ%kxsk>z&74<3 zK|w0<_e}7_+xQLYu*mscuFUtG)Z_(~wRBXxP8-`vbl1{Le|O&U!RV{*SV=>p@6y@s z9u(RtDtc4wk+d?q;Qd0RdCv)6x4o4zL8otpgia!o5VG z###7DXJPxXif-e-@r}0}o;;x*b6aGF3-P-ouuwjoe~q(xhvgVG(VZxT55S8#L#yLH z0SOSGYPzo2YPq`i+K(67@b?d(BE&s+F2iB{lkuC5H$3NmK`k12N^8Y6-Wp;Tg=q4Z zqNI;LIoyy3c)!>;m2W&Sq5d6$97MApjG++O<&b7`M z2Bq1ISJ^r{H-q?LIr@%_cPLn&01uJ%ha!X-?><>w0xnopHBzB0j&}oGOka#z2_V~+ z{;+78;WDNLyI&kq`;8K!x5vg|U=gCgu+LMIx_~AabI4sU+!(>VX8k5#-Cs-M|J#A^ z?ZaNY`%3KxUWc_2hb|Sj&Vi98BA*LHOu|7#%yQ->w+1bcS%C+y2QGgJZ5`RNgu8<| zWT6-ChydD~M}U9T%bzhocvk;CCZt5Fgazpo|Kw;D-D$6lZ#i6i$)YdYF1?lg4eQ@L zEiUS|m{an_yqEF)0oSjgKw&6HA=F+ZVMT%Guv#NzxdR4{6+~%pr45!doOO8dSeStL zl$#=#B8UA7!)6mk>?L>us( zOqzu))CVO-ChnBjh0RrTi(rIdKL;iQng_D7q7axNfiSs!$TY#p1^3vwbLUL7>N*A? zK0`@`g@twF{{5l8PPTIZ4g{wDDON~HNkwO!iaUP){{5>v1;-24BH6g`G!*dnMY-I)X-P^b-79|5=#IMyIY z){l>mFEq!0H^uBD*Yw3=sGTYDl_;>El?CKf5A<%|!we2XQ>>`SNb1|SrB-jw+S%FR zUcTG}Ks7Wp^zrOGQmrA12|qvir$=$@rJlg-fJ;#XhM2K3O@aP@>|0B#~pHXc=)1inJKy;KYy)PO>Yv|ea>G;a~(N4)!PAR!N;G9d~<5! z_ubd08jE!QaN<}PbD3OY<>n>^kod!sii|8Uh?s>Md@NuMu7wKWj%OOEQKc^H)Chug z9&^Qk8@)#<7Rx6jLnxAdf}9A5z8vu4*cCn9pY4H_hp2 z3dSriD+5!c_)aC%M}S#zQ7(`L?N&z0WD_#`H`jtupY;*O?_j7-GN#jvCQMsUX6+(>;8#rpIItsI0K zCJz+(W>`sT)S>) z4ka)u*r-yst<05fCJ0av?k|9x#tH<@=nvO?CK>^O${%J68A_k7P*A)ETHzNZg#$Q$ zQL|V1KkHToF81f9zy!jQmRudHWHW5K2z4Mn>MiIuz!(fRE@K+;H&>;Ji5sE7<>0a2 zNDOmbv|tC!!<%~+efmR%PgSZuGh<5Gki7=b(K8PQ@mH3 zs{MA{j=Zz$2zK2|liU&Q7)`9yllHJ4P!`yL@sOT z>G$&GO(=7}HCv2V2>>0UIDe#k4X~dSrE9~|!L7xKTlzqY8)R&+C8}E}GDev7W=1HK zQSdsrx!soxCIJ!XGRe_k`P?HJ8Ii}2Lq!(*hk9o9wYEzD+ks2Q5&MEefzuqQB)iAL zo~4O-W7`&cx84_T^EiDnS}1-P!`b>|Io-ngLGf#*5DPH9frFp-xlQ#E(FNkW4bdE? z+4~cwGGT}=T2mvO(wCcKzO4VaB|jKE``A!iT^5@DN=GImxf-%_lcV}$TR$OcWy`*v z#bJL@=Q15Tck@9+{L*vqrWN7I5xz_@0mmd_rf6-{)3F~1<0t~<+>SKeNzN6jpl!y! zlEQk<;Z*7+%Z}a~XuRG_ght&s)6&6Gn->(RXW0L^%ZeQji5Orh)T{E)NFR9)Hmj6AEvAvAmM7cD`LU@Gc{=k!QwEVo#U(Yeo$s+%6xVsZ#UsJJ zAZHJr1hA`6b947I1{Doo08olFcDV1XJUU7btl-t0J2|L65d*o3)n#qs{&Mrch|tmI z)mL~_Zy>KE0sZ87-$^A~1xvG_`YHjz7vpv!CLQyE2HXd1oDMpHRTYenJX{4d-!BKO9OIR8mrs<5*N)*)Smf#vo!X zuq$MPM=j>)Xex*$8Sn#<&?77JHp``19WgUC|Hll3xCef@ywvX-LcdwD3nA9}Yd?B= z*kEu@^(O|@Ydc`h5pNgh7nu?v)0XW`*k{j9EtiZJJ904QiFbc00=I()2$NqOUs-~c z6`%Jdw1%8PaNK^Sk#nxz0bE-1(B+!~mTcGyNI8bRnJQ*r-^__UgQ5>_TkF|N_;SlC zXfQ}H2T8fWc>&od45quz@8;A!2>wo2W~|IjRsi$pxpVl8B{W7=h!M5O{3Qq<^w;Lf z{Mx>c0Luon7uZC(+wCqHv{HX3JEDNH3!I;bhs{Ssmcjs~VITR}d|#gS&;>1xD{p&QpO!n+ei8BUZ=fZK z1m=NtxDx#es4(@sCoff~xO6C_qDky`*9<_9!UTo-rNp*P>tKarcfRohONfFY0^9E& zzL8fZL{`!l!Gk3Z@NaCHwm$98eH|R!V3AvC(rc*Jj2~D7u)P6X0}w|+v#KQW)C5>q z1Kc*^q>C-~O{ac@c{3cy@+3%X08i;aRIwT*&jR-09~%ejqUn&s93<=sD8)n)1U);d zR%7fz(0c;B5Ruka%H4(gYz>M>mCmcWOgiO1nO?pvyKS%j$CMvd82Whcc360Lj-ag0 zb$7v%);|dP0Hchh6?C0|W3L88!5pt8a1|QBLUaMwX||W8*ueDC1dwUFdwT|5@d9+7 zW2yztiwij=V|8zDiY?7`vxsXl?X}VZp$+EY$EvEYKn28&7^dX-^y$+ys1MChfigJ- zFW6J@*rK3P%pab@OCMg+f3W2YtR6C2DS}GFOQRe;UHZrM8;jb98jKsz2^2)E>r!hS zB;?Lt(&~oTh!7XsfYu!341=|aS`+l<0|}MccwPrO;Fg)(v>nnP;H&GPiHV4wd`}c{ z8-^#H1dIxtnc5yHbl1R&GKBx(vOQ?p4S)fRi&J1oJatGT4x%xeoa9_;hm&Bc`_FJe zvaB5}FzqbYb0{crh|Px0;op*k^iK4D)~Sc(!{n8XDCL*PIBS4vOCBZyPap&ujl+RC z{gr^5AgV#(!=H4Z3*`#9geNB_d%fuB=+4?y?a_Jd|Gtd?PiSTnH#cWQq9g2JsF^Qx zYH>E-UKA1u)C$yjG{f2m_zVh#T(T2Oe@pOi;q$(W((@t(eoq2~`^J!7Fnx{yhl4uS zt=^8csqz7ZxiQ4*?i>>)Y>3VCs{q9k(I>~Sn=`gKqVDR{LG#AeO7BIuFi;M~pRA=e z%gn^1BvW<^o;-U$F(8qk3biJs`w|;J@Gl>QX|nZ3*kKTac%> zzP^6NWK$!s(s&yvTfnn^$b2O?hZ>W1cXxw<4-xmcY{r5C#|?WNX)2N4XZu)we3zM7 z!tXN08ti)%{Ry8w^vU@L1=T~QVslzjzevfiZlecd?5mk032UWoXT3Ur{DCSS!Gu9YuOF z+*`E)Dr{~(%j)E(;&Wm`4EwF&w`o9q0^e;vAsSddggOUB$RwipX9OFKkII%a$Zur# z%s(C+k2;Sx0_!ocpt&Uo%nFcz<&LYbLJOph1>ASsFcyv!@Oq-;nlGHu6NdYPpje-# zW>q2ks?4hip|Kj8ny7&iU_uIJ-jddR9v|TeA;ss zMjaF^Oo+TVi5?$UgO>Gf+`5JR`19lP0P-F_c`1F%8(!KQG=k`Thf(7(XuXRiqMkb> zwdu+~dES%8^I1iW+H!Fe|2U+i!>~{wB-TLPg|M!{lmcXW=!1KKF~kOkk?WHXOM4HiYcLpag!jZu|BhuYP z@CU+(0bkyDC->`Ba`rd}49W}OC=&$%5wQ=hth|8=dJ3?iq`rP)POM47H)|ZHE}sXr zD*PxEX*))jNzFuv&t)3R(fglv0E2==N(JIm$$}kXmiE}ST^cUILrk3ZGq`=ZdN#dW z>ava0wjL7%Oe3MMz~_!)^gthT0|Q-uI7z`;s-%Rffu*uGx-)*Wo$mo!;!QUNYel^! z0xFwqNZl06-r3#?lUQ97*}J-*wT|Ggo*ns4F1VJVXXOpd{_t=$nxnaESBlE> z1qdvNUEahxZgyaQgl-u8;)#rcMQ9L5Kys1-L+<|evPFvO;7yq`OYy#Kja0`a4>6X! zuHup{{EYGi;@xU{i4QmkxoCFmF2RHB-VhySN#l-BaG4WNpg+Cm}P;($H zs=uH@5F_;Vw(7FVXD0GKRTjCW&VWMmLN+zisRFvKM}2bv^vR~?4=oe2#Fdu5bJl4b z)atczhR{JP1JY)>75F&8O9-|jfDOR|r>J9EYksr%AxCG_?i-LF1hhXZ9B$H%WJw7t%wn^NQNzNZ{@F8y$44B+58)PROi z3b`%k^;ho{4!5_peF0?;vaoQ5GTErShK2^xNDZ_mmQ2_Zbyf}+uPd$ z0vvUM!Gta)Dj;-8guM6>Hx%IF6tH~&DErx72u)1l5)vwHmGD4tPrWPbI{#|R*xA^~ zdUr0pGT~VIm~h{jT_uNgga7Nw;^LL);N{y^*I`fR#6KO(H%8Dm&@MS{g3$Ip@tS+A z22#cM!lz2m@x2hgW14$pw9uui_y$vW`Gn-yYyZBJ$x1d`&&vzMte~qy!1+zlPkAzy zH6X9qwA}+C2FbSi3qLcEhBh7J%w^Nnj%W_lv0w>BQbLEF;M03N~IT9|NjV*&e0uQnC~g^dWWPQUw?WS@`w-91#Hrg=Z1{1 z)_|#OfFOg=ZCP>h5ET$#H`3z&7yOE3C?n?+lse2`hNg6zs3YYl{2IIQ<5xpSCxTny zRtA?6uq7aSBhvhaoMuxns;Q|dh7)raJfL9c`4vdv-ui53dtpcyeBm(awpa=Zx2frwHo8vz_qe8kl#n& z$suSeltyZE+w}Ja12gj_-?NuQfq2dXAWwVi)@1d`5erzwLZQnIvWY&VBo{z@NFV>O zj!<;Iz>*glqVmD`(sd?<^Ihc>VzP=7jciiIy7U*}5 ziXsL}bWSl-6tm^<*=$b>KCU-pc=V`7op2G_vO}u+WdGI4?s`{KjA2n2d1OgLdk$ho zQ01M2I`=!cVK{BZ$c0W0Ie?Yj((O0n-0eai`@-4)_U1wEm1obu7_wd$^YM?(O3bCq zqw3jdQOA(y8M2a+XMxG{1KJCDpy$j*EUBrfpttxz_gzk`s1c`NwzL8`S!&=@>)@KG^Tz|kuMhHTAnbZ- zR@N)y=#xs7Au}0h#B1a`iml5{I+mMvuN*N)T<$8O(1t}(yvs3bdI+BT@`S5W#z79T zOa5}AqI*{<8IMXpo$?h-2oI+@^VY%Mo@rR&`e3i?c>!z7TmBT#x`aScqr9(m9 z^xs05>eL$>COY3ty$!Y;6<_r zI&}8+b?ybLTxMrGySzgvsoFvQh=OiGF;{Ru{@L4@&*?TQhz0x7AxH(S=C5g~iT-b1q{ zP%jqaK5^2rvUR}d;6OtsD9f8>i@s>C$nKOJ`BeAg%zVp1cK*Y)dR3j|E=r_087Q@* zQ9HWf*O;K4T%oLW*y}BkxQC35da)%bwCh@}8$J!H2G;l{koJOtf^@4E&}9*E_mX@x zd+HBMDfbz$@2(;(Z9o zr5l7Bh_D8YfrLd~T(I$xehElCSAb4|Wv)NWrT;VCgVUP)vDNw~1^S7}$;S*O9K=4o z#>Fpy%zsk*92=2IBtkY0R;w3bP2ToEHO)IYIMhQ(wwtWO_JH~n@%6!$&4Y)AF3_-153r9v$E1jc)h&peq84dQ!)rU{O}+)w-qF($Lh;c*ZC}O)I!Nai-Gh)f_0IY-3&rRv;|(ggq=gFUDbNWORdu<_r|` z&jQ^~vK_6%J?#$@^z+XxhYzlLiB{Z;IMx4fV0V7*@oHl^u$Bs^OH!}a#ZXhb0TPfD zV4^=q5P_g8Gn=iXfY9fa5tkn{xFQ`$L31A3NYcA%|o^iPgip6wjMN|=N=>o|nmN#r&F&MElu1|@j` z#W2mhm-xL9~F0rkbx104lKldK=geL1&xelAwra9FrG>JmCFtxQdrN?~TX_*bF4*@-3%6>1geKH%R zmkjSDiP4eYbnN=R6km~(mCbKiFNEGd*uWtGk6L~24#(L*b`1p<5+)E9 z;nk;4pQ4VvzUl3(2u%*;g(8)KH5xKIa50Dxd;-p-0ncY_P7VWu@X4`ofr+p-x&E{W zeZ@@~0$EvE1?YR7f3Q!8H1R?$T#xJz@WKrrJv=~sU6t%X4YJdJy5)B+!y{-*D5VCM$=qAO*O6T&fIeg>9VBf7be3r(H!$5<0~Ay(}MGYJEvz&L2;3~x8dJn!q_EBcN_Ywn9q5`erE0+ zvYlzce|osPo?1o6$SAA%Mc;>3<`&bcYA}p_)cbaQR%z(kj=FeOtZaBOJH$UjdM-bh z?4E33aPT|NY8byT03Sa;>+n@j-AOT8$wydx#nEy{W3-2yhsReeVa;kU&wyM8X6Ibp z%8#HdYYZjdGTw58qlMmm_^>pg${^qA@Zo2(ka5dhO_z&uz-E01-APgJDn7ms5Zyyx z>)<3LIskG?Q)cg4jYQ##I%RQN_O=r2QFEYDsaJXMf)SB%(Q6}j4QUFmV6kC{7$$;# z3H#6pi7~jL^Q+u&wgUKvnH_sWe%J$XI}hy}IxmNl?xh-2f_-Cqbvy+6RWiP_8)vw_ z3Eu}MSIK=gLaoi?p=+e`#`boxy9|>Sj|F}@796#LJR-?G^LLg9Okcmo4qX*wOkNXs z9v>f%Y*`=9A6~{mPro}k2X(BQ^&(yyKK#(%({?R z>L1{IoB6S%F|78K3DXC{qdxGeBs{h^7*#T9hrRqRU7sUp)bolIwT1RO5P~q^#n3bH znd|vlU^J&7>)zRLluW^gIuE-Tk!3+u5Ce$THtJhvOWjqXc9tkI z>rQS-okV=aAl!EBK>699=0^gj$6N)4{_fifV2spDZExNO_AzPOLdDKA?)`gzXWLpZy3B!*U4`;g99i(h{yyZN-~HB-G~p02wdhn)SXBrPdFAen~(IKf&-h74vwN&(T}*1M@Ga&QP1zZ4r@&4HWP<%X;~I$K&!9<)Qe3M$TRd7 z>%^c$1KF~?#~b0Y8@GH)YrThc0o8FL z4~`)3SWP~eJL$H1R03|-;6MVV{73m&cEt`KW}r7y`&EJVHuIalAmK7ZiUVUyU80CD zV_^csN3eT6HF4!;ZV{q3W560NeCi9fvuVgqT;ua9pB_$3wvp1QTE+Pj%L@=r>jdj6% z*}+61S(oWJFtqxLC3u>3J-1Y#fqD3ApDjcQWU?(sO7Riz@i8#I2p_n!IxYp>%3olA zgVb>UM!pa+5wgXST_Xus?O8JSw7wQ4>AO$q!*$>)38syAVmiG1A|a~~*oyaOJ^ z0C==%y_0=n#1;bOZ{01HAkBR;;fzJv3Nlln=8Wgcx&bdfD4Uq1VF|Z&bSM{56yIH) zv;5#VSQ<7`jn@0Ixb*|7^yM)>W7iUZbuzy{uL(&Q0G;#$)DPN}ZhDz8T4Phw2VgvS zx6qe!2Oi@oG?_J4tpb7$+jOgZ7ah%jd;rARAJE&&JUctfo4=Rovhx45_uYY9@BQ1~ zj8a5oos!BbBP1mhH= z?)&_H&p*%K&-vq=Q|UWCpZDiAuGe*4ucE<3Fp*Nb7K=RUI@{y!ko4E z(6X$&me$vu;kI4h0MB8V#1(ERtZ1gV%k=4))dcq>V}aI7@q`0ZJLwQIY*$n|KU!Q} zUA_Is$zy3c6`(Va@*lE6a|8ie>$MM)lQARbKz~E1q?Zgc8CAmXwGKT75A(k6qSJuu z9U;t&r8nu_8b2YN!RpIKY;_WolRKu$oiM5Dsi1}kw=*f~oOTDQGk@G|7MZ)5&8>1E zlPc=6$6)3Kye$Bi=03hIqwV9Tjd!Fk5grKU)k0%ec~6Y1Z+pn2HF2_cSkVmK$v7t0 zQJw>iK){F-;LMCWF$EG?vd_aqNyzj^ojVsK#K3WCQzNvV4d%*Vs(2}>JDG1Q7CnbZ2Cv!Gf+KA@jJ z_mqdoAQ4=_Qi_@{C6^2H&?|&mjUX*F!IC4q21N%3uU~Y$cC0!n`$|O~x>nJUiwwc+ zfePh!o<5LSgEiv>+>1yqdjEM<&{rdG9g-T+0h#Eutox?#v%?V1dUSXFyLtXEIY?JV(LU4#E)kw{Sv5#_y9K3t>6c|k} zZBn?%g(C52=?rz=o7VoFm}IHn62D&`u-OVjUv6%0WZ~S*6~k!{5)vk6K7}TLuB-9B z)#YC?Qc}&XDn81_%e=bK`O|ob=H(Z;agqU5rtNtKgtI`@*o6IXIP1xWZy-9ZgiVLP z;oxn+h?j7F5Ty1Ocxl|0TpiAL0%s;?L|ctq1W*r-*%;gMoP0@jWB9>m5wjf}-tc?^ zAN7*8b%XQ+IuS=}BoT7Ia9)JJ<@@W+KqU3Z#?>kz|CwkFp6)j=MZq|4f7GJB3(D$^ z>jl)yQG^>gu#ThGX#-6UP(6LQ$DDz~g8_kEAQ*8Z;Yt^gD{c2aEh$w^NtMI5zvd3W zH<`14ZrQi5xZd+k^YM=vvUzQ-RkLtNh1e{_p#vsem*bcLamoQ5 zottOhGoAcuR|HRydYqJK%sr`0`|nNlF^La$!2s`3QU5(l=Hqeo2!98YR3l$wVj*D) zsfrOinrw4$Gdo-TF&w4?6()RS^Ta|C_?+Yn9{v$pN(h)JD@mU@w_LCP@2`=#y7B0O zzRgtFYE^dM0&8v*R2UUM)EY|%YnF?+O@dcR#3#2!Me{mZ*})|}fT!X0)3bK^)3FNE zfB*=x0{FS+JVSo{t)0}M#|WiT+o6Io|$FKOT{l*Kb!WFSF4q(t?DZERD|FQ9Wna@|j}9u=hR`j1d?5G$d|tO{ZJTG(`>1*h z94m{*o&}9Po6l^kEAx*&_iob4lzzwb6dG}-*-0zK78Oy!X%w^IC7KczGCTny77JD9 z(apVvEfTH}2saPPoAN%is=`kt#+l}ZPH%8kynht;F|7^K%2aA~7rqS~#=~!p=Z62| zycCRy9ttgq;IiX4D!~$F?eumo+Of;;?paoGL?sLY&jbwd+2v(0-iPHHRjRuE9X zb+39!t#$;}@apvfJ;~(9p`zMd%CegHFJx;GjsT zS0p+ks=s$w6J`w)O0Fwa@#k;e=5)ceSir0fTtG|Tk=f0YB^b_mFe(x85vnq$=~3fj zA*RUJgd4VZZ`&zrnq?qykPb1SCC_xzz9#99bVn1UFjZqrBf!tU6`(8T+S{{@hlDTe z&Bfs20m^VRpGPy+B54veBcha!-5(z4(>8*?dM!9u2i?H!=MaELPu5epCG{N%=i_8p zS%`7X$fKgkMn)iF-U}0}M!U;G(PJ4tIRb+VfO;>1*=0m10E;JKC3^c3LI8j?GV?>| zW8HUUN6|x^TlDz7z%E~Z5AFdGj|WN{?BMb zxxJZIq)Dd6;7>bc96uBx``RVw+t`8>E>-vdQP{VLZ^Y`0dI&nmN=Ot;hYAQ|8~ldf zp;D%Nv+9PGTMx0sMJ`3J6(2P>hpwuU!}P+6h?>Ni$M!X+W0*@oAUNDj4}p&vgmF*n z&xYqWw}$Z9I!K_Y3UsRKYkGh4Azd&iS@O#x@Bo=Xe$hK953s&7m9RlX|_Ia6_gPDG`TWUh8;=g6*)5$`8gP1{2 zNiiytcp17m6hfWjtv_geK(j4+Q61kxoXXIM1CMl$;nfd;`{`9At;B~9dBLV18DJ$H zK2Zjwrl#6T`5(&7`__5c$d9fnzPQ*N|EkyRjAh`%(z-5H83_pln1yFkERbEEn;s&C=n!Ifd+<%pcJ`keX$JK zx9isV;Lt^<-*V>5$Y8#Jk7$HK61{*HIl{<`wM~{Ux^jzm_RY#4Us}}FvHM7ESWvWD zb0J1u02cu!%}2DOKYi9pr2D@6`FCXo-5qh4a%;ZsjWbx?_5A6lOHA@UHI}H(If!F$ zdY8Q-KD?OevtSHN%NrURPP`Iv90l2h+$mykKx!)=_NYue=;9l$UkeE-n3Xg5Vz>Jm zNp7F~kObBd>lYs%%9k@TsE*qUq~bc)T;TSz-FT(vYW3Blrz_W4db9fN9HOqwz-^;BhuH!}HNJmy$3e3mnQk3wh)cdL`fD=M7~1GZwf5tsHp zrlVz9fSdjBSvc`zxqfl3i#1f+_ftJ?~oP&l~LcmCyZPPrwbPzNtZAG}U+7ucqR3duw5#ChnTc(IH`evc{F!lU{)PCLQP$C+*crzo)S073m%&ww zG}wNH_&%feSM1!oIcP8V7pwSA3V*#P_9#?c0ji z4s`PdzatZgLKAeS@9mxV_|2rL1}px3$2vIN5rMs+V8C<&OS=#4J@sHE3*W1Ge@>mp z3?Z_x%S?RB@<=r5qt`=I{0>cZb;3@vb@ds~nZ`v<6~it>T|nFS{>8f*dOcH77RL() z9gDY~QjpD6z4$Sjk>y4tRb~GlH#VHnlG9e{6z)Jogo#>uHUIjPjXH(#XY{;%JzJ)D zs^X^#tG?&A>|*=qpr(L)q?4|@mJ(QE@>Lz=CuO7sacBvL9&eiR$oag7lcB$s6<$fS z^z2&z%Mm{B(0I2exL5~JuW6?1?iiZ4AK9j6eOKdQfNNIXh)bNOKtxSPYi4*&)Wsb8 z_3#6W!312hb~HRK1+HfU<~8Fcnail2 zjz2l~<@Jhu+xO1_<3|xFb_SFL*LnrwKFp-LQ18eOg+m?&Gz{ zioOl!uc(cVW5d6=06NJFi>&U#?4b$vv-1W+F(P;F$K%XHp1V(W?n?q~$EPpq2p*#6 zlF@!!06B!emb333nFsNN+Cc&XCZ)Mui!d(^L48Q)I!YXIKqIfhw=x!p*s*BYE+ErL z6&0{+`F+Z}uRo1X(Xf~Q;NkTdS{XIFTru8f9nHO>8L1jn0K5aeNZe?BOyH&!M%q8* zbbfxSHI7e`;?)J#V{G9IB#=$t?{JMe0`n_e-*KQwtezo)iypOgb$?(Of;kGz%5*c; zQ9V4zoHZC|i3Pwj#T=n2Psg{3DlmE42o0mQeR9rRjitm^FvrkAU*=Oui}y@A9sTVC z6n$hWyN;8SuGD0VC1x*`&At#y?F(T1ZR^t#NBHF~aeU%h1wF@`6M_WW4Qtx>;KMCB($4!}PRDav_3OjG(Xg|!)6 zROdgN1&2!6;0sHz&@~_SX&!XiZ1!5{-uW)7*t74col4#am6SeZiu2~)erC7NoooHS zzjl`PavJMSzbE{*)wlYBHS_tyi!4Om0#1vLZK|CFC&LVSnq~(je?ro&y(!q@IdSt0 z3SmrRRuaClc72qc`!l|nuUM5v&Sy@_+X)uJwN z4HHu|X+wG!3nvGkN|FQs4s-pAK>hjNv2E2!*YeB(il#K9`;8Nark?ti@iPGMqCqo4EPz>d=gw|$EfPBpMcH*i^bSqq3a3@%O`5q}LDL?@h z2*Xv+UP&}O8~?PE(ke=ISYSOyi$M(|+h^zZfpZ7SdpXoY;?yC?v!~F?W>*b+VHIoWz3aR1T zJv`Xjmxgnj%uxWl<<~?8?a#*rC(9P#JV)_?5RQkRKdE{8yu157e0=~22Mr7=>Yh=r zY-{a?%ykBx9`RZH3B-jr9Bo^rY^%GUK}ph|R^ww~_t6jq zUi>H02X<0~l`Lbya=!hxxRM~tGog?bxb)B|g-d^^6@oqPu142%EcX4T9{Y>vw zzv+d15OA?cB;9z#_HE*70)(IzXGYEEQdC!=Dh*y_fkRgyW?GSp=G$(1vx@K9rCqSt zh#npF(c2f-1mSG<@KsG080Ju01`Zo$wN`?c;pu&?pTkkV%*Qx`u6bxG#kB01?eh4| z=I+iXj>^P_1|Yt~bl43_eGE0yy3=zIYZR7HyYpm;9T^~@4uKp|=iD66Yi2KF1jk24 zMJ!~tGR)b}e{PhFV{jM5veQ%)OU9qmx8Z^CN6_iSAA`T@u^&$((zTM-V5ae? zdld~0Yazo7jyj&k^3lau^<+)dZD1l#SUjP4n~sbIKW0s2Mf@HmCy2X7?0R_J<;f z!2?j`ngiSf*qZYC8QIMO-xA!HLs13#DT_tAFgLAH-&c0FS`-C;Iruz}q$V&j&YeM# zj|!D}^Jb<}6UQBty5gC$AR}S=aBR3q^){^$i=H6WbtPWBqE75?y~48PxgjyI&pBbW zV(jb9s;#9JXvEmKoDwb7O|z!;JgkgFesBpo4lF2|xw{v>`)HPV#+0;}Xk!A0i+OHV zpBCpN7?K4(EL+DB*vkYSvnWV!R*aFHsj!h^Y{9r35-@4zAVl zJR4@px1`E&?%6hQOo#&)SQCn%J>xS{D0tougmTLTdL22H>!a4UM)4jdi!LrXX^MxJ zmg3-Vv9vVrSTgr#I;79L(biDPjW`EP=Ow%+qN7_`c3G>x4ChxP&c%6ol9Yj^#^t?R z={+S31IuAt4+2#Yf1Ia5@)=Vp+h#h{EIO9mZ1)e2;+*TcD~*F-L>S&Bi$6MZLT}mj zx@N4@bbY7Ld|}P*nomHT-U5?S^EwRJEYGaM&t(Kf-2Jz>ae<5a=g&W-DbGB%<&H4uH4HORsNDivt1#uM{v;a;V1 zLHdeeT$ERt%Tb|oP|E6{HTVhvO3u(CgcVw-U@cEa__NEm+OGQv=DemogEA5$FTttZ z(1e0x^q^rL>lD7U=We^b=d{6_0k+;XyuP+MNo62GT>?R`?cX!ogzC!=AY@npEa9q} zyhsN(G7YDMB^_>Sf}1v1+Jh!qypl$lhD2DDli=PQHFBz&Q+#o++Kname#&viU=u22 z_s?O z=mVVY@pa!V%OLW`|5~{&FHhEq!L>G5Eh9obk+x(0Tf`l|3bXCw?@b!rq}$BIdvNpE z8Z-Ecf)t7*3df3+vY4lfy1ghBDk@2)jC5iVDXz|&g@4zwK8OBh>4Wsbw`a1?1_eQ z2NgVd9P#kJw-pE@>!aKRo3xzz?@#f(2D1&NSW9!TG+g_VB<#G}_e#4qLAuPuE$bB6 z*Q7bY}&ZZ$z zLHjZBMq6()FtI6wb5>g-H;JwUR;@%r)IM#>>@vWJG6JSSyInute5pBDi1t$+G&!pE z>rfm7L;TqX7?e})yd-f~z-wW6OQOEuiW?AV=D0R3-ZSP50Z zk@dL)TxZ+$zLL9!)=dc(UcfC6Hw4qvMtXw81|y067wWj90!te zt5w*$FJK#?B4Zyz4@w>4FFgMG52jv3_G^KGT9zyGqvZdMM7f2zl6O8%jthFg6nVSG zu;~S99#^<1-bZ(Y(O$zNP9Eh^_(t>)JsB!IOMASnSBN91u7rPweqMg=3oj;sEP#Mt z623p#PKF_a96BV7_EXvpMe5=$fz1-|>vnP#&(YJ3dwMH%A(6^6VQf)lKCTH>o+5ER zW@f(crY$*y5~AQEJ^C~3kO)LhB%>GN-|U16zB%of+K4qv5w_bTdWcXh$EUMA(w=0AGM)$nuGf!+b6(Fb^Ge0d<-Hr}%q7 zz!{~J*`u!Sicu#ZZG3!u<+7$;`iwSju2p*>z~N6|ZMjwNq))dQ1$&6lW%s!aAH8?B zRx_at3xwW)83&3pJC123(WZc}FY~$0=V`p%ZZgUsN9(fzePK!7QJS=h_sUCwuCNZ2 zbswi7je%dpi%53gEy6x3E{+ih22>!vOcx6($PxjfcH*NKpOfB(htg9 zU0n%ZLOo9QH;}|3zh8+a`wHWxHR$-OLJV2*8=dq2`q1w*i|NjM=3U<`x+KzkUj4Gh z!%C=6k9i)?lPmJZlMnUSt5hWsdhG{gI~2Pyi#ZCM0tbH;o-ifIxCoh@^y(nArOAmH zHY?x9gNBO{p@r9_$zb)ieK!}l)xRNT*D5@rSDrk1(s5YR7=JMYkQLk>iLeADwFEe0F z%|OlW3>pquz}DGm_-4LpxCSZNF#%;Z@$)es(K1k+n+H5tj>eDpXu{2z_<(|!+I->h z!z9-aVgE`d211k-uh<}OuP_rY@9HuRGreU1`{VvyoxHFt0rLznq0(XhrEQT?)1bM( z#$3t1BX2b{@OOAlyU-ZA8jf}uqWLDHAzZRP06fG_MVr-Y7JQj=G@7mvF}GT`r#!!D zg5$<@mSmePU~7ee=CDMu+SNG(^jdr2#GC$xyYQ1HTn1cV%|y8nE!|NRfo!*`iTfaU zTWbggjsoNEeP#2N1 zaj$b94WM$kVbcuBdD+T7^S?GcnCV7+?X#sI)hY&Y4&TP{Y#Vm(ACFmmK~w;>aUUGs z8PPT!>zKqe6**`XezREURkR_n-vZcMpzAw<%B{t7j!^ZX>`w2JXz#wFN5TuuRc)c2K@76AkImox3 zbiOvHSq?ehyv4~gc=%nT)`E21^**vJ5zkdNr2P5>Qp3uJhlkgURq6*S&`V1Q??5_4V;MDd z;*C{*$o1>~=o^rjt)%04(UfMDA7rdMWD21p0Pw*x>!pQie`|E+|Mk$^&D%p?$mhaA z<`Z!1$~x+BQh4bzte(&&c<90^_FAv+PZ%^36>hr{RUapF_I38GzgFslyk3SL7A;fVczq9RA^3YeB zLmfi~4I=tEiPZ-~(DCNX@Pf<6$5<4&|J?K>)17^u6DN;Y@AkiZc?-BVV7tIEJ-#dY zl3J}7Sjog3AVnutOYyc~5N;%~93cyOrsAIA2`jge#Igc5TG6qN+V(j^#$PMRAgFhP zM;x);gPR{)>5F6<<;+bCd%Y(H>objt{BS3Ew`|$pV)aSXsL%&!!U>=hX+}#87&d@> zN2IvKvj&4KCD;>U0ns&RBiHQmjJ`IEC2;@99kx;rKMe06-92zo;vD!+VIlMALZnn~ z3o$_3=hfR9IL_2f+n2dF^5xbb864=i=V zzB&nu&k#42D?3#SEMLPG!2LOIV8l$OMIvc5eE}y0C9> z?P{;evA-cKvRNlCZ2w&i?5oRSaV<8V(9^X(+4uG9YLrsAS&_5ZHg`3yF3-j--lkbQ5Fvq8+5aQRq^RL z>I|zH7+xUHt8uM?ANHD&T6jOl+>PmvD}Vd5#3=M$mLL6C zN)J;tyA~0`5;q)t{BDG(Z;@P_OckQZp z;UDMp;kt`8fIrKNJ6_Q8}a;_Q!1BcuE> zHD0XL0`v2w%9exvH&2>hOXu*;6ou9g=j{a!_+uEs5>@l~)Kvb`0-iLI4N%Bk#kN#p zEQBmK1B_`LiMWEdJK#hSR|y0cB@-_O>j5u|kqjR-aN8Y59s zX@i+42ZFGf?$I$&;-@CxNN(HR4Q2*lJl0VEC^Kopd3bcMUDa;%Dz z;t9mIXp9MbbhVDI0tk~tyR@{lgyEoQnBek{@Q%2$EIIP3m?0&$4)uQe#JiB>h%rpL zi}X#SCgAuB>t>I}WNm!fE8il(S$hE}a_W)Gozb<=sgADX384sV+eUIHd5ST(|8g^i zvQe2L#i*!1s+4)Qow*#HXr9d*Ds%&QXwC+x7kt+SzQOJBnHedys9J%w@pfw7NR&DO zN|!P<6RxOP3Z=*6e!fN!;u8>f-r3p7FVWv^qSg8C?OPZXnlIWH9}ozkbc96vSlxT~ z)o5P6Pz%wlGC%jKEcNhON{$0%`=}%TH#wj8x2K)HdQu>vLz!^6b#&-}NL}gd%nV&5 zRv+}v0TKO#Y7DgiyTGn3qbFnQ3sE#zxm0G?b?<$2j{5w?$tEfPWrKym`MAx+_7kh< znp^$FpX~i>N9oVtWOP=r(42O9#mWq-wALMkrRRM-ih~rWlv18GUM;Gs`L&tSk}%iI z^{MI-5_i8fI_$K$XNty>$sp8UFyn@tP3i0#F;SC+6$A3zvhLY?y%w1U*th*!0UPn# z*b2U49i;Vgy{%umdX^4JNxJXZI2wA!^=sX;*<+bTzrpH&4d`a_WHo3fJ7q5IxYip$A-$s&_|kg zKWrU(17Yzo*L}DDb17=XZ=QFDANaRhkW@SOeP{QjK``bJVmdE~)e*|W14a7g3_}jY zm_G>r*>l=~QjUtA^aAYj@~EFB?ON1R^j%Q}{k@+R@Mn!^)G815i}xNT0I=eL!vpMA z-Ab3qJcNNE@8V_vls9j(Qud?R0e)=UGevMuXrYaj3r0i`uFb*4iN!Ipj@HO zPkjEljikY{#Is*)1%K%2PoU&Y>vu~;`D%`#Fu`KU#Rme9i8nXa6LH~FrMZ1$U5_tH zw339Tj2KCb^QgXbOPw_dSFAliCPLf(cedrBAURhy3`(vYPGfO$gNzjyDnM+5|g z02u&{`$-8yCrxU+?c1+0`LVA(+>=JuK}gFhe#pxL_->=`bx9LyI@lS<1xcXZ3ZZe z@iR(^=d>tbr7M_l63A_2U@zItj>3!@F1Ms5@82ANc~<;ANV#SPVjXXw(E}ccfmHDY z2O;cruMvEoqDhS`FPuGKp%Pe}_zk8xJ*1U%{Nf3tOh9_Ae!@CCxdd`#fb}MUZ zD)Hqq4*xecFL3#;L1KXBiV=4cAL4o?p$O#JzE>Sd-m8vCOO{Q5H&66}fUtCnRRTLe zkLUJYa3<(FoXBrUo?>~nG-roRVIaK8b##zfNhr6XS$coV_Nnjh(}_nEy|29So;Q(es@%(?*} zI~f-e*8m_=*HEVB$0innN=v|M6ya!SHo&O$GMaXr!+Gk`r~$B zhD%9sFheT3y0^HC%)6tM8)5QtcfAGeiK*$F#FxaX`gi(4ShVi?!1AyN<2Hv^MR0lD9&z!@RV zIYh2bejLwvo_u3Xc&E!|z5uW(!`6}q1Tcre$rZ~$%*h@l0GdN4;^TqH;o zMNjthyIefkcPZcf4VR0|s!&pqd2xPh@-18#vcBax$X(ZvReFJ%z&VYU(5>9wRad~f ztDVr6!7+)QnkUSEia5?9CXrf6x`KA_9;5hx8N<=G1Z{E;U{~GyiXmYDT@g@w(Xx~2 zE(Q+7S^=>my-PB@orE$R(mn)Ztpu|FI}?J*ul8Sz!1OLIWM83G zQ42^4rA|B_IYAmJN}Jr?Sw&k>ckE+ zOf7@CE*RANpUvg!9`l_Fgj}ou2gVh@*H?|FJauS7|1>f&Ky;GQdH5`$s>wm;Jqo9#!5y_o5q% z{Mw6-UI}38KYyNl6p)JXsT+gHn-ix}Y_|HJcd|wl?t}7Y|GfFnSNLDvk?chu8x#Av z;p*Re(FJy4aaFMsyEtzCPk=%3v&t3(*?;U{kHC8HoS^DZUv$I2wvi673;wIVB#Y^I zcq)kbDGv_|1NlkxG2_Qr(YFJM{I%QjKYkuYpvL%y*o*Fgz39bQ>%3P~ROA2h8V$vI(d(n!Z1eeUzD;JUZXfpZ;8`sp_b^bgmggX5+Y+VCSa#hrPr|iWbWkg%-Yu@vc53@D7Bp z-4KkML_|c9?L{bekRMQxdP~3;Z4>HS_^FJ6Dhe_DI0zR<6#2bK-Agj?(>t8ZC_(UJ z34i!y3T`hiFPS^UhbJf3UFjtx{4n9Q#2HIHN%MJywZ36tc%MIi?#)wS6Lj5`u}I32 zOPXt=@sb$Ge5z|^h9e*#;Oy)?b9%IcNy$wVX(@BatV7HB>Tw3KiHQll@@H~cS>f~U z_}JJ$f4u9o!ot*wSJ^r{C;RKDkvZ!c4p|LhaLX$uWX zYb)ar1j`tMDhts49DyysKm;2Jl`R$EAw6!!h-{j^d2@emC)9M`EpKHOXtgJL}IemSZ zz{TL)Yk$Y~E-Grfi9jS-+z*?bmp9^N3FR8;XjG_iH}9dzV_?Q^#-(8<(6NWp;L!&-NEqLPCOl^qWAL z3+F4bfx+oluF~nWg;T`}x^PZRPU>1%-~~zeUP8kZ%~5*grm@nWp=)Uw9>b>n%9TZ5 zUAbj4TRzSD_aMXCcm=`wSlNIkAuTPM4(w&g{>aXL1IzMMjX>tpc+C6v z?|)V+!-kFAGMJ0#AtE9IF+%Ciw!F23!62(fr8hnm|IM2>QS#NwICrgKBV%}C zz6}gjYwehlqgj!XxbsR7O-4d$1$OFag%!UM~UF8%%S@AdJD zSaw}hW@cvV-DP=FFA0f@#{2&YM%qFDC*1u1idFxw{clmKxEtSsat~0WX)UjM7MJryU`zL#({!jL(#Cr30IO^)^&8@ACt*x!SO?}rh6oQtQjYog} zY-pActP|kiwF|jq7sA9_jFK)m!>B_`o0=N7AZ)@SB&4~Xr<$IXHNU$u(8WUB^RTBmy_y%Ob|E-+At9=EAyg1u{xdsipo^=8L_`EY?wOmL)3LCySe{*e+KQ(L zyZlz946e|P8eQap7fDqt=O{#J^Ho(<$z8E98z$x&C+28}C-mB29q1N~E_E7kE|OkZ zd}YZ&XlAMRPx9mckK~7JC~FdSlc!yI-V3%5WS>5jEK>`wic`mpRoAErg1}k&E+N5u z`4&0)e?D#h$5@q1Cr3vd6*BBFdLLCgSWsjLegBbQOLa_5P5=8hRW3yh!+wDgg&iI` ztG;|m;mQZwCjD;Wr91fy?;pb=rzkOQFaEgxUr+6l{G5KUHrP)*MN~)Urd-+oPRZ03HV`=^vUx^+2$2-p(j$tql@?k+PB-Tnw z*Z%Xp(gg{37-!zTCH$|?M&QDK%-G+VT3=uPkL{G_%|HNe9~hWzJWnACQ$ywhzr_BZ zQ`3RQF^#zhiRZs|0Rm9${|!+3KL!N_jj0r~b8v`3ghf6&@9w^pxdXZ9i>Z3CUJJX$7*|)qgZn+}i*I&V3XuKzM-=u0eC*$6 zu-iyazhgdLj(1xswEfR0(QT<@&$HvB-xtSwtA~3d+9l>jTQd!n?nj)Bjg5bXq?P%m z=Q`jNGY~X?!#?~Tb?@&pJ*beSdtFua;3Kb9;z}80{#&f9_yD3h?WSSao(8 z)z!yk3&+RCQX%s5SR#K z1uA~~cE==0FtiZPdprpHr2nD_A`(1#d3kGFTZQotA3p~Bpk3BG`m>O&T1-nVVs$6BBLWU;yoWCd}ngZN4{WAkF=2GM2hOahMG=LtxBRUQy0hdts3TVG%_X@~Do! zewuvJhYueBm==tczq|V+RW^<@uKY4Oy3TB)ALUZtwZE$h@g-2^;ok3|hfV%?Hp{)Y z^20+yL*Gcy`qb5V)gBYz;!3!?3&O(06gmb5A_?J4#808Vtc|0Rf~5hzJ*U5)L~=YE zKvU$nK4!joeQ9>~k{ID&_qmYgDLD@hk8y9ZPpkg+!9m+cZnMGi{Ffz|fPetn`L(VS z$`7le1ZyZqXmo_d(qJt8O)a;|Cyd0kQ->6^aesQERc}7wFgU?0Rr?)sKZR{*e-!|X zR0MSx6bEJ#<+5~5Yd=d$zEzcE_V@QcFVqr(LEi1L_$6V!^GOU6O`f;pI&w&U=N0N0 z8v2!6jK4az5D?J7kTuZgepB0ASyQpKa)Ep2;=*Czt^cyZi2QUDZ7M3{F536ww_|K+ zVe{42*1~-2eb0Z6eYkDloH<9}Z8{!tuc_qQ4RhIM&gmp#Gs`)~8FxkcYo{F3vKeMcc*UIDL;>2>4a)p-FAxw65;!J*Z zco@%PQDi+UPXGRK`+{xk$B(Zl-2f~9vaK?8la&os)AqX?m6KyqKJLIF2fG09vCNYv ziZ#lE_f0tER#sM=FV2M^lcS5V2g_E43F(I>bvw!TL=Wv>mm}Wd6vp^Tgz_y^PHg5i zud!B!Y-D?MjLW;u1=Af1+&Hedtk46eR=06-&NDZ+XK{CkgRIA8;Hb<)(9Eq< z`K(F=!L8D62|rQLC3S3LZq64Ll$M?z%WAszg@u!YgJj0z_tq=@cfWaEXq8P)PEz6H zbtG)`_4Q%l;wo9xd7klGPJZ>f zEgddO7c~pV)A{s}!`IihH&rr3HqL;Pg2!qqf#GDnEn;?N<~cp*OEtAr&1y&I<6Q(lrA0i?m`V9JCB@$n~stc8%Qk?C_tmbA3l#6&P{r2b~!S5n=estX! z8m}LfYW|%K*Tbz_-WNYAI1Kvj6FJEh>7Fir|Ni|7x7l#l?&eL>Q(PTklCtSH5EZbU zoSdNGNQP&9PJeB=HwBH7%h>xxp0bHMW|34FrSsV__l+Aja1*ce_E?2s`=N5i;Zg}W zzKM&AlQ-z!#Z8WgAo%LIjtwY0tvz~t^y$;5k%@`n0Q?m#YC~KzKbKECzw`D{FQDbE zuC)yOFtipTk@>Al@$qBq?nI%yk1&Ar6$()r8XEi6VLalXW_nmRfgY4s5g5ts#yjm9 zYXJQkhKEUui;F3zmxstbNm8cj;)&v4FeteMn=LRnSYe#U{m^>w^UJIEjk>$+N6tP2aEaXJ zyWvRQL{Q+T`P+%`rYP-^HqqN+?8ET_WxgHvD+ULK*(NGi?SzwFUvjuiZg@-P4k`12 zB;9=ElZ*4H$=fksb~c~9)_VuThp=$JLMHImK}yj>a%cOSuGRedFD}N4m`pPFT_3E@ zjdG>mqANYRk#+f#RB!uDB_>V0hn_UPW7o~}d)9^CGKJ~yWs@%oF#Q8yOKFGI@3L2H zKOlD{d>xM8SnrB9OEmA3FXH|>`N5~+gSxQUmzq8`7Z#zN_s4T4FABdKJ+-!-d89$( zK*egPG2=3EwTySLbz{6bER~RJ@u)lKADGzjC-RAe!8gz9lk1pN*WZZkVd_fvP#r@3 zwEfd4Nz9a1tfV8Oul<=Qe7nURY2f0npVi98v4w6KUK=#FU&gU^$UZps97o`xBc&wF z1}1_9B@8Ym&&dCr5aQ;GToZ6z_s$u-HtoKHN6M;^?VyfFb$#y8dmfAWYN#vz9{Xv; zto6%H-}Q#^$by->lBtcMA)+#7+uPek#l>P88aDum;{iVXUP)A%k#YCVyU#tLoYK1Be>US#d)mm^g?FgGXO~46F>!)I; z-sYSutqGK`e~YNJ74mwrl=>xe{HWjo+=;+DiZabx)mwYpg&bdIWlqQDRbFg60SAIh zBYb0L@dr~;?dtpdfQM%Uvm2Gw)@+;MHd$>cV_!`V7h2h5-e-}j)=5MQAP`r|RC)^^ z_d=gfiu;D2cI~0$i_;pf3u*{&E#034_Bg}&@g1y_r!Tz;Cy>kw&SyX0byhm5qU6z< zZWn*sF8cRTQefdY=9;lWO}H@QYe&-=&rxRnEOg2|d)B%&+qB1@37e$2ZqxHk7{SBU z$N3zyJy){77BCK9&X*1rlq}T0MJ!N&N{7JbA`RAnoSd9&wh_ znF*hKb60cq)`!Yuo{e18c|5C{u5r5zUlLMMzpX@%dcV2Y-4JqBO7jSrJ9w}_gM+~I z|EXZEwM@iYS+*`Krg5aKpr20cEiv~jGi!dm1|&vjIo`ux1@f7gj(bynScO>jxnoxp zd!9sqM zm6esPot)Z|yw2n1IRub*Pd($(7*4vG0qq~y_9|(Ig+9EY`mTg zv5NZa#VZn@*T3+Lce<<&=Qlwn+7;ygp~R+0CE&Ix(acMYx^Q;ik#> zJ{3^9T2kblZD79AF(7+CBxtx9TfH?#Sb9l|lTFq{7$Z-huzSC28YbOlf9)l(luKi; zbiZr1lw(792==Nyx-4Y2+x!`)U&%I7HDRmy&TYy7@HR5FsHqM`+7q#usx z&gK|(`qln7A0bofS-XFqE-^09D&8xEIr$BJ-b| zvI%_hdHe7}9KZ(Y>FLQzISQk7ULs!|RzIwt`}p`&dR++r9x04~s{6BQF=`B}rZ`Xr zP!$3>)*N(oc_53Re_%jYuW?5xJsjhv2@4cw<>lppVPSq@VPPo&X}rK_15kqFe07LG zagjBlYD7~#;E@rX?#B}@=G98(wz*AswxTaz5K`LKqM~RC(>uG8p1JB9`nYdJL&pTR z;$+rbeCBk0{{&}`#bR`|-BNe9ay})G`RH5y>msLHXvkItmfCd4NllFsaGozb?TrVv z=&QUD7ngePFS#ao?^T%d8&rM zVeJ<2l;=0u+22-4rm`<-**W0ReTsWS!Sd>t+G$HmOA0{8x8DsY%QR!{jIs?BuRuI} zbNMRGOdh|s?s?0Rwbm-`=94KInWycF@edZtOG+M^o0}I{aG4F`0?ql*G}lp%mjNjL z+!uNNfV*_zKtsK82?)Zx?d?~uURm4OH31zxSl-s$oNVy@-A__4(Y{zKMsnnY2frQi z$>Ug9yVhm?;OY~8=I?upHNfNpP^||lbeBu~EXP=r=z6tP^Xn@F>_r=*%$21m-DU~J z%l)*?SFiJf$Ac>+JG!cDWE27eWgh zQQ}arAvr{{xr2#md%envBX5YA*|LsrWKJ$esj;t*2pLk9?ZPhC z1RRx9I?P{7vAWGZ70=9}e!AxSNx(@;RW)|(Wqs5=IXwtUSa^6XFw7#80lL%O0XZN+ zeU&YGK62wAyUf7g&c;+t$jg#f4b#&!@G|A~`IVI*_;=2Etxf}Kf`Ai#1hr6OzIp|_ zK|3L^s=B}0BTX%!QcMP^#6|XL>)-u2@5Qg@X8sl`LqHXFAriWsHFF)HA{%L?%Na?1aI*s!V<=SI~1~|339oSM;9aL{)bej)W2ZdFcxpq8Q?s z`Qir)1uBKqumJ-f2H@wE13uP;G8DpeKwch`=h>bLLQ+G9R$RYIL2)HW0@cgw!u-Tz zXAw_ONN5&H5Tt~LP{Zf8&&=<*mOZuvWQX(7pN!v|0DZ~1O|OB>;0K`%%IZrh1sd`v zT{FOlL!JI!Bk4dRdMW--00N$%9!%HnJXiCNTQbt?Ua~7nUPlePFj`+;4!rfyUkAtv z48g|6m4%ZS)%_99Q`;S~*e5?Ya(>>CwG^f(CoMNUVTeZcrEZ(~adM4Ml~j5F!G7`= zyuu#GT$yr7;k~`j!^oZ-9v#hgveh-GNk{0InZ=)6;^(qkl!fYD4~FQv9utgD3X~~F zA*v_TGmJ{vH*<$M>e(YmZg2 zrVcS)DcqMe=OBKX2$BZ0aSwIu|>V#`AUX#f9u7RBpW$R@x9i z#nL?Cz~e)rmQ51Y%yQu>wq1CPOTl?(054U&KE`*a^cL78h_ty~8cc%Fj;;IlKujeo0p~ZXPvTe(G7$zzbjs7i<*5- z?-Kqd6yZcu#b5PhNXE|dUd9n5)k$poHbHPG0TW(qxAbgue4MO)IaoO09saVq16{f= z)t&a^cVAIv4BfF|IhUQRC0rZ-#X;@w?*k3s-%$gHuxl?qMACvx*D}6Jjpkz9s_xc< z2Na-^bt+!y#clF#D%wsz3ONgAEbihp1mOfY(HZMvA<>D!!D}pPr8<_8>=GMC=Q|ud zUew>lUFJ`Qr_DT0fhOWG9i&IUe0j+QS1-=$a_1cXWMMXOr@P`SW|T)}dY;!bBqV?Z zej{v$xwAFjLQ`CMrq^}u?wB~{0*mx}Fz2;Z?Gas%K2fJTZ@va)`0!6MCt`OE zyopj@HSY|n4|CPZ(+fGD zK$-jIc}6)>pxHU{+r7A}Vo<`@MaUG5@FrH$tFy{2eXWSGxQ)xk=Kp$MP{oMQFWH?f z>dj{OsSfK>yedtITq&4QL z`z(*W#p7}97>IIBLwPDdD7@V)4l=C85UYozjZm^OPw!Y4ng+b1VNCX1XN=u-q*cZ& zXf7okcwV6N;2}YoD7>2CzVMYdrL9Jnt}cAKiFLSf>ZIyuNTKYc754qdy`{Vwz@#Z~ zNcdcL>BmY<($eIEU(3=x1VQlmx5{I^x1+yQ`3fCcWhx?7f4XG&NJ%Rdss4!?2HKX7 zk1rOo=1p5zY6{`|MQa_L2nwAB>DT<{7Yy5~8+eply$x6`9MgqbHR6y3kQ4S|J7%CS z;eWgU2b&WRoMI=;Ie8{W->3u?;tG!W-t|Aq{0zK3QbBA%0*O_>WB*B=5MA~lE}X=N zsi>fnU)G#Q{@(ij#^m*T&l0==emony+T>mcvDj&20>XcW>3CLER;8R6hY1IB&9}kl zO@lZbu+_tWAC$jz75x$b^p=kL_o~wlLUdg5$x)6Y`RV~rVpvlgR)_gbKFhT%=})aT{IJR9=> zY6a2RM@LmZmEI!_AfS;dGacF*Qqf-cx|zNhrNheI_OA2EE;}df8K^C4S9ch7$jHcm zmDT(OT2oYyZ0nerS#iz@U8q%R^>``$HEfWEE?=cvUNqOk)KA<5Vo@I$9pIz7cGZ-t zEP}^p)DNt-SAS@43(i&v2jud$3QkAgM@ldo5_b6wbg}yM`%znVy*-B+Cv4;c&Y|67 z;bCDd#rkdRdd*m$$`~*K{I`N?ZnO9MMVOakOICA}Oa6WTVVYnE%@L98u_SyIkozFW$4!@P$j}~Iy%6#!G zw|Z7}k0(Bm_|@H_!#{Jr)R|KhtL};$NNKy^Q&GVSH3Wu{kr4_FPGh$we^Y-qalEUA z?>e3O8*>6NadBVeb<45RD|@RW0q@_FK)o}wvGJGq+B=5$S8Ttc@aD~%WzO)v@e(5f ze*&7sEdBhheD)y^#`1|V->hvp2SHBSCPa8o&-h0ad3tu=nfPYTW8!zmbh(a(*UV%?e9zFC}dc}mH-0#GSq_- zfc_Bdgw(C~US9kdT|5CSgJ>kbY+b^cH0?Sq3@!akHU^5I&QIgVF*b+Xtp9h1Tj(&p z$ZejWja1x#&*Cy2#Hw$bv+DZJG3si@!0Fmf$VE*|bDd!-FDf50%-qu?7|;o|sC{IYVDnE6 ze|*dd`!!mCkrDgZvuDq-ABXaDU_;5FtFo!NWj+%GdQU3YN)FdbdJqyGfTro>0l;IV z$be{Hn*@a$lE8}g_wAhYb3C3GnDz`TNHbku#spdY^pD#`pz!)y8%xk}+DChx}k zCx{2sW!uVUECPcE&gyDzk&nAaEvlltLn7xPu$7RhA1uJb_=Dahl|b(EslrLmDQS{? zOotvt2h@&AhgH(^!+8Qh_d~*I&y)ONkLt?Gn;_CaqHBV(oZWu;IkVO`ayTcs9#ERU zjgF2!@czl3d8Ae6DWs>b4<%r=#=#I*g^D7ZDp>{3#}e;WuIY3tsEEA-v$Mekf!qBi zQB0|der=`X^6TGt3N^|F8V`WE!UsZG0{kW0M@vci8xvL5_V$C2!&`z=z<7b;4V&W@ zJ3ArJdE_GJUUJ01;P}+k)NF`T#ARpG15t+o1j2|(bw=>}#$D2ZZOE0edq>QC<9w^7 z9<&~_AV$-&&_`pRDz4E8)?SdiovgiJIv37RV!Y)3?TU?7jr$RC1dWK)YfQZ7Ukn}% z?E^Ngtg2e5($qhgZMuwjKGLLC_Ju=HfcC*DZ?Ty5_^!TWadidfUzAOCbv4km2Jh8V zlx9{%YNf2d>&T>KEGyK8{N@Hk2t4;qsCXhHBl!UQBIctHEb6%%B-u#CF$?M$#GPhX z{JxAQWP&b#(9tk)pO3SFtOzA!hf}v4MU#75OUo?yRiH97m9%?S`d#yj>Z2~>2WSFT zo6Ym1ZAVlEV(==(DKMP!e;ZH^5KfQ78KizuaFNJq~wm0Qr?imX+ zbCF>uX{qTDHsp%NXa>dJ5+k_;euu|pa!?)JA--~Yc2=@}02yg(clS+52+mlARRn|y zT}au>{R>_#uUhZUg5pZzypd`Q5G$6?CRMr3INnWT-iF>no^tAv!WWa?;(bN)~ zd8rg&bbKL>>X?`?Ky=VRid-5RDk>Hf!ql`h9P4O5IW@J9h@a>d3(Jq*hkZ;OiyxSx z#p`QS8c)}=-gvtezKP!D((UaN^WBxsv8LaJTY@;mn1FD)0tjGJfjjDn#q+3SQj zc>1wc9oJb=iBdxE;VBhrQTg7~fz7`>lt9<_~9OxFM`8 zjr&^TWgCS>^c_1-UE1twX`=_CFaw*{;CVvF-JZNSHI#W;AsROrN1tP!Qtt8R*LO-X zFO(wpBU_}JN%Me>9&WqPF&n~G`+QvMvnoed-2Ka>q@ZG<)`eEH`zW1>8AWnq;2s`f(0g%)87L{*e_I+8$BLp}@f4)M_xm!l z83W!MFaiXCVS&_DZSFG1Td z?RA0oAH-6P8!sdiOhv^3S$&{m0zhlDkdu)Seb4w}YhzL%npN{_uK_1FH^`8zi;rj{ zZ}RYvLL~QES@-@o4e<2>?dU;4YJKCk}# z`6F&_&I|>1*1>^dt2^_ujS{xgG3EhX-Mn8&+?yUCcXA- z-NhLonkDh+7=9lz*druH2$2&VyhwnvDI(O*kD4)_!S_Zp}fD$i*)PMHfStQId+LRBuW0 zSKOc5&nDoBDM8PX+$j;f9R**%`-1gAfjLrA^}5=fyke!Q`PE(w-W1~72aO(-R-n25 ztv_O0WO`YRvz(SV4kGm@@ya zyVL6MQ||85SB%R^L~zCt=C8^(``=^786-R54TvEVAat z6eMoS9=nR1xz*k!4x;z`u!B1zEr=E?2aeEAtK_wEqi;l9lZo=izl^Gbf*yT1a6Ue8 z6eCo!T9j)`)YPUpxi&1D6wY0@6TRKk-qpoC5F2conNaSO86;Bd2(E+o`7C0CH zg5U{p(Y}uSD8pVTy&mE9eXcPOrG8@n+BI?4%n^IT^V6eB*S*}|_cNob$=I}J0QHX+ z>7s#S#j?oe8ZS%u%lucmAoW#}d9WRz1>%NcBx89Tr~5#R&SUi;40;(7e3zpvj^u{L zpvn}#8d=-&J~6tKmH0)|S!AXR)7x`IJixooW8jAA#|eG`N?JKpu{*AXdrY-|jnXv7F_#&qh!(apWjrPm<@1nxw&6TyhpghcPW zlQTsOx^z6Tv04>wIvsI>i#28q!LC$R?kDTY3*FfGkE@?IL3d9Bf(}4wYWG-INGi`X zIFp;+T)7Iw;am5zw7iMyg;veHU#ti>NWwol`g!??$;VsuQ-R&9U)3r-r?f8$_13p99HAs=>@}bSb36J<9TL(ewEi@%a2}@Ex9> zp2m*LfI|o2H9@_~tuuOGZCBQfD6*`Awccz59zoY!97CkIoB)f1J1bc(N%+W;sV=y~ zJs=<;4cykS@*|JjzIIqxnuh;O>S^`qMZ@yCUJzAGlAg*ro$dy;s?07JuXG?rzzH%g z^+G01ul~xR@P13o6SK)6o_jNGjbVqm{m0{5omTNB-&q~&v5i)}ra>g=t3?3O@j zk4<))Ep^043-r2;5+$&$fZGe@_+YbeFBV5ZH))eYzjY=n$+OWY$s=>X(IL*Qa@<;} zv>=d%?L51L2j{VF67c9ioT@#Mk?}4o%|FNurr^P?d-x_S^ELt(o@?QVp#g*!|Ee$<5K$17d_Q3TckGv?dKHVo zYs16U742o08(O=FD76OyXBEFc2hOpYAcahUO>kQ(rH-$U_SNsr~J(ms3&_;}g`~)Nk?L&2|hh zEgz|GNG3z!i?}LvQ-1yw_h9JSIh$!fL$C(e>jsXD=x}H&;s$XM6U6OVY3rpus!wHk zPyAeJb97+0(#pGT&tWt+H6gyTPb60@62@nG8ocIym*gGlU638V{cx76M?gRTaqD%6 zNa@z3)ATI7w?DPNvfy>+)GtpL#63vgHiHq7D5#%z+Wj^3AUs-HFE1FRH1bbq*drU+ zZn1hvh6EXDFfR6ebujyMVATax4HC#75V_?TP~*afX}V1twjwC z(k(Bm1R^GSASJkV*(LlCWoq6=>_3!%>p?I*z{)X=kL*NMzi3hByMKsl`K{7tou->z9l6k z2;u`KyqRfYs% z4@xHG&)$#}t?E)zAi;B)j}n4y2i!%l`~DahwLe32f8RFrrm}>**0#HM?>2yB1E*RN zxa1e(cZshc;u!$1?DC(Zqsh?7@UwhjZ7mecn%RktXeeOCqks7&y>*@fva4FTc@V$} zj$C~y+YhGT zziI~ll`Fa%w3e`P*=l8s;FNkh@A==PGda1o zU*DsMu3b|~mb4RF;^F3KnHaX)ZmSWoUR_`bi@?Fc5(Nt7i~A4o%{e+c8jqDSlv_>X zKV@BJdHDt1up` zF&W52x_H1Qo!BZqhFGUlIX#Z;6NKE93yo$z##n`4^^m(scL&qTv_?$a)OYHb^*1Ii zxi7Hsq7@d`GC0Rqp#gSK+IX9&L^su*#NVv{f;Jv$YaIb@B%WFTh0 z6Z4xS35_mzzJb{&q0~Z@4!;K*(jP_bPC0dUu-MQpqx)--2eZ0W&vd=LU&Og&WNb%F zLgEKR7}C$-PaXWsAOT}na3knCn`Lsb;=D%0qi4^$|MUY1VfW%;rVH9>Bb3>Kg(sM+83da!E+VI$#@fjL=|LPh?D0BJ>pTD2RRgM6G>bYZ@Il6ZUS3T& z5R3?14itZh4xWQr@I=-g&fy?fULmKn{$xPK5_GN8-s8&&$4l1=MCuY(&p`pkA|U8- zsDom0bZo3~VnSoS7^u$r=4N!j@O_L2&@hJBKNB9^ z^aru=D8{G%bEw!*!A7sMLAwkEHB2@Ek^yZvQaUFf$u&Ve^TLDI(KK}DVb6S$(?#;Y z)U&`RL7h%CUlmjr-C(tmxtcm2Fxmi1UUH`9)2=!`kr5B@#Ds#ctE|NPo?K${aK1Vb zC1vns0%{#dVuvePN$k3f=tIH~ZV`emQN#;>X5NEsVgA#sg zZ|{eFbqr9M_P+-orP(|`M<89$5f3|}RBg~2&ou|}Id3H^w=FX|wFaz-)W{CE=MZ(f zCAOV89rT&V%`%|kbh=kpRn5X7|6!l^);G0hLg6Zdr|}sY_z^4j*VMvKhVxVi07*Be zJPc482MH6<04B7zH4P1s)SVwQ0nOqE^&Xm=Jc3_Z11X;P7x#6fCfOz{%ADGU*C<(#gQ) zj4O1l1}sldh!H8*8HGqZ|=i$R}+(z?ZsAcSq0g|lm7RO z?9%`%NvK6UKaU9SeNr!Yi&Hi{Ld?Ip!l>aw$Z~_glMeabPSPQJk_fyQIO{(^$A`Ue zxYv>=gmdU4VT7zJ!oPWs7wmo45Uu^dv*oj~S9U-kJsD7Ceqgti;{DEo1w_UnM6nW& z$sc`qWP)tTXB+#=m07pl{g3O18f#$l7XD7w%%vdDrHLB67!x+XDLGh z7q=#NY{OXd#*XWtRLs|l6L$?*a~tqM33{F1AYoLZFXH%az=^~@knGrsgum#&di7z| z!d#{Ty87TCKa$dpd4-Jw1|g--s*zP8ZvnS}XNU?=h#F1&^aOzW7QjKp;I7gbw`N(w z)|S(jXq8NDO2iL*6#iW?>8sB25k3yiLx@j9)Hay}$K4)uyLb0Bzj!kYk_mnbmTLgZ zxHa8w#@Ig4^JFsHps{IbX+f3uy8EQJxjpjskR{1OjEEl4hqhnVD=En)3Q~A_dSc<@ z54(vC|bMM~mn>R)0^*6rNzTU4MPy6=5C4t73+VF8SLp>3x@Rci9WMpLO0d_0X zTRv2Le(mw4{13--hVG9)6h1+TE@2G^!>X96-nR>U169dQ6<1C^una(8dbL3dZX2Bj zUks>NdLVBnO@Q?nh>lockFUyYLtvJyO{{hPu!T#tZ(m=X?xc3`N!veR6Nt^(c&l0t zneD8e39$(MFD&OMq9}-ETr2|TT-I9N!%Oj>Bls`DusRS)Y!Gv>)W^ShB(jQBrKP12 zfj1yg$j#KlyynZ^3~v`f&(*{$ny}4%s+$ zx}MH)hs5iSWliG*Rt|iPjo$%{fy?6oYb- z2mhCq5_8ZZ7a01?51XXOVw?vtRU<%R>f~gaj8hSK{?(o zU&6L==dhBp(qy6k_&Qe*z7^WT|077U{sNk{*m9B|VEt|F^cb$qJiY3C(#g7VXY0zZJJb>$>0 zGCC1`#I_*z?8tmKZ<2t!WAOR77fAHv)d!?EvFhuBwZ7MBjX-Z&>i#+1LUqz^sx=okbcsP+0~VhFBu)bOFbTr0|ALx-ZAkg$zAEy z9?3pwUh#T1Z+)oSzR~%XSx)LM4paN)bfQGBLoeKyIgV2d{>a*?lNWN1u<1tCu(%Z%NzWyFSi4?ctRR z`Rb5hM|xb-qR&x9{SbdgvPxmWeu^OZ;wX{ViW>As!>u{Ffr(AU>G?sCEbCvJx8F|2 z+>%W6ZG9HTF|99rJp4N(H-o!+R|MP^z)Nb>I$wcpzqROreS=vzks-?N zIob!>$QJ_#_lxS1A}CTaPwR8Mp3TBUAp{G}{vooK&yL%BFdDQhRsW{5tMyNs_ zv&Jv&*+}T<=;rcNZYsfT0{`3#P*^Jt`3X-bT9#Phs`cE|l^ggXp(O;}v@arqUnOxj zrIv^MeTXkP(M#pGX=w>5D8BbhMv84$M+Am8W;}`60=+5?Xhzpfx2{+YKKH{St>av+ zO#ail{kD_AgRRj8AF@sDKlA&_rUs1nGphum&UQkZ2 ztBmT|bUI_Ok{;!_$1x2ZG?32%fVY4gs(I7Hn344^zL&(Q&%@b(nVsItD;@Tw*}bS| zW(U&KY98_pY85@xd%L^MK*Wb7Cnt-`ACmeV@RHynHBJF)W}^flI^05#40f~8T94|f z69Q~(-}w0WZfrRV5L^PwtH)9+O>7SFcAAWolU6)%UA7UP9uQ^Lvrpn+)7zc$GPh+8 zm%h;!Sr<{iltS?9@dGtw^Bl%w?BCP!gy=~A0|zE_yleXGilsArIQd&!?eFawZipik z2V(UD%wa!PKv&h1BoguJ$481aTdkq~7qb^-A_^oq$O0K%>G?C6DZDt|*oX?=%OSIE zvZx!c!I0kPpsm99*}6XP>g~6&9|GThQl9%+(KEw4NZ=qcDEX5Z16pLo2oc!~Ox&f< zNxb~d&YogGgYe&O%;`F>o(Vr$2#m96}ys_b*Y z?v>8eKU+M2CO4l1z8>GiO}LsM*?y(p)n(t@UV*E8YAm?hO(1P8_zSs<-W>?!#hE*l zf*1P_SUo+6u6} hITzvs7!lfDO!?A0@Zxui6r7l6_c;8(_&urCo($7xEoHV2r(~ z3b0{9?Q-+|W4!a11s&z@k*N@LbgkEqxqRw>l#=Qo`8u3I0KkAB6tqwx#5}?ASO&zb@l58xJkC`$cW`_~b$f1{Y>R3!#O7%$#plCn zkg%a0DimPI_0t%PR9wXK1g0)%cn1F^K-v3FxBAP>RFIkyqu=ov5=W74eYp6cQuMex z?=jE&8Idj;l$l~CD@h&89q64316i)&=g$WNW>7CaghCLyBMHgKvi3iMwQ1AqA_P=$ z<_OJi&Kw`POpx0Qz@&s+m|>cf&kQbHa1Z!HMT?4}b+5KHb2Yx#QbmBT!2V547Y=a{ zI%1^F%PF*;+7WE!q0ZaZ-@*QKG66L_5aoj|)nA{-PERWpK^t#r>x+5=V_@4rBu5Ic z*B$T6+^}D>0^x^=R3=^*C)46CQcI6cua-^@kv!H9 zf+VH?_v6O2SZPX{m;rYPZ>mry_x!00yUvSkF;+?h*CpIUA%wDbNUIK{26os(&`D^@ z70zolg@y7)-;4Sxc->2SU8T*$IJIeI7@xe!t;xk!x3VNj6#{xeRPJqXO(uq>FP77y%5=BL_HnTie_6>qvoCW+mMzHdR zjpOx%@{zZ&P!T2oWCTP(UF7@{bNJk(L+eIF)twI85@EW}+c3QOI&hWZ% zF`<5o@u&FxeGij%YRs1kKfgTP_n3C##Js;xA#hiUKK%}N_BBRsuF&>(L}Bzq3>Kvm z3rA-*nVt$OQ{yi;)`d4m@;HPJ5|)lUHx3fUmxPyIitDbJ22I^_y=`wx|53>*RYCLT z&!5@Qk&wa(Mqk7Sag|P%emem!(O8?RsctvBvT}v*;PA#bYPVZ+FVGp6mFny1&~%R? z?&{g;+3d7Fbq6ZQue)z#qz%l%O2J8TwzjrKW+SYDEqY})?mbTFr4|kDU;h1@^jJl` zcWB5D9O6SPH^G99m_0%%?(GUblzP; zVH?oW8~LHR>{xpJ_hvppfEj-Fiwx3d_##10Oj9Z6VaLv-+qfeS3&}XVP~JidI#_Mq zFRVXTtN21F-dm_GVm|ea;`sQOS)z^Vx4oC*q2H?nad}jS3-%>!hrUVZ%?5N#QXPs# z7D^*R4Nb9a0M-ei!xOH%a6g!ILh%Nt0WA{~PMMiqi39m~EagYiUG)724a}sIpQTFl zB3Kxv7Z(@#;IO7}!p#5%Mn+_(=LgeX`rt4DUPv00c4*5FkB_jNlRCz87TRxIZywLi zRwUy2VQ%f(Y=UbkOfE$dCW_SnTREPr2 zV7O7ui7*>nIM3X|S-+G{AI7tZv9`G>=YZ1;brgcK2J=)RV)oM&80_usle4k{K7VFL zrU3GnugslBu-o>QTd2!^#ccWBxt1aiX9 z^-?^Si7%W<($inpdC$Hck8YpflXLNk9@tH8E4IrWwr*XojIfse(_wHpdZLr?laKs` z0d*E&6dJ%jzSY$NxOjMx(a~?9YesyLScfhZZlx$bDv!=pe+jdL23@WYtFqR7Y(l?I zOkX=s!F(&8VvG*$RjpYV}8Zg z=aS^5_5=wBy3i;dKf2I;^~xV^oS6aVT}$n`)$clMuVo;2oOqL{WSp%3b%xWs638$#lRYe;|YNSCmdKfQ6QH=a?eONJ+FlJWe7-U za3fX9!<6T>*xcUNf@#|g32RQTPNz$W?*5SzWxdKzo39TwI$ZlSTlPcb{16Q)I;5={ zq_+sW$WerB!=@4rs zRuWE^J`Ysn_9~B)eKFP;G?c^)!KU&pi)HIdw2#!r!2@ww93A@Cx(ecTtyXI)+1F9W zl#Oxp_4P{u_cX_1-D)`pS6RkPEU;X9V81gxYqy2e?|ibK->dtaK0_QYnN(ry!;@$> zXZK5^|jW^4XM*5>Nfe+@JXNX`&6=gt*4$xeevQ;;A_TmoL?_G zJ~b_MvW!@~9ItP8_=+p94_7O#X3MfgK(>&dir~UEaQKHhn$B>OI_&3$HN)D^1}yz=o$J$SnMrWi<0mO zeWr8#SDhi1r!|@y!GZvz)~z?9jPJ!&R8-zBFhgO&0e#Ql8hJgEUy60hcqo?y$t2EO zI&c-pL%OIOhs`L)ZzqTNH3?+51YA%h=o6+-L6BJX_IK!?C0WNPY}0Z++_;sy{G#D4 z=|lFfd&a7~Wm1MU9T-b3aH$Qn<%E#3%*j9cNx$mA3fD-$H4LCsrM-H(H}S53?@etT zL!;RL$JU#GW7(~3z>ld!NrsS+Av2*6A(<*kib4q`lFS)0WGIrMWJ;(+5t%DQLJ~4W zA(af3c^)c5;y+h=f8YQ8$MNsuJ@&izoA+@)>t1VJ*L7a!d0uC!&hvvvEdBFOD65Di z+@ zeiO6Xvy+Z%TI6MLEu#rVtjz#|xbW`kjO|yRo1Vs2W+ZjNb-93m{5eJKof%Y;f^rGj zmXd2J2oFO;L$M~(ak|r9kFsvuV5&at657ua`q02<;k^7MC9AB5u6Q>19n_s!;d?5~ z5_&%?>x9Ab@?Rf{sL9vg4WH0gdwAsB9xnip6r0rnOA74=TjTp5_pRAhm69~QX{%;H zgjR3=!F}c9=^GM_-o|JN>>*+-dwbk!wOQ#1S5=jj6rbN?Vs2eiF1uAPP7(i-D$s9a zy?@%m*rV`Wj6hPB%OKnf-*eVkoeM zQ%Fkf{+7&HdpSBv!*f8!vXX)uN9-=KO0WXY2TlEhDf8`rFKk;`E-EYx-Y0bAk4k~p z?ocfObCI}A?l#J;D0B_kH|;h?PXhGUAHd76MMiEDb$XvlM;e2G(*>23O7558Kod0^ zs0B9@5=;#oPo1Iyut`ft$6k6)Qc5Z%FK<2cP#P}iCkX7?#SQd}&bqX;lyiqIGc4i2 z(zk-8;ahAi6B#Xb=^(A#ctQJ=+$z!}ay` zsY`AYL@h(43D;D_e8%@zoLjFwKd-TR{ZBsMqpis2P*RY93oIjRe9+v*YY|b9>b~XZ zZtI!YsHi}gshviX8j7}~+y}$VeHLsr?tLmthAk4v(G3EVSBlhYDYrJbuXtE|QOrgr zF91{y-#h~tbU{yk*eDg^m{NE7C4vDLwpQD%?-irF<$BvU^XnYNyu>wlj<*t?Y7Zbp zcn()KW$1uA|Ncbt0X5re$a8uw&GF#sy$WFddtSw|_%%(QS)=1>J=g~mh&K{xDWfUfwqb1&{j*UxtFNE|3Jk-TbR=2kU_22?L>)WGW3XfXBV z^4agu&-Xw-QCHkp?9g=|{=8^0x2HYolH!Z1q3X0zQDQCkcm34mq{;9|4BHc>(!ZXW zBUG#G++(v6Ip{GNe&6dyvlY_QRZN?&fsp~^nL;!iF)^&fbOuxan747EO0NZU$-{Wj(++L{7H~5q#Sdl^f~4 zI>`Jq4jsxfxRlmE4D9OKjT<$S6)WZ$Ws(K)M(^6sYMtx!u}e+&jctE;5UHY6UxQRU z2m^k*GNMrkt3y~0`wMd!$9xqQcDk_ycdA+k;XOjsTFHOCVp#{)pYk#9aC}BpnHp<*22YfMEu8Hu^%*GakWSm230GYYT3lAyc`vFD{F=RxWdSI)Xbji}t zx`8{Tj2eB+q01|K=VnbSKRS&172W_9iC<8V2HDSdnIpe6!IvbuwN8oOqIWe8a||g5 z9KV)&LOM>%Pw~%S*LeSRpSb|PzX7#pMAg=LT&Wuh-|crb-GpcO>J8SA?@v#O_p_h_ ziL!V)(Md!^1SWqs6=&mDZrcLseGcFP9((556S&0%z{*5tmuM5d6gh;W=$v8^j5jIH z371k>clcL0Q=;-w39&QFNVa>&#?~TlWO~rI@o4UBILEeBsA)DiEC)TW5VNCBvE{Km z<|#UJVQJna_#F}mRVsDd0L>2fsW))#-&bfCryVO0r%xCUKd=Z?l_M=S~T3qazGV{T0 za9|)BPJA(NJ%|F&E(-mt7_^GvsI5v7+= zSe~RSVA^-(-o9){st@-?wtU=EXjd60q28LVzOoFJ?d7ZH(jZq7(xRI0d;qR5mu_>= zy0P0skOC48lJ4CTpd}OK7>bHOoV4U*J|g*#*d)&Y8gQ@Z>EHZ8mXOgSUkSWn5|n%W z@dK-am+?1_h=o6!@V?$4IUETNXRwkBGh?T;f) z*}uOmd((fV$*@J`aI~W|>3$Ffi~e1<pqHlbp><6`{+5S!N7MDg zT$kXHR^8NeJ-!H8dnoXFk&dbOrK#8JX(?PF0f!nreU%DiNr+MhAvgw-gp3rM@pXXXBxeY`#H9MpUx^nHI%M$r>cTZHy?H@GSgYb zuj(!HGHk>vqI-$s_Dsc$srK4xDzf%OQ*~jWaf31&Lt3K&HV3zPx$hbX z^WJrqxX|Pmp1iIbr|0t5dxd&-H6=Yg9gSVl*&jE3SwEGl$~bRvp0(k+B3%plO$x4a zbnj_Iehnt=hNKMX(d((%AjSaX%z)N{&}buMpl#-5>hRAZ?v3>K%B67K3JMFa!ewkc zyo7o{@3zdIQJYEyB=y8Aj=$guSgoOX$pE69-#>r- zf_q(5QqqY&v#5PRxI)FUJ1Z$ubE_MhxL7a#SjEjSzt^;@-WBBe2u|75PdOc*D#7T$ zxeTtT*u8e`S~j)F^Ia6efCU8zR7M)2Nd@{k4ZXYbM{_l3E}*cJ_*fU44owOdV6n^C zz8$A#bkCK-D(rBv<4N;dqTgB7axa8=Ys^uni>@>Fp#rGF8^jDKo8!+Su5!{`5M`e; zXI#G;S>u`n`|TPUx$x`@mzMvI%LO38)6%lnwUM|T8iI%RZVjjk5+n7NV|d z>F79HIFY32R0X0TSRPrrkxC0X((yk4st^Nb_#`kQE6z55xk=Tu+!CP>Zl??YAkv!S z_6gZ`mCB>i4@TT8*c4ydnxeUShh5vg2gNTQ7^sE(rW}dY5sqPBjF)O`YMP#(wmLT2 zC?dIbsAJN&?o1Mte*LGL_$aWj&Zw^4g=_rKJ(a`9J>$eH(+;Q)z6&Unx6+bdbJRWl zDoU6TCLSUU{McjxdMiYdQ+;n)WL0JiiN)UoR;J2u&4Kun&I|7&gda8^6UE}Cj+w#O(6Kl#ZCYHJH zkOfd*JY!hSUg>yjN1d%*3&Q#5jVo)e%05igFm>}^2dUE63V%MFxwD1%puE>`pCNk( zgvR<`&S@t$APtWIe~wsDplh@j-G}!Gwhztx zR8-&KjzJiZxbpJB1V^hu{A4n;J-FubK@tLfVlq7YvaAfJJI9@M3;L4RflRNFyKqP2 z8;c!9%1d1J~<)Lx1!S7QetuezWQF)TV$XaV!9|lnEp#N_aYOhU zlM>ghXssAz_%8k&4)$(r;C|Ep2enLwK?*hgCSrN!YwC>-rC z_ND0tnVevazANRnW9#fND?iO@mejmMb?sRidtdV@DJfNd`I1;&U7dfVCr-i`KOI-! zKCw0o-KMu_sqaHaem^$*ejS}vp%D>6t|eu41+WkA1Fp@`!LxDWF=v00Z6l=?b@%hy zqNo_(hMim2-N&Zu6?oh)>;t0r?RB|kR9DwhNlH=i@dY$l(}CfO&|jPAcs&wh8#plrbRwM$agU3nw9I|z|z6(1g^a-NE;+BTuOfJQT`c+ z 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ⅆWIi~4?o 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 A^Z)<= diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aj04_test_one_moving_one_stationary_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/aj04_test_one_moving_one_stationary_touching.png index 6fd139b3f03b15c43072a59eb41c1c6b932bcde3..83ec8f1bb30c6a46dda1599cd5f25d993844ee30 100644 GIT binary patch literal 31629 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πOma2){w8&g|qc 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 a;*`6dc$SmDg6C-~O`2fw-7!OlRsREH!bA7~ literal 28013 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 X&C$R5b&*%I59ry3J@8h`txE)1ZuIn|P<2)bdK zo)p^*VUM>agxPL=XFCnq{ppDjtk5Du1P*;_!mjo>|G})2Xu3PQ&YxU5@b&BCk7)%zg>)XJD1ON8 zBR?u=XJ;p1-o+!Ys94qAO_QlzSc|-GW@hG89W@n|!5pU8w6}oQ!^7iC+6_(~y;53} zydJNnT%$UhnQwwkapLX$J6M(PZsqCcYUX(Dx@|`#B(P}Zn{_5`1_sgxk9P$erVt^O z+1p^he*Lyj}HAM4q(4BYDPDg!Clk%M5IdM!~taD_%23q$pdja4^Pq#o4QUwr-g z_28RGy-yE_X>yDkj-V=sssgZ3p4)4VF7Y`z0&t*jGRpF!mM{rnb+j^GlFTlHSOK|& zM>+HdD}BG^7~n8_uBf6a-RH{!PTy@ATo|gF#1x-K4W^~WpV!o+?RTAElHA`}M(&SK zrwD~IZBMxxF=5u8LfVobGf)W=j`8QmIvQ5Du)3PRU-(hKa;!134Tb?1AAk7EE4j5$ z&&{z&S_ua(KR>@~*RJXB+fTf7{$wm<&>Am=LY3)}qZSqy)0T9aW5o)+;{xk@ZSbB3 zN{T@UY>wcY=f?(bUw`Awt5mHAxzNJ=_Itxm$XAdSg-V z-wOpi3=gc2Mb=~}vN8-h({Dzdb>_n-V+{21L2(87HH34XwU`r#ZKf45qug7HtWa~0 z=hH1gZOpzIAg19h$8qNa#qP^FV%RL`1}^ zw{Po*ik>i?P5SVG(iw*6YAX!`12O81&7hB5p7Y+0>(0({Ym~UXiIlpEe22q=6tajq z%tWk89j4yjY19{rW~^m)n>_Y9CB<-iZT4o1s+yW{MWf>STpz{JqyE*^@&WemG;^_o zlGJ)^&dZPT7GYnMXC5K<-oWX4cgr8{#$mdPG%YP{W3AV^t;EqhU}SG+LS|$-yP}q5 zZ-GGRr3BUD;$o50Ed3Kkalh5+ZgyBsA3uIX`M~88I1hM=DTFeIz<98;v*R>I^4C44 zJN+f!Tq9t)d~-Y&<&&%!ij6`}1uF?FM^7>)u>Qt^GArCgP*9M7b-$!V&wIQ(cka+i zx(K}B(+v_ds@1O!q|hvL%isO>_3QQ0)h_LgrAGd+*jQq3Z*PaGuXyWy&Mf0i(Kwmv z<}yyOh+KA8yKQ$iZ13N{um7VXO*2Q|w@MI|$aOg+e^K!yh3k=DF$Nht`1(JNHUAI7 z)c=u?*S7;x{WEGa{)yVDX`N;PiYH-7 z8X6fzYabdnu_Amu&LNv?!_6r^^`kQb(vqyLt>Dh?Zl5k01b6XA+&-hi$!(Kx^fuG# zEM0WeKc7O*+nbd8p~eU<9m452wO?_xHg;O^qn~-<%&)vK#BuoGMvy?DsTo*VDeD~B zZrWsWnuv(#Fe4*L#O0QG<)&uL5rM*Y$TjO!>Q=(c$A`>Hi#O{FoRPe2AV8brIIaHo z3Bqo?);r}}e8<4**6Z;XPyU^W4$cU-0eJ&<*nQYH$QdnYlvbCQ{gb%n_)^;h#O$wB zV&2;w)j&Op8=jt?o;!l^`|EJxSC`6s93`0kH-mYQ0?|GV_ntXpF@z|X3e&5i$D(43 zPv~3SDu!{BS8khLo#Xq+8>LM>{^Ej})zmlCv-acj*vgkL8(JMh-uW~p_Gg-W^jC&e z{$eWpua6ZGN5wg<{$HK|w`6mm}k>Q%)CSF|o z(}lR#?T^CZ@og}+gWnhn9TO3WD1M+1>qXYg3Q4SxrOE!u($Cs03W=XN^|D@29h{h` z!<dm6{#dbA$a^uJeCL!@s*Qp0Cf>X0|Q%-THEIwcN|{)aOpX$eI0 zZXBB?BBSO)ekhsj70jeT@?ZFFo_$P4W}xrQVTxi>2HBy0uWd`nT*dYiU0e1YX8Bdg zh1(n>*bjO7A1LlQqV~n#)UxkO_#6v%9*TWTJja)*`nJ=oy0+G>*(37#^FfyV4Fbqs z&h5biZrXF-AyjbC6%lLZuz2rKkV~x`hW#D(^r_E@D=#{JEFYi6-h*Su-*P`B<`vFW zA)V#&ntbj@TS{(YlEf(x-NzD(Y6fq*^<8xmD#NcV59-QLk zt$BX(MvmRsWn4Tw@zvt%PFS%`)TQNPni1pVKAtnHymh5}WBSQ$fx2iX*G>-tJiJ%d z1LdXzhR6-je5qb>uF|;VzeY=t*LFAsWY|KT`{%!TD(mrc~v3hR2M$Z^yCRzVa|}SNHbcO zF5*M1d91)LOn)`vJ1IWSV})eTozD^6WUZZQLidDY=<9T&Q|DXtY99;>byQ;yp0}lQ zVrrmmZ45F;ZkK>*;X{xLZVXz&pCIrNZ z4JmtLp^E%f_fNR-J>Oij!b=K(;sd(VCi>G|nHN=5>MDJ4kSPO{mHhfOZm9GY7u-@; zrglJLB5PBWAkKi-HZK|D8J~>}7f9;(aNZ)1O(71Ic#;dM3yXCuBZD9PqomwLo#y*P zIy%%=esmI#)P>e@CU`(x#>RN>?=CDaS5@rqS|cF6ReGDpYh#E2@HjgM2mbniw~X}O zh7lztJ(A2L>edwn3utW33sMMeey+-Bq9 zA-R#NTvOsWZS$k!Pm<6h8u!;TQEGMt*=^~nbd zXXbWY$ZGyX%RHz5M+E3YQIOrBR=gHd8=}B|`SRs!s;XGQHN#ZVW~WsmCVI7nZZcQg z;<%tHU$N4RpYufdrNo1#CZ+8GKuHudGyy9s4x{7a-|Lc-lM$E(C~@TLn=5OJ-@a*n zFz+UFUz<61>Cz)l4?xz3NJ(p8C>YD{9XWDjaC(~frSinJx+2?=#O~>^=g*B<+D(NK zI1Z`rX-te6%RbDE?c|qZ?`~HxOS~kDu+KM;D(AOB{<>-MRqQBj&F+~LLZ za&ocq95OO8$W2eQyp+?@it&^@e*E=!rTpkrraEF2W-Fko!G3eYcK0%Z(=5M#IA>!c zfXtim-Mj4E+{B(+D<2UYnyV>b*1tVf{3_+up=%%fT{jq z+J+4gUo+PbPe@3}W^LwHbxn=I=F%7!FYki}V?QVry!Vz_K3Mh9Ln*j1=ud95FnA6o zodBZ41w%tNxCYn?Ln9;pu%=*4aiWCp9g*G`#DStG(S3bRAX@37l9K$nb69ZRFL3cZ zx62uuV??T6UkYF7)VMv=t|D_GRr%$YQdfH(-4e>~EM0%~j0akowM%1-uhcUrsHh%< zbE*tik;}+KsRJNkaSlD7l#_G#+_`g5Vjx45$VH@8VDTuydyg)`YwM(+zdr>d<70@I ztgx;D00T~{L`G7Wz75V22jz)&fyFs_dED;qtzckqOu}LE%j9kMxjnD z{Q=^_#KU}){qTAP6X7yfJdtD4OwTCoL2H&zKQuIC+LnZe(*Jay@a@~Tl?9f)rKi?2 zU8X$-i0m6bU-cl=j5|A5groR`(U#VI_z~w}*w8e$J#y76NPE04x@?mZ=U@JqakOM8 zIzJ#0MRqkYv(Me}yjZr?9%@=L0EQF&*v)?G>xrF}b`^j+mE03aFCby#Z|gBWdP^2NG+%*bp1N97PNNuPx@S>3b%X+m=U=~mP2>{0UA&vH zzsZ6m-4L~#?Za1>XGz96E^QnUI3_OM(|1DH)hxpA1#j!fR(|k?=eD}u{(F8b>R>#N zU||YZ?yP_Kpg5D>uh#C*&%b#K7+%L{4ys9ZVPVRio}LhGT8P2;`c)4}N$spc6#RkR zab3>J@>R|i4zYD4GjnlC5P%{dS?fA zpE%`(k5cQH5rMtW+}ZkjJDX(PAJbLJ%gaga`css@lj$=cM?C(hDZxsO^ZFc~2YX)4 z7Y z_DEF*@Mi%iE)93Se60}Mk=mi3B_KBGCadm5tD zvYB*-6(qlf$>dPOvCk2Q$jHj4a$zWe7=aC+-Ayk{PYS4n)4JTd?81u=nClaGB8F2PW8TmnWzIlPp(C^0edJI2=5_KeevW|_=gB_$GsvH0*ocsl_- zU(P^CNO}9gjYW8=O3x( zM)=^tgF{3_??V%$J?SCd*0;6>=w%mHgl20OTA6me>)~zfg>bzx*;Zx1BOq`XmHv3X z4^0ECN0vF|Rz!9-KTHfp7oS4ae~^e(Rcf*)j}w-UKY#hgCj$>SNnmhrl_HDheMlc{ ze0*fc^?UD??$TaR&2d}(AtB|hr^k%I`Rb!89aEAkv4DVRfb+0-rjwT^^&@2sJ4$&W zZPAFBnx_&F1XI7*i?}$F;F{}Wp|e)UZr!>Cl^;+mHkszYsEELt9TiyH+nzT9o&;iz z4c|51OCJ6kDOY22y!XAFBZsJuOfcwMJ$sO+tlVyvPZoOpEhUxLI(ncp%6(^J@r>gS z%B7_x#{O96(||2tUCBeVpH|a0HRT#_j@3xD?~u>vG=z7;!b+LxwXVQpouAhE;c;5* z5|pEHCfY;K3go^T<|Za34X1SX#GZA|x-k(a1!UZSULI95hi%9Kba2Vj`VLP8NnMRF1M3A5BGzQT@86R4~Sukla^*YsU@dbikZ z^%TO6=;)9D*@Tq%b9*yZsLF0~@7eLoZv|hcrpl>OuFUkbBXw2h*>YSZWbJ8YcLz6G zipGY8hqLpo`{5BUd?Mx#Y~*z;kJeU4>SLrvEGjC}Jh*IFlD5Sm3d!GeE06r#5I^aZ z;Xfoea0PsWCe1MojhS44A1I<@mw5@0Y*R`?Qe5dYVslUIum&YwrdIxuNbTe{{V$2< z=J=A^9A~~!_>^YbA4D)xq{KE9^VQ@5m_!xXYb-QW{pjeh-Tv;pcOC5blfQ2t$dzK* znLGOWmZ&#lqOr~OO-+=M?!eh?v?uHx|La{8s`&_-L#QJmsMK)(D)`k-MN}nI5>ak! zZ3Q)EUQatrM+e7GvME0SbV~6f;56{e^1lzM5?xR|eE2XcU!hi}f{socy3y1j&iYnV z>}!KYm4lJ|kvT}lBF)2BsF3^-;%&{?3yFbWvrBWaAMaiFbj`svHaAm6x(|JN;4EPzg0A>%{0soB}G zYa)RHf|-+@%lrs=t7Z&ge?jGBkW=%3tYSQ^k8ss2*_Zq)C5s+ad91v z)P|k@i*aLhrO62m4K2c)iXeLR>J>7AWh-B=0Bt8;7+SY|}Nfo$e_b?*C8!Dbfk&omoE38i7-fENP+Ide5=H%J++6nBOKP_Co% zy{liv=x79t7x|16UIu2=tdE3wGgUsVK`&gb#dD7AGDVP1ILB4Men%l5o548fFON3^ z9j=vMce#&l>KE1lFe+^D3HLFB7#SdFg-AZ#9Gju@A1r!~40!LCp|6$UY=L@kI$CK1 zkeco6cM%fCGhh0~gipetWLt|r{L$rOVFdr+_%Wt$-Tq3Bz}UoOxOgI74oWOw$o-LI z(VczU+4&wMiy%^crf4M&kf^p0*ymWdmHwpEs%#$Mhrv!Qv@*+HJuWe@_foU*d1P({~t9y+4Q3}KfZA}6l{K?qn^0gG<}_X7e(G7I}Zy^;$6U5DU<^#C&> zS-s%7Zm_`2k?L zp`FcTq)<2v#|QBv`R&_7W$x<=aKY-CS`VObVHXlQf-D6fBM^OvRZ@}>Aum?kq=tuw zkxx-^tLuYsg^)oA`vZt!c(wbsA{+q(6;fas2H^UUaeH>+3X+_WQDTyCfZ~-P$7RtF zxx)IV$AAgCc=2M+{=T%^3YUb_OyJwMTu{{NPkns@pH&djk0J7+e5<#g342 zf^-N}3+%AwWOi4MD#xAiMX)Q>#rKoA0KhqI&|AFAmU8xzxy3_G!X!aSA5v>B)M*kA zuo)(6c4GMa}Y=koUKXK=^z}LgxpZ&M=J0#j96ql0&6~$fY+>H&T?+o?S|9 zKPD)cdwC5&N+PgFS2^12!`N*B-M)VFrl(Hs{CNS>FRYQ{_v#k0QHABgesevwf+}O7SBZ%zh>X>8OYs zt_XT;*Z>B_fx-~xur|k_3VA;)aRUIGfLZI1EemR*E~T;YZ!Z8cxgeD)Uc7h+iMjR@ zEyyMq@K`2QcueaHnhH<}Sb!iA#TDco5NSit&X*p=!^4Au{L7TXWOp_TtYra*$!j`g zZd7s)Nqm#I06WMBkTD6s9YL&=h4FEo?=RY2>um!~5LvUM^BE2?NoSq7?1d z^75<^fXK=3`P_iK4g${BmLYQ4_4Sp&spdM*>s41*>jPFs&Pc{AX*$5#8Fj#Mm_d&2 zzLVZ8`BKvL>ol@Tk*x&cO!jBBSXZblts&fZI%!93t7b!SCHZUY`>^ix2`ipDl*MtyE_rz zEh{{GYO{fOg-|#MA@Q84scCq#nky#4b!%_tj^t7{PEkZ_Jflx}*dB9OLxigkEy=fH zd(PS?OvIV$(^SzGP%!1(X{1JKxF|_iAwxq$0q;Ez$ODx?ol zPp!RZmf=;wNP)M@5238-qUI z);xWPe0p(WlD)UpuVp;f>eg#_F)~h9ww$=6O34*8EE0`WX}|^}S#a{ptDEY)7S^_~ z7|0U3pPw$4Xi=)zl|>cgY~iAS@=(#E~s%+YyD8*E8eoPjVa%r^na)z5IB{YPt==J)*4<=ya8E;g`gY$tGc+g;ANBz+#m4sbz}8V*L|{OYV=xWB z`u1YCo;zu*sHI&|zN#)l#3I4~gLSC^3%p2Af-e`*d5(=Oi2>2;Ox&YYzc+@MvIUOWT`0&)#eV%E$+t@==~D|`!GTwO(UaaUJyNEi(7s6iX_ z0AczE65k=_FwE=#<^{ZhjRN^>7;+ZqTVZlIE>JB1lkL~cLP61Y1Pa>J9xIyTvjyjZ zk}6wUv;W~Pk~QjjSl!bRYn*NVrR@Ha4R11u+uuexXLJ_R@M_&J_uNi0s(S*gOn`D~6@Zsq!x|zGd8)iHh%cy) z$$1de7xUeR>}+h=Rfq@-Dl6z9o#S)=XN(1X!aAr;Q6lElCC>9mIy3^(P802vDYqO6 z63p}Gl#;N-9Le4MW5?D^{!91;p5db(9_R*XRpehsM~yXkUYzo_a3*f}{Miox04Pr8 z9{pki9!G(V_XB4SFyT+1J-a^k>Fa#OzI2N6%OIdNN(jn6X4<)P|MDVOVINBuLl$7# zjnt=b4Zz@b{jhhCU@~cmdj#pHd#YGYPEOFezf|I-e_-IKKF&q8&~e~3Iu`Tpwq`|6 zcOmI;HR<2GA2GW9HZ&k% z;zpVp!ndfMl2=d=`bYo9;3@G9^63M!(OUZ=0ja$JM+f{dS|FAQDDmv=?f-raHop9S z(g~B3rhiV46y$JddHKg5Mm04UGVd>s=$Xit=etb3?B~y#vMKzuXF=lxdNd zk@&1lomTwD=-(#8gY!Yy000C)?HDU-C33!Ayc-Y^61jrVjrWBAah6a4=?siV$**w# z`*6zP9{l<*mH!wY{-UPZLXw-b^_4j0D%r8 zqNs^U3c8Waj9%0VHz_HRPK3yFz@0osHQDDa*Yp{Rut-=Kz6hdJikGC@-CFgBq79LU z9zP~QOo_Z&ABx5%uJq#pxOvrPDnI+;XoUNS0uUxX4BkB7?Xqu^W1Me~baw{IH#?vB zHGn9nUC%?_MMPbLs)v0`E)ArK)r}_t8!UxxX>57z6>o)d6CI|&GQNXl=9v7VE2_F_ zoiqw)E^M%vRJKEf3H0&yz|B)s9cGRpBe13-+^zDpNFy%a9N7q2zuRH@?uOIIlgwZ8 z`e~(z{;JnpM8fnTo}~brQG@gIw=FsRKcbS`Oj#=I#)wdfrKOm?xU0PFAtS4TDjea2 zmo8oU1(HBvYL=uU!9RZDgaM%JpGr~5_lQ39tF*LDoOc<16D=Q0-NlsT0^HAm27NHZql0lpVWaIi9xU!5st=?y1lL3n+JdzXy9qqp3uF934O@ z4p?u!prC+IwBQ=7Z*I;HRa8_&glqueb+9*PMsjm=kz#IbrpF%y;_VHnN+{^*gP^iH z~8jxCmW?_nHd3H6v~flWlc9gctj!Mn_hTBv@19$ z9st*=aVK3;WypOkk>4tFboA134GHHPEo#xHmyJiRMq7!f+--@&TIgLb6f;hrmF#i3 zk@EfEIB=fy9q*@p{8-&#srwu|O{ZJ+!MFfa`FTXw*d@&E#LNoiHH)90*Lfn8)jp=`_T1M=Fpa!+(Um29tvJ>E6yEL2yRR%X^3 z@!J&JUa|9*b(SFty0x%&)Y8)#$|u0&_fk0kyts+L>xgvewcGbRxpz6*j6OTmRVZ2s zxNVs6n`TQLN@5JzI?1!7!$CU_oezYGVr9(kG(B+FpWOsTf)zL-6arAEp^ zc2gu@_>EG_lL1ZiY;ozy_RQK&Gspaaf%tfU)W#V-u|hp(VlN%ZLJ=9~YA%5Nb0{Ob z9Koy-&T}&z6Stw(!NS7g;^Ql*uzp(K&Uh9d{2)12FCDGxuJB`>*0Q|6Hbn4_Ky9y$ z%M^l9L*+D(L+)!9h}{EGegTI*O-Kmc+3}cM-O}{xqu0HHjG8NGv(h9kw(J-4_ln6`@aKvN0)x?yn`7k`*DLO_pFSETO8VBo-Y{RM zSyxrn7s_MCGd7hCpJVY=V&}I$A*$am>sL&YKS3t{s@JZ_m$ai_az`ZZ2Sg5rtEgk6 z_->a!K6xXBRZ5BpaY8^~<4}$ZEbMn{Ov@et_kqDkZO9qhVO*s22R;CCT(`Bgtr@-G zzx^b;e2Zwnb6vM=0%%Zjpj?s69~T~8g}K_~i&J@@P4V>fOvv)>U%y77AAPG}p_O5t>~1ZIb#A7g&fjJB zr2LjE_ghNz^0;>GaJ=g{9a0?3e$TIBa>n=q05+KKFYAo2NWmZ_K7y3y`q0U6F^Di^ zXK!x{mWhA~da&V2gG>7%;eb!f4-YZnUs`2Yz~&HvKIY8edIdpCJl@{Aw{NnduOc&+ z1Z+L<2;6Kl8l<%w1!7*JYi50{rePV({LqreUS*`U;We@{d-5?s)=hzt6>*(sZD z-AW%USal0Mce{cm_7_8MW`BJa9`2u$lVjGp3@db`pw~(c$T0AgErO#3trOm3Q44WV z&}Bg%QQL-$0L9lgG}vxpfZGHK<3KWb`t%B9=f<#!vWd#J0et)TJC$mN@2JoH&eC6}6Zf$K1LpClX`&M1#Ufy>w z3*ZB!0em6y&~w|T`!+%OZkJnc0Uoi>_B=s)v5W^5l&rphl)y6N7CiAS07!#jK-xf1 zhum0|+Mdb#R_b~hNe@t3X>4wQxe_VZjE#-YIO?$_)m9#$?yIa|^3b2dFStt%sJ!ya zt4jU~P3w=_?J8ZpMV%>|I6g&1XCS-Jyr}DOl70~xsj;bf6+|%Nc+a(49?%5=B)>*} zGYblii)frqcw)zPB<@;0^F0`%JNiPWPe-GDk8|P>5>_q@fycf}yYS7MPOr}F_u#!A z1Six zotR(;R@JSnf2atUP(zrb7OH;Sh3Po(-GRI@DoRcK^f~ThS_8|ypdg>@^7s8Ev*p`y z);kt%Ycr3eJ+}sf`O9-cH-Y>CDH+j1N}OhcWOk=iiniy_i{AU|-fKqh^YUJC5y3(+ zms}5`;s%}WF_dJ9P|dE%K-H7S5*`y11U0GTLM2WX9>~`E^v*Q0@=M?7E4uY?*5>fG zRwm=F*=+T$1u={eHZ7P6fI7vj*n`;)aVJ6{I`Dc;yTa0~;n|6e z<%E3_pe0kMIoQldkN}o`JMxZN7GJ9i7km~d=kY9@V7!gFv(w{GV0~=3=r>YNQYMhG2Fl#-9~ z-LhCkxp!NgoS+vW)?36&3i4T8Y-}SYUq2VsTY!Z_pf%r*g&OcMDvPcAmU|Vwm^bu~ zgvFMw2R(&i2d)G}g}O8tk2cedut&fo6ii5hKr5 zV4Go)=E6J7w0;?r5!dV7WghCm>Fmr{2@WOTSToTc>oZt$rR{kPGQY0wSDDaYn5$Pf zZ|#jk#!~S6Ue`ubLIW=n73}=+jLToX95jhB$y-%svbC)&TgUeG?b0slu^Jh_+ROri z>Q4{!Gh&P2+OO21ur&aw92Z*Wuh9AQkhH6IzI@xKE7P|R?W>D^m*L%iaS8645e&}r zxaZ}?3`B9JySbxeWUz{h=`pUUt6i3I4~x)30Md!Ux1dU8a(bbLMmAfol4bwxxog+x zoaRLhCzM6K<>mWfSj4aXRR>LX7GLEUTyFJ^m-4+7?h|-Oe?a=QsCAc7{oz|Oe8-!d z9S>Zo5LQxcX>!&DqkSBweZ=}v%5gdUnMNP6fe&)lP=N4ut}A;*jUPnGeo*i<#zdoi z_IGb5x;yKCrc5+aoc45cEE$NAv2N03_;*1K#$A^SR>>5adH9oEq%NZriS~E(_xA?o z##N)m#+>l~p-|XVA1e$F>=%f7g-YR9SEC5XP}&8W^W)$@69QHGNTn&RdUk=R$Bk62 z+e=ao^=@LJ8!pZoionN(#LCv+yKvzGxFpUS7#sugx=&X*Sr8l`TwJm?HaT?|v3C8O z@(#4kF`Kn_t8+}m)TrFte3<~w@htMcE*FD`S)n88igX)rBd-69Jy*f9F@4*&zpPJ} zj)Fo2&tkpd9=`uaP>?|y0n%S|3PVK&{BYM*CfL0zv&64cVdBvJJFe&F9#;OMbhJNG zh`&kGJM}6FTQmQ2$uOAQ76$#hn98KwI$Ael&E_7~V%~#N`Uwg-a&!PVhA88@eJd?{FG}dtRBF zk555gpA{U0pl}b)+0lp0`lSIOe~q$+SLAsF7K=AY>8>cWr!6d0RdQ!*^3Q+07IWUp z`In1+n20s(2EdTMrBXMkg}v=A?fl(tZ!C62?7Amd=G~$e%XdezFmt~y7?EK&^(rM^ zW~tgwuY&cXs}_1`23yYh0`}eCAqae86-SQ=L!bP8bUytgj;Srj!Q@b%ihZUc2SS$> z)xnDW-mQ2UAmU2EqtJ0*2aWHsacrUGtn4|gg^dxg8fpWO3k>{03|u6~;CGSfF&$|7 zDY6?Ytj(4qI9Qwgfq(Za#JKhHYG|32#Wn8lkYCe0B)ND$e=#^HJ+i$!_+kAl;cp&` z@P7SCw=%@;p+&@_NAkhiy6kbI=Q>uZ3eKZPS2H&A(y}q}50U1HXZL@lb_mT9V|*vE zsCnOux_a+&LxhLDTt)8dH2WjFYfFu#Sc>A;dLDqA;mXp(d%=s-@7`LnC1!*#;4S^7 zAQR0E^wuM=UWp_Q4-e2+n0NbdCVUX}qM(?|dK?&d9H@X%+>jKf0ig>Qy3RTSNazX{ zZ;c}?-C#S+++T?&`tY)U{93M|7jO_O-Y4y<%Q<{^GF;ODZHIAep$_^ zgOhHNiupcmN0im%LmWq&&`z&5s>luc^N9tb8KreJ50!4EJKEO`*K{=&$4Qx6;!2fm zo{nuUa#>7zw~1_1l7j|}Fa$k7#~mxUn1hn^!3U)5Sw7W0UgscpbTt1bOHeXGhOA&U zXN zW`9$~Ir8g@CC0Q&y|Gp1EQ$8gl78_%mLyF%#eCUa&(PcI)C+Uy%GpA6nmQ~Xt>LpW zc=TZV1f64gPAEn?oNyz1A3NPO_8sWTBzTSa_KTrSj}BQTJIVP1y_02tqp65E@ym_^ zS!$MFQVVi);OA|t--a*~^aW(fSd%%OeI=Q{g1A;i0_H zmd{h~mfV~zSOij7!lQ{nsLw3kVmXs5s2g0X+s(Dytw>eeEO|5D+PXo_b;l$cC;=_r z^+@Mmi~wlu-}jm6=pF$e178rkm{_+oGZRxtR21#ZKm`l%DDOk-YHO2VOuyybB?sAO zW&}h*d4yb<`8Kq0HT?g!(5di*@e$~ASSV1x4rQtb1I#6%7k+!01Aqi*W2br$!u!aP zucJa>QR}HQN7OH~0!xN1^-H=T#59r|H+07@Wp}&lrf4_cxOeX)a{il$ADBJ_A4p!k zh$)lh=MfQO0-!4adGOU#_~NBYi|L4e7+OE!46>*6@Kc^h?ur?J8xdsWBjB)nw@RcB z>LVgL0~H76>ym~$>D^S7s>wE2E?p8JS?i~g1)8q3R1z%hEncNRhnpU`RAy!}=(eGX zPG_hP47V&#_9{D>4}-1aesu)q6F7{#UxOdrY!WBq%?wox*mTzrrK=cQ^YmY=!D0+w z(XI9(^^DBrqS=63jw1yVSv#&`2ULM@zEWohT3CgUuuI!%bnND~v@BQ9>WEyxdF?9l zFpkJH`ob8*&JVH_(y)0gqZ4e#q9d@-;?YZWQsOtRjzpMeOAcsdc5#EY$S9k?JllX6 z{NWmb1OlS@Z7#J+qgr&{@^M0EtfQUsnfNdG^7jgp&UiJgt)IB^t`0a}*TbSd*by&Y zu<`OX@9hP>d&dI;w0NnvpO@o+XXV!F&G{i}3InE!dFk~IFeIoE=-^OIB8oO5>w7|B zg7T?j@n(cZzVfjN?usn0lVVvxt{K~NI2_9NPm0ssU7MAwJ0_RNEO@@@a{_4igoI(I z2P%+WK5+RAL#G_p{7<4647uW0F`0v2cZ8yCpi$%x8w>`p#HBGD$p+{JK{zXLVn#|2 zSctNpKHdHX1J=Y^a8OQvT`tkqwR0ExMXQVY9IuCNVL{tr`R&zal>WcGwz?AY;4-k? z-(6=vb&3dL6+q~lPh7_$G!SD9B@GQ)OPYd0wG0v~n@)unQ-a45A#`BqjTu2uLu~gy z9OlTFBnD>-2WsK3-mDAU7M22T3QS50rvJ&W zZbLALVfS`+Nlj5p{PNZUZwJ&i4b6nz+}`fC(f-~pVsO2|6q1=$EJgJXj9e@^9kHzq#lpC(8`q-WsMr}Kqfi1!R7d+}nR_B1OS8ytrXdLo9t zw9bd#VaM@B8WpZ{Yy}k;roacuC>f zK$k}xvRYd7U|UO%lY4Xh7E*NNe`K&7Lh$nptYY_ss@~uISy0T1H{g9a&lG~ z=BjNPneRch29`Gg;00(y6aXctH84?8-JBJ-fFc+vVWGKZy?#9Vuj!@n<3Jkgq%0R* z{+L?7fGnit`2^Ilrs&gc#rAhWIDn?RhBp{UK8-JU?YEX=u%X4r&PwICVu=6rel+4> zt?TaAJ!{ewrOH167K(IokcA;QAkQ`!6;>&w((#1Q5*QM4=U?rAgJ}nyko7@`8&RbX zPe%ii8aSN(?&Ew$Ea^yNqYF-)=g*)2-6#34o=5~)AgGg)@;)pL=$0=54ckaG7O~18 zPTKWmq z=*2%7gbggopOE{P0Qbwleuk4X;BOJ^ps$pdH{|cv{uai5RoG;Nga-dwSigIn4_vOX zvf%Lg_>Ufk1$4+@0}nMZtQW?D)(o{%(Bv7Vlwwu~F4j~0CFz}JZ`IQ2>k#Xuy_s;= z$9`M(`81DK#B+2pp4GrwUM1>8N@BETY#^5NFVa4-eND*Vd z8-6N!Bu@tUfh3p9@4b9tP$H*{@-mD?yyB8}^fy$OZwFN+;3ETg3I!6uK&p@u3g=!1 zpUQneV+a$*#Z`~w@OaSY+w$(JAo3WPrR`{SZS8b4yEhfReO2N@3UmZ5LN zz_JbcqpaFN7WdW4gs$v^et1a0zvw)^!Ox-B|7ko2z4qJ~Q`j@pd@blq`B%FzA3PcZ zu_V{k5gB%IqzMLW7(S^iv>gA;9P&G>_Tw10CUl z(aGRCaDvJKznu%&0cB?g|6%|tw-)l$;*X5%PhhM9J`!BJF<`~L2BF0Ta?B!h+>E?* z?*9nFi2#5YAl*Cq-iQPt9nB14R`S5e^}$0CruxgyLQ2j>o*yzkZU`LL9ADZ;Dr#!O zg~9!S{=Nq$x`no=itko<&1Y}hB|dNQqvRF3Ovr$@W+(9RNw_KT3BNAl^RHAn+s@J9 zsuFxY@{H^&TbQ3b1@9EA|GS8j^eAATxUPvjal7{!`Lf! zN0RO=_3m%&e>VgZ@*+G5qYi17v@YLFi9E*%@NR=(c6PR{zkiRVn>oZ85=c;BqXt&I zxIG7u+l*ou8#!q15`cEZa=+A!1n^5JRF7eRV-DnucVR0*qelR1+D>N{QcLQ3>Xy0) zN=Qf~Wn^$e>yY-!8PXf4A`GDu06eiP;OS5g(ntb_(lPKBAB`2WegX#9+N)xHl)(G* zyYbN16S6MIKsOl$1u)5v{W$N%f%6;bLmmm0*$afSi%Lql&(YBl1S@XC#o?L@pb!+kziMrE(4^CC(!2P0-j)_;p#_lg|}8*gnh6tHVakYj}OS?nVOjeiS@g% zLn}kvaL?PoKs;h1kU?GpyQLrZm zzbTXfH+D8-8{<&d^DMM0+24;bgTwi5yeo(F=4iMJpngLrWG;kuT&t?85`;D>_@SDq zjsSH&x7Q`EU`arp@Iztix;cgz7?9?0YCauWp!BaS7S+|ax&yK11p=DOOm1Beb6VE- z@85@EQZ;tsS-{rSIc4oc#Jb}T)-yzLQ!MmRNswlel9ED}Aw0Op>SKGSiiU=U$HGT~ zT)3CX>FHotvUL!?6b9%-^~%6I4m*e$LdFw-#vtRCQQr1gynw*g$+jOUI((thy{=%X zo}8Txf#@WfRk62ayWcbcJ$W))@vY$9u0^b|$k>^6rY9+8WaOK7*Mc+sXm-V(+lLPy zszE?WMx)QdehX#}!B<5Mv3S5^r*b_um)g85pj(K70$JurM~Z3sR&SB5k-WSlG%{;= z?3bhp*`8QLRYdm{D#!Fyj{7folO4dFpQi(ll(sif!~p)tBgGvDmy4)hJG z@c z+ePTys`+rQJ%~Bg09M-$L>=%bH>m})+BLrP#T45mqlED1uI-RZs z6U1;{t91BT!s4+OR&y&#*|(PpGzK0&Jxfz;-w<>5EZ$)hE8W4jE36&wuBTPQ8HSMx z((y+}Qr*3%Fq)JXjbp;=uNCTfoyqJbK8GBYecRyTg|+0(?#yR5@l3=Srdg!XgJuDA z(=p}qR>i05V;GPlGW|KWc4Y_8GW7xg-{+U#sP)?Yy5bSs!)8m+Vn!`>{@7^Cg*lz~ z<1NZquT7#0eIN?h7l%L9o+Eibu7HJ$x~PbJQ^2}U4@XE+$#u|f=;adQavA=J|+$hXHo-(L9PL;e4JD1Kkab!z`Q zRJO0U(@YfR5{x|lE&F5?HtIF-+s*fHeve diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ae02_test_line_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ae02_test_line_line_no_intr.png index bf2965620d7461c936f8bd31453e96199c7b9e3b..7ae6a158aae6691e7231d71067df4096732e4b5c 100644 GIT binary patch literal 24318 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 L+jw?E`p16(LD263 literal 26422 zcmce;cR1GV|37|F8j_-YjJ zk<20^>-RX-`~KeV@8^&2aeRNjv~TRq0o9!C^T)$mf-*Fs%!4TZ;KuFs%b96FZX4pe)#k9^ZRujD3n#kKxwEpn zKP1)3a5ITGm`i)-=VmqHR94>Eu0eYuNvpW<@*=y=l9fJBw{oXP zzjdQo6I|vv+!E;Lw@lo&h2v|kQ|XiA390T=_6!^4*7Iv8i_53r<@=8uDJ__vwbe{9 z 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 H$AEtV7PLal diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ae03_test_line_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ae03_test_line_line_no_intr.png index fcccea2078c5c7f50c297a4b5fcc27678f6c9e30..b9b26976e034cf96df19a97dec545cdd7e5c1aa0 100644 GIT binary patch literal 24979 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 RZelg4&7Mq;vQ2wZ{ts3Wbd3N2 literal 27692 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ae04_test_line_line_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ae04_test_line_line_no_intr.png index 84c30bb9e8b3c44ca49fa3dc3df66d336d2e17ec..676d7fa3a449531400bd3555174476fdde7a42ee 100644 GIT binary patch literal 24108 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/af01_test_line_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/af01_test_line_line_touching.png index cb0965e2fceb18bec6ed21a4a4b35fbf8becd216..6216d5c0cc7d031c4c803dff1c90863118f8ac4c 100644 GIT binary patch literal 24087 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 literal 22607 zcmeFZWmJ`G*FU;w1d#>>1Ox=6OOO&!LJ&b|MM4RYF6p!=X(>rX1w~3?v7|w|L_h=< zozf{Fb>^*mKYKs#c*i;8d^sP^_&bJUZxvYgeO>dKbN*spA=foj$VeDSP$(3c>J>#T z6bd&0g~AylCWOB^-;JGu|KPh^Qq>`bUp~ajkl|=oGZ^b+CCmlOpECFC-jJ?XwtW|?Nfs9+yvO&sdzu9nWu#^z}D z?lLDcd;)@(dbzhe77Lpe8HyxEJn)>HoKOM!Ccd;W90MAodACYPZspQ-$sJWJt@Y*T zH$|Pf92FfMh{fI>@=#Ylj*E*c6B8EPtnF$|FR%EzH%->Nz-3lLW_Kz!TR)#!BTXh` zcVjlwWw!Hz>l}r3Z+2jn?;e|s43k+?gwoOBL3B#Wv#2NvRL$YRUU&8l_Qy}34%(sZ zhDuQZ?d|Hl`6i>2nBZWUC$QDKDI=BMnI_eKZf4|i`$AOI)P-JK)-oIIqGhvb-V_WB zp@n8muXJeB0E!Vrv?P^nJisa-7N>Pz#@|-E#x}<`FLg|q>LwK3T z8XJR{Rlw@1^L;r(Rho)ZT}ViDojZ4~w)lR}^=dy~d_qDt z5fQ2zH*Roqa|hI#W^eAoPb+g<8stazpu{&lxH)}|MhKp^J5$AMZKC0%sO52ZRy%r6 zzx5WbJB0>3zJ9}>9ytBl{9)MGl_pDC^J(=Fd{ZF~2U~iPbsx`hrVA7+)kjr!i|`ci zDUNfyYiny)G&NQ3+<7^CDGK&`;P@|0W&#?6PojZ4|28+*$h=>$;Zdmrd*KK<_ zi-yRKl>K><^V*BY8?#-R3Xcd4KDnMlw($um{h;j6nm{}QwEbz+Sftz`yney3?rV#- zc#oa&AS1?z;AXtv>$N+V840nwmVUHP1dGz(yFDD#kt{J;OT^;p!Ih3>~ioL=%?*A6ND^tNJ!uPC%pYoGQCpWVAC=g+f^9`Ym_^1-9ta0!bbV?D>Y&NH^T>H1%913UisU(rtU<%g?vLI%kU9jQy0 zQZM$^B#)`qhk^nMILbmNj}w!T>6SCW8fgWqz>|hG+}+ltp$j9J?MlD*@9j@96;EEO z3azshXJ==BgdwO!g64(`^`DIyFZi=h#~J0dK5V)vyc!n262mdK<@L{#-6l}~&u*{> zyiRP+2`DNmO8WOsa|KtBTo4tF{lEL^>QlNkkVxD4iDxYBDT7}m!=k0s=+?kluL?)r zAeugqNz(c8zki1F!{&s*mj9=Cwh}|)x!a0@k+JQcoyrMlIR=les5mwBeLeOrTR!ec zwZEJT=|d#SUd?cd2Tb8d>*LH$O$nh{kw{>*Mgk8Whl2^KFOq`p;9Us~sURtHnr!^v zADdt9oTW(8BCM{t$er2F)PKI}J1T}+jhrFOZPg&&;&z#1;J;rBIT8O__}a>iPU$F) zV`h!doOUE{<$hbv;V!<#KQTG^&mud~7JT`+IPj>6#h>Zr%a>Qw)ars*{N}!Fz$!wM zgkB@g$Ph58dWM5XIM$;nr=+O(_|f83Y9uYup?D8VCzn<6t0Yyt7o`e z)?)tA(C$s2H7sE3X$d%Ldp$osXuEBY+jvgm;NU<)ag+EJ&v8t!YKJW*Hn#hnHdlM1 zFdjr2XY4Vl)aCfWaAkIN&RDzsuWzop?XAbFOQq&vo%Gvd`P#U7cj;ZU8^9<@c~%*}OYLXP`*;BRZoM@2>DI97u*H8u6Ukx|0_8I&^9 z?d9Pz$MJ`DG8Zp0Lx1zV%2ygvlkH?kNJwx*MC03Q$%}qgF)=X|G&GNUdv(gC;I(dO zX+4DVIFzW7b$Ml^GCCn4=-IR5Lpw-^<1l*h12jhO-n~Ow2#u5rfk-2EIp_r1TRNK%n>okHNr;MykDrl9dfwhM z-InmOf8l^fTWP~}cijTz-+`7hcXmxv+tq&CI`iXup&9D%g@b?d)SOJ*dKN65HZ)%^ z#O^z{EwGaK5f+5{EJ=(*Q^vu`$;Qu52Gurbz*ZS;Km6sR#Z{lxTA~vyIJUjnl!yBp znu;naIcdjM+a1C!i%!8i%#Bn^Lm#)#7MrPp>iPQhOOC!EK0f}A(%V++{vWPF4BW&}mY6$Y<{|r%EI$z7x%%>KFZ^ z(TN#{kA+db_QTC0!lP~fqkG$LC6YTJt{K7!p*P9dBzl#Rfr1{sxvNXX!=tSH>Q4rU zB2Q1x;AhWh=BtvB%3*3>=nSc8oQ9V6jI{KSz3rC_1*@;Gk8x_G1kZFN>whB4!{uaS zTeq{_Cdh=PuJCjzm#eL<&DPC{zudusD%XC*Cd?52z2FYszmK|NXt38i{C{WCx>CEL zUV%W!xiXMH|FjnWd%-wk^?wS+|0x*%9~F$f!P?0%dO}c)4t1XzdH}YD0~r@ z8THK{Jw)hHzjC|9HwngO`+|8NO_Zb zk_bV5<^>SEdGXhkH8O6;Zl- zm#u1VS$b$YM>pr`+GLa2#OIK_&)y20|T>7sxJaeeo|L=Nok1o z;K5n8E>pZKm$(H48sSBS&6}ePt0X*DO=Z?TQ)@VsTXwua5HHZO;etTrGT$+uqRbz$jbuuXpyL*QeSeL?$`r|3)&$_}tTnMLHSR0i%+FEIR7k(*TVOvdwSTy`V(`)Y zn7G5pv+?>M-oeu5d|pb=DD~IZ{rswq%XfBl>6g<4<=)0N=q4J*Ti6bKB)EC=rpH(y(PCA9sh#2C_rgrI^W4)`_R!bAIByfb zE34w1++pdnJDpJGJWT?Cb*U;#*;#}rIWS)Y=#L^xFK5<)bVc&kIL`&d+z zO8zn?)LDP?)6bPrmh;xVHFoIXrvOU$3<~7es``A4cw3jc{)+Sz*1a*Fv6vVtoqXd; zwV^1BQ%Xuo7Bk-#wwl}9KSS&Z!AW?=C~;z_)UL=|{rYtZXhQOg%JtqzJmtSPJDiOIcSlY8hVC_iHY|FHx!gG zyk15}TlxNXMyq@c%H8-QPD?+9R`J{j`bEBt66WBPOITbo(sEIFUNSf5Sl`$fF7*vp zh9F=-q2RbV?X2FZIQTgO~m9FISco{A9zI!C~U_L`NmNWZi z5vP>fV(>fdtXKBKpH4WK^!CRE%LGBQ4eNdk&7|Oz^)X`ew2TJ@{E;~ahg)vjq59zI z>(?9zDcxl8fe4&Q4B+ zIcD#cXZjyN%67hc_Z1Tz9Vf6WM)uzeUdlL4D3-UKU4z`|P)m4S9;m=r!(yv53tL_{ z^ZVPDhR_Mx+S;f6{EUs$AWOBixtPV}q5TfLcH!;yTq|=XnVnO((&TFcDW4t$8fns1hZ@?BvPc}oRH-@f1XyB<#d38 z$?U|3ac-2U(>LQ@vYdz?71>^3{Gd9sc}kM^~$? zlMKOaCCj3L<<1k(Sl`Mm#UgOYz4ltJ9%;C;_HtRbRq;@|#=X>!$>akG63i47sIUgy z4YDIE)tJZiLFDYh!juSqeB}zUUf%5xD8+F}EmmTHUq*X{PJh)*P-=xI){H=1-RV05Ya-0&)^X82W!efOJ_C+rPH#2$V_P=LDN8OD?N$~4_CT$ z3HJokg@BY4rXi2X#_;afs?>`kl|#$Uj6k6VhlSPuTpGHeqhrpfsjjZ*>MACV9I?x> z&!0aATL1Oiw}XAien8oHos~7z=qh#EYkN7oqC&>p-28jvmY3{u^^u?L_W~U6?PVop zWx_PinN#h_66AP<$IH%YTU+x0?P}lRxAUL+0y6`R^>uaE(Hcf6vhE0BC(eA6 zmkOw~=8lerxC!3UHK+otGJH&sx@t-m{Ef^s^1hKA@n?&Pi!XhD5*B39H`}7SQaM!W zppx8bmN~aQTDbJo&fDcJn_9L2q{ zCK{kSC0KoIdvSo;eZ-UN;=yK*S|rN&lk2f?hVyml{)Zt5D(-NdEGtq$r5hL1$L-!V z@GcG^+X{i7)04J{D^p_X{stq*f^9sCK#jN_&3uHCu(rS+pqxnwvda|>jncj!3%_}R zwH*EYyRgy!Kv?z-*GZqNF;nzO_Dr*sHS24{rnL7<21Q2Yr^6EtSuaQ#j|4f#J+l#G zuo6T2VK*ArzV(QR9wnL^24xFudg`RiRVivs< zaY;-}+wVM`9kEI3Z-zcOc~_;iu*|lkCMnh_vEn*!YT&)YtBhB!*Gk~F=9JrURghYCY zjXpF1O>Xm#7PoAT={M5tpGe*5TWVZ*tlLyzN#*8uo_y5*s8X#D6PbYhX#`W`#UMnxnC4A-gSgpY%QG69D=#lN$&I!=82xK6oF0@ZnmcFX1=biL0!P4U+Jc$YGH#(?ZC*9F24 z1~1*5me00{AjFWx2k!s$X?O964US&%@$ft}&PVTstpn9z_3gtcwax50G%=( zS*T1$GdGXCrU$GQH3=M5(y4=cj`&5k}`1tXiwMn<_wJoJ~ zUz_FTE2f7&rc1X>cb#cNUD(fVENT9|A=kb98yQ!6xIs~P2836Ti~BP6l>h!3k+X}- z8g%NJWo6$xXg?9TB&3!*m@HV_QH~_+Oj&buvVZMbbwGgZ3UJ{VBd8|vf+i7=^WGbU zs)R&&|Fq4xb$;v#eHjnPR-`~SOV|v2JPV}D)9QmI2YBDQ{kQy=mT#2=XkNtmmQQqX zPkqTcIGCyFjU2pG--J@Rbp?m2h6#T)fC8(Yw`4%rv9^gI+7Tot37sEa?M6<^7kvZn zrQsO+otpc$6hB0~m-4tNcuRj)MX^!Jppwng6_5k_-^uDR+?5hQ{>tmGnBPA+SYqP=VY9YcPwsu->zXuFh$WZB zm)T|#a^s7Nog5j&w&-pw+5EK$S7=LY`Vm^vaW>VRWQ#t(diJot8db@BQtElm!;t23 z&{DKi%iWd=th(7Mwnw~y03`yUrca=SeP7buLVEzhgNwmNUm6C6K<`;3vu{9gIH3lh%#KHk#5n-N+e$-tZdBf&lY z)Jtw|;($<|cp4oXT%TV0+Y4|WU5hHV!V$Bzl4Zyq&mUBrve@aT0x^Rvid`k5?5z9k z+e~-O%(|=n{asf^PV490cG|s|(tvGs33`G&jGb+EUs0-${GtmotEnY8ny!O!ps$q9E>0IyTSQ8wlV6&l3-OQ1scfsVG% zk2ZFYrLC}I6mm#ImhIrlHZEs_*wLP1xpIMKDO8Nljg4L$+eYrgPoV9kBs#%V^X6&- z1ryV=ni_fZ3YxFos03?Nj?1osOU;EV>y1msP?jw(u{P!7P5rOslwEM}-(!T+RQN}B zy^82w>CPrq$3Y3bo}ad5#d?%`maSwh|BMzQk?d`+YB<+)3yWvrQY2p;r zc*hy=cRXmI;RNl_=dp3VikFuZ1a=TWx*Vg3rXB6&F;mmEyR7VZJFAyVa?Y?tL!34! z8WUi_X`t%@c!ma~^ed{W3V^zu4);CLE3p`(*iz4lnM5OXDjYh_5Bv% zfY{}7q%HX6cXZ(HI^TN?NcN_C>Ar|+Hz|k-3k%%w$gsRNmX(gm)msV;z9MG3t11kw zFUVe?M8G-U48=mzammt>)3QA=5ZHXQK$NL{|7_k3JcEz;-zynCj(igws?;j(SILGT zxUYgjO!DPsMxhl^q{Yofki086-IoSSa8NBREuees{K!hbUSxSKVI>GN99w>wXe>@Y z;GK405Hs!z@ds`8G#jP6KWUJ?UL$6W?lLU0B)fF^a&&BLCTO$M#b?~FM{Vh>R{7R^xM{6_S&0eygnXq|7xL|g<1SbDRt-Nv zUhOZ@ZY3@?H5@+g<<$fMs7O*k(jcGbBfH&~Bfs!XervwQ|A-VHKii0sa#tE;P-Ooq z0Q2Q{o(AU$qBemlr2vh#26Xb%b|UCK7yW#DS=#+J!5Zn6GGBMv^(VV-M93l_A~fiL zW!c%yT+Uq}5rN*otM?&$y)?FNZR+aAlGOb+QxbyJPc5hKQdZBM-SugpO+?ky z)PBE@q`N6=f$O^m!p(*b?~KSOcSXhjD3!oK`SQ2}V2esiio8q(a&PV~=qHA8@u~d{0OEf&dN~OY@u1(ey-(Mb1_}AxB z8N(4?15e6b;9jgoDkPD7g0xU3ZNndu9w@DPuiVrmpr+I%fTjc&g^+&T-Q7DAVSW7a6rFHNn$Bu;#EWOAmA2nu)X=4z(IxhZ2Yx{)xJ&rx!j_KCGmsVEvcpV5 zUX`et0!J7__*?8+@=8~B&&`z)_l?lp^+r5gT+>1WFc;XF#c)7A8)!V*nIsp3tPdqj z#m8r#zl1SdIZ>T+Xb0-%7jS#+@6M(JL;tf?T_UplZW`iS($?;-^mhMCew_J{lV4Q_ zze9n%9DhP@EH5t~&~?xG^-q8XlX3dSwKn;cPtRO_`h8|7S>&|zTct}62`>k|SgR%S zx669JA`1ubKVqd0=Xw9MJmbpHa7Kwizp8^XvH!-3`BrHhst@&Yo@9Fnj`2u&ZDtS8 z&O+xB9TgP-T<`Z`y9{7*k&}otPo(q$-y0_o;$9uYp3`0>&93Aqpt3$gXaB zRl+Knr%AalKLd83?d(~C!oou17+?Hvd|=J z;`QS!a5ZQbC1XOnS=$81D1BfTs-+@&kqU;3dgJ0s$RT%wf2<(VMVeu zPPeB@(?iRA33wZ*xdzLVr{5VZsYg5`A|lF!T9zo`kOpABt=K$-a2t!Kp2`p)>B7^g zGqTfBlCa!HKl84_>E6t{59tmjUBH9HeOuH_QajhdLB)(i6UEndQr1hXYIlawcBnMB z-M^hz>)$Bu(>t|waiH_-#%dp}eZ4A(6ko`n!c_<=8heuvz;B2W zF;6 zeeF8}Y|BfSAab-Hp<^>eM!|JJea*>8=cwjD&oOBC2+pN({=H>J^%r8t_zg=xCz$xX zyJWFE9fmp2U^;$@RgT4Dns&DI&x0YxE3idg?>aTowVv41A#E&>b~^LLy_3y0_!Je5d|HIu4T*4LA4o zpSP>Jl9E3o9z5`NIYL|Ml3)h4<>Yy58tBWPLLcm%Ew#Nijg7$v;qHKGtjwu3t?l=M zA;!q7P%RK!vG>nK1^BkM3iJoL^>5h1!kX$s0zTv8w%;?{&MQvY{r=hq(D3r#Dz3@C zk%^R{3gPXs+HYN`6O5KdCod`Lg#Lr+X7UsPY$K8+aDirENrsNl)#b_ZI63C*v7Jrr zjIxs_MH{VnJ6Ge#a4LH|}+N7gUp=&i3p^n!Z(2LG(ju80t@ zvhBI@pkT!d7=?mE79m04!^#`g`BlH!;2BqvRBUQBL{9IeU{sGIZqKE<`uZEt zVk1}^XwTpK_FS5iFj1D#po(c{hEezG88$)Kf?%u$bbTOx85G_n2n`E!+TU?Pin>Fa ztZBfOXh3}so~P&g_)CgBW=Q8O#sFT(FIHl~;o%ncT+q+FbYB@UC@{qV?{)f zstf)jhu%Kvq7os2f9)uc*E4REsxeW}sDtBq5>{SdxRiIt#aU=V-AgE{#3 z(;;5HKE%wc{Z?JU%8DD-p%2-|Gk{vYaXM~UFT68lqe93Qt!tpFa%!eM%T$Sc1&;3> zP_hxapyKTIWTc@S-UVk4$K@2BvlP*4;8a7-1R{94lq-OY|H*wN0-CgPI~KK&81LoV z@;N2O49fAl7w_3q5kNTI1#Gblb>Hd7*RzOpgJ`n{+oSnN-$RDc&nNt~g?I4?>y--( zng9R9Xy*13-GF97L+hZs4uWoO3~X$U3x_=HTFWXdC3(l0Wf__~ruS}hfJIL}%MEAB z`@d~;!;9cE=7Qcqz_?;A`XElF80#{F0%nX|*-FTjdvx{{m`?$ZQF_q`tS|?0VTF>U`ws|E)kui#0(ac}z_N9)Vh5W;oPXpK<{9~}W%=G{Ukt5RE zKAc6q+N({+XYd6#OViu6UvcWr-}0v}4Rl7JG_)_BiQzyHi9xlWEQe|x$jP#w{BOAU zZ&Fe)@!graa#~S}w>jP6x3lTDr7vggqT=9l3BLEd0LHwgTrI9I6E7|&VJsY z?0V2jRcwKINRwNR)S=IBiYn@xI=Ao=+%%ex>iKKgcCq)UH zJGQ>(=}wbvZRk!Vp_7fmG@VXk$Jj7K=M|_~6lMT-u|N-QHVCrli6>ewyTr z27!0IPmaPL%dn3+81;aD3<40I1B9NZ6wpj?djWa$hQa#n%PrE(57^6}iUD}@gq;)1P`6-oz4oXA=Km;DQ` zXXJ%92PgP=xMs|G4}ab!g8mL$AV9JayG)YM6V4snx zmRKjyLT_W7m6o(*T4OPnF9$v$4O|}1&3b6!(~Yc>1T^$)>z*L%iCVUUf_UJ#J?w7w zZVSMDIoSzKTG{n_D{SLcQ zf!CW$3ItSQhy5@uB?dtAc>4QmO0i%Yj|y+HW;au@eS;)+cwAy1L0xaoK!is)n{^wZJFK30^rx6A!oqp`O5d%c_!{x2NP{#mjs ztZzs;G}14I0~j%b0ixgG(JX65=(x938qg`6V7d5=E8Rycai|ez zx#KjAIgmFST{Ye-7}p-fDZ+~5$D?tjQWNDw4iiEAh=$>oTTfVg?%7)mqKO(KiQZ}w zF?$hPjbI0O`o<$SmWUApdrp9AA^5i-JfPoa6%*50at?m47;hnF^X)jarVSSY1uSRt zu=@G9xwmf82br6raBu{M#3(TonovLJ!WzKg{710p!ul!4aBMF0ljm2gllbjU(+^!h zXkV`fra!b;MX7gY<&1Q5_jdPu5>$}Xbp6T@+M%hQT<%$7;>kbLT-;t&yZ+n0BBX9d zTz^!InV*-zO~iS)H+sY-E=~uIESwswZj0|qWzFMbHKRu$8jroV9=`f`R{-V)LdY_r z@@``u#`7EAUB+Up6E02Ba;RPc@URNigC4SM{oYFT@AB4(?a9ImXTZTD!d1>}6Thk` zP^alf0;5mHbA34pgBBE?sUZ7|=b}gIz+Hqia@c5Tp)X!MWk%9tx#$mMXDB_%#RGH! zwk%zg2FEqb&9t4CNK!9z8V(0Es+@Vw9qZAP-}xq|#J5?xIY$eH>bKzLoLLsK#(Se*E}*-{e9PQxaEf%VT8R%70kA zwO>?MXAeXnfJ;Iatu!!%0j&Y^#dHKSse>Pc2&JAZ4)zxuuoUJwzuoa5Gxj$M^WVR$ zoNvqt)k!=y#`7b1!R1Crq%`yVR^kp3-4*=WO!?fg9I9V_%~z5d1^lhhOJE6PVdW7f z!*L7+b8NPgfWwtzIj>lJQ&m+3 zx8Wsg>-R>dfsExocTT~}>yw>&Ru9t1HMg~0R#tv$cRRm76R;I1-UKMb*$3l{@_zuc z=F1PKGUCrscJKY*L*OL`l zuYv;a-14UdfvM?fWH!$@p~a~BJZ?=(ESJ-e9acR>7OVC4i;Ly_zV?4_Rf z{cw;aghAwgJT_+9o1@<~3w~`s7tXMThXkZ_8SuP-B?tld8BVJM?v6^#Zg_l*4%og1 z-lGU`dBdue9Qb(e$wf?xh^o^|)9l6#_(A}2E1VUbh0R2okwaRJ+dP&IzF=fd(WK1F}^q&fy=f>JjF3XlgV zX{$iAy(}v;Km?aQ3^;tOy6Zmi>lISk#~nKpPi3{Bm&XsLOL;n1>Y;Oya;=`zhH8tg^}8Jy0`4TjPv$d(a0I|E@pk5 z1u36&X!W33NU8D0iEW0C6(4m{%qr^ok<}+2bT=^vCvHPSO_lFA!zRk;S!i*gZsm>v z<5-7%$SnwX@sTjtW}%ZD1M}u~c~9+f=V=NQ-%VU5=@}#XpqahfFpoqSmEt%#ji-3G z&>$)HwlOh zw-`DI2(Ybk_P}W;-Q~5(KykZ(*)%*gwcCd5l)5nBL>V1>tJo?K{6+{{S_@?7ZwfsW zD+S`Ia8xRpdg}ZHZb-HkG}DD&!(8Isg?0Vk{5`|tDCQ18`f;Go&ZDJqX1rgtPTg|0D|hAg)5CCpFgMJGx|hBFKDa-)cZR%``m93 zuZuUwO8T)ntiQkTZ+UHoPEpr|{FDd`^b+g<_!74H#+NSH@YZtqDOsTV2+mA9&exvQ z!OEWhS|z4!_)>(Q%&$I_LS~e+0oPtg9=eMY6BCfaG}dnt2+}&8Du+<%{_8{-3<6OD zN(iJf5j5-Vxbk~lX$BbQvv7EQC%7{P5kjV$ZEWAuwC*uaTn6#)H~-%-8^L%h7EI&Z zs0`n|pH^T4nCVJiDapcCoB??iXQhht83V!Q5~=Hg-n14^!!`zV7-S?v#&UD68v*S= z6C;{!N{j5>$Doo$osqxuk}-^(iUxWdHu6(Ifqwk>@k^nZ3ZF^U?ZmJZsaV5I96AAf z0b~5e$Zh%PKa*VdOKu^gz;7)LCgjR^-J#=h1ji;aR1DV8va9GNl9A_o5z+zMBX}1N zXucP>yqU&6Tygo2ogguLzUtRJF9N~AmPtKdRjcOGCh{ed$Z?9;ag~*VZYGc|1i$95 zDLI(OfyqHf_hm#z14}ypi0`)1GiKRA8x10FL%{cRe5m7urq~PU=lB6DF5SrB%Rh*X zBCT~8__FqNIhK{Gy*$J1Np6Ss)AU3>tAShVLd&=0>VGd(Lf{!Ttv;k70zVxqAK!76 z2qp#ax<1*FiT{ed{1la=hg1I)6b}_ej{*ZWIb@HH;^2$A-|O-swpngAO%C?Ha6s7WJvTo9{#AhLeYCLpNi0JHs3zfLLsB1pvXW711tNRgwS7p zN0aX?Nr1ddPOmn_^?Ts-zlS~_--2i(0}~~(h83G%uQCryj2!^ubww3NO)Vh7#BKO+ z7s&_!N3;}subu^o?<^-L;`#;YRDYVq(xJtI&LL4mTQ05;S@pIv929KCDP@3CFo*e)3}Bij8sQeZgnqNCIDo+G1nklpCLr{nZj zK^eT;_g>dJVd4hB368N?O;jf3N!h{r2FhI=0o*eU#|iNeh6@H?g#wq`bbb$?3ijrf zBLY^IM(QOXaiHcu$x8Pd%vHhl<=^%{#FIHF-m)6YjFhStbZA{t1#I?vRFP5sFNk9D zynX33#>Lqg(Ns3)`$$K9Ho}K~PTF8BP65lb^Mh;Q{a7~l?9WL%j4aHJe%7vmNyonj zSyxMefhM){UXtQ2|kYM}5riCcMs=0l?3Vw7J%w{6tM5Bjd$B>L3#%Z*#xr?K|KMbf537H3j+|1Vpn3 z${p#vyuij%-&R9Gxtj>X-zaFWL4RpLtoH?XF2kVxd!zUv-RFieA5?IX&*LdSL+Rz0 zMo``ufPzRf$wpClk*@Jar(S&_Z_-ui{07!*eOmtLu(kBZ5@s0T zFtls_nY$g52Ip&j)i09j{dLj^7P;k*OTV0#o0##^JnBBNPA%TF7~1-YU1s|m%o-D< zq@{IYAFjq>p%1+PHw!@A8T;*8(9qNC-}gR@^6q4Un-)%9#Cj#2RM}Cp*Qfq7@4W5_ zN*MHZwGRmpNe&^9TH8*ax?d^Q{^`LtQYGr{+}{fu2%h3QaNES(*EggfQIXuZIAUbH ze6%MA#*Gi?5NQ|XX||9G3dn8*u2RDEouX(51WhAT5?pB>xCmn%$E%+*7*RcSxLqAM z-xoNW?!KtwsDwdAZ9tVuk@5Vhq$@oG3{DwX?hB!lK`+(!&m`Yg3JAKdQ}e zJEy4g6q?8zCypJ9hF&)xz_+g6a*2(_si^6Ou$1=xv zds9P03v@Kj;Om%%hZ*qohtX7LP(0r2$aQykoI0uX;lC#R2B$rqHQZGI`Ie2H{bhHs z%W4Y7S9H4}j2_ZJ01P-VbzR)!18)M8SDM_6-_M)iRa>ZhxX{PD=Se#a@|ZG!Fl6Si z*kN=;TtJlyf#)Ey4>lr)tJ3R1(1H=r!f8;RefHOytorj#U)*24{NXl+3Rr2-q6kq4 z-hsXl(cM5Idpp*bos!=rAsJb8Ei|da66%6batCO1ruGUuUSLYIuC)@IDCsx8?Ckup zKK)PuVLh%oczLve@QO?Fm>X;Rlz>slAXx!88Q9knMLNWK0QU zhz3af<{In|8laDs2MlYYaxD>JdT1YA9lLYnSsk@3^iF_JlgHe^Hz|b#vVJ(ZQ19 zmkta&TY#nD+bse0LdlIDbi5ZjdQM_m<1a0Zt+!JEwYL z0Nja!IjeI0`t>-$bt5|eWCv%ae!tkeZxW7EEPcfRvJA>X7)!>(4+&XodE9= zNF|C;^eL#Q9spb?FzwQ!*Dmck|x^JG{gCkf?;9 zxx8KO*70&rL`7NoQcm9ltamZv(MFft4Uihk3ju_l;o*7z)sAP{VdGlFB&EDo``yCt zzO+vu?7>P0@66&NVf6)g>htxPkrzW@uf_o~B8UeWez6^?I2CX->o=PUlQ&kMKon0PlX21{$ZQXi&MtVYvL1rGk8~prm0NVmk<7W-Z$Tm-2fJ$n%yA&& zJjkFFSpI4=6do-yqs^L5K>JpY8KYgD-F+L1Fzi$Td~NWFr~s%Eh(Q&mkZO?|X26jD z>J=M|OuxVVW+5)FTqBjiYH(AQNzRYx_|wC<8T;;61n|~RAcwb#(?QArNrnx^7=U}< z0mTpIomou5>`~eTd5;RHcqA{`?}c!s0n1ex1m)-qOoAsRB_S%v65UhaY->z~GT?3* zjVcmFG}Xf8+c50!wb3DgTrjaXSVCIvzM_oWuLGl!a9t3DG9uxBS=fSkH|vCXt?B8J zqFFnvo1xj%>=EO~mg7Hy?8@x++^*Et%4<<&^bOkG8!W!>vDK$949Ng=#?8fno@LxG z7LraA_>i)?KU%brut-?26=VL!||2c>ThhvGX@S$z#Y}o%%C;{ zN^yi+eq0y7Qv#dO+|p7DvYVZsk*_{iN`Z*Y4e_31B6l zD!o+8tr-8kj3#y>_qH%5RM}c+LhHIJhyCZX3^)mladK)=_-w~A?u00YU7?|*qEvXl zm@LnGH`MLTS3ApPmIn-KHxixiX-KVX$0i19hpohlj@3JKuB0f7V(xYDbo*E2#EBH= zSHyDOZ}&gqU3sngH2~-9rw6%ysnRPI+Au`c`=ci-f2Z0=N9Q%Yv4;X!QI^uGU%pg; z)civ9o<_NUxPOf8ipyp61ly^p(&ao`eA2!SoRe7<-wg4Esb$Wm-W^Iv)UKPj_-llq@|(Z78KNk zToKbWc>_e6sf}G7W8=K1;L#o(0{8u!w{Pbm3D~+kx{n^pwaLRMM_+l}VW+`SvKXKH z;e+kQ^BCZdc~2gHpO>c*7Z+z&CE?|J8(uk?%K;x32S!Dd`uh6pmXrJ8K7}_~SvjyE zDkqqG9}Enr<>q}m+h27%Z-$5{{X+N5;!!2-_4ev%O;y$IXQxErDa4=_R01vE+SzHp`wNDIbHUkYyzW^C z*zp_mcyVBg1d?&#E=**7g@4*?WOOLrz2)XsI^wry7tSJA)p0^6zdr}Qd>-Vt9$32} zpOveEl^oTh`Ec4xcW(hb1JfniWGokNZ*6VmR?RqLiY?mc_-~h8_qWGp=MVX86R=Uf zE7m!$q-32a^m5u!<*;a9Yo&5-Pv)1fqlo#Z)g8H1u7tKXrb1RfCmr-q`Ij~`ucPFf zoYPaVU`i!GMwEUJ-=7qobVGA7934S4hB4ZM&Z%;FKAVETSWv}9HWR^J*f7l1-) z(xx(cTDB)HB`Y+P#KOYj2V9n!H`xEN4 zw6w^~FF3nin+he;BnhO*dST0b%W;nm(E?eP^-o_L<9x`@{sIag9CTp_GESwpq>)9q zJKHyoANKi#kN)WCVA(ca%(p=u#ByHWcW*e-SKU&u zcjn4{r=9Gu^%d=~FnRDR2}AJg-A1?`cR=vK6KOX7wOyZ2AnLW);bX$5(xh~yJhf)S zLN^b~oTN;2dVLn?@uoFJJgT}M+Mpw8xzhdf#ENB!H6ZISgI)sz(LJ@ z&)yHdxoMe3KiVsL(-)FFy?ysi74F1>4M{-icUDtKxxTTdl0ZUEpBz9= z7q1VGFZli{h5@p}_*t%d78dtGM$?FVg8vf5X4$P|#v9gDQc}Vo>s36mw~%&6&)H%4 zlP+*MgQa%K2+}w&ETAGfj6bNkj>ZcJ5xq zkCC!g0^{lsgp#sqbx?*c0jqth)HVt1vBkc7Zdod!-4B}Evxz7C>xoZGfDLKCi z2w@`yg+OpMe1P;VEvt43h5>a>ojT>U*{yQk_m?YNz;{7b3v2hiKmkn4-C(WD+TZsH zKP|1t0;EZg*_l8C9L4qz7p1sg^bgugMmA;M$W*=$W#q*Lr&r1mOg}cSIH3V5K{_&q z<1;@}Sq|eS`QXFLY6{H(58?uN6~2IPAqxiFOJz2s2ZmjHuHCBg!4Q%&e}K7uRk*p~ zTZhEx2cWrHR<@;Ojj@OC27j6J^ltawLqQCLAs;JSPGyzp`PRE=<2@dH}=l$s{R6CMQ0N}iZ%K@*$Y3(oSx@a@u967fObKl)CU%mxRES&AzNYDq7 zv)FH4lyja6e%EKRz#ULy0rQj^O%bPU2EfcbrAkXr&nqiy1U_DOk54=2AbO!!E&(AF z*)C{=W4mT;F!u~TdL8c0!ZFE#n;>zk$ib#h67d&Rd%qz^tb4toGOpL*q1Pk8(waZ_C-O>~9zrWsgJMS_u z^8)9N^q0GLuLgGZvw*8StAHaHB~MNW0vC3AfCe7rDjqN{cXw|3pkZ-j&8AI3!1miJ zV1vp)qNHk03upV`U%)ZttDDpPgQXo$_~vn+$kjI2Xvkon$I1h&THWrtpILPMP-L}{ z8?Y^5_xp`;kuZi}tnxppxF69a>UGb0NFgF&0GLPun1 z=u}|MrKPPc%E2;6PCapvxzE?%f79ko)|xo`j@g9UVR;*vIF6{y%y0PPeGBBK3h-`f9fsUC^V-NWH`hKd~yR7Uq&_FSmflvPY z{Os5NfTQTPQ(p9%XWROiI%Y)PW8DL6Y#=!vcxLJ|u)#e*gAG4a?M2Z7G(WPmbStp# zUA1b}lv%T0eX#)Up>kUTEd3uA?6|sG6j(z8i)$n&UgTRCumUIntcpQH#qf$u!~tki zu|@-sJQe_~AYVLgT4QT=0@$1bHpp*t6ivR(w0h@3y@V~yyTP>`C{O9UXR<4OC4ywe zmS&)Dj~+dWWFc~xfVI2>9;X7=@`lOHdIPrvLqlJ$sKb#npVTG*$AKoo>~myvv5wfs zdj^=1LDl-n+{UYS7J$Nc1~mGBLALYmJ77(|<8I#9_xI=Dahm`P;fS-mWsHkuZ$Og9 zQ+JRdp^$;WN`Xs(fuX^0%}=EC z1a2Z492SelF{r5}E+1 CjBD2b diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/af02_test_line_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/af02_test_line_line_touching.png index 13e7900021e4cc0f5615408ed85d4dd1cfe5062c..be3f58cedc875dc69ea9239b32184c8cc78e3091 100644 GIT binary patch literal 19204 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%0D`^vBf1pWJ{9^w zcm3b46uM7vUF-g~*nJFwgqA;&Pf{a~04*7&PoNq@jKK(250}FdnE!~-|M&RcufPTg Yhmxzs4Tr8dSTl@@qMAbX3F908AA;)}wEzGB literal 18508 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/af04_test_line_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/af04_test_line_line_touching.png index 2f58fcd64d6f825d6d4bf836112b107be89ec8af..b0900dd618fee181d9a8722457d3a085cb838af6 100644 GIT binary patch literal 19328 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 BK-mBQ diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag01_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag01_test_line_line_touching_at_start.png index 0ceb7a1c19a2655779623d3305340d170317e5ff..6d6c9546953e33d680f3cd45d440533fa7740f8c 100644 GIT binary patch literal 19629 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 R|AK)(=VTP5(@yK%{2#0oln literal 18904 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 PXG&a^70bAy{pf!IVxmww diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag02_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag02_test_line_line_touching_at_start.png index 7507abe28ecbae9b84d1305d83d9f1942a5ecfc9..b0eb3dfdda87a1766f58a65da66c3d7128a68c83 100644 GIT binary patch literal 19622 zcmdtKc{G)4_&&Z3NhL!nDMKk~Vu#FQp_EWbWGq55W*)XpBV{aQW;YlzM`hl&kRh2x zhHVV7&GWp!_p3Uk&gXN!Ykk-H{qeKbIcJ@1d*A1Mp8I+3>%Ok*ejl7uIkkD?&W$J( zYV&DD`3oo%r3VT{(Md}Kp9s~qeTDx}+nzXmkrsY1wAZ}g|2J4GUbaP{7_K7!P`r|f zGex0xqfW~ozvvV(M0B-l=*^xb&$4at3ZUBa{0b!#_3hgMowsNh*U3{yUp#z6s&l3} zIr&9ULT=;A(2Qx~XDuTO*FrgM9ce8Ev&3Y1YVL?LTN$}{?mRoebvT6D_AYhb)S{vI z8^HisfyX|fq)DyB!_#J4MjWk9pz{T1efBcaQZq8ak6=Wao`)Cw*zs=m;DVo$>!_{p zIsZwjXUNC=J5dVq^71~lr~~jz10Nb$+54B1061|IxGyl_-(6YuCEEsEvT;U0?p=~)CH|pgvz(3 z^-hEFaap}V+9)UT@@#o!WsKu!dsnKI)7Wm4Nc-(Yo(v|$9DDxD1TV#7Q;e^@>~<~A z4EJQTTJ9AQ36755w=gqY(Uxu7oa;Dx6PIgGy2O|BjqCB_$7NMjeec(EUK{WJAj;*iikQ)+*USt_@LL^$4cHvM`n7hnFIfx}2!xoKP^O~K0YVyL9E0KMm( z#gSZpJ-o|!sm#hF4k;IT3}Jb3R_*fTa_9a?$F@}a_v={BX=*yv39*Y>d-(YHs4*Yl zs#Aa!RLtZzYdn&YGnn9I_Qs?-_SrKJ4Slz#yR7nlrw%eXDsM9TSu0JlQu!(9SStUAJysR~N%>DXB4x2>N#JcE6cZfWQHJM*>v*sX3)ycFpmJRe!UjE{dnUKu4DcNW~5`c`|# z$A?ZpP%u6@IVL5AZ^;=}%Mfl=>b9KLbb_k)(cV*ji*0>1c_7&`NPplln zy3C8`&mVVjS-9!A-k(G2<5La2^2TIsXHs(J4xt+t?fAL4_@iN0MO>Xju| z=6br!Dl01+8XHey^i)*nU1x^GMo9knpr=n2jE#*G(S3PWi|%`Q22dOKC`7kfXX~&n*2NH(hpoovF-%RdsyLOKH~G1_xx38tG2`pd zd1Hk)J0`U|7PedEjnnk@_I8<#=1tObx=k_J_E-7NwMmR*-QiXW8uOG{x^*};Z{p&< z2VTW@^=P$Vyy2EP4_Ne^Zow9bd{ZqQ-ra4`j$O0}3k%DF5O$tvHla9xMw`HNXAvz& zvU>c+Dhj5Cngbs{-U541Nkv6v&USKg^0bmt&w80T3SVE}rG+NKeh6RRT_X26DOYgh zc~0zH5$A<-=L#$`i4JWoDOuecU8V;=8A4KU$EtUF~NK75!3C&PR%+WoY#@&3vF>Nt&5y*7yTF6R8_)w*~WAxEM; zi_FTn|LL=5uQeuJMizjnn!Jgqe1wlLHY;l`>z&)eKpdP8(XBP?vP}Gj?{BY@oNiD% zCM?`-lWl-!V|o-)Yl~9Y$H%_7;0AH~mAp(Kmli)@7Fv4X<%|ro`@-?#6fF7}e&oEs zxvz-1FVy2+rKa}B$t;^D1@GtDVhh*b$5$C47Kj9bwo=AA1FEWr}CNa@bZ< z49tB*6xH{0_2+;8^L+h(IGX=I{nIT^Wp~TExk=rU-QB1JDdQ1+9qPb&*rMD*LQh*- zS~SryO7j@$GfGMj%V~ONg44dx4Q4c0q_GY;COXh=UdO0OQ;KeE4zKW? z9A0~EbDCV@7G#61NjpzoW$C1N`CrP?;e*raEb=vb?ZJ#MbPl=PWlS~vDi2P;P~zj` z8$N%21OZFxh3uuc{u})>`46P&lbE-Kr0H~<-ZN^%?cv9XLCDRBmK%@(Zy<_hI8cc( z($>_}TuEp(5Pa2oA@hUr>sH?5e`H4bTZ$KNn3)aK$1%V$2FKh77ct$E(OETJUFDM} zX;k8T2{M;|8J!6nbBQk~&b_!ckN4QLY13Z=_%|$|LZNi=2##{b1rH~JU|b)J?AH=W zcyO^p0@+I9wi8=3?(^xGjajc=m0g5sJeL_`>0NmxQ~UPcfP($2L#`qIE}uynYlFpu z)hQQWcjSCRYAO#z5M=!e7cL-sm5FHpMWlH0YHoQ2B4BPAd+6}tzlJaWp?^{VmbriO zypE3f|GJJ4dS|{_+)2W_1r&Ad787e;J5algnlE0c6#y6_29Kc5AQRA@X@!f2=YYk5 z_<3)cNo|UH@=8;BoeqrfzwY(0SFIp4H1v-ES1Z`EEs}COJX^lq`g1P~<{1@DP2>ON zCRo-G-CT!IB-Vf5J%50-7u|N^d!@Cy?8I4*T@P4$nSrgZf5qYQmTeVr9+~FNe~p{_ zP>?D`@YARNc`JkYt=5*7DgXOTQk!-`u%|XvEKHOBUMz0Ao-Zw%zrq2cuKslGg-riM zr}s{AI8%ET!4bZxWm$+X_;B~jZG6Grd3ln5Z03VkdW0?8%06r8E1x;DF_1^K&wZue zy=B@Sq6+Y$+W`HutB|yG+?S^%CqD^J!A6$TH=Ex&_VMW-@l?i6T35UYSIshxeW()0 z99;3a&mJD==ETQd8<^tOypeGyF053hM3#N&N@s?>)Sf*QgbvQ}*pAG0m&0$2D-AwA zIk?o#LMRxW?HPBn7G=vKj(EM}6tkg*L%>oTU?}R8KL>=Yn^D*aGb_?UFp-DQp(-aw z#o^Cm8K#n<3crqd{`}UjqOD%pKce;N4IxShJSg!s-if5SCh~u}(T-W;Y znS*be;1IS9)6$cvZP8vaFO^esojGV%DZbewu55&u+x*TH9)@y zjvVpPEd3NJXnNzui&w7>U@C_l1OZ?sBqko@|t$MnEn0?DM?52)M=AbYs|y z<~Z9bvGpF)q^9~WUv{u4^R&j*?9@ooWD-#xCi2j>AJorvuxLB>&JlMBK6F&BnUTI% ztOgTdTI$DMK>lq4q}GpZ9Z+#MJAy{X0r(Z^zyzilmUhpsB5T7EpRVyzPOB#Ng2BNX z_Zc`<6cpCMPUW}SIPg%yqauj6r%nmIIW;j?B+?v5&nf-s;kLse!WKI>Y}jzKwxM0Z zqKB?X6}Inb40}&vU2d-EHoUDse<-Bp@hN6-ZX^7k1 z2+ls3>+-U)qmwJ4YZKY^a}YcLi@mcPCM!h*4T@<;@Uwa+eRtZ|jXwWznw`Ync^nwX z3MjVN9Z;D_7Ji2lr( zGjN@p2qaT*uO6+}QBMwB#-ck53s3y9zyG~JMGjIp(eQd`%gokK@!wO?k5d|UyyAMu z)gN3o=vE<_eamVtI)*y)1Wt9nLx%)D0~~3vh=;WQWjJW}Z&mJhD5bbQn>eD0eqOPf z*9{Qp;tfgh$smbzT3H!t5x*x-o@k;^!9czwU(`>Bh#fYfs|e^9GWCHKnO9XldQ}mz(I*82{fuIMK)|NZ_K8Dp09kTYDKK z@z)-_0w{7s$&eubVd7vXuXe^?<9>i7QzIjzKa%O+Xc2OAM0mK_|9+EyfFX9-<*!)# z1q{!rs~fGo&>z4M!Lk*-4*|r9YP_H%RJd-7!K#*G`D;HYR_o`#&${c@eOyN5leTUGUTv=Q+X zu4l4!E;q2W=juRR%*{7Vghk@$j-yvls#4Pp8)VS!Ijt22|Da^wk3fq&I>pfi%z#OK ztn%4VfqP=MeXk8m0hkUSHf^5SxPRpax5$z+v$x~>&F<~R#rnzDnr9wrqLY=1>nr4S zY%7I6MM;GtL=Fsa0_t{KDDN-Hh(zT`6#lr;PE=)>l&i3yN!7J4udmW^N=JBdxOlbW zT_;C!M@w8xlW$zVeg&#X)RU)A`L7mIyUYxg2dYXt*QHv(v3q+H-)=P8|NP67#Ifr^z$9=C129r3s-AbNakU>j%TKr{^n;?-w{d3Jook~|(obQ{ZWYc)S{BGydDI+>| z5K~fzYhSKcP*8xQVyxYDbbPFcK}}oRyQ0^i<*jMn#K*%H*yL)?P7`w5X)}hI`zgyq zIEhM0Ha4sKbgYFby17t^ODHNU_f|=aeuaG14yLLT2WCn<>1?yAh-)!%4G`G z3FCl-n>SUbWHF*P9+l8Dvh;2%>d;`=<*^#8@{b?8f#)df8Mp4b$MX2; z(+_+7B@2O4VHLPWduKgEA54-_SK+;DMn?RWZK9GK4E1rUJckc^LmeH5nW{ZS$1eUP zB7*Hwvet(e3f^TOKN<{uNjoMYGFfSb4Fo8I5Qfq#bA~pywg7$^t?<*^y;;!v;R^hQ zB{g5ZlmW$b>e8j{2$KLP<4u*g_t22Jp8K+W(2>h092|s!J&MlB2^+=E=E5Mx-B+r~ z&(qT%1FQ5nGO`kAltQT3vWGKTMf)Rc4;((+11qr)E^n5K4}w&8(w{>aE?+G*%VtGb z7QREX*#H7`s2v~fI+E=P1MK@0DyOE#JU>5=Tppoj0NMlw1{MKT)tv7pL0;}4BUgau zF72O0CLujN-DzpOwE6W_DwrW-2t4zaw+{da--XNVSBao4_*x!_Oe~O*(b3U&1*;_k z1*=5wz;!2!nN3 z>}ciT=C~RmQd^pyY~B~Vt4OZH@J90Fv*UNls;f;%jmfYX@1^$l^$7qX5jOtG2hr zsF7pfcNo$v@#o~Mo$B^Rr(Y|7+>-+!>^K&SjT2Um6n_d?83w^vOKlCui&wQO(A0p` z0j#QBxUeNZ>ha@3s4|ep08-muYD&2F1e|&TCRJ>(J?~Zbzl@E&58tXy)IbAX1UPwk%t;a!KFzptCrpSc@bnOV zNxHc~-h4S;z;MGsBo%u$^aKzJfcu^v)&SBDVRPVH`}Xg*L3V0LNLgQH_&{qWI=bp&^JxK4AL;d(e-VKMJft*7q3I^P}{H@O=V3#@pSnRv6bMQaA{NLb4o)#ql714dU=n4rj8X=U`NA1H?4 zcP0WP$XoWS=q((u%W#&O%8U-ELD>y4JGJI;dG8 z+PV^MeSP@3gz@v(HDyF(%SE8KBgAaER;*D@-=2GZYf9zpSRQd~H5Z>*xJ9)-M8c5| zDTwqJTbiuJBfozAItHQ93Hu7i*%D{Zscut*6R{C+pRZcy!x`4hy=XTyUA2ODoEy6e zbCX)fVH{Gb+g&TIdexq9Y zUdrV-36D6hiryR3A{VurT;EDKw9)Fp>HrwjnZ?!LVFykMN=;j>jwml(-E9&|t ztgJudQh|#LD#AKiJuGz-S66yX(Xde zH|cYdV%T{=p^)>WS6E6;;Y}tsrY0o3$jI2fd&yeQ(vpuckE$V6pCC-YRSb0AYBr&I ze>F9xMn>l7qPb3$AvqbNj)$p2c!eoalmB{7On|EN{Jy1gZ@j#=?R?;y02`z|&-voT ziveL_A7S)G4C^r4bU_v}Z_9dgv!~=HtSC}`!uA7Vqm;wdN6K}^8p>xa*OPK^G>8!G zn6U&-LPs^Q>f5m+U&4gUvLM;2&Y9^8-#~d=?x?6<$rkLERU|h=Ny4c3b_sPhl$?n> zqoT43e8j{;f%KPZtYBh#ut5swrZrTe!$PVC$U6Ef6D-)p){cyMF{}Lf{UCkyL7p?8 zoyCvjkeoVituJ(>RxR#l2$=k~bw9(>{!F)J7rq^BO~sLf8q;%`t!{0$UER&vR(Lp$ zptNQMj6U)MA_AeFa}Q2=V8>kxt3&w>PkP=b)VvR#p>t=%h>8ZxF;NLh_mkwz>D>1y zD=Vkzod{M^QbL5K#tN?u-ixc8u{Xf%3*WYCXyp6WR6-?x29~4O04A1w@dXN#GpnX% zh5I_~auBKN=*BwlFiiAtlE3I=epvoa69dWWrFi%RTI(>^7XM#tWb_>^SLFmJlWC#1 zNz(l7-PlzI`bF@qM+e?v(lpiBj$*!8s}Z5*2Q~9>W5qWcmAJrEw_&r`nVsf8A8^Lf zsO%t<%lW>UJW<;`(^2mWrJI1yF*1sYH}(J=A>cH2#g@2z_MbX)%hMWH!3>Q5NoLA( zE0?q5EpgSSZr)6TZ{wD}@|=wjt^IT0Ajr^z3>vSAmXnWGLo{4d1$%p;>FMb-z58B@ zaWx2+9qISh=}h`50|qrB=!RdvUQ?@N9Lkv6e)*qUBbDP_J@JAzC0fxdW1a6~bBLBA zz`s107RZSJI&|;eq6WP?l|SbUscC^0Y-;=*HaN4mJk*+5eNm9QV?%U&eEFIYu9j?Y zeuoUs%wquQhTNcmNMG;Cz$x5hag*?!Z%?280z;LMTKM)dNhe#Nv4W9lU~3KtBy|sg zIPHDw@#D6$;>p4BmYzk&k=oSQ11JGVZlCP6+pK z=f-;s@jiV0P%^8kio9#OV*BI9b#lNGyz!K!&6j;0gUmI;wHnh#QCgatANw^vL=WI! z6gW!pN?Ow*p>=fjjad_)TICpl>e)NXA7O|{7ptYZxm31-d~{?AVZ|lGym<@B2&$}& zo1qwwt7jdrrCSdqeb}IbcqCozv*NIyUVxp)$}S2PygL6<@$A_@ZhSLahl!JywZ`2e z-ZHpC0WeEaaBVM#Qzr!~e>&OfgA=!I#gFLR5}l?Gl<`*U54Sd|5v6hdNUeN>22wsG z&6>a01-NuIB9Id4=>iZClIz+U8m^_Z{&TUl1zoRjI^sIIO`QaSr;!|3L|A?b$qAc zf#CT=w}AD#WKI9AgFslFMLoT!cw-bq(2W}jzl|NlxYdQ0)w&TDZy8sA8pKUxwjpal zPCfct!F_+?tj=LG3 zJ%9cl78~+GfgiiXZ()l#4ipdTVa63e$uPvzF+Eaw4r&VgfHz}RSCBmF3K0!aaQyhK z)i@ogkMsX+{2Z{0f#PTbxTi*h^9Z}V@WF*ux2ns!=H)2{HP_9;KaU!1_w@3Ez(I3K zhcS8hJGcYy(lh?rZs3AiB?=;+Qe6Q^i%95k!n-$uL7{JHvf6)Iz@V_Z;`UF$ z>gyBdzEG2_zA!VC;_1^@y9)2Mxy=%X7h0mETqpWv$f3innUleUrF)~8ehCz8I)Upo zyBkyWJ4{I{0$Rc*CMIugd_I(6N&J{eShm1|iW@a%R$o`=1Yqe)hQ%(z+y^wGH&g5o zw>$9p^Jgdq92XW;!DYg?2aQI@n!y=$1PC9MM~JTOYlWerr5EWb@!h*;&vRY>ttF@UW2$5t<%YlgSvuY`)v#Tq=114UBzJ6ToLN>&}AUm3IA;7cSJ@Y-+iI zg(_^Eyd*91IV%M`_$z~SY!vlwOJoHalZl1I=$53!ooraA@{NO>yZUs8n$u=Du{z; zxgDWjnsgo6(fFw?Zi_RU_5JMysTmfLlVDM*y%Ad~_%jA$<9d7F33i93eXk;JFOw1qnVtaRd*KC(2ekUg1%iRqsrSzLUCsCje zoCPjn6ARzh{Kb(?9kmjW^AoM|R{FxNCICo{HK?gR3JyL6wJ#{RD1f5-mo6OEt?DmI za}m01))?`29*j^ulhrc)5*_pO&d$y{_Mg>dt&f@yi=6~MBlhjvCyS#59Ozz1g}dU& zZ?Tg3>C;(6B+a3LBZQeT5IbL?PXqVLlZ9EQ0x9Db&~VhCzyrw#p-r*-oUShMLE_Rz z=jqR~yCozTJ;=+d4h~}rgk*h!wDsa}CT^^C>-Oz5QBK_t=$Gq)b!<*|dZY8bZZzwE zJa}WJh;xO}X?eP-b-BVtGOFP224+g&4hLg!8#iy>d`m;mncEuNBOxg-6WL+wkAb-f z5fj;H5pMm|?wXIov=3Z^bsbon^jvxSaqiNv=m^{~@5qmglyIy|)JP4)y6Nh&o0^(} z`0+R_tYzI{zvqPI%_%vDL@D1*jjH7=O{ZG-K9wCyX+$vKN9+LPwsz-!_LQaB*--(0 zbC7B|Io+4|0n&&WbqMa9ZFfb(Id_WF?HGou^|tJ8k0#QGVTbU6e?TD$l8XWXyQ~Su zlED4S;sgERtSC2W(H^?%Bwb!M`m(C~sxtSSoaOAjE0gC+MDlL|tpcoQ>`FENs%rog ztn|{R1eg*C zGz@Q4QLnYAbuRI{yh8zWKRwy^b#IIRDz&yjssR zw?j4+Be}l|3*%Sw(|$?npn5zS(qHw?UJ7_Rvzs70>ZAy#E<&7=-6ULy19qSi7d0(f zYF8FJ9CP)4NULLazPM$N@L~fiVfF-}T8g9kCb|EMZn%n_R6|2s+u8HynSjsT%g@ix zhlrBE6ufxBWn2~Upnkx|J2t4PRcjH@ZJ}#qKma4l4=U&wDvAq=2SgF*a_0a-4k!h4 zV$M_Gw8o~}+H_9(?065vo7-PaMF62eqE*NoTHiKj(+Nn#FxpO@qRjvbqn)J z87Z05>o40irN%sdV1YTQ#BG&dz9Q#YNM@^W8}#XLeLmU*0_AwvePZ^87J@3sfnK@$ zue;(-bjJ@|TYPI+O20d+X}qo>%59_W8x;l$92arks<4B+GJ6@kaX<;LCIXS9#u4QB zhya!ZPF;eHa@-Jor^IMy&ets}u?tTf$5bNfc#-*+dZuN*;Aw|2jK66fm`tBg(gqy+93NHx_m!B$F)g(<<6ctuCs~ zemV?N4NZ06y{ZCw^YR2yb{R>Ngycl^Px^2*Qgmh&XL*;v1!K%*S0>lb%3cKS(- zbdI`{C4kdG=v4Lv_;G*?8^0ne?g&zVE@CCV}X+e}KHfausYBL%(cD!-27 zWpE{cWX*3({Czumc<;7TR{!(@A*0ehwZekd`{ce<>K-vgV&ITe1ltdst4yO^JDV`l zDLKn#I$v3n&7NTI0tJ>da?PF+P1Eg6{IU#)q_b+y zeX+%bwz)g8bXIZbYC>z5bqFTTqozVxb0{O@Cq&+J1?(=0`0SU{^gAS-UL%DP`{Zn| z?>a!mCr{pw$J2y=FR+yY5WCCSNJ{CG7P`stmcTavA~-8VrDIpC0GY644N#Qlp87ac znjdV@wy6Nfth4ru;PpCl2KhSJ^FW?iiz@-}BG$kO5MPSF*LbVt_|9FsOaTB)3xI$M z33gTA!>f=$Z|kxS2n{t&V7*Oz@ZiDz+~naOTtbFlX8A!waBaX{mF;thmdHjY8QF=! zboZvs}wRwcY{d^uMT7G|?671^yY+HY5b+)1EG=TYu z^B@fl{#IRpx{Y|2QW6sdKM&6?9z1+l@H5?eir0Tu?5l;7%j)p4V|O?aX$oqH->Pqu zsmi0Dhwa3{J}vZ_4k;|EBqz`QMq_*zh1W$qdIYi8Yr}6)?4^l*Ss?|$355YB$#48j zPS8K}3nJ?xitDkxC@`+BmQvt=7J;$xlyUx5wsJGl%46Pst?81B&7r!50@)xoY|j_B zsc+{4iH$S=@F+iurtgM!PuYEkj2Ui;K659p#OCPou>gpINe7Iqq^leGTls_pT66F% zinlL2JhHh<;*m8KK+W%n2~1;%9auJn?D)_JalkTe7^? zJIuVzzgDVqlTHfJ^d6ozQwQvxyY*`gILZOyBYSuS&l;_vs$4I(qUrC;2_VVAvrD-9n@Q8tenu z#|JtH?n%M$je`iY_qH1fLowji4Ss(1ohK4D4_W1jpjw4hq^6{J6X)^I!2&g&co`{e z_U=GzY^)}F&;BF%q)lIbP)$E9BP({J-$?+--4KtWOX?aL;lBp?)4Rs7vd2&~~8i0&2%-h2BNUgd(nNE!RMBHB9$j4LjRHA5Gw@uEN+dfdvbwvwvzkeO1}~gH z|6W}~7xDE1Uz3d0111FU*xz@1F6X&J(3p-uULG~XKXEYqSNXmTdGNA%4xS51|r~n&-mSN;6V%Z`zPnc@uuaEx$~ff;g?eH z46Y7nXkhB#c{^jM&7%@g2FnhjArnrAr{_!U;>xd@*bT(HsL&*5=gX>$6M559T9Wc6WgsgH$n)Sx%t2gAm^>LYUt?OLXLn ziHX6Gv^xxdNI0VT+5_=$yumH|0N;qH%?q=m)d1yOu`81}5Lye7NCaIh3;J5bFmp#| zJKSZE?gj+SmVr~S_Jsn{SkQ-`ZSMgVrVHF4CgA=A^S%un(B0!sPD5#>iqM4sHU=qV z-4KY_UHqWUrh*q~695bNxITGWUv^A>NC}OHbS?QF*#Mv~Bl2k$DJ3^+d8Rc!CB+yn zd+pk_u>vZFnl~n@h+_kKW8MQCMyM-fT;Lh#M@n+njzx~5`hyVF6+d}UP&t9kB%8dl*bD>}MCiI;J(q((B}p=3PTfT$ zMDzB%P^2{q(IKEkgSj)SBavsp`3A|wab6It?sZ`F$kVfGI|jzZ6P2s@dsWqgfXe$- zkWh6VOb4kJl-X@7{m1Xn0P?5?G6xXDCjIKlN~2;gCZs6~?4e`RKs!K|)PyPle!57I zs1U8Iw<7q|Qq9>Y$xx7#fi~LP$Zy+s7CK4}96Gd7-!_+sbbx^>`q10E2yr}w3K(rf zjS|SxQ2L@k#1_CV&3VN_mPE)kwkABx>BQuu#5+^i;=u2uBV9B5X{DbKCnn{T0X2ZI za5vS&*qHLY=VNUw7WfuU%-Hep#VO13s-7@ywPtH-51@$7gYFLHGAPraQ*3~=4FDB3 zK$0F_9P_%MXB@hv%6M>?6Gledt(jIP5VdS#Hg~}s(3qmD1Rp|2NHkywpaOxEf(vbqAp<@<2aq1N1Qe}eFg4(AL;B-j&R!)YeFcLD2Ks7H zh?WiZ3vkm`feH$3E5%*buYonn(?i2yoTQm{8$2i=eb0Y;>8}Z;Awqe9vIB$wVmk$@ zM8&{>3o(~SI1H^CZ-At^pr@x|VZn<$0MtjvgoJ9r>H_#=9;B~A_cX-CfHbv1a)f9R zlk|c@<^08qTUR>vNJ&Y(cn7YLzCL4EDnzE)C1UyYrN8ux^z<#MO-djuA%F`5R2=kM z96EFeHk%=sd!gnIjEYi$g9(X8V0MScs@2R0vwq9Yw^LVeOh{78-7h*WolUfaVD3p6 zkY9Xj+phv}y9n*LmEi|LfN&&=jw{+Pi@Fg0^D3MLOiii|>&Kurpd;g~O@!4iT>@)E zgqI8(io@mG9>g31d?B$XOv_9+(~{kLJMYGh@mrnPACkFz-Z!i3xJI{&<=`zVD_`oB zU^$AtZk)LoeiZ6^Fenwmq=Q=qMEw#4wd*+WwMaOQe2uWJx(Yd(jzcm8DaqmBW&_O* z^j26@$&n{tHL{_IznShf;Uw9$?2xT%(a)PV@ErC?_mC4c!H55~-!{u3fSlMrY$2g<0y%BK%^aGRQ z$fli=DIvnWZy!)tAB=)^OW^RChqDO!7Ojf)DZxqw+k@ir<;%p_feJl_WU03u&-D*; zgsIpOd&cFLp#F>vYSEIY8LW12v>f~g@PreKj>X;AC2s zX8GdotT)DOruM`Koggn2486H2HXU@8_yGz2EbBc$)*1o(w{_b#Cvaql^d2Xs+6?t5zkz$SVdn|foCBE-H4H(wYrbttt?3kFjh1AQdK=OQwln8bQ zx*KScH%1lPch9+aLF5f=a38KXx%o=%X2Stoi(t14sNP3%t{w^Y-8p778NF%vOWGZ1 z0aB4!wgXE26ErZgk+>gt*@+REg>E4B#3)IzrD~*y423A`(2zQGnjmeL8J##1h9G-M z^3o)d^6FJ2crn(`V>a&+KI*=*bcuik)-PF4KmFPU21)CQO#58(22^Y$5!WrHo~NB2 znA#ty{J!Qav*QW?cpzVI+IkKRCZ_hmKhgvJAG94^FAx1-9g#{U%?aK4!JEYvvNbM! z6mmJR&@3S$R_zBDqoAxI-a5mEN)S?|C*k+RaUZv>Fr?=0e){XD`ZK`fHl5 z%r_yEfMIZLdlaI3!_RMhzUMdKkD6$skFcjksPKSY?GG0;A`usNBkp3ah@CqZxeuj@ zu3J(E$K;oEBkzB;t?FF5Wc;5FStz3rDG_PC`qf1ATN})=8KsMmvx-k0hEs91GW^4v zy($Wti3I#82iIO`t%ixnX#aD=m|~m<_n}`+A**U9IH3M=zOU9?aHjt;=C!v%v>wlnUenPc}?_s>=+8PK6u zeziw^_Z@%w*{Y2+q=6F+PUn{}0O-YnHn57jdZI#NVyvD;Or&1B4Zq)d)eR3etABID z6IiUTUVZ-O;{I!&_>WptFO?;;)uOLq)w=()$qQPUqVGUXF<9Hy1;XeVkWg8+ZTqk0 zqUbwqmX1lmHNC5?W@$)&AGFYMpMhiu(jH=4fx{#zcrR=a_GgIm9cjC%-T1?6@mGu1 z98llTGKP@`0PmUXjBe*G91nV0s?-nUP-yak>6Zi#b;-W<#hmY_dRD0+e0JoFK-#|tT=eO z_z)W&XxHHHn`Ce!?deq8J!Sn0CJHk>Frc&(rMkh}5mf>DGuQ#cMXdUK1gpLUDc6j< z0iD+aP~jS&Xru{K0UCee!LAEEL!MyoQ)rtXTIH6(r3f-Z3E(`NHu8D9rdVcO1|g`| zJ!d5V0Ilj7&>G^yCiWQm>mI?kS(JHGGvCc5BpiaanQbf0exCb@6y`Eg)UZBm^Z*i> zNk+x;2*>CUCph=^vJ&FF01O2$3owgiU2#kWRr##_dP)l0Mc`<}T&4~H*K8d2exy2s zdH^w1^x7aDiin;4_qNDYYQl29mh$(#iu41(1Oo-ewP(*Qu#}gq4G)Cm11C4rcEc9iX77NS2@?F& z;Aiht_hnKZyip)c?@}=MK9H;mQ@H(zCLj+hI;?+oUz$9%CYx52Pv$)=rs3-b*Ka39v9Jm<+Q@SQ5#rRw3s<|q3DgM&*G z)DsZ^j^I*&cF|CWr|Id%mH+5VfY7<}IYAw13;@S0@TP^p5E$a~R5AgBuNHAtV*OxM z(KP^Z9vL@cF+B@@VenRKqT|)TUwITd3V`1FBtxE8McmU44jFp1El9`E@KLC$jX#Cl zY}4lW05BzpqI28{(W4OLf_Su%t_ZNb^6TmLhXT982+nX<5u}Q9hS_z7^0^0#GB-Cz zJc6HaGC0R}XP(B2fi0Gq;V>=W3Fn0RnR6EXU?Nd}`5{y?=}zMY0PO&w10%sZlH2Qq zG_1EkHxfN<{^qD{5S36(fx~$Zw0IccBUD77GzFERJcQrS0RMy!vFAc9H`hL!UkY;x zhIa4i$Ks!%p`HP>W68d%NF^|%%Pe&<%-7>qwvvoa)2;SV4{FoibK#8)11bb8ykW>| z1i+Ge^hU!gn4@~wdcI)s183;~F;~Q$yx1YOIP}I4pQJJkU3Bn92xEl&hPnv4A=C6O z#6iiy2GHvWRMm#SI!exe4Mg6QfoQ=1>ow7-YDlle5v{jgxg$B=oaDLEBl`IfoGW9V z`?$Gp)+>vAaB;4?w@P*s=+0L7Z->f@!)@xk!_b%az<0oN^F0a=R|4Cxy}doC#_qkb z;g$yQE`pm9)Iq_)lXp0mJhmOaWZhyK2i|IC61V*WRzc&tWLGHOJ3!`zX2{i7G{}%A zWel^@t9oV^5%ypXUQ4i{0L=ADP$+=SGnz)$aA=7T5^Z+rMe%c{$;$t>C!3d!` z4~U9dA!j<4=8N6mw8PU%{Z3ijHgV0I1*&3$y>urH_rAA$eDs*`oyuzgUU$p)?|-Zk zvSXi*`IEcHpAvJ`1=|`a(lMDIio@Z?23CBa^XDtj6WMNy z4tfM^B)riD89V^(`8fTjX<1nz&~Ib}!*HITFyaFW4|yL6d~ofJ;iK zqM`x}=cgP-+m}_zeUtE#7nzRH`K9?uoopL!=#8xe7fQ7MOlbt{RJgz==!mp|)>TR1 zsep8^hF75McRMB=Ns^<>$XY22!N;!Z!fWcBP0r5;$i|#7*IDwPSwuIxK8#dZ{NOs0y3=6$(L-f z+Wwp}Rc&o;$Z*(1t#>=Zn_=Lc9ejFuApoRx;J5>BFJ!9r%QfkBrMnXo6Ole&Y3x!+ zb93`)PLp~#Q@+AI;22k}R0t^PlXp~eG_jZBH4f*ioJ} z3!TF1MBmB>Be5eTebJfW{8Wrswbn$d$5rsBfyhU@s2EYt{3vKq=SsL4X)bGPS3vv2 zB@GQh_!;Oi5936uu=}3e)^SEzJe--R3>Q0XC1MzbDzsV%*1x^faZH#eCmjBTC+_f| zYgpp#be$bhw--S^&Dj+m*lt-uCyVkBpxKR*Wkqh~qg_B(huJg-97kwWR7$o`)0c>E zmV=h&DlWOKlhlmZ`e3yFez&{ItDo0>iI{RQLA_medj&P;>P%U- zyE4;5AMc|6=Y68*w~qlCl>qbfYi55<6s#!xA@td-{emThpqF+5YHW6bI^cL1`j({o zN?t;4npiEd0iI*ZLC_c_pg3uEMK90k{2zCuKz-Z+FTFCNlcfm_3tQ;5@&+{Xsk(aY zw8FeGW_nO`jvCDfD#E^>my%)7bUHoJXrb(h+fRflGw}I zGS6a)PP8G467^)fjRgW@H3q*=Equn0`Zd}$@$>(aul32idLnmSct=wLyl4z{T0uoV J<;0cS{|5`~+CKmQ literal 19422 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 G_x}gY#uBLj diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag03_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag03_test_line_line_touching_at_start.png index 02a2710103f18ba49a136ff406377dea09bbb5d7..c2edc4e9a1ac61cd21cbd8d7eb8fbf38392d1d7a 100644 GIT binary patch literal 20036 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 literal 21783 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�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 Cg-8_u diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ag04_test_line_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ag04_test_line_line_touching_at_start.png index 5263f14149c56bb4ebaa8930fb78a0892cfda953..be13d57920d57a91a44470a3e1b9a77ec4812585 100644 GIT binary patch literal 22838 zcmd_ScRbep`#*ddDHItYvk;X%vPVTEdz8I}?7e3Q5uvh4A`+79S+cScvQB$OR`$M+ zx4J%8*Y){6zW06q{<|M{k1MV?&-eL$zs7MqpU>lYyh4=}q)*{d;-OHeQ!+OtRZu8Q zKNJdM^aKw4*8 zv14QH!b_4eGBRNu{iXH{qJS4j1P8cZCGiQ(+#0$by6yN79cUgFN zxHludys=U2UiIPyeUi8@ZLhAYZu%xAJYIBkH02}lz2&-)u&}x(msAt1PKSn|F{rN6 zJ5Z^T`rJi(YLY-1O3}a15j1^Op8OHCq86K0l9KJ8jz-PP%j?ad z_N%UIIX&YEmU-6<49+3fobPp67zlz-v|K%ox_0ea9KUT!+k8)VH|lEo(`%?%bXj4W zF}r?sxHPRh_U4GMI1VALRgIFQB)0*qHJkLzOq`ZyY!Vt86qQv~omHN$fq{X~D=X3E z4CI`tEN*RAdU-v3>bPVjG}YC6XA6poiufYkVYHRCv>uY{dv)5lhlEUiJi0?#kJmEc=O5rxrA>($g~|+rnmIwL`p7*L5i9cFrBm zMhii; zx0-rrwbobdy=&AEezubFBvIKZ*l3e{YM0MY>Qx*hyAJz*FnD`5QNW&l*mFtL#Kc4+ zu@s-2-C&~O(IY*_Z*MfWX44~;G&DlqzU4&K4p(`uz|)OINz-DW0v|jWZ{eu1T0{Hp z&+Fe*RBX(YPfS4Hye>KU+Ku@%ED_fsXL3FpbjWc!uhRj?38g$dgf@Qk2P7m=$|drh zn(xg&jv^%^Gum1nQ_AUan@tOT6YKvSUB<)B&HXqwHW;3B-dH-E!oRlm>fVB_uY|Mn z6+O>|E66?xCZw}*2neYkavgcpA%2+Tig}*Cr0xu|Fl}r0k>^7`cwj&a?KbhKuh5K; zNg>I6wG^J>WoD)k?EI}p@dN+Ik598|zQfk7aH;>AA)71g#TGeK<10?7Ih^UMw4@DfsN$ay^xVJlUCNHXFgINFb^pPfIKB+-> za_X5=z3wO4l!vy_5#dG#`-L_!)PMSPj*pKl0O!=lGRK+av0%Cv@7@u^omZkWh=`ga zPMsrie|bqYa}=3!7%yZU&CZ&8ZH)y}2)n%b^`aRRF%c0F?t{O+!<&eRq73?e|M>sY z|BPm2iot#Q^eJb&oI~t&NC^v{a2_*W;^2_JdKLA#rDck}KKmpN*1LD_3^*w!+3W8~ zww~lHxmk9j^<+q5Vrw5Nno%mfb2|NExD>;?!or}>Y(}PjWjBy-SJ7yb2As!`er|GF zp+ez1b{$+>Ia`g7?natQ_USWcE~wcM@nE&GsUY9RrglV{Ifcy2B#U9R8SmHE_)atwQ-{i)Tjw5&P&)H#`t zy0vgOi(zcyGB3KmTZuiq{;JCm;^_4$GA^E4G(Ga|oQ(~)G1kp)1$sU1Ye!d*Ji0*W zua#o=*TPA>dNUd#6MXcG%1UYs3=D_Z3EpS;uXeV#ucaw9=|-rA#GN&;iE;>wJA0a+ zKi>Y>nGd>%{33b^$ z7jzv%TwFX28N)w^lAQBDQ_13YG#IO^tN+95Wh8PZx08~3@c-Zg>6b7GaB+$Lee13m zF^uSAa*~ph)iAKpA(gm{EG)ABJy9~mQ5;w?$;oX0-V^@?(HKKjvfpoC#LG|#1pxKG zJ({(+4E;~`Q3mOV6aPJ9N58s%AM@WAD8OK(r?-&0eftaq?-QuL5?eZClVoLG1Xy9% zmT<+|;}PV{^YrwXilXbJsMXKf*RNwb2_@IfFHudN-$AvpA%AR(|9v=<0iOI|V47K*>%DXLO zXs^|_XnkR3=Hr^0nsFlT@7lKB-|HF}x;c;-;wZ0f_f3ZQ>8-o4bS^)|!#Ykt`q%io zI>yh>%_#wTSRAU*ZroTL3bV|wA}c{V-~%qy_FibD^QF$O{CO*V@Yn^v+wu=Fab(82u3NpUrKWc<)_pRHOn(z@5gEGz=lMHo>gp1&x;~7I&~=Ecoj;Ng9&4AL}@u#{o-z<^7KzuLIs0Tkq9x z1VEkJrVnWGx`YHxl3$j)4l?P6XTzEHo_J!^Jh^;2$rFRCH}HCfnnsP7X)6V_m={I5 z)T57PsooE+SbnQ*X~BnprBPx-gIY}+-^hEBk&$8eF%Z|K?JGMD7U}M0y1Eu6scr?P zy*;Yq7%86ZF=>r5hYKk_JNFPwQKxNN)ss2%BsMl3R>4IU76}7`=K(BE0N{v%f`U%q z>8N2Sl^k#~%E4!ZC*fC%fw+PSmkn5v-cd6{ATb~vTSNWHW;Fz{M`G_*&^ZDHu z_S)jKsaW8HaKymQp4WEj+!E~8MXT6MiZK4YhYt=>THg-tbVL^O`OkmLt@{{+zpyck z6M#X*Z}aK?G5jAJ3Dz6+*|*q*V%JT}(vJFFb`IwyzAc39+%ZpAm# zSK8VkmG}Y|F5LLF_XlGfslu5mx8zOJrwRR>f7IJ@8*(Oy7n-dekK?GJmt8gEj8i{I z(Aq2r7u|ciZ9loz@sA>~rfQ5f6<6ZyCgOZafIc=)F z%dt+56MA}joRp9FVyQJM-MA1mwYBBOs$WeF11yw`@DPilfy|Baa-mr#Axoy*JNT$l zuWfEvuPr9;x`)wj(lgEGyf0qA#uG|zH|8$lQ;g-%M`8jX{F5=wlSJ_Y+=_6a+qZ9j zOT|}g>i$}KL3Mw-SY&vJ=gOOXJD;F7!;uGasD~^TQ9g4bMtO^iWXM|{?(e4M`Sz74 z+mR?~oT#hz=8T}3CyQqtSgkTUOF~0+Rk*pi`I?JM@%k#nwr~nAOh~R0*RJ_HivWv* z{rxFTB3Ma9#fT>I;X}YH*k8YXRl0rqE=^=;=rwcmi!MvU)~gaEDOIQ-c&wFDgodvKy_%0G37A)Y>X(Xn6j;7Mp{kW7Lx;fdEj$ zX+;N^x&T_gz1#9ks!UZ?l?(W5Y!f!h$HylmGEy4e0D$?;g#6uTZpFF>r?61eB5tR9 zdU|N1vWwi`b;l(o{oslp5K{DW&)BQ=$D)nN&Ru;1KeUfWt%}?}RSlQU>{V=eUbacYu{`+|}1&oi`_2%iuaT?w)Vt4K69uNU4 ziVNd=Q%){0Ha1q;#9|)Lz`=o=NipRl!hGFa+m7bZ+B(;{TG)9GW;sC%qtbXG(!A|~ zXWnY%nc7dE?l@9y{20S~j_O0y%NCessA#ZMOPHTVcv^)9Rsc%Xt z)e>K?BT&K9!6u+HFi}tbn!S75(>6jrxmlvofTh&%k}}5dK^_VvqVD59Pj4vkIpe&% zZa91@DX~TNk|eyj*|jAbNUL=5OKBC)2W$ho8o3UO0~G6FFdjb32%niv-rly@BL+T zs-4BN)Kt0$1T+?_`Y>Qb)YRdy%8I{VVU;~N6?-6>tnjKXf=2i^q7=Qd`Mv8Em&cm< zOY1%IZ>^CHw=t5ftA`nCk55QXj@M|)7I+;x#J_%DGu7gMx5aOEiYKjaL-0#Z>;jg@ z=JW*v>^k{#k_(f~v5n>tNQm2z+}_?sWDT*MSqALm#~JLGZ{HMmrmY~{3&b^++Fw#Q zhdWzXL*25$hJ_LlUv!VpS)`C%E%6duMmwT7N#eM$cDmI}exO6Mnq$(YldlE>&PJhN zZel91>FI+z&3QH6nc(tS_4xrw`zDm9a+&kB?dkW-@)SM%O&)!{U)Rb!N%~5+cj=zu zW!g_DIjzv=(eOvKrTQUIHAko}NKoZM7C!B~f%L}rPqw%1J0>#vV&7VgaF+-%zh!IF zmo3YA{hHH$TylN}R`w?#(_AJ^r_sKL`_`}1K)C=4piyXg3Wd-C)l9j2z7!58I<|0` z9q3_)|AjCY78Q~N{7Xv(T2sa8Y%5o!!Xm9N6;|Y87n@Dxm!U0t^XiiXL6FnRB||Wa zimECRG4cJ?nU0d|h*v2dc%kcg!V~~Y5kU%eF=!<=+7u2Hd62XJfvg8f9DIK^GXuh@ z1xaXdd}1KFU-u5?VAo#J6HkygO1GyIG2)i6uedJifWCo3L4MWFWng1F1&{Hqf>{$` z;EDXUHpY|=j0musR7P&xEX5tCC6=QRR^4f8YOB~@=XItpdNX?vO*A=h2;yv=J*HdF zqMf?rDMUSZHxLlYJ~WPG#Nj6^5h%{PTo6f zA0D1zp&V++PuE$udn?NCWnQG^H2GA=gaw7LT%>%Ee)$VPtuKXzM7^vDVv@2rzGF;&ea~BT0 ze||>Pb3-y!%o~wiKz(B1} z!8;=b8@m_cLl`e|aPVVrK8=lS(S4|T_K{TAR7hmE zjUV?0imkOPQdzF7%I@lMj~#wk`&u14u%EK=^Q$Zqi2*m8{_w#}@skS0R57N24+h-v za+xr*2{zT+rZKQ7&XAKQeyppLhs?&8Ea=!kN=G*`?pe9~5kIphM_pU|5Rj5Q|A?34 zZrFv23A}U4!k~85c62B%awpwFf?7okAT9<*M(l!ug6I^E3x#MFe~udT%F~)@hsd)$ zIG~m^WGSa}dTrTBN=q9zJwA^JE}KKHV^dQ>g=QVayAIdx-MhyZ8+-n2^N@eE=Vdmw zEAZ^ko_&UA*RA&IfA78Pf(!uAaA4k6+*~CUlVZ+uPcA_=1Mp<_Ixp|p8YN8|YvU~g z={pCkTA#f^hwKU<6zdyb9q~Q%?o!wH?#bJv7Wb+AjzAX=0zn*gAmdGJAiCngXdpMZ z+{QoBbSJn_9W&WJI1(g2le>3|w&LL7O6ISyT)zC)ZN(_@6cZ!e(TaWMbGYxS194cR z#-|FMA&`sfG`%ncYNL5?FaC)WwXN|y3p)vnkjr1V{CuKqQWT5?IhWg%k8prC9Emh9 zUouuyW{PqPm*YA~uFlLk%15Mw0>M-kc5YJ@1Uf%Il$x4a?Z}A!qC?2d(}1=N4Glr0 zs|TdsnITJFCTn4`eK4g_Y^FQdM>U`o3_*{oAtgO2P~{f~@lAXBJoj1Qk_@={K!0`}d;Kfo;jK)&veM#M(<=BEIs$(VnC;5O7Y`Ds1c<0@+CIH zukbl4{YFO(%4Fx>N>v1$!U2Tyyp&?L6N`cer{yqh{4<^4F@FEYj6hb~J34;z>}NbB zQt8*++yn?{gaQ#&k-+vK>1o+P!{gkRCDhIu#`w5jnWKNHfExDthp4;y0=e6cL1j$a zZ{gl0hmR#iMVC8&}PnTA$;(eH>Y9Pp zagSzje8-lBP`z=M(S#ic`G{TKU8+gX$~pnSTJq-26Hq~zVsAb;iG$wxu*r#G?lzrF z%ycykMe9QW2~R0|GV3w+2T&gAqjdrG+mw#sR37Zi&kmO4oALSjZ70?6m{DHwy~6}J z)7*zT3JV!%xLImqV*1~c`vVPv{uXGp;fDvCH45JPwaxKiVGFyZ1gF*rvKqNL#9?`uAx_t4m-)bO1Wd^!Uvi*59&?eyLY=_p5pVw>xlhZ?!-q%^vHs2N?PR~` ztBcbj$idIc%PI3~4upWa;zP0vuGW`L66(EtW_e?9`f%tuF7N(QP41ys-5uf9If;+IrrlzLa&U9&nT0rXJ-!6rE)7PDHvM@5XkFRg% zFy3`EA-OoWDGK&U2}X97-${S1g{?4I2ZlAkfr&)6vmEh% zH|M21Nh8!fJ)i2ca|r-IC@8mb@!ZEG9-O@Pdi~bQL;>hGQu_1#h0Lhuuo~k; zJ^6eNw$0{yp?I|5P(tFF_xH-G(z6Az%A<<*I3ewCvFcg0c6z75*OxLd;iOPyn|geT z?$j};s)9`O?a@iNr9vO;rQs@oo#tyvARW!O_kyg3gopnA{x1+`Zr;4AtQ^%gk&}~S zzwtv8H7(Iz;j-`%Xs0!8dha~c&@5Kt&PzOil)bZd57z3y`GWm~tI9w%!-M@~h+C!@ zZd8Q7Y&N+rBNO^dfOGY9oOcpJ7J<61^V6>UQ$qi{3^W=keo*VZITQ@Z{UwM&{qOEB z|NMEsq=X*|tHEEts(`kBR6pB(NY0`6Y3+NLvby?l*w&hbriMFf-%)UC_5-AgktbLJqMB7zprU+sH2FkQ8AqYNCvnI3a`(xOR5U*PkuH-21`|fn5 z+CfE(X{6%7a8ci9JEOVLYN-6oCfZT4!m;QkT7-m# ze*Z$C9R?s_>=FO)TZtRRkh-k%RLvEwFl8^7cFJHcOr2DWJc@X{O1&FK2E$e-w z836UY38?Ma+udc;F11UWoDuTK0~MT*gM%ZulJDGpQtdN`-kJ(L)DLtSi9|3#{p0fz z300-VH++1=0QnQ0ITM6PoBF={SN=nj9K9zsDiM|26N4m_4feRc_xc%H&mUZF?(Rp` zh3MrU?n|SvKe7D%{Yz(3JfHVi5Yf>^0)9USkQP2)+T7f{u%ilOAvq=zDB9XDq6Kw) z_t!68yof>}1Wn_u0ftm0?NHiI*2FJu`wxAqA_HyKk#fVzinaP+$I@x8yLll|Trqxr zBM-ayZ?1$&PxmNvzw2rv)Y68TF6NdyU?2!Lb; zkeq(+-nJ>ecsWiWr-F`5)%zRT%<3}~DZIT4_b?M%hL#sELwXl*oIYt&{+$Wr9Ln9z zCEKEiu2+i2eQymZxJ^zBdvEH_yFq00*;|puZEhMa#SIJz8IXj{2=)K1(E!4?rfrmE zEor7sPR2LuDsn)5OA>J>Mzqyy*D#pm;{1}5sIz+7N=^gJz7jzv9s!t}1{h84OPQE2 zWsYX^G|D%9kRnW$JW`Ig87d#!na_`{Ahoz5olyJ0RsB1}3|RbF5L?!kM(9AqxX8{f zrJg~>7lG0;^r@vhZtDSFY5_YG)cIgO>iY}L?0asjrvcCcUFDHp3H%S#dQh!1 zVYI?7Cn296Lmh2XUA3FEpbE>d@)MFTFpY!4*hBJM^bvyPi?Cb@nI<^iFy_{*VV?y$Gfd{N~ft^ zhW`pIdM?jz2mU5O+ac@u{F=FXRg`tXguyj6;(Po1L?k3#lWlE@>HkBu?HL+2qq4Fx zGE*jbt@a|`d5K!MycF_V2PKYf_Co|-hl7F?;l)(fSY6c%+{S{)AIHasLIBsa4RD?P zavqA%FFSWHFfon87z=o;U5ua>G;-{H3MvU1sPMrIMk>Pg$CQ*H)Hgtk>8$bf18gOxaicqbb2T&Aa)vN5AP&jX=ZiPB_cN@RmsQ%#@ zjVg~T$O;Aab-(MoQylL-Vt}C-;JhhoIWO$)gI;YCrV0_2-ns5iiBiuSaVvg7hDg^v ztLeG&2GWapU!MS>I)4ynM=pYm?3cbucOG`V$`D|Ba0U9ax7F0HzUmswh}HWDp{Ntq zZJ8{+Fc*b<)1LS8;egm+n5#Acss@p&>po1zmtvYT;{<$|wwM9g?ef#t{q~U499QI@ z-a3|{(*MJ)&QX<>d6-YcsuNur8%qvCCCJLoamCC_kU0*k1 z2D|kj6(lQ|wW(=p;*Ng4VW@i{=6af+R<4apW%}w%waY{x=+{7QIp!PeomlM{hI`fi2HRJ~rv_>xEW!755%G1pnVU(7&(9?qu*{DiR`WAs zV`CItM%Vz8OskI5qackM0hADMnmv8%)~z=auo59dU)9p0g!1#72`(-!gt9{Q$=b&p zw6W2Ni2%rri9(rj@%O=u0iZ{#5o9w&oQL%I^3^NtMnpvk4?hX~+i-tpy>zu*xWK3$ z4-pU6W;^-f`K$*5*|dv!KPM+8g%dGImC7+ear0ASWBS{-r_Y`}`)%d%N)R!@$CM4zeBCW7re3$9~ljjDE||ZBvA3K~>9Dr|(}cFfubUKoJn?6d;(ht-geW z3=ai@6n}YdZiT6ZjR+(y5UUaC62xVseh0UXe z9M*`ZU!htoOJVWD9L0N{3>6ZlnzRHe+eI>=wnv`s?#^y#2l>qD1}fU|9DUEa-oiaU zpbDCF6A$Al=VnDTeLAyy=9uQ~8|88zXn<%-t{r#4o>@nTUvp2c71U78bADg4{(#T~$Q{S0Rqs zk9|BgIXQU_%EL%fM6F&hB$%>L*73m=#jG$e88OJ)!+ii1R(c04joY`6!TOEd4SpdA z76TD}S6B?}I;DQ?$-?QbOT){Xn!r!7AQVT6?OcSYqO7Fk2fFNMUE;EHi2g;Z0D%l_ zU9c2BrHFc#j@1P~K$1(~#iio2LZS4QA`@zvInD4h=Zaf`Rd$=gEaP^9*WJ5+)i^lFxQQO z_3@+r;Z83fzwcs-HlAWrB}5juDdRG@2{!Wz zIK{@`FG86TDkCquKL{h|pcfOPy>Q{eMOM~H9o35EilC4tiM^FZItqRp>SF7`2QdAG z=a=oEqzo&d5ms|!S*FW`>q!}-GK)%c^+@%Lq#t#!=))@XoUR6VidZ2R21{gpPPw)Y zDK9?L%;_-#P=%05Ev$i;DDKq)<%-|O@h#M6ZsS#I78IocnkHa4JXA;fF0 zJG-yKHGjxybYc509BfUNjld!P%5qHu-beIp|bA1GBf}Bun>-iAj z?zfp+Wy$qD+%;R{VMs)UIuG@ZSl+Y5q%dR*!#wxbdpmQ~IlwG@6B!;PzSvf8<8+Aa zvhq@%BHWFZSV813_PNRCn42;(A3%mA1UOz{i+QeBSy%TF6wVP(*z@Opy;BUq6Rs38 zM%z=2100wB@ZUTZ-$WeFHfRB>{&&ZKtJ-U=GP~LcmR_F*5jP!l@4h0-*seLdAT%T0 zUkkB7Ayw=VJhCy=ZwW+aA}2F?ED%L%6t=>QcT#h9-$o1~)QUMw{+hO?SVSkN^}`Tw zU8Me&ufMc5t@vsC8P6(|W1>=0A|T%j?pGbTO^^T!&Y!>RJ&!py0kTK1>y{fVkA48D z6Q5{CJEAp~UH3Y;WD%l_)WK(a^HaNq2d{rB%Va^QP}4Ce3_S-A07SN{kf9*>oU(=_QRSuqz)v8< z_)yAKIhxR<#9at$AA!y;gNH+4uS$zy+)J1ROg8nZilRaHx-!!M*Z|{op4}~yI=Zc2 zqU?)^E^}VD?-{YnsfT;P;?lJ3CfsA?^LY|bl?SgPlqq3RG71#$GluHrmw;EQN-q+u zut&Z%zX``)@B=^$0)Du>vSQ!ldGkDcEJLAQek1I*#|a5@+-<3dxoDXhd}r_MSO+lQ z{UMDA@NGh#GvuX2N?=9@d)uIMyxaA>c>ylMjof>8wkl#XsDz;D;=3Pl+CJ|)9wN>O zMuCh7<5&RZaKr^OaU(?({qAlHqI?@e<^cz$NdU5FNpf|{h^su-KUQrHvmoh+oL%Rt ziVAUx=b|8#a&(I4g@~^N9|vl0~PeQal9ME7O&w@cu zurFKn6(_h@5L4_s{kfnl!M~>QFE7iF#9i?5BD|z}YaCx#ZCZoAy`+lUvPcW<(86}{ z(xnezdY}CHYfOI^4Rmhb{^kDMXod{MY5wKhlc!I|CL+aM!cNg0y}cum9}M2hSb61h zmxXU5*Sw-TmcX2Ln#kR6(5B+l@bGX*c=(eFQitb&rXg#N`yZ#R1!4C~iLE{m7>hGt zn5P$JVP*XU)3pMdD&6<+0D3eY0{}XmdnXK%vW|1lZDePHnYais86x@u;PxYZ;hd=J zojYU=5j0^SMvccPirFhUN5J}YWn6`#U;xzbj6i52$Z9P(vSC$#j0QW~VgQmsh@#jw z_F%EKW0>Q?O-lGEcms)|$O?A3)Aw-|SI6@f_%@j5WxzAnCanwxoF9D!5=R?iAQjo+ zkddL*M6j_iI8zLRwmLN23OPMAG!!AaP{u?TZ<8Qv3gE~BMb;#u-?X;M zIW405Kin2ffp?~~LR3bq{{VZCGK9v{37Bt_21n2&1`q)e9P^!*2q6$aW%m<2WGJxp z!MjV#*Jxh#Sa5-MfcWo_n&lLGaFzr_bjfZU1Q|VJ)imPC>@@%KN|6ryO=OXx8*ziQ z8yUs!8~tYXATk2ilUP&<5eol@%~dB$R!4(9X>Mj_=H2Gzdwwv6K5{%f*j<7>bX`Lu zZk-FUzbT}MgaYaIkXvOQ_bPc-_U6q=1gwG;FYQjw(De0=Tq5N8X>-n5F#qiWP@kx&zcg5zq^pe5JImn!X)8fnYX3(&^8i4wKW<9y;la<2o^C3BjZJ zXPw{5u?7?u0sC=m)as2Ca3F<&xJd!VAKKo%P=OJ)y9cmPM}cG_eu{|%aiW=oJfzE^ z`=OZk&S)re3d&&kWOQ6y2(*$k>zomchM@39vk>V$0A<5?_Dh;WtfUEW{Lm0BFf-kk zrt>BRzE=l<&KjcZfcm!X*8I^hRU7m(j&zlLf{w&IUZqfz+u1+@)pY3fk8orKxUOL zi%u-vBbphEE(2o+R7Ipg;9h|w^;!2>9TJj)%#y3*tcxvs*%Lc@^YtUYd{KfH4i3bY zFL%2v7`8mrN}F{bsD{R!MM34|dG9=;CLx_b;P{8E+Xx>$2AmrNe2GP3n(Lpo^Rlx) z#OnKmj*lB1Wh4i16qGSR_07eIlfr+jE_uouz`pGsG?9nWajk)*DdpNasm`y6`H;isfLypC?T-NXJ@ZO zw1eXSxYA`14Gju+yOMdpQU|)*O(CPq*<;uGh!x3`CVbWKGiTAl`cI0Xj**6?|M+v$dc7H4LH0W2Y$0xDA! zyymCz@bHvWRRf^(HE05gDoL?b|JRGIFbY!P6k`tYc=-5GGcu$h#Kpb$1lRmf1SHIp zC_C7-;CA(t%=|XptYQohqY;d1BH$;7NW_moAAoJVl#d3@;HMXunLTxwp09|2Qv_M; zU%<~EFW1!3;kpZA2XjltBUbUjl*b@2n1H>o1LHl3>w)YR#GA%E-3rL`4?*za-zLAK z%HoHGbMh*HA+WsYu*Wc{qg)pTE_CCK0>lSlf^`yav?+?g{$S7D3xXkEEQWor9NVK_ zeT?_5B_~+?pv2||`H>5(9w6aSfGn}VbA{SAZv&hy$QyJpNJ-UE3s8N!vVE!t?dC`x zX>EgUY00UZ0A;l^bPmw$IhP-O{_o%Ot^t?nAE2sEnL6Iu($ca+q2Ap66@(O69M^L1 zfL_M087XXPVU7N}2Kq&R_xvIVTL%ahK}x=0)B+k|m2maQ%mtdJqGG znwoCTyIs9{HF5Ejrk-8|$l+-a+M)gs!P=9d!Pn}vG(2R?zS~I&k)*h+<@0BdvqlRx z19CgMW-8#7P!#@frB??F)MN-DbrU@N(%sNxa+bV%t|tfNH~+pq4dfR)`l?i-2}Xj< z=?7(J=|S;?HmP4;he0$1R@ij)P`ix+U604Cy-7Ev&h4j{I?!$~Tfkh=ef;$B0Zy_$x61YeJT=ItsRIk48LT65?q&4D5c;SL{ z33fuw36wdB^iJSyMgEWhkmf^J4tr1mutJB{0w;U7x6V4C-wA;P0{9W=_~Nw)_KhDy z6}`rZR~3_%1RbXhKyU(gx5dx-l(;fBN$Bc8R07~*p?L?3qa!}M@>y+4i!bu>2%xSe z3H%T?mp`a*O}fNUEu&yeFe)Q3*vGedSZmHpFD|Zs1T?fdtTl1>=JgNppaKW6lv#b2 zB87VdkUiq^2B#31_mjw=VAG7&Lx$kUp-|xmJz_@|zvtFv0RaI8UfT{{K-@v~Tn?%G z0PlwZx&eFW&Kr%+Ib+caj-H_jNRtpTk@FX5di!25gI!Jqa0nqiK&PRQH2Q$>g(*Nn z`nhw8BNXH8AQlsokRXokS`+RMgM-?O(IGlyzmXYeioXWw0DUU47LC?94tKpMG6Dv! z2H*i^FJHcVZ|RsIY_@np8Jb4^!nC~biAZe`Kp7+A6DeyUx)0L<8ZxKnhLs2~A7rtT z{hO`6oFRaYQOFm#zy^`B^8&%~iV3g7{UzT<$omff72fiw7B($Dj(phBEw^w_@=38Ci;SVIOGi|Nmz|k>jKt7 z6C-z#tu_FCGAh}UZf>Q&7y(B~2JVmEe7YlaetSkBPYju8sOtMSn|y@eyzuVz+*~}( z4P-AtYY?t021(Hf#Jy!??;>P$%pjC?MvWGF0H9q58LZ-eQ&Rz^5~%b-C+XZ*DhVCu zY7S@w1&oCTCxd|9sGn}4xO&?U^FLM+J|5oDN~+~5yM6f#cnl}Lx}LPJ-v%)RvBEA^ zZR)iG0f7AA;_a>8`s3uU_ex4Cd>U*h8iBeXVsr-gBNziiL~szO&zv)YE%vjC0othE z0p8GapE`qf?$w24FykI0>GEkFkrS3MBf`Uf)!iGB2}ZgjFN4L+enJZIw7H1CzZ8_y zS_0lk;IYbxwnOW2B3angrO&hMmZ=%Z73jnIEro2vJbvs4$Ys^2b6p3V)w0i6KNv@f zHXJI3Q2Rma&42fhjH1!0-W%~PNhB9Hy?`DeWelXL0F=LYHyeF@~Z3_R$Xj$Ac9*$%Ha+e>xqb=6Mr+(0UFx~XhlN6 zjzf#YOdv&*?4eER_9Q1j5djStp#wf!W5=N%1U4BJXfaPJSc7x2vaUkC7F2>jB&>k< zF7T-B4yrn^qW<8RO|ilkFP?x(Y9n-_h68GNMMvvqb@s{ zVp$e)6j6?566h@PkzcB}Y3MC3w6YQSDuVCoyHnPiH=mFeRp=KuCnAD2TOYKUx+2=BJB!{gDg+YSxc~osG|6o8)r&p#g9i14JOZ?>)EF zlP#rT7aXlPSxBZ^V5tN%j4KqWDkd8qBStxB)B-6t37v6T84KY!XsBmXgiEEXa*z!r zKvdX+iig``*~~If7o>s)WJvOq9WsKD!lCOJoUIJ!&Rtz}NNR8xQ-iq&rJ}6G9uH8# z;?uztDhZ*43WPK?Jd)7Wr2(>dsf@tP;Z<2NGZKlx-a63ylwE&}6;WN8UF#m5XI4m> z{W9;&=n76jq(wbfyTm06$ILOdte9Wfkp!aV%}GxT<_i~&yqA8vQ!omMa~i~{%iGQ` zry(fCiTjFyuOlix{`*%dF-nJ$vSRXIai5-^5IP2|L^l@!R=Um!`U9r;1XVxXpWGah z-4sYr=4Zh3h!nr=pawMG z>nub=OicXNVG5d+EguEE&tn}^MPs1<$XpEUDKLVxDx^_!e76J4K(u5rXAfQUOga5x= z%qgizum(dv_=7e4!J45>c%14a4sw9PQspXv&-N5~_qT835HIV6mns9EJRt=+3JVbr zl~q+IxOyX2*UD@nj-t@>=ZI|p@fs~vZ9=i~bW}K)pr)i|u%E@o)`33}Xb|WF8s$!x zXnptWsRbRdK_+VeDDl>MkZ)^e=d+F|kxYG|_^~Ts>yk?m(Ol#XxoP_B(Rt95p{WX~ z^#p_6Cml3r1g)92Cxy}oyMPg#4oCv(%cNj{> zAKl8huaa%$qVuY&zcTgi%$+)XH$Hx_0vv#^6Ic`KDmbgbvSl3u+PZw-ySuXKXlTy?S3_XS-OH@3P(*&^teHykiKhiF9irCBCmLE+C(-_hOU}K${{KnD4PDDp~9chz5-*L)NIk!mv?fa zo<5yYj@L?f1wtgycx~Te(et2eAYKYRoCXE-cD@uGvH%enIU9p-A~zSM=e^z|02>RO z%D}wS?-)WO8Duwvf+doS4k3mCxKJ=0lY$hTjw=4(`2eN>PF08=-^^oQf?ojC5g^E# zGujy{?nlxAnBpNpLl_5?3v$VNV`7f(t1c)geAy{nzy%jepNkIY0Z(uBO!BKaPPFNI z6_(kz%;`usu!)bhRoT|fbmv!%^|Fc^touIJxuohiL6gj!tPl+Tj5Uy!nmy25s+Pds zi5ny7q(QoruYy&>Rs^O=YEchTQ15@n9T^EqT1%#?M9!#`olgp+cK9Ihf1MW*(P{V$6sxHdI_~BG(n;y)B(1L^ znjy*#4vj&aBDrEC4hM;^bWRlK!r*~~@w*Z0?}HfNxC30Iu@&0T-3XB4Q0^!cO8)C* zKuQaKV3L913&IkZOOFEAKhHG)h3L<7gQ7LqTl>*L8KO`Bpd5dk%kYLbT*{L$P0CyM{$lz=~4?Gb+BQ8f&3Xw5?upzy`t z4GRA`X#yd%{{^!DI3WPRH}v$xCz13`PyYd_T0k)rs{VtS~&35FyMBHaiL_1Dtw(Be1yV3$9Xj(QqIom*{sWWAM3VDz_HUPR4oDiITXt8 zEP?;ICvr^bPC~hhi#8c5*;$R3;y(tc#x%b)D$sz>5B&2|t|)&DuvR_v2#j|8^K$0} zYw+Cw4c-}wXd@m{fUnWE{FtnMa1fWN1_}d(YJH2sM4{rwNI9?DiycFEb)`$v8#-FF z7ihj1%pNSz{J9|IC+t^?0-nb{M|A7x=b^~$pMs~H^ulw4UdsRV;#f~^GQOZqo1{*> zP@XKnCtE!<3ZDh4`xBMyC*1MjAjuG|3!qR2s8XyDrJvhgHHzfhUV1b%H2=Qri3_nU z>$^@-EmQ9uXB2W^u>Tx#cp{#^o{Q+#SkX0`e8PwIMz@$^{&}4wOsR`Wm^dhd<#B>@ z$TNF^^P?+2&Jb1S~V-ZdaT zGSNc9!n@PdR`OqK^HpJaT3Y5npZ)GM*bjIS}7i6Y?g7?iOmo zPb|8#lw2#s@5^W?)vclluY$6?o{;?psU`&+X;o;W$1+vrjKXt;8APL3@2_`4wm|5=Yni( zYPJ%EUFpxQY|ok=LfeTsFB8zo?Ll1~-Wg)Wyb;NEeX&n>Y4^rIYkn_E;=)MGr9 znKZ0^4fJy)$Axq3f`ALzi! z5)yEFSi*a#W0vjhEK`b*m+2^^di@M-PZ7<56Hj2YJD~#heX(Nc8wg=9XfsTp|L`T)+Gas0 zQisokF-fP*&O!6n8r+XEzwwXd=q z_do=)u(7!V1dWo4DxH?_!Y9lSr6f8m$CXzBZX$WGT%nnGudo`pDl&e+8i3i#!>Ax) zAiSjq?7zjbqu>QyZ{_JQ2Su=aI>C|`&QpQ=3EkP*srF3~bj*a0qm_^2yavrr*>F}` z=Lu$(6fd!SC<0n;|D1|`34X5caMN0F&I~r?FjG!MGmX9h^Oeg3td1rY{XA#ZJVX~;lw9a;f{T)=sA zV`C0V+225~O#{KVACYk8_bsRvilg0Ly zC5GTMIggck@|FX2QM_KT_I2&RYF-D+67s>I6X!44D+DcmT)OrVAOD=)vGydvbhxX{ zWK1!SwXA`G0X0=sXpnD|7SXlmg(U~Y>8~&tPJ3JS`>+UJzj*`L?()3!T~_U4x%KsR zN*>d2(6V2{cGX0-FPy=XPMd2U-E1+PZTnn}g6q*vGs&(SyFPI0lE-9}G<{qaFHB7LmoLvDZ)ClG zeXG#4?JL|}k$LBfEa|%28*ohEJve4>2X5)99Fub+jjK6mEU$BOA9=ig0is?6*v9hV zM3e7evr~n0K8D?AXhgwQq8#~vc;dF*iHwR0ZHS(rimC`DM|dPfH_xoj{rCa7Gu?{d zJ|LSv0ysVC@UfGq+R^&YkxF#~umh}Ie zUf_c`e}52wmilc{J4MAv;?TghY{5Ts*&+%P3tTg0S<)Aee$IRZAvI7$(W{q6A!Td- zkGbpj#ZM~HM}_~5KlHC)4b}>c)jKP5Ji|J0Tx;r~LY5eQ5 z^iOoydm*8+$992pF1MTp88YPShz<6iK=vqY_TrRPiCrWMyA&_?&u6#8qez3lD8CP3 z!hXmzFBcd$zWLY1h#ta|6&LgUJ8Ay|VIr@Aise6FqkzFcs&JH)?IHRK&|wNff#=_t z|GK@;$yVsr|KFcs#jSGWRTzXw*qi?x;y<3Dh%QYa71PGry67L^zyLv>ulxoF2mkla zfY%`HoBu$kwU-P6zXCXgbiooY_mkcpXv|r%tH`sXH;?_jWd4bT{~VgXNrfS@nEzU1 e|9^bLwD=2&mChKNDtQyZ8QG=X`&h?>b(4zg)oLSmpbFOSt) zWWP)*r{bEX-5jDUE6M%nwGN?)K&_a2{6K`mt9Svft=W_qatodS_8 zt(*by?*SQ8*2SxI@bAz7P1OpkbH++$Jq5psREko6W*D3W_g~Pq=r9Pz$DZD>x z6SRwqi^er3(+#1o87}nYs+T^BmXPSD-_Wd+U?^^lWvA!nz9K3rN+#mUy}7k@+il0< zXPy@6{V*z@%1XDQ-I@9M44dhOrsn3`CrJTK@z36{c?Ud@?#)(cY)|B~Ioh*9UXCIl zA$ir*^x&iBC#?Ecc+5K~3Znbxbai#%G3&ypg;sPp36-)o=%3KpQsm_1kcqnUQ}9{g zDkvxjuh(HXPx+BP-}v>zpg_c7>58EJ0t$ZdGw0FyRQJsbY6ZG@(vfnyr|ogT=A7J|8TKBJB6~@89F73f{g&p@Q;o(Y^is{hQ5KN6UR-2dB0N z^cpk5Ma`-eB_wd3K!iQafETXSo{GMB@j@|6hIsGrkpAjb)X>mS19f@bm^mgTuZ70S z@oqRV&l^8KzaP48hdY*018s?X_~hi|dkY!iA7lIj9^5*+!-n@t8HKLfW+Bul+(B4AKiDrR=y^zC(@72MeVO8Ix{0)vm-mWfg&KqjZ360D+K$zF3 zdYxz@cPX+r=?ka4uE?-4sCuU;C z=(2A=pS)u+T1H5JKkPefK~QEU!^%W0EhZ+W^IW`1;nQ{s)E&6;T&n*-T4~)_71Vh-_ckS(^xl_)4f^yLl6PV`Bq3^Y0W=!@Rvw zA!N7FAsFiyx-&wB+=F%97P_v5(2CKl)f}>oj*SsgQ-=!J&Ak~qA|w>x%7>WeXb7VY zHg1i%CMHH}_T}-SZ9u@4`jI+<2wA2IFTDs@wI|01+s{TySQEwQh-k#n8R=rL(9ncI zGDw$>Vk~p~O`(?e*l%=HyJ~mbO(s@KB9kB4=*aZ+^g_!KUKYI?sz`=3cn6IyX2ip# z)&=&a5)whvJbz`#slUJe-)74HKUwzw+20!RYQ{t)CSKHxiDvVI%*j%R^|~!4IT??Z zme$C`gjpv@XK~y0Xrqy~Yk6BH)p3BsZoQ5!Q_sa+?)1-)R(CE>;CzxK)kD(Z=ZE*eEwkw_Z}PD_@BQa zBqWS@4ha&zUU-#wr^y0R%lg*VJvB8FcMp$fwni&lEDTOg&dIek{AigZFQMCfcER4| zKU(B1P|fJ0m~s*lGoyp6QA3{}=QXPY-7bnZXzHd@$Z%L$GeIw+!OdVUOc1wzyGe%yV;_=yd2W2I6PQYb#*kGKioze zybEXIKM??Ri|aolfCSD2c8GA=Ksg@oc$dY0l|NS4?NGmHo6S`0j%KVCR(qf zum9u1BXvmvcCY?x;~_4mko-+YM}&)PlS~#TM1Qo5UxmXm=h=O)IZQX;ox{TV_3KBl zW8QK{ve0|IT2aV9Pot)T1t(x1Ss*{k*96_oQv(q6=Irtw1*X04($oud;k7k3a*>$^ zV!W2aMmBg{Pusj1q{)OFKiag7jZs@yZ%u@%4Ymq3;!`4M&!kV~m&PdOZoU`L{ ziqI;x(uagfChYvYXf02-ngXuLbK<-+WWp+V+MRK~$YO}|^Rw>s!CeCbgZ1ffv0tSV zo}U&5jR_rUkVA#6W-ObI!CBmq28M=8Le1=ghclSi+TNCIPv8j^6BZV36Ls?R6opF^ z8vMZ7+utWXtVvC!O>teyk;!9=k@~sMcy{oOWga}JgE!IrwJQ}uhUVqv_0rF8s+GO= z<@HWAvfBpd(lau;vt(nH^)3UDd-?L*r*L@{iqIZR0@(55pFdT8LfshLgNoCg^XP_3 z-ecm!o!|BAQ}q#0UEyie_XZPrEfJXW{Lex+r=EJHqh;p1cL_Q|N~W+jNW6@e*%|w@f8vhwS}a{aN5T0<$-R% zhR?Vu;D1zt_SgUt1h^?en;Syf+T_liJEtP7h#B~I5cDp}K@ep3Ub}re;w%Vs7@*eP zx^-)ohF(B`+|$z&5TT4;$56SQ$PXIeAyRDbkw_*Ka0KCczAiv zZ*hoV`)JXkFoW1^OJ)pAOc+}^dwP50wFn?rOIA4k4uUnJV`gqGlXaT!NJh%w<5DX; ze0+R(X8nUdi_Xh=rA+P*+1c5-&HLMoK0f|p<~-?hJ}C4C1H&ZjV98a@A&F$`UpSB? zl;RWktixhhwG3KgSQ~Eh@$n(Z1<)7vg$rMcjaxaKR<+&Nzn*UxKu|;^!_?$g-)KQE zWo05;TidQ|g;W`8{{>xbpyAN|!O zYUFIeZlpnA8`JE5^Sijdz5T;5Ttsc^v5XnXd}nI-h0Ba}y}h5lHRcdh)AXd>b6#K9 zf6(^J94_$S`CqJ zcamz%HY*kup5apR;;QFs=d2eQ8XDdGrewbZ^&7-6|0 z;6ZF{!S8c;dPC#$PHCo|ti8Ef>$vgIc$0<4-ul#Wz;|bN_GZUOYSfpC?-OE0=4TJc+>P{OP!m1Ai zZB47N3M2oxRyT89QDq|jY37hK4dvCSH2QJgE14`N2kqRxgd~NGav|g0(^>7|vcyD6 zfYHsznGDk30to4WefV9X7DU3~)z>H953{+(-Im6OfgackCff*earMqeh$)VfI>@$N(ectygN;5`>?vcwE(mv-?cOkcTkqv8|D%=yr zER}Na+|1c2PWSIJ=Fg2vnHr(g?X0G=YkLUQPQ6YaIL^rJhR5>LUbs*<+nP1^iUq^e zwChLXy}q0%JEP+D-4wV@?IlGbUhio8)lmV+-3@zNkh5=NWE#Nm4>(>3d<3%gt09!K?D-Tr@(z&0ue4sFqzs;I zjU{dMoce|dg+Wk)5ssPt($5Q~rl!cD4m*GD+?%-ONEas8D=OOBNv%elCMf{6r)Fno zmE&6yvX743QKyO4>P;%$E=<2<;#X6%;lOxrp3Zw6mD)8uXnr0fC)tveo%?QpH-^z= z*XkU%*$h=Y%TYCw5YL@Iuf8x)PrN}zc4Im5q(fv;L3de_TZ>>=$1& z(zxN;&3ELj<4n?r3%>x)agBpRaYN4APC_A@#eDXIVa_cslbJ5m+8l41*E3bz<>Rq;3*4v)4 znZ{AMu7h?<`cAT7o!`Z(>mk8*V`5_}bapf%DhcVQx5_q8sbtcXa|p=Dnh*>y(7{Ui zhiu0P??L3tU%!)a$?JNr3FP-3p$#77QD794+(Ex8yKBsRuz$2~adK{Q*y~$PT>5?d zvBQkd_wl3W#>25B(_uZ#2iTBwQ)#uzs#Q`4@K%BE!uKA}@Qioi{>{7Q`_Ado_2=Y- z4(LiwN>tOB@~m4)CTC-Pm^|F-3ymo=&(m^yh$jnHVTRl(yYR9JH{a7dqz6!E0mi1K_*2B8cc>UJMSmPUc1*2EU%|h z@keH;iaa2&d<2!RiSfR#+Go7_ZE*Pg&DAmN#c^s1(F+ncEl@c_51~j7 z4$R-`)mGw7F7@sHaW>MgJE>gs&zywU1fqObFL&9?7CV(7}0zDy-xdk)HYsYmzjv#|;uM!7g| zAmQWr^Te3ysKB<##l;-^3qins%9K~(Pts*$*${60v@=C#u0_wZypM@TZAT-}Cmc`W z^!IVm)K4s}Xmg(BfeFhKT@PZ7FCSK-Ym4XHhCiDwfGSorXAO`F@E9h5Du_PFvQiq_ z%kSh9K^sZ|=^$$3)}wcmV@?x1<+Ze$`2WoeO1I`8N=u8Mo*Z`<>et(ZFpBU1aEJPZ0 zL!qH^ttNQF^APWFckTW_z7Fe$ZGf-{Fz5mlW-zflUM;k_xmgIOJUC3=c$$#_c2Yo+ zQUo*-H4EcrWhQCAS&^7~FJAfxVST$w$-!atRyE9$)w~~ddcw!y%u#5eIn=J_Vqj>f z1hUU(tFdAJnCNIfc)%xsNft)SKiO1C29rFc)higFXJo{p_4or+k?3`DvgM}7m&c)y zO)Q2#U+C`cjya!3WCLnLfOgC97xV5a7rXC`jTugB<7(A8Uu2Z^HN%a`dTg<=jwh~u zl-4!;VyND~)aR5~n|6CUPm@jMP+6DWVl$`<+hme3EXhh9M*pYv(vG% zwy#VpBnuMz`1t%#BU>Z>2b<1LBlxHM4eXrZ_W(jrE&S!f3L;fB4%(F8GZ3E~d!4=# z=bfBLJ1uE0X9Ah6GIXL)zwXzMXzLTyRURJVFXjWh!c*@xn;9~{Ls&zx#3P@y#zz6i_jQ85sM5~F67?i zroaQ;A`VdAZ})OO%i)*6!01Iq$5*J^=H}F-nOMSfaicT8yM>-s3MQRJiEDdm9#z2v1H<%Ip`F{W^9B^t`4ZI2oBgOA2}LP~d?)=j%`F zNrrkIA0G(oUbO!SEkFA&;zvu{iRAS8X3)wkq5c|teSwLnh%ADyvdXVZeM~Z^WY-|5lj@n-CT$b3+QtoMZO1a z<<~(@MHK=|MT{tSv?6XhAk&a>dB~_hN50Aq9n*CkGQLWDn5(Sam9{7&e4_ z1uVkh`sbOX8K~o_PN$$bO?_F@^JQsu{v9}A;o5Osb~XPXlm@RY)mn2)Jq0;{zrF{8 zruzbT7HTr$K8<*RZZ$$$5XEYId_0cdhVF&0FMv&@v}spo=eL@lo-!JOa)(m15WaTp z>z)#q=3n=4YplxUGCfFwl-5-~fORCzBN#4RtYEE+Q!`vY$R8-0Ss+SGHsAOKYY=z4 z#QX&H)@5t%*--KI5{n@N&Kj#R!Ov!WIB*OXy3#O4M@Nw?4#6< zfq{V_J1b^|-MbE_CW1U^MFiB!B34w$L%QlZ|}oqB9RcF;!F# zwQBu_zj{T!8|&k9AygMas4uo9nlnIVGX$m!GM#GRS~&nN z;8`2fzk+V&XdZzcy0Mg7kPZimSoD%ARVt_?t?li8P|tvZO#c3zXD=YZ5C_M2dIEA2 zP?=Zy^{;N}JiJ}ZGTrWBZ7{B|Rakg3Adn?|`GkI?!%Sz9?7zsuJpWeV(7jm(qvnWhJXMJkDg`^WvQHD0gFj2fl;7*uXG%_UT)ckw~h&;^<% z6-wdP9Cd?PN5)S&@@2fv)4MNT7P&PdIi1ZtNwYDIZ*BE{%~}$B;jmGSDzy9x=<8Q^WDV#xs^giP?!a2kc+)9R(|cEsDkY6f2RG3^~Zif}l~ zW*#dB?csV!Alkc6$ImZg$A?yW2R7+Kq4mv9^`xM6U-#+dy9N7O zy|>H3s!t)hyh+X|%!Ago?DO*6(y(Q+jy zb06AE&`uTHyJdnl?p4btdepVko|*wWNDDj22rLe$Jc1ILV-Ir+YQDjtM9Wh%FSQ$H zE@hC8qqt3+m`U1g-h$P%%MHyIk$IdNaa#93gQbp|`*tt)8I8}>D1Sr{K@y;O|HrR! zw+-L0HS+#(t@=zyNaTI!CQLj7g=nzINsNZEm=IBBW(Y+0XD%a6uxG=cZ(&`cdT%dK z67?FTU8DVRpDWV%D(mmnavC0&xv_NLA$zX z`2=!)J(AcDXV_R+zNbqDgS0?fnN+~-*q*0`aq;BPV)8KI&VH>JFP;_N(4|siLb$;V zQFwYIlVTRbrJp(cjw@u2tD`yg0xb(;l!GOBWLyn1qTb4i1ddhXgzV-6)1`Y2um#Zr z^AYlA>s&ef$pl~YX#E~^qZAgE-}F`TbpeXI;Uk=_W~gRxQ7#}6)i;-S zDk4P2`OYEXX%wR(^2C6A(N>|AAuE?6Opf$G;dBBtO1BqysIS{2j2y2u;q6PJzmIOI zqc@ukZbl)}*S};zEk1a|!Ad7~(bFTlsJS&DsMxr;-+u&?=DCX64cXR!s1^)u7L7mS zHdE6awae~pN1bw2pH8VY+}fr7S#h>Wh<8Mr9T6-y)@*=76-3OeHaS>iNXBFKrg=A8 zKJgWhku=ZagNEDEkwM3UkPG7HbM$IGi+0=MZfAURpuokl7_TDN*VhLXM-m#4(4Bk% zXghYl299}*#+umak)eD0n_G`KEQh&gW@c2%QrtpKMX-?a^zpla#(0(HLm`fd2W;nWIfGL7e+zQtf68og8q zNA5ei46V>tfHQxtDgp6n^K|7EyYx=xtSO{+qm>iXK?2Yhe~*+-51FL0?j#HjYN+HW zW9DgFNFasM-6`4%z|n$0=?+ql4NL|MCJ@k5efrDFLs>K!uQVVF3^S5iWM3 zVTD0PMyByJYB=LQK49SHUswbvsaK&d&t0H*3V$ii3zW6o0=?M)dZK4J1-2Mb;zu?| zA<|a{i?DHU?rLag1h&(n7(md2Ru21y8$1i}Xt8hKzOB#3>ZvUlc9L^F1<{Y@&a-DX zpSCApCO=f4N?1cGlIPykdC*g^;E~vOkFQ<3_FgrYgpQtmBlYwsdvLe@+qdU4O@xRL zTJ|n71e?<5hf?tE)A@a}QYY;!u}dUKYQX$Y;hUddW07+uto(;T=qU6+>p<8mGHNE8 zHhV0s{OFNVrQ>gd=||ZQC4nR=LWKuC1|KAv`ye_?h12LP6~TW)p=_r^sd^wM_x*d| zWt;6K)wX1z(z`sQvmMRNUw!dK1HOH``@YYNMYoD9A|fKIrT{39Muq*Y6z5+T;9d=& z>Ao;nMDKaBZ}Qn+0Sm)02=}7 z>eZ`t9}T082dC=`kK$+del3uakqh;t3ou*PL|4fxz!BX5FU8<-RXXAVkWiaiTnzl1 zK@+=rK*%X8E4O&)*xGU)9UXx&AR1>NGARi+TE@7Ta)1b)Y-M=|fVEPt8f#P$B*6?o zcR)o7R77?u5B3y4t`rf;hOvGP7$oFq>aR|gl`dUG^X4({e+!&)eSQ7TlP7P7618fM zceI2zzF#&Tw>4>bbIW;m%*iE~g7U1fYjhjhm;hpawL~*NE$FxZJxqN0#zP6{8^Rr- zP(n_t-+{nEH^ki8+4(9P+a)9wYgtztyH7;W-{*KzhdNrX$9D$l8|lV__D>FQ91zW2 zz*KM|{UI}whief+!yL&u;6w?500qg=06?Qgu~Fa#54_#?XlC`0(l7C1UZND-&%8kj z__gzUM5EmHI&?t2fy2a830=E}rXY6wS+iD@n5S&^38+-pCh&Y%S~adzV>9J!E(>Li zy)yv=MjV&PB{;}_$i~jKCq6A8=zp(-0dWNq=<}S?(M6#2uW-p0BK=_h-yMz9z8DqS^w=r!CtrH_?FAvq%-?Qq; z3>5Y__+v0|iuM{Pm5u?mYqc(ofNkbzq5eJO6+2s7QT6rpv+{|&@l{rnbw0KrPKAi2 z3fR3v7Q7WiTiZ|yo*8JewVc01#o?kLF7C53Jxzb(`gP59W)&N~ls)Ab(Kj>t6L?YE zuY%h3G`Ff9mem9xWQ~B#J=*#6=gscggmrYn8ZiY0lL7!|Ba5!L;y?1U8I~bhpSCtP zN1!!9cUmU)t^`i^^7dwmh}+D^k1WW;kkHNpV2MrSHZ|CiIy~CnDwfKK0E3Kq@75b5 z@E6${8D;8pe3_e}&^%C#^go(-jl<`YMK0p{c{ERpFRBO(O|7aQR3bogVLpHUd@H`_ z-rJ*Z7ulPj5m&q?jO8mnUh7p0ejQbpi5d^a2`vZ}?E+nq;BfgYFeVt4q`R5N+l8~L zzwKRoK3Ru`fQ;DWLonVTqBSQMm%NpeLH@tH8by0##E75^lqU^LAJ;u6Vzz$I&Asxw zNc#A=>^eCaCxLm2j<4zsb^XB({aM}18fvSNR=sv7M=qcd$fb%>Z_Rf$0&GFZHmJg2 zfNK2s*v{4#L4;+Ml@Ll47fIPz99xqiq0+Omh7O<&qY6N_XhvT{?`Ul`1cdLjSneQ5 z9Y!k_=CIs9mF7?L;g3LL7`4`-;hXF#d7P4@wQKiYX&lEHldlh=KwH6DCBp_})sn(2 zTg_PbaTH7}aHu)RxyW$4%)aaa;|m?&_B`Gmc(3`1@z?ZptA{~LbyZarNGKtopCfTX zCgv$j}2(^6Cl3Y|E#i7jUYhDoAez_2G%`dLrr1-P+%djXYKo~#GJ zOVNa|K&*%sQM;SRxi)uvee7NKGp8-Y)kJj>8yhL2Y&sQ2{Tt9#q2RT^o?MMm@jN|t za))fsi1!4tBWO7dbDdawgdBu~s!g9wdpW@HmOIh%(t`e-Brc*$E_-VFf1SX4HU5@w z8F_>Goa_{I6w<@skAY!Ao65}8T1^u5ph!zgixy;ymWz};boXUq1vM19g&+7ggV#!?*z9^7H;d>DgYA6{$l7*bQpquEI`&m>yWlcVt@7ml5*>~>n zuS>eQ@@nX-KC6x4U?7n6k}ez8i<~WLkT*^y zv1N2KSyfh%a&6UO+m*xa7Rur!FhJ14k=VAruT2 z643MEwHWk{)pc#&OJG*dzX}dLFq##9D?leUJPmEk{0w-w6g@5cN^-3wcUbCv#_lSQQ*I~KJyu$L_pWIrd-I*z z#zD#Z_ow0PB4$KrjWgM&Y+98+QUb^e2gN-rOgzgFA?41!k}=l%gH2(I0!+T1|)I-6({vW)x%B z=*XYAL+#0)s{Oe{HGxafavy`s-jh}9hC^CMsuTDL)xr28 zHRc{lqZQem6YCKZR}qu$u&!{&cXzBOPZZS~iR)x~z+~cdQ$0sTF}E)(Y}sBgiqh&s zpV@nr56X>Sz`?W6olyD6@$^1%R%m5;Iha-M6r4`%cu7YhG?N}WVWrj+QV=plP!SM! z=k=!m<+>K_8#cftHf~Lb-^YQrE~iXnqFUn3*uOptF8_Z&Q>pJ8LzwOh9?93SpBLj5PaeEAW}BMS?b7e_C{JStBOp2p2)OosX@?6<#U%vcw~cRqRtH=Tu$VZgFY~DggXK zpo^cUh&JIGhK6+hCi@h)1CaXh4cKUl4q97V+xLHWFuU}*#)P054KWe`UKS|C8;AGO>c@DusDks+>V?p3IXVEHtJy8LV)pZetF&>GAo zbWBVw8rfV=Ih|6hCTc=K;-;7%A?A!OLEqa9N>xn3JN10Q?9B!TIXY7d$t>)eTBqV|wPs^EnIb^n84!20Q}h?}{7N z3X~!l9z@Q-iczpve4jemcbtRHYHM+bx~>Z*5Tv_c-Av%M3<8@Bsw442p+!nin8Vse zl1T6I7k{4jXx5=<0*~)7P3_kac_)a{U|W-6M=!0WqTTOQ=`SnaVj!|YC+tFq)84v1 zV$`TTIbcTY$iT$u7#XD&djgs|pyQ1=Tr4JP#*D3B$~ldd+nuNEFR1qyNxU1W@*^Le z8em!VvmuWv<&y?(Xhg>5>!yaK2jLL))}mEk*p zKuRtAtS9UKnQOL|^6u&f&2Jv4W`_-mJO4Wu9d)6k5SHZE(foKf z;I#;w`}OM=G^m88%W~)0LUZT)7ws2@KHX>tA@>E<9KFmE?I=2P)EugZ0pk+v#C*gC-5ul4m9AX6|-IQ5Or+VqV=j%a`$ z8{#*IyC*rU$(?(*d3KB4582ecEP9T?q6n}fUW*_!QX3$PMnNZIB zP1UXzNZ(+E12Z^om45B&@bE>44}eec!Y@FP{O)@kjw^#{_P2}-0aEirlL!l!%sVcQ z?B&asH+6^v&RqIz`OsoP>MjD?!BYfqi&=+gNKs$^n(OwGAMl4sz+6YqVr9OEdk3~% zU8>HA8z~2g1s|AX0|*dIKaa{~tnA8VRzYjIjF^^yVf^(&PJBL}*F)flo|>Nag+{Bh zn;WyvCBkS(cZi)QAS8r)=(lYCJRH|JVHZy14(`)>ykYiIVMNS%K{TayYlcn|PdLbs zVm?Rm^3y!hXM_$Fhy8-0T(aPoZ|$j{=1bl%&v-(44(+roc(yfmHMCGnP zC>?kPAIQjn2+Z%c3W)SqSK2)?{^xHs*X(viV{GR@(8z%01+Lr(?I@^-y*RZ4@pg}9 z*L}U{=tyn1=HwAZHCU+cJR7Y}aOFy-y|mFiKI?G_AoP>7vwjH6*105bCWEqpc0LW} z{;xp#o`ZhC>xHgS>Bx!*0w7{*Eh;xPL&KU=tNY9Kbe$(G(vh#7T1}vnlpGa>k*5|6 zd;AtworJoc+)m5)(`-j)XCwHZx(f8f5SU~+Qu1Yizau8`qd)i!Ex@Wdqk(v+o!6iI z`8`6~DYBc?Gy6J}92X0EMw2tmQHTZI?C1M5d+C{%f7udApPQL6*%B! zCgqET$K=6c(qbv!@dk9e5wK)_9j|s{9y=0vWL3<@>utmv;e>YM#tmTmN!NDaX(JL6 zf&fcjy>+XZDg4m()o95iZu!>cCJ2}8?ywJgtCed6G&H)4hJyF3it((#Ic|FwPR2ri z9wnfzK+vb51`8qR8QecF@x_i5VPP;4w|CQp>({SOtqgtAC^GQt$$A}%w3d)Of^-m& zF$ivMmBq-j*Ph8zP#z#GGUgC{226b${aV&jK$CqQ=anpNQ1g`L37D+{Shrv7!9=Y7 zTb*Kgp6>VCKQAbt$`64f*ew0L1qBetVd4`5}Ok5oa{~GBX2nyV@wWU6A2rz^IP;E2|TuPv-vy<{t_}l`r#M-H6D>YD2%ZDDJmdDul&UB5KIai1pO!s#Wh6 z|6{9ST0~yIWVN$0#P7Dlf`vzsi5zHnYs7UAHcXrKN%5b#>I$$dk~WvI2_t-4U{C|t zBqFXDAW|JRwqgZCaT*+M;p0EO2pQ=w&?~SPnE8cR8daF0!IS)6g$d?gV#_hp>{nmB zKnJ@MIoQ>{g3V}ZZtiL97E`j;t+3Z_(5yvbs^(}@wlcYw&^C&*>|$J7gHD}9i4%l7 zjBPxDX6Uo=s&WWKyshO|5B1)DwhKY?y7ckLdHb+pHF&^ zC5m;Fde}`sRRC(y0E>?cZoo=Duk;Q+XzW}JsJgh&0y zN!EvRNOl0e6aYT9I^g&D^H|@(Vu)DmFI{72$A<|b!~_V~6sR~xmMk5mjDo^_7oBelL7LB475)Tk7{qELVZeLwWxNx}kS!YU;1>t;^u4goBG1g^j2I1k@uT z3pnN5!~|_5!!0E3LND*{xgjbcM>)8k=N9|_;aMlTd>INtNe3vXAeO?gh9k(4{-!7V z6D6&nc$hX7hX8~dUZI*p{G0#fX-`S%fEzWo0!0dRr?=p3;J05Ofb5{ZZKn~mWqCX* zxoZy^1sbSkUEp!eO|4gkRfm#9M^{+^#TNi$$b5?1rQUb)kKmNt){G$p{~q*jz(%VI za}yzuVI++1gM@|5!Tc*wfz^D4D#2mYL_j6#9@lBh=>JXrs!_?xiUq9hHD>0E&{9Tx zH(0)CU|$1WnaHe>%1-OXF5+hKI`tIZYU2VReyP$2ZZdfkqEZ|h;)ulz_?1@L-4TMn zo)qa4wMBuoqiSL#p38*lY5n=34iNqep}kBc>`Z_!^5=EWECF%7W9nJz_{;0~F?m;bd$JzfJ>~y9c%p#M#sI$)o-Hk~`w?r%QC%pN-wvo$$&4jRa&LM@2<1P)1BB4ur0h8I&E`vHP9}{!lwZ|<~j*M{cz;SriMA@5VYTCeIJOC9y{EOfaTT= zSPNRr`$i;6*3osN#=T}=!1V78wosVOvDA+KZBx^_3vTYW@M@@=d3eml_)7Cy_K3Cj zgExZm+1U#Q%hYm__l7!-0z107G)X7e->^WL7OX6so3n++ti`l8* zFb#BlGEw;XK~>g=DG!Mw7&?mo(cAlIk?6`b*VXUeC6HM|m|r}Pnr0OvVbK8Z41Tur zFJA$P)V0H85jPT$d=~}^VDK`@bpC?{T!Mrek-h?tSSFzjG)MBix*Vc36sjt!4$e$B zKv$$e0k_UJ0NW5eulxBKAs}ZCa2aDVePTVc`4bUF=K{}iKKxw@<7)U%p>?-ZwH z!eQ^hOsQBQS6mFRJp;sL=-FKcD;i8FKo~cD7)0SL^eTw`h*A)}0GbGNbALfc>jxaz zH*CR8*Q!qrmdW_6sK7vu0Yn~YK!ZaR7825KJ*dC0z~;iF!>Ad-(h3wfASmb?uqzlH zX<{t9sBs4w7zIIdV**1ly181p6l2ljMizL#60{S_wqhnSXf< zXU6d7dnIIe?R82@7z_YRgC|7F(UG^rYAonHtvdm*ii)!(t;W z0rGD&TkG6kM+gPpctUX7K|?SN9(uM$cLq!G`^fcxq(fLNg#UuGYTWD81EfMi7!yFI zEW6&xQ)bD2z7R1l1homuofKg1OEkg(z=Ch;#Iz%}{*gMB1l0o2rF_>(;M|Ln?F~S?GcR%J5maco~XXuauxUp))f3$)uumr>6lV>tMv1 z1Frsipg4t`mO0GH5yxk{&1*$6#5UQlIcsh)NJn-JI2NOQ%mlY^ytbG+@cfsrUj2ed z0&7;JO%+TgVqdz{03->v$chU8!Ub`-)^p&PQH^qb{{HkF90Y({x%ThDR1X@6uz=PR zej=p_a16NkC>s$|TSf*vq7Td~PM5{Tk_tL3y#(h)62A>PQm&wZ^&GlML|i`_8YtGh z91B2fzRJPTHN{ChmXCo#M@L8YD!1)Xcc|y|uV31XQ36|UQd99^HDX&-`h{mnYZpwtB8I?4u6Qm5N$p#YBif`N*1N_jE?(V_>S7eSz)ufrd!-Y4oA>+ORkClI`Q7dsB zod0X;D7dAU+GsFR#{4i<6wwdT;btDD=45U}s-6AvG1@3-UomVtK>$^MK?3v#ZL!yc z(*(2dSxq_mO_F?+TIAzAwhcZ-)9Eaoo4Ui!N*PM=HqkPe(I56+t--mV=jA2w$EQWu zg3R9{Lj-3u?_Wwt*E4R29%i+uPfwZ5kH#s2*$848nvFq?VUs4(b^FbOq!OJ<#~%Ro zy}{YU@9?e%cZ?l-RYxy^IUwh|lM zmHB$L0HAKR{9axT1_dhvdT&riqHHd|$tBXS;o{=5neU(mR{{q3;NkkDbWYL|?Jxl7 z_ZiyI;5>K>umGCeF&m9g8kql_q%U)>R*T*{2S{F8TDpxjz|HP(e_tQGw_yJb*(f2; zZ|R#q1UUuim6EV&2Y|J#SoO0HS~w_@-VyjCU#_Ggc2k^amXzZ(b2~9OBRjM zbBEAhmx3IRP;M6Ovck5x&S=}jduKzAVD0(a5+xyN>joY_s1h&|Dg`al4X8vzMR!M@ zXYH@Tlsm#4AUfY1K2~qByaczJdhV`-iYWj`0yu-~(4#h78?Qc7l^N2qGBYQk@a;h- z9-NuyAnyR5u;o8PDw)uoF@WABj4z1;%#VnRdv7oOP0;g*ADWnc&<&XayQTiteHEO) z*)_~-055E7*MWW)q%UN?1dfZtaJX->M~xR4=IxjJ@nBGhYuTeCWkflBjuEKq#pk3P zN{a}g21y9%u^=AQH*ELG#7_3;MGqF}L1d!_K!9lA{*B07<-h4`R(Y;!?klJ{2Aea@ z3%%L+muN*TGH@*G$>)UtlEV@qpa|TMtb(t&=1Q<&F_6*RrcxiU_2AlFOfN1U8y$U} zm>3N8cN&nGT7HLPk|nra4y}PoBKQMH#!DIFq0{~(*3vJ3PlXP>WRON=cqA1E!0>29C^Dc2*O35pg3Jm5WWT8sDXUrKd>d)cfCh0> z2PdL;3e-IdN!lWf1Et_k$~h|U!4(4%$K!Gl5s?i5HOLrb9Jgs?{n{nRSNjiPf)IM$ z$ZR`>*_UCaMtcx2V8HlaqoMJg(B6WA3}{gjdOX7=mbv!Q4;NuF&Uv%>29lt_FCz_n zCy7MM6V|lSTOmcb8K{+`73523K?BV}+#!R|VpR<@w+s`WfFr)Tx{A2^!Od#8Z75`B zrA5T^KM1YXtS&UgU=FkkEIE(^J3lm*VBJq%Lk<_HA2)B_tOEnjDX+@|2`l3?>myb}r( zxbmr~t!;+OT-N5#f)aH7p+JHi@oRg#{98b3jga-KKRvRe zzh#XK&oXJ}_~(8u{$#($c~USmW_R&!&L|)*G67qLldaU#Nu&h@=lalhKnm+1pgcL++jz}@1nkSN zXGx&a8~<$bT~V-9D&s4_5hN61;Os`O8s?P%MD>{xVs20dgZz2b$5)yZO)RR(Wa{t*xy=o+Y-fJuZ>&R3!}K zn2;gh;X@`Yn$k?UDUcTATGiGiaFk&9etl~%9bMwG^%Ue`5N$933cQf2|AI~DhK#|_ zOagoZMfnvpsStZ9@QJ9N>zZ=VSzn+0ihSbAnU>RfjfmuQND>)cf9~we57A0!cODB1 z0qX&Qf#8y^V=kyN*tQ$wbOJ~Pt>=iy$QJ+u`G0PiP}|h}7KbM!zEgasTW>h*Pi(0O zBr)J7Fn~>UyHqCYTdbaEAgII0k>V}aEY7oC8!W=msjwH<)~13E+OlG8zPDjVsmR~a z_dn+Rr{0(MnehOA_5=K704Z*;%H@-4xOMI*C?1Fm3IzE{-}K|)jE>U0z=TBT>PKiw zRI8%f36a2<3ix-vwYFY_U2$H_iv8&7Zaz0&sE?ucQNstxpq{z0oBT`eBMI-zB_Ykz z(cQ>Y&MAEI6`e(+5Cv#P7~0gZ#6L1KGoQeFgFiQ?p3h4neF{cTBBFA2DtVzTfCAJn z?u&Ix=MriX)CWm`*o6?VFa&)MB4u#p9G4RJ;y6 zzN4wfqxs8A;0oyb)G3+^y%sa*UX!0{$I?4lTIRv&%_h}zSDHB4DdkGJo@i@Y%YGxb z9L_;q6l}$T$P4zS;~^64b1IJ>W!$;?wsN&X7B1&6cBJ1RHjy=VQcrvG7EA~VAdFOG zrrsE_HLhjn%Pr5F7V%zh+x+CcytLG0DUm;W=^Q$Ys%LY1ow$oY$Cq4ecv;yN`XO77 z%WboGt;avA=Bmy9%#*aWtYs(7Ef+^S=Uo-SIXMv4aRRGqZ!=%ZS_?Btgf-%Gw7XqEdEneg^v?T0K{5w)gZ#+1<3)Ibt(S z$(7|%&6xmuGT{~%OKXqwKIG;e{t@tKKZZ#L^@s-&7fD#UfUd`XI!(zu8eEgpXvceq zhLK|L=*UEM=}<(fKSGF4AS?r-l!*ZQ8OXl}{iQWoFxVCBsoOaUgL#VF6e9ByYj6P5 zVHyp29KF47q?_r&GY6g~EoN5Bdn6pfpWJbrfrHKP(&^a>g=O4GalQ-uN0o)-k&ez7 zrr62KC=}#AfR{a@PXV4Jh`5y?pIZv+7puC56k*j+fbFSXFIEN%ufH{``FE?(r|u+NPzpp*PltW9n*lT8+1! zI6K0}ElAQ4ekm=@1#Z4(gK~Z&$G8o3)O3Gy7WxEHHT&(>DZA4!E`t!uoUANK82RZQ zv98Snvmg)q_||!iMmN+{{Bnh9fm&I9Zhya;EoDS!Idx+N<;0H---YPOLc9 zWZDJmpabw{Q2ccH#_XfUJ$7}*97il|sqO>V`U#-|O)y5bn_lC5P@QJqdc@}cQkBzL13>gKGkK+&z7uku+ zJe}7C3(vUwmb~R?nG*Q=RMpjE)$+A(4LE?8lBKV&Z&uZ`Y4>c%l9t>ESgCtaSir;kkN}cQ*c*Yt$BJ6WlaIxHU!W*ZTTvi#$a3RwFRL}(f z=&8|N`rJRn_j|>%`t930`OEKg#+|6{rzyU7t8o_2*I?j{fzaHIX-cux?#<^ ztzE0g*k}XyZcL21PDCy0u7QV#Hzo#l%--1ABV*`ZDagyqk1a!MO-)kL?_?v~3k=ML zW6RL@RdI1CFR`A;4+{%h-G-UU1pp;gx?acIpC`DX2harc(xE5JS~8m;8A=4(xgO_+%rYft3M@O!S*K3jjYwZ@{@u1~_c@aHpX` z3V!N7$JsY9;8d_1bF0?_LJ{z}tFH0VvZ#ZjSkk;-=QUe3N_X>Bv&3LJxmPe)sqz?yZX)+UF z&q%(jS&3S%fLKw2X6A0=yz9H*_LPL8qN3ZDwRR%C`~96AZ-&=EsFG3EHChsIvtEXc z2QSFjVKRRFL9qf<7RaOU$K~1s?ZI*)1Lf$0Lis4&^d}t7<9c_h^L8EU+sFGa;^45k zh-}k-+RDqWaqR3Aa@!fNQEM?_g?C_Y6osh$JyEL%UVDC%ciQdtY1=-4zn3dM458>bo+#Q~zs2EX{OplrVJQuDH?=C@l< z;KKwB-`8QmxT*|%Uf$x#26W*w4-Q=MXoNM4jg3Vg!lw`x`=CGT0=wYIxMMp>k=n6Oe0v_XR!Scn^gr@_%#7`KWJ55iYeD`uB3d zdK9|jlx1Z2j!L~w93_D&3jhG+EpWCXhWzKyJBNpd;nN&GKI8t7o=#WW*i13t-~gXn zh(|5>^QRqGGc0?PB{L-JCRDaJ8mh_ir-w5Mq$u6IfFA~~5X8;@u^1^D058ieua&Yw z4Z8oYWkI2y;QHU0)O2&J3a8U;GWS!{wxw-VEgvblk?0nI&;j))72~emyva?6JorM0% zBt`+PaoWc3?zKnRvq;1sw_b*h?c6gow7831bG4LprsM};gPRD@x-|(c#D7*2&=c&U z|JikMF$vbMUcuQ%keubka?7HG5kbH>pTLsNL=^bGx>^UUFP`BTD3maK)Qqs54&U!S zoB@Zv;bEEo+SmV8&b7ZaecsW4GApZS8IH;&LuE7q6>k|7ilBfPpvVj%5R9>ch@xN- z6uGm?W6^RK5me%oix`OQD&6|*JWkth8wO44fo$dx3|j0v%t@+(i#5HsVW9{H+R4#ehnVNSmc@ur&WrvYxS}+8l{v!}wYax~8Uy*dDF>eq z^$2jr=IiOHQIBc)$5x1DI*M*4|8%5@s-0ZBSJ6GZsX0ORAjs}cDOH2NKnKBo5#xer8>FzyTu;+YIo>!&C&^@n8W^+*goS4t z{ss7!*UzlC=am!iGpQ~IN-dgUzrmTa(aY=fF!=s7gvm^T6ez6YEJssFQ{Ku$|8<|ZCMp9m27Lom}5mgjL$SC|0f)Fl=u#1xX8 zsF9AKrp6a(3?C<_uO$KU%lY{RTm*h|OUt$#_U6(Pp|uQHa-%V2WhpoMNaInzP1=z7 zb-eh-v;FY+zcaeQc*VoENdmUHxVs-wtC~e0%`vj^A~Y0HL`D6*-&!DL>5=O`OQ}eP zasFWDaR;`k>Ai+JjJ*Lz3_)RzvfnD96bCgdw$IQuPFW#2D;FSmg~0DYQCcpUxezxP z!fQprkQ_$rD|?R5m9g7)(IY?V)8ogZ#I6nb@TD=Rl>uqNWHPe}4Hdge_umcnMl%=- zT^&R-=d--v(S{$u7LC%82!LOx?3uhMl{hogTX)J(~~U$Sc$85goWjr;+%I4F#hpL z=K5gR)?_7$J@Np|Dq(Fc2USX!VIVwI(EJFi&&kb|Vf4*k@!0(Q{Bdfjq;9m)0w!SA zP)(ms(T(vLrsVk}rE1i-3DsW*3jPh@<0+c2hW zUI6_&ClI(J`_tlXRac1WHl@9fSlP;-C`8jEoA^ACW*w@ZhGX~lrCOh_s`B9}TXHKf z0oES%8%il#e4g~DJ=)VXJfdtuUiTc%)Tf+^^)RfMd-q;Mg5#Wpux2fifby8n12qVg zispDUvn@c@P*ea}8m@ZToX~+E*WVYYx)sUApbiGo@57tzP=8c# z;K>5*(;rn$m|olV<)GdkH}eaX+k;?)@le`-2X+EI_Qf8A-oxZwQ6}b%NJ%~LIJ3gZ z@ntYh#m?Qk+viw!p9UTw{KFA_W-Wf13aOpK8ykt*4 zazjKB-Gd`-jRK9%O4Q3R_|$leKRQIlAEho>xz6F$J@nr8EUuIo8ygdG^owdZK|&sl z6l?pPI~mVq<1p}xg%cd`fTbkyY8(D|y<*8jh=TJX(Pnr|K7M|A&8>32RJv0IiO>eT zXzT7SgL5GeW6%27#2NP**Q)vmmIwIXh^Z| z`qt%iI{jIr#f3JY=;(w!-{ED$hT7q=1E}O60{iL~FZ67W#8kvrq7%0V1Bi*}b8~b1 z1r0eNXs+d43`&)pUFc3rtal+Ll~5wGiIEKnN+zQPy$39Re_5-y>Oyhxx~vFHnkgq^EkJIcp{{Ac$t0+Mw;~9Xth(>cRJVozE>+b5FCyL;wvoNypd!XXk*W&{Y z+J~;?ua3i{yZc25&tg}Z`nw^ge-<^$kvKQFQb1N+*{cu@D1vY5QnhCNPm;D~o*Mce zG=kc#sK5A@q#cX4I$8Nizzf1Bx)wBx?!HX6stuO+M*0{90AJYpoHrU$Psi;@=A6Mbce4BO~Ptu+%=ysSQF=_(; z1bz&K@-28V6{sh6{aNcR;rvb0gOcb<&OJ1A9p_Q45PLPndPrPMab5&c4Zeaz$NQ*Y zK@n9yaPa#zX?-*!o$U8BZ$m@FckT@`+S%DTb-{lSOhW25O_w$$iJ2O(z$h6Hz*w6t z|D;JWSW{9$&oQtb(*z6*4Bo3gG?N_f3+5*|Is%)fb^)Ys!9%@e6w0O4#<@hG^rFN5 z-McP%SX^xOo<&wm3VeBAOz~R0W)jFKeA(g!% zrGmlWdSNg)z55B^JNylugYeHj+l#U{_QM~y{dfG}Ya**Fw`?&OvfJn{&RdB$_b`~_ z7+I+cH=Lp;yPTbF46TXJy1pRCy>sHkGY+D73J1KK+-D+uG7}GH<{b}MPweL$Z~2w; zLdBR(HHA9G`~nd!)3ns_Cz5ZaBo!W>*oSk1=*aP--*9h5Os!Pf5jt}x7Qlazu#`o_(iUViYWFp%{4p+kp4xy>;C@a4nXcvs-Z z%m-*Cnc&auRtyFFl;|tL6ZqkkBLZIN#a}XUnBj*MkKm>F(L>eYml7L#J1k3X7Em!U z#g)PDmUWbPO0dXBcqzu5Kf%jO;n-zQ^ZonxW1^OQUwrb$lA~q=bvJR31re0&Y|Rwu zvL6bi9Yq&(MWHg7{%Zt}0XYLhu*BAwl91~%yN>hF;mNK7ngWNZi|{wP-hF#*q#;dH z@BppA0a`(e8(Ahy37^n~C%`K_zhG@gX1g4FP6!B4W4QIp_P}R_xBVlOgf8 zBXv$=N#W?{h0E=xPVin?hPB5qrE>$7*5ggATDG&_7lJQ(hH_-)^y+|1kBs_1xe#!GBwgxH+pu0zkk2_(APKd z<3}pYk0RFg;FEp2fv9{rZI~nMkU$u{@<6dr6Aw3ItAQ&)c-L z@<6U)zlew<`v?gW<-$495?;QHf0m7nR&=L-VI6~R8{@@iRENp?q5P|*MR2t(KmUCA z2>Bs=irsyggSF9X`*7E3bFLEI-R!KD@wsE24jtxjOQf+GKgW)_(?``3^nQ7zTluOt z@cD}uOuW2LeLelp9M6I{EtzYOVeFeOn5lSrN-o;K-roN0+qcS#E@H0BQg(KBiH--_ za!hF`C@82}u1XD7JME9~+kB+>#x}iMxNxq57H%*=*LHnzY<0ex>zay6KV8R%yCfc) zb26PS6KMgu;eOx3t?{4uZB{&Ey`HIGP7JGS&|B*Lt+uv&xHjt0;loL*{BiEfw^FqW zsH>`~oF=m>t(GTmZ7yYamOnXhiQA}-E_@_iJq!2p<;!p1y~Du_4i5H)cy6A=^ui`y z)Y6Kcw~~_5L8of7Vj`pDV2q;gb2hbv^z?%*x}IVJmfepbK-fHLVUf)`K9Mer)K^-1 zZfJfqZ8;crS_$3tvFM$Z8P6Tsj!)*c9x*X7L6eham{L-~&QkQIk18C-=HTEmF%cV! z68`Vb`Tv6y@&DbIQf0N7y?y`wey!nkl)9KqP6>Fuz5?<2u&24=#={Sywg4i zhb{+K4L&HlZ4y4H%}iQV^~Kvx3O>9V4%XbV8n4dIJCy`asI1xP`PWNQv^=e|atV`Cde zPb;bNu)quI!zPWUhf3KUUaaWV+q{vP9$PNg(A`F8s#y3(;$X2=!KBBpvB?(RxnEX; zv6W-u;X5uUh)y9?3*X;`rgPuLfE%i+@GacKhY#;3BU3A&%dplG;y-te>R6EUluhBq zzb#B2?vI{B+lB){_0)~4_wnNc|9K5?Q~y!X9C5;!o;u=0)f$d2 zx$qPWGymre_ck?EN?kpoeTe+fp=)eb_)n;^G}1UjRMgW{qtDx4y@3{R z_{B2_3V7WI$m{{??9|~htnAbzHnz6^!nE z(Qw16?DP{KXJvAxvAT9G^uNSWXd#J^goN&YUd`V@!Be!7GBPrO|I_DCUb%hy)qndO zx1$kwga`fp@%sM&Au3WS&H18NUp1Q?qNQa!3lR@tgV6fSK$&|G5o zu5@%_|J$b(lH}#(ssFdTYI-<6Zt|E>f&r6hKcQ+j-FcLVhzO2nDd3r|gciui7qqnK zJT^Lda5FOslaiCa+~IXjwMZD=#VdZ_)QUEy3nGMVlNTl+4I3bG-`H;}`=TD^D zdZhgvd-CGNqa4$g{$P=5E6p^iw9khnRix%QdskPT{>1Hc^J4YW0@ ze!-EqKAwV5N<5Uhwib`^cW*L{8xjZxV8zSGBsPC6_jgG4YyHGW8SGDDsR*VQ`Bw&u z`fhgaSOa8;k(RH%WR;;OWoEyUN%XdqZ1YcJM`Ejsr;Xy=A9-x8ztS!7AT55=Y;rqG z{YIBJn|1maZY;#E5GNz+6z@}kDAK!k?gc04oecNfd%?PK}vF|;0odvydIs&8oP~9m2f!OM> z3=LL=)y==Rt!--nNX zLR6FvmK9G=;znot&5zO1bdPBT>(XxdX*|fif0A9N@JPu<*UW6IK}cUti;ihS{f!$p z5U>%l9XMo)!*73(n1kZsa1Tf-Ltz&%~KpjZfD%_-8QaS=i_HI;oYR7IZHYNiSl zZeG6dV3^Fyc5;Y|STC!+#KvfWu$8N%pQJYKAvQUAj!sfAOP!r_<$9Az4ir0uV92@Q zw$gUz=|5_ihYf^x^IplwRq9G&>`bnBaR0tuj)pd;Ft=s5sC=yGQC3z~^-MjSR8=;4 z7RqzSNEcm-*6Fr;7CVHcrpk?aUAE(xf2U-^gbmeCN5C&n;q6#COL4VW6sU9-tOL1LEu^KgBv>E z3F1F~IEeLCJTVu*=@BYhB^n7=T<>uFj!BiMaK&o_yipcHGKMlJ^3l4L6&3oenYUZB zjmQE517ilDVHoWxk#Lx5_xbRFcf{%9Mcn@W{wHB!58yIJob>gX@*SoE6ru#MZpKf; z!VXbT+=rSKex60)<-_)NjXOq0B9#C~S(IWQ&(GTo4iDpEK3VnzXOwIo!^g*mpz&@n zE`t;JBsA0;T9(Jh_`jd}`Tk}~reW<%0xVP}9lZ}tM|2z zygUEl?nsw;dod+_efjETmQxEKEqlZt0Co0^XE@loEpcW*y2F|nUKhc*seM_HLa<*No`t=O52NKV1&Z#UG`Mxtk6eetD| zD^xL-o-4HHPH%Oa;=15x0t$u>(9Yu%-U&)IjAk%tykwlmI;#bCh&r6it6bk(I?-D- z<+8iGdp6@iDCG3HkDh)oRYU*-PdK;SA-fpcsDnl4YW#dta%CMS1V%2in^$Sq3sv zmoML*?fuN*LR$HBCrNI{yY3F}?XC5ty_D$~KP>LH$}Jsq%qRM}XJtqBqeM+7*YFuf zGP2LDw`FGIzQ|KdKzZfhTXPPex2{PwtnH&pX7jDPn0P?>09XdJN?K*Sf>{;S_ zcm*d`ez2Os)(%LAZ1%)Rsx-K2;_Gy-GhuptXmypbCiO&v*yL)!9vH7Q&D{6exQ9Y3 zj~pNnUHozBijq=gxUR<-UCTZGBWNV)SDYnUh%$+nKYQu%`oev`Dee>o`!1^+G@1FYdW|# zVe09z*_E!(%y^ofDrF`)0Q_#}XdtSFQ#)TW<$0FxRdjIOd2$>z&)zp zzh*mAq*ZO?Wg%K)slkO89GZ_%TrAY^nS?j$Z-1b;!n@nQ#N|L5gzzE=q~@5f7E#S4 zV%9B3jo0SMNz0uhxzD8&FBluY-3zcO60B0pd7r_-JBwpK3Asu(KUA8`+ZpPb(EwV zWLx-4$=%`x_$zSX$_b*#;)gv7*#ch^tn$j$H96+8Xp&Mpi1Uc_nkczVgU z3o{E#e|Ek2^#ZyOh;9?qn_TI}r=zFm*aPIQA}gOC5YAQWZd2^6)q57M7kjxxHe28( zZ3lrJtyIRcN~#zZxtH4pt;^AKC-zP@-5p+4Pjv`W;GW1*5~mPw%Z@0bg#d;RB!%(sH{4mL^&X zrtG`Q)kfNX(q3}o7j!24y}SMW`oGsm8%s)nhhRorTu5%W3kk3l7S7s^^F!F>JCvi< z*s2AmgOG!qYus15e7}9W0)SR!N@bH;@X?dgyXRJQEh5sF{+COEKrWlzy0`)hYugV z)qc9a^T&xqZo;yZEx;M3<$tnFN-#P+o*o3h)KSFQq>-3`x&5BKdYeL)ho2fBjA z@n#a}T^{)$3xwVlvJPfd)Jog%3Q@6;(mb=0+0mL3^h9YY+yM7iHnd!`#{fH5HT4p;^^Z?p` zo6zd^LOJ(oFqXP{l^Ahzc_!NcEi#(#W z$iqpL4*CK};APstY~R--ym$5!kRE#|*yHw780wjo+d{1%@zc-(Ys&q=k@-Q)00BE& zCoJz3L_Ej7Y$Jm&4~dMSNrjAP4Qqn`?pqhCfY$<{VG7v?-cud9 zGTPcP3lj`tF7bc>U@a`c>#;+(Sn9t@{hA_&Qn{!|`))HKoCojZ_yJIjQG4xN3 zxb53LIJIAsx}>yHngv{O?czfbU+K%}xp_#i(+W>IgdqsDgLmqYBm3sHbS+NJ+F)hi zdtC*N27}*1kDRwV^N5Tw_`(B%3mGi~wSqlT%F5($1r4LOd+*=Jt%;Lh)JUU-|Kwh< zTgNIzgoO>*I3HCBN!@V?``MTz$746D46Nn}cJ>4Q{{E|g(=;|0Si-8HRKv-ItoNJI z2<{|!fCC4`X(Yz+MtY4cu6sJICecTA^VOM<({uA5me9Yqv+^zWMG9InH2(Yvkh6#hdeTogN!gv3{~? zWrrnSxh#$Qln2rbyiZ97F8HhKOpz}T5=Wh#osXO|e$qa)cFwcp#zP8d+dtUS0?ygl zTyTOSf?^p;W}al+M4%dONUWdaXC=IA8uujXE!(^;8^j95bY7k(rzCJB#6Ss6$jqGm zkRfc@U8vfueCw9K^TIHGC+oiL0MdBn;F4ZCYECV`B)RZ@_+%)*%+XbMAQUMEBtVpYy8sjrWe}h89=% zln`cfo(7-vAmMere&YBj#6zaUnC57V+U2uU)*5D4mkZke>E&ai`i16}8^2O31QFun ze>TbaqMs#Hd4OOynn1~cYbP>oNiTe3qWe zgA(XcR9uC+c__3tHoTaY1;#Dm>$VGbvfH>_7L5TeN6068eQSE^{GrY4%GIm)72lZ7 zx_Q>xVdvuGk59H`6B<+omjj`lsrMOogoVqqZtqu*@EOWW-pzOFytYwy^39H8Ywny# zZY$=Q>aPo4`jtIIGjFhHF(ymh5BnH0t^ zBt!-(Tb5}H=dLOZ?J;9kktv(Bikk zJMOX|ynK9koY&<>SUEUIo12?k^X*Mb@8oxia@_i`4|swjqE6h!P={ba8=c4DY?j{5 zw~H-iYrz;7&#kePU@EqrdxTcK;ztd?q5;W6*Pc}`$<-8V2+7foT&@?K+U=9Xdd|+m z>q`^9jg2Z&GBO)x$#Rt)=aoQ7pcODH&9ffR;`HpTk9-;R=H<&{cMJ`g;94$RxPTK1 zJi;B`$S0AJ{{EDw1@c&Ejlsr|fCu;=Kai+keIszLH_1wB6jK0daIc7LP>Z+e3< zF6Ynkfuy9QD{^vQQAU3g>+*d~#KSs!#xjzV`pkkIPf{dsh5@6B7tW-JlNldlAoztD zrS4|%SChW<#(dRXx2CCauDa`!;#mvaL*tGm8}v3dHb~kiaLH^0(e5Rk86pgUkQ}o zUVo!_dwH@AMW>0$S)?@w(F(#!D@--|eItQ$n4Z^9On2UH|4iY+!QBSKUvw0yq0?Oj zJnm(O)z6y><@*#&Pft^KcMnl;Q>_AUWL1Iu1kf93%;Tb>S|G`QaX{EnR@X&GJ^pFL z(fym9Knwc<@#f(0soKXGPt4H(S9k%0cPoJ6bfQk=K*;9x2e4sUxrnkS{0=1@<{xEf zz&W`tWj&+>E&}LK2{QBZk3lHntS|;717WexVmeVKq#qh4RDMxL&dlTvpCL4vt|n@# zd7~634TuMHxh(UJPXs+=O`T1=qWk0ngdD8#*Qdfb?+QeP#>DJ4B$9f=;#R#F>BmRB zF9%ZJ1~HcOrNnV=Tfx)He1LfXG9Iu5X+LrAO_1d9@LPR-<&RgF=9W7wQ?!Ylp8(^w zxwa7c?Ab$r+y@v$)u*0*BSd{5u@%%Nz#ynU$#h;Yv{>D*2P8Koi@ccU>(q0u(i zu=6z?G#O>qmKA|B4QIT|^)Fahr2l@C4Zu9ex-biz^r!I=^ak6}Yp_$Rs{DKIO&Cjbf5vW=2@Q{d8rXp!t>g1;Qd@OI zEwbMchjQ)UgU?>NTjOf#pUjQ|;z@(`yB)@&@Flm$BM|6o^&D(lg73SBV5=jzC5CbyVy=b zf>F$6k=(W}2n0*dK~4w(kd^_j9HOBadC~0T`EAN#`$?PeIVOJo!+`L7)tUr%m)rAfg~2!7Nw?E={R?d+=EL zWUR;fJrF1ko;r0ZK+ug`JAiag^0Tx1xVxjpQHX5W_en*KwP>Y}Q@aW>6cKF|Wu1>X{hNtqEPR zUz=+h7W16DX`;H6PRL4f7bEw4H|IWLReo5l7qDj;=uwl)UyErLk~+KlO(S(Z*6t$B z2b?5}qZ_Mxua}Y%pMI{UbD=&~jK^_WD@X1G*?IT%bH%IuB#8OrK5{^GQjVd#x|ICT z+S{#-m6L32Bs;5>66ADrlgkR2L6N#xu|O2A;o*sSc@Zr`Cqo7-kFfTyR?4?S{ixuAuR|Y*I33Gv=DOUMkw&#I zeIRrfC)<8b%y1y3YJPipjBV}%DC-?qGgi~UkG|$ z({wBW#QPa`cBwmeUbmkLwKCiIFXHB`+can{uV26Jh4vhLUUT1E&z!I>E(&ck6EFZj z)3>_1<;Y>$W~FBjjfLnAq3uTB-Zs{wqfl>W#uOwJ(pPh7pAIe zK%PRD8@T5===HE$OC1-{J841Tm}i2#BksPgH`bVhJU~vNBbXK7S^FV%eSuWk%<1zD zADQmBGzy(~T$U&OL4Z?22U;;sJO~6M)O55KIA)l%*fX0DlL1{2yz%sEfp8HpE*CG} z-#ysV^+ldL9>_oxx3hWr{(}dvS~i9yN+?D;x*}6jQbM0Tz5nx#QsUdUKr2*mWK8Vo z%0SN}cZbF_gfLQa2o4f>6&z@8y;2PF zp&)CSuG#7np`PjQZs;RXNak8}b>4_HLN6{ARJwSAi5Rmha?;T~2K^kJ=l5x8m!U*5 zxXoTTaD*EJRN%D&<^)4jt8KDD2aXnTJP2QH{lvd!a z_Q7j`@au@KP?VRaLc1*KJPmZ@aJEW)r;;Gjb(*=F^>R*fJ~N1>j7$#`D%c z6>71=`OR=P<$3OG^dSEGSDNMs&B$gbFT{fDe>(*wBw0T4ew0N%k!A5(GW3l(L`VzK&;t`B0_a*504!Zrrh^=N+-a1= z*IxH9EGNBi25W%T>g?@Kpk_?MFE$ze-RYCSY2BA+WdbC5eRt2#F1Yk#!`mP$kW*1T z1n=62twqU}!(>khBlM+25pbVwg5hhh7_CLFf&>TY_CxC^NaJF$n+cp!@4tP1@#4iM z&d(F@Mx2A)`Sxt889G5w#c92^RJfoVmqN*Y@Z`x8FOf+$>*A>ITH4w{z{mrp?FDFn z({cu)>H{czK<^cK@$vHRnjfrcw*W5bK`O*d(l|5l86N2N+;Im-4T09eY3pLHa3JnH zrGfVV3ZdG|6t;+88@cG-9tDD@0vL7D(&D4c(CAG3O1q9dJI@T+a_r}uL_l=~jx!aI zbfDe-mWC)LZRuOLjtp}AJPk?#(u~nCgHLcV0FyB4UIZ@ zCso0w7NUoDrYYfapw(1P3lsE%&?1#*cr3A@Iyv>h&#i7}!*hpBNogm33d`94-0z8K|g`q8C`+PxsUK+>ePRWa;4IBE&#+oZn$8%v)YxcZrZ^ zF=DA)Ff}zrdP-bPQ>&BaNR>$rwEwgN6+yObTVuN&@t*L1^6wq-EM#p$z`S{D!%;jy zRFzfiIt@Ic#%u`$^~wq zh+mf*uHs<<_nx4z(`dhfrW8D@19Dp99}2@59D;< zSrcKWfW)<_`e@R87PPbE3)A2{1=n`X2=DV}&yGt-^awN1({~-G{ITwQ3g8h(s`yO8xFaXNVh*xUt5$WRr}Pl&=**w7^eL{f(cX2{Hf8PiUll`s_ar zjx6q98M+}rB>@n4Q`OGpE>=m%e&)=#H9FlYAh>`PtGaVvC&O1K!}248XH8RQUg8)D zF|p0NmL9&GJDZ>`e?_W>$EMSryLYkYytiLM#Au}bx?4;?Gc*%gXN9CPtjOf_?vVq zdgD~+I#dYoMWC)t&=|MMvo=PA2H7r<#ta^r_u2mVu|-DBqZP>Dm{|V2+WXuRVwZQ24Cets>B`sz*q~Uv{kM9aLv)z$;kwhTY6m7 zqYLQE!J(l($jyj!&Uc()n2n5L;s+04g^xzQ9V^h9s9Oh8Lu99=RXU_XsIDq+wetYc zU+j}swe*J%`#=ODZxiDG!SR;t;LJezZ9)6yO{CU#dhTo?NgCuyoP7?%)uAt=CY_YE z&Twv0p*r2f^$_rEY!WcEB&=bNfk24{ZA znyPB9xG+*duC@A4!b^BH3B@k8Tkqx{8^yC zXwpBHJKZ;yFGFY06GJ(wv=_Yq%6({bP`Ltp9Y1Qn$(k)93;T&|dZC19Y5)u!AmUtx zu$iHsG=xKk94!!T)}ud8K=VH@vfD>IkrRAGMMd>iTcuRUW$_HGl=#--b%4V2a{pDW zp01uU#s%~c2>05m(Ci$XQ4jWsGDrxwv)hoXGw<%r<`zEJ0CXe2Ns=5LXblmh7F}w( zE=rgBWFY!Gs6epSic>azo75d1yJmyJLeX7KR5VOPNazSCEDw|{56m^MiFDH8rA1=Xe+f)phNvp=B5(h(GQ8imZY{d3TZP+*Ecw zlS36nZ)+Aw&tx-+)0Vwn`?)3J8yC=`x{RI>T^kJ3T01$9`Ly-gug%QC`Pmm}KB4mM zU76sDFQbRwE&B8EEtE>74%Q2Vn92}5K0}O7{-gNz1#=)vKoDWq{B!^;sS8&Z-Z&WM zpu~XIw(?8XNBlcb1i@9ZyETPTB4?R!J^3Rsn3s=yS{WHVJ3X9Qzc$6roQ`v&AUsG1 zSt_8V`}$Ok2}*Vdm%cOKa2WO2#*TSDF&Bt`UFKn-=k@;W+fvAOvtLNKj&pG#8;vq_ zSzZ+i$EBo9*f{KG7B=O<*#llA=R9Dr(Aqa!Hsf+qahL0BpQH)L zhwG!TMu3VrG(R0bcdlt*#$I@nKKwbl@m)z=O-*fAgp9v9eeb7Nh&ZmxvRzuDk&@_P z8eh}x#nX_;L&E!lI>Da|=Q9sDfK2xd2f%4AlSLZ$O9npJgwYFn1Dg~8FORaUc&uwy zIVGDEv2Eoz3Ps8G@ZlfekOA@bZAONSl~rc@^RtGqpMZh2?3-_{!f|Zo^u5B43|VUw zF$b}qWw{Sv>91VHwL1?^!9Fg}H4^dl(Ub6jfP>y@C+V}PrlR?qXu(>RbdIOCW!tWjX9pYy$ykrx9rOS~KPKVq0vPH2_OZV};WPO=VkSyGR z(i+MdNT>ndr!o+6fRM$mri$7r*h4gm1_Ms!vztKKCqU@djcjeNlvoO^B!-9w=x+AY zFO)B() z;VW997aS^@TgSo&{MXU}&Bb4MfVyS~_MBjHas;T#>yYku9mW9-#IZ z1EK-p$nA6}z8658sqB*G4|i>Pd(AH(K;=dcw3(=rS5Nz;x|5nnL?>*+j3CG87HECD z=h(332vYmS#Jb)f7c!$~W!D803w@aC!+HBJPXt){A&DLlvO3P980`n!nbHu)23mLK z?XPII0GQakv{-;rNH^r1Nog?tQQ&9^h3u?LEiAR$TsaMz>H+0`I*j&GtW!S`{H!0i z_8ZVk=I?{tNh}0q8St3HQCeV|!HAn_Js@2OiaM!BGB_iIz$gUDIXe5jppQ7paWJ~g z;&`m~5t@PXer#+E#Kn{a*M^1$a3n}Y=}54!5U8d!C(>ThNCBWH;y7IfI57lB7zUtN z)e4w*KUGC4qon`_J6a|}qodi+=1Lg;9t}9Q)eUk(AZUs}9$_C75)z7#jRXS~^ZD~< z=wFSaY*$7b@Gxk62~}|L;-oFOLT_Z=O%C4oVH-s~&8X5(b&h-K2$34`FrzTqoT3&r zK1blWN$*IALJQ3)t+gMNww%qa`QxtG%!gbgRBzu7$_3P~W6=d_s;UHm<+zwuaE>7^ zICiIi4e4x93A)G6L*Mzmx*DgIOwJN~N<*=^zGRHjZfOn*+~+$|;p z^FEB_8Gs66{{C~v=9FWnHdHhqX`c+b;uzhzt4fX55Y=$hjw>Ap?$@Of^*< z2To(0=k`%(y>QWZpx)?@S7<~9am9D5U-W_7=svgwpaDTpu~*DvA*$y%G;rWwfcvIF zN+PBdYBr9UF!A^PYbeSq%ve0W~pBU*0QH_YMg=e!Y_0l+LJQEm{eXTJaL4N6qY$~Zi5VwNRL`|mP9=Dq1Lr=3G4hB+h`9=Y)2ORg7yz)9 zPQ_g$GKjn9FSx?_J$m#g(6eRGzk7YF)k}D-T$4GYT0G<&Xk1b>{df78Vr$<{mLPcm%yb zJlkKooPOSZ{9(aNamQ2!oC@IdA45m$eAfVKE`n7&&}YJ89%o^xNSu+8nno@#++RRN zHgUd^{mtyk=xC-iGx72L9LU{8lEW`eQTFJBYwetp8>D}ouViN%X;aKt!|-6-n)(-{)*5Jlbrr~&uu=i@Quy8LqSy2 zbw3PgsJtOjW-EWqc6J4;3P}rc39&3V4gW}^y@Lq5!{BHT@&dz1?dn`5BiF`epe@X3 z6s~l;3c0U;T-bo!0?|?(m}nT<0Aq0P*nS3@GqznCD!bEwpx7bvdRbW+qO(y5X}Brs z!HGi-8|eK<)WPP2Xk-B8UdG#guTe^4E`tFd%|ae9_UgkBGsrC4IHew~f~>5&1`z;t zxc!-2p?CJUP4h6|^>DdXk{l1*dr#Cfu>{;VS1^NEz@d}U7z~5^;x!0HJxI0P>}{sF z=INSnv;TG44xh?#3fCgQz;PCYGi4POfFUit!Z|rPNLd8Hf*4B>Y;Zu_>$l(b!`-t< ziK){6Z8Xojv<@|oFbPw*y*>dnQaM-`qIT zfa5{G9Kml&4dW*_<@?0FMO(s8?iO0Av!_oJf^vB|gh4F6!FU#U(3o_m#~93!d+50U zpt5pM2UaIiQ3v9~FwibA+~+Y3Mo!d6LW^|*&hNM=of$YKV44RFDx*TEtfuCR})Zbn401Zw_AIQwSg}u>8 zCMhWlOo#!+iIyb5G3e_Z7iuc+Chu+m>@i2pw z2?iCkwup`e^$1z1BLvKkA%+7KeQ+>hBojvtP=tEkhN&9l)D|U9Qze028O(!&S-xTU zXHE!N!?x%|ayg5ciz6jGGX-e)$P6o^O4ruQ8-`tWJrfU$WT_LMpuZ4-$ zR(14X0%X6lw$8E@6&FW!uM*&tva0GZozj&nk}y#Sb`UMaR1h4bkpKPOPnK{p1@Juq zYYB5ceJYi&Wy6#;H3NaI7>NM(3#ee^gGU0jldie^x_kFF zvI~X3d;NOf+S*#(Tm>)A_hHskr|@sxx`p$6%w_>39j$+&q3P znqjC>WT0P|VD1g>;}E}+OA&*QkI(K)ZzwB!L6o1D`1eFmxVJT>=XT1q#0EX6 zafrUuu87jaDFg?I6+F2BMnTrKSd`M(VK^1mm=0P=M`4`qI6i(sB`8Ni9-BfScoC(k z(vpMy1{sJD7w7MPFH^4ZXQaM?ecp}-NvvnL2%8s;5iiVvt^FFa6PHlpsDc@yTWPB3 zJ)vSfsx>6>lcxz0yjf6n=c25v|3WtX{>VJsRvRrGJ4y(!QLY=;2Nbm3vfo)(j%#UF z&@;{^cdsF&LtPTpA)hF;^*H8wC6?vhIMVlXGd^ zHu*)91-R&-dyWU!)%!b*CieS@O`KI7x2J`NJLYtXMU`rUa?#{jSoMt4@jLnI*K_cU z7qh48BQ->no&r0uH=*qBa~|gHKpr04Tt|L|`g)l=cbN4J3~r`Ah6iql27xya5Do`e z0Ah5(-OGrv0^Du@+HdW4;lO6DB$nJv4ptS^*nf?K{+>=pJkhL9sZ{L1m@5wDp*!_C32U3o8tdHj{ciO zKw}@2p>MLLP9tfpuDW_xK>f?a`|qBMhKA;!*ZyC|fd4)*`)As`03_vUT$Xt{_#cy! z0odxH=)%x6ATx)_))W7j7e-VP9Z6*)H8i%g@Hmoxjl2F|4eT$P&`55}&fnDo8-CMo zzq=*{C?PNgulUQesLCAO_V@1;|1pmLw^s9S4;1*vBUpA>ma;ObJ?HtqhwRa9g8&2E z{dLngUyHe}lo)+--IkOJ$h20^0AY0+#1E}pk zbjbhDQ(l6C)V!F{GdlhbX@oeVj~zP(BTb18!a65-_~I?5W5v9&w%*}7^Wz=3PlS6w zk3o+MK(K|CnOSNNw!n`6`IM&@pU&V%hlc)_jX_TcK+lu;%iunY$e;z#+qI2y8MZ`& zjV2%4+>Os}Ui^E<(7>CDxp`XqDW{mfKXJeZEq-0y|L`mXWYv1zGSR#zBS!q*K7Ux> zSMT2=y*Lr()iqu9&XtAz<_}N4BlPK5~TZGwD7m5 zH^AcVJ<4Z|A`styNt4HE=B(a?s#gl1)F94p${;Z@aW^q2v#wM!;uX0LoHXD~&M3gU zqDbJf@+rjCzijRIlPdlYUVh2-C4!|JlN#cKm&~P_F?xho>!qr{;XjLF&My25Tr!fi${* zjK&BIh%LEnG)2}9Q~$Oa=ezyjM+3s{VFNTRI=Z@KVO4`QcHlt7NIE-XvlTt7_kHw; zg~3#SrKn#t(gvji>--*O`gL>|U`;@JrrIqzfOk=|1V-2gm+nm0y{@ggu$pCH{Ir(f z*|XlxN2G6+3b*%-e?;lfYvPp?kI?OZUGJ)_W3w;9< z)5XnKmJGNKc$IzdT%A)Ec$x3<>kH^hO~_gf?=4Q>bBp4&?zVz-?!1WfYzr zq-%()A))mA`E%r;v;y)MvhO}A__#56z|ZQ=RF|n4)e=L++?%dO;-qIPkEv7xXi9(h zsN!&)c#_zQZ-X&V+5hf-_>qKD7btX$A1CNb$~HYH_Sz@^`3MtncWDCoYy2<@^0wDD z_oU7=<9c6xXFk-v6-VQm@5|7ecfg`@d1Z^a_Q!{xTVh9Fiq}kg8bZ7IJ~h?Mb~yW_ zQNV~$b4!aUm@3aZ&Gw!uIYVJXFx%(5Wc0EnLuvJBX?}iw>)dp6N=whSPCdQm4d$Gr$3&2O&$o7atlAiMWw4%)oOxV-cddg#DVy_n^ zkH1P38mXb50Wk+!M@29c8}iCIcz!xm&P47+v0BgdO7gzv(XB4^8griPraCMh&b_(* z(YT$JRH=!PoprTEYa+(-?zvA9w?0JCUZaw9(sw>QTdqmMZur9O+t#;}4RS?`6D`XV zpY;lKa4Y)%{9@t014{XJV~vKUXyWc1j38Xca==Tz!%G?ms~SIRvUDN__(O7oSbPkQa%)*wdH%>p>J4K+3D@I7~=VH##X27ub+Xz=pDc( zkNueb#H>pLc#~8ZyMw_Ro@^-#IrMpx!_rhOI1f*Ek{rQ!1qZg1DQR#Gu9eU%PNsr1 z_a5PN@B&=DdbJV!m|G02eaJuxV<%@%p1cIe@TI8p2Y3L@CIed^=;;Z!zdm{gq{LMv zr51RcRvPH>t757JSgXGKsNVsz)fgIUb&Y=L0`%RpXV0332f$^v;F|g{B`vKPn85dd zUIEFmQW1}B%#^ISvVY{G_AU+kMOmq;2+!{jWP>M-fFG#^26yBKIk~vh051dm1P_Nv z2BCG_n~>oL@afNEW2aY~h$s&bECFj}TILJ&;Mrvj8@)?}1nF2zjOqaPt^=>!*uWbYQ|+QDS>F@&4!IH1`Gk z_`D?PV0bG7dSh*}O6!93I^;n51!504QANA#eky1byJ1aCOyI#voFy`HZ(%h}z=wNG z$SNK@d2iMhMpA$+YX|pgXHQ~Q)-^Km)p+K6K(4wRq+oQ1JpnwHIA)BR<*jXY#x6Xh>ozB~smfWtI2QLOu*sT%+JCIq^= zrZ-BAOVeE)GocjYV1#T666}5pMyDW{@PjFy2h$}x9$hxo93CN$9Hepfk%xnKMYf@% z_f|t=V*;>XDOl_+;FXj*H-H3}hgR-6v(Lp7kksV*tki){R<^dDySsAqyxrR`eVJeS ztfDSDo&q+c5t?_Pypw>JyQ!*r^(oxRM+o>lqat_!tMJ2! ztwNl*Hu#Isx+8lBS^%(B!Jv`Ya9vw0e<`vZ;<-$}q0C7kILg!ANcb ztv#{NMR=_hWJ1UbjSwa0On%y0l-N^d=t*JDFd2(oK|Bve zUxx?5z?-3~geF+F5hiICLDbe-TG@oL%|!t2#$bSkomrI|-Yh7XNH6#Z&+dX}hnX}a zTn1leCb9-sR7k@{N5Djg2|UsOZM1+{Ydp9vG|=^fS7(cXbn5X6<_l$YxHs0x^n#7e z2Wk$D*FedR0`CMz!-2ocu8@h&@+S=Mt;S{;%9m$a1 z#=(4dmV={c(gT918AjOBA@rd+?`{O1H+_{3o?CaVB+%k0%>jZO@SV%50C9jy9jxy= zc!l-Q)=;?aIiR#)cwDwC-~PIVg@x9Jy&V|XLbkB+@shAoD&W*WEBSXa2!&pe z0=?}AD7nnC;OB3Fb|=SfOraV)r+t2o@ra5zTi7d1k#Wh3T$bn`R z|G|Zl%6l}x5gp^!^8!?O&U4#sXk^3`#%isnHo%jtJ->~G_cMiO?X3?-Spr8`D7Oqg zk_KQYKf;t-5%9}r+1U$|*Wd{j_8_O`F_yr=qL=W{a_qGBg$9>u|GpbKI_W^QsX_3^ zZ1-%yaLgjC%zL=sV=$L>kWQ#~88M4b0Lsk2TP zR$WflZO%srrYA{{aF@=6wm-L33^nt zcaz}QI81lG0|8S87F7+NvjnH;jc1C?M3#k_Srdp>so?Y|k+~WH^O)tFBTX+0mfW9Y z`rz&_d-d)e>oS2mYrY8|-9g9k9e(JICLmUu5Elys0t%Az4wDgJ37uLoCRzeY-WY5e zaAB%o+Cjc*I4kdf^-te&T^dgs9yYwpbV#-lIa7>+SEf4NAg}y)ofN3PWpy8>+OlO7 z6cn;5AJdC`QfLdKVsnLN|C*d!plX^%5~R0^?QP&4Anho1MuI_(ir7b=5!fgw2x<-v z4sSf_N5FY_6ZQybo~fP^UBG+9`*2?hn7`~vJXHfs>PHaAIMg#GLHJPyMD~J9*Q2~# zcC?JH_X5mKh7E%MY?C2L8+3$n+5ABRFnD={yxe4uQ2zouguJB!{mZoY+^#f7xc<5a4cGYcPA^u_v>vnb@kCx`S7d2rea~Y zI)je#Rn)>Gau!y`_9rXGj3esC#N>T-U7Z8m@ie&fJwl#a!9Li&QvL?@4y(sK3iY#p z<;pBh?)?X+-zdhYz*F1CCnlP+jg;Wr2!>u^UMBElBe?*uBAvtW@?{^i;=sPnyfg%< zAr3^TWN?m5&%jem zF~iCj91Q01?L+%T?-?5_gKgd(=$pHShU;RA1=c%QD-*DQ`MV}v72uN_{PYY#6$=X~ zYXb7Tt7^8sK6PL84gEV`s3T}Y3Wx9mJf02e#V!>3X3qMrYsUqe^AgTJ42Js=?tX-6 zQoQ>7hi;bAaB3-o936Snmij;59|nMyT^~9a?P48Rw#i`vd~$|cI{1Y!DfWN<1g#{{ zK1*bb9e3ZgZ1iDvMBfdV zzkta<_kqE9@c|`#Kb??d&yU4T?k);-5{>m p3*tZT^_MXF``!Hi`~{n|mq!nkwPg!Bz(QbTFDpu=U(~z*zW@}HpJ4z1 literal 24285 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 literal 22200 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 GZv7v7Yx}|g diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah03_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah03_test_line_line_intr_later.png index b613dddbc82877a80717ebcd98d569ab81a8c6fb..6bfa5428e446c67efc7142a7a233026a804f1ba1 100644 GIT binary patch literal 20764 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 literal 21833 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ah04_test_line_line_intr_later.png b/imgs/test_geometry/test_extrapolated_intersection/out/ah04_test_line_line_intr_later.png index cbda9d8c571158f870dfcdca6e49c630aa68d21c..9c8a3bddf0141b4b48548216b2abb3a544f378a0 100644 GIT binary patch literal 21710 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 literal 22961 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 JWt~$(6955Ua>xJx diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai01_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai01_test_one_moving_one_stationary_no_intr.png index a0f8092cdccacc7044c176274d1387927617bc9b..e2d0fc53379802bea4e9f37756fd707634091dd1 100644 GIT binary patch literal 26803 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 bU~|U>{!J^mbQdpl!5>|1!}ZtJ+8q8b2|4fp literal 31800 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 ZXvvY4JK3%+$JXDJLrQ9jiTe$&{tqo{Vf_FA diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ai02_test_one_moving_one_stationary_no_intr.png b/imgs/test_geometry/test_extrapolated_intersection/out/ai02_test_one_moving_one_stationary_no_intr.png index 9845f33f15966cb811ceb7a2c34c90e2c84e1687..0f723947cfb494b26ac4ddcf6e929ebb383059ff 100644 GIT binary patch literal 29276 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 EKZt;1%>V!Z literal 32981 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 PIij@Gb=C4tSp@$t)f4Pv diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab02_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab02_test_point_line_touching.png index d010275cf25dc73120a234cb730549e2a93fd4e1..e46d8284f3682bcf06203a98de56fb3814b31efe 100644 GIT binary patch literal 17579 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 X9;#?hFyIEeE((2C`ApiWD|i1F%Ei{G literal 21204 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab03_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab03_test_point_line_touching.png index b0f07d9a7da406eb2d429013cc9613af155867af..a30b501e527f4e747cfda47377f65e68e1e392cb 100644 GIT binary patch literal 17028 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 literal 19010 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 X%-G2?7IhD+gCr|;Q8G*7@}2(&5V8eB literal 7373 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 z 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 P@ff17a}86ZMF{zSxP3F= diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aj03_test_one_moving_one_stationary_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/aj03_test_one_moving_one_stationary_touching.png index 06894f788e0488428b02e9110f2403c605847c27..7518968f54bc142ad5a6882b99e716d8829c9fc1 100644 GIT binary patch literal 25401 zcmcG$2{@JQ_cpuEk!_yGQXwJATqs2{E5kNVnTN{EHqX;G zPno`T_l&>)|9JoJ@qOR>I*y*6YVUjB_jRpnt#h5{xpt7&H5Cd{Mp6_CMWK2{@dgTo z?}tL+jSv&T--!IcPQY&jjtZ(e#PH)qd^ZsOOk#IM-w}nPx{dt8`y`k80EJ>hsVZL5 zaeK2c=xOx&=E2eB_KO#j&I=^@Jtw`#X&IwsqM)IqePS&lE#6vezEIbszscxU&tjg1 ze$<0}OyuC8gGh&n(l;^_(yPYbtly{k-6ka_XDh@=SIDKr(wp7A7ejVⅆWIi~4?o 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 A^Z)<= literal 5879 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/aj04_test_one_moving_one_stationary_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/aj04_test_one_moving_one_stationary_touching.png index bcfb27db9d4a34e88dbf44aaa635110f3d22c8ec..6fd139b3f03b15c43072a59eb41c1c6b932bcde3 100644 GIT binary patch literal 28013 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ab04_test_point_line_touching.png b/imgs/test_geometry/test_extrapolated_intersection/out/ab04_test_point_line_touching.png index c40d8d6fe20bbf57eed07c3bbeada74e7ef1b51b..2a69477d130e0ea42388f3d1d6e796b525a39b1a 100644 GIT binary patch literal 23654 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 Ixkse`1I$BnFaQ7m literal 5002 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 diff --git a/imgs/test_geometry/test_extrapolated_intersection/out/ac01_test_point_line_touching_at_start.png b/imgs/test_geometry/test_extrapolated_intersection/out/ac01_test_point_line_touching_at_start.png index 82c60d52c17aa7c47b9200f1bfa2a9f616610eb8..dd758d28d0d5707521ecf5165993d16b93b889d0 100644 GIT binary patch literal 19369 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 literal 4535 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 literal 3700 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