From d223a1cf294ffd0be70d14041ea7d7c0b983f975 Mon Sep 17 00:00:00 2001 From: Scratchcat1 Date: Tue, 19 Sep 2017 15:32:56 +0100 Subject: [PATCH] Add files via upload -Minor bug fixes. -Starting development of Thread_Controller which will be used to control GPIO pins and LEDs on Drones. Could be used to enable a PreventFlight switch to maintain the drone. Process creation could also be added, and implemented in Server_Starter. -Improved performance of AStar and CAStar by merging some if statements. Memory usage is also improved for multiple searches. -Moved Coordinate object into own file. This is to reduce fragmentation of features as many modules require it. --- AATC_AStar.py | 107 +- AATC_Coordinate.py | 24 + AATC_Create_Graph.py | 11 +- AATC_Drone.py | 16 +- AATC_GPIO.py | 186 + AATC_Monitor_Viewer.py | 9 +- AATC_NoFlyZoneGrapher.py | 10 +- AATC_Server_002.py | 15 +- AATC_Server_Starter.py | 12 +- CAStar.c | 7104 ++++++++++++++++++++------------------ CAStar.pyx | 88 +- CAStar.so | Bin 297940 -> 299260 bytes 12 files changed, 4031 insertions(+), 3551 deletions(-) create mode 100644 AATC_Coordinate.py create mode 100644 AATC_GPIO.py diff --git a/AATC_AStar.py b/AATC_AStar.py index 2c26544..4e48a7d 100644 --- a/AATC_AStar.py +++ b/AATC_AStar.py @@ -1,17 +1,10 @@ import os,pickle,heapq,time,math,hashlib +from AATC_Coordinate import * try: _ = math.inf except: print("You do not have math.inf object, Python 3.5 onwards. Will use replacement.") math.inf = 10**20 -class Coordinate: - def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - self.x = x - self.y = y - self.z = z - self.xSize = xSize - self.ySize = ySize - self.zSize = zSize class DynoGraph: """ Graph object @@ -41,16 +34,20 @@ def Size(self,xSize,ySize,zSize): self.xSize = xSize self.ySize = ySize self.zSize = zSize + + def Get_Size(self): + return self.xSize, self.ySize, self.zSize + def add_node(self,node): - self.Nodes[node.NodeID] = node + self.Nodes[node.Get_NodeID()] = node def clean_edges(self): print("Cleaning edges...") for item in self.Nodes.values(): for num in item.Friends: friend = self.Nodes[num] - if item.NodeID not in friend.Friends: - friend.add_friend(item.NodeID) + if item.Get_NodeID() not in friend.Friends: + friend.add_friend(item.Get_NodeID()) def Add_Edges(self,xRange,yRange,zRange): @@ -66,7 +63,7 @@ def Add_Edges(self,xRange,yRange,zRange): for node in self.Nodes.values(): - friends = self.CalculateNeighbours(node.NodeID,self.xCount,self.yCount,self.zCount) + friends = self.CalculateNeighbours(node.Get_NodeID(),self.xCount,self.yCount,self.zCount) for friend in friends: node.add_friend(friend) @@ -163,12 +160,12 @@ def Node_Cache_Hash(self,Key): def Build_Node_Cache(self): self.Node_Cache = {} for node in self.Nodes.values(): - x = node.Coords.x + 0.25*self.xSize #Prevents floating point rounding errors - y = node.Coords.y + 0.25*self.ySize - z = node.Coords.z + 0.25*self.zSize + x = node.Coords.Get_X() + 0.25*self.xSize #Prevents floating point rounding errors + y = node.Coords.Get_Y() + 0.25*self.ySize + z = node.Coords.Get_Z() + 0.25*self.zSize mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) - self.Node_Cache[(mx,my,mz)] = node.NodeID + self.Node_Cache[(mx,my,mz)] = node.Get_NodeID() def Save_Node_Cache(self): print("Preparing to save Node Cache") @@ -294,8 +291,8 @@ def SaveNodes(self): Sets[x] = {} #Creates sets for each block for node in self.Nodes.values(): - r = self.Hash(node.NodeID) - Sets[r][node.NodeID] = node + r = self.Hash(node.Get_NodeID()) + Sets[r][node.Get_NodeID()] = node for Set in Sets: #Set = BlockID @@ -308,6 +305,10 @@ def SaveNodes(self): def EvictNode(self,NodeID): #Removes a node from the Nodes dict if NodeID in self.Nodes: self.Nodes.pop(NodeID) + return True + else: + return False + class Node: @@ -319,13 +320,21 @@ def __init__(self,NodeID,Cost,Coords): def add_friend(self,friend): if friend not in self.Friends: self.Friends.append(friend) + + def Get_NodeID(self): + return self.NodeID + def Get_Friends(self): + return self.Friends def Get_Coords(self): return self.Coords def Get_Cost(self): return self.Cost def EstimateDistance(Node,Target,xSize,ySize,zSize): - return abs(Node.Coords.x-Target.Coords.x)/xSize+abs(Node.Coords.y-Target.Coords.y)/ySize+abs(Node.Coords.z-Target.Coords.z)/zSize + Node_Coords = Node.Get_Coords() + Target_Coords = Target.Get_Coords() + return abs(Node_Coords.Get_X()-Target_Coords.Get_X())/xSize+abs(Node_Coords.Get_Y()-Target_Coords.Get_Y())/ySize+abs(Node_Coords.Get_Z()-Target_Coords.Get_Z())/zSize + def AStar(graph,start,target,xSize=1,ySize=1,zSize = 1): # Set all g to node_count + 1 StartTime = time.time() ClosedSet = {} #Dict to hash find closed nodes @@ -356,7 +365,7 @@ def AStar(graph,start,target,xSize=1,ySize=1,zSize = 1): # Set all g to node_c OpenSet.pop(current) ClosedSet[current] = 1 - for NodeID in graph.Nodes[current].Friends: + for NodeID in graph.Nodes[current].Get_Friends(): if ClosedSet.get(NodeID) != None: continue if OpenSet.get(NodeID) == None: @@ -366,7 +375,7 @@ def AStar(graph,start,target,xSize=1,ySize=1,zSize = 1): # Set all g to node_c if tScore >= g[NodeID]: continue cameFrom[NodeID] = current - g[NodeID] = tScore + graph.Nodes[NodeID].Cost + g[NodeID] = tScore + graph.Nodes[NodeID].Get_Cost() f[NodeID] = g[NodeID] + EstimateDistance(graph.Nodes[NodeID],graph.Nodes[target],xSize,ySize,zSize) EndTime = time.time() print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") @@ -379,16 +388,13 @@ def AStar(graph,start,target,xSize=1,ySize=1,zSize = 1): # Set all g to node_c def AStar2(graph,start,target,xSize=1,ySize=1,zSize = 1): # Set all g to node_count + 1 StartTime = time.time() - xSize,ySize,zSize = graph.xSize,graph.ySize,graph.zSize + xSize,ySize,zSize = graph.Get_Size() ClosedSet = {} #Dict to hash find closed nodes OpenSet = {start:1} cameFrom = {} g,f = {},{} - for NodeID in graph.Nodes: - g[NodeID] = math.inf - f[NodeID] = math.inf g[start] = 0 f[start] = EstimateDistance(graph.GetNode(start),graph.GetNode(target),xSize,ySize,zSize) @@ -409,24 +415,30 @@ def AStar2(graph,start,target,xSize=1,ySize=1,zSize = 1): # Set all g to node_ OpenSet.pop(current) ClosedSet[current] = 1 - for NodeID in graph.GetNode(current).Friends: - if ClosedSet.get(NodeID) != None: + + for NodeID in graph.GetNode(current).Get_Friends(): + if NodeID in ClosedSet: continue - if OpenSet.get(NodeID) == None: + + if NodeID not in OpenSet: OpenSet[NodeID] = 1 - - if NodeID not in g: #if not in g it is not yet in f also g[NodeID] = math.inf f[NodeID] = math.inf - tScore = g[current]+ graph.GetNode(NodeID).Cost + NewNode = graph.GetNode(NodeID) + tScore = g[current] + NewNode.Get_Cost() if tScore >= g[NodeID]: continue cameFrom[NodeID] = current g[NodeID] = tScore - f[NodeID] = g[NodeID] + EstimateDistance(graph.GetNode(NodeID),graph.GetNode(target),xSize,ySize,zSize) + f[NodeID] = g[NodeID] + EstimateDistance(NewNode,graph.GetNode(target),xSize,ySize,zSize) + + f.pop(current) #These values will not be refered to again since the current NodeID has been moved to the closed set . This therefore reduces memory usage very slightly + g.pop(current) + + EndTime = time.time() - print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") + print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds."+" Total Expanded:"+str(len(cameFrom))) if Found: return FindPath(cameFrom,current) else: @@ -440,11 +452,10 @@ def FindPath(cameFrom,current): while current in cameFrom: current = cameFrom[current] path.append(current) - print("Total expanded:"+str(len(cameFrom))) return path[::-1] -def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 2000000): +def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 80000): import random,sys graph = DynoGraph(BlockSize= BlockSize) graph.ImportGraph() @@ -468,7 +479,31 @@ def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 2000000): - +def CAStarBenchmark(Random = False): + graph = DynoGraph() + graph.ImportGraph() + if Random: + import random + source = random.randint(1,80000) + target = random.randint(1,80000) + else: + source = 1 + target = 80000 + print("ok") + _ = AStar2(graph,source,target) + + print("--- AStar2 ---") + for x in range(3): + _ = AStar2(graph,source,target) + print("--------------") + print() + print("--- CAStar2 ---") + import CAStar + for x in range(3): + _ = CAStar.AStar2(graph,source,target) + print("--------------") + print("") + diff --git a/AATC_Coordinate.py b/AATC_Coordinate.py new file mode 100644 index 0000000..cbcdd52 --- /dev/null +++ b/AATC_Coordinate.py @@ -0,0 +1,24 @@ +class Coordinate: + def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): + self.x = x + self.y = y + self.z = z + self.xSize = xSize + self.ySize = ySize + self.zSize = zSize + + def Get_X(self): + return self.x + def Get_Y(self): + return self.y + def Get_Z(self): + return self.z + + def Print(self): + print("Coordinate:") + print("X: {:<8} xSize:{:<8}".format(round(self.x,7),self.xSize)) + print("Y: {:<8} ySize:{:<8}".format(round(self.y,7),self.ySize)) + print("Z: {:<8} zSize:{:<8}".format(round(self.z,7),self.zSize)) + + def __str__(self): + return str((round(self.x,8),round(self.y,8),round(self.z,8))) diff --git a/AATC_Create_Graph.py b/AATC_Create_Graph.py index 03ab77e..6034a63 100644 --- a/AATC_Create_Graph.py +++ b/AATC_Create_Graph.py @@ -1,15 +1,6 @@ #Create graph module import decimal,AATC_AStar - -class Coordinate: - def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - self.x = x - self.y = y - self.z = z - self.xSize = xSize - self.ySize = ySize - self.zSize = zSize - +from AATC_Coordinate import * def drange(start,end,step): step = decimal.Decimal(step) diff --git a/AATC_Drone.py b/AATC_Drone.py index 5e86b03..1fa51f9 100644 --- a/AATC_Drone.py +++ b/AATC_Drone.py @@ -1,19 +1,5 @@ import socket,codecs,ast,recvall,sys,heapq - - -class Coordinate: - def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - self.x = x - self.y = y - self.z = z - self.xSize = xSize - self.ySize = ySize - self.zSize = zSize - def Print(self): - print("Coordinate:") - print("X: {:<8} xSize:{:<8}".format(round(self.x,7),self.xSize)) - print("Y: {:<8} ySize:{:<8}".format(round(self.y,7),self.ySize)) - print("Z: {:<8} zSize:{:<8}".format(round(self.z,7),self.zSize)) +from AATC_Coordinate import * class DroneInterface: diff --git a/AATC_GPIO.py b/AATC_GPIO.py new file mode 100644 index 0000000..a5cc03c --- /dev/null +++ b/AATC_GPIO.py @@ -0,0 +1,186 @@ +import threading,queue,time,random +import RPi.GPIO as GPIO + +#GPIO.setmode(GPIO.BOARD) + +#GPIO.setup(11, GPIO.OUT) #red +#GPIO.setup(13, GPIO.OUT) #amber +#GPIO.setup(21, GPIO.OUT) #green +#GPIO.setup(26, GPIO.IN) #button + +class GPIO_Thread_Controller: + def __init__(self,Command_Queue): + self.Command_Queue = Command_Queue + self.Threads = {} + self.Thread_Queues = {} + + def Create_Thread(self,Thread_Name): + Thread_Queue = queue.Queue() + thread = threading.Thread(target = GPIO_Thread,args = (Thread_Name,Thread_Queue)) + self.Threads[Thread_Name] = thread + self.Thread_Queues[Thread_Name] = Thread_Queue + thread.start() + + def PassData(self,Thread_Name,Data): + self.Thread_Queues[Thread_Name].put(Data) + + def Main(self): + Exit = False + while not Exit: + try: + Request = self.Command_Queue.get() #(Thread_Name/Controller command,"Command",Args) + self.Command_Queue.task_done() + + if Request[0] == "Controller": + Command,Args = Request[1],Request[2] + if Command == "Create_Thread": + self.Create_Thread(*Args) + elif Command == "Close_Thread": + self.Close_Thread(*Args) + elif Command == "Exit": + self.Exit = True + elif Command == "Reset": + self.Reset() + else: + self.PassData(Request[0],(Request[1],Request[2])) + + + + + + except Exception as e: + print("Error in GPIO_Thread_Controller",e) + + def Close_Thread(self,Thread_Name): + Thread = self.Threads.pop(Thread_Name) + Queue = self.Thread_Queues.pop(Thread_Name) + Queue.put(("Exit",())) + print("GPIO Controller closed Thread",Thread_Name) + + + + def Reset(self): + print("Reseting GPIO Threading Controller...") + Thread_Names = list(self.Threads.keys()) + for Thread_Name in Thread_Names: + self.Close_Thread(Thread_Name) + print("Reset GPIO Threading Controller") + + + + + + + +def GPIO_Thread(Thread_Name,GPIO_Queue): + Exit = False + Function = BlankFunction + FuncArgs = () + while not Exit: + try: + FuncReset = Function(Thread_Name,*FuncArgs) #calls the function passed to the thread + + if FuncReset: + Function,FuncArgs = BlankFunction,() #Resets commands. Allows function to exit itself. + + if not GPIO_Queue.empty(): + Data = GPIO_Queue.get() + GPIO_Queue.task_done() + Command,Arguments = Data[0],Data[1] + + if Command == "Function": + Function, FuncArgs = Arguments[0],Arguments[1] + elif Command == "Exit": + Exit = True + + except Exception as e: + print("Error occured in GPIO_Thread",Thread_Name,".",str(e)) + Function,FuncArgs = BlankFunction,() #Resets commands to prevent large prints + + + + + +def Create_Controller(): + q = queue.Queue() + g = GPIO_Thread_Controller(q) + t = threading.Thread(target = g.Main) + t.start() + return q + + + + + + +""" +Thread_Name is common to all processes accessing the Thread_Controller. +EG 'RED' will always reference the thread 'RED'. +Pin Number is not fixed per thread. Threads can control multiple pins or none at all. A new function can change the pins a Thread is controlling. + + +def Command(Thread_Name,arg1,arg2...): + run function code + ... + ... + ... + end of function code + return True/False # return FuncReset value. If True, function will not be repeated. If False, will continue until new command arrives + +""" + + +# Example functions + +def BlankFunction(Thread_Name): + time.sleep(0.2) + return False + +def DisplayName(Thread_Name,Sleep_Time): + print("Message from Thread",Thread_Name,". Sleeping for time",Sleep_Time) + time.sleep(Sleep_Time) + return False + + +def BlinkTest(Thread_Name,pin,frequency,cycles): #prints demonstration of blinking pin in text, Frequency in Hz, cycles = repeats till check for new instruction + pauseTime = 1/(frequency*2) + for x in range(cycles): + print("Activating blink pin",pin, "Cycle:",x) + time.sleep(pauseTime) + print("Deactivating blink pin",pin, "Cycle:",x) + time.sleep(pauseTime) + return False + +def PatternTest(Thread_Name, Pattern ,ReferenceTime=1): + try: + GPIO.setmode(GPIO.BOARD) + GPIO.setup(11, GPIO.OUT) #red + GPIO.setup(13, GPIO.OUT) #amber + GPIO.setup(21, GPIO.OUT) #green + #Pattern consists of a list with tuples of (Pin,State,WaitTime) + for Step in Pattern: + Pin = Step[0] + State = Step[1] + WaitTime = Step[2] + + GPIO.output(Pin,State) + print("Thread {} | Pin {:>3} | State {:>2} | WaitTime {:>4}".format(Thread_Name,str(Pin),str(State),str(WaitTime))) + time.sleep(WaitTime*ReferenceTime) + except Exception as e: + print("Exception in PatternTest",e) + finally: + GPIO.cleanup() + return False + +def PatternGenerator(PinSet=[11,13,21],StateSet = [0,1] ,Length = 50 ,MinTime = 0.1 ,MaxTime = 1 , RoundingTime = 2): + Pattern = [] + for x in range(Length): + Pattern.append(( + random.choice(PinSet), + random.choice(StateSet), + round(random.random()*(MaxTime-MinTime)+MinTime,RoundingTime) + )) + return Pattern + + + diff --git a/AATC_Monitor_Viewer.py b/AATC_Monitor_Viewer.py index e547c48..23316ab 100644 --- a/AATC_Monitor_Viewer.py +++ b/AATC_Monitor_Viewer.py @@ -1,4 +1,5 @@ import pygame,AATC_Monitor,time,ast,sys +from AATC_Coordinate import * pygame.init() _images= {} @@ -25,14 +26,6 @@ def MaxLimit(value,Max): value = Max return value -class Coordinate: - def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - self.x = x - self.y = y - self.z = z - self.xSize = xSize - self.ySize = ySize - self.zSize = zSize class Camera: diff --git a/AATC_NoFlyZoneGrapher.py b/AATC_NoFlyZoneGrapher.py index 2c0e2e3..9f7e1a4 100644 --- a/AATC_NoFlyZoneGrapher.py +++ b/AATC_NoFlyZoneGrapher.py @@ -1,13 +1,5 @@ import AATC_DB,AATC_AStar,ast,time - -class Coordinate: - def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - self.x = x - self.y = y - self.z = z - self.xSize = xSize - self.ySize = ySize - self.zSize = zSize +from AATC_Coordinate import * class NoFlyZoneGrapher: """ Selects all NoFlyZones, calculates the nodes which they correspond to and modifies the cost of those nodes diff --git a/AATC_Server_002.py b/AATC_Server_002.py index a2099ac..6c800a9 100644 --- a/AATC_Server_002.py +++ b/AATC_Server_002.py @@ -1,6 +1,5 @@ import codecs,ast,AATC_DB,socket,recvall,os,AATC_AStar,math,random,time,pickle -##def GetTime(): -## return time.strftime('%Y-%m-%d %H:%M:%S') +from AATC_Coordinate import * def GetTime(): return int(time.time()) @@ -37,18 +36,6 @@ def DeltaCoordToMetres(aCoord,bCoord): Distance = math.sqrt(mdx**2 + mdy**2 + dz**2) return Distance - -class Coordinate: - def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - self.x = x - self.y = y - self.z = z - self.xSize = xSize - self.ySize = ySize - self.zSize = zSize - def __str__(self): - return str((round(self.x,8),round(self.y,8),round(self.z,8))) - diff --git a/AATC_Server_Starter.py b/AATC_Server_Starter.py index 4dd8552..967333e 100644 --- a/AATC_Server_Starter.py +++ b/AATC_Server_Starter.py @@ -1,16 +1,6 @@ import multiprocessing,socket,AATC_NoFlyZoneGrapher import AATC_Server_002 as AATC_Server - -class Coordinate: - def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - self.x = x - self.y = y - self.z = z - self.xSize = xSize - self.ySize = ySize - self.zSize = zSize - def __str__(self): - return str((round(self.x,8),round(self.y,8),round(self.z,8))) +from AATC_Coordinate import * def UserProcessSpawner(): diff --git a/CAStar.c b/CAStar.c index bd6a30c..8282d2e 100644 --- a/CAStar.c +++ b/CAStar.c @@ -757,10 +757,6 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject /* GetBuiltinName.proto */ static PyObject *__Pyx_GetBuiltinName(PyObject *name); -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - /* RaiseDoubleKeywords.proto */ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); @@ -769,6 +765,10 @@ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ const char* function_name); +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + /* PyObjectSetAttrStr.proto */ #if CYTHON_USE_TYPE_SLOTS #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) @@ -993,11 +993,6 @@ static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name /* append.proto */ static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x); -/* WriteUnraisableException.proto */ -static void __Pyx_WriteUnraisable(const char *name, int clineno, - int lineno, const char *filename, - int full_traceback, int nogil); - /* pop_index.proto */ static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix); static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix); @@ -1054,16 +1049,6 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, i PyObject_RichCompare(op1, op2, Py_EQ) #endif -/* None.proto */ -static CYTHON_INLINE long __Pyx_div_long(long, long); - -/* UnaryNegOverflows.proto */ -#define UNARY_NEG_WOULD_OVERFLOW(x)\ - (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) - -/* None.proto */ -static CYTHON_INLINE long __Pyx_mod_long(long, long); - /* FetchCommonType.proto */ static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); @@ -1174,6 +1159,9 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); /* CIntFromPy.proto */ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); +/* CStringEquals.proto */ +static CYTHON_INLINE int __Pyx_StrEq(const char *, const char *); + /* CheckBinaryVersion.proto */ static int __Pyx_check_binary_version(void); @@ -1183,6 +1171,7 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /* Module declarations from 'CAStar' */ static float __pyx_f_6CAStar_EstimateDistance(int, int, int, int, int, float, float, float); /*proto*/ +static PyObject *__pyx_f_6CAStar_FindPath(PyObject *, int); /*proto*/ static float __pyx_f_6CAStar_GetxCoord(int, int, int, int, float, float, float); /*proto*/ static float __pyx_f_6CAStar_GetyCoord(int, int, int, int, float, float, float); /*proto*/ static float __pyx_f_6CAStar_GetzCoord(int, int, int, int, float, float, float); /*proto*/ @@ -1192,8 +1181,8 @@ int __pyx_module_is_main_CAStar = 0; /* Implementation of 'CAStar' */ static PyObject *__pyx_builtin_open; static PyObject *__pyx_builtin_ValueError; -static PyObject *__pyx_builtin_max; static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_max; static const char __pyx_k_A[] = "A:"; static const char __pyx_k_B[] = " B:"; static const char __pyx_k_N[] = "N"; @@ -1209,11 +1198,11 @@ static const char __pyx_k_y[] = "y"; static const char __pyx_k_z[] = "z"; static const char __pyx_k_NC[] = "NC"; static const char __pyx_k__5[] = ""; -static const char __pyx_k__6[] = "_"; +static const char __pyx_k__6[] = "*"; +static const char __pyx_k__7[] = "_"; static const char __pyx_k_mx[] = "mx"; static const char __pyx_k_my[] = "my"; static const char __pyx_k_mz[] = "mz"; -static const char __pyx_k_np[] = "np"; static const char __pyx_k_os[] = "os"; static const char __pyx_k_rb[] = "rb"; static const char __pyx_k_wb[] = "wb"; @@ -1261,6 +1250,9 @@ static const char __pyx_k_Count[] = "Count"; static const char __pyx_k_Delta[] = " Delta:"; static const char __pyx_k_FLUSH[] = "FLUSH"; static const char __pyx_k_Found[] = "Found"; +static const char __pyx_k_Get_X[] = "Get_X"; +static const char __pyx_k_Get_Y[] = "Get_Y"; +static const char __pyx_k_Get_Z[] = "Get_Z"; static const char __pyx_k_Graph[] = "Graph"; static const char __pyx_k_Nodes[] = "Nodes"; static const char __pyx_k_Value[] = "Value"; @@ -1269,7 +1261,6 @@ static const char __pyx_k_close[] = "close"; static const char __pyx_k_gNode[] = "gNode"; static const char __pyx_k_graph[] = ".graph"; static const char __pyx_k_heapq[] = "heapq"; -static const char __pyx_k_numpy[] = "numpy"; static const char __pyx_k_print[] = "print"; static const char __pyx_k_range[] = "range"; static const char __pyx_k_start[] = "start"; @@ -1318,8 +1309,9 @@ static const char __pyx_k_hashlib[] = "hashlib"; static const char __pyx_k_heapify[] = "heapify"; static const char __pyx_k_prepare[] = "__prepare__"; static const char __pyx_k_randint[] = "randint"; -static const char __pyx_k_FindPath[] = "FindPath"; static const char __pyx_k_Get_Cost[] = "Get_Cost"; +static const char __pyx_k_Get_Size[] = "Get_Size"; +static const char __pyx_k_MaxValue[] = "MaxValue"; static const char __pyx_k_OpenList[] = "OpenList"; static const char __pyx_k_add_node[] = "add_node"; static const char __pyx_k_cameFrom[] = "cameFrom"; @@ -1342,18 +1334,21 @@ static const char __pyx_k_StartTime[] = "StartTime"; static const char __pyx_k_hexdigest[] = "hexdigest"; static const char __pyx_k_metaclass[] = "__metaclass__"; static const char __pyx_k_CAStar_pyx[] = "CAStar.pyx"; -static const char __pyx_k_Coordinate[] = "Coordinate"; static const char __pyx_k_FolderName[] = "FolderName"; static const char __pyx_k_FriendList[] = "FriendList"; static const char __pyx_k_Get_Coords[] = "Get_Coords"; +static const char __pyx_k_Get_NodeID[] = "Get_NodeID"; static const char __pyx_k_GraphBlock[] = "GraphBlock"; static const char __pyx_k_ImportFile[] = "ImportFile"; +static const char __pyx_k_NodeIDList[] = "NodeIDList"; static const char __pyx_k_Node_Cache[] = "Node_Cache"; +static const char __pyx_k_StartValue[] = "StartValue"; static const char __pyx_k_TargetNode[] = "TargetNode"; static const char __pyx_k_ValueError[] = "ValueError"; static const char __pyx_k_add_friend[] = "add_friend"; static const char __pyx_k_All_NodeIDs[] = "All_NodeIDs"; static const char __pyx_k_Find_NodeID[] = "Find_NodeID"; +static const char __pyx_k_Get_Friends[] = "Get_Friends"; static const char __pyx_k_GraphFolder[] = "GraphFolder"; static const char __pyx_k_ImportGraph[] = "ImportGraph"; static const char __pyx_k_Node___init[] = "Node.__init__"; @@ -1361,7 +1356,7 @@ static const char __pyx_k_Path_Length[] = "Path Length"; static const char __pyx_k_clean_edges[] = "clean_edges"; static const char __pyx_k_Adding_edges[] = "Adding edges..."; static const char __pyx_k_AutoNodeSave[] = "AutoNodeSave"; -static const char __pyx_k_Milliseconds[] = " Milliseconds"; +static const char __pyx_k_Milliseconds[] = " Milliseconds."; static const char __pyx_k_Saving_graph[] = "Saving graph..."; static const char __pyx_k_BlockFileName[] = "BlockFileName"; static const char __pyx_k_Direct_NodeID[] = "Direct_NodeID"; @@ -1371,23 +1366,26 @@ static const char __pyx_k_Cleaning_edges[] = "Cleaning edges..."; static const char __pyx_k_DynoGraph_Hash[] = "DynoGraph.Hash"; static const char __pyx_k_DynoGraph_Size[] = "DynoGraph.Size"; static const char __pyx_k_Get_Node_Cache[] = "Get_Node_Cache"; -static const char __pyx_k_Total_expanded[] = "Total expanded:"; +static const char __pyx_k_Total_Expanded[] = " Total Expanded:"; +static const char __pyx_k_AATC_Coordinate[] = "AATC_Coordinate"; static const char __pyx_k_BlockFileSuffix[] = "BlockFileSuffix"; static const char __pyx_k_GraphFileSuffix[] = "GraphFileSuffix"; static const char __pyx_k_Importing_graph[] = "Importing graph"; static const char __pyx_k_Node_Cache_Hash[] = "Node_Cache_Hash"; static const char __pyx_k_Node_Get_Coords[] = "Node.Get_Coords"; +static const char __pyx_k_Node_Get_NodeID[] = "Node.Get_NodeID"; static const char __pyx_k_Node_add_friend[] = "Node.add_friend"; static const char __pyx_k_Obj_Find_NodeID[] = "Obj_Find_NodeID"; static const char __pyx_k_Save_Node_Cache[] = "Save_Node_Cache"; static const char __pyx_k_Build_Node_Cache[] = "Build_Node_Cache"; static const char __pyx_k_DynoGraph___init[] = "DynoGraph.__init__"; static const char __pyx_k_HIGHEST_PROTOCOL[] = "HIGHEST_PROTOCOL"; +static const char __pyx_k_Node_Get_Friends[] = "Node.Get_Friends"; static const char __pyx_k_AutoNodeCacheSave[] = "AutoNodeCacheSave"; -static const char __pyx_k_Coordinate___init[] = "Coordinate.__init__"; static const char __pyx_k_DynoGraph_GetNode[] = "DynoGraph.GetNode"; static const char __pyx_k_DynoGraph_MapHash[] = "DynoGraph.MapHash"; static const char __pyx_k_Graph_Node_length[] = " Graph Node length"; +static const char __pyx_k_DynoGraph_Get_Size[] = "DynoGraph.Get_Size"; static const char __pyx_k_DynoGraph_add_node[] = "DynoGraph.add_node"; static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; static const char __pyx_k_CalculateNeighbours[] = "CalculateNeighbours"; @@ -1419,6 +1417,7 @@ static const char __pyx_k_An_error_occured_while_importing[] = "An error occured static const char __pyx_k_Error_occured_while_saving_graph[] = "Error occured while saving graph file "; static const char __pyx_k_NodeID_requested_is_not_in_the_B[] = "NodeID requested is not in the BlockID checked. Check BlockSize or regenerate blockfiles"; static PyObject *__pyx_kp_s_A; +static PyObject *__pyx_n_s_AATC_Coordinate; static PyObject *__pyx_n_s_AStar2; static PyObject *__pyx_kp_s_A_Search_FAILED_Start; static PyObject *__pyx_kp_s_A_Time; @@ -1440,8 +1439,6 @@ static PyObject *__pyx_kp_s_CAStar_pyx; static PyObject *__pyx_n_s_CalculateNeighbours; static PyObject *__pyx_kp_s_Cleaning_edges; static PyObject *__pyx_n_s_ClosedSet; -static PyObject *__pyx_n_s_Coordinate; -static PyObject *__pyx_n_s_Coordinate___init; static PyObject *__pyx_n_s_Coords; static PyObject *__pyx_n_s_Cost; static PyObject *__pyx_n_s_Count; @@ -1457,6 +1454,7 @@ static PyObject *__pyx_n_s_DynoGraph_EvictNode; static PyObject *__pyx_n_s_DynoGraph_Find_NodeID; static PyObject *__pyx_n_s_DynoGraph_GetNode; static PyObject *__pyx_n_s_DynoGraph_Get_Node_Cache; +static PyObject *__pyx_n_s_DynoGraph_Get_Size; static PyObject *__pyx_n_s_DynoGraph_Hash; static PyObject *__pyx_n_s_DynoGraph_ImportGraph; static PyObject *__pyx_n_s_DynoGraph_MapHash; @@ -1473,7 +1471,6 @@ static PyObject *__pyx_n_s_EndTime; static PyObject *__pyx_kp_s_Error_occured_while_saving_graph; static PyObject *__pyx_n_s_EvictNode; static PyObject *__pyx_n_s_FLUSH; -static PyObject *__pyx_n_s_FindPath; static PyObject *__pyx_n_s_Find_NodeID; static PyObject *__pyx_n_s_FolderName; static PyObject *__pyx_n_s_Found; @@ -1482,7 +1479,13 @@ static PyObject *__pyx_n_s_Friends; static PyObject *__pyx_n_s_GetNode; static PyObject *__pyx_n_s_Get_Coords; static PyObject *__pyx_n_s_Get_Cost; +static PyObject *__pyx_n_s_Get_Friends; +static PyObject *__pyx_n_s_Get_NodeID; static PyObject *__pyx_n_s_Get_Node_Cache; +static PyObject *__pyx_n_s_Get_Size; +static PyObject *__pyx_n_s_Get_X; +static PyObject *__pyx_n_s_Get_Y; +static PyObject *__pyx_n_s_Get_Z; static PyObject *__pyx_n_s_Graph; static PyObject *__pyx_n_s_GraphBlock; static PyObject *__pyx_n_s_GraphFileName; @@ -1499,12 +1502,14 @@ static PyObject *__pyx_kp_s_Importing_graph; static PyObject *__pyx_n_s_Key; static PyObject *__pyx_n_s_MAXNODE; static PyObject *__pyx_n_s_MapHash; +static PyObject *__pyx_n_s_MaxValue; static PyObject *__pyx_kp_s_Milliseconds; static PyObject *__pyx_n_s_N; static PyObject *__pyx_n_s_NC; static PyObject *__pyx_n_s_NCBlockID; static PyObject *__pyx_n_s_Node; static PyObject *__pyx_n_s_NodeID; +static PyObject *__pyx_n_s_NodeIDList; static PyObject *__pyx_kp_s_NodeID_requested_is_not_in_the_B; static PyObject *__pyx_n_s_Node_Cache; static PyObject *__pyx_n_s_Node_Cache_BlockSize; @@ -1512,6 +1517,8 @@ static PyObject *__pyx_n_s_Node_Cache_Hash; static PyObject *__pyx_kp_s_Node_Cache_Key_requested_is_not; static PyObject *__pyx_n_s_Node_Get_Coords; static PyObject *__pyx_n_s_Node_Get_Cost; +static PyObject *__pyx_n_s_Node_Get_Friends; +static PyObject *__pyx_n_s_Node_Get_NodeID; static PyObject *__pyx_n_s_Node___init; static PyObject *__pyx_n_s_Node_add_friend; static PyObject *__pyx_n_s_Nodes; @@ -1532,14 +1539,16 @@ static PyObject *__pyx_n_s_Set; static PyObject *__pyx_n_s_Sets; static PyObject *__pyx_n_s_Size; static PyObject *__pyx_n_s_StartTime; +static PyObject *__pyx_n_s_StartValue; static PyObject *__pyx_kp_s_Target; static PyObject *__pyx_n_s_TargetNode; -static PyObject *__pyx_kp_s_Total_expanded; +static PyObject *__pyx_kp_s_Total_Expanded; static PyObject *__pyx_n_s_Value; static PyObject *__pyx_n_s_ValueError; static PyObject *__pyx_kp_s_You_do_not_have_math_inf_object; static PyObject *__pyx_kp_s__5; static PyObject *__pyx_n_s__6; +static PyObject *__pyx_n_s__7; static PyObject *__pyx_n_s_a; static PyObject *__pyx_n_s_add_friend; static PyObject *__pyx_n_s_add_node; @@ -1592,9 +1601,7 @@ static PyObject *__pyx_n_s_mx; static PyObject *__pyx_n_s_my; static PyObject *__pyx_n_s_mz; static PyObject *__pyx_n_s_node; -static PyObject *__pyx_n_s_np; static PyObject *__pyx_n_s_num; -static PyObject *__pyx_n_s_numpy; static PyObject *__pyx_n_s_open; static PyObject *__pyx_n_s_os; static PyObject *__pyx_n_s_path; @@ -1642,35 +1649,36 @@ static PyObject *__pyx_n_s_zRange; static PyObject *__pyx_n_s_zSize; static PyObject *__pyx_n_s_zhigh; static PyObject *__pyx_n_s_zlow; -static PyObject *__pyx_pf_6CAStar_10Coordinate___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z, PyObject *__pyx_v_xSize, PyObject *__pyx_v_ySize, PyObject *__pyx_v_zSize); /* proto */ static PyObject *__pyx_pf_6CAStar_9DynoGraph___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_BlockSize, PyObject *__pyx_v_FolderName, PyObject *__pyx_v_GraphFileName, PyObject *__pyx_v_GraphFileSuffix, PyObject *__pyx_v_BlockFileName, PyObject *__pyx_v_BlockFileSuffix, PyObject *__pyx_v_Node_Cache_BlockSize); /* proto */ static PyObject *__pyx_pf_6CAStar_9DynoGraph_2Size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_xSize, PyObject *__pyx_v_ySize, PyObject *__pyx_v_zSize); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_4add_node(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_node); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_8Add_Edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_xRange, PyObject *__pyx_v_yRange, PyObject *__pyx_v_zRange); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID, PyObject *__pyx_v_xCount, PyObject *__pyx_v_yCount, PyObject *__pyx_v_zCount); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_12MapHash(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_value, PyObject *__pyx_v_div); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Key); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_24All_NodeIDs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Obj); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_AutoNodeSave, PyObject *__pyx_v_AutoNodeCacheSave); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_34Hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Value); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_6CAStar_9DynoGraph_40EvictNode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_4Get_Size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_6add_node(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_node); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_8clean_edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_10Add_Edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_xRange, PyObject *__pyx_v_yRange, PyObject *__pyx_v_zRange); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_12CalculateNeighbours(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID, PyObject *__pyx_v_xCount, PyObject *__pyx_v_yCount, PyObject *__pyx_v_zCount); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_14MapHash(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_value, PyObject *__pyx_v_div); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Node_Cache_Hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Key); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Build_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Save_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Get_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_24Direct_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_26All_NodeIDs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_StartValue, PyObject *__pyx_v_MaxValue); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Find_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_30Obj_Find_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Obj); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_32SaveGraph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_AutoNodeSave, PyObject *__pyx_v_AutoNodeCacheSave); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_34ImportGraph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_36Hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Value); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_38GetNode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_40SaveNodes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_9DynoGraph_42EvictNode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID); /* proto */ static PyObject *__pyx_pf_6CAStar_4Node___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID, PyObject *__pyx_v_Cost, PyObject *__pyx_v_Coords); /* proto */ static PyObject *__pyx_pf_6CAStar_4Node_2add_friend(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_friend); /* proto */ -static PyObject *__pyx_pf_6CAStar_4Node_4Get_Coords(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_6CAStar_4Node_6Get_Cost(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_4Node_4Get_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_4Node_6Get_Friends(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_4Node_8Get_Coords(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6CAStar_4Node_10Get_Cost(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_graph, int __pyx_v_start, int __pyx_v_target); /* proto */ -static PyObject *__pyx_pf_6CAStar_2FindPath(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cameFrom, PyObject *__pyx_v_current); /* proto */ -static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_FLUSH, CYTHON_UNUSED PyObject *__pyx_v_BlockSize, PyObject *__pyx_v_MAXNODE); /* proto */ +static PyObject *__pyx_pf_6CAStar_2Benchmark(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_FLUSH, CYTHON_UNUSED PyObject *__pyx_v_BlockSize, PyObject *__pyx_v_MAXNODE); /* proto */ static PyObject *__pyx_float_0_25; static PyObject *__pyx_int_0; static PyObject *__pyx_int_1; @@ -1681,15 +1689,14 @@ static PyObject *__pyx_int_500; static PyObject *__pyx_int_1000; static PyObject *__pyx_int_2000000; static PyObject *__pyx_int_10000000; -static PyObject *__pyx_int_10000000000000000000000000000000000; +static PyObject *__pyx_int_100000000000000000000; static PyObject *__pyx_tuple_; static PyObject *__pyx_slice__2; static PyObject *__pyx_tuple__3; static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__9; +static PyObject *__pyx_tuple__8; static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__12; +static PyObject *__pyx_tuple__11; static PyObject *__pyx_tuple__13; static PyObject *__pyx_tuple__15; static PyObject *__pyx_tuple__17; @@ -1703,23 +1710,25 @@ static PyObject *__pyx_tuple__31; static PyObject *__pyx_tuple__33; static PyObject *__pyx_tuple__35; static PyObject *__pyx_tuple__37; -static PyObject *__pyx_tuple__39; -static PyObject *__pyx_tuple__41; -static PyObject *__pyx_tuple__43; +static PyObject *__pyx_tuple__38; +static PyObject *__pyx_tuple__40; +static PyObject *__pyx_tuple__42; static PyObject *__pyx_tuple__44; -static PyObject *__pyx_tuple__46; -static PyObject *__pyx_tuple__48; -static PyObject *__pyx_tuple__50; -static PyObject *__pyx_tuple__52; -static PyObject *__pyx_tuple__54; -static PyObject *__pyx_tuple__56; -static PyObject *__pyx_tuple__58; -static PyObject *__pyx_tuple__60; -static PyObject *__pyx_tuple__62; -static PyObject *__pyx_tuple__64; -static PyObject *__pyx_tuple__66; -static PyObject *__pyx_codeobj__8; -static PyObject *__pyx_codeobj__11; +static PyObject *__pyx_tuple__45; +static PyObject *__pyx_tuple__47; +static PyObject *__pyx_tuple__49; +static PyObject *__pyx_tuple__51; +static PyObject *__pyx_tuple__53; +static PyObject *__pyx_tuple__55; +static PyObject *__pyx_tuple__57; +static PyObject *__pyx_tuple__59; +static PyObject *__pyx_tuple__61; +static PyObject *__pyx_tuple__63; +static PyObject *__pyx_tuple__65; +static PyObject *__pyx_tuple__67; +static PyObject *__pyx_tuple__69; +static PyObject *__pyx_codeobj__9; +static PyObject *__pyx_codeobj__12; static PyObject *__pyx_codeobj__14; static PyObject *__pyx_codeobj__16; static PyObject *__pyx_codeobj__18; @@ -1732,237 +1741,24 @@ static PyObject *__pyx_codeobj__30; static PyObject *__pyx_codeobj__32; static PyObject *__pyx_codeobj__34; static PyObject *__pyx_codeobj__36; -static PyObject *__pyx_codeobj__38; -static PyObject *__pyx_codeobj__40; -static PyObject *__pyx_codeobj__42; -static PyObject *__pyx_codeobj__45; -static PyObject *__pyx_codeobj__47; -static PyObject *__pyx_codeobj__49; -static PyObject *__pyx_codeobj__51; -static PyObject *__pyx_codeobj__53; -static PyObject *__pyx_codeobj__55; -static PyObject *__pyx_codeobj__57; -static PyObject *__pyx_codeobj__59; -static PyObject *__pyx_codeobj__61; -static PyObject *__pyx_codeobj__63; -static PyObject *__pyx_codeobj__65; -static PyObject *__pyx_codeobj__67; - -/* "CAStar.pyx":13 - * math.inf = 10**34 - * class Coordinate: - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): # <<<<<<<<<<<<<< - * self.x = x - * self.y = y - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_10Coordinate_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_10Coordinate_1__init__ = {"__init__", (PyCFunction)__pyx_pw_6CAStar_10Coordinate_1__init__, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_10Coordinate_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_x = 0; - PyObject *__pyx_v_y = 0; - PyObject *__pyx_v_z = 0; - PyObject *__pyx_v_xSize = 0; - PyObject *__pyx_v_ySize = 0; - PyObject *__pyx_v_zSize = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_z,&__pyx_n_s_xSize,&__pyx_n_s_ySize,&__pyx_n_s_zSize,0}; - PyObject* values[7] = {0,0,0,0,0,0,0}; - values[3] = ((PyObject *)((PyObject *)__pyx_int_0)); - values[4] = ((PyObject *)((PyObject *)__pyx_int_0)); - values[5] = ((PyObject *)((PyObject *)__pyx_int_0)); - values[6] = ((PyObject *)((PyObject *)__pyx_int_0)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 7, 1); __PYX_ERR(0, 13, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 7, 2); __PYX_ERR(0, 13, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_z); - if (value) { values[3] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 4: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xSize); - if (value) { values[4] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 5: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ySize); - if (value) { values[5] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 6: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zSize); - if (value) { values[6] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 13, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_x = values[1]; - __pyx_v_y = values[2]; - __pyx_v_z = values[3]; - __pyx_v_xSize = values[4]; - __pyx_v_ySize = values[5]; - __pyx_v_zSize = values[6]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 13, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("CAStar.Coordinate.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_10Coordinate___init__(__pyx_self, __pyx_v_self, __pyx_v_x, __pyx_v_y, __pyx_v_z, __pyx_v_xSize, __pyx_v_ySize, __pyx_v_zSize); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_6CAStar_10Coordinate___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z, PyObject *__pyx_v_xSize, PyObject *__pyx_v_ySize, PyObject *__pyx_v_zSize) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); - - /* "CAStar.pyx":14 - * class Coordinate: - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - * self.x = x # <<<<<<<<<<<<<< - * self.y = y - * self.z = z - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_x, __pyx_v_x) < 0) __PYX_ERR(0, 14, __pyx_L1_error) - - /* "CAStar.pyx":15 - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - * self.x = x - * self.y = y # <<<<<<<<<<<<<< - * self.z = z - * self.xSize = xSize - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_y, __pyx_v_y) < 0) __PYX_ERR(0, 15, __pyx_L1_error) - - /* "CAStar.pyx":16 - * self.x = x - * self.y = y - * self.z = z # <<<<<<<<<<<<<< - * self.xSize = xSize - * self.ySize = ySize - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_z, __pyx_v_z) < 0) __PYX_ERR(0, 16, __pyx_L1_error) - - /* "CAStar.pyx":17 - * self.y = y - * self.z = z - * self.xSize = xSize # <<<<<<<<<<<<<< - * self.ySize = ySize - * self.zSize = zSize - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_xSize, __pyx_v_xSize) < 0) __PYX_ERR(0, 17, __pyx_L1_error) - - /* "CAStar.pyx":18 - * self.z = z - * self.xSize = xSize - * self.ySize = ySize # <<<<<<<<<<<<<< - * self.zSize = zSize - * - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_ySize, __pyx_v_ySize) < 0) __PYX_ERR(0, 18, __pyx_L1_error) - - /* "CAStar.pyx":19 - * self.xSize = xSize - * self.ySize = ySize - * self.zSize = zSize # <<<<<<<<<<<<<< - * - * class DynoGraph: - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zSize, __pyx_v_zSize) < 0) __PYX_ERR(0, 19, __pyx_L1_error) - - /* "CAStar.pyx":13 - * math.inf = 10**34 - * class Coordinate: - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): # <<<<<<<<<<<<<< - * self.x = x - * self.y = y - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("CAStar.Coordinate.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "CAStar.pyx":32 +static PyObject *__pyx_codeobj__39; +static PyObject *__pyx_codeobj__41; +static PyObject *__pyx_codeobj__43; +static PyObject *__pyx_codeobj__46; +static PyObject *__pyx_codeobj__48; +static PyObject *__pyx_codeobj__50; +static PyObject *__pyx_codeobj__52; +static PyObject *__pyx_codeobj__54; +static PyObject *__pyx_codeobj__56; +static PyObject *__pyx_codeobj__58; +static PyObject *__pyx_codeobj__60; +static PyObject *__pyx_codeobj__62; +static PyObject *__pyx_codeobj__64; +static PyObject *__pyx_codeobj__66; +static PyObject *__pyx_codeobj__68; +static PyObject *__pyx_codeobj__70; + +/* "CAStar.pyx":24 * * """ * def __init__(self,BlockSize = 500,FolderName = "GraphFolder",GraphFileName = "Graph",GraphFileSuffix = ".graph",BlockFileName = "GraphBlock",BlockFileSuffix = ".blk",Node_Cache_BlockSize = 10000000): # <<<<<<<<<<<<<< @@ -2067,7 +1863,7 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_1__init__(PyObject *__pyx_self, PyO } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 32, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 24, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -2101,7 +1897,7 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_1__init__(PyObject *__pyx_self, PyO } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 32, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 24, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); @@ -2122,37 +1918,37 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph___init__(CYTHON_UNUSED PyObject *__ PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("__init__", 0); - /* "CAStar.pyx":33 + /* "CAStar.pyx":25 * """ * def __init__(self,BlockSize = 500,FolderName = "GraphFolder",GraphFileName = "Graph",GraphFileSuffix = ".graph",BlockFileName = "GraphBlock",BlockFileSuffix = ".blk",Node_Cache_BlockSize = 10000000): * self.Nodes = {} # <<<<<<<<<<<<<< * self.BlockSize = BlockSize * self.cwd = os.getcwd() */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Nodes, __pyx_t_1) < 0) __PYX_ERR(0, 33, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Nodes, __pyx_t_1) < 0) __PYX_ERR(0, 25, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":34 + /* "CAStar.pyx":26 * def __init__(self,BlockSize = 500,FolderName = "GraphFolder",GraphFileName = "Graph",GraphFileSuffix = ".graph",BlockFileName = "GraphBlock",BlockFileSuffix = ".blk",Node_Cache_BlockSize = 10000000): * self.Nodes = {} * self.BlockSize = BlockSize # <<<<<<<<<<<<<< * self.cwd = os.getcwd() * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_BlockSize, __pyx_v_BlockSize) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_BlockSize, __pyx_v_BlockSize) < 0) __PYX_ERR(0, 26, __pyx_L1_error) - /* "CAStar.pyx":35 + /* "CAStar.pyx":27 * self.Nodes = {} * self.BlockSize = BlockSize * self.cwd = os.getcwd() # <<<<<<<<<<<<<< * * self.GraphFileName = GraphFileName */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 35, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -2166,71 +1962,71 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph___init__(CYTHON_UNUSED PyObject *__ } } if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { - __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cwd, __pyx_t_1) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cwd, __pyx_t_1) < 0) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":37 + /* "CAStar.pyx":29 * self.cwd = os.getcwd() * * self.GraphFileName = GraphFileName # <<<<<<<<<<<<<< * self.GraphFileSuffix = GraphFileSuffix * self.FolderName = FolderName */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileName, __pyx_v_GraphFileName) < 0) __PYX_ERR(0, 37, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileName, __pyx_v_GraphFileName) < 0) __PYX_ERR(0, 29, __pyx_L1_error) - /* "CAStar.pyx":38 + /* "CAStar.pyx":30 * * self.GraphFileName = GraphFileName * self.GraphFileSuffix = GraphFileSuffix # <<<<<<<<<<<<<< * self.FolderName = FolderName * self.BlockFileName = BlockFileName */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileSuffix, __pyx_v_GraphFileSuffix) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileSuffix, __pyx_v_GraphFileSuffix) < 0) __PYX_ERR(0, 30, __pyx_L1_error) - /* "CAStar.pyx":39 + /* "CAStar.pyx":31 * self.GraphFileName = GraphFileName * self.GraphFileSuffix = GraphFileSuffix * self.FolderName = FolderName # <<<<<<<<<<<<<< * self.BlockFileName = BlockFileName * self.BlockFileSuffix = BlockFileSuffix */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_FolderName, __pyx_v_FolderName) < 0) __PYX_ERR(0, 39, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_FolderName, __pyx_v_FolderName) < 0) __PYX_ERR(0, 31, __pyx_L1_error) - /* "CAStar.pyx":40 + /* "CAStar.pyx":32 * self.GraphFileSuffix = GraphFileSuffix * self.FolderName = FolderName * self.BlockFileName = BlockFileName # <<<<<<<<<<<<<< * self.BlockFileSuffix = BlockFileSuffix * self.Node_Cache_BlockSize = Node_Cache_BlockSize */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName, __pyx_v_BlockFileName) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName, __pyx_v_BlockFileName) < 0) __PYX_ERR(0, 32, __pyx_L1_error) - /* "CAStar.pyx":41 + /* "CAStar.pyx":33 * self.FolderName = FolderName * self.BlockFileName = BlockFileName * self.BlockFileSuffix = BlockFileSuffix # <<<<<<<<<<<<<< * self.Node_Cache_BlockSize = Node_Cache_BlockSize * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix, __pyx_v_BlockFileSuffix) < 0) __PYX_ERR(0, 41, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix, __pyx_v_BlockFileSuffix) < 0) __PYX_ERR(0, 33, __pyx_L1_error) - /* "CAStar.pyx":42 + /* "CAStar.pyx":34 * self.BlockFileName = BlockFileName * self.BlockFileSuffix = BlockFileSuffix * self.Node_Cache_BlockSize = Node_Cache_BlockSize # <<<<<<<<<<<<<< * * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache_BlockSize, __pyx_v_Node_Cache_BlockSize) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache_BlockSize, __pyx_v_Node_Cache_BlockSize) < 0) __PYX_ERR(0, 34, __pyx_L1_error) - /* "CAStar.pyx":32 + /* "CAStar.pyx":24 * * """ * def __init__(self,BlockSize = 500,FolderName = "GraphFolder",GraphFileName = "Graph",GraphFileSuffix = ".graph",BlockFileName = "GraphBlock",BlockFileSuffix = ".blk",Node_Cache_BlockSize = 10000000): # <<<<<<<<<<<<<< @@ -2253,7 +2049,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph___init__(CYTHON_UNUSED PyObject *__ return __pyx_r; } -/* "CAStar.pyx":45 +/* "CAStar.pyx":37 * * * def Size(self,xSize,ySize,zSize): # <<<<<<<<<<<<<< @@ -2299,23 +2095,23 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_3Size(PyObject *__pyx_self, PyObjec case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xSize)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Size", 1, 4, 4, 1); __PYX_ERR(0, 45, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Size", 1, 4, 4, 1); __PYX_ERR(0, 37, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ySize)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Size", 1, 4, 4, 2); __PYX_ERR(0, 45, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Size", 1, 4, 4, 2); __PYX_ERR(0, 37, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zSize)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Size", 1, 4, 4, 3); __PYX_ERR(0, 45, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Size", 1, 4, 4, 3); __PYX_ERR(0, 37, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Size") < 0)) __PYX_ERR(0, 45, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Size") < 0)) __PYX_ERR(0, 37, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; @@ -2332,7 +2128,7 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_3Size(PyObject *__pyx_self, PyObjec } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Size", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 45, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Size", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 37, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.Size", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); @@ -2350,34 +2146,34 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_2Size(CYTHON_UNUSED PyObject *__pyx __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("Size", 0); - /* "CAStar.pyx":46 + /* "CAStar.pyx":38 * * def Size(self,xSize,ySize,zSize): * self.xSize = xSize # <<<<<<<<<<<<<< * self.ySize = ySize * self.zSize = zSize */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_xSize, __pyx_v_xSize) < 0) __PYX_ERR(0, 46, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_xSize, __pyx_v_xSize) < 0) __PYX_ERR(0, 38, __pyx_L1_error) - /* "CAStar.pyx":47 + /* "CAStar.pyx":39 * def Size(self,xSize,ySize,zSize): * self.xSize = xSize * self.ySize = ySize # <<<<<<<<<<<<<< * self.zSize = zSize - * def add_node(self,node): + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_ySize, __pyx_v_ySize) < 0) __PYX_ERR(0, 47, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_ySize, __pyx_v_ySize) < 0) __PYX_ERR(0, 39, __pyx_L1_error) - /* "CAStar.pyx":48 + /* "CAStar.pyx":40 * self.xSize = xSize * self.ySize = ySize * self.zSize = zSize # <<<<<<<<<<<<<< - * def add_node(self,node): - * self.Nodes[node.NodeID] = node + * + * def Get_Size(self): */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zSize, __pyx_v_zSize) < 0) __PYX_ERR(0, 48, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zSize, __pyx_v_zSize) < 0) __PYX_ERR(0, 40, __pyx_L1_error) - /* "CAStar.pyx":45 + /* "CAStar.pyx":37 * * * def Size(self,xSize,ySize,zSize): # <<<<<<<<<<<<<< @@ -2397,18 +2193,100 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_2Size(CYTHON_UNUSED PyObject *__pyx return __pyx_r; } -/* "CAStar.pyx":49 - * self.ySize = ySize +/* "CAStar.pyx":42 + * self.zSize = zSize + * + * def Get_Size(self): # <<<<<<<<<<<<<< + * return self.xSize, self.ySize, self.zSize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6CAStar_9DynoGraph_5Get_Size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_5Get_Size = {"Get_Size", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_5Get_Size, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_5Get_Size(PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("Get_Size (wrapper)", 0); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_4Get_Size(__pyx_self, ((PyObject *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6CAStar_9DynoGraph_4Get_Size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + __Pyx_RefNannySetupContext("Get_Size", 0); + + /* "CAStar.pyx":43 + * + * def Get_Size(self): + * return self.xSize, self.ySize, self.zSize # <<<<<<<<<<<<<< + * + * def add_node(self,node): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "CAStar.pyx":42 * self.zSize = zSize + * + * def Get_Size(self): # <<<<<<<<<<<<<< + * return self.xSize, self.ySize, self.zSize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("CAStar.DynoGraph.Get_Size", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "CAStar.pyx":45 + * return self.xSize, self.ySize, self.zSize + * * def add_node(self,node): # <<<<<<<<<<<<<< - * self.Nodes[node.NodeID] = node + * self.Nodes[node.Get_NodeID()] = node * */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_5add_node(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_5add_node = {"add_node", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_5add_node, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_5add_node(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_7add_node(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_7add_node = {"add_node", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_7add_node, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_7add_node(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_node = 0; PyObject *__pyx_r = 0; @@ -2437,11 +2315,11 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_5add_node(PyObject *__pyx_self, PyO case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_node)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("add_node", 1, 2, 2, 1); __PYX_ERR(0, 49, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("add_node", 1, 2, 2, 1); __PYX_ERR(0, 45, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_node") < 0)) __PYX_ERR(0, 49, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_node") < 0)) __PYX_ERR(0, 45, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -2454,46 +2332,66 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_5add_node(PyObject *__pyx_self, PyO } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("add_node", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 49, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("add_node", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 45, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.add_node", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_4add_node(__pyx_self, __pyx_v_self, __pyx_v_node); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_6add_node(__pyx_self, __pyx_v_self, __pyx_v_node); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_4add_node(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_node) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_6add_node(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_node) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; __Pyx_RefNannySetupContext("add_node", 0); - /* "CAStar.pyx":50 - * self.zSize = zSize + /* "CAStar.pyx":46 + * * def add_node(self,node): - * self.Nodes[node.NodeID] = node # <<<<<<<<<<<<<< + * self.Nodes[node.Get_NodeID()] = node # <<<<<<<<<<<<<< * * def clean_edges(self): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_NodeID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_t_2, __pyx_v_node) < 0)) __PYX_ERR(0, 50, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Get_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + if (__pyx_t_4) { + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else { + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error) + } + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_t_2, __pyx_v_node) < 0)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":49 - * self.ySize = ySize - * self.zSize = zSize + /* "CAStar.pyx":45 + * return self.xSize, self.ySize, self.zSize + * * def add_node(self,node): # <<<<<<<<<<<<<< - * self.Nodes[node.NodeID] = node + * self.Nodes[node.Get_NodeID()] = node * */ @@ -2503,6 +2401,8 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_4add_node(CYTHON_UNUSED PyObject *_ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("CAStar.DynoGraph.add_node", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -2511,8 +2411,8 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_4add_node(CYTHON_UNUSED PyObject *_ return __pyx_r; } -/* "CAStar.pyx":52 - * self.Nodes[node.NodeID] = node +/* "CAStar.pyx":48 + * self.Nodes[node.Get_NodeID()] = node * * def clean_edges(self): # <<<<<<<<<<<<<< * print("Cleaning edges...") @@ -2520,20 +2420,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_4add_node(CYTHON_UNUSED PyObject *_ */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_7clean_edges(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_7clean_edges = {"clean_edges", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_7clean_edges, METH_O, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_7clean_edges(PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_9clean_edges(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_9clean_edges = {"clean_edges", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_9clean_edges, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_9clean_edges(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("clean_edges (wrapper)", 0); - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_6clean_edges(__pyx_self, ((PyObject *)__pyx_v_self)); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_8clean_edges(__pyx_self, ((PyObject *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_8clean_edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_item = NULL; PyObject *__pyx_v_num = NULL; PyObject *__pyx_v_friend = NULL; @@ -2547,32 +2447,32 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject Py_ssize_t __pyx_t_6; PyObject *(*__pyx_t_7)(PyObject *); PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; + PyObject *__pyx_t_9 = NULL; int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; + int __pyx_t_11; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; __Pyx_RefNannySetupContext("clean_edges", 0); - /* "CAStar.pyx":53 + /* "CAStar.pyx":49 * * def clean_edges(self): * print("Cleaning edges...") # <<<<<<<<<<<<<< * for item in self.Nodes.values(): * for num in item.Friends: */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Cleaning_edges) < 0) __PYX_ERR(0, 53, __pyx_L1_error) + if (__Pyx_PrintOne(0, __pyx_kp_s_Cleaning_edges) < 0) __PYX_ERR(0, 49, __pyx_L1_error) - /* "CAStar.pyx":54 + /* "CAStar.pyx":50 * def clean_edges(self): * print("Cleaning edges...") * for item in self.Nodes.values(): # <<<<<<<<<<<<<< * for num in item.Friends: * friend = self.Nodes[num] */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -2586,10 +2486,10 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject } } if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { - __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -2597,9 +2497,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { @@ -2607,17 +2507,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject if (likely(PyList_CheckExact(__pyx_t_3))) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 50, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 50, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } @@ -2627,7 +2527,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 54, __pyx_L1_error) + else __PYX_ERR(0, 50, __pyx_L1_error) } break; } @@ -2636,22 +2536,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":55 + /* "CAStar.pyx":51 * print("Cleaning edges...") * for item in self.Nodes.values(): * for num in item.Friends: # <<<<<<<<<<<<<< * friend = self.Nodes[num] - * if item.NodeID not in friend.Friends: + * if item.Get_NodeID() not in friend.Friends: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { - __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 51, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { @@ -2659,17 +2559,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject if (likely(PyList_CheckExact(__pyx_t_2))) { if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 51, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 51, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } @@ -2679,7 +2579,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 55, __pyx_L1_error) + else __PYX_ERR(0, 51, __pyx_L1_error) } break; } @@ -2688,49 +2588,85 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject __Pyx_XDECREF_SET(__pyx_v_num, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":56 + /* "CAStar.pyx":52 * for item in self.Nodes.values(): * for num in item.Friends: * friend = self.Nodes[num] # <<<<<<<<<<<<<< - * if item.NodeID not in friend.Friends: - * friend.add_friend(item.NodeID) + * if item.Get_NodeID() not in friend.Friends: + * friend.add_friend(item.Get_NodeID()) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PyObject_GetItem(__pyx_t_1, __pyx_v_num); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 56, __pyx_L1_error) + __pyx_t_8 = PyObject_GetItem(__pyx_t_1, __pyx_v_num); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF_SET(__pyx_v_friend, __pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":57 + /* "CAStar.pyx":53 * for num in item.Friends: * friend = self.Nodes[num] - * if item.NodeID not in friend.Friends: # <<<<<<<<<<<<<< - * friend.add_friend(item.NodeID) + * if item.Get_NodeID() not in friend.Friends: # <<<<<<<<<<<<<< + * friend.add_friend(item.Get_NodeID()) * */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_NodeID); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 57, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_Get_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + if (__pyx_t_9) { + __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 53, __pyx_L1_error) + } __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_friend, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_friend, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = (__Pyx_PySequence_ContainsTF(__pyx_t_8, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 57, __pyx_L1_error) + __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_t_8, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 53, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_10 = (__pyx_t_9 != 0); - if (__pyx_t_10) { + __pyx_t_11 = (__pyx_t_10 != 0); + if (__pyx_t_11) { - /* "CAStar.pyx":58 + /* "CAStar.pyx":54 * friend = self.Nodes[num] - * if item.NodeID not in friend.Friends: - * friend.add_friend(item.NodeID) # <<<<<<<<<<<<<< + * if item.Get_NodeID() not in friend.Friends: + * friend.add_friend(item.Get_NodeID()) # <<<<<<<<<<<<<< * * */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_friend, __pyx_n_s_add_friend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 58, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_friend, __pyx_n_s_add_friend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_NodeID); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 58, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_Get_NodeID); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + } + } + if (__pyx_t_13) { + __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } else { + __pyx_t_9 = __Pyx_PyObject_CallNoArg(__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 54, __pyx_L1_error) + } + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_8); @@ -2742,36 +2678,36 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject } } if (!__pyx_t_12) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_11}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error) + PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_9}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_11}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error) + PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_9}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else #endif { - __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 58, __pyx_L1_error) + __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12); __pyx_t_12 = NULL; - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_11); - __pyx_t_11 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_13, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_9); + __pyx_t_9 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_13, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } @@ -2779,26 +2715,26 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":57 + /* "CAStar.pyx":53 * for num in item.Friends: * friend = self.Nodes[num] - * if item.NodeID not in friend.Friends: # <<<<<<<<<<<<<< - * friend.add_friend(item.NodeID) + * if item.Get_NodeID() not in friend.Friends: # <<<<<<<<<<<<<< + * friend.add_friend(item.Get_NodeID()) * */ } - /* "CAStar.pyx":55 + /* "CAStar.pyx":51 * print("Cleaning edges...") * for item in self.Nodes.values(): * for num in item.Friends: # <<<<<<<<<<<<<< * friend = self.Nodes[num] - * if item.NodeID not in friend.Friends: + * if item.Get_NodeID() not in friend.Friends: */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":54 + /* "CAStar.pyx":50 * def clean_edges(self): * print("Cleaning edges...") * for item in self.Nodes.values(): # <<<<<<<<<<<<<< @@ -2808,8 +2744,8 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":52 - * self.Nodes[node.NodeID] = node + /* "CAStar.pyx":48 + * self.Nodes[node.Get_NodeID()] = node * * def clean_edges(self): # <<<<<<<<<<<<<< * print("Cleaning edges...") @@ -2824,7 +2760,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_AddTraceback("CAStar.DynoGraph.clean_edges", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -2838,18 +2774,18 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_6clean_edges(CYTHON_UNUSED PyObject return __pyx_r; } -/* "CAStar.pyx":61 +/* "CAStar.pyx":57 * * * def Add_Edges(self,xRange,yRange,zRange): # <<<<<<<<<<<<<< * print("Adding edges...") - * xCount = int(xRange/self.xSize) + * self.xCount = int(xRange/self.xSize) */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_9Add_Edges(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_9Add_Edges = {"Add_Edges", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_9Add_Edges, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_9Add_Edges(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_11Add_Edges(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_11Add_Edges = {"Add_Edges", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_11Add_Edges, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_11Add_Edges(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_xRange = 0; PyObject *__pyx_v_yRange = 0; @@ -2884,23 +2820,23 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_9Add_Edges(PyObject *__pyx_self, Py case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xRange)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Add_Edges", 1, 4, 4, 1); __PYX_ERR(0, 61, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Add_Edges", 1, 4, 4, 1); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_yRange)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Add_Edges", 1, 4, 4, 2); __PYX_ERR(0, 61, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Add_Edges", 1, 4, 4, 2); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zRange)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Add_Edges", 1, 4, 4, 3); __PYX_ERR(0, 61, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Add_Edges", 1, 4, 4, 3); __PYX_ERR(0, 57, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Add_Edges") < 0)) __PYX_ERR(0, 61, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Add_Edges") < 0)) __PYX_ERR(0, 57, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; @@ -2917,23 +2853,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_9Add_Edges(PyObject *__pyx_self, Py } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Add_Edges", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 61, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Add_Edges", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 57, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.Add_Edges", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_8Add_Edges(__pyx_self, __pyx_v_self, __pyx_v_xRange, __pyx_v_yRange, __pyx_v_zRange); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_10Add_Edges(__pyx_self, __pyx_v_self, __pyx_v_xRange, __pyx_v_yRange, __pyx_v_zRange); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_8Add_Edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_xRange, PyObject *__pyx_v_yRange, PyObject *__pyx_v_zRange) { - PyObject *__pyx_v_xCount = NULL; - PyObject *__pyx_v_yCount = NULL; - PyObject *__pyx_v_zCount = NULL; +static PyObject *__pyx_pf_6CAStar_9DynoGraph_10Add_Edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_xRange, PyObject *__pyx_v_yRange, PyObject *__pyx_v_zRange) { PyObject *__pyx_v_node = NULL; PyObject *__pyx_v_friends = NULL; PyObject *__pyx_v_friend = NULL; @@ -2946,418 +2879,437 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_8Add_Edges(CYTHON_UNUSED PyObject * PyObject *(*__pyx_t_5)(PyObject *); PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; + PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; - Py_ssize_t __pyx_t_10; - PyObject *(*__pyx_t_11)(PyObject *); + PyObject *__pyx_t_10 = NULL; + int __pyx_t_11; + PyObject *__pyx_t_12 = NULL; + Py_ssize_t __pyx_t_13; + PyObject *(*__pyx_t_14)(PyObject *); __Pyx_RefNannySetupContext("Add_Edges", 0); - /* "CAStar.pyx":62 + /* "CAStar.pyx":58 * * def Add_Edges(self,xRange,yRange,zRange): * print("Adding edges...") # <<<<<<<<<<<<<< - * xCount = int(xRange/self.xSize) - * yCount = int(yRange/self.ySize) + * self.xCount = int(xRange/self.xSize) + * self.yCount = int(yRange/self.ySize) */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Adding_edges) < 0) __PYX_ERR(0, 62, __pyx_L1_error) + if (__Pyx_PrintOne(0, __pyx_kp_s_Adding_edges) < 0) __PYX_ERR(0, 58, __pyx_L1_error) - /* "CAStar.pyx":63 + /* "CAStar.pyx":59 * def Add_Edges(self,xRange,yRange,zRange): * print("Adding edges...") - * xCount = int(xRange/self.xSize) # <<<<<<<<<<<<<< - * yCount = int(yRange/self.ySize) - * zCount = int(zRange/self.zSize) + * self.xCount = int(xRange/self.xSize) # <<<<<<<<<<<<<< + * self.yCount = int(yRange/self.ySize) + * self.zCount = int(zRange/self.zSize) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_xRange, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_xRange, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_xCount = __pyx_t_1; - __pyx_t_1 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_xCount, __pyx_t_1) < 0) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":64 + /* "CAStar.pyx":60 * print("Adding edges...") - * xCount = int(xRange/self.xSize) - * yCount = int(yRange/self.ySize) # <<<<<<<<<<<<<< - * zCount = int(zRange/self.zSize) - * self.xCount,self.yCount,self.zCount = xCount,yCount,zCount + * self.xCount = int(xRange/self.xSize) + * self.yCount = int(yRange/self.ySize) # <<<<<<<<<<<<<< + * self.zCount = int(zRange/self.zSize) + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_yRange, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_yRange, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_yCount = __pyx_t_1; - __pyx_t_1 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_yCount, __pyx_t_1) < 0) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":65 - * xCount = int(xRange/self.xSize) - * yCount = int(yRange/self.ySize) - * zCount = int(zRange/self.zSize) # <<<<<<<<<<<<<< - * self.xCount,self.yCount,self.zCount = xCount,yCount,zCount + /* "CAStar.pyx":61 + * self.xCount = int(xRange/self.xSize) + * self.yCount = int(yRange/self.ySize) + * self.zCount = int(zRange/self.zSize) # <<<<<<<<<<<<<< + * * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_zRange, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_zRange, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_zCount = __pyx_t_1; - __pyx_t_1 = 0; - - /* "CAStar.pyx":66 - * yCount = int(yRange/self.ySize) - * zCount = int(zRange/self.zSize) - * self.xCount,self.yCount,self.zCount = xCount,yCount,zCount # <<<<<<<<<<<<<< - * - * print("xCount:",xCount) - */ - __pyx_t_1 = __pyx_v_xCount; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_2 = __pyx_v_yCount; - __Pyx_INCREF(__pyx_t_2); - __pyx_t_3 = __pyx_v_zCount; - __Pyx_INCREF(__pyx_t_3); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_xCount, __pyx_t_1) < 0) __PYX_ERR(0, 66, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zCount, __pyx_t_1) < 0) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_yCount, __pyx_t_2) < 0) __PYX_ERR(0, 66, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zCount, __pyx_t_3) < 0) __PYX_ERR(0, 66, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":68 - * self.xCount,self.yCount,self.zCount = xCount,yCount,zCount + /* "CAStar.pyx":64 + * * - * print("xCount:",xCount) # <<<<<<<<<<<<<< - * print("yCount:",yCount) - * print("zCount:",zCount) + * print("xCount:",self.xCount) # <<<<<<<<<<<<<< + * print("yCount:",self.yCount) + * print("zCount:",self.zCount) */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_kp_s_xCount_2); __Pyx_GIVEREF(__pyx_kp_s_xCount_2); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_xCount_2); - __Pyx_INCREF(__pyx_v_xCount); - __Pyx_GIVEREF(__pyx_v_xCount); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_xCount); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) __PYX_ERR(0, 68, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_xCount_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __pyx_t_1 = 0; + if (__Pyx_PrintOne(0, __pyx_t_2) < 0) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":69 + /* "CAStar.pyx":65 * - * print("xCount:",xCount) - * print("yCount:",yCount) # <<<<<<<<<<<<<< - * print("zCount:",zCount) + * print("xCount:",self.xCount) + * print("yCount:",self.yCount) # <<<<<<<<<<<<<< + * print("zCount:",self.zCount) * */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_yCount); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_kp_s_yCount_2); __Pyx_GIVEREF(__pyx_kp_s_yCount_2); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_yCount_2); - __Pyx_INCREF(__pyx_v_yCount); - __Pyx_GIVEREF(__pyx_v_yCount); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_yCount); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) __PYX_ERR(0, 69, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_s_yCount_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + if (__Pyx_PrintOne(0, __pyx_t_1) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":70 - * print("xCount:",xCount) - * print("yCount:",yCount) - * print("zCount:",zCount) # <<<<<<<<<<<<<< + /* "CAStar.pyx":66 + * print("xCount:",self.xCount) + * print("yCount:",self.yCount) + * print("zCount:",self.zCount) # <<<<<<<<<<<<<< * * */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_kp_s_zCount_2); __Pyx_GIVEREF(__pyx_kp_s_zCount_2); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_zCount_2); - __Pyx_INCREF(__pyx_v_zCount); - __Pyx_GIVEREF(__pyx_v_zCount); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_zCount); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) __PYX_ERR(0, 70, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_zCount_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __pyx_t_1 = 0; + if (__Pyx_PrintOne(0, __pyx_t_2) < 0) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":73 + /* "CAStar.pyx":69 * * * for node in self.Nodes.values(): # <<<<<<<<<<<<<< - * friends = self.CalculateNeighbours(node.NodeID,xCount,yCount,zCount) + * friends = self.CalculateNeighbours(node.Get_NodeID(),self.xCount,self.yCount,self.zCount) * for friend in friends: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 73, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); } } - if (__pyx_t_2) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error) } - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { - __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { - __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 73, __pyx_L1_error) + __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 69, __pyx_L1_error) } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (likely(!__pyx_t_5)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break; + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 73, __pyx_L1_error) + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 69, __pyx_L1_error) #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); #endif } else { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 73, __pyx_L1_error) + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 69, __pyx_L1_error) #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); #endif } } else { - __pyx_t_3 = __pyx_t_5(__pyx_t_1); - if (unlikely(!__pyx_t_3)) { + __pyx_t_2 = __pyx_t_5(__pyx_t_3); + if (unlikely(!__pyx_t_2)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 73, __pyx_L1_error) + else __PYX_ERR(0, 69, __pyx_L1_error) } break; } - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_2); } - __Pyx_XDECREF_SET(__pyx_v_node, __pyx_t_3); - __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_node, __pyx_t_2); + __pyx_t_2 = 0; - /* "CAStar.pyx":74 + /* "CAStar.pyx":70 * * for node in self.Nodes.values(): - * friends = self.CalculateNeighbours(node.NodeID,xCount,yCount,zCount) # <<<<<<<<<<<<<< + * friends = self.CalculateNeighbours(node.Get_NodeID(),self.xCount,self.yCount,self.zCount) # <<<<<<<<<<<<<< * for friend in friends: * node.add_friend(friend) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_CalculateNeighbours); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_NodeID); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_CalculateNeighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Get_NodeID); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + if (__pyx_t_8) { + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) + } __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_yCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = NULL; + __pyx_t_11 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - __pyx_t_8 = 1; + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; } } #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[5] = {__pyx_t_7, __pyx_t_6, __pyx_v_xCount, __pyx_v_yCount, __pyx_v_zCount}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 4+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); + if (PyFunction_Check(__pyx_t_1)) { + PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9}; + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_11, 4+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else #endif #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[5] = {__pyx_t_7, __pyx_t_6, __pyx_v_xCount, __pyx_v_yCount, __pyx_v_zCount}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 4+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { + PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9}; + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_11, 4+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else #endif { - __pyx_t_9 = PyTuple_New(4+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + __pyx_t_12 = PyTuple_New(4+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + if (__pyx_t_10) { + __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL; } __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); - __Pyx_INCREF(__pyx_v_xCount); - __Pyx_GIVEREF(__pyx_v_xCount); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_xCount); - __Pyx_INCREF(__pyx_v_yCount); - __Pyx_GIVEREF(__pyx_v_yCount); - PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_8, __pyx_v_yCount); - __Pyx_INCREF(__pyx_v_zCount); - __Pyx_GIVEREF(__pyx_v_zCount); - PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_8, __pyx_v_zCount); + PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_11, __pyx_t_9); __pyx_t_6 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_7 = 0; + __pyx_t_8 = 0; + __pyx_t_9 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_friends, __pyx_t_3); - __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_friends, __pyx_t_2); + __pyx_t_2 = 0; - /* "CAStar.pyx":75 + /* "CAStar.pyx":71 * for node in self.Nodes.values(): - * friends = self.CalculateNeighbours(node.NodeID,xCount,yCount,zCount) + * friends = self.CalculateNeighbours(node.Get_NodeID(),self.xCount,self.yCount,self.zCount) * for friend in friends: # <<<<<<<<<<<<<< * node.add_friend(friend) * */ if (likely(PyList_CheckExact(__pyx_v_friends)) || PyTuple_CheckExact(__pyx_v_friends)) { - __pyx_t_3 = __pyx_v_friends; __Pyx_INCREF(__pyx_t_3); __pyx_t_10 = 0; - __pyx_t_11 = NULL; + __pyx_t_2 = __pyx_v_friends; __Pyx_INCREF(__pyx_t_2); __pyx_t_13 = 0; + __pyx_t_14 = NULL; } else { - __pyx_t_10 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_friends); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 75, __pyx_L1_error) + __pyx_t_13 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_friends); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_14 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 71, __pyx_L1_error) } for (;;) { - if (likely(!__pyx_t_11)) { - if (likely(PyList_CheckExact(__pyx_t_3))) { - if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_3)) break; + if (likely(!__pyx_t_14)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 75, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 71, __pyx_L1_error) #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 75, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); #endif } else { - if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 75, __pyx_L1_error) + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 71, __pyx_L1_error) #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 75, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); #endif } } else { - __pyx_t_2 = __pyx_t_11(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { + __pyx_t_1 = __pyx_t_14(__pyx_t_2); + if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 75, __pyx_L1_error) + else __PYX_ERR(0, 71, __pyx_L1_error) } break; } - __Pyx_GOTREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_t_1); } - __Pyx_XDECREF_SET(__pyx_v_friend, __pyx_t_2); - __pyx_t_2 = 0; + __Pyx_XDECREF_SET(__pyx_v_friend, __pyx_t_1); + __pyx_t_1 = 0; - /* "CAStar.pyx":76 - * friends = self.CalculateNeighbours(node.NodeID,xCount,yCount,zCount) + /* "CAStar.pyx":72 + * friends = self.CalculateNeighbours(node.Get_NodeID(),self.xCount,self.yCount,self.zCount) * for friend in friends: * node.add_friend(friend) # <<<<<<<<<<<<<< * * def CalculateNeighbours(self,NodeID,xCount,yCount,zCount): */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_add_friend); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 76, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_6); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_add_friend); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_9 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); + __Pyx_DECREF_SET(__pyx_t_12, function); } } - if (!__pyx_t_6) { - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_friend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + if (!__pyx_t_9) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_friend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_friend}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_2); + if (PyFunction_Check(__pyx_t_12)) { + PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_friend}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_GOTREF(__pyx_t_1); } else #endif #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_friend}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) { + PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_friend}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_GOTREF(__pyx_t_1); } else #endif { - __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 76, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL; + __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL; __Pyx_INCREF(__pyx_v_friend); __Pyx_GIVEREF(__pyx_v_friend); - PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_friend); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_friend); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":75 + /* "CAStar.pyx":71 * for node in self.Nodes.values(): - * friends = self.CalculateNeighbours(node.NodeID,xCount,yCount,zCount) + * friends = self.CalculateNeighbours(node.Get_NodeID(),self.xCount,self.yCount,self.zCount) * for friend in friends: # <<<<<<<<<<<<<< * node.add_friend(friend) * */ } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":73 + /* "CAStar.pyx":69 * * * for node in self.Nodes.values(): # <<<<<<<<<<<<<< - * friends = self.CalculateNeighbours(node.NodeID,xCount,yCount,zCount) + * friends = self.CalculateNeighbours(node.Get_NodeID(),self.xCount,self.yCount,self.zCount) * for friend in friends: */ } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":61 + /* "CAStar.pyx":57 * * * def Add_Edges(self,xRange,yRange,zRange): # <<<<<<<<<<<<<< * print("Adding edges...") - * xCount = int(xRange/self.xSize) + * self.xCount = int(xRange/self.xSize) */ /* function exit code */ @@ -3369,13 +3321,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_8Add_Edges(CYTHON_UNUSED PyObject * __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_12); __Pyx_AddTraceback("CAStar.DynoGraph.Add_Edges", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_xCount); - __Pyx_XDECREF(__pyx_v_yCount); - __Pyx_XDECREF(__pyx_v_zCount); __Pyx_XDECREF(__pyx_v_node); __Pyx_XDECREF(__pyx_v_friends); __Pyx_XDECREF(__pyx_v_friend); @@ -3384,7 +3336,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_8Add_Edges(CYTHON_UNUSED PyObject * return __pyx_r; } -/* "CAStar.pyx":78 +/* "CAStar.pyx":74 * node.add_friend(friend) * * def CalculateNeighbours(self,NodeID,xCount,yCount,zCount): # <<<<<<<<<<<<<< @@ -3393,9 +3345,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_8Add_Edges(CYTHON_UNUSED PyObject * */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_11CalculateNeighbours(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_11CalculateNeighbours = {"CalculateNeighbours", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_11CalculateNeighbours, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_11CalculateNeighbours(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_13CalculateNeighbours(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_13CalculateNeighbours = {"CalculateNeighbours", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_13CalculateNeighbours, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_13CalculateNeighbours(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; PyObject *__pyx_v_NodeID = 0; PyObject *__pyx_v_xCount = 0; @@ -3433,29 +3385,29 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_11CalculateNeighbours(PyObject *__p case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_NodeID)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, 1); __PYX_ERR(0, 78, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, 1); __PYX_ERR(0, 74, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xCount)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, 2); __PYX_ERR(0, 78, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, 2); __PYX_ERR(0, 74, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_yCount)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, 3); __PYX_ERR(0, 78, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, 3); __PYX_ERR(0, 74, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zCount)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, 4); __PYX_ERR(0, 78, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, 4); __PYX_ERR(0, 74, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "CalculateNeighbours") < 0)) __PYX_ERR(0, 78, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "CalculateNeighbours") < 0)) __PYX_ERR(0, 74, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { goto __pyx_L5_argtuple_error; @@ -3474,20 +3426,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_11CalculateNeighbours(PyObject *__p } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 78, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("CalculateNeighbours", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 74, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.CalculateNeighbours", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(__pyx_self, __pyx_v_self, __pyx_v_NodeID, __pyx_v_xCount, __pyx_v_yCount, __pyx_v_zCount); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_12CalculateNeighbours(__pyx_self, __pyx_v_self, __pyx_v_NodeID, __pyx_v_xCount, __pyx_v_yCount, __pyx_v_zCount); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID, PyObject *__pyx_v_xCount, PyObject *__pyx_v_yCount, PyObject *__pyx_v_zCount) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_12CalculateNeighbours(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID, PyObject *__pyx_v_xCount, PyObject *__pyx_v_yCount, PyObject *__pyx_v_zCount) { int __pyx_v_zlow; int __pyx_v_zhigh; int __pyx_v_ylow; @@ -3509,7 +3461,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED int __pyx_t_10; __Pyx_RefNannySetupContext("CalculateNeighbours", 0); - /* "CAStar.pyx":79 + /* "CAStar.pyx":75 * * def CalculateNeighbours(self,NodeID,xCount,yCount,zCount): * zlow,zhigh,ylow,yhigh,xlow,xhigh = False,False,False,False,False,False # <<<<<<<<<<<<<< @@ -3529,37 +3481,37 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_v_xlow = __pyx_t_5; __pyx_v_xhigh = __pyx_t_6; - /* "CAStar.pyx":80 + /* "CAStar.pyx":76 * def CalculateNeighbours(self,NodeID,xCount,yCount,zCount): * zlow,zhigh,ylow,yhigh,xlow,xhigh = False,False,False,False,False,False * friends = [] # <<<<<<<<<<<<<< * if (NodeID - 1) % zCount != 0: # If not on bottom level of z * zlow = True */ - __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 80, __pyx_L1_error) + __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_v_friends = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":81 + /* "CAStar.pyx":77 * zlow,zhigh,ylow,yhigh,xlow,xhigh = False,False,False,False,False,False * friends = [] * if (NodeID - 1) % zCount != 0: # If not on bottom level of z # <<<<<<<<<<<<<< * zlow = True * if NodeID % zCount != 0: # if not on top level of z */ - __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 81, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Remainder(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 81, __pyx_L1_error) + __pyx_t_8 = PyNumber_Remainder(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyObject_RichCompare(__pyx_t_8, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 81, __pyx_L1_error) + __pyx_t_7 = PyObject_RichCompare(__pyx_t_8, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 81, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_6) { - /* "CAStar.pyx":82 + /* "CAStar.pyx":78 * friends = [] * if (NodeID - 1) % zCount != 0: # If not on bottom level of z * zlow = True # <<<<<<<<<<<<<< @@ -3568,7 +3520,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ __pyx_v_zlow = 1; - /* "CAStar.pyx":81 + /* "CAStar.pyx":77 * zlow,zhigh,ylow,yhigh,xlow,xhigh = False,False,False,False,False,False * friends = [] * if (NodeID - 1) % zCount != 0: # If not on bottom level of z # <<<<<<<<<<<<<< @@ -3577,22 +3529,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":83 + /* "CAStar.pyx":79 * if (NodeID - 1) % zCount != 0: # If not on bottom level of z * zlow = True * if NodeID % zCount != 0: # if not on top level of z # <<<<<<<<<<<<<< * zhigh = True * */ - __pyx_t_7 = PyNumber_Remainder(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 83, __pyx_L1_error) + __pyx_t_7 = PyNumber_Remainder(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyObject_RichCompare(__pyx_t_7, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 83, __pyx_L1_error) + __pyx_t_8 = PyObject_RichCompare(__pyx_t_7, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 83, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_6) { - /* "CAStar.pyx":84 + /* "CAStar.pyx":80 * zlow = True * if NodeID % zCount != 0: # if not on top level of z * zhigh = True # <<<<<<<<<<<<<< @@ -3601,7 +3553,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ __pyx_v_zhigh = 1; - /* "CAStar.pyx":83 + /* "CAStar.pyx":79 * if (NodeID - 1) % zCount != 0: # If not on bottom level of z * zlow = True * if NodeID % zCount != 0: # if not on top level of z # <<<<<<<<<<<<<< @@ -3610,28 +3562,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":86 + /* "CAStar.pyx":82 * zhigh = True * * if ((NodeID-1) % (zCount*yCount)) >= zCount: #Not on low y row # <<<<<<<<<<<<<< * ylow = True * if ((NodeID-1)% (zCount*yCount))//zCount != yCount-1: # Not on high y row */ - __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 82, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 82, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Remainder(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_9 = PyNumber_Remainder(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 82, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyObject_RichCompare(__pyx_t_9, __pyx_v_zCount, Py_GE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_7 = PyObject_RichCompare(__pyx_t_9, __pyx_v_zCount, Py_GE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 82, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 82, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_6) { - /* "CAStar.pyx":87 + /* "CAStar.pyx":83 * * if ((NodeID-1) % (zCount*yCount)) >= zCount: #Not on low y row * ylow = True # <<<<<<<<<<<<<< @@ -3640,7 +3592,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ __pyx_v_ylow = 1; - /* "CAStar.pyx":86 + /* "CAStar.pyx":82 * zhigh = True * * if ((NodeID-1) % (zCount*yCount)) >= zCount: #Not on low y row # <<<<<<<<<<<<<< @@ -3649,34 +3601,34 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":88 + /* "CAStar.pyx":84 * if ((NodeID-1) % (zCount*yCount)) >= zCount: #Not on low y row * ylow = True * if ((NodeID-1)% (zCount*yCount))//zCount != yCount-1: # Not on high y row # <<<<<<<<<<<<<< * yhigh = True * */ - __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 88, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 88, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Remainder(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 88, __pyx_L1_error) + __pyx_t_8 = PyNumber_Remainder(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_FloorDivide(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 88, __pyx_L1_error) + __pyx_t_9 = PyNumber_FloorDivide(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_yCount, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 88, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_yCount, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = PyObject_RichCompare(__pyx_t_9, __pyx_t_8, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 88, __pyx_L1_error) + __pyx_t_7 = PyObject_RichCompare(__pyx_t_9, __pyx_t_8, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 88, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_6) { - /* "CAStar.pyx":89 + /* "CAStar.pyx":85 * ylow = True * if ((NodeID-1)% (zCount*yCount))//zCount != yCount-1: # Not on high y row * yhigh = True # <<<<<<<<<<<<<< @@ -3685,7 +3637,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ __pyx_v_yhigh = 1; - /* "CAStar.pyx":88 + /* "CAStar.pyx":84 * if ((NodeID-1) % (zCount*yCount)) >= zCount: #Not on low y row * ylow = True * if ((NodeID-1)% (zCount*yCount))//zCount != yCount-1: # Not on high y row # <<<<<<<<<<<<<< @@ -3694,28 +3646,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":91 + /* "CAStar.pyx":87 * yhigh = True * * if (NodeID-1) // (zCount*yCount) != 0: # not on low x set # <<<<<<<<<<<<<< * xlow = True * if (NodeID-1) // (zCount*yCount) != (xCount-1): */ - __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 91, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 87, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 91, __pyx_L1_error) + __pyx_t_8 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 87, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_FloorDivide(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 91, __pyx_L1_error) + __pyx_t_9 = PyNumber_FloorDivide(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 87, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyObject_RichCompare(__pyx_t_9, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 91, __pyx_L1_error) + __pyx_t_8 = PyObject_RichCompare(__pyx_t_9, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 87, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 91, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 87, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_6) { - /* "CAStar.pyx":92 + /* "CAStar.pyx":88 * * if (NodeID-1) // (zCount*yCount) != 0: # not on low x set * xlow = True # <<<<<<<<<<<<<< @@ -3724,7 +3676,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ __pyx_v_xlow = 1; - /* "CAStar.pyx":91 + /* "CAStar.pyx":87 * yhigh = True * * if (NodeID-1) // (zCount*yCount) != 0: # not on low x set # <<<<<<<<<<<<<< @@ -3733,31 +3685,31 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":93 + /* "CAStar.pyx":89 * if (NodeID-1) // (zCount*yCount) != 0: # not on low x set * xlow = True * if (NodeID-1) // (zCount*yCount) != (xCount-1): # <<<<<<<<<<<<<< * xhigh = True * */ - __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_FloorDivide(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_7 = PyNumber_FloorDivide(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_xCount, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_xCount, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyObject_RichCompare(__pyx_t_7, __pyx_t_9, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_8 = PyObject_RichCompare(__pyx_t_7, __pyx_t_9, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_6) { - /* "CAStar.pyx":94 + /* "CAStar.pyx":90 * xlow = True * if (NodeID-1) // (zCount*yCount) != (xCount-1): * xhigh = True # <<<<<<<<<<<<<< @@ -3766,7 +3718,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ __pyx_v_xhigh = 1; - /* "CAStar.pyx":93 + /* "CAStar.pyx":89 * if (NodeID-1) // (zCount*yCount) != 0: # not on low x set * xlow = True * if (NodeID-1) // (zCount*yCount) != (xCount-1): # <<<<<<<<<<<<<< @@ -3775,7 +3727,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":96 + /* "CAStar.pyx":92 * xhigh = True * * if zlow: # <<<<<<<<<<<<<< @@ -3785,19 +3737,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_zlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":97 + /* "CAStar.pyx":93 * * if zlow: * friends.append(NodeID-1) # <<<<<<<<<<<<<< * if ylow: * friends.append((NodeID-1)-zCount) */ - __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 97, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 93, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 97, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 93, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":98 + /* "CAStar.pyx":94 * if zlow: * friends.append(NodeID-1) * if ylow: # <<<<<<<<<<<<<< @@ -3807,22 +3759,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_ylow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":99 + /* "CAStar.pyx":95 * friends.append(NodeID-1) * if ylow: * friends.append((NodeID-1)-zCount) # <<<<<<<<<<<<<< * if xlow: * friends.append((NodeID-1)-zCount-(zCount*yCount)) */ - __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 99, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 95, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 99, __pyx_L1_error) + __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 95, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 99, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 95, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "CAStar.pyx":100 + /* "CAStar.pyx":96 * if ylow: * friends.append((NodeID-1)-zCount) * if xlow: # <<<<<<<<<<<<<< @@ -3832,28 +3784,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":101 + /* "CAStar.pyx":97 * friends.append((NodeID-1)-zCount) * if xlow: * friends.append((NodeID-1)-zCount-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append((NodeID-1)-zCount+(zCount*yCount)) */ - __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 97, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Subtract(__pyx_t_9, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_t_8 = PyNumber_Subtract(__pyx_t_9, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 97, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 97, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 97, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 97, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":100 + /* "CAStar.pyx":96 * if ylow: * friends.append((NodeID-1)-zCount) * if xlow: # <<<<<<<<<<<<<< @@ -3862,7 +3814,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":102 + /* "CAStar.pyx":98 * if xlow: * friends.append((NodeID-1)-zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -3872,28 +3824,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":103 + /* "CAStar.pyx":99 * friends.append((NodeID-1)-zCount-(zCount*yCount)) * if xhigh: * friends.append((NodeID-1)-zCount+(zCount*yCount)) # <<<<<<<<<<<<<< * if yhigh: * friends.append((NodeID-1)+zCount) */ - __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Subtract(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_t_9 = PyNumber_Subtract(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 99, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":102 + /* "CAStar.pyx":98 * if xlow: * friends.append((NodeID-1)-zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -3902,7 +3854,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":98 + /* "CAStar.pyx":94 * if zlow: * friends.append(NodeID-1) * if ylow: # <<<<<<<<<<<<<< @@ -3911,7 +3863,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":104 + /* "CAStar.pyx":100 * if xhigh: * friends.append((NodeID-1)-zCount+(zCount*yCount)) * if yhigh: # <<<<<<<<<<<<<< @@ -3921,22 +3873,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_yhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":105 + /* "CAStar.pyx":101 * friends.append((NodeID-1)-zCount+(zCount*yCount)) * if yhigh: * friends.append((NodeID-1)+zCount) # <<<<<<<<<<<<<< * if xlow: * friends.append((NodeID-1)+zCount-(zCount*yCount)) */ - __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 105, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = PyNumber_Add(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 105, __pyx_L1_error) + __pyx_t_7 = PyNumber_Add(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 105, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 101, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":106 + /* "CAStar.pyx":102 * if yhigh: * friends.append((NodeID-1)+zCount) * if xlow: # <<<<<<<<<<<<<< @@ -3946,28 +3898,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":107 + /* "CAStar.pyx":103 * friends.append((NodeID-1)+zCount) * if xlow: * friends.append((NodeID-1)+zCount-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append((NodeID-1)+zCount+(zCount*yCount)) */ - __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 107, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 107, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 107, __pyx_L1_error) + __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 107, __pyx_L1_error) + __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 107, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 103, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "CAStar.pyx":106 + /* "CAStar.pyx":102 * if yhigh: * friends.append((NodeID-1)+zCount) * if xlow: # <<<<<<<<<<<<<< @@ -3976,7 +3928,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":108 + /* "CAStar.pyx":104 * if xlow: * friends.append((NodeID-1)+zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -3986,28 +3938,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":109 + /* "CAStar.pyx":105 * friends.append((NodeID-1)+zCount-(zCount*yCount)) * if xhigh: * friends.append((NodeID-1)+zCount+(zCount*yCount)) # <<<<<<<<<<<<<< * if zhigh: * friends.append(NodeID+1) */ - __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 109, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_Add(__pyx_t_9, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 109, __pyx_L1_error) + __pyx_t_7 = PyNumber_Add(__pyx_t_9, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 109, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 109, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 109, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":108 + /* "CAStar.pyx":104 * if xlow: * friends.append((NodeID-1)+zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4016,7 +3968,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":104 + /* "CAStar.pyx":100 * if xhigh: * friends.append((NodeID-1)-zCount+(zCount*yCount)) * if yhigh: # <<<<<<<<<<<<<< @@ -4025,7 +3977,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":96 + /* "CAStar.pyx":92 * xhigh = True * * if zlow: # <<<<<<<<<<<<<< @@ -4034,7 +3986,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":110 + /* "CAStar.pyx":106 * if xhigh: * friends.append((NodeID-1)+zCount+(zCount*yCount)) * if zhigh: # <<<<<<<<<<<<<< @@ -4044,19 +3996,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_zhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":111 + /* "CAStar.pyx":107 * friends.append((NodeID-1)+zCount+(zCount*yCount)) * if zhigh: * friends.append(NodeID+1) # <<<<<<<<<<<<<< * if ylow: * friends.append((NodeID+1)-zCount) */ - __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 111, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 111, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":112 + /* "CAStar.pyx":108 * if zhigh: * friends.append(NodeID+1) * if ylow: # <<<<<<<<<<<<<< @@ -4066,22 +4018,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_ylow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":113 + /* "CAStar.pyx":109 * friends.append(NodeID+1) * if ylow: * friends.append((NodeID+1)-zCount) # <<<<<<<<<<<<<< * if xlow: * friends.append((NodeID+1)-zCount-(zCount*yCount)) */ - __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 113, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 113, __pyx_L1_error) + __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 113, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "CAStar.pyx":114 + /* "CAStar.pyx":110 * if ylow: * friends.append((NodeID+1)-zCount) * if xlow: # <<<<<<<<<<<<<< @@ -4091,28 +4043,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":115 + /* "CAStar.pyx":111 * friends.append((NodeID+1)-zCount) * if xlow: * friends.append((NodeID+1)-zCount-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append((NodeID+1)-zCount+(zCount*yCount)) */ - __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 115, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Subtract(__pyx_t_9, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 115, __pyx_L1_error) + __pyx_t_8 = PyNumber_Subtract(__pyx_t_9, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 115, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 115, __pyx_L1_error) + __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 115, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":114 + /* "CAStar.pyx":110 * if ylow: * friends.append((NodeID+1)-zCount) * if xlow: # <<<<<<<<<<<<<< @@ -4121,7 +4073,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":116 + /* "CAStar.pyx":112 * if xlow: * friends.append((NodeID+1)-zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4131,28 +4083,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":117 + /* "CAStar.pyx":113 * friends.append((NodeID+1)-zCount-(zCount*yCount)) * if xhigh: * friends.append((NodeID+1)-zCount+(zCount*yCount)) # <<<<<<<<<<<<<< * if yhigh: * friends.append((NodeID+1)+zCount) */ - __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Subtract(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_t_9 = PyNumber_Subtract(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":116 + /* "CAStar.pyx":112 * if xlow: * friends.append((NodeID+1)-zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4161,7 +4113,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":112 + /* "CAStar.pyx":108 * if zhigh: * friends.append(NodeID+1) * if ylow: # <<<<<<<<<<<<<< @@ -4170,7 +4122,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":118 + /* "CAStar.pyx":114 * if xhigh: * friends.append((NodeID+1)-zCount+(zCount*yCount)) * if yhigh: # <<<<<<<<<<<<<< @@ -4180,22 +4132,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_yhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":119 + /* "CAStar.pyx":115 * friends.append((NodeID+1)-zCount+(zCount*yCount)) * if yhigh: * friends.append((NodeID+1)+zCount) # <<<<<<<<<<<<<< * if xlow: * friends.append((NodeID+1)+zCount-(zCount*yCount)) */ - __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 119, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = PyNumber_Add(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 119, __pyx_L1_error) + __pyx_t_7 = PyNumber_Add(__pyx_t_8, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 119, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":120 + /* "CAStar.pyx":116 * if yhigh: * friends.append((NodeID+1)+zCount) * if xlow: # <<<<<<<<<<<<<< @@ -4205,28 +4157,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":121 + /* "CAStar.pyx":117 * friends.append((NodeID+1)+zCount) * if xlow: * friends.append((NodeID+1)+zCount-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append((NodeID+1)+zCount+(zCount*yCount)) */ - __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 121, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 121, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 121, __pyx_L1_error) + __pyx_t_7 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 121, __pyx_L1_error) + __pyx_t_9 = PyNumber_Subtract(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 121, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "CAStar.pyx":120 + /* "CAStar.pyx":116 * if yhigh: * friends.append((NodeID+1)+zCount) * if xlow: # <<<<<<<<<<<<<< @@ -4235,7 +4187,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":122 + /* "CAStar.pyx":118 * if xlow: * friends.append((NodeID+1)+zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4245,28 +4197,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":123 + /* "CAStar.pyx":119 * friends.append((NodeID+1)+zCount-(zCount*yCount)) * if xhigh: * friends.append((NodeID+1)+zCount+(zCount*yCount)) # <<<<<<<<<<<<<< * * if ylow: */ - __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 123, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_Add(__pyx_t_9, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 123, __pyx_L1_error) + __pyx_t_7 = PyNumber_Add(__pyx_t_9, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 123, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 123, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 123, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":122 + /* "CAStar.pyx":118 * if xlow: * friends.append((NodeID+1)+zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4275,7 +4227,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":118 + /* "CAStar.pyx":114 * if xhigh: * friends.append((NodeID+1)-zCount+(zCount*yCount)) * if yhigh: # <<<<<<<<<<<<<< @@ -4284,7 +4236,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":110 + /* "CAStar.pyx":106 * if xhigh: * friends.append((NodeID-1)+zCount+(zCount*yCount)) * if zhigh: # <<<<<<<<<<<<<< @@ -4293,7 +4245,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":125 + /* "CAStar.pyx":121 * friends.append((NodeID+1)+zCount+(zCount*yCount)) * * if ylow: # <<<<<<<<<<<<<< @@ -4303,19 +4255,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_ylow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":126 + /* "CAStar.pyx":122 * * if ylow: * friends.append(NodeID-zCount) # <<<<<<<<<<<<<< * if xlow: * friends.append(NodeID-zCount-(zCount*yCount)) */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 126, __pyx_L1_error) + __pyx_t_8 = PyNumber_Subtract(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 126, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":127 + /* "CAStar.pyx":123 * if ylow: * friends.append(NodeID-zCount) * if xlow: # <<<<<<<<<<<<<< @@ -4325,25 +4277,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":128 + /* "CAStar.pyx":124 * friends.append(NodeID-zCount) * if xlow: * friends.append(NodeID-zCount-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append(NodeID-zCount+(zCount*yCount)) */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 128, __pyx_L1_error) + __pyx_t_8 = PyNumber_Subtract(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 128, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 128, __pyx_L1_error) + __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 128, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":127 + /* "CAStar.pyx":123 * if ylow: * friends.append(NodeID-zCount) * if xlow: # <<<<<<<<<<<<<< @@ -4352,7 +4304,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":129 + /* "CAStar.pyx":125 * if xlow: * friends.append(NodeID-zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4362,25 +4314,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":130 + /* "CAStar.pyx":126 * friends.append(NodeID-zCount-(zCount*yCount)) * if xhigh: * friends.append(NodeID-zCount+(zCount*yCount)) # <<<<<<<<<<<<<< * if yhigh: * friends.append(NodeID+zCount) */ - __pyx_t_7 = PyNumber_Subtract(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 130, __pyx_L1_error) + __pyx_t_7 = PyNumber_Subtract(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 126, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 130, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 126, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 130, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 126, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 130, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 126, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":129 + /* "CAStar.pyx":125 * if xlow: * friends.append(NodeID-zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4389,7 +4341,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":125 + /* "CAStar.pyx":121 * friends.append((NodeID+1)+zCount+(zCount*yCount)) * * if ylow: # <<<<<<<<<<<<<< @@ -4398,7 +4350,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":131 + /* "CAStar.pyx":127 * if xhigh: * friends.append(NodeID-zCount+(zCount*yCount)) * if yhigh: # <<<<<<<<<<<<<< @@ -4408,19 +4360,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_yhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":132 + /* "CAStar.pyx":128 * friends.append(NodeID-zCount+(zCount*yCount)) * if yhigh: * friends.append(NodeID+zCount) # <<<<<<<<<<<<<< * if xlow: * friends.append(NodeID+zCount-(zCount*yCount)) */ - __pyx_t_8 = PyNumber_Add(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 132, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 132, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":133 + /* "CAStar.pyx":129 * if yhigh: * friends.append(NodeID+zCount) * if xlow: # <<<<<<<<<<<<<< @@ -4430,25 +4382,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":134 + /* "CAStar.pyx":130 * friends.append(NodeID+zCount) * if xlow: * friends.append(NodeID+zCount-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append(NodeID+zCount+(zCount*yCount)) */ - __pyx_t_8 = PyNumber_Add(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 134, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 134, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 134, __pyx_L1_error) + __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 134, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 130, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":133 + /* "CAStar.pyx":129 * if yhigh: * friends.append(NodeID+zCount) * if xlow: # <<<<<<<<<<<<<< @@ -4457,7 +4409,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":135 + /* "CAStar.pyx":131 * if xlow: * friends.append(NodeID+zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4467,25 +4419,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":136 + /* "CAStar.pyx":132 * friends.append(NodeID+zCount-(zCount*yCount)) * if xhigh: * friends.append(NodeID+zCount+(zCount*yCount)) # <<<<<<<<<<<<<< * * */ - __pyx_t_7 = PyNumber_Add(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 136, __pyx_L1_error) + __pyx_t_7 = PyNumber_Add(__pyx_v_NodeID, __pyx_v_zCount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 136, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 136, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 136, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":135 + /* "CAStar.pyx":131 * if xlow: * friends.append(NodeID+zCount-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4494,7 +4446,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":131 + /* "CAStar.pyx":127 * if xhigh: * friends.append(NodeID-zCount+(zCount*yCount)) * if yhigh: # <<<<<<<<<<<<<< @@ -4503,7 +4455,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":139 + /* "CAStar.pyx":135 * * * if zlow: # <<<<<<<<<<<<<< @@ -4513,7 +4465,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_zlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":140 + /* "CAStar.pyx":136 * * if zlow: * if xlow: # <<<<<<<<<<<<<< @@ -4523,25 +4475,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":141 + /* "CAStar.pyx":137 * if zlow: * if xlow: * friends.append((NodeID-1)-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append((NodeID-1)+(zCount*yCount)) */ - __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 141, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 141, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 141, __pyx_L1_error) + __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 141, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":140 + /* "CAStar.pyx":136 * * if zlow: * if xlow: # <<<<<<<<<<<<<< @@ -4550,7 +4502,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":142 + /* "CAStar.pyx":138 * if xlow: * friends.append((NodeID-1)-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4560,25 +4512,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":143 + /* "CAStar.pyx":139 * friends.append((NodeID-1)-(zCount*yCount)) * if xhigh: * friends.append((NodeID-1)+(zCount*yCount)) # <<<<<<<<<<<<<< * * if zhigh: */ - __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 143, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 143, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 139, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":142 + /* "CAStar.pyx":138 * if xlow: * friends.append((NodeID-1)-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4587,7 +4539,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":139 + /* "CAStar.pyx":135 * * * if zlow: # <<<<<<<<<<<<<< @@ -4596,7 +4548,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":145 + /* "CAStar.pyx":141 * friends.append((NodeID-1)+(zCount*yCount)) * * if zhigh: # <<<<<<<<<<<<<< @@ -4606,7 +4558,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_zhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":146 + /* "CAStar.pyx":142 * * if zhigh: * if xlow: # <<<<<<<<<<<<<< @@ -4616,25 +4568,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":147 + /* "CAStar.pyx":143 * if zhigh: * if xlow: * friends.append((NodeID+1)-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append((NodeID+1)+(zCount*yCount)) */ - __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 147, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 147, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 147, __pyx_L1_error) + __pyx_t_7 = PyNumber_Subtract(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 147, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 143, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":146 + /* "CAStar.pyx":142 * * if zhigh: * if xlow: # <<<<<<<<<<<<<< @@ -4643,7 +4595,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":148 + /* "CAStar.pyx":144 * if xlow: * friends.append((NodeID+1)-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4653,25 +4605,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":149 + /* "CAStar.pyx":145 * friends.append((NodeID+1)-(zCount*yCount)) * if xhigh: * friends.append((NodeID+1)+(zCount*yCount)) # <<<<<<<<<<<<<< * * if xlow: */ - __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_v_NodeID, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 145, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":148 + /* "CAStar.pyx":144 * if xlow: * friends.append((NodeID+1)-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4680,7 +4632,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":145 + /* "CAStar.pyx":141 * friends.append((NodeID-1)+(zCount*yCount)) * * if zhigh: # <<<<<<<<<<<<<< @@ -4689,7 +4641,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":151 + /* "CAStar.pyx":147 * friends.append((NodeID+1)+(zCount*yCount)) * * if xlow: # <<<<<<<<<<<<<< @@ -4699,22 +4651,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xlow != 0); if (__pyx_t_6) { - /* "CAStar.pyx":152 + /* "CAStar.pyx":148 * * if xlow: * friends.append(NodeID-(zCount*yCount)) # <<<<<<<<<<<<<< * if xhigh: * friends.append(NodeID+(zCount*yCount)) */ - __pyx_t_8 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 152, __pyx_L1_error) + __pyx_t_8 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyNumber_Subtract(__pyx_v_NodeID, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 152, __pyx_L1_error) + __pyx_t_9 = PyNumber_Subtract(__pyx_v_NodeID, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 152, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 148, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "CAStar.pyx":151 + /* "CAStar.pyx":147 * friends.append((NodeID+1)+(zCount*yCount)) * * if xlow: # <<<<<<<<<<<<<< @@ -4723,7 +4675,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":153 + /* "CAStar.pyx":149 * if xlow: * friends.append(NodeID-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4733,22 +4685,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_t_6 = (__pyx_v_xhigh != 0); if (__pyx_t_6) { - /* "CAStar.pyx":154 + /* "CAStar.pyx":150 * friends.append(NodeID-(zCount*yCount)) * if xhigh: * friends.append(NodeID+(zCount*yCount)) # <<<<<<<<<<<<<< * * return friends */ - __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 154, __pyx_L1_error) + __pyx_t_9 = PyNumber_Multiply(__pyx_v_zCount, __pyx_v_yCount); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyNumber_Add(__pyx_v_NodeID, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 154, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_v_NodeID, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 154, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_friends, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 150, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":153 + /* "CAStar.pyx":149 * if xlow: * friends.append(NodeID-(zCount*yCount)) * if xhigh: # <<<<<<<<<<<<<< @@ -4757,7 +4709,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ } - /* "CAStar.pyx":156 + /* "CAStar.pyx":152 * friends.append(NodeID+(zCount*yCount)) * * return friends # <<<<<<<<<<<<<< @@ -4769,7 +4721,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED __pyx_r = __pyx_v_friends; goto __pyx_L0; - /* "CAStar.pyx":78 + /* "CAStar.pyx":74 * node.add_friend(friend) * * def CalculateNeighbours(self,NodeID,xCount,yCount,zCount): # <<<<<<<<<<<<<< @@ -4791,7 +4743,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED return __pyx_r; } -/* "CAStar.pyx":160 +/* "CAStar.pyx":156 * ################################### * * def MapHash(self,value,div): # <<<<<<<<<<<<<< @@ -4800,9 +4752,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_10CalculateNeighbours(CYTHON_UNUSED */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_13MapHash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_13MapHash = {"MapHash", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_13MapHash, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_13MapHash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_15MapHash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_15MapHash = {"MapHash", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_15MapHash, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_15MapHash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; PyObject *__pyx_v_value = 0; PyObject *__pyx_v_div = 0; @@ -4834,17 +4786,17 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_13MapHash(PyObject *__pyx_self, PyO case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("MapHash", 1, 3, 3, 1); __PYX_ERR(0, 160, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("MapHash", 1, 3, 3, 1); __PYX_ERR(0, 156, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_div)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("MapHash", 1, 3, 3, 2); __PYX_ERR(0, 160, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("MapHash", 1, 3, 3, 2); __PYX_ERR(0, 156, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "MapHash") < 0)) __PYX_ERR(0, 160, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "MapHash") < 0)) __PYX_ERR(0, 156, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; @@ -4859,27 +4811,27 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_13MapHash(PyObject *__pyx_self, PyO } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("MapHash", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 160, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("MapHash", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 156, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.MapHash", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_12MapHash(__pyx_self, __pyx_v_self, __pyx_v_value, __pyx_v_div); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_14MapHash(__pyx_self, __pyx_v_self, __pyx_v_value, __pyx_v_div); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_12MapHash(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_value, PyObject *__pyx_v_div) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_14MapHash(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_value, PyObject *__pyx_v_div) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("MapHash", 0); - /* "CAStar.pyx":161 + /* "CAStar.pyx":157 * * def MapHash(self,value,div): * return int(value//div) # <<<<<<<<<<<<<< @@ -4887,16 +4839,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_12MapHash(CYTHON_UNUSED PyObject *_ * def Node_Cache_Hash(self,Key): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyNumber_FloorDivide(__pyx_v_value, __pyx_v_div); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error) + __pyx_t_1 = PyNumber_FloorDivide(__pyx_v_value, __pyx_v_div); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 157, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; - /* "CAStar.pyx":160 + /* "CAStar.pyx":156 * ################################### * * def MapHash(self,value,div): # <<<<<<<<<<<<<< @@ -4916,7 +4868,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_12MapHash(CYTHON_UNUSED PyObject *_ return __pyx_r; } -/* "CAStar.pyx":163 +/* "CAStar.pyx":159 * return int(value//div) * * def Node_Cache_Hash(self,Key): # <<<<<<<<<<<<<< @@ -4925,9 +4877,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_12MapHash(CYTHON_UNUSED PyObject *_ */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_15Node_Cache_Hash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_15Node_Cache_Hash = {"Node_Cache_Hash", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_15Node_Cache_Hash, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_15Node_Cache_Hash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_17Node_Cache_Hash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_17Node_Cache_Hash = {"Node_Cache_Hash", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_17Node_Cache_Hash, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_17Node_Cache_Hash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_Key = 0; PyObject *__pyx_r = 0; @@ -4956,11 +4908,11 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_15Node_Cache_Hash(PyObject *__pyx_s case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Key)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Node_Cache_Hash", 1, 2, 2, 1); __PYX_ERR(0, 163, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Node_Cache_Hash", 1, 2, 2, 1); __PYX_ERR(0, 159, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Node_Cache_Hash") < 0)) __PYX_ERR(0, 163, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Node_Cache_Hash") < 0)) __PYX_ERR(0, 159, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -4973,20 +4925,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_15Node_Cache_Hash(PyObject *__pyx_s } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Node_Cache_Hash", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 163, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Node_Cache_Hash", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 159, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.Node_Cache_Hash", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(__pyx_self, __pyx_v_self, __pyx_v_Key); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_16Node_Cache_Hash(__pyx_self, __pyx_v_self, __pyx_v_Key); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Key) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Node_Cache_Hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Key) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; @@ -4997,7 +4949,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyO PyObject *__pyx_t_6 = NULL; __Pyx_RefNannySetupContext("Node_Cache_Hash", 0); - /* "CAStar.pyx":164 + /* "CAStar.pyx":160 * * def Node_Cache_Hash(self,Key): * return int(int(hashlib.md5(str(Key).encode('utf8')).hexdigest()[:8],16)//self.Node_Cache_BlockSize) #Generates integer hash of key then int div by BlockSize # <<<<<<<<<<<<<< @@ -5005,23 +4957,23 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyO * ################################## */ __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_hashlib); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_hashlib); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_md5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_md5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_Key); __Pyx_GIVEREF(__pyx_v_Key); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_Key); - __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = NULL; @@ -5035,14 +4987,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyO } } if (!__pyx_t_3) { - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_2); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; @@ -5051,26 +5003,26 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyO #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else #endif { - __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL; __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_5); __pyx_t_5 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_hexdigest); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_hexdigest); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -5084,17 +5036,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyO } } if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { - __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_1, 0, 8, NULL, NULL, &__pyx_slice__2, 0, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_1, 0, 8, NULL, NULL, &__pyx_slice__2, 0, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); @@ -5102,23 +5054,23 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyO __Pyx_GIVEREF(__pyx_int_16); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_16); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&PyInt_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&PyInt_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache_BlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache_BlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyNumber_FloorDivide(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = PyNumber_FloorDivide(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "CAStar.pyx":163 + /* "CAStar.pyx":159 * return int(value//div) * * def Node_Cache_Hash(self,Key): # <<<<<<<<<<<<<< @@ -5142,7 +5094,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyO return __pyx_r; } -/* "CAStar.pyx":168 +/* "CAStar.pyx":164 * ################################## * * def Build_Node_Cache(self): # <<<<<<<<<<<<<< @@ -5151,20 +5103,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_14Node_Cache_Hash(CYTHON_UNUSED PyO */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_17Build_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_17Build_Node_Cache = {"Build_Node_Cache", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_17Build_Node_Cache, METH_O, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_17Build_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_19Build_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_19Build_Node_Cache = {"Build_Node_Cache", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_19Build_Node_Cache, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_19Build_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("Build_Node_Cache (wrapper)", 0); - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(__pyx_self, ((PyObject *)__pyx_v_self)); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_18Build_Node_Cache(__pyx_self, ((PyObject *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Build_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_node = NULL; PyObject *__pyx_v_x = NULL; PyObject *__pyx_v_y = NULL; @@ -5187,28 +5139,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py PyObject *__pyx_t_11 = NULL; __Pyx_RefNannySetupContext("Build_Node_Cache", 0); - /* "CAStar.pyx":169 + /* "CAStar.pyx":165 * * def Build_Node_Cache(self): * self.Node_Cache = {} # <<<<<<<<<<<<<< * for node in self.Nodes.values(): - * x = node.Coords.x + 0.25*self.xSize #Prevents floating point rounding errors + * x = node.Coords.Get_X() + 0.25*self.xSize #Prevents floating point rounding errors */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 169, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache, __pyx_t_1) < 0) __PYX_ERR(0, 169, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache, __pyx_t_1) < 0) __PYX_ERR(0, 165, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":170 + /* "CAStar.pyx":166 * def Build_Node_Cache(self): * self.Node_Cache = {} * for node in self.Nodes.values(): # <<<<<<<<<<<<<< - * x = node.Coords.x + 0.25*self.xSize #Prevents floating point rounding errors - * y = node.Coords.y + 0.25*self.ySize + * x = node.Coords.Get_X() + 0.25*self.xSize #Prevents floating point rounding errors + * y = node.Coords.Get_Y() + 0.25*self.ySize */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -5222,10 +5174,10 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py } } if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { - __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -5233,9 +5185,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 166, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { @@ -5243,17 +5195,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py if (likely(PyList_CheckExact(__pyx_t_3))) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 166, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 166, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } @@ -5263,7 +5215,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 170, __pyx_L1_error) + else __PYX_ERR(0, 166, __pyx_L1_error) } break; } @@ -5272,121 +5224,175 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py __Pyx_XDECREF_SET(__pyx_v_node, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":171 + /* "CAStar.pyx":167 * self.Node_Cache = {} * for node in self.Nodes.values(): - * x = node.Coords.x + 0.25*self.xSize #Prevents floating point rounding errors # <<<<<<<<<<<<<< - * y = node.Coords.y + 0.25*self.ySize - * z = node.Coords.z + 0.25*self.zSize + * x = node.Coords.Get_X() + 0.25*self.xSize #Prevents floating point rounding errors # <<<<<<<<<<<<<< + * y = node.Coords.Get_Y() + 0.25*self.ySize + * z = node.Coords.Get_Z() + 0.25*self.zSize */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Coords); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Get_X); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + } + } + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) + } __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyNumber_Multiply(__pyx_float_0_25, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyNumber_Multiply(__pyx_float_0_25, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1); - __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_6); + __pyx_t_6 = 0; - /* "CAStar.pyx":172 + /* "CAStar.pyx":168 * for node in self.Nodes.values(): - * x = node.Coords.x + 0.25*self.xSize #Prevents floating point rounding errors - * y = node.Coords.y + 0.25*self.ySize # <<<<<<<<<<<<<< - * z = node.Coords.z + 0.25*self.zSize + * x = node.Coords.Get_X() + 0.25*self.xSize #Prevents floating point rounding errors + * y = node.Coords.Get_Y() + 0.25*self.ySize # <<<<<<<<<<<<<< + * z = node.Coords.Get_Z() + 0.25*self.zSize * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Coords); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Get_Y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_y); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 168, __pyx_L1_error) + } __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyNumber_Multiply(__pyx_float_0_25, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error) + __pyx_t_2 = PyNumber_Multiply(__pyx_float_0_25, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) + __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":173 - * x = node.Coords.x + 0.25*self.xSize #Prevents floating point rounding errors - * y = node.Coords.y + 0.25*self.ySize - * z = node.Coords.z + 0.25*self.zSize # <<<<<<<<<<<<<< + /* "CAStar.pyx":169 + * x = node.Coords.Get_X() + 0.25*self.xSize #Prevents floating point rounding errors + * y = node.Coords.Get_Y() + 0.25*self.ySize + * z = node.Coords.Get_Z() + 0.25*self.zSize # <<<<<<<<<<<<<< * * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_z); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Coords); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Get_Z); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + } + } + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 169, __pyx_L1_error) + } __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyNumber_Multiply(__pyx_float_0_25, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyNumber_Multiply(__pyx_float_0_25, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 169, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_z, __pyx_t_1); - __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_z, __pyx_t_6); + __pyx_t_6 = 0; - /* "CAStar.pyx":175 - * z = node.Coords.z + 0.25*self.zSize + /* "CAStar.pyx":171 + * z = node.Coords.Get_Z() + 0.25*self.zSize * * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) # <<<<<<<<<<<<<< - * self.Node_Cache[(mx,my,mz)] = node.NodeID + * self.Node_Cache[(mx,my,mz)] = node.Get_NodeID() * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = NULL; __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + __Pyx_DECREF_SET(__pyx_t_2, function); __pyx_t_8 = 1; } } #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_x, __pyx_t_2}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error) + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_x, __pyx_t_1}; + __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else #endif #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_x, __pyx_t_2}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error) + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_x, __pyx_t_1}; + __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else #endif { - __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 175, __pyx_L1_error) + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (__pyx_t_7) { __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; @@ -5394,18 +5400,18 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py __Pyx_INCREF(__pyx_v_x); __Pyx_GIVEREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_x); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = NULL; __pyx_t_8 = 0; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { @@ -5420,24 +5426,24 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_y, __pyx_t_2}; - __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 175, __pyx_L1_error) + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_y, __pyx_t_1}; + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_y, __pyx_t_2}; - __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 175, __pyx_L1_error) + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_y, __pyx_t_1}; + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else #endif { - __pyx_t_10 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 175, __pyx_L1_error) + __pyx_t_10 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); if (__pyx_t_7) { __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7); __pyx_t_7 = NULL; @@ -5445,18 +5451,18 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py __Pyx_INCREF(__pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_8, __pyx_v_y); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_8, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_10, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_8, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 175, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = NULL; __pyx_t_8 = 0; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { @@ -5471,24 +5477,24 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_10)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_z, __pyx_t_2}; - __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 175, __pyx_L1_error) + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_z, __pyx_t_1}; + __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_z, __pyx_t_2}; - __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 175, __pyx_L1_error) + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_z, __pyx_t_1}; + __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else #endif { - __pyx_t_11 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 175, __pyx_L1_error) + __pyx_t_11 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__pyx_t_7) { __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7); __pyx_t_7 = NULL; @@ -5496,59 +5502,77 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py __Pyx_INCREF(__pyx_v_z); __Pyx_GIVEREF(__pyx_v_z); PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_8, __pyx_v_z); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_8, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_8, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF_SET(__pyx_v_mx, __pyx_t_1); - __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_my, __pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_mx, __pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF_SET(__pyx_v_my, __pyx_t_2); + __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_v_mz, __pyx_t_9); __pyx_t_9 = 0; - /* "CAStar.pyx":176 + /* "CAStar.pyx":172 * * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) - * self.Node_Cache[(mx,my,mz)] = node.NodeID # <<<<<<<<<<<<<< + * self.Node_Cache[(mx,my,mz)] = node.Get_NodeID() # <<<<<<<<<<<<<< * * def Save_Node_Cache(self): */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_NodeID); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 176, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Get_NodeID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + if (__pyx_t_6) { + __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + __pyx_t_9 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 172, __pyx_L1_error) + } __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_mx); __Pyx_GIVEREF(__pyx_v_mx); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_mx); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_mx); __Pyx_INCREF(__pyx_v_my); __Pyx_GIVEREF(__pyx_v_my); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_my); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_my); __Pyx_INCREF(__pyx_v_mz); __Pyx_GIVEREF(__pyx_v_mz); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_mz); - if (unlikely(PyObject_SetItem(__pyx_t_6, __pyx_t_1, __pyx_t_9) < 0)) __PYX_ERR(0, 176, __pyx_L1_error) + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_mz); + if (unlikely(PyObject_SetItem(__pyx_t_2, __pyx_t_6, __pyx_t_9) < 0)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "CAStar.pyx":170 + /* "CAStar.pyx":166 * def Build_Node_Cache(self): * self.Node_Cache = {} * for node in self.Nodes.values(): # <<<<<<<<<<<<<< - * x = node.Coords.x + 0.25*self.xSize #Prevents floating point rounding errors - * y = node.Coords.y + 0.25*self.ySize + * x = node.Coords.Get_X() + 0.25*self.xSize #Prevents floating point rounding errors + * y = node.Coords.Get_Y() + 0.25*self.ySize */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":168 + /* "CAStar.pyx":164 * ################################## * * def Build_Node_Cache(self): # <<<<<<<<<<<<<< @@ -5583,8 +5607,8 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py return __pyx_r; } -/* "CAStar.pyx":178 - * self.Node_Cache[(mx,my,mz)] = node.NodeID +/* "CAStar.pyx":174 + * self.Node_Cache[(mx,my,mz)] = node.Get_NodeID() * * def Save_Node_Cache(self): # <<<<<<<<<<<<<< * print("Preparing to save Node Cache") @@ -5592,20 +5616,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_16Build_Node_Cache(CYTHON_UNUSED Py */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_19Save_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_19Save_Node_Cache = {"Save_Node_Cache", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_19Save_Node_Cache, METH_O, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_19Save_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_21Save_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_21Save_Node_Cache = {"Save_Node_Cache", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_21Save_Node_Cache, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_21Save_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("Save_Node_Cache (wrapper)", 0); - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(__pyx_self, ((PyObject *)__pyx_v_self)); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_20Save_Node_Cache(__pyx_self, ((PyObject *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Save_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_Sets = NULL; PyObject *__pyx_v_Key = NULL; PyObject *__pyx_v_r = NULL; @@ -5632,43 +5656,43 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO PyObject *__pyx_t_15 = NULL; __Pyx_RefNannySetupContext("Save_Node_Cache", 0); - /* "CAStar.pyx":179 + /* "CAStar.pyx":175 * * def Save_Node_Cache(self): * print("Preparing to save Node Cache") # <<<<<<<<<<<<<< * Sets = {} * for Key in self.Node_Cache: */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Preparing_to_save_Node_Cache) < 0) __PYX_ERR(0, 179, __pyx_L1_error) + if (__Pyx_PrintOne(0, __pyx_kp_s_Preparing_to_save_Node_Cache) < 0) __PYX_ERR(0, 175, __pyx_L1_error) - /* "CAStar.pyx":180 + /* "CAStar.pyx":176 * def Save_Node_Cache(self): * print("Preparing to save Node Cache") * Sets = {} # <<<<<<<<<<<<<< * for Key in self.Node_Cache: * r = self.Node_Cache_Hash(Key) #Gets Hashed key */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_Sets = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":181 + /* "CAStar.pyx":177 * print("Preparing to save Node Cache") * Sets = {} * for Key in self.Node_Cache: # <<<<<<<<<<<<<< * r = self.Node_Cache_Hash(Key) #Gets Hashed key * if r not in Sets: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error) + __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 181, __pyx_L1_error) + __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { @@ -5676,17 +5700,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO if (likely(PyList_CheckExact(__pyx_t_2))) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 181, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 177, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 181, __pyx_L1_error) + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 177, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } @@ -5696,7 +5720,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 181, __pyx_L1_error) + else __PYX_ERR(0, 177, __pyx_L1_error) } break; } @@ -5705,14 +5729,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_Key, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":182 + /* "CAStar.pyx":178 * Sets = {} * for Key in self.Node_Cache: * r = self.Node_Cache_Hash(Key) #Gets Hashed key # <<<<<<<<<<<<<< * if r not in Sets: * Sets[r] = {} */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache_Hash); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 182, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache_Hash); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { @@ -5725,13 +5749,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO } } if (!__pyx_t_6) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_Key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_Key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_Key}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_1); } else @@ -5739,19 +5763,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_Key}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { - __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 182, __pyx_L1_error) + __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL; __Pyx_INCREF(__pyx_v_Key); __Pyx_GIVEREF(__pyx_v_Key); PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_Key); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } @@ -5760,30 +5784,30 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_r, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":183 + /* "CAStar.pyx":179 * for Key in self.Node_Cache: * r = self.Node_Cache_Hash(Key) #Gets Hashed key * if r not in Sets: # <<<<<<<<<<<<<< * Sets[r] = {} * Sets[r][Key] = self.Node_Cache[Key] #Adds the item to the set */ - __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_v_r, __pyx_v_Sets, Py_NE)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 183, __pyx_L1_error) + __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_v_r, __pyx_v_Sets, Py_NE)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 179, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 != 0); if (__pyx_t_9) { - /* "CAStar.pyx":184 + /* "CAStar.pyx":180 * r = self.Node_Cache_Hash(Key) #Gets Hashed key * if r not in Sets: * Sets[r] = {} # <<<<<<<<<<<<<< * Sets[r][Key] = self.Node_Cache[Key] #Adds the item to the set * print("Saving Node Cache. Sets:",len(Sets)) */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyDict_SetItem(__pyx_v_Sets, __pyx_v_r, __pyx_t_1) < 0)) __PYX_ERR(0, 184, __pyx_L1_error) + if (unlikely(PyDict_SetItem(__pyx_v_Sets, __pyx_v_r, __pyx_t_1) < 0)) __PYX_ERR(0, 180, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":183 + /* "CAStar.pyx":179 * for Key in self.Node_Cache: * r = self.Node_Cache_Hash(Key) #Gets Hashed key * if r not in Sets: # <<<<<<<<<<<<<< @@ -5792,25 +5816,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO */ } - /* "CAStar.pyx":185 + /* "CAStar.pyx":181 * if r not in Sets: * Sets[r] = {} * Sets[r][Key] = self.Node_Cache[Key] #Adds the item to the set # <<<<<<<<<<<<<< * print("Saving Node Cache. Sets:",len(Sets)) * for Set in Sets: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = PyObject_GetItem(__pyx_t_1, __pyx_v_Key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 185, __pyx_L1_error) + __pyx_t_5 = PyObject_GetItem(__pyx_t_1, __pyx_v_Key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_Sets, __pyx_v_r); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_Sets, __pyx_v_r); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_Key, __pyx_t_5) < 0)) __PYX_ERR(0, 185, __pyx_L1_error) + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_Key, __pyx_t_5) < 0)) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":181 + /* "CAStar.pyx":177 * print("Preparing to save Node Cache") * Sets = {} * for Key in self.Node_Cache: # <<<<<<<<<<<<<< @@ -5820,17 +5844,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":186 + /* "CAStar.pyx":182 * Sets[r] = {} * Sets[r][Key] = self.Node_Cache[Key] #Adds the item to the set * print("Saving Node Cache. Sets:",len(Sets)) # <<<<<<<<<<<<<< * for Set in Sets: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"NC"+str(Set)+self.BlockFileSuffix) */ - __pyx_t_3 = PyDict_Size(__pyx_v_Sets); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 186, __pyx_L1_error) - __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 186, __pyx_L1_error) + __pyx_t_3 = PyDict_Size(__pyx_v_Sets); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 182, __pyx_L1_error) + __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 186, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 182, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_kp_s_Saving_Node_Cache_Sets); __Pyx_GIVEREF(__pyx_kp_s_Saving_Node_Cache_Sets); @@ -5838,10 +5862,10 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_5) < 0) __PYX_ERR(0, 186, __pyx_L1_error) + if (__Pyx_PrintOne(0, __pyx_t_5) < 0) __PYX_ERR(0, 182, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":187 + /* "CAStar.pyx":183 * Sets[r][Key] = self.Node_Cache[Key] #Adds the item to the set * print("Saving Node Cache. Sets:",len(Sets)) * for Set in Sets: # <<<<<<<<<<<<<< @@ -5849,7 +5873,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO * file = open(filename,"wb") */ __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_Sets, 1, ((PyObject *)NULL), (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L1_error) + __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_Sets, 1, ((PyObject *)NULL), (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = __pyx_t_2; @@ -5857,50 +5881,50 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO while (1) { __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_10, &__pyx_t_3, &__pyx_t_2, NULL, NULL, __pyx_t_11); if (unlikely(__pyx_t_12 == 0)) break; - if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 187, __pyx_L1_error) + if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_Set, __pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":188 + /* "CAStar.pyx":184 * print("Saving Node Cache. Sets:",len(Sets)) * for Set in Sets: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"NC"+str(Set)+self.BlockFileSuffix) # <<<<<<<<<<<<<< * file = open(filename,"wb") * data = Sets[Set] */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_join); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_join); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = PyNumber_Add(__pyx_t_13, __pyx_n_s_NC); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_14 = PyNumber_Add(__pyx_t_13, __pyx_n_s_NC); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_INCREF(__pyx_v_Set); __Pyx_GIVEREF(__pyx_v_Set); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_Set); - __pyx_t_15 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_13, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_15 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_13, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = PyNumber_Add(__pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_13 = PyNumber_Add(__pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); - __pyx_t_14 = PyNumber_Add(__pyx_t_13, __pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_14 = PyNumber_Add(__pyx_t_13, __pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; @@ -5919,7 +5943,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[4] = {__pyx_t_15, __pyx_t_7, __pyx_t_6, __pyx_t_14}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; @@ -5930,7 +5954,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[4] = {__pyx_t_15, __pyx_t_7, __pyx_t_6, __pyx_t_14}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; @@ -5939,7 +5963,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO } else #endif { - __pyx_t_13 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_13 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); if (__pyx_t_15) { __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_15); __pyx_t_15 = NULL; @@ -5953,7 +5977,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_14 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_13, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_13, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } @@ -5961,14 +5985,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO __Pyx_XDECREF_SET(__pyx_v_filename, __pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":189 + /* "CAStar.pyx":185 * for Set in Sets: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"NC"+str(Set)+self.BlockFileSuffix) * file = open(filename,"wb") # <<<<<<<<<<<<<< * data = Sets[Set] * pickle.dump(data,file,protocol = pickle.HIGHEST_PROTOCOL) */ - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L1_error) + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_filename); __Pyx_GIVEREF(__pyx_v_filename); @@ -5976,37 +6000,37 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO __Pyx_INCREF(__pyx_n_s_wb); __Pyx_GIVEREF(__pyx_n_s_wb); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_wb); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 189, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_v_file, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":190 + /* "CAStar.pyx":186 * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"NC"+str(Set)+self.BlockFileSuffix) * file = open(filename,"wb") * data = Sets[Set] # <<<<<<<<<<<<<< * pickle.dump(data,file,protocol = pickle.HIGHEST_PROTOCOL) * file.close() */ - __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_Sets, __pyx_v_Set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 190, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_Sets, __pyx_v_Set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_data, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":191 + /* "CAStar.pyx":187 * file = open(filename,"wb") * data = Sets[Set] * pickle.dump(data,file,protocol = pickle.HIGHEST_PROTOCOL) # <<<<<<<<<<<<<< * file.close() * */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dump); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 191, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dump); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_data); __Pyx_GIVEREF(__pyx_v_data); @@ -6014,30 +6038,30 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO __Pyx_INCREF(__pyx_v_file); __Pyx_GIVEREF(__pyx_v_file); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_file); - __pyx_t_13 = PyDict_New(); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 191, __pyx_L1_error) + __pyx_t_13 = PyDict_New(); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 191, __pyx_L1_error) + __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_HIGHEST_PROTOCOL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 191, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_HIGHEST_PROTOCOL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_protocol, __pyx_t_6) < 0) __PYX_ERR(0, 191, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_protocol, __pyx_t_6) < 0) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 191, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "CAStar.pyx":192 + /* "CAStar.pyx":188 * data = Sets[Set] * pickle.dump(data,file,protocol = pickle.HIGHEST_PROTOCOL) * file.close() # <<<<<<<<<<<<<< * * def Get_Node_Cache(self,x,y,z): */ - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_1 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { @@ -6050,10 +6074,10 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO } } if (__pyx_t_1) { - __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 188, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; @@ -6061,8 +6085,8 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":178 - * self.Node_Cache[(mx,my,mz)] = node.NodeID + /* "CAStar.pyx":174 + * self.Node_Cache[(mx,my,mz)] = node.Get_NodeID() * * def Save_Node_Cache(self): # <<<<<<<<<<<<<< * print("Preparing to save Node Cache") @@ -6096,7 +6120,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO return __pyx_r; } -/* "CAStar.pyx":194 +/* "CAStar.pyx":190 * file.close() * * def Get_Node_Cache(self,x,y,z): # <<<<<<<<<<<<<< @@ -6105,9 +6129,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_18Save_Node_Cache(CYTHON_UNUSED PyO */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_21Get_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_21Get_Node_Cache = {"Get_Node_Cache", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_21Get_Node_Cache, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_21Get_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_23Get_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_23Get_Node_Cache = {"Get_Node_Cache", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_23Get_Node_Cache, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_23Get_Node_Cache(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_x = 0; PyObject *__pyx_v_y = 0; @@ -6142,23 +6166,23 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_21Get_Node_Cache(PyObject *__pyx_se case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Get_Node_Cache", 1, 4, 4, 1); __PYX_ERR(0, 194, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Get_Node_Cache", 1, 4, 4, 1); __PYX_ERR(0, 190, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Get_Node_Cache", 1, 4, 4, 2); __PYX_ERR(0, 194, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Get_Node_Cache", 1, 4, 4, 2); __PYX_ERR(0, 190, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_z)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Get_Node_Cache", 1, 4, 4, 3); __PYX_ERR(0, 194, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Get_Node_Cache", 1, 4, 4, 3); __PYX_ERR(0, 190, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_Node_Cache") < 0)) __PYX_ERR(0, 194, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_Node_Cache") < 0)) __PYX_ERR(0, 190, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; @@ -6175,20 +6199,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_21Get_Node_Cache(PyObject *__pyx_se } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Get_Node_Cache", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 194, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Get_Node_Cache", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 190, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.Get_Node_Cache", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(__pyx_self, __pyx_v_self, __pyx_v_x, __pyx_v_y, __pyx_v_z); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_22Get_Node_Cache(__pyx_self, __pyx_v_self, __pyx_v_x, __pyx_v_y, __pyx_v_z); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Get_Node_Cache(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z) { PyObject *__pyx_v_Key = NULL; PyObject *__pyx_v_NCBlockID = NULL; PyObject *__pyx_v_filename = NULL; @@ -6212,14 +6236,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb int __pyx_t_13; __Pyx_RefNannySetupContext("Get_Node_Cache", 0); - /* "CAStar.pyx":195 + /* "CAStar.pyx":191 * * def Get_Node_Cache(self,x,y,z): * Key = (x,y,z) # <<<<<<<<<<<<<< * if Key not in self.Node_Cache: * NCBlockID = self.Node_Cache_Hash(Key) */ - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_x); __Pyx_GIVEREF(__pyx_v_x); @@ -6233,28 +6257,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __pyx_v_Key = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":196 + /* "CAStar.pyx":192 * def Get_Node_Cache(self,x,y,z): * Key = (x,y,z) * if Key not in self.Node_Cache: # <<<<<<<<<<<<<< * NCBlockID = self.Node_Cache_Hash(Key) * try: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_Key, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_Key, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 192, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { - /* "CAStar.pyx":197 + /* "CAStar.pyx":193 * Key = (x,y,z) * if Key not in self.Node_Cache: * NCBlockID = self.Node_Cache_Hash(Key) # <<<<<<<<<<<<<< * try: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"NC"+str(NCBlockID)+self.BlockFileSuffix) */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache_Hash); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 197, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache_Hash); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { @@ -6267,13 +6291,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb } } if (!__pyx_t_5) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_Key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_Key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_Key}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_1); } else @@ -6281,19 +6305,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_Key}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { - __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 197, __pyx_L1_error) + __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL; __Pyx_INCREF(__pyx_v_Key); __Pyx_GIVEREF(__pyx_v_Key); PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_Key); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } @@ -6302,7 +6326,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __pyx_v_NCBlockID = __pyx_t_1; __pyx_t_1 = 0; - /* "CAStar.pyx":198 + /* "CAStar.pyx":194 * if Key not in self.Node_Cache: * NCBlockID = self.Node_Cache_Hash(Key) * try: # <<<<<<<<<<<<<< @@ -6318,45 +6342,45 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __Pyx_XGOTREF(__pyx_t_9); /*try:*/ { - /* "CAStar.pyx":199 + /* "CAStar.pyx":195 * NCBlockID = self.Node_Cache_Hash(Key) * try: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"NC"+str(NCBlockID)+self.BlockFileSuffix) # <<<<<<<<<<<<<< * file = open(filename,"rb") * block = pickle.load(file) */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_join); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_join); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = PyNumber_Add(__pyx_t_10, __pyx_n_s_NC); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_11 = PyNumber_Add(__pyx_t_10, __pyx_n_s_NC); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_v_NCBlockID); __Pyx_GIVEREF(__pyx_v_NCBlockID); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_NCBlockID); - __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_10, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_10, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyNumber_Add(__pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_10 = PyNumber_Add(__pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); - __pyx_t_11 = PyNumber_Add(__pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_11 = PyNumber_Add(__pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; @@ -6375,7 +6399,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_t_6, __pyx_t_5, __pyx_t_11}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; @@ -6386,7 +6410,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_t_6, __pyx_t_5, __pyx_t_11}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; @@ -6395,7 +6419,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb } else #endif { - __pyx_t_10 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_10 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); if (__pyx_t_12) { __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12); __pyx_t_12 = NULL; @@ -6409,7 +6433,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_11 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 199, __pyx_L4_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } @@ -6417,14 +6441,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __pyx_v_filename = __pyx_t_1; __pyx_t_1 = 0; - /* "CAStar.pyx":200 + /* "CAStar.pyx":196 * try: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"NC"+str(NCBlockID)+self.BlockFileSuffix) * file = open(filename,"rb") # <<<<<<<<<<<<<< * block = pickle.load(file) * file.close() */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 200, __pyx_L4_error) + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_filename); __Pyx_GIVEREF(__pyx_v_filename); @@ -6432,22 +6456,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __Pyx_INCREF(__pyx_n_s_rb); __Pyx_GIVEREF(__pyx_n_s_rb); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_rb); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 200, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_file = __pyx_t_4; __pyx_t_4 = 0; - /* "CAStar.pyx":201 + /* "CAStar.pyx":197 * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"NC"+str(NCBlockID)+self.BlockFileSuffix) * file = open(filename,"rb") * block = pickle.load(file) # <<<<<<<<<<<<<< * file.close() * self.Node_Cache.update(block) */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L4_error) + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_load); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 201, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_load); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 197, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -6461,13 +6485,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb } } if (!__pyx_t_1) { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_file); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_file); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 197, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_file}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 197, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_4); } else @@ -6475,19 +6499,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_file}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 197, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_4); } else #endif { - __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 201, __pyx_L4_error) + __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 197, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __pyx_t_1 = NULL; __Pyx_INCREF(__pyx_v_file); __Pyx_GIVEREF(__pyx_v_file); PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_file); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 197, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } @@ -6496,14 +6520,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __pyx_v_block = __pyx_t_4; __pyx_t_4 = 0; - /* "CAStar.pyx":202 + /* "CAStar.pyx":198 * file = open(filename,"rb") * block = pickle.load(file) * file.close() # <<<<<<<<<<<<<< * self.Node_Cache.update(block) * */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 202, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 198, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { @@ -6516,25 +6540,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb } } if (__pyx_t_11) { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 202, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L4_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } else { - __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 202, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L4_error) } __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "CAStar.pyx":203 + /* "CAStar.pyx":199 * block = pickle.load(file) * file.close() * self.Node_Cache.update(block) # <<<<<<<<<<<<<< * * except Exception as e: */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 203, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 199, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_update); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 203, __pyx_L4_error) + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_update); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 199, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = NULL; @@ -6548,13 +6572,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb } } if (!__pyx_t_10) { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_block); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_block); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 199, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_11)) { PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_block}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 199, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_4); } else @@ -6562,19 +6586,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) { PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_block}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 199, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_4); } else #endif { - __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L4_error) + __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 199, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10); __pyx_t_10 = NULL; __Pyx_INCREF(__pyx_v_block); __Pyx_GIVEREF(__pyx_v_block); PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_v_block); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 199, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -6582,7 +6606,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "CAStar.pyx":198 + /* "CAStar.pyx":194 * if Key not in self.Node_Cache: * NCBlockID = self.Node_Cache_Hash(Key) * try: # <<<<<<<<<<<<<< @@ -6604,7 +6628,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "CAStar.pyx":205 + /* "CAStar.pyx":201 * self.Node_Cache.update(block) * * except Exception as e: # <<<<<<<<<<<<<< @@ -6614,21 +6638,21 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_13) { __Pyx_AddTraceback("CAStar.DynoGraph.Get_Node_Cache", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_1) < 0) __PYX_ERR(0, 205, __pyx_L6_except_error) + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_1) < 0) __PYX_ERR(0, 201, __pyx_L6_except_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_11); __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_11); __pyx_v_e = __pyx_t_11; - /* "CAStar.pyx":206 + /* "CAStar.pyx":202 * * except Exception as e: * print(e) # <<<<<<<<<<<<<< * * if Key in self.Node_Cache: */ - if (__Pyx_PrintOne(0, __pyx_v_e) < 0) __PYX_ERR(0, 206, __pyx_L6_except_error) + if (__Pyx_PrintOne(0, __pyx_v_e) < 0) __PYX_ERR(0, 202, __pyx_L6_except_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -6637,7 +6661,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb goto __pyx_L6_except_error; __pyx_L6_except_error:; - /* "CAStar.pyx":198 + /* "CAStar.pyx":194 * if Key not in self.Node_Cache: * NCBlockID = self.Node_Cache_Hash(Key) * try: # <<<<<<<<<<<<<< @@ -6659,7 +6683,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb __pyx_L9_try_end:; } - /* "CAStar.pyx":196 + /* "CAStar.pyx":192 * def Get_Node_Cache(self,x,y,z): * Key = (x,y,z) * if Key not in self.Node_Cache: # <<<<<<<<<<<<<< @@ -6668,21 +6692,21 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb */ } - /* "CAStar.pyx":208 + /* "CAStar.pyx":204 * print(e) * * if Key in self.Node_Cache: # <<<<<<<<<<<<<< * return self.Node_Cache[Key] * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_Key, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 208, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_Key, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 204, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { - /* "CAStar.pyx":209 + /* "CAStar.pyx":205 * * if Key in self.Node_Cache: * return self.Node_Cache[Key] # <<<<<<<<<<<<<< @@ -6690,16 +6714,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb * #Raises error if cannot get node */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = PyObject_GetItem(__pyx_t_1, __pyx_v_Key); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 209, __pyx_L1_error) + __pyx_t_11 = PyObject_GetItem(__pyx_t_1, __pyx_v_Key); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_11; __pyx_t_11 = 0; goto __pyx_L0; - /* "CAStar.pyx":208 + /* "CAStar.pyx":204 * print(e) * * if Key in self.Node_Cache: # <<<<<<<<<<<<<< @@ -6708,7 +6732,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb */ } - /* "CAStar.pyx":212 + /* "CAStar.pyx":208 * else: * #Raises error if cannot get node * raise ValueError("Node_Cache Key requested is not in the NCBlockID checked. Check BlockSize or regenerate blockfiles") # <<<<<<<<<<<<<< @@ -6716,14 +6740,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb * */ /*else*/ { - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 212, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 208, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __PYX_ERR(0, 212, __pyx_L1_error) + __PYX_ERR(0, 208, __pyx_L1_error) } - /* "CAStar.pyx":194 + /* "CAStar.pyx":190 * file.close() * * def Get_Node_Cache(self,x,y,z): # <<<<<<<<<<<<<< @@ -6754,7 +6778,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb return __pyx_r; } -/* "CAStar.pyx":215 +/* "CAStar.pyx":211 * * * def Direct_NodeID(self,x,y,z): # <<<<<<<<<<<<<< @@ -6763,9 +6787,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_20Get_Node_Cache(CYTHON_UNUSED PyOb */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_23Direct_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_23Direct_NodeID = {"Direct_NodeID", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_23Direct_NodeID, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_23Direct_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_25Direct_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_25Direct_NodeID = {"Direct_NodeID", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_25Direct_NodeID, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_25Direct_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_x = 0; PyObject *__pyx_v_y = 0; @@ -6800,23 +6824,23 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_23Direct_NodeID(PyObject *__pyx_sel case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Direct_NodeID", 1, 4, 4, 1); __PYX_ERR(0, 215, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Direct_NodeID", 1, 4, 4, 1); __PYX_ERR(0, 211, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Direct_NodeID", 1, 4, 4, 2); __PYX_ERR(0, 215, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Direct_NodeID", 1, 4, 4, 2); __PYX_ERR(0, 211, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_z)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Direct_NodeID", 1, 4, 4, 3); __PYX_ERR(0, 215, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Direct_NodeID", 1, 4, 4, 3); __PYX_ERR(0, 211, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Direct_NodeID") < 0)) __PYX_ERR(0, 215, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Direct_NodeID") < 0)) __PYX_ERR(0, 211, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; @@ -6833,20 +6857,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_23Direct_NodeID(PyObject *__pyx_sel } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Direct_NodeID", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 215, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Direct_NodeID", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 211, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.Direct_NodeID", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(__pyx_self, __pyx_v_self, __pyx_v_x, __pyx_v_y, __pyx_v_z); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_24Direct_NodeID(__pyx_self, __pyx_v_self, __pyx_v_x, __pyx_v_y, __pyx_v_z); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_24Direct_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; @@ -6856,15 +6880,15 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(CYTHON_UNUSED PyObj PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("Direct_NodeID", 0); - /* "CAStar.pyx":216 + /* "CAStar.pyx":212 * * def Direct_NodeID(self,x,y,z): * return self.Get_Node_Cache(x,y,z) # <<<<<<<<<<<<<< * - * def All_NodeIDs(self): + * def All_NodeIDs(self,StartValue = 1, MaxValue = None): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Get_Node_Cache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 216, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Get_Node_Cache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 212, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; __pyx_t_4 = 0; @@ -6881,7 +6905,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(CYTHON_UNUSED PyObj #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_x, __pyx_v_y, __pyx_v_z}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else @@ -6889,13 +6913,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(CYTHON_UNUSED PyObj #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_x, __pyx_v_y, __pyx_v_z}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { - __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 216, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_3) { __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; @@ -6909,7 +6933,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(CYTHON_UNUSED PyObj __Pyx_INCREF(__pyx_v_z); __Pyx_GIVEREF(__pyx_v_z); PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_z); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } @@ -6918,7 +6942,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(CYTHON_UNUSED PyObj __pyx_t_1 = 0; goto __pyx_L0; - /* "CAStar.pyx":215 + /* "CAStar.pyx":211 * * * def Direct_NodeID(self,x,y,z): # <<<<<<<<<<<<<< @@ -6940,94 +6964,291 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_22Direct_NodeID(CYTHON_UNUSED PyObj return __pyx_r; } -/* "CAStar.pyx":218 +/* "CAStar.pyx":214 * return self.Get_Node_Cache(x,y,z) * - * def All_NodeIDs(self): # <<<<<<<<<<<<<< - * return self.Node_Cache.values() - * + * def All_NodeIDs(self,StartValue = 1, MaxValue = None): # <<<<<<<<<<<<<< + * if MaxValue == None: + * MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_25All_NodeIDs(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_25All_NodeIDs = {"All_NodeIDs", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_25All_NodeIDs, METH_O, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_25All_NodeIDs(PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_27All_NodeIDs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_27All_NodeIDs = {"All_NodeIDs", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_27All_NodeIDs, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_27All_NodeIDs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_StartValue = 0; + PyObject *__pyx_v_MaxValue = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("All_NodeIDs (wrapper)", 0); - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_24All_NodeIDs(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_6CAStar_9DynoGraph_24All_NodeIDs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - __Pyx_RefNannySetupContext("All_NodeIDs", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_StartValue,&__pyx_n_s_MaxValue,0}; + PyObject* values[3] = {0,0,0}; + values[1] = ((PyObject *)((PyObject *)__pyx_int_1)); + values[2] = ((PyObject *)((PyObject *)Py_None)); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_StartValue); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_MaxValue); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "All_NodeIDs") < 0)) __PYX_ERR(0, 214, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_self = values[0]; + __pyx_v_StartValue = values[1]; + __pyx_v_MaxValue = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("All_NodeIDs", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 214, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("CAStar.DynoGraph.All_NodeIDs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_26All_NodeIDs(__pyx_self, __pyx_v_self, __pyx_v_StartValue, __pyx_v_MaxValue); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6CAStar_9DynoGraph_26All_NodeIDs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_StartValue, PyObject *__pyx_v_MaxValue) { + PyObject *__pyx_v_NodeIDList = NULL; + PyObject *__pyx_v_NodeID = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + int __pyx_t_7; + __Pyx_RefNannySetupContext("All_NodeIDs", 0); + __Pyx_INCREF(__pyx_v_MaxValue); + + /* "CAStar.pyx":215 + * + * def All_NodeIDs(self,StartValue = 1, MaxValue = None): + * if MaxValue == None: # <<<<<<<<<<<<<< + * MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. + * + */ + __pyx_t_1 = PyObject_RichCompare(__pyx_v_MaxValue, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "CAStar.pyx":216 + * def All_NodeIDs(self,StartValue = 1, MaxValue = None): + * if MaxValue == None: + * MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. # <<<<<<<<<<<<<< + * + * NodeIDList = [] + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_yCount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zCount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_v_StartValue, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_MaxValue, __pyx_t_4); + __pyx_t_4 = 0; + + /* "CAStar.pyx":215 + * + * def All_NodeIDs(self,StartValue = 1, MaxValue = None): + * if MaxValue == None: # <<<<<<<<<<<<<< + * MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. + * + */ + } + + /* "CAStar.pyx":218 + * MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. + * + * NodeIDList = [] # <<<<<<<<<<<<<< + * for NodeID in range(1,MaxValue+1): + * NodeIDList.append(NodeID) + */ + __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_NodeIDList = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; /* "CAStar.pyx":219 * - * def All_NodeIDs(self): - * return self.Node_Cache.values() # <<<<<<<<<<<<<< + * NodeIDList = [] + * for NodeID in range(1,MaxValue+1): # <<<<<<<<<<<<<< + * NodeIDList.append(NodeID) * - * def Find_NodeID(self,x,y,z): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_v_MaxValue, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_int_1); + __Pyx_GIVEREF(__pyx_int_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_1); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) { + __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; + __pyx_t_6 = NULL; } else { - __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 219, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 219, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 219, __pyx_L1_error) + #else + __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } else { + if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 219, __pyx_L1_error) + #else + __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } + } else { + __pyx_t_4 = __pyx_t_6(__pyx_t_3); + if (unlikely(!__pyx_t_4)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 219, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_4); + } + __Pyx_XDECREF_SET(__pyx_v_NodeID, __pyx_t_4); + __pyx_t_4 = 0; + + /* "CAStar.pyx":220 + * NodeIDList = [] + * for NodeID in range(1,MaxValue+1): + * NodeIDList.append(NodeID) # <<<<<<<<<<<<<< + * + * return NodeIDList + */ + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_NodeIDList, __pyx_v_NodeID); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 220, __pyx_L1_error) + + /* "CAStar.pyx":219 + * + * NodeIDList = [] + * for NodeID in range(1,MaxValue+1): # <<<<<<<<<<<<<< + * NodeIDList.append(NodeID) + * + */ } - __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; + + /* "CAStar.pyx":222 + * NodeIDList.append(NodeID) + * + * return NodeIDList # <<<<<<<<<<<<<< + * + * def Find_NodeID(self,x,y,z): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_NodeIDList); + __pyx_r = __pyx_v_NodeIDList; goto __pyx_L0; - /* "CAStar.pyx":218 + /* "CAStar.pyx":214 * return self.Get_Node_Cache(x,y,z) * - * def All_NodeIDs(self): # <<<<<<<<<<<<<< - * return self.Node_Cache.values() - * + * def All_NodeIDs(self,StartValue = 1, MaxValue = None): # <<<<<<<<<<<<<< + * if MaxValue == None: + * MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("CAStar.DynoGraph.All_NodeIDs", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; + __Pyx_XDECREF(__pyx_v_NodeIDList); + __Pyx_XDECREF(__pyx_v_NodeID); + __Pyx_XDECREF(__pyx_v_MaxValue); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "CAStar.pyx":221 - * return self.Node_Cache.values() +/* "CAStar.pyx":224 + * return NodeIDList * * def Find_NodeID(self,x,y,z): # <<<<<<<<<<<<<< * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) @@ -7035,9 +7256,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_24All_NodeIDs(CYTHON_UNUSED PyObjec */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_27Find_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_27Find_NodeID = {"Find_NodeID", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_27Find_NodeID, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_27Find_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_29Find_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_29Find_NodeID = {"Find_NodeID", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_29Find_NodeID, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_29Find_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_x = 0; PyObject *__pyx_v_y = 0; @@ -7072,23 +7293,23 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_27Find_NodeID(PyObject *__pyx_self, case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Find_NodeID", 1, 4, 4, 1); __PYX_ERR(0, 221, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Find_NodeID", 1, 4, 4, 1); __PYX_ERR(0, 224, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Find_NodeID", 1, 4, 4, 2); __PYX_ERR(0, 221, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Find_NodeID", 1, 4, 4, 2); __PYX_ERR(0, 224, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_z)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Find_NodeID", 1, 4, 4, 3); __PYX_ERR(0, 221, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Find_NodeID", 1, 4, 4, 3); __PYX_ERR(0, 224, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Find_NodeID") < 0)) __PYX_ERR(0, 221, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Find_NodeID") < 0)) __PYX_ERR(0, 224, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; @@ -7105,20 +7326,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_27Find_NodeID(PyObject *__pyx_self, } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Find_NodeID", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 221, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Find_NodeID", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 224, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.Find_NodeID", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(__pyx_self, __pyx_v_self, __pyx_v_x, __pyx_v_y, __pyx_v_z); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_28Find_NodeID(__pyx_self, __pyx_v_self, __pyx_v_x, __pyx_v_y, __pyx_v_z); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Find_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_z) { PyObject *__pyx_v_mx = NULL; PyObject *__pyx_v_my = NULL; PyObject *__pyx_v_mz = NULL; @@ -7135,16 +7356,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec PyObject *__pyx_t_8 = NULL; __Pyx_RefNannySetupContext("Find_NodeID", 0); - /* "CAStar.pyx":222 + /* "CAStar.pyx":225 * * def Find_NodeID(self,x,y,z): * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) # <<<<<<<<<<<<<< * NodeID = self.Get_Node_Cache(mx,my,mz) * return NodeID */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; __pyx_t_5 = 0; @@ -7161,7 +7382,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_x, __pyx_t_3}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -7170,14 +7391,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_x, __pyx_t_3}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif { - __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__pyx_t_4) { __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; @@ -7188,14 +7409,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_3); __pyx_t_3 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ySize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; __pyx_t_5 = 0; @@ -7212,7 +7433,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_y, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -7221,14 +7442,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_y, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif { - __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__pyx_t_4) { __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL; @@ -7239,14 +7460,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_5, __pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_MapHash); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_zSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; __pyx_t_5 = 0; @@ -7263,7 +7484,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_7)) { PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_z, __pyx_t_3}; - __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -7272,14 +7493,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_z, __pyx_t_3}; - __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif { - __pyx_t_8 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_8 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (__pyx_t_4) { __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL; @@ -7290,7 +7511,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_5, __pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } @@ -7302,14 +7523,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec __pyx_v_mz = __pyx_t_6; __pyx_t_6 = 0; - /* "CAStar.pyx":223 + /* "CAStar.pyx":226 * def Find_NodeID(self,x,y,z): * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) * NodeID = self.Get_Node_Cache(mx,my,mz) # <<<<<<<<<<<<<< * return NodeID * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Get_Node_Cache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Get_Node_Cache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = NULL; __pyx_t_5 = 0; @@ -7326,7 +7547,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_mx, __pyx_v_my, __pyx_v_mz}; - __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_6); } else @@ -7334,13 +7555,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_mx, __pyx_v_my, __pyx_v_mz}; - __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_6); } else #endif { - __pyx_t_7 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_t_7 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__pyx_t_1) { __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __pyx_t_1 = NULL; @@ -7354,7 +7575,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec __Pyx_INCREF(__pyx_v_mz); __Pyx_GIVEREF(__pyx_v_mz); PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_5, __pyx_v_mz); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } @@ -7362,7 +7583,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec __pyx_v_NodeID = __pyx_t_6; __pyx_t_6 = 0; - /* "CAStar.pyx":224 + /* "CAStar.pyx":227 * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) * NodeID = self.Get_Node_Cache(mx,my,mz) * return NodeID # <<<<<<<<<<<<<< @@ -7374,8 +7595,8 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec __pyx_r = __pyx_v_NodeID; goto __pyx_L0; - /* "CAStar.pyx":221 - * return self.Node_Cache.values() + /* "CAStar.pyx":224 + * return NodeIDList * * def Find_NodeID(self,x,y,z): # <<<<<<<<<<<<<< * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) @@ -7403,7 +7624,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec return __pyx_r; } -/* "CAStar.pyx":226 +/* "CAStar.pyx":229 * return NodeID * * def Obj_Find_NodeID(self,Obj): # <<<<<<<<<<<<<< @@ -7412,9 +7633,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_26Find_NodeID(CYTHON_UNUSED PyObjec */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_29Obj_Find_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_29Obj_Find_NodeID = {"Obj_Find_NodeID", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_29Obj_Find_NodeID, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_29Obj_Find_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_31Obj_Find_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_31Obj_Find_NodeID = {"Obj_Find_NodeID", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_31Obj_Find_NodeID, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_31Obj_Find_NodeID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_Obj = 0; PyObject *__pyx_r = 0; @@ -7443,11 +7664,11 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_29Obj_Find_NodeID(PyObject *__pyx_s case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Obj)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Obj_Find_NodeID", 1, 2, 2, 1); __PYX_ERR(0, 226, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Obj_Find_NodeID", 1, 2, 2, 1); __PYX_ERR(0, 229, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Obj_Find_NodeID") < 0)) __PYX_ERR(0, 226, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Obj_Find_NodeID") < 0)) __PYX_ERR(0, 229, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -7460,20 +7681,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_29Obj_Find_NodeID(PyObject *__pyx_s } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Obj_Find_NodeID", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 226, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Obj_Find_NodeID", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 229, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.Obj_Find_NodeID", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(__pyx_self, __pyx_v_self, __pyx_v_Obj); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_30Obj_Find_NodeID(__pyx_self, __pyx_v_self, __pyx_v_Obj); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Obj) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_30Obj_Find_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Obj) { PyObject *__pyx_v_x = NULL; PyObject *__pyx_v_y = NULL; PyObject *__pyx_v_z = NULL; @@ -7487,26 +7708,26 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO int __pyx_t_5; __Pyx_RefNannySetupContext("Obj_Find_NodeID", 0); - /* "CAStar.pyx":227 + /* "CAStar.pyx":230 * * def Obj_Find_NodeID(self,Obj): * x,y,z = Obj.Coords.x,Obj.Coords.y,Obj.Coords.z # <<<<<<<<<<<<<< * NodeID = self.Find_NodeID(x,y,z) * return NodeID */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Obj, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Obj, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Obj, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Obj, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Obj, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Obj, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_x = __pyx_t_2; @@ -7516,14 +7737,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO __pyx_v_z = __pyx_t_4; __pyx_t_4 = 0; - /* "CAStar.pyx":228 + /* "CAStar.pyx":231 * def Obj_Find_NodeID(self,Obj): * x,y,z = Obj.Coords.x,Obj.Coords.y,Obj.Coords.z * NodeID = self.Find_NodeID(x,y,z) # <<<<<<<<<<<<<< * return NodeID * */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Find_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Find_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = NULL; __pyx_t_5 = 0; @@ -7540,7 +7761,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_x, __pyx_v_y, __pyx_v_z}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_4); } else @@ -7548,13 +7769,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_x, __pyx_v_y, __pyx_v_z}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_4); } else #endif { - __pyx_t_1 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__pyx_t_2) { __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL; @@ -7568,7 +7789,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO __Pyx_INCREF(__pyx_v_z); __Pyx_GIVEREF(__pyx_v_z); PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_5, __pyx_v_z); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -7576,7 +7797,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO __pyx_v_NodeID = __pyx_t_4; __pyx_t_4 = 0; - /* "CAStar.pyx":229 + /* "CAStar.pyx":232 * x,y,z = Obj.Coords.x,Obj.Coords.y,Obj.Coords.z * NodeID = self.Find_NodeID(x,y,z) * return NodeID # <<<<<<<<<<<<<< @@ -7588,7 +7809,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO __pyx_r = __pyx_v_NodeID; goto __pyx_L0; - /* "CAStar.pyx":226 + /* "CAStar.pyx":229 * return NodeID * * def Obj_Find_NodeID(self,Obj): # <<<<<<<<<<<<<< @@ -7614,7 +7835,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO return __pyx_r; } -/* "CAStar.pyx":234 +/* "CAStar.pyx":237 * ############################# * * def SaveGraph(self,AutoNodeSave = True,AutoNodeCacheSave = True): # <<<<<<<<<<<<<< @@ -7623,9 +7844,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_28Obj_Find_NodeID(CYTHON_UNUSED PyO */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_31SaveGraph(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_31SaveGraph = {"SaveGraph", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_31SaveGraph, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_31SaveGraph(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_33SaveGraph(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_33SaveGraph = {"SaveGraph", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_33SaveGraph, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_33SaveGraph(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_AutoNodeSave = 0; PyObject *__pyx_v_AutoNodeCacheSave = 0; @@ -7669,7 +7890,7 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_31SaveGraph(PyObject *__pyx_self, P } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SaveGraph") < 0)) __PYX_ERR(0, 234, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SaveGraph") < 0)) __PYX_ERR(0, 237, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -7688,20 +7909,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_31SaveGraph(PyObject *__pyx_self, P } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("SaveGraph", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 234, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("SaveGraph", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 237, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.SaveGraph", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_30SaveGraph(__pyx_self, __pyx_v_self, __pyx_v_AutoNodeSave, __pyx_v_AutoNodeCacheSave); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_32SaveGraph(__pyx_self, __pyx_v_self, __pyx_v_AutoNodeSave, __pyx_v_AutoNodeCacheSave); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_AutoNodeSave, PyObject *__pyx_v_AutoNodeCacheSave) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_32SaveGraph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_AutoNodeSave, PyObject *__pyx_v_AutoNodeCacheSave) { PyObject *__pyx_v_filename = NULL; PyObject *__pyx_v_file = NULL; PyObject *__pyx_v_e = NULL; @@ -7721,33 +7942,33 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject int __pyx_t_12; __Pyx_RefNannySetupContext("SaveGraph", 0); - /* "CAStar.pyx":235 + /* "CAStar.pyx":238 * * def SaveGraph(self,AutoNodeSave = True,AutoNodeCacheSave = True): * print("Saving graph...") # <<<<<<<<<<<<<< * if AutoNodeSave: * self.SaveNodes() */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Saving_graph) < 0) __PYX_ERR(0, 235, __pyx_L1_error) + if (__Pyx_PrintOne(0, __pyx_kp_s_Saving_graph) < 0) __PYX_ERR(0, 238, __pyx_L1_error) - /* "CAStar.pyx":236 + /* "CAStar.pyx":239 * def SaveGraph(self,AutoNodeSave = True,AutoNodeCacheSave = True): * print("Saving graph...") * if AutoNodeSave: # <<<<<<<<<<<<<< * self.SaveNodes() * if AutoNodeCacheSave: */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_AutoNodeSave); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 236, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_AutoNodeSave); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 239, __pyx_L1_error) if (__pyx_t_1) { - /* "CAStar.pyx":237 + /* "CAStar.pyx":240 * print("Saving graph...") * if AutoNodeSave: * self.SaveNodes() # <<<<<<<<<<<<<< * if AutoNodeCacheSave: * self.Save_Node_Cache() */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_SaveNodes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_SaveNodes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { @@ -7760,16 +7981,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject } } if (__pyx_t_4) { - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { - __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":236 + /* "CAStar.pyx":239 * def SaveGraph(self,AutoNodeSave = True,AutoNodeCacheSave = True): * print("Saving graph...") * if AutoNodeSave: # <<<<<<<<<<<<<< @@ -7778,24 +7999,24 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject */ } - /* "CAStar.pyx":238 + /* "CAStar.pyx":241 * if AutoNodeSave: * self.SaveNodes() * if AutoNodeCacheSave: # <<<<<<<<<<<<<< * self.Save_Node_Cache() * */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_AutoNodeCacheSave); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 238, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_AutoNodeCacheSave); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 241, __pyx_L1_error) if (__pyx_t_1) { - /* "CAStar.pyx":239 + /* "CAStar.pyx":242 * self.SaveNodes() * if AutoNodeCacheSave: * self.Save_Node_Cache() # <<<<<<<<<<<<<< * * self.Nodes = {} */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Save_Node_Cache); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 239, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Save_Node_Cache); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { @@ -7808,16 +8029,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject } } if (__pyx_t_4) { - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { - __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":238 + /* "CAStar.pyx":241 * if AutoNodeSave: * self.SaveNodes() * if AutoNodeCacheSave: # <<<<<<<<<<<<<< @@ -7826,31 +8047,31 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject */ } - /* "CAStar.pyx":241 + /* "CAStar.pyx":244 * self.Save_Node_Cache() * * self.Nodes = {} # <<<<<<<<<<<<<< * self.Node_Cache = {} * try: */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error) + __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Nodes, __pyx_t_2) < 0) __PYX_ERR(0, 241, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Nodes, __pyx_t_2) < 0) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":242 + /* "CAStar.pyx":245 * * self.Nodes = {} * self.Node_Cache = {} # <<<<<<<<<<<<<< * try: * filename = os.path.join(self.cwd,self.FolderName,self.GraphFileName+self.GraphFileSuffix) */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error) + __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache, __pyx_t_2) < 0) __PYX_ERR(0, 242, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Node_Cache, __pyx_t_2) < 0) __PYX_ERR(0, 245, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":243 + /* "CAStar.pyx":246 * self.Nodes = {} * self.Node_Cache = {} * try: # <<<<<<<<<<<<<< @@ -7866,30 +8087,30 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __Pyx_XGOTREF(__pyx_t_7); /*try:*/ { - /* "CAStar.pyx":244 + /* "CAStar.pyx":247 * self.Node_Cache = {} * try: * filename = os.path.join(self.cwd,self.FolderName,self.GraphFileName+self.GraphFileSuffix) # <<<<<<<<<<<<<< * file = open(filename,"wb") * pickle.dump(self,file,protocol = pickle.HIGHEST_PROTOCOL) */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_join); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_join); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileName); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileName); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileSuffix); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileSuffix); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = PyNumber_Add(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_11 = PyNumber_Add(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; @@ -7908,7 +8129,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_t_4, __pyx_t_8, __pyx_t_11}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; @@ -7919,7 +8140,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_t_4, __pyx_t_8, __pyx_t_11}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; @@ -7928,7 +8149,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject } else #endif { - __pyx_t_9 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_9 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_9); if (__pyx_t_10) { __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL; @@ -7942,7 +8163,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __pyx_t_4 = 0; __pyx_t_8 = 0; __pyx_t_11 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L5_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } @@ -7950,14 +8171,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __pyx_v_filename = __pyx_t_2; __pyx_t_2 = 0; - /* "CAStar.pyx":245 + /* "CAStar.pyx":248 * try: * filename = os.path.join(self.cwd,self.FolderName,self.GraphFileName+self.GraphFileSuffix) * file = open(filename,"wb") # <<<<<<<<<<<<<< * pickle.dump(self,file,protocol = pickle.HIGHEST_PROTOCOL) * file.close() */ - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L5_error) + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_filename); __Pyx_GIVEREF(__pyx_v_filename); @@ -7965,25 +8186,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __Pyx_INCREF(__pyx_n_s_wb); __Pyx_GIVEREF(__pyx_n_s_wb); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_wb); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 245, __pyx_L5_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 248, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_file = __pyx_t_3; __pyx_t_3 = 0; - /* "CAStar.pyx":246 + /* "CAStar.pyx":249 * filename = os.path.join(self.cwd,self.FolderName,self.GraphFileName+self.GraphFileSuffix) * file = open(filename,"wb") * pickle.dump(self,file,protocol = pickle.HIGHEST_PROTOCOL) # <<<<<<<<<<<<<< * file.close() * print("Saved graph sucessfully") */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 246, __pyx_L5_error) + __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 249, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dump); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 246, __pyx_L5_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dump); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 246, __pyx_L5_error) + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 249, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); @@ -7991,30 +8212,30 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __Pyx_INCREF(__pyx_v_file); __Pyx_GIVEREF(__pyx_v_file); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_file); - __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 246, __pyx_L5_error) + __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 249, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 246, __pyx_L5_error) + __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 249, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_HIGHEST_PROTOCOL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 246, __pyx_L5_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_HIGHEST_PROTOCOL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 249, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_protocol, __pyx_t_8) < 0) __PYX_ERR(0, 246, __pyx_L5_error) + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_protocol, __pyx_t_8) < 0) __PYX_ERR(0, 249, __pyx_L5_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 246, __pyx_L5_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 249, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":247 + /* "CAStar.pyx":250 * file = open(filename,"wb") * pickle.dump(self,file,protocol = pickle.HIGHEST_PROTOCOL) * file.close() # <<<<<<<<<<<<<< * print("Saved graph sucessfully") * except Exception as e: */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 247, __pyx_L5_error) + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 250, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { @@ -8027,25 +8248,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject } } if (__pyx_t_3) { - __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 247, __pyx_L5_error) + __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 250, __pyx_L5_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { - __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 247, __pyx_L5_error) + __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 250, __pyx_L5_error) } __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":248 + /* "CAStar.pyx":251 * pickle.dump(self,file,protocol = pickle.HIGHEST_PROTOCOL) * file.close() * print("Saved graph sucessfully") # <<<<<<<<<<<<<< * except Exception as e: * print("Error occured while saving graph file ",e) */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Saved_graph_sucessfully) < 0) __PYX_ERR(0, 248, __pyx_L5_error) + if (__Pyx_PrintOne(0, __pyx_kp_s_Saved_graph_sucessfully) < 0) __PYX_ERR(0, 251, __pyx_L5_error) - /* "CAStar.pyx":243 + /* "CAStar.pyx":246 * self.Nodes = {} * self.Node_Cache = {} * try: # <<<<<<<<<<<<<< @@ -8067,7 +8288,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":249 + /* "CAStar.pyx":252 * file.close() * print("Saved graph sucessfully") * except Exception as e: # <<<<<<<<<<<<<< @@ -8077,21 +8298,21 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_12) { __Pyx_AddTraceback("CAStar.DynoGraph.SaveGraph", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_3) < 0) __PYX_ERR(0, 249, __pyx_L7_except_error) + if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_3) < 0) __PYX_ERR(0, 252, __pyx_L7_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_9); __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_9); __pyx_v_e = __pyx_t_9; - /* "CAStar.pyx":250 + /* "CAStar.pyx":253 * print("Saved graph sucessfully") * except Exception as e: * print("Error occured while saving graph file ",e) # <<<<<<<<<<<<<< * * def ImportGraph(self): */ - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 250, __pyx_L7_except_error) + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L7_except_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_kp_s_Error_occured_while_saving_graph); __Pyx_GIVEREF(__pyx_kp_s_Error_occured_while_saving_graph); @@ -8099,7 +8320,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __Pyx_INCREF(__pyx_v_e); __Pyx_GIVEREF(__pyx_v_e); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_e); - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) __PYX_ERR(0, 250, __pyx_L7_except_error) + if (__Pyx_PrintOne(0, __pyx_t_2) < 0) __PYX_ERR(0, 253, __pyx_L7_except_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; @@ -8109,7 +8330,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject goto __pyx_L7_except_error; __pyx_L7_except_error:; - /* "CAStar.pyx":243 + /* "CAStar.pyx":246 * self.Nodes = {} * self.Node_Cache = {} * try: # <<<<<<<<<<<<<< @@ -8131,7 +8352,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject __pyx_L10_try_end:; } - /* "CAStar.pyx":234 + /* "CAStar.pyx":237 * ############################# * * def SaveGraph(self,AutoNodeSave = True,AutoNodeCacheSave = True): # <<<<<<<<<<<<<< @@ -8161,7 +8382,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject return __pyx_r; } -/* "CAStar.pyx":252 +/* "CAStar.pyx":255 * print("Error occured while saving graph file ",e) * * def ImportGraph(self): # <<<<<<<<<<<<<< @@ -8170,20 +8391,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_30SaveGraph(CYTHON_UNUSED PyObject */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_33ImportGraph(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_33ImportGraph = {"ImportGraph", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_33ImportGraph, METH_O, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_33ImportGraph(PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_35ImportGraph(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_35ImportGraph = {"ImportGraph", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_35ImportGraph, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_35ImportGraph(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ImportGraph (wrapper)", 0); - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_32ImportGraph(__pyx_self, ((PyObject *)__pyx_v_self)); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_34ImportGraph(__pyx_self, ((PyObject *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_34ImportGraph(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_filename = NULL; PyObject *__pyx_v_file = NULL; PyObject *__pyx_v_ImportFile = NULL; @@ -8203,16 +8424,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec int __pyx_t_11; __Pyx_RefNannySetupContext("ImportGraph", 0); - /* "CAStar.pyx":253 + /* "CAStar.pyx":256 * * def ImportGraph(self): * print("Importing graph") # <<<<<<<<<<<<<< * try: * filename = os.path.join(os.getcwd(),self.FolderName,self.GraphFileName+self.GraphFileSuffix) */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Importing_graph) < 0) __PYX_ERR(0, 253, __pyx_L1_error) + if (__Pyx_PrintOne(0, __pyx_kp_s_Importing_graph) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - /* "CAStar.pyx":254 + /* "CAStar.pyx":257 * def ImportGraph(self): * print("Importing graph") * try: # <<<<<<<<<<<<<< @@ -8228,24 +8449,24 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "CAStar.pyx":255 + /* "CAStar.pyx":258 * print("Importing graph") * try: * filename = os.path.join(os.getcwd(),self.FolderName,self.GraphFileName+self.GraphFileSuffix) # <<<<<<<<<<<<<< * file = open(filename,"rb") * ImportFile = pickle.load(file) */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_join); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_join); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = NULL; @@ -8259,20 +8480,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec } } if (__pyx_t_7) { - __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { - __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L3_error) } __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileName); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileName); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileSuffix); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_GraphFileSuffix); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_10 = PyNumber_Add(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; @@ -8291,7 +8512,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_6, __pyx_t_8, __pyx_t_10}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; @@ -8302,7 +8523,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_6, __pyx_t_8, __pyx_t_10}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; @@ -8311,7 +8532,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec } else #endif { - __pyx_t_7 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_7 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); if (__pyx_t_9) { __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9); __pyx_t_9 = NULL; @@ -8325,7 +8546,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __pyx_t_6 = 0; __pyx_t_8 = 0; __pyx_t_10 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 255, __pyx_L3_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 258, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } @@ -8333,14 +8554,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __pyx_v_filename = __pyx_t_4; __pyx_t_4 = 0; - /* "CAStar.pyx":256 + /* "CAStar.pyx":259 * try: * filename = os.path.join(os.getcwd(),self.FolderName,self.GraphFileName+self.GraphFileSuffix) * file = open(filename,"rb") # <<<<<<<<<<<<<< * ImportFile = pickle.load(file) * file.close() */ - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 256, __pyx_L3_error) + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 259, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_filename); __Pyx_GIVEREF(__pyx_v_filename); @@ -8348,22 +8569,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __Pyx_INCREF(__pyx_n_s_rb); __Pyx_GIVEREF(__pyx_n_s_rb); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_rb); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 256, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_file = __pyx_t_5; __pyx_t_5 = 0; - /* "CAStar.pyx":257 + /* "CAStar.pyx":260 * filename = os.path.join(os.getcwd(),self.FolderName,self.GraphFileName+self.GraphFileSuffix) * file = open(filename,"rb") * ImportFile = pickle.load(file) # <<<<<<<<<<<<<< * file.close() * self.__dict__.update(ImportFile.__dict__) */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L3_error) + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 260, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_load); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L3_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_load); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; @@ -8377,13 +8598,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec } } if (!__pyx_t_4) { - __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_file); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 257, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_file); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 260, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_7)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_file}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 257, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 260, __pyx_L3_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_5); } else @@ -8391,19 +8612,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_file}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 257, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 260, __pyx_L3_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_5); } else #endif { - __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 257, __pyx_L3_error) + __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 260, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4); __pyx_t_4 = NULL; __Pyx_INCREF(__pyx_v_file); __Pyx_GIVEREF(__pyx_v_file); PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_v_file); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 257, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 260, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } @@ -8412,14 +8633,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __pyx_v_ImportFile = __pyx_t_5; __pyx_t_5 = 0; - /* "CAStar.pyx":258 + /* "CAStar.pyx":261 * file = open(filename,"rb") * ImportFile = pickle.load(file) * file.close() # <<<<<<<<<<<<<< * self.__dict__.update(ImportFile.__dict__) * print("Imported graph sucessfully") */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L3_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { @@ -8432,28 +8653,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec } } if (__pyx_t_10) { - __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 258, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 261, __pyx_L3_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { - __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 258, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 261, __pyx_L3_error) } __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":259 + /* "CAStar.pyx":262 * ImportFile = pickle.load(file) * file.close() * self.__dict__.update(ImportFile.__dict__) # <<<<<<<<<<<<<< * print("Imported graph sucessfully") * except Exception as e: */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 262, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 262, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_ImportFile, __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_ImportFile, __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 262, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { @@ -8466,14 +8687,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec } } if (!__pyx_t_4) { - __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 262, __pyx_L3_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GOTREF(__pyx_t_5); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_7}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 262, __pyx_L3_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; @@ -8482,20 +8703,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_7}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 262, __pyx_L3_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else #endif { - __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 262, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL; __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_7); __pyx_t_7 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 262, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } @@ -8503,16 +8724,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":260 + /* "CAStar.pyx":263 * file.close() * self.__dict__.update(ImportFile.__dict__) * print("Imported graph sucessfully") # <<<<<<<<<<<<<< * except Exception as e: * print("An error occured while importing graph data",e) */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Imported_graph_sucessfully) < 0) __PYX_ERR(0, 260, __pyx_L3_error) + if (__Pyx_PrintOne(0, __pyx_kp_s_Imported_graph_sucessfully) < 0) __PYX_ERR(0, 263, __pyx_L3_error) - /* "CAStar.pyx":254 + /* "CAStar.pyx":257 * def ImportGraph(self): * print("Importing graph") * try: # <<<<<<<<<<<<<< @@ -8534,7 +8755,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":261 + /* "CAStar.pyx":264 * self.__dict__.update(ImportFile.__dict__) * print("Imported graph sucessfully") * except Exception as e: # <<<<<<<<<<<<<< @@ -8544,21 +8765,21 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_11) { __Pyx_AddTraceback("CAStar.DynoGraph.ImportGraph", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_10, &__pyx_t_8) < 0) __PYX_ERR(0, 261, __pyx_L5_except_error) + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_10, &__pyx_t_8) < 0) __PYX_ERR(0, 264, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_10); __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_v_e = __pyx_t_10; - /* "CAStar.pyx":262 + /* "CAStar.pyx":265 * print("Imported graph sucessfully") * except Exception as e: * print("An error occured while importing graph data",e) # <<<<<<<<<<<<<< * self.cwd = os.getcwd() * */ - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 262, __pyx_L5_except_error) + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 265, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_kp_s_An_error_occured_while_importing); __Pyx_GIVEREF(__pyx_kp_s_An_error_occured_while_importing); @@ -8566,7 +8787,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __Pyx_INCREF(__pyx_v_e); __Pyx_GIVEREF(__pyx_v_e); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_e); - if (__Pyx_PrintOne(0, __pyx_t_7) < 0) __PYX_ERR(0, 262, __pyx_L5_except_error) + if (__Pyx_PrintOne(0, __pyx_t_7) < 0) __PYX_ERR(0, 265, __pyx_L5_except_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; @@ -8576,7 +8797,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec goto __pyx_L5_except_error; __pyx_L5_except_error:; - /* "CAStar.pyx":254 + /* "CAStar.pyx":257 * def ImportGraph(self): * print("Importing graph") * try: # <<<<<<<<<<<<<< @@ -8598,16 +8819,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec __pyx_L8_try_end:; } - /* "CAStar.pyx":263 + /* "CAStar.pyx":266 * except Exception as e: * print("An error occured while importing graph data",e) * self.cwd = os.getcwd() # <<<<<<<<<<<<<< * * ################ */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 263, __pyx_L1_error) + __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 263, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = NULL; @@ -8621,17 +8842,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec } } if (__pyx_t_10) { - __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 263, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { - __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 263, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 266, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cwd, __pyx_t_8) < 0) __PYX_ERR(0, 263, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cwd, __pyx_t_8) < 0) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "CAStar.pyx":252 + /* "CAStar.pyx":255 * print("Error occured while saving graph file ",e) * * def ImportGraph(self): # <<<<<<<<<<<<<< @@ -8662,7 +8883,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec return __pyx_r; } -/* "CAStar.pyx":266 +/* "CAStar.pyx":269 * * ################ * def Hash(self,Value): # <<<<<<<<<<<<<< @@ -8671,9 +8892,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_32ImportGraph(CYTHON_UNUSED PyObjec */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_35Hash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_35Hash = {"Hash", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_35Hash, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_35Hash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_37Hash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_37Hash = {"Hash", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_37Hash, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_37Hash(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_Value = 0; PyObject *__pyx_r = 0; @@ -8702,11 +8923,11 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_35Hash(PyObject *__pyx_self, PyObje case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Value)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("Hash", 1, 2, 2, 1); __PYX_ERR(0, 266, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Hash", 1, 2, 2, 1); __PYX_ERR(0, 269, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Hash") < 0)) __PYX_ERR(0, 266, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Hash") < 0)) __PYX_ERR(0, 269, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -8719,27 +8940,27 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_35Hash(PyObject *__pyx_self, PyObje } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Hash", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 266, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Hash", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 269, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.Hash", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_34Hash(__pyx_self, __pyx_v_self, __pyx_v_Value); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_36Hash(__pyx_self, __pyx_v_self, __pyx_v_Value); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_34Hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Value) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_36Hash(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_Value) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("Hash", 0); - /* "CAStar.pyx":267 + /* "CAStar.pyx":270 * ################ * def Hash(self,Value): * return int(Value//self.BlockSize) # <<<<<<<<<<<<<< @@ -8747,19 +8968,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_34Hash(CYTHON_UNUSED PyObject *__py * if NodeID not in self.Nodes: */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyNumber_FloorDivide(__pyx_v_Value, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __pyx_t_2 = PyNumber_FloorDivide(__pyx_v_Value, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "CAStar.pyx":266 + /* "CAStar.pyx":269 * * ################ * def Hash(self,Value): # <<<<<<<<<<<<<< @@ -8779,7 +9000,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_34Hash(CYTHON_UNUSED PyObject *__py return __pyx_r; } -/* "CAStar.pyx":268 +/* "CAStar.pyx":271 * def Hash(self,Value): * return int(Value//self.BlockSize) * def GetNode(self,NodeID): # <<<<<<<<<<<<<< @@ -8788,9 +9009,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_34Hash(CYTHON_UNUSED PyObject *__py */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_37GetNode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_37GetNode = {"GetNode", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_37GetNode, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_37GetNode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_39GetNode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_39GetNode = {"GetNode", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_39GetNode, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_39GetNode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_NodeID = 0; PyObject *__pyx_r = 0; @@ -8819,11 +9040,11 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_37GetNode(PyObject *__pyx_self, PyO case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_NodeID)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("GetNode", 1, 2, 2, 1); __PYX_ERR(0, 268, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("GetNode", 1, 2, 2, 1); __PYX_ERR(0, 271, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "GetNode") < 0)) __PYX_ERR(0, 268, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "GetNode") < 0)) __PYX_ERR(0, 271, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -8836,20 +9057,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_37GetNode(PyObject *__pyx_self, PyO } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("GetNode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 268, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("GetNode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 271, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.GetNode", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_36GetNode(__pyx_self, __pyx_v_self, __pyx_v_NodeID); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_38GetNode(__pyx_self, __pyx_v_self, __pyx_v_NodeID); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_38GetNode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID) { PyObject *__pyx_v_BlockID = NULL; PyObject *__pyx_v_filename = NULL; PyObject *__pyx_v_file = NULL; @@ -8872,28 +9093,28 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ int __pyx_t_13; __Pyx_RefNannySetupContext("GetNode", 0); - /* "CAStar.pyx":269 + /* "CAStar.pyx":272 * return int(Value//self.BlockSize) * def GetNode(self,NodeID): * if NodeID not in self.Nodes: # <<<<<<<<<<<<<< * BlockID = self.Hash(NodeID) * try: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_NodeID, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 269, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_NodeID, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { - /* "CAStar.pyx":270 + /* "CAStar.pyx":273 * def GetNode(self,NodeID): * if NodeID not in self.Nodes: * BlockID = self.Hash(NodeID) # <<<<<<<<<<<<<< * try: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"N"+str(BlockID)+self.BlockFileSuffix) */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Hash); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Hash); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { @@ -8906,13 +9127,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ } } if (!__pyx_t_5) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_NodeID}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_1); } else @@ -8920,19 +9141,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_NodeID}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { - __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) + __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL; __Pyx_INCREF(__pyx_v_NodeID); __Pyx_GIVEREF(__pyx_v_NodeID); PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_NodeID); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } @@ -8941,7 +9162,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __pyx_v_BlockID = __pyx_t_1; __pyx_t_1 = 0; - /* "CAStar.pyx":271 + /* "CAStar.pyx":274 * if NodeID not in self.Nodes: * BlockID = self.Hash(NodeID) * try: # <<<<<<<<<<<<<< @@ -8957,45 +9178,45 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __Pyx_XGOTREF(__pyx_t_9); /*try:*/ { - /* "CAStar.pyx":272 + /* "CAStar.pyx":275 * BlockID = self.Hash(NodeID) * try: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"N"+str(BlockID)+self.BlockFileSuffix) # <<<<<<<<<<<<<< * file = open(filename,"rb") * block = pickle.load(file) */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_join); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_join); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = PyNumber_Add(__pyx_t_10, __pyx_n_s_N); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_11 = PyNumber_Add(__pyx_t_10, __pyx_n_s_N); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_v_BlockID); __Pyx_GIVEREF(__pyx_v_BlockID); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_BlockID); - __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_10, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_10, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyNumber_Add(__pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_10 = PyNumber_Add(__pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); - __pyx_t_11 = PyNumber_Add(__pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_11 = PyNumber_Add(__pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; @@ -9014,7 +9235,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_t_6, __pyx_t_5, __pyx_t_11}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; @@ -9025,7 +9246,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_t_6, __pyx_t_5, __pyx_t_11}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; @@ -9034,7 +9255,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ } else #endif { - __pyx_t_10 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_10 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); if (__pyx_t_12) { __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12); __pyx_t_12 = NULL; @@ -9048,7 +9269,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_11 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L4_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } @@ -9056,14 +9277,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __pyx_v_filename = __pyx_t_1; __pyx_t_1 = 0; - /* "CAStar.pyx":273 + /* "CAStar.pyx":276 * try: * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"N"+str(BlockID)+self.BlockFileSuffix) * file = open(filename,"rb") # <<<<<<<<<<<<<< * block = pickle.load(file) * file.close() */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L4_error) + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_filename); __Pyx_GIVEREF(__pyx_v_filename); @@ -9071,22 +9292,22 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __Pyx_INCREF(__pyx_n_s_rb); __Pyx_GIVEREF(__pyx_n_s_rb); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_rb); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_file = __pyx_t_4; __pyx_t_4 = 0; - /* "CAStar.pyx":274 + /* "CAStar.pyx":277 * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"N"+str(BlockID)+self.BlockFileSuffix) * file = open(filename,"rb") * block = pickle.load(file) # <<<<<<<<<<<<<< * file.close() * self.Nodes.update(block) */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __pyx_L4_error) + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 277, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_load); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 274, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_load); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 277, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -9100,13 +9321,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ } } if (!__pyx_t_1) { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_file); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 274, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_file); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_file}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 274, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_4); } else @@ -9114,19 +9335,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_file}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 274, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_4); } else #endif { - __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 274, __pyx_L4_error) + __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 277, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __pyx_t_1 = NULL; __Pyx_INCREF(__pyx_v_file); __Pyx_GIVEREF(__pyx_v_file); PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_file); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 274, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } @@ -9135,14 +9356,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __pyx_v_block = __pyx_t_4; __pyx_t_4 = 0; - /* "CAStar.pyx":275 + /* "CAStar.pyx":278 * file = open(filename,"rb") * block = pickle.load(file) * file.close() # <<<<<<<<<<<<<< * self.Nodes.update(block) * */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 275, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 278, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { @@ -9155,25 +9376,25 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ } } if (__pyx_t_11) { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 275, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L4_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } else { - __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 275, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L4_error) } __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "CAStar.pyx":276 + /* "CAStar.pyx":279 * block = pickle.load(file) * file.close() * self.Nodes.update(block) # <<<<<<<<<<<<<< * * */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 276, __pyx_L4_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 279, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_update); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 276, __pyx_L4_error) + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_update); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 279, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = NULL; @@ -9187,13 +9408,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ } } if (!__pyx_t_10) { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_block); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_block); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 279, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_11)) { PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_block}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 279, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_4); } else @@ -9201,19 +9422,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) { PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_block}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 279, __pyx_L4_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_4); } else #endif { - __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L4_error) + __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10); __pyx_t_10 = NULL; __Pyx_INCREF(__pyx_v_block); __Pyx_GIVEREF(__pyx_v_block); PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_v_block); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L4_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 279, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -9221,7 +9442,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "CAStar.pyx":271 + /* "CAStar.pyx":274 * if NodeID not in self.Nodes: * BlockID = self.Hash(NodeID) * try: # <<<<<<<<<<<<<< @@ -9243,7 +9464,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "CAStar.pyx":279 + /* "CAStar.pyx":282 * * * except Exception as e: # <<<<<<<<<<<<<< @@ -9253,21 +9474,21 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_13) { __Pyx_AddTraceback("CAStar.DynoGraph.GetNode", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_1) < 0) __PYX_ERR(0, 279, __pyx_L6_except_error) + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_1) < 0) __PYX_ERR(0, 282, __pyx_L6_except_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_11); __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_11); __pyx_v_e = __pyx_t_11; - /* "CAStar.pyx":280 + /* "CAStar.pyx":283 * * except Exception as e: * print(e) # <<<<<<<<<<<<<< * * if NodeID in self.Nodes: */ - if (__Pyx_PrintOne(0, __pyx_v_e) < 0) __PYX_ERR(0, 280, __pyx_L6_except_error) + if (__Pyx_PrintOne(0, __pyx_v_e) < 0) __PYX_ERR(0, 283, __pyx_L6_except_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -9276,7 +9497,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ goto __pyx_L6_except_error; __pyx_L6_except_error:; - /* "CAStar.pyx":271 + /* "CAStar.pyx":274 * if NodeID not in self.Nodes: * BlockID = self.Hash(NodeID) * try: # <<<<<<<<<<<<<< @@ -9298,7 +9519,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ __pyx_L9_try_end:; } - /* "CAStar.pyx":269 + /* "CAStar.pyx":272 * return int(Value//self.BlockSize) * def GetNode(self,NodeID): * if NodeID not in self.Nodes: # <<<<<<<<<<<<<< @@ -9307,21 +9528,21 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ */ } - /* "CAStar.pyx":282 + /* "CAStar.pyx":285 * print(e) * * if NodeID in self.Nodes: # <<<<<<<<<<<<<< * return self.Nodes[NodeID] * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_NodeID, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 282, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_NodeID, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { - /* "CAStar.pyx":283 + /* "CAStar.pyx":286 * * if NodeID in self.Nodes: * return self.Nodes[NodeID] # <<<<<<<<<<<<<< @@ -9329,16 +9550,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ * #Raises error if cannot get node */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 283, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = PyObject_GetItem(__pyx_t_1, __pyx_v_NodeID); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 283, __pyx_L1_error) + __pyx_t_11 = PyObject_GetItem(__pyx_t_1, __pyx_v_NodeID); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_11; __pyx_t_11 = 0; goto __pyx_L0; - /* "CAStar.pyx":282 + /* "CAStar.pyx":285 * print(e) * * if NodeID in self.Nodes: # <<<<<<<<<<<<<< @@ -9347,7 +9568,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ */ } - /* "CAStar.pyx":286 + /* "CAStar.pyx":289 * else: * #Raises error if cannot get node * raise ValueError("NodeID requested is not in the BlockID checked. Check BlockSize or regenerate blockfiles") # <<<<<<<<<<<<<< @@ -9355,14 +9576,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ * def SaveNodes(self): */ /*else*/ { - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 286, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 289, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __PYX_ERR(0, 286, __pyx_L1_error) + __PYX_ERR(0, 289, __pyx_L1_error) } - /* "CAStar.pyx":268 + /* "CAStar.pyx":271 * def Hash(self,Value): * return int(Value//self.BlockSize) * def GetNode(self,NodeID): # <<<<<<<<<<<<<< @@ -9392,7 +9613,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ return __pyx_r; } -/* "CAStar.pyx":288 +/* "CAStar.pyx":291 * raise ValueError("NodeID requested is not in the BlockID checked. Check BlockSize or regenerate blockfiles") * * def SaveNodes(self): # <<<<<<<<<<<<<< @@ -9401,20 +9622,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_36GetNode(CYTHON_UNUSED PyObject *_ */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_39SaveNodes(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_39SaveNodes = {"SaveNodes", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_39SaveNodes, METH_O, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_39SaveNodes(PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_41SaveNodes(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_41SaveNodes = {"SaveNodes", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_41SaveNodes, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_41SaveNodes(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("SaveNodes (wrapper)", 0); - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_38SaveNodes(__pyx_self, ((PyObject *)__pyx_v_self)); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_40SaveNodes(__pyx_self, ((PyObject *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_40SaveNodes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_Sets = NULL; PyObject *__pyx_v_m = NULL; PyObject *__pyx_v_x = NULL; @@ -9441,35 +9662,35 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject PyObject *__pyx_t_13 = NULL; __Pyx_RefNannySetupContext("SaveNodes", 0); - /* "CAStar.pyx":289 + /* "CAStar.pyx":292 * * def SaveNodes(self): * Sets = {} # <<<<<<<<<<<<<< * m = self.Hash(max(self.Nodes)) #Finds max blockID * for x in range(m+1): */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 289, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_Sets = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":290 + /* "CAStar.pyx":293 * def SaveNodes(self): * Sets = {} * m = self.Hash(max(self.Nodes)) #Finds max blockID # <<<<<<<<<<<<<< * for x in range(m+1): * Sets[x] = {} #Creates sets for each block */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Hash); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Hash); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; @@ -9483,14 +9704,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject } } if (!__pyx_t_4) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -9499,20 +9720,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif { - __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL; __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3); __pyx_t_3 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } @@ -9521,30 +9742,30 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __pyx_v_m = __pyx_t_1; __pyx_t_1 = 0; - /* "CAStar.pyx":291 + /* "CAStar.pyx":294 * Sets = {} * m = self.Hash(max(self.Nodes)) #Finds max blockID * for x in range(m+1): # <<<<<<<<<<<<<< * Sets[x] = {} #Creates sets for each block * */ - __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_m, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_m, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { - __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 294, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { @@ -9552,17 +9773,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject if (likely(PyList_CheckExact(__pyx_t_2))) { if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 294, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 294, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } @@ -9572,7 +9793,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 291, __pyx_L1_error) + else __PYX_ERR(0, 294, __pyx_L1_error) } break; } @@ -9581,19 +9802,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":292 + /* "CAStar.pyx":295 * m = self.Hash(max(self.Nodes)) #Finds max blockID * for x in range(m+1): * Sets[x] = {} #Creates sets for each block # <<<<<<<<<<<<<< * * for node in self.Nodes.values(): */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 292, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyDict_SetItem(__pyx_v_Sets, __pyx_v_x, __pyx_t_1) < 0)) __PYX_ERR(0, 292, __pyx_L1_error) + if (unlikely(PyDict_SetItem(__pyx_v_Sets, __pyx_v_x, __pyx_t_1) < 0)) __PYX_ERR(0, 295, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":291 + /* "CAStar.pyx":294 * Sets = {} * m = self.Hash(max(self.Nodes)) #Finds max blockID * for x in range(m+1): # <<<<<<<<<<<<<< @@ -9603,16 +9824,16 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":294 + /* "CAStar.pyx":297 * Sets[x] = {} #Creates sets for each block * * for node in self.Nodes.values(): # <<<<<<<<<<<<<< - * r = self.Hash(node.NodeID) - * Sets[r][node.NodeID] = node + * r = self.Hash(node.Get_NodeID()) + * Sets[r][node.Get_NodeID()] = node */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -9626,10 +9847,10 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject } } if (__pyx_t_1) { - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 297, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; @@ -9637,9 +9858,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __pyx_t_5 = __pyx_t_2; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { - __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 297, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { @@ -9647,17 +9868,17 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject if (likely(PyList_CheckExact(__pyx_t_5))) { if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 297, __pyx_L1_error) #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_2 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); #endif } else { if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 297, __pyx_L1_error) #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_2 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); #endif } @@ -9667,7 +9888,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 294, __pyx_L1_error) + else __PYX_ERR(0, 297, __pyx_L1_error) } break; } @@ -9676,17 +9897,35 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __Pyx_XDECREF_SET(__pyx_v_node, __pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":295 + /* "CAStar.pyx":298 * * for node in self.Nodes.values(): - * r = self.Hash(node.NodeID) # <<<<<<<<<<<<<< - * Sets[r][node.NodeID] = node + * r = self.Hash(node.Get_NodeID()) # <<<<<<<<<<<<<< + * Sets[r][node.Get_NodeID()] = node * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Hash); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Hash); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 295, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Get_NodeID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (__pyx_t_8) { + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) + } __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); @@ -9698,14 +9937,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject } } if (!__pyx_t_4) { - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 295, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_2); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 295, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -9714,20 +9953,20 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 295, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif { - __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 295, __pyx_L1_error) + __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL; __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 295, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } @@ -9736,32 +9975,50 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __Pyx_XDECREF_SET(__pyx_v_r, __pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":296 + /* "CAStar.pyx":299 * for node in self.Nodes.values(): - * r = self.Hash(node.NodeID) - * Sets[r][node.NodeID] = node # <<<<<<<<<<<<<< + * r = self.Hash(node.Get_NodeID()) + * Sets[r][node.Get_NodeID()] = node # <<<<<<<<<<<<<< * * */ - __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_Sets, __pyx_v_r); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_Sets, __pyx_v_r); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 299, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_Get_NodeID); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + } + } + if (__pyx_t_3) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + } __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_2, __pyx_t_1, __pyx_v_node) < 0)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(PyObject_SetItem(__pyx_t_2, __pyx_t_1, __pyx_v_node) < 0)) __PYX_ERR(0, 299, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":294 + /* "CAStar.pyx":297 * Sets[x] = {} #Creates sets for each block * * for node in self.Nodes.values(): # <<<<<<<<<<<<<< - * r = self.Hash(node.NodeID) - * Sets[r][node.NodeID] = node + * r = self.Hash(node.Get_NodeID()) + * Sets[r][node.Get_NodeID()] = node */ } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":299 + /* "CAStar.pyx":302 * * * for Set in Sets: #Set = BlockID # <<<<<<<<<<<<<< @@ -9769,7 +10026,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject * file = open(filename,"wb") */ __pyx_t_6 = 0; - __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_Sets, 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_Sets, 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = __pyx_t_1; @@ -9777,50 +10034,50 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject while (1) { __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_6, &__pyx_t_1, NULL, NULL, __pyx_t_10); if (unlikely(__pyx_t_11 == 0)) break; - if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 299, __pyx_L1_error) + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_Set, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":300 + /* "CAStar.pyx":303 * * for Set in Sets: #Set = BlockID * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"N"+str(Set)+self.BlockFileSuffix) # <<<<<<<<<<<<<< * file = open(filename,"wb") * data = Sets[Set] */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_join); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_join); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cwd); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_FolderName); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileName); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = PyNumber_Add(__pyx_t_4, __pyx_n_s_N); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_12 = PyNumber_Add(__pyx_t_4, __pyx_n_s_N); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_Set); __Pyx_GIVEREF(__pyx_v_Set); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_Set); - __pyx_t_13 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_4 = PyNumber_Add(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_BlockFileSuffix); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); - __pyx_t_12 = PyNumber_Add(__pyx_t_4, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_12 = PyNumber_Add(__pyx_t_4, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; @@ -9839,7 +10096,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[4] = {__pyx_t_13, __pyx_t_8, __pyx_t_3, __pyx_t_12}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; @@ -9850,7 +10107,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[4] = {__pyx_t_13, __pyx_t_8, __pyx_t_3, __pyx_t_12}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; @@ -9859,7 +10116,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject } else #endif { - __pyx_t_4 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_4 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__pyx_t_13) { __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_13); __pyx_t_13 = NULL; @@ -9873,7 +10130,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __pyx_t_8 = 0; __pyx_t_3 = 0; __pyx_t_12 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } @@ -9881,14 +10138,14 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __Pyx_XDECREF_SET(__pyx_v_filename, __pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":301 + /* "CAStar.pyx":304 * for Set in Sets: #Set = BlockID * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"N"+str(Set)+self.BlockFileSuffix) * file = open(filename,"wb") # <<<<<<<<<<<<<< * data = Sets[Set] * pickle.dump(data,file,protocol = pickle.HIGHEST_PROTOCOL) */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 301, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_filename); __Pyx_GIVEREF(__pyx_v_filename); @@ -9896,37 +10153,37 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __Pyx_INCREF(__pyx_n_s_wb); __Pyx_GIVEREF(__pyx_n_s_wb); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_wb); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 301, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF_SET(__pyx_v_file, __pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":302 + /* "CAStar.pyx":305 * filename = os.path.join(self.cwd,self.FolderName,self.BlockFileName+"N"+str(Set)+self.BlockFileSuffix) * file = open(filename,"wb") * data = Sets[Set] # <<<<<<<<<<<<<< * pickle.dump(data,file,protocol = pickle.HIGHEST_PROTOCOL) * file.close() */ - __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_Sets, __pyx_v_Set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 302, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_Sets, __pyx_v_Set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_data, __pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":303 + /* "CAStar.pyx":306 * file = open(filename,"wb") * data = Sets[Set] * pickle.dump(data,file,protocol = pickle.HIGHEST_PROTOCOL) # <<<<<<<<<<<<<< * file.close() * */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error) + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dump); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dump); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error) + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_data); __Pyx_GIVEREF(__pyx_v_data); @@ -9934,30 +10191,30 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject __Pyx_INCREF(__pyx_v_file); __Pyx_GIVEREF(__pyx_v_file); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_file); - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error) + __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 303, __pyx_L1_error) + __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_pickle); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_HIGHEST_PROTOCOL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 303, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_HIGHEST_PROTOCOL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_protocol, __pyx_t_3) < 0) __PYX_ERR(0, 303, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_protocol, __pyx_t_3) < 0) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 303, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":304 + /* "CAStar.pyx":307 * data = Sets[Set] * pickle.dump(data,file,protocol = pickle.HIGHEST_PROTOCOL) * file.close() # <<<<<<<<<<<<<< * * def EvictNode(self,NodeID): #Removes a node from the Nodes dict */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 304, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_file, __pyx_n_s_close); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { @@ -9970,10 +10227,10 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject } } if (__pyx_t_2) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 304, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 307, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { - __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 304, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 307, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; @@ -9981,7 +10238,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":288 + /* "CAStar.pyx":291 * raise ValueError("NodeID requested is not in the BlockID checked. Check BlockSize or regenerate blockfiles") * * def SaveNodes(self): # <<<<<<<<<<<<<< @@ -10018,7 +10275,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject return __pyx_r; } -/* "CAStar.pyx":306 +/* "CAStar.pyx":309 * file.close() * * def EvictNode(self,NodeID): #Removes a node from the Nodes dict # <<<<<<<<<<<<<< @@ -10027,9 +10284,9 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_38SaveNodes(CYTHON_UNUSED PyObject */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_9DynoGraph_41EvictNode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_41EvictNode = {"EvictNode", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_41EvictNode, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_9DynoGraph_41EvictNode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_9DynoGraph_43EvictNode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_9DynoGraph_43EvictNode = {"EvictNode", (PyCFunction)__pyx_pw_6CAStar_9DynoGraph_43EvictNode, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_9DynoGraph_43EvictNode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_NodeID = 0; PyObject *__pyx_r = 0; @@ -10058,11 +10315,11 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_41EvictNode(PyObject *__pyx_self, P case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_NodeID)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("EvictNode", 1, 2, 2, 1); __PYX_ERR(0, 306, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("EvictNode", 1, 2, 2, 1); __PYX_ERR(0, 309, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "EvictNode") < 0)) __PYX_ERR(0, 306, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "EvictNode") < 0)) __PYX_ERR(0, 309, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -10075,20 +10332,20 @@ static PyObject *__pyx_pw_6CAStar_9DynoGraph_41EvictNode(PyObject *__pyx_self, P } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("EvictNode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 306, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("EvictNode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 309, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.DynoGraph.EvictNode", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_9DynoGraph_40EvictNode(__pyx_self, __pyx_v_self, __pyx_v_NodeID); + __pyx_r = __pyx_pf_6CAStar_9DynoGraph_42EvictNode(__pyx_self, __pyx_v_self, __pyx_v_NodeID); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_9DynoGraph_40EvictNode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID) { +static PyObject *__pyx_pf_6CAStar_9DynoGraph_42EvictNode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_NodeID) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; @@ -10099,30 +10356,30 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_40EvictNode(CYTHON_UNUSED PyObject PyObject *__pyx_t_6 = NULL; __Pyx_RefNannySetupContext("EvictNode", 0); - /* "CAStar.pyx":307 + /* "CAStar.pyx":310 * * def EvictNode(self,NodeID): #Removes a node from the Nodes dict * if NodeID in self.Nodes: # <<<<<<<<<<<<<< * self.Nodes.pop(NodeID) - * + * return True */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_NodeID, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_NodeID, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 310, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { - /* "CAStar.pyx":308 + /* "CAStar.pyx":311 * def EvictNode(self,NodeID): #Removes a node from the Nodes dict * if NodeID in self.Nodes: * self.Nodes.pop(NodeID) # <<<<<<<<<<<<<< - * - * + * return True + * else: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 308, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 308, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; @@ -10136,13 +10393,13 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_40EvictNode(CYTHON_UNUSED PyObject } } if (!__pyx_t_4) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 308, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_NodeID}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 308, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); } else @@ -10150,19 +10407,19 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_40EvictNode(CYTHON_UNUSED PyObject #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_NodeID}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 308, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { - __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 308, __pyx_L1_error) + __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; __Pyx_INCREF(__pyx_v_NodeID); __Pyx_GIVEREF(__pyx_v_NodeID); PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_NodeID); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 308, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } @@ -10170,16 +10427,42 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_40EvictNode(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":307 + /* "CAStar.pyx":312 + * if NodeID in self.Nodes: + * self.Nodes.pop(NodeID) + * return True # <<<<<<<<<<<<<< + * else: + * return False + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; + + /* "CAStar.pyx":310 * * def EvictNode(self,NodeID): #Removes a node from the Nodes dict * if NodeID in self.Nodes: # <<<<<<<<<<<<<< * self.Nodes.pop(NodeID) + * return True + */ + } + + /* "CAStar.pyx":314 + * return True + * else: + * return False # <<<<<<<<<<<<<< + * * */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; } - /* "CAStar.pyx":306 + /* "CAStar.pyx":309 * file.close() * * def EvictNode(self,NodeID): #Removes a node from the Nodes dict # <<<<<<<<<<<<<< @@ -10188,8 +10471,6 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_40EvictNode(CYTHON_UNUSED PyObject */ /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); @@ -10203,7 +10484,7 @@ static PyObject *__pyx_pf_6CAStar_9DynoGraph_40EvictNode(CYTHON_UNUSED PyObject return __pyx_r; } -/* "CAStar.pyx":312 +/* "CAStar.pyx":319 * * class Node: * def __init__(self,NodeID,Cost,Coords): # <<<<<<<<<<<<<< @@ -10249,23 +10530,23 @@ static PyObject *__pyx_pw_6CAStar_4Node_1__init__(PyObject *__pyx_self, PyObject case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_NodeID)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 312, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 319, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Cost)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 312, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 319, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Coords)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 312, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 319, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 312, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 319, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; @@ -10282,7 +10563,7 @@ static PyObject *__pyx_pw_6CAStar_4Node_1__init__(PyObject *__pyx_self, PyObject } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 312, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 319, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.Node.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); @@ -10301,46 +10582,46 @@ static PyObject *__pyx_pf_6CAStar_4Node___init__(CYTHON_UNUSED PyObject *__pyx_s PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__init__", 0); - /* "CAStar.pyx":313 + /* "CAStar.pyx":320 * class Node: * def __init__(self,NodeID,Cost,Coords): * self.NodeID = NodeID # <<<<<<<<<<<<<< * self.Friends = [] * self.Cost = Cost */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_NodeID, __pyx_v_NodeID) < 0) __PYX_ERR(0, 313, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_NodeID, __pyx_v_NodeID) < 0) __PYX_ERR(0, 320, __pyx_L1_error) - /* "CAStar.pyx":314 + /* "CAStar.pyx":321 * def __init__(self,NodeID,Cost,Coords): * self.NodeID = NodeID * self.Friends = [] # <<<<<<<<<<<<<< * self.Cost = Cost * self.Coords = Coords */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error) + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Friends, __pyx_t_1) < 0) __PYX_ERR(0, 314, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Friends, __pyx_t_1) < 0) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":315 + /* "CAStar.pyx":322 * self.NodeID = NodeID * self.Friends = [] * self.Cost = Cost # <<<<<<<<<<<<<< * self.Coords = Coords * def add_friend(self,friend): */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Cost, __pyx_v_Cost) < 0) __PYX_ERR(0, 315, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Cost, __pyx_v_Cost) < 0) __PYX_ERR(0, 322, __pyx_L1_error) - /* "CAStar.pyx":316 + /* "CAStar.pyx":323 * self.Friends = [] * self.Cost = Cost * self.Coords = Coords # <<<<<<<<<<<<<< * def add_friend(self,friend): * if friend not in self.Friends: */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Coords, __pyx_v_Coords) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_Coords, __pyx_v_Coords) < 0) __PYX_ERR(0, 323, __pyx_L1_error) - /* "CAStar.pyx":312 + /* "CAStar.pyx":319 * * class Node: * def __init__(self,NodeID,Cost,Coords): # <<<<<<<<<<<<<< @@ -10361,7 +10642,7 @@ static PyObject *__pyx_pf_6CAStar_4Node___init__(CYTHON_UNUSED PyObject *__pyx_s return __pyx_r; } -/* "CAStar.pyx":317 +/* "CAStar.pyx":324 * self.Cost = Cost * self.Coords = Coords * def add_friend(self,friend): # <<<<<<<<<<<<<< @@ -10401,11 +10682,11 @@ static PyObject *__pyx_pw_6CAStar_4Node_3add_friend(PyObject *__pyx_self, PyObje case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_friend)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("add_friend", 1, 2, 2, 1); __PYX_ERR(0, 317, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("add_friend", 1, 2, 2, 1); __PYX_ERR(0, 324, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_friend") < 0)) __PYX_ERR(0, 317, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_friend") < 0)) __PYX_ERR(0, 324, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -10418,7 +10699,7 @@ static PyObject *__pyx_pw_6CAStar_4Node_3add_friend(PyObject *__pyx_self, PyObje } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("add_friend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 317, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("add_friend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 324, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.Node.add_friend", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); @@ -10440,42 +10721,42 @@ static PyObject *__pyx_pf_6CAStar_4Node_2add_friend(CYTHON_UNUSED PyObject *__py int __pyx_t_4; __Pyx_RefNannySetupContext("add_friend", 0); - /* "CAStar.pyx":318 + /* "CAStar.pyx":325 * self.Coords = Coords * def add_friend(self,friend): * if friend not in self.Friends: # <<<<<<<<<<<<<< * self.Friends.append(friend) - * def Get_Coords(self): + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_friend, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 318, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_friend, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 325, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { - /* "CAStar.pyx":319 + /* "CAStar.pyx":326 * def add_friend(self,friend): * if friend not in self.Friends: * self.Friends.append(friend) # <<<<<<<<<<<<<< - * def Get_Coords(self): - * return self.Coords + * + * def Get_NodeID(self): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 319, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_friend); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 319, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_friend); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 326, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":318 + /* "CAStar.pyx":325 * self.Coords = Coords * def add_friend(self,friend): * if friend not in self.Friends: # <<<<<<<<<<<<<< * self.Friends.append(friend) - * def Get_Coords(self): + * */ } - /* "CAStar.pyx":317 + /* "CAStar.pyx":324 * self.Cost = Cost * self.Coords = Coords * def add_friend(self,friend): # <<<<<<<<<<<<<< @@ -10496,51 +10777,173 @@ static PyObject *__pyx_pf_6CAStar_4Node_2add_friend(CYTHON_UNUSED PyObject *__py return __pyx_r; } -/* "CAStar.pyx":320 - * if friend not in self.Friends: +/* "CAStar.pyx":328 + * self.Friends.append(friend) + * + * def Get_NodeID(self): # <<<<<<<<<<<<<< + * return self.NodeID + * def Get_Friends(self): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6CAStar_4Node_5Get_NodeID(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_4Node_5Get_NodeID = {"Get_NodeID", (PyCFunction)__pyx_pw_6CAStar_4Node_5Get_NodeID, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_4Node_5Get_NodeID(PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("Get_NodeID (wrapper)", 0); + __pyx_r = __pyx_pf_6CAStar_4Node_4Get_NodeID(__pyx_self, ((PyObject *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6CAStar_4Node_4Get_NodeID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("Get_NodeID", 0); + + /* "CAStar.pyx":329 + * + * def Get_NodeID(self): + * return self.NodeID # <<<<<<<<<<<<<< + * def Get_Friends(self): + * return self.Friends + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "CAStar.pyx":328 * self.Friends.append(friend) + * + * def Get_NodeID(self): # <<<<<<<<<<<<<< + * return self.NodeID + * def Get_Friends(self): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("CAStar.Node.Get_NodeID", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "CAStar.pyx":330 + * def Get_NodeID(self): + * return self.NodeID + * def Get_Friends(self): # <<<<<<<<<<<<<< + * return self.Friends + * def Get_Coords(self): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6CAStar_4Node_7Get_Friends(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_4Node_7Get_Friends = {"Get_Friends", (PyCFunction)__pyx_pw_6CAStar_4Node_7Get_Friends, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_4Node_7Get_Friends(PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("Get_Friends (wrapper)", 0); + __pyx_r = __pyx_pf_6CAStar_4Node_6Get_Friends(__pyx_self, ((PyObject *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6CAStar_4Node_6Get_Friends(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("Get_Friends", 0); + + /* "CAStar.pyx":331 + * return self.NodeID + * def Get_Friends(self): + * return self.Friends # <<<<<<<<<<<<<< + * def Get_Coords(self): + * return self.Coords + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "CAStar.pyx":330 + * def Get_NodeID(self): + * return self.NodeID + * def Get_Friends(self): # <<<<<<<<<<<<<< + * return self.Friends + * def Get_Coords(self): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("CAStar.Node.Get_Friends", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "CAStar.pyx":332 + * def Get_Friends(self): + * return self.Friends * def Get_Coords(self): # <<<<<<<<<<<<<< * return self.Coords * def Get_Cost(self): */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_4Node_5Get_Coords(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_4Node_5Get_Coords = {"Get_Coords", (PyCFunction)__pyx_pw_6CAStar_4Node_5Get_Coords, METH_O, 0}; -static PyObject *__pyx_pw_6CAStar_4Node_5Get_Coords(PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6CAStar_4Node_9Get_Coords(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_4Node_9Get_Coords = {"Get_Coords", (PyCFunction)__pyx_pw_6CAStar_4Node_9Get_Coords, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_4Node_9Get_Coords(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("Get_Coords (wrapper)", 0); - __pyx_r = __pyx_pf_6CAStar_4Node_4Get_Coords(__pyx_self, ((PyObject *)__pyx_v_self)); + __pyx_r = __pyx_pf_6CAStar_4Node_8Get_Coords(__pyx_self, ((PyObject *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_4Node_4Get_Coords(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pf_6CAStar_4Node_8Get_Coords(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("Get_Coords", 0); - /* "CAStar.pyx":321 - * self.Friends.append(friend) + /* "CAStar.pyx":333 + * return self.Friends * def Get_Coords(self): * return self.Coords # <<<<<<<<<<<<<< * def Get_Cost(self): * return self.Cost */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 321, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "CAStar.pyx":320 - * if friend not in self.Friends: - * self.Friends.append(friend) + /* "CAStar.pyx":332 + * def Get_Friends(self): + * return self.Friends * def Get_Coords(self): # <<<<<<<<<<<<<< * return self.Coords * def Get_Cost(self): @@ -10557,7 +10960,7 @@ static PyObject *__pyx_pf_6CAStar_4Node_4Get_Coords(CYTHON_UNUSED PyObject *__py return __pyx_r; } -/* "CAStar.pyx":322 +/* "CAStar.pyx":334 * def Get_Coords(self): * return self.Coords * def Get_Cost(self): # <<<<<<<<<<<<<< @@ -10566,26 +10969,26 @@ static PyObject *__pyx_pf_6CAStar_4Node_4Get_Coords(CYTHON_UNUSED PyObject *__py */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_4Node_7Get_Cost(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_4Node_7Get_Cost = {"Get_Cost", (PyCFunction)__pyx_pw_6CAStar_4Node_7Get_Cost, METH_O, 0}; -static PyObject *__pyx_pw_6CAStar_4Node_7Get_Cost(PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6CAStar_4Node_11Get_Cost(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_4Node_11Get_Cost = {"Get_Cost", (PyCFunction)__pyx_pw_6CAStar_4Node_11Get_Cost, METH_O, 0}; +static PyObject *__pyx_pw_6CAStar_4Node_11Get_Cost(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("Get_Cost (wrapper)", 0); - __pyx_r = __pyx_pf_6CAStar_4Node_6Get_Cost(__pyx_self, ((PyObject *)__pyx_v_self)); + __pyx_r = __pyx_pf_6CAStar_4Node_10Get_Cost(__pyx_self, ((PyObject *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_4Node_6Get_Cost(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { +static PyObject *__pyx_pf_6CAStar_4Node_10Get_Cost(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("Get_Cost", 0); - /* "CAStar.pyx":323 + /* "CAStar.pyx":335 * return self.Coords * def Get_Cost(self): * return self.Cost # <<<<<<<<<<<<<< @@ -10593,13 +10996,13 @@ static PyObject *__pyx_pf_6CAStar_4Node_6Get_Cost(CYTHON_UNUSED PyObject *__pyx_ * ##cdef int EstimateDistance(Node,Target, float xSize, float ySize, float zSize): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Cost); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 323, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Cost); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "CAStar.pyx":322 + /* "CAStar.pyx":334 * def Get_Coords(self): * return self.Coords * def Get_Cost(self): # <<<<<<<<<<<<<< @@ -10618,7 +11021,7 @@ static PyObject *__pyx_pf_6CAStar_4Node_6Get_Cost(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } -/* "CAStar.pyx":328 +/* "CAStar.pyx":340 * ## return int(abs(Node.Coords.x-Target.Coords.x)/xSize+abs(Node.Coords.y-Target.Coords.y)/ySize+abs(Node.Coords.z-Target.Coords.z)/zSize) * * cdef float EstimateDistance(int NodeID, int TargetID, int xCount,int yCount,int zCount, float xSize, float ySize, float zSize): # <<<<<<<<<<<<<< @@ -10645,7 +11048,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta int __pyx_t_4; __Pyx_RefNannySetupContext("EstimateDistance", 0); - /* "CAStar.pyx":331 + /* "CAStar.pyx":343 * cdef float x,y,z,Nx,Ny,Nz,Tx,Ty,Tz * cdef float Distance * Nx,Ny,Nz = GetxCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize),GetyCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize),GetzCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize) # <<<<<<<<<<<<<< @@ -10659,7 +11062,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta __pyx_v_Ny = __pyx_t_2; __pyx_v_Nz = __pyx_t_3; - /* "CAStar.pyx":332 + /* "CAStar.pyx":344 * cdef float Distance * Nx,Ny,Nz = GetxCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize),GetyCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize),GetzCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize) * Tx,Ty,Tz = GetxCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize),GetyCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize),GetzCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize) # <<<<<<<<<<<<<< @@ -10673,49 +11076,34 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta __pyx_v_Ty = __pyx_t_2; __pyx_v_Tz = __pyx_t_1; - /* "CAStar.pyx":333 + /* "CAStar.pyx":345 * Nx,Ny,Nz = GetxCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize),GetyCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize),GetzCoord(NodeID,xCount,yCount,zCount,xSize,ySize,zSize) * Tx,Ty,Tz = GetxCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize),GetyCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize),GetzCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize) * x=(Nx-Tx)/xSize # <<<<<<<<<<<<<< * y=(Ny-Ty)/ySize * z=(Nz-Tz)/zSize */ - __pyx_t_1 = (__pyx_v_Nx - __pyx_v_Tx); - if (unlikely(__pyx_v_xSize == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(0, 333, __pyx_L1_error) - } - __pyx_v_x = (__pyx_t_1 / __pyx_v_xSize); + __pyx_v_x = ((__pyx_v_Nx - __pyx_v_Tx) / __pyx_v_xSize); - /* "CAStar.pyx":334 + /* "CAStar.pyx":346 * Tx,Ty,Tz = GetxCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize),GetyCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize),GetzCoord(TargetID,xCount,yCount,zCount,xSize,ySize,zSize) * x=(Nx-Tx)/xSize * y=(Ny-Ty)/ySize # <<<<<<<<<<<<<< * z=(Nz-Tz)/zSize * if x < 0: */ - __pyx_t_1 = (__pyx_v_Ny - __pyx_v_Ty); - if (unlikely(__pyx_v_ySize == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(0, 334, __pyx_L1_error) - } - __pyx_v_y = (__pyx_t_1 / __pyx_v_ySize); + __pyx_v_y = ((__pyx_v_Ny - __pyx_v_Ty) / __pyx_v_ySize); - /* "CAStar.pyx":335 + /* "CAStar.pyx":347 * x=(Nx-Tx)/xSize * y=(Ny-Ty)/ySize * z=(Nz-Tz)/zSize # <<<<<<<<<<<<<< * if x < 0: * x = x*-1 */ - __pyx_t_1 = (__pyx_v_Nz - __pyx_v_Tz); - if (unlikely(__pyx_v_zSize == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(0, 335, __pyx_L1_error) - } - __pyx_v_z = (__pyx_t_1 / __pyx_v_zSize); + __pyx_v_z = ((__pyx_v_Nz - __pyx_v_Tz) / __pyx_v_zSize); - /* "CAStar.pyx":336 + /* "CAStar.pyx":348 * y=(Ny-Ty)/ySize * z=(Nz-Tz)/zSize * if x < 0: # <<<<<<<<<<<<<< @@ -10725,7 +11113,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta __pyx_t_4 = ((__pyx_v_x < 0.0) != 0); if (__pyx_t_4) { - /* "CAStar.pyx":337 + /* "CAStar.pyx":349 * z=(Nz-Tz)/zSize * if x < 0: * x = x*-1 # <<<<<<<<<<<<<< @@ -10734,7 +11122,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta */ __pyx_v_x = (__pyx_v_x * -1.0); - /* "CAStar.pyx":336 + /* "CAStar.pyx":348 * y=(Ny-Ty)/ySize * z=(Nz-Tz)/zSize * if x < 0: # <<<<<<<<<<<<<< @@ -10743,7 +11131,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta */ } - /* "CAStar.pyx":338 + /* "CAStar.pyx":350 * if x < 0: * x = x*-1 * if y < 0: # <<<<<<<<<<<<<< @@ -10753,7 +11141,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta __pyx_t_4 = ((__pyx_v_y < 0.0) != 0); if (__pyx_t_4) { - /* "CAStar.pyx":339 + /* "CAStar.pyx":351 * x = x*-1 * if y < 0: * y = y*-1 # <<<<<<<<<<<<<< @@ -10762,7 +11150,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta */ __pyx_v_y = (__pyx_v_y * -1.0); - /* "CAStar.pyx":338 + /* "CAStar.pyx":350 * if x < 0: * x = x*-1 * if y < 0: # <<<<<<<<<<<<<< @@ -10771,7 +11159,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta */ } - /* "CAStar.pyx":340 + /* "CAStar.pyx":352 * if y < 0: * y = y*-1 * if z < 0: # <<<<<<<<<<<<<< @@ -10781,7 +11169,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta __pyx_t_4 = ((__pyx_v_z < 0.0) != 0); if (__pyx_t_4) { - /* "CAStar.pyx":341 + /* "CAStar.pyx":353 * y = y*-1 * if z < 0: * z = z*-1 # <<<<<<<<<<<<<< @@ -10790,7 +11178,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta */ __pyx_v_z = (__pyx_v_z * -1.0); - /* "CAStar.pyx":340 + /* "CAStar.pyx":352 * if y < 0: * y = y*-1 * if z < 0: # <<<<<<<<<<<<<< @@ -10799,7 +11187,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta */ } - /* "CAStar.pyx":342 + /* "CAStar.pyx":354 * if z < 0: * z = z*-1 * Distance = x+y+z # <<<<<<<<<<<<<< @@ -10808,7 +11196,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta */ __pyx_v_Distance = ((__pyx_v_x + __pyx_v_y) + __pyx_v_z); - /* "CAStar.pyx":343 + /* "CAStar.pyx":355 * z = z*-1 * Distance = x+y+z * return Distance # <<<<<<<<<<<<<< @@ -10818,7 +11206,7 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta __pyx_r = __pyx_v_Distance; goto __pyx_L0; - /* "CAStar.pyx":328 + /* "CAStar.pyx":340 * ## return int(abs(Node.Coords.x-Target.Coords.x)/xSize+abs(Node.Coords.y-Target.Coords.y)/ySize+abs(Node.Coords.z-Target.Coords.z)/zSize) * * cdef float EstimateDistance(int NodeID, int TargetID, int xCount,int yCount,int zCount, float xSize, float ySize, float zSize): # <<<<<<<<<<<<<< @@ -10827,15 +11215,12 @@ static float __pyx_f_6CAStar_EstimateDistance(int __pyx_v_NodeID, int __pyx_v_Ta */ /* function exit code */ - __pyx_L1_error:; - __Pyx_WriteUnraisable("CAStar.EstimateDistance", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "CAStar.pyx":347 +/* "CAStar.pyx":359 * * * def AStar2(graph, int start, int target): # Set all g to node_count + 1 # <<<<<<<<<<<<<< @@ -10878,17 +11263,17 @@ static PyObject *__pyx_pw_6CAStar_1AStar2(PyObject *__pyx_self, PyObject *__pyx_ case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_start)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("AStar2", 1, 3, 3, 1); __PYX_ERR(0, 347, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("AStar2", 1, 3, 3, 1); __PYX_ERR(0, 359, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_target)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("AStar2", 1, 3, 3, 2); __PYX_ERR(0, 347, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("AStar2", 1, 3, 3, 2); __PYX_ERR(0, 359, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "AStar2") < 0)) __PYX_ERR(0, 347, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "AStar2") < 0)) __PYX_ERR(0, 359, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; @@ -10898,12 +11283,12 @@ static PyObject *__pyx_pw_6CAStar_1AStar2(PyObject *__pyx_self, PyObject *__pyx_ values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_graph = values[0]; - __pyx_v_start = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_start == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L3_error) - __pyx_v_target = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_target == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L3_error) + __pyx_v_start = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_start == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error) + __pyx_v_target = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_target == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("AStar2", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 347, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("AStar2", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 359, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.AStar2", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); @@ -10921,7 +11306,6 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO float __pyx_v_xSize; float __pyx_v_ySize; float __pyx_v_zSize; - float __pyx_v_gNode; PyObject *__pyx_v_ClosedSet = 0; PyObject *__pyx_v_OpenSet = 0; PyObject *__pyx_v_cameFrom = 0; @@ -10954,24 +11338,23 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO int __pyx_t_10; int __pyx_t_11; Py_ssize_t __pyx_t_12; - PyObject *(*__pyx_t_13)(PyObject *); - int __pyx_t_14; - Py_ssize_t __pyx_t_15; + int __pyx_t_13; + Py_ssize_t __pyx_t_14; + int __pyx_t_15; int __pyx_t_16; - int __pyx_t_17; - PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_17 = NULL; __Pyx_RefNannySetupContext("AStar2", 0); - /* "CAStar.pyx":348 + /* "CAStar.pyx":360 * * def AStar2(graph, int start, int target): # Set all g to node_count + 1 * StartTime = time.time() # <<<<<<<<<<<<<< * * cdef float xSize,ySize,zSize,gNode */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 348, __pyx_L1_error) + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -10985,26 +11368,26 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO } } if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { - __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_StartTime = __pyx_t_1; __pyx_t_1 = 0; - /* "CAStar.pyx":357 + /* "CAStar.pyx":369 * * * TargetNode = graph.GetNode(target) # <<<<<<<<<<<<<< * xSize,ySize,zSize = graph.xSize,graph.ySize,graph.zSize * xCount,yCount,zCount = graph.xCount,graph.yCount,graph.zCount */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_GetNode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 357, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_GetNode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_target); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_target); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { @@ -11017,14 +11400,14 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO } } if (!__pyx_t_4) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_2}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -11033,20 +11416,20 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_2}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else #endif { - __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 357, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL; __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_2); __pyx_t_2 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } @@ -11055,244 +11438,145 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO __pyx_v_TargetNode = __pyx_t_1; __pyx_t_1 = 0; - /* "CAStar.pyx":358 + /* "CAStar.pyx":370 * * TargetNode = graph.GetNode(target) * xSize,ySize,zSize = graph.xSize,graph.ySize,graph.zSize # <<<<<<<<<<<<<< * xCount,yCount,zCount = graph.xCount,graph.yCount,graph.zCount * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_xSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_xSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 358, __pyx_L1_error) + __pyx_t_6 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_ySize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_ySize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_7 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 358, __pyx_L1_error) + __pyx_t_7 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_7 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_zSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_zSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_8 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 358, __pyx_L1_error) + __pyx_t_8 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_8 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_xSize = __pyx_t_6; __pyx_v_ySize = __pyx_t_7; __pyx_v_zSize = __pyx_t_8; - /* "CAStar.pyx":359 + /* "CAStar.pyx":371 * TargetNode = graph.GetNode(target) * xSize,ySize,zSize = graph.xSize,graph.ySize,graph.zSize * xCount,yCount,zCount = graph.xCount,graph.yCount,graph.zCount # <<<<<<<<<<<<<< * * ClosedSet = {} #Dict to hash find closed nodes */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_xCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_xCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_yCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_yCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_zCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_zCount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_xCount = __pyx_t_9; __pyx_v_yCount = __pyx_t_10; __pyx_v_zCount = __pyx_t_11; - /* "CAStar.pyx":361 + /* "CAStar.pyx":373 * xCount,yCount,zCount = graph.xCount,graph.yCount,graph.zCount * * ClosedSet = {} #Dict to hash find closed nodes # <<<<<<<<<<<<<< * OpenSet = {start:1} * cameFrom = {} */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 361, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_ClosedSet = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":362 + /* "CAStar.pyx":374 * * ClosedSet = {} #Dict to hash find closed nodes * OpenSet = {start:1} # <<<<<<<<<<<<<< * cameFrom = {} * g,f = {},{} */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 362, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 362, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_int_1) < 0) __PYX_ERR(0, 362, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_int_1) < 0) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_OpenSet = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":363 + /* "CAStar.pyx":375 * ClosedSet = {} #Dict to hash find closed nodes * OpenSet = {start:1} * cameFrom = {} # <<<<<<<<<<<<<< * g,f = {},{} * current = -1 */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 363, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_cameFrom = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":364 + /* "CAStar.pyx":376 * OpenSet = {start:1} * cameFrom = {} * g,f = {},{} # <<<<<<<<<<<<<< * current = -1 * */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 364, __pyx_L1_error) + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 364, __pyx_L1_error) + __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_g = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; __pyx_v_f = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":365 + /* "CAStar.pyx":377 * cameFrom = {} * g,f = {},{} * current = -1 # <<<<<<<<<<<<<< * - * for NodeID in graph.Nodes: - */ - __pyx_v_current = -1; - - /* "CAStar.pyx":367 - * current = -1 - * - * for NodeID in graph.Nodes: # <<<<<<<<<<<<<< - * g[NodeID] = math.inf - * f[NodeID] = math.inf - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { - __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_12 = 0; - __pyx_t_13 = NULL; - } else { - __pyx_t_12 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_13 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 367, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - for (;;) { - if (likely(!__pyx_t_13)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_3); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 367, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - } else { - if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_3); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 367, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - } - } else { - __pyx_t_3 = __pyx_t_13(__pyx_t_1); - if (unlikely(!__pyx_t_3)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 367, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_3); - } - __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_NodeID = __pyx_t_11; - - /* "CAStar.pyx":368 - * - * for NodeID in graph.Nodes: - * g[NodeID] = math.inf # <<<<<<<<<<<<<< - * f[NodeID] = math.inf - * - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_inf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 368, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (unlikely(PyDict_SetItem(__pyx_v_g, __pyx_t_3, __pyx_t_5) < 0)) __PYX_ERR(0, 368, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "CAStar.pyx":369 - * for NodeID in graph.Nodes: - * g[NodeID] = math.inf - * f[NodeID] = math.inf # <<<<<<<<<<<<<< * - * g[start] = 0 */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 369, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_inf); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 369, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 369, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyDict_SetItem(__pyx_v_f, __pyx_t_5, __pyx_t_3) < 0)) __PYX_ERR(0, 369, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_current = -1; - /* "CAStar.pyx":367 - * current = -1 + /* "CAStar.pyx":380 * - * for NodeID in graph.Nodes: # <<<<<<<<<<<<<< - * g[NodeID] = math.inf - * f[NodeID] = math.inf - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "CAStar.pyx":371 - * f[NodeID] = math.inf * * g[start] = 0 # <<<<<<<<<<<<<< * f[start] = EstimateDistance(start,target,xCount,yCount,zCount,xSize,ySize,zSize) * Found = False */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyDict_SetItem(__pyx_v_g, __pyx_t_1, __pyx_int_0) < 0)) __PYX_ERR(0, 371, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (unlikely(PyDict_SetItem(__pyx_v_g, __pyx_t_3, __pyx_int_0) < 0)) __PYX_ERR(0, 380, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":372 + /* "CAStar.pyx":381 * * g[start] = 0 * f[start] = EstimateDistance(start,target,xCount,yCount,zCount,xSize,ySize,zSize) # <<<<<<<<<<<<<< * Found = False * while len(OpenSet) != 0: */ - __pyx_t_1 = PyFloat_FromDouble(__pyx_f_6CAStar_EstimateDistance(__pyx_v_start, __pyx_v_target, __pyx_v_xCount, __pyx_v_yCount, __pyx_v_zCount, __pyx_v_xSize, __pyx_v_ySize, __pyx_v_zSize)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 372, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 372, __pyx_L1_error) + __pyx_t_3 = PyFloat_FromDouble(__pyx_f_6CAStar_EstimateDistance(__pyx_v_start, __pyx_v_target, __pyx_v_xCount, __pyx_v_yCount, __pyx_v_zCount, __pyx_v_xSize, __pyx_v_ySize, __pyx_v_zSize)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (unlikely(PyDict_SetItem(__pyx_v_f, __pyx_t_3, __pyx_t_1) < 0)) __PYX_ERR(0, 372, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_f, __pyx_t_1, __pyx_t_3) < 0)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":373 + /* "CAStar.pyx":382 * g[start] = 0 * f[start] = EstimateDistance(start,target,xCount,yCount,zCount,xSize,ySize,zSize) * Found = False # <<<<<<<<<<<<<< @@ -11301,7 +11585,7 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO */ __pyx_v_Found = 0; - /* "CAStar.pyx":374 + /* "CAStar.pyx":383 * f[start] = EstimateDistance(start,target,xCount,yCount,zCount,xSize,ySize,zSize) * Found = False * while len(OpenSet) != 0: # <<<<<<<<<<<<<< @@ -11309,23 +11593,23 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO * for x in OpenSet: */ while (1) { - __pyx_t_12 = PyDict_Size(__pyx_v_OpenSet); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 374, __pyx_L1_error) - __pyx_t_14 = ((__pyx_t_12 != 0) != 0); - if (!__pyx_t_14) break; + __pyx_t_12 = PyDict_Size(__pyx_v_OpenSet); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 383, __pyx_L1_error) + __pyx_t_13 = ((__pyx_t_12 != 0) != 0); + if (!__pyx_t_13) break; - /* "CAStar.pyx":375 + /* "CAStar.pyx":384 * Found = False * while len(OpenSet) != 0: * OpenList = [] # <<<<<<<<<<<<<< * for x in OpenSet: * OpenList.append((f[x],x)) # f score and ID */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_OpenList, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 384, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_OpenList, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; - /* "CAStar.pyx":376 + /* "CAStar.pyx":385 * while len(OpenSet) != 0: * OpenList = [] * for x in OpenSet: # <<<<<<<<<<<<<< @@ -11333,125 +11617,125 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO * */ __pyx_t_12 = 0; - __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_OpenSet, 1, ((PyObject *)NULL), (&__pyx_t_15), (&__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_OpenSet, 1, ((PyObject *)NULL), (&__pyx_t_14), (&__pyx_t_11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = 0; while (1) { - __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_15, &__pyx_t_12, &__pyx_t_3, NULL, NULL, __pyx_t_11); + __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_14, &__pyx_t_12, &__pyx_t_1, NULL, NULL, __pyx_t_11); if (unlikely(__pyx_t_10 == 0)) break; - if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_3); - __pyx_t_3 = 0; + if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1); + __pyx_t_1 = 0; - /* "CAStar.pyx":377 + /* "CAStar.pyx":386 * OpenList = [] * for x in OpenSet: * OpenList.append((f[x],x)) # f score and ID # <<<<<<<<<<<<<< * * heapq.heapify(OpenList) */ - __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_f, __pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 377, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 377, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_f, __pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __Pyx_INCREF(__pyx_v_x); __Pyx_GIVEREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_x); - __pyx_t_3 = 0; - __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_OpenList, __pyx_t_5); if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 377, __pyx_L1_error) + __pyx_t_1 = 0; + __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_OpenList, __pyx_t_5); if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 386, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":379 + /* "CAStar.pyx":388 * OpenList.append((f[x],x)) # f score and ID * * heapq.heapify(OpenList) # <<<<<<<<<<<<<< * current = OpenList.pop(0)[1] # Gets ID with lowest f * */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_heapq); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 379, __pyx_L1_error) + __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_heapq); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_heapify); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_heapify); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __Pyx_DECREF_SET(__pyx_t_1, function); } } if (!__pyx_t_5) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_OpenList); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_OpenList); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); } else { #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { + if (PyFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_OpenList}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_3); } else #endif #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { + if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_OpenList}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_3); } else #endif { - __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) + __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL; __Pyx_INCREF(__pyx_v_OpenList); __Pyx_GIVEREF(__pyx_v_OpenList); PyTuple_SET_ITEM(__pyx_t_2, 0+1, __pyx_v_OpenList); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":380 + /* "CAStar.pyx":389 * * heapq.heapify(OpenList) * current = OpenList.pop(0)[1] # Gets ID with lowest f # <<<<<<<<<<<<<< * * if current == target: */ - __pyx_t_1 = __Pyx_PyList_PopIndex(__pyx_v_OpenList, __pyx_int_0, 0, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 380, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 380, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyList_PopIndex(__pyx_v_OpenList, __pyx_int_0, 0, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 380, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_current = __pyx_t_11; - /* "CAStar.pyx":382 + /* "CAStar.pyx":391 * current = OpenList.pop(0)[1] # Gets ID with lowest f * * if current == target: # <<<<<<<<<<<<<< * #print("Found Target") * Found = True */ - __pyx_t_14 = ((__pyx_v_current == __pyx_v_target) != 0); - if (__pyx_t_14) { + __pyx_t_13 = ((__pyx_v_current == __pyx_v_target) != 0); + if (__pyx_t_13) { - /* "CAStar.pyx":384 + /* "CAStar.pyx":393 * if current == target: * #print("Found Target") * Found = True # <<<<<<<<<<<<<< @@ -11460,16 +11744,16 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO */ __pyx_v_Found = 1; - /* "CAStar.pyx":385 + /* "CAStar.pyx":394 * #print("Found Target") * Found = True * break # <<<<<<<<<<<<<< * * */ - goto __pyx_L6_break; + goto __pyx_L4_break; - /* "CAStar.pyx":382 + /* "CAStar.pyx":391 * current = OpenList.pop(0)[1] # Gets ID with lowest f * * if current == target: # <<<<<<<<<<<<<< @@ -11478,142 +11762,142 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO */ } - /* "CAStar.pyx":388 + /* "CAStar.pyx":397 * * * OpenSet.pop(current) # <<<<<<<<<<<<<< * ClosedSet[current] = 1 * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_OpenSet, __pyx_n_s_pop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 388, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_OpenSet, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); } } if (!__pyx_t_5) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { + if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_2}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else #endif #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { + if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_2}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else #endif { - __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 388, __pyx_L1_error) + __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL; __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":389 + /* "CAStar.pyx":398 * * OpenSet.pop(current) * ClosedSet[current] = 1 # <<<<<<<<<<<<<< * * FriendList = graph.GetNode(current).Friends */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (unlikely(PyDict_SetItem(__pyx_v_ClosedSet, __pyx_t_3, __pyx_int_1) < 0)) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_ClosedSet, __pyx_t_1, __pyx_int_1) < 0)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":391 + /* "CAStar.pyx":400 * ClosedSet[current] = 1 * * FriendList = graph.GetNode(current).Friends # <<<<<<<<<<<<<< * for NodeID in FriendList: * if NodeID in ClosedSet: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_GetNode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 391, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_GetNode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); } } if (!__pyx_t_2) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 391, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { + if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_t_4}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 391, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else #endif #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { + if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_t_4}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 391, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else #endif { - __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 391, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL; __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_4); __pyx_t_4 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 391, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Friends); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 391, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_FriendList, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Friends); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(PyList_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_FriendList, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; - /* "CAStar.pyx":392 + /* "CAStar.pyx":401 * * FriendList = graph.GetNode(current).Friends * for NodeID in FriendList: # <<<<<<<<<<<<<< @@ -11622,45 +11906,45 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO */ if (unlikely(__pyx_v_FriendList == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 392, __pyx_L1_error) + __PYX_ERR(0, 401, __pyx_L1_error) } - __pyx_t_1 = __pyx_v_FriendList; __Pyx_INCREF(__pyx_t_1); __pyx_t_15 = 0; + __pyx_t_3 = __pyx_v_FriendList; __Pyx_INCREF(__pyx_t_3); __pyx_t_14 = 0; for (;;) { - if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_1)) break; + if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_15); __Pyx_INCREF(__pyx_t_3); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 392, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_1); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 401, __pyx_L1_error) #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 392, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); #endif - __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 392, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_NodeID = __pyx_t_11; - /* "CAStar.pyx":393 + /* "CAStar.pyx":402 * FriendList = graph.GetNode(current).Friends * for NodeID in FriendList: * if NodeID in ClosedSet: # <<<<<<<<<<<<<< * continue * if NodeID not in OpenSet: */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_14 = (__Pyx_PyDict_ContainsTF(__pyx_t_3, __pyx_v_ClosedSet, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_17 = (__pyx_t_14 != 0); - if (__pyx_t_17) { + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_13 = (__Pyx_PyDict_ContainsTF(__pyx_t_1, __pyx_v_ClosedSet, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 402, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_16 = (__pyx_t_13 != 0); + if (__pyx_t_16) { - /* "CAStar.pyx":394 + /* "CAStar.pyx":403 * for NodeID in FriendList: * if NodeID in ClosedSet: * continue # <<<<<<<<<<<<<< * if NodeID not in OpenSet: * OpenSet[NodeID] = 1 */ - goto __pyx_L10_continue; + goto __pyx_L8_continue; - /* "CAStar.pyx":393 + /* "CAStar.pyx":402 * FriendList = graph.GetNode(current).Friends * for NodeID in FriendList: * if NodeID in ClosedSet: # <<<<<<<<<<<<<< @@ -11669,110 +11953,87 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO */ } - /* "CAStar.pyx":395 + /* "CAStar.pyx":404 * if NodeID in ClosedSet: * continue * if NodeID not in OpenSet: # <<<<<<<<<<<<<< * OpenSet[NodeID] = 1 - * + * g[NodeID] = math.inf */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_17 = (__Pyx_PyDict_ContainsTF(__pyx_t_3, __pyx_v_OpenSet, Py_NE)); if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_14 = (__pyx_t_17 != 0); - if (__pyx_t_14) { + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_16 = (__Pyx_PyDict_ContainsTF(__pyx_t_1, __pyx_v_OpenSet, Py_NE)); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_13 = (__pyx_t_16 != 0); + if (__pyx_t_13) { - /* "CAStar.pyx":396 + /* "CAStar.pyx":405 * continue * if NodeID not in OpenSet: * OpenSet[NodeID] = 1 # <<<<<<<<<<<<<< - * - * if NodeID not in g: #if not in g it is not yet in f also - */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (unlikely(PyDict_SetItem(__pyx_v_OpenSet, __pyx_t_3, __pyx_int_1) < 0)) __PYX_ERR(0, 396, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "CAStar.pyx":395 - * if NodeID in ClosedSet: - * continue - * if NodeID not in OpenSet: # <<<<<<<<<<<<<< - * OpenSet[NodeID] = 1 - * - */ - } - - /* "CAStar.pyx":398 - * OpenSet[NodeID] = 1 - * - * if NodeID not in g: #if not in g it is not yet in f also # <<<<<<<<<<<<<< * g[NodeID] = math.inf * f[NodeID] = math.inf */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 398, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_14 = (__Pyx_PyDict_ContainsTF(__pyx_t_3, __pyx_v_g, Py_NE)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 398, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_17 = (__pyx_t_14 != 0); - if (__pyx_t_17) { + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_OpenSet, __pyx_t_1, __pyx_int_1) < 0)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":399 - * - * if NodeID not in g: #if not in g it is not yet in f also + /* "CAStar.pyx":406 + * if NodeID not in OpenSet: + * OpenSet[NodeID] = 1 * g[NodeID] = math.inf # <<<<<<<<<<<<<< * f[NodeID] = math.inf * */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_inf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 399, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 406, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (unlikely(PyDict_SetItem(__pyx_v_g, __pyx_t_3, __pyx_t_5) < 0)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_g, __pyx_t_1, __pyx_t_5) < 0)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "CAStar.pyx":400 - * if NodeID not in g: #if not in g it is not yet in f also + /* "CAStar.pyx":407 + * OpenSet[NodeID] = 1 * g[NodeID] = math.inf * f[NodeID] = math.inf # <<<<<<<<<<<<<< * * Node = graph.GetNode(NodeID) */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 400, __pyx_L1_error) + __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_inf); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_inf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 400, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyDict_SetItem(__pyx_v_f, __pyx_t_5, __pyx_t_3) < 0)) __PYX_ERR(0, 400, __pyx_L1_error) + if (unlikely(PyDict_SetItem(__pyx_v_f, __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":398 + /* "CAStar.pyx":404 + * if NodeID in ClosedSet: + * continue + * if NodeID not in OpenSet: # <<<<<<<<<<<<<< * OpenSet[NodeID] = 1 - * - * if NodeID not in g: #if not in g it is not yet in f also # <<<<<<<<<<<<<< * g[NodeID] = math.inf - * f[NodeID] = math.inf */ } - /* "CAStar.pyx":402 + /* "CAStar.pyx":409 * f[NodeID] = math.inf * * Node = graph.GetNode(NodeID) # <<<<<<<<<<<<<< - * gNode = g[NodeID] * tScore = g[current]+ Node.Cost + * if tScore >= g[NodeID]: */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_GetNode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 402, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_GetNode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 402, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { @@ -11785,322 +12046,286 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO } } if (!__pyx_t_2) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 402, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_t_4}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 402, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_t_4}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 402, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else #endif { - __pyx_t_18 = PyTuple_New(1+1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 402, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_2); __pyx_t_2 = NULL; + __pyx_t_17 = PyTuple_New(1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_2); __pyx_t_2 = NULL; __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_18, 0+1, __pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_17, 0+1, __pyx_t_4); __pyx_t_4 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 402, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; } } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF_SET(__pyx_v_Node, __pyx_t_3); - __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_Node, __pyx_t_1); + __pyx_t_1 = 0; - /* "CAStar.pyx":403 + /* "CAStar.pyx":410 * * Node = graph.GetNode(NodeID) - * gNode = g[NodeID] # <<<<<<<<<<<<<< - * tScore = g[current]+ Node.Cost - * if tScore >= gNode: - */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 403, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_g, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 403, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsFloat(__pyx_t_5); if (unlikely((__pyx_t_8 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 403, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_gNode = __pyx_t_8; - - /* "CAStar.pyx":404 - * Node = graph.GetNode(NodeID) - * gNode = g[NodeID] * tScore = g[current]+ Node.Cost # <<<<<<<<<<<<<< - * if tScore >= gNode: + * if tScore >= g[NodeID]: * continue */ - __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_g, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_Node, __pyx_n_s_Cost); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 404, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_g, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_18 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Node, __pyx_n_s_Cost); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_17 = PyNumber_Add(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_18); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_17); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_v_tScore = __pyx_t_11; - /* "CAStar.pyx":405 - * gNode = g[NodeID] + /* "CAStar.pyx":411 + * Node = graph.GetNode(NodeID) * tScore = g[current]+ Node.Cost - * if tScore >= gNode: # <<<<<<<<<<<<<< + * if tScore >= g[NodeID]: # <<<<<<<<<<<<<< * continue * cameFrom[NodeID] = current */ - __pyx_t_17 = ((__pyx_v_tScore >= __pyx_v_gNode) != 0); - if (__pyx_t_17) { + __pyx_t_17 = __Pyx_PyInt_From_int(__pyx_v_tScore); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_g, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyObject_RichCompare(__pyx_t_17, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_13) { - /* "CAStar.pyx":406 + /* "CAStar.pyx":412 * tScore = g[current]+ Node.Cost - * if tScore >= gNode: + * if tScore >= g[NodeID]: * continue # <<<<<<<<<<<<<< * cameFrom[NodeID] = current * g[NodeID] = tScore */ - goto __pyx_L10_continue; + goto __pyx_L8_continue; - /* "CAStar.pyx":405 - * gNode = g[NodeID] + /* "CAStar.pyx":411 + * Node = graph.GetNode(NodeID) * tScore = g[current]+ Node.Cost - * if tScore >= gNode: # <<<<<<<<<<<<<< + * if tScore >= g[NodeID]: # <<<<<<<<<<<<<< * continue * cameFrom[NodeID] = current */ } - /* "CAStar.pyx":407 - * if tScore >= gNode: + /* "CAStar.pyx":413 + * if tScore >= g[NodeID]: * continue * cameFrom[NodeID] = current # <<<<<<<<<<<<<< * g[NodeID] = tScore * f[NodeID] = g[NodeID] + EstimateDistance(NodeID,target,xCount,yCount,zCount,xSize,ySize,zSize) */ - __pyx_t_18 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 407, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyDict_SetItem(__pyx_v_cameFrom, __pyx_t_5, __pyx_t_18) < 0)) __PYX_ERR(0, 407, __pyx_L1_error) + if (unlikely(PyDict_SetItem(__pyx_v_cameFrom, __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 413, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":408 + /* "CAStar.pyx":414 * continue * cameFrom[NodeID] = current * g[NodeID] = tScore # <<<<<<<<<<<<<< * f[NodeID] = g[NodeID] + EstimateDistance(NodeID,target,xCount,yCount,zCount,xSize,ySize,zSize) * EndTime = time.time() */ - __pyx_t_18 = __Pyx_PyInt_From_int(__pyx_v_tScore); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 408, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_tScore); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 414, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyDict_SetItem(__pyx_v_g, __pyx_t_5, __pyx_t_18) < 0)) __PYX_ERR(0, 408, __pyx_L1_error) + if (unlikely(PyDict_SetItem(__pyx_v_g, __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 414, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "CAStar.pyx":409 + /* "CAStar.pyx":415 * cameFrom[NodeID] = current * g[NodeID] = tScore * f[NodeID] = g[NodeID] + EstimateDistance(NodeID,target,xCount,yCount,zCount,xSize,ySize,zSize) # <<<<<<<<<<<<<< * EndTime = time.time() - * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") + * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds."+" Total Expanded:"+str(len(cameFrom))) */ - __pyx_t_18 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_g, __pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 409, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_g, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __pyx_t_18 = PyFloat_FromDouble(__pyx_f_6CAStar_EstimateDistance(__pyx_v_NodeID, __pyx_v_target, __pyx_v_xCount, __pyx_v_yCount, __pyx_v_zCount, __pyx_v_xSize, __pyx_v_ySize, __pyx_v_zSize)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __pyx_t_3 = PyNumber_Add(__pyx_t_5, __pyx_t_18); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyFloat_FromDouble(__pyx_f_6CAStar_EstimateDistance(__pyx_v_NodeID, __pyx_v_target, __pyx_v_xCount, __pyx_v_yCount, __pyx_v_zCount, __pyx_v_xSize, __pyx_v_ySize, __pyx_v_zSize)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_17 = PyNumber_Add(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __pyx_t_18 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - if (unlikely(PyDict_SetItem(__pyx_v_f, __pyx_t_18, __pyx_t_3) < 0)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NodeID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_f, __pyx_t_1, __pyx_t_17) < 0)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - /* "CAStar.pyx":392 + /* "CAStar.pyx":401 * * FriendList = graph.GetNode(current).Friends * for NodeID in FriendList: # <<<<<<<<<<<<<< * if NodeID in ClosedSet: * continue */ - __pyx_L10_continue:; + __pyx_L8_continue:; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __pyx_L6_break:; + __pyx_L4_break:; - /* "CAStar.pyx":410 + /* "CAStar.pyx":416 * g[NodeID] = tScore * f[NodeID] = g[NodeID] + EstimateDistance(NodeID,target,xCount,yCount,zCount,xSize,ySize,zSize) * EndTime = time.time() # <<<<<<<<<<<<<< - * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") + * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds."+" Total Expanded:"+str(len(cameFrom))) * if Found: */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_18))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_18); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_18); - __Pyx_INCREF(__pyx_t_3); + __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_17)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_17); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_18, function); + __Pyx_DECREF_SET(__pyx_t_1, function); } } - if (__pyx_t_3) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_18, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_17) { + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_17); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; } else { - __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 416, __pyx_L1_error) } - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __pyx_v_EndTime = __pyx_t_1; - __pyx_t_1 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_EndTime = __pyx_t_3; + __pyx_t_3 = 0; - /* "CAStar.pyx":411 + /* "CAStar.pyx":417 * f[NodeID] = g[NodeID] + EstimateDistance(NodeID,target,xCount,yCount,zCount,xSize,ySize,zSize) * EndTime = time.time() - * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") # <<<<<<<<<<<<<< + * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds."+" Total Expanded:"+str(len(cameFrom))) # <<<<<<<<<<<<<< * if Found: * return FindPath(cameFrom,current) */ - __pyx_t_1 = PyNumber_Subtract(__pyx_v_EndTime, __pyx_v_StartTime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error) + __pyx_t_3 = PyNumber_Subtract(__pyx_v_EndTime, __pyx_v_StartTime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_int_1000); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_18 = PyNumber_Multiply(__pyx_t_1, __pyx_int_1000); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Add(__pyx_kp_s_A_Time, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error) + __pyx_t_1 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_Milliseconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_18); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_18); - __pyx_t_18 = 0; - __pyx_t_18 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_Total_Expanded); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_kp_s_A_Time, __pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error) + __pyx_t_14 = PyDict_Size(__pyx_v_cameFrom); if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 417, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_17 = PyTuple_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __pyx_t_18 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_Milliseconds); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PrintOne(0, __pyx_t_18) < 0) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + if (__Pyx_PrintOne(0, __pyx_t_17) < 0) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - /* "CAStar.pyx":412 + /* "CAStar.pyx":418 * EndTime = time.time() - * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") + * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds."+" Total Expanded:"+str(len(cameFrom))) * if Found: # <<<<<<<<<<<<<< * return FindPath(cameFrom,current) * else: */ - __pyx_t_17 = (__pyx_v_Found != 0); - if (__pyx_t_17) { + __pyx_t_13 = (__pyx_v_Found != 0); + if (__pyx_t_13) { - /* "CAStar.pyx":413 - * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") + /* "CAStar.pyx":419 + * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds."+" Total Expanded:"+str(len(cameFrom))) * if Found: * return FindPath(cameFrom,current) # <<<<<<<<<<<<<< * else: * print("A* Search FAILED. Start:",start,"Target:",target) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_FindPath); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_cameFrom, __pyx_t_3}; - __pyx_t_18 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_cameFrom, __pyx_t_3}; - __pyx_t_18 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - { - __pyx_t_4 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_INCREF(__pyx_v_cameFrom); - __Pyx_GIVEREF(__pyx_v_cameFrom); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_11, __pyx_v_cameFrom); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_11, __pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_18; - __pyx_t_18 = 0; + __pyx_t_17 = __pyx_f_6CAStar_FindPath(__pyx_v_cameFrom, __pyx_v_current); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_r = __pyx_t_17; + __pyx_t_17 = 0; goto __pyx_L0; - /* "CAStar.pyx":412 + /* "CAStar.pyx":418 * EndTime = time.time() - * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") + * print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds."+" Total Expanded:"+str(len(cameFrom))) * if Found: # <<<<<<<<<<<<<< * return FindPath(cameFrom,current) * else: */ } - /* "CAStar.pyx":415 + /* "CAStar.pyx":421 * return FindPath(cameFrom,current) * else: * print("A* Search FAILED. Start:",start,"Target:",target) # <<<<<<<<<<<<<< @@ -12108,89 +12333,40 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO * return None */ /*else*/ { - __pyx_t_18 = __Pyx_PyInt_From_int(__pyx_v_start); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) + __pyx_t_17 = __Pyx_PyInt_From_int(__pyx_v_start); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_kp_s_A_Search_FAILED_Start); __Pyx_GIVEREF(__pyx_kp_s_A_Search_FAILED_Start); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_A_Search_FAILED_Start); - __Pyx_GIVEREF(__pyx_t_18); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_A_Search_FAILED_Start); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_17); __Pyx_INCREF(__pyx_kp_s_Target); __Pyx_GIVEREF(__pyx_kp_s_Target); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_s_Target); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_s_Target); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_1); - __pyx_t_18 = 0; + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_1); + __pyx_t_17 = 0; __pyx_t_1 = 0; - if (__Pyx_PrintOne(0, __pyx_t_4) < 0) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__Pyx_PrintOne(0, __pyx_t_3) < 0) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":416 + /* "CAStar.pyx":422 * else: * print("A* Search FAILED. Start:",start,"Target:",target) * print(FindPath(cameFrom,current)) # <<<<<<<<<<<<<< * return None * */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_FindPath); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_18 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_cameFrom, __pyx_t_18}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_cameFrom, __pyx_t_18}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - } else - #endif - { - __pyx_t_5 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_cameFrom); - __Pyx_GIVEREF(__pyx_v_cameFrom); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_11, __pyx_v_cameFrom); - __Pyx_GIVEREF(__pyx_t_18); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_11, __pyx_t_18); - __pyx_t_18 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PrintOne(0, __pyx_t_4) < 0) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_3 = __pyx_f_6CAStar_FindPath(__pyx_v_cameFrom, __pyx_v_current); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_PrintOne(0, __pyx_t_3) < 0) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":417 + /* "CAStar.pyx":423 * print("A* Search FAILED. Start:",start,"Target:",target) * print(FindPath(cameFrom,current)) * return None # <<<<<<<<<<<<<< @@ -12203,7 +12379,7 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO goto __pyx_L0; } - /* "CAStar.pyx":347 + /* "CAStar.pyx":359 * * * def AStar2(graph, int start, int target): # Set all g to node_count + 1 # <<<<<<<<<<<<<< @@ -12218,7 +12394,7 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_18); + __Pyx_XDECREF(__pyx_t_17); __Pyx_AddTraceback("CAStar.AStar2", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -12239,165 +12415,98 @@ static PyObject *__pyx_pf_6CAStar_AStar2(CYTHON_UNUSED PyObject *__pyx_self, PyO return __pyx_r; } -/* "CAStar.pyx":420 +/* "CAStar.pyx":426 * * - * def FindPath(cameFrom,current): # <<<<<<<<<<<<<< + * cdef FindPath(dict cameFrom, int current): # <<<<<<<<<<<<<< + * cdef list path * path = [current] - * while current in cameFrom: */ -/* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_3FindPath(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_3FindPath = {"FindPath", (PyCFunction)__pyx_pw_6CAStar_3FindPath, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_3FindPath(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_cameFrom = 0; - PyObject *__pyx_v_current = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("FindPath (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cameFrom,&__pyx_n_s_current,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cameFrom)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_current)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("FindPath", 1, 2, 2, 1); __PYX_ERR(0, 420, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "FindPath") < 0)) __PYX_ERR(0, 420, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_cameFrom = values[0]; - __pyx_v_current = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("FindPath", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 420, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("CAStar.FindPath", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_2FindPath(__pyx_self, __pyx_v_cameFrom, __pyx_v_current); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_6CAStar_2FindPath(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cameFrom, PyObject *__pyx_v_current) { - PyObject *__pyx_v_path = NULL; +static PyObject *__pyx_f_6CAStar_FindPath(PyObject *__pyx_v_cameFrom, int __pyx_v_current) { + PyObject *__pyx_v_path = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; + PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; - Py_ssize_t __pyx_t_5; - PyObject *__pyx_t_6 = NULL; + int __pyx_t_5; + int __pyx_t_6; __Pyx_RefNannySetupContext("FindPath", 0); - __Pyx_INCREF(__pyx_v_current); - /* "CAStar.pyx":421 - * - * def FindPath(cameFrom,current): + /* "CAStar.pyx":428 + * cdef FindPath(dict cameFrom, int current): + * cdef list path * path = [current] # <<<<<<<<<<<<<< * while current in cameFrom: * current = cameFrom[current] */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 421, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_current); - __Pyx_GIVEREF(__pyx_v_current); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_current); - __pyx_v_path = ((PyObject*)__pyx_t_1); + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = 0; + __pyx_v_path = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "CAStar.pyx":422 - * def FindPath(cameFrom,current): + /* "CAStar.pyx":429 + * cdef list path * path = [current] * while current in cameFrom: # <<<<<<<<<<<<<< * current = cameFrom[current] * path.append(current) */ while (1) { - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_current, __pyx_v_cameFrom, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 422, __pyx_L1_error) - __pyx_t_3 = (__pyx_t_2 != 0); - if (!__pyx_t_3) break; + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__pyx_v_cameFrom == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 429, __pyx_L1_error) + } + __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_t_2, __pyx_v_cameFrom, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = (__pyx_t_3 != 0); + if (!__pyx_t_4) break; - /* "CAStar.pyx":423 + /* "CAStar.pyx":430 * path = [current] * while current in cameFrom: * current = cameFrom[current] # <<<<<<<<<<<<<< * path.append(current) - * print("Total expanded:"+str(len(cameFrom))) + * return path */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_cameFrom, __pyx_v_current); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) + if (unlikely(__pyx_v_cameFrom == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 430, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 430, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_cameFrom, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_current, __pyx_t_1); - __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 430, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_current = __pyx_t_5; - /* "CAStar.pyx":424 + /* "CAStar.pyx":431 * while current in cameFrom: * current = cameFrom[current] * path.append(current) # <<<<<<<<<<<<<< - * print("Total expanded:"+str(len(cameFrom))) * return path + * */ - __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_path, __pyx_v_current); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 424, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_current); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_path, __pyx_t_1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - /* "CAStar.pyx":425 + /* "CAStar.pyx":432 * current = cameFrom[current] * path.append(current) - * print("Total expanded:"+str(len(cameFrom))) # <<<<<<<<<<<<<< - * return path - * - */ - __pyx_t_5 = PyObject_Length(__pyx_v_cameFrom); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 425, __pyx_L1_error) - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_Total_expanded, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PrintOne(0, __pyx_t_6) < 0) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "CAStar.pyx":426 - * path.append(current) - * print("Total expanded:"+str(len(cameFrom))) * return path # <<<<<<<<<<<<<< * * @@ -12407,29 +12516,28 @@ static PyObject *__pyx_pf_6CAStar_2FindPath(CYTHON_UNUSED PyObject *__pyx_self, __pyx_r = __pyx_v_path; goto __pyx_L0; - /* "CAStar.pyx":420 + /* "CAStar.pyx":426 * * - * def FindPath(cameFrom,current): # <<<<<<<<<<<<<< + * cdef FindPath(dict cameFrom, int current): # <<<<<<<<<<<<<< + * cdef list path * path = [current] - * while current in cameFrom: */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("CAStar.FindPath", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_path); - __Pyx_XDECREF(__pyx_v_current); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "CAStar.pyx":429 +/* "CAStar.pyx":435 * * * def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 2000000): # <<<<<<<<<<<<<< @@ -12438,9 +12546,9 @@ static PyObject *__pyx_pf_6CAStar_2FindPath(CYTHON_UNUSED PyObject *__pyx_self, */ /* Python wrapper */ -static PyObject *__pyx_pw_6CAStar_5Benchmark(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6CAStar_5Benchmark = {"Benchmark", (PyCFunction)__pyx_pw_6CAStar_5Benchmark, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6CAStar_5Benchmark(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6CAStar_3Benchmark(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6CAStar_3Benchmark = {"Benchmark", (PyCFunction)__pyx_pw_6CAStar_3Benchmark, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6CAStar_3Benchmark(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_FLUSH = 0; CYTHON_UNUSED PyObject *__pyx_v_BlockSize = 0; PyObject *__pyx_v_MAXNODE = 0; @@ -12487,7 +12595,7 @@ static PyObject *__pyx_pw_6CAStar_5Benchmark(PyObject *__pyx_self, PyObject *__p } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Benchmark") < 0)) __PYX_ERR(0, 429, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Benchmark") < 0)) __PYX_ERR(0, 435, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -12507,24 +12615,24 @@ static PyObject *__pyx_pw_6CAStar_5Benchmark(PyObject *__pyx_self, PyObject *__p } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Benchmark", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 429, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Benchmark", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 435, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("CAStar.Benchmark", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6CAStar_4Benchmark(__pyx_self, __pyx_v_FLUSH, __pyx_v_BlockSize, __pyx_v_MAXNODE); + __pyx_r = __pyx_pf_6CAStar_2Benchmark(__pyx_self, __pyx_v_FLUSH, __pyx_v_BlockSize, __pyx_v_MAXNODE); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_FLUSH, CYTHON_UNUSED PyObject *__pyx_v_BlockSize, PyObject *__pyx_v_MAXNODE) { +static PyObject *__pyx_pf_6CAStar_2Benchmark(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_FLUSH, CYTHON_UNUSED PyObject *__pyx_v_BlockSize, PyObject *__pyx_v_MAXNODE) { PyObject *__pyx_v_random = NULL; CYTHON_UNUSED PyObject *__pyx_v_sys = NULL; PyObject *__pyx_v_graph = NULL; - PyObject *__pyx_v_Count = NULL; + long __pyx_v_Count; PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_b = NULL; PyObject *__pyx_v_Path = NULL; @@ -12540,49 +12648,49 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, Py_ssize_t __pyx_t_8; __Pyx_RefNannySetupContext("Benchmark", 0); - /* "CAStar.pyx":430 + /* "CAStar.pyx":436 * * def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 2000000): * import random,sys # <<<<<<<<<<<<<< * graph = DynoGraph(BlockSize= 500) * graph.ImportGraph() */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __pyx_L1_error) + __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_random = __pyx_t_1; __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __pyx_L1_error) + __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_sys = __pyx_t_1; __pyx_t_1 = 0; - /* "CAStar.pyx":431 + /* "CAStar.pyx":437 * def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 2000000): * import random,sys * graph = DynoGraph(BlockSize= 500) # <<<<<<<<<<<<<< * graph.ImportGraph() * */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DynoGraph); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DynoGraph); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error) + __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_BlockSize, __pyx_int_500) < 0) __PYX_ERR(0, 431, __pyx_L1_error) - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 431, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_BlockSize, __pyx_int_500) < 0) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_graph = __pyx_t_3; __pyx_t_3 = 0; - /* "CAStar.pyx":432 + /* "CAStar.pyx":438 * import random,sys * graph = DynoGraph(BlockSize= 500) * graph.ImportGraph() # <<<<<<<<<<<<<< * * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_ImportGraph); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 432, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_ImportGraph); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 438, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { @@ -12595,26 +12703,25 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, } } if (__pyx_t_1) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 432, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 438, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 432, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 438, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":435 + /* "CAStar.pyx":441 * * * Count = 1 # <<<<<<<<<<<<<< * while True: * if Count % FLUSH == 0: */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_Count = __pyx_int_1; + __pyx_v_Count = 1; - /* "CAStar.pyx":436 + /* "CAStar.pyx":442 * * Count = 1 * while True: # <<<<<<<<<<<<<< @@ -12623,35 +12730,38 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, */ while (1) { - /* "CAStar.pyx":437 + /* "CAStar.pyx":443 * Count = 1 * while True: * if Count % FLUSH == 0: # <<<<<<<<<<<<<< * graph.Nodes = {} * */ - __pyx_t_3 = PyNumber_Remainder(__pyx_v_Count, __pyx_v_FLUSH); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v_Count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_3, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_2 = PyNumber_Remainder(__pyx_t_3, __pyx_v_FLUSH); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { - /* "CAStar.pyx":438 + /* "CAStar.pyx":444 * while True: * if Count % FLUSH == 0: * graph.Nodes = {} # <<<<<<<<<<<<<< * * */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_graph, __pyx_n_s_Nodes, __pyx_t_2) < 0) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_graph, __pyx_n_s_Nodes, __pyx_t_3) < 0) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "CAStar.pyx":437 + /* "CAStar.pyx":443 * Count = 1 * while True: * if Count % FLUSH == 0: # <<<<<<<<<<<<<< @@ -12660,45 +12770,45 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, */ } - /* "CAStar.pyx":441 + /* "CAStar.pyx":447 * * * a,b = random.randint(1,MAXNODE),random.randint(1,MAXNODE) # <<<<<<<<<<<<<< * print("A:",a," B:",b," Delta:",abs(a-b)) * Path = AStar2(graph,a,b) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_randint); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_randint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = NULL; __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __Pyx_DECREF_SET(__pyx_t_2, function); __pyx_t_5 = 1; } } #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { + if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_int_1, __pyx_v_MAXNODE}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_t_3); } else #endif #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_int_1, __pyx_v_MAXNODE}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_t_3); } else #endif { - __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__pyx_t_1) { __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL; @@ -12709,12 +12819,12 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_INCREF(__pyx_v_MAXNODE); __Pyx_GIVEREF(__pyx_v_MAXNODE); PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_MAXNODE); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_randint); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_randint); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = NULL; __pyx_t_5 = 0; @@ -12731,21 +12841,21 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_int_1, __pyx_v_MAXNODE}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_2); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_int_1, __pyx_v_MAXNODE}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_2); } else #endif { - __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__pyx_t_1) { __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __pyx_t_1 = NULL; @@ -12756,90 +12866,90 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_INCREF(__pyx_v_MAXNODE); __Pyx_GIVEREF(__pyx_v_MAXNODE); PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_5, __pyx_v_MAXNODE); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_2); - __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_b, __pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_b, __pyx_t_2); + __pyx_t_2 = 0; - /* "CAStar.pyx":442 + /* "CAStar.pyx":448 * * a,b = random.randint(1,MAXNODE),random.randint(1,MAXNODE) * print("A:",a," B:",b," Delta:",abs(a-b)) # <<<<<<<<<<<<<< * Path = AStar2(graph,a,b) * print("Path Length",len(Path)," Graph Node length",len(graph.Nodes)) */ - __pyx_t_3 = PyNumber_Subtract(__pyx_v_a, __pyx_v_b); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Absolute(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L1_error) + __pyx_t_2 = PyNumber_Subtract(__pyx_v_a, __pyx_v_b); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 448, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L1_error) + __pyx_t_3 = PyNumber_Absolute(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 448, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_kp_s_A); __Pyx_GIVEREF(__pyx_kp_s_A); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_A); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_A); __Pyx_INCREF(__pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_a); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_a); __Pyx_INCREF(__pyx_kp_s_B); __Pyx_GIVEREF(__pyx_kp_s_B); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_s_B); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_s_B); __Pyx_INCREF(__pyx_v_b); __Pyx_GIVEREF(__pyx_v_b); - PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_b); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_b); __Pyx_INCREF(__pyx_kp_s_Delta); __Pyx_GIVEREF(__pyx_kp_s_Delta); - PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_s_Delta); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_2); - __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_s_Delta); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_t_3); + __pyx_t_3 = 0; + if (__Pyx_PrintOne(0, __pyx_t_2) < 0) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":443 + /* "CAStar.pyx":449 * a,b = random.randint(1,MAXNODE),random.randint(1,MAXNODE) * print("A:",a," B:",b," Delta:",abs(a-b)) * Path = AStar2(graph,a,b) # <<<<<<<<<<<<<< * print("Path Length",len(Path)," Graph Node length",len(graph.Nodes)) * */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_AStar2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_AStar2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = NULL; __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_5 = 1; } } #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_2)) { + if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_graph, __pyx_v_a, __pyx_v_b}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 449, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_2); } else #endif #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_graph, __pyx_v_a, __pyx_v_b}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 449, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_2); } else #endif { - __pyx_t_7 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 443, __pyx_L1_error) + __pyx_t_7 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__pyx_t_6) { __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL; @@ -12853,58 +12963,58 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_INCREF(__pyx_v_b); __Pyx_GIVEREF(__pyx_v_b); PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_5, __pyx_v_b); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_Path, __pyx_t_3); - __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_Path, __pyx_t_2); + __pyx_t_2 = 0; - /* "CAStar.pyx":444 + /* "CAStar.pyx":450 * print("A:",a," B:",b," Delta:",abs(a-b)) * Path = AStar2(graph,a,b) * print("Path Length",len(Path)," Graph Node length",len(graph.Nodes)) # <<<<<<<<<<<<<< * * print("") */ - __pyx_t_8 = PyObject_Length(__pyx_v_Path); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 444, __pyx_L1_error) - __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 444, __pyx_L1_error) + __pyx_t_8 = PyObject_Length(__pyx_v_Path); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 450, __pyx_L1_error) + __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 450, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 444, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_graph, __pyx_n_s_Nodes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 450, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_kp_s_Path_Length); __Pyx_GIVEREF(__pyx_kp_s_Path_Length); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_s_Path_Length); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2); __Pyx_INCREF(__pyx_kp_s_Graph_Node_length); __Pyx_GIVEREF(__pyx_kp_s_Graph_Node_length); PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_s_Graph_Node_length); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_2); - __pyx_t_3 = 0; + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_3); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_7) < 0) __PYX_ERR(0, 444, __pyx_L1_error) + __pyx_t_3 = 0; + if (__Pyx_PrintOne(0, __pyx_t_7) < 0) __PYX_ERR(0, 450, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "CAStar.pyx":446 + /* "CAStar.pyx":452 * print("Path Length",len(Path)," Graph Node length",len(graph.Nodes)) * * print("") # <<<<<<<<<<<<<< * * */ - if (__Pyx_PrintOne(0, __pyx_kp_s__5) < 0) __PYX_ERR(0, 446, __pyx_L1_error) + if (__Pyx_PrintOne(0, __pyx_kp_s__5) < 0) __PYX_ERR(0, 452, __pyx_L1_error) } - /* "CAStar.pyx":429 + /* "CAStar.pyx":435 * * * def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 2000000): # <<<<<<<<<<<<<< @@ -12927,7 +13037,6 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_XDECREF(__pyx_v_random); __Pyx_XDECREF(__pyx_v_sys); __Pyx_XDECREF(__pyx_v_graph); - __Pyx_XDECREF(__pyx_v_Count); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_b); __Pyx_XDECREF(__pyx_v_Path); @@ -12936,195 +13045,411 @@ static PyObject *__pyx_pf_6CAStar_4Benchmark(CYTHON_UNUSED PyObject *__pyx_self, return __pyx_r; } -/* "CAStar.pyx":452 - * - * - * cdef float GetxCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< - * cdef float xCoord - * xCoord = ((ID-1)//(zCount*yCount)) * xSize - */ +/* "CAStar.pyx":458 + * + * + * cdef float GetxCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< + * cdef float xCoord + * xCoord = ((ID-1)//(zCount*yCount)) * xSize + */ + +static float __pyx_f_6CAStar_GetxCoord(int __pyx_v_ID, CYTHON_UNUSED int __pyx_v_xCount, int __pyx_v_yCount, int __pyx_v_zCount, float __pyx_v_xSize, CYTHON_UNUSED float __pyx_v_ySize, CYTHON_UNUSED float __pyx_v_zSize) { + float __pyx_v_xCoord; + float __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("GetxCoord", 0); + + /* "CAStar.pyx":460 + * cdef float GetxCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): + * cdef float xCoord + * xCoord = ((ID-1)//(zCount*yCount)) * xSize # <<<<<<<<<<<<<< + * return xCoord + * + */ + __pyx_v_xCoord = (((__pyx_v_ID - 1) / (__pyx_v_zCount * __pyx_v_yCount)) * __pyx_v_xSize); + + /* "CAStar.pyx":461 + * cdef float xCoord + * xCoord = ((ID-1)//(zCount*yCount)) * xSize + * return xCoord # <<<<<<<<<<<<<< + * + * cdef float GetyCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): + */ + __pyx_r = __pyx_v_xCoord; + goto __pyx_L0; + + /* "CAStar.pyx":458 + * + * + * cdef float GetxCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< + * cdef float xCoord + * xCoord = ((ID-1)//(zCount*yCount)) * xSize + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "CAStar.pyx":463 + * return xCoord + * + * cdef float GetyCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< + * cdef float yCoord + * yCoord = (((ID-1)%(zCount*yCount))//zCount)*ySize + */ + +static float __pyx_f_6CAStar_GetyCoord(int __pyx_v_ID, CYTHON_UNUSED int __pyx_v_xCount, int __pyx_v_yCount, int __pyx_v_zCount, CYTHON_UNUSED float __pyx_v_xSize, float __pyx_v_ySize, CYTHON_UNUSED float __pyx_v_zSize) { + float __pyx_v_yCoord; + float __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("GetyCoord", 0); + + /* "CAStar.pyx":465 + * cdef float GetyCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): + * cdef float yCoord + * yCoord = (((ID-1)%(zCount*yCount))//zCount)*ySize # <<<<<<<<<<<<<< + * return yCoord + * + */ + __pyx_v_yCoord = ((((__pyx_v_ID - 1) % (__pyx_v_zCount * __pyx_v_yCount)) / __pyx_v_zCount) * __pyx_v_ySize); + + /* "CAStar.pyx":466 + * cdef float yCoord + * yCoord = (((ID-1)%(zCount*yCount))//zCount)*ySize + * return yCoord # <<<<<<<<<<<<<< + * + * cdef float GetzCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): + */ + __pyx_r = __pyx_v_yCoord; + goto __pyx_L0; + + /* "CAStar.pyx":463 + * return xCoord + * + * cdef float GetyCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< + * cdef float yCoord + * yCoord = (((ID-1)%(zCount*yCount))//zCount)*ySize + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "CAStar.pyx":468 + * return yCoord + * + * cdef float GetzCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< + * cdef float zCoord + * zCoord = ((ID-1)%zCount)*zSize + */ + +static float __pyx_f_6CAStar_GetzCoord(int __pyx_v_ID, CYTHON_UNUSED int __pyx_v_xCount, CYTHON_UNUSED int __pyx_v_yCount, int __pyx_v_zCount, CYTHON_UNUSED float __pyx_v_xSize, CYTHON_UNUSED float __pyx_v_ySize, float __pyx_v_zSize) { + float __pyx_v_zCoord; + float __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("GetzCoord", 0); + + /* "CAStar.pyx":470 + * cdef float GetzCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): + * cdef float zCoord + * zCoord = ((ID-1)%zCount)*zSize # <<<<<<<<<<<<<< + * return zCoord + * + */ + __pyx_v_zCoord = (((__pyx_v_ID - 1) % __pyx_v_zCount) * __pyx_v_zSize); + + /* "CAStar.pyx":471 + * cdef float zCoord + * zCoord = ((ID-1)%zCount)*zSize + * return zCoord # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_zCoord; + goto __pyx_L0; + + /* "CAStar.pyx":468 + * return yCoord + * + * cdef float GetzCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< + * cdef float zCoord + * zCoord = ((ID-1)%zCount)*zSize + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +static int __pyx_import_star_set(PyObject *o, PyObject* py_name, char *name) { + static const char* internal_type_names[] = { + "__pyx_ctuple_Py_ssize_t", + "__pyx_ctuple_Py_ssize_t_struct", + "__pyx_ctuple_int", + "__pyx_ctuple_int_struct", + "__pyx_ctuple_long", + "__pyx_ctuple_long_struct", + 0 + }; + const char** type_name = internal_type_names; + while (*type_name) { + if (__Pyx_StrEq(name, *type_name)) { + PyErr_Format(PyExc_TypeError, "Cannot overwrite C type %s", name); + goto bad; + } + type_name++; + } + if (0); + else { + if (PyObject_SetAttr(__pyx_m, py_name, o) < 0) goto bad; + } + return 0; + bad: + return -1; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -static float __pyx_f_6CAStar_GetxCoord(int __pyx_v_ID, CYTHON_UNUSED int __pyx_v_xCount, int __pyx_v_yCount, int __pyx_v_zCount, float __pyx_v_xSize, CYTHON_UNUSED float __pyx_v_ySize, CYTHON_UNUSED float __pyx_v_zSize) { - float __pyx_v_xCoord; - float __pyx_r; - __Pyx_RefNannyDeclarations - long __pyx_t_1; - int __pyx_t_2; - __Pyx_RefNannySetupContext("GetxCoord", 0); - /* "CAStar.pyx":454 - * cdef float GetxCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): - * cdef float xCoord - * xCoord = ((ID-1)//(zCount*yCount)) * xSize # <<<<<<<<<<<<<< - * return xCoord - * - */ - __pyx_t_1 = (__pyx_v_ID - 1); - __pyx_t_2 = (__pyx_v_zCount * __pyx_v_yCount); - if (unlikely(__pyx_t_2 == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(0, 454, __pyx_L1_error) - } - else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_t_2 == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_1))) { - PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); - __PYX_ERR(0, 454, __pyx_L1_error) - } - __pyx_v_xCoord = (__Pyx_div_long(__pyx_t_1, __pyx_t_2) * __pyx_v_xSize); - /* "CAStar.pyx":455 - * cdef float xCoord - * xCoord = ((ID-1)//(zCount*yCount)) * xSize - * return xCoord # <<<<<<<<<<<<<< - * - * cdef float GetyCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): - */ - __pyx_r = __pyx_v_xCoord; - goto __pyx_L0; - /* "CAStar.pyx":452 - * - * - * cdef float GetxCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< - * cdef float xCoord - * xCoord = ((ID-1)//(zCount*yCount)) * xSize - */ - /* function exit code */ - __pyx_L1_error:; - __Pyx_WriteUnraisable("CAStar.GetxCoord", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} -/* "CAStar.pyx":457 - * return xCoord - * - * cdef float GetyCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< - * cdef float yCoord - * yCoord = (((ID-1)%(zCount*yCount))//zCount)*ySize - */ -static float __pyx_f_6CAStar_GetyCoord(int __pyx_v_ID, CYTHON_UNUSED int __pyx_v_xCount, int __pyx_v_yCount, int __pyx_v_zCount, CYTHON_UNUSED float __pyx_v_xSize, float __pyx_v_ySize, CYTHON_UNUSED float __pyx_v_zSize) { - float __pyx_v_yCoord; - float __pyx_r; - __Pyx_RefNannyDeclarations - long __pyx_t_1; - int __pyx_t_2; - long __pyx_t_3; - __Pyx_RefNannySetupContext("GetyCoord", 0); - /* "CAStar.pyx":459 - * cdef float GetyCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): - * cdef float yCoord - * yCoord = (((ID-1)%(zCount*yCount))//zCount)*ySize # <<<<<<<<<<<<<< - * return yCoord - * - */ - __pyx_t_1 = (__pyx_v_ID - 1); - __pyx_t_2 = (__pyx_v_zCount * __pyx_v_yCount); - if (unlikely(__pyx_t_2 == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(0, 459, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_mod_long(__pyx_t_1, __pyx_t_2); - if (unlikely(__pyx_v_zCount == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(0, 459, __pyx_L1_error) - } - else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_zCount == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_3))) { - PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); - __PYX_ERR(0, 459, __pyx_L1_error) - } - __pyx_v_yCoord = (__Pyx_div_long(__pyx_t_3, __pyx_v_zCount) * __pyx_v_ySize); - /* "CAStar.pyx":460 - * cdef float yCoord - * yCoord = (((ID-1)%(zCount*yCount))//zCount)*ySize - * return yCoord # <<<<<<<<<<<<<< - * - * cdef float GetzCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): - */ - __pyx_r = __pyx_v_yCoord; - goto __pyx_L0; - /* "CAStar.pyx":457 - * return xCoord - * - * cdef float GetyCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< - * cdef float yCoord - * yCoord = (((ID-1)%(zCount*yCount))//zCount)*ySize - */ - /* function exit code */ - __pyx_L1_error:; - __Pyx_WriteUnraisable("CAStar.GetyCoord", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; + + + + + + +static int +__Pyx_import_all_from(PyObject *locals, PyObject *v) +{ + PyObject *all = PyObject_GetAttrString(v, "__all__"); + PyObject *dict, *name, *value; + int skip_leading_underscores = 0; + int pos, err; + + if (all == NULL) { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) + return -1; + PyErr_Clear(); + dict = PyObject_GetAttrString(v, "__dict__"); + if (dict == NULL) { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) + return -1; + PyErr_SetString(PyExc_ImportError, + "from-import-* object has no __dict__ and no __all__"); + return -1; + } +#if PY_MAJOR_VERSION < 3 + all = PyObject_CallMethod(dict, (char *)"keys", NULL); +#else + all = PyMapping_Keys(dict); +#endif + Py_DECREF(dict); + if (all == NULL) + return -1; + skip_leading_underscores = 1; + } + + for (pos = 0, err = 0; ; pos++) { + name = PySequence_GetItem(all, pos); + if (name == NULL) { + if (!PyErr_ExceptionMatches(PyExc_IndexError)) + err = -1; + else + PyErr_Clear(); + break; + } + if (skip_leading_underscores && +#if PY_MAJOR_VERSION < 3 + PyString_Check(name) && + PyString_AS_STRING(name)[0] == '_') +#else + PyUnicode_Check(name) && + PyUnicode_AS_UNICODE(name)[0] == '_') +#endif + { + Py_DECREF(name); + continue; + } + value = PyObject_GetAttr(v, name); + if (value == NULL) + err = -1; + else if (PyDict_CheckExact(locals)) + err = PyDict_SetItem(locals, name, value); + else + err = PyObject_SetItem(locals, name, value); + Py_DECREF(name); + Py_XDECREF(value); + if (err != 0) + break; + } + Py_DECREF(all); + return err; } -/* "CAStar.pyx":462 - * return yCoord - * - * cdef float GetzCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< - * cdef float zCoord - * zCoord = ((ID-1)%zCount)*zSize - */ -static float __pyx_f_6CAStar_GetzCoord(int __pyx_v_ID, CYTHON_UNUSED int __pyx_v_xCount, CYTHON_UNUSED int __pyx_v_yCount, int __pyx_v_zCount, CYTHON_UNUSED float __pyx_v_xSize, CYTHON_UNUSED float __pyx_v_ySize, float __pyx_v_zSize) { - float __pyx_v_zCoord; - float __pyx_r; - __Pyx_RefNannyDeclarations - long __pyx_t_1; - __Pyx_RefNannySetupContext("GetzCoord", 0); +static int __pyx_import_star(PyObject* m) { - /* "CAStar.pyx":464 - * cdef float GetzCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): - * cdef float zCoord - * zCoord = ((ID-1)%zCount)*zSize # <<<<<<<<<<<<<< - * return zCoord - * - */ - __pyx_t_1 = (__pyx_v_ID - 1); - if (unlikely(__pyx_v_zCount == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(0, 464, __pyx_L1_error) - } - __pyx_v_zCoord = (__Pyx_mod_long(__pyx_t_1, __pyx_v_zCount) * __pyx_v_zSize); + int i; + int ret = -1; + char* s; + PyObject *locals = 0; + PyObject *list = 0; +#if PY_MAJOR_VERSION >= 3 + PyObject *utf8_name = 0; +#endif + PyObject *name; + PyObject *item; - /* "CAStar.pyx":465 - * cdef float zCoord - * zCoord = ((ID-1)%zCount)*zSize - * return zCoord # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_v_zCoord; - goto __pyx_L0; + locals = PyDict_New(); if (!locals) goto bad; + if (__Pyx_import_all_from(locals, m) < 0) goto bad; + list = PyDict_Items(locals); if (!list) goto bad; - /* "CAStar.pyx":462 - * return yCoord - * - * cdef float GetzCoord(int ID, int xCount, int yCount, int zCount, float xSize, float ySize,float zSize): # <<<<<<<<<<<<<< - * cdef float zCoord - * zCoord = ((ID-1)%zCount)*zSize - */ + for(i=0; i= 3 + utf8_name = PyUnicode_AsUTF8String(name); + if (!utf8_name) goto bad; + s = PyBytes_AS_STRING(utf8_name); + if (__pyx_import_star_set(item, name, s) < 0) goto bad; + Py_DECREF(utf8_name); utf8_name = 0; +#else + s = PyString_AsString(name); + if (!s) goto bad; + if (__pyx_import_star_set(item, name, s) < 0) goto bad; +#endif + } + ret = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_WriteUnraisable("CAStar.GetzCoord", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; +bad: + Py_XDECREF(locals); + Py_XDECREF(list); +#if PY_MAJOR_VERSION >= 3 + Py_XDECREF(utf8_name); +#endif + return ret; } -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; + #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef __pyx_moduledef = { @@ -13146,6 +13471,7 @@ static struct PyModuleDef __pyx_moduledef = { static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 0}, + {&__pyx_n_s_AATC_Coordinate, __pyx_k_AATC_Coordinate, sizeof(__pyx_k_AATC_Coordinate), 0, 0, 1, 1}, {&__pyx_n_s_AStar2, __pyx_k_AStar2, sizeof(__pyx_k_AStar2), 0, 0, 1, 1}, {&__pyx_kp_s_A_Search_FAILED_Start, __pyx_k_A_Search_FAILED_Start, sizeof(__pyx_k_A_Search_FAILED_Start), 0, 0, 1, 0}, {&__pyx_kp_s_A_Time, __pyx_k_A_Time, sizeof(__pyx_k_A_Time), 0, 0, 1, 0}, @@ -13167,8 +13493,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_CalculateNeighbours, __pyx_k_CalculateNeighbours, sizeof(__pyx_k_CalculateNeighbours), 0, 0, 1, 1}, {&__pyx_kp_s_Cleaning_edges, __pyx_k_Cleaning_edges, sizeof(__pyx_k_Cleaning_edges), 0, 0, 1, 0}, {&__pyx_n_s_ClosedSet, __pyx_k_ClosedSet, sizeof(__pyx_k_ClosedSet), 0, 0, 1, 1}, - {&__pyx_n_s_Coordinate, __pyx_k_Coordinate, sizeof(__pyx_k_Coordinate), 0, 0, 1, 1}, - {&__pyx_n_s_Coordinate___init, __pyx_k_Coordinate___init, sizeof(__pyx_k_Coordinate___init), 0, 0, 1, 1}, {&__pyx_n_s_Coords, __pyx_k_Coords, sizeof(__pyx_k_Coords), 0, 0, 1, 1}, {&__pyx_n_s_Cost, __pyx_k_Cost, sizeof(__pyx_k_Cost), 0, 0, 1, 1}, {&__pyx_n_s_Count, __pyx_k_Count, sizeof(__pyx_k_Count), 0, 0, 1, 1}, @@ -13184,6 +13508,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_DynoGraph_Find_NodeID, __pyx_k_DynoGraph_Find_NodeID, sizeof(__pyx_k_DynoGraph_Find_NodeID), 0, 0, 1, 1}, {&__pyx_n_s_DynoGraph_GetNode, __pyx_k_DynoGraph_GetNode, sizeof(__pyx_k_DynoGraph_GetNode), 0, 0, 1, 1}, {&__pyx_n_s_DynoGraph_Get_Node_Cache, __pyx_k_DynoGraph_Get_Node_Cache, sizeof(__pyx_k_DynoGraph_Get_Node_Cache), 0, 0, 1, 1}, + {&__pyx_n_s_DynoGraph_Get_Size, __pyx_k_DynoGraph_Get_Size, sizeof(__pyx_k_DynoGraph_Get_Size), 0, 0, 1, 1}, {&__pyx_n_s_DynoGraph_Hash, __pyx_k_DynoGraph_Hash, sizeof(__pyx_k_DynoGraph_Hash), 0, 0, 1, 1}, {&__pyx_n_s_DynoGraph_ImportGraph, __pyx_k_DynoGraph_ImportGraph, sizeof(__pyx_k_DynoGraph_ImportGraph), 0, 0, 1, 1}, {&__pyx_n_s_DynoGraph_MapHash, __pyx_k_DynoGraph_MapHash, sizeof(__pyx_k_DynoGraph_MapHash), 0, 0, 1, 1}, @@ -13200,7 +13525,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_Error_occured_while_saving_graph, __pyx_k_Error_occured_while_saving_graph, sizeof(__pyx_k_Error_occured_while_saving_graph), 0, 0, 1, 0}, {&__pyx_n_s_EvictNode, __pyx_k_EvictNode, sizeof(__pyx_k_EvictNode), 0, 0, 1, 1}, {&__pyx_n_s_FLUSH, __pyx_k_FLUSH, sizeof(__pyx_k_FLUSH), 0, 0, 1, 1}, - {&__pyx_n_s_FindPath, __pyx_k_FindPath, sizeof(__pyx_k_FindPath), 0, 0, 1, 1}, {&__pyx_n_s_Find_NodeID, __pyx_k_Find_NodeID, sizeof(__pyx_k_Find_NodeID), 0, 0, 1, 1}, {&__pyx_n_s_FolderName, __pyx_k_FolderName, sizeof(__pyx_k_FolderName), 0, 0, 1, 1}, {&__pyx_n_s_Found, __pyx_k_Found, sizeof(__pyx_k_Found), 0, 0, 1, 1}, @@ -13209,7 +13533,13 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_GetNode, __pyx_k_GetNode, sizeof(__pyx_k_GetNode), 0, 0, 1, 1}, {&__pyx_n_s_Get_Coords, __pyx_k_Get_Coords, sizeof(__pyx_k_Get_Coords), 0, 0, 1, 1}, {&__pyx_n_s_Get_Cost, __pyx_k_Get_Cost, sizeof(__pyx_k_Get_Cost), 0, 0, 1, 1}, + {&__pyx_n_s_Get_Friends, __pyx_k_Get_Friends, sizeof(__pyx_k_Get_Friends), 0, 0, 1, 1}, + {&__pyx_n_s_Get_NodeID, __pyx_k_Get_NodeID, sizeof(__pyx_k_Get_NodeID), 0, 0, 1, 1}, {&__pyx_n_s_Get_Node_Cache, __pyx_k_Get_Node_Cache, sizeof(__pyx_k_Get_Node_Cache), 0, 0, 1, 1}, + {&__pyx_n_s_Get_Size, __pyx_k_Get_Size, sizeof(__pyx_k_Get_Size), 0, 0, 1, 1}, + {&__pyx_n_s_Get_X, __pyx_k_Get_X, sizeof(__pyx_k_Get_X), 0, 0, 1, 1}, + {&__pyx_n_s_Get_Y, __pyx_k_Get_Y, sizeof(__pyx_k_Get_Y), 0, 0, 1, 1}, + {&__pyx_n_s_Get_Z, __pyx_k_Get_Z, sizeof(__pyx_k_Get_Z), 0, 0, 1, 1}, {&__pyx_n_s_Graph, __pyx_k_Graph, sizeof(__pyx_k_Graph), 0, 0, 1, 1}, {&__pyx_n_s_GraphBlock, __pyx_k_GraphBlock, sizeof(__pyx_k_GraphBlock), 0, 0, 1, 1}, {&__pyx_n_s_GraphFileName, __pyx_k_GraphFileName, sizeof(__pyx_k_GraphFileName), 0, 0, 1, 1}, @@ -13226,12 +13556,14 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_Key, __pyx_k_Key, sizeof(__pyx_k_Key), 0, 0, 1, 1}, {&__pyx_n_s_MAXNODE, __pyx_k_MAXNODE, sizeof(__pyx_k_MAXNODE), 0, 0, 1, 1}, {&__pyx_n_s_MapHash, __pyx_k_MapHash, sizeof(__pyx_k_MapHash), 0, 0, 1, 1}, + {&__pyx_n_s_MaxValue, __pyx_k_MaxValue, sizeof(__pyx_k_MaxValue), 0, 0, 1, 1}, {&__pyx_kp_s_Milliseconds, __pyx_k_Milliseconds, sizeof(__pyx_k_Milliseconds), 0, 0, 1, 0}, {&__pyx_n_s_N, __pyx_k_N, sizeof(__pyx_k_N), 0, 0, 1, 1}, {&__pyx_n_s_NC, __pyx_k_NC, sizeof(__pyx_k_NC), 0, 0, 1, 1}, {&__pyx_n_s_NCBlockID, __pyx_k_NCBlockID, sizeof(__pyx_k_NCBlockID), 0, 0, 1, 1}, {&__pyx_n_s_Node, __pyx_k_Node, sizeof(__pyx_k_Node), 0, 0, 1, 1}, {&__pyx_n_s_NodeID, __pyx_k_NodeID, sizeof(__pyx_k_NodeID), 0, 0, 1, 1}, + {&__pyx_n_s_NodeIDList, __pyx_k_NodeIDList, sizeof(__pyx_k_NodeIDList), 0, 0, 1, 1}, {&__pyx_kp_s_NodeID_requested_is_not_in_the_B, __pyx_k_NodeID_requested_is_not_in_the_B, sizeof(__pyx_k_NodeID_requested_is_not_in_the_B), 0, 0, 1, 0}, {&__pyx_n_s_Node_Cache, __pyx_k_Node_Cache, sizeof(__pyx_k_Node_Cache), 0, 0, 1, 1}, {&__pyx_n_s_Node_Cache_BlockSize, __pyx_k_Node_Cache_BlockSize, sizeof(__pyx_k_Node_Cache_BlockSize), 0, 0, 1, 1}, @@ -13239,6 +13571,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_Node_Cache_Key_requested_is_not, __pyx_k_Node_Cache_Key_requested_is_not, sizeof(__pyx_k_Node_Cache_Key_requested_is_not), 0, 0, 1, 0}, {&__pyx_n_s_Node_Get_Coords, __pyx_k_Node_Get_Coords, sizeof(__pyx_k_Node_Get_Coords), 0, 0, 1, 1}, {&__pyx_n_s_Node_Get_Cost, __pyx_k_Node_Get_Cost, sizeof(__pyx_k_Node_Get_Cost), 0, 0, 1, 1}, + {&__pyx_n_s_Node_Get_Friends, __pyx_k_Node_Get_Friends, sizeof(__pyx_k_Node_Get_Friends), 0, 0, 1, 1}, + {&__pyx_n_s_Node_Get_NodeID, __pyx_k_Node_Get_NodeID, sizeof(__pyx_k_Node_Get_NodeID), 0, 0, 1, 1}, {&__pyx_n_s_Node___init, __pyx_k_Node___init, sizeof(__pyx_k_Node___init), 0, 0, 1, 1}, {&__pyx_n_s_Node_add_friend, __pyx_k_Node_add_friend, sizeof(__pyx_k_Node_add_friend), 0, 0, 1, 1}, {&__pyx_n_s_Nodes, __pyx_k_Nodes, sizeof(__pyx_k_Nodes), 0, 0, 1, 1}, @@ -13259,14 +13593,16 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_Sets, __pyx_k_Sets, sizeof(__pyx_k_Sets), 0, 0, 1, 1}, {&__pyx_n_s_Size, __pyx_k_Size, sizeof(__pyx_k_Size), 0, 0, 1, 1}, {&__pyx_n_s_StartTime, __pyx_k_StartTime, sizeof(__pyx_k_StartTime), 0, 0, 1, 1}, + {&__pyx_n_s_StartValue, __pyx_k_StartValue, sizeof(__pyx_k_StartValue), 0, 0, 1, 1}, {&__pyx_kp_s_Target, __pyx_k_Target, sizeof(__pyx_k_Target), 0, 0, 1, 0}, {&__pyx_n_s_TargetNode, __pyx_k_TargetNode, sizeof(__pyx_k_TargetNode), 0, 0, 1, 1}, - {&__pyx_kp_s_Total_expanded, __pyx_k_Total_expanded, sizeof(__pyx_k_Total_expanded), 0, 0, 1, 0}, + {&__pyx_kp_s_Total_Expanded, __pyx_k_Total_Expanded, sizeof(__pyx_k_Total_Expanded), 0, 0, 1, 0}, {&__pyx_n_s_Value, __pyx_k_Value, sizeof(__pyx_k_Value), 0, 0, 1, 1}, {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, {&__pyx_kp_s_You_do_not_have_math_inf_object, __pyx_k_You_do_not_have_math_inf_object, sizeof(__pyx_k_You_do_not_have_math_inf_object), 0, 0, 1, 0}, {&__pyx_kp_s__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 1, 0}, {&__pyx_n_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 1}, + {&__pyx_n_s__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 0, 1, 1}, {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1}, {&__pyx_n_s_add_friend, __pyx_k_add_friend, sizeof(__pyx_k_add_friend), 0, 0, 1, 1}, {&__pyx_n_s_add_node, __pyx_k_add_node, sizeof(__pyx_k_add_node), 0, 0, 1, 1}, @@ -13319,9 +13655,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_my, __pyx_k_my, sizeof(__pyx_k_my), 0, 0, 1, 1}, {&__pyx_n_s_mz, __pyx_k_mz, sizeof(__pyx_k_mz), 0, 0, 1, 1}, {&__pyx_n_s_node, __pyx_k_node, sizeof(__pyx_k_node), 0, 0, 1, 1}, - {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, {&__pyx_n_s_num, __pyx_k_num, sizeof(__pyx_k_num), 0, 0, 1, 1}, - {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, {&__pyx_n_s_open, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1}, {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1}, @@ -13372,10 +13706,10 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 189, __pyx_L1_error) - __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 212, __pyx_L1_error) - __pyx_builtin_max = __Pyx_GetBuiltinName(__pyx_n_s_max); if (!__pyx_builtin_max) __PYX_ERR(0, 290, __pyx_L1_error) - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 185, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 208, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 219, __pyx_L1_error) + __pyx_builtin_max = __Pyx_GetBuiltinName(__pyx_n_s_max); if (!__pyx_builtin_max) __PYX_ERR(0, 293, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; @@ -13385,398 +13719,410 @@ static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - /* "CAStar.pyx":164 + /* "CAStar.pyx":160 * * def Node_Cache_Hash(self,Key): * return int(int(hashlib.md5(str(Key).encode('utf8')).hexdigest()[:8],16)//self.Node_Cache_BlockSize) #Generates integer hash of key then int div by BlockSize # <<<<<<<<<<<<<< * * ################################## */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_n_s_utf8); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_tuple_ = PyTuple_Pack(1, __pyx_n_s_utf8); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_); - __pyx_slice__2 = PySlice_New(Py_None, __pyx_int_8, Py_None); if (unlikely(!__pyx_slice__2)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_slice__2 = PySlice_New(Py_None, __pyx_int_8, Py_None); if (unlikely(!__pyx_slice__2)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__2); __Pyx_GIVEREF(__pyx_slice__2); - /* "CAStar.pyx":212 + /* "CAStar.pyx":208 * else: * #Raises error if cannot get node * raise ValueError("Node_Cache Key requested is not in the NCBlockID checked. Check BlockSize or regenerate blockfiles") # <<<<<<<<<<<<<< * * */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Node_Cache_Key_requested_is_not); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 212, __pyx_L1_error) + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Node_Cache_Key_requested_is_not); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 208, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3); - /* "CAStar.pyx":286 + /* "CAStar.pyx":289 * else: * #Raises error if cannot get node * raise ValueError("NodeID requested is not in the BlockID checked. Check BlockSize or regenerate blockfiles") # <<<<<<<<<<<<<< * * def SaveNodes(self): */ - __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_NodeID_requested_is_not_in_the_B); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 286, __pyx_L1_error) + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_NodeID_requested_is_not_in_the_B); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 289, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); __Pyx_GIVEREF(__pyx_tuple__4); - /* "CAStar.pyx":13 - * math.inf = 10**34 - * class Coordinate: - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): # <<<<<<<<<<<<<< - * self.x = x - * self.y = y - */ - __pyx_tuple__7 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_xSize, __pyx_n_s_ySize, __pyx_n_s_zSize); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(7, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_init, 13, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) __PYX_ERR(0, 13, __pyx_L1_error) - __pyx_tuple__9 = PyTuple_Pack(4, ((PyObject *)__pyx_int_0), ((PyObject *)__pyx_int_0), ((PyObject *)__pyx_int_0), ((PyObject *)__pyx_int_0)); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "CAStar.pyx":32 + /* "CAStar.pyx":24 * * """ * def __init__(self,BlockSize = 500,FolderName = "GraphFolder",GraphFileName = "Graph",GraphFileSuffix = ".graph",BlockFileName = "GraphBlock",BlockFileSuffix = ".blk",Node_Cache_BlockSize = 10000000): # <<<<<<<<<<<<<< * self.Nodes = {} * self.BlockSize = BlockSize */ - __pyx_tuple__10 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_BlockSize, __pyx_n_s_FolderName, __pyx_n_s_GraphFileName, __pyx_n_s_GraphFileSuffix, __pyx_n_s_BlockFileName, __pyx_n_s_BlockFileSuffix, __pyx_n_s_Node_Cache_BlockSize); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 32, __pyx_L1_error) + __pyx_tuple__8 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_BlockSize, __pyx_n_s_FolderName, __pyx_n_s_GraphFileName, __pyx_n_s_GraphFileSuffix, __pyx_n_s_BlockFileName, __pyx_n_s_BlockFileSuffix, __pyx_n_s_Node_Cache_BlockSize); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(8, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_init, 24, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 24, __pyx_L1_error) + __pyx_tuple__10 = PyTuple_Pack(7, ((PyObject *)__pyx_int_500), ((PyObject*)__pyx_n_s_GraphFolder), ((PyObject*)__pyx_n_s_Graph), ((PyObject*)__pyx_kp_s_graph), ((PyObject*)__pyx_n_s_GraphBlock), ((PyObject*)__pyx_kp_s_blk), ((PyObject *)__pyx_int_10000000)); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10); - __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(8, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_init, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 32, __pyx_L1_error) - __pyx_tuple__12 = PyTuple_Pack(7, ((PyObject *)__pyx_int_500), ((PyObject*)__pyx_n_s_GraphFolder), ((PyObject*)__pyx_n_s_Graph), ((PyObject*)__pyx_kp_s_graph), ((PyObject*)__pyx_n_s_GraphBlock), ((PyObject*)__pyx_kp_s_blk), ((PyObject *)__pyx_int_10000000)); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - /* "CAStar.pyx":45 + /* "CAStar.pyx":37 * * * def Size(self,xSize,ySize,zSize): # <<<<<<<<<<<<<< * self.xSize = xSize * self.ySize = ySize */ - __pyx_tuple__13 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_xSize, __pyx_n_s_ySize, __pyx_n_s_zSize); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 45, __pyx_L1_error) + __pyx_tuple__11 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_xSize, __pyx_n_s_ySize, __pyx_n_s_zSize); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Size, 37, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 37, __pyx_L1_error) + + /* "CAStar.pyx":42 + * self.zSize = zSize + * + * def Get_Size(self): # <<<<<<<<<<<<<< + * return self.xSize, self.ySize, self.zSize + * + */ + __pyx_tuple__13 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 42, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__13); __Pyx_GIVEREF(__pyx_tuple__13); - __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Size, 45, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 45, __pyx_L1_error) + __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_Size, 42, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 42, __pyx_L1_error) - /* "CAStar.pyx":49 - * self.ySize = ySize - * self.zSize = zSize + /* "CAStar.pyx":45 + * return self.xSize, self.ySize, self.zSize + * * def add_node(self,node): # <<<<<<<<<<<<<< - * self.Nodes[node.NodeID] = node + * self.Nodes[node.Get_NodeID()] = node * */ - __pyx_tuple__15 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_node); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 49, __pyx_L1_error) + __pyx_tuple__15 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_node); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 45, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); - __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_add_node, 49, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(0, 49, __pyx_L1_error) + __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_add_node, 45, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(0, 45, __pyx_L1_error) - /* "CAStar.pyx":52 - * self.Nodes[node.NodeID] = node + /* "CAStar.pyx":48 + * self.Nodes[node.Get_NodeID()] = node * * def clean_edges(self): # <<<<<<<<<<<<<< * print("Cleaning edges...") * for item in self.Nodes.values(): */ - __pyx_tuple__17 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_num, __pyx_n_s_friend); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 52, __pyx_L1_error) + __pyx_tuple__17 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_num, __pyx_n_s_friend); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__17); __Pyx_GIVEREF(__pyx_tuple__17); - __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_clean_edges, 52, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 52, __pyx_L1_error) + __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_clean_edges, 48, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 48, __pyx_L1_error) - /* "CAStar.pyx":61 + /* "CAStar.pyx":57 * * * def Add_Edges(self,xRange,yRange,zRange): # <<<<<<<<<<<<<< * print("Adding edges...") - * xCount = int(xRange/self.xSize) + * self.xCount = int(xRange/self.xSize) */ - __pyx_tuple__19 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_xRange, __pyx_n_s_yRange, __pyx_n_s_zRange, __pyx_n_s_xCount, __pyx_n_s_yCount, __pyx_n_s_zCount, __pyx_n_s_node, __pyx_n_s_friends, __pyx_n_s_friend); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 61, __pyx_L1_error) + __pyx_tuple__19 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_xRange, __pyx_n_s_yRange, __pyx_n_s_zRange, __pyx_n_s_node, __pyx_n_s_friends, __pyx_n_s_friend); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__19); __Pyx_GIVEREF(__pyx_tuple__19); - __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Add_Edges, 61, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 61, __pyx_L1_error) + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Add_Edges, 57, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 57, __pyx_L1_error) - /* "CAStar.pyx":78 + /* "CAStar.pyx":74 * node.add_friend(friend) * * def CalculateNeighbours(self,NodeID,xCount,yCount,zCount): # <<<<<<<<<<<<<< * zlow,zhigh,ylow,yhigh,xlow,xhigh = False,False,False,False,False,False * friends = [] */ - __pyx_tuple__21 = PyTuple_Pack(12, __pyx_n_s_self, __pyx_n_s_NodeID, __pyx_n_s_xCount, __pyx_n_s_yCount, __pyx_n_s_zCount, __pyx_n_s_zlow, __pyx_n_s_zhigh, __pyx_n_s_ylow, __pyx_n_s_yhigh, __pyx_n_s_xlow, __pyx_n_s_xhigh, __pyx_n_s_friends); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 78, __pyx_L1_error) + __pyx_tuple__21 = PyTuple_Pack(12, __pyx_n_s_self, __pyx_n_s_NodeID, __pyx_n_s_xCount, __pyx_n_s_yCount, __pyx_n_s_zCount, __pyx_n_s_zlow, __pyx_n_s_zhigh, __pyx_n_s_ylow, __pyx_n_s_yhigh, __pyx_n_s_xlow, __pyx_n_s_xhigh, __pyx_n_s_friends); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__21); __Pyx_GIVEREF(__pyx_tuple__21); - __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(5, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_CalculateNeighbours, 78, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 78, __pyx_L1_error) + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(5, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_CalculateNeighbours, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 74, __pyx_L1_error) - /* "CAStar.pyx":160 + /* "CAStar.pyx":156 * ################################### * * def MapHash(self,value,div): # <<<<<<<<<<<<<< * return int(value//div) * */ - __pyx_tuple__23 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_value, __pyx_n_s_div); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 160, __pyx_L1_error) + __pyx_tuple__23 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_value, __pyx_n_s_div); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 156, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__23); __Pyx_GIVEREF(__pyx_tuple__23); - __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_MapHash, 160, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 160, __pyx_L1_error) + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_MapHash, 156, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 156, __pyx_L1_error) - /* "CAStar.pyx":163 + /* "CAStar.pyx":159 * return int(value//div) * * def Node_Cache_Hash(self,Key): # <<<<<<<<<<<<<< * return int(int(hashlib.md5(str(Key).encode('utf8')).hexdigest()[:8],16)//self.Node_Cache_BlockSize) #Generates integer hash of key then int div by BlockSize * */ - __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_Key); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 163, __pyx_L1_error) + __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_Key); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); - __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Node_Cache_Hash, 163, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 163, __pyx_L1_error) + __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Node_Cache_Hash, 159, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 159, __pyx_L1_error) - /* "CAStar.pyx":168 + /* "CAStar.pyx":164 * ################################## * * def Build_Node_Cache(self): # <<<<<<<<<<<<<< * self.Node_Cache = {} * for node in self.Nodes.values(): */ - __pyx_tuple__27 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_node, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_mx, __pyx_n_s_my, __pyx_n_s_mz); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 168, __pyx_L1_error) + __pyx_tuple__27 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_node, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_mx, __pyx_n_s_my, __pyx_n_s_mz); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 164, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27); - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Build_Node_Cache, 168, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 168, __pyx_L1_error) + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Build_Node_Cache, 164, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 164, __pyx_L1_error) - /* "CAStar.pyx":178 - * self.Node_Cache[(mx,my,mz)] = node.NodeID + /* "CAStar.pyx":174 + * self.Node_Cache[(mx,my,mz)] = node.Get_NodeID() * * def Save_Node_Cache(self): # <<<<<<<<<<<<<< * print("Preparing to save Node Cache") * Sets = {} */ - __pyx_tuple__29 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_Sets, __pyx_n_s_Key, __pyx_n_s_r, __pyx_n_s_Set, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_data); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_tuple__29 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_Sets, __pyx_n_s_Key, __pyx_n_s_r, __pyx_n_s_Set, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_data); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 174, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__29); __Pyx_GIVEREF(__pyx_tuple__29); - __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Save_Node_Cache, 178, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Save_Node_Cache, 174, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 174, __pyx_L1_error) - /* "CAStar.pyx":194 + /* "CAStar.pyx":190 * file.close() * * def Get_Node_Cache(self,x,y,z): # <<<<<<<<<<<<<< * Key = (x,y,z) * if Key not in self.Node_Cache: */ - __pyx_tuple__31 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_Key, __pyx_n_s_NCBlockID, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_block, __pyx_n_s_e); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 194, __pyx_L1_error) + __pyx_tuple__31 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_Key, __pyx_n_s_NCBlockID, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_block, __pyx_n_s_e); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 190, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__31); __Pyx_GIVEREF(__pyx_tuple__31); - __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_Node_Cache, 194, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 194, __pyx_L1_error) + __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_Node_Cache, 190, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 190, __pyx_L1_error) - /* "CAStar.pyx":215 + /* "CAStar.pyx":211 * * * def Direct_NodeID(self,x,y,z): # <<<<<<<<<<<<<< * return self.Get_Node_Cache(x,y,z) * */ - __pyx_tuple__33 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 215, __pyx_L1_error) + __pyx_tuple__33 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__33); __Pyx_GIVEREF(__pyx_tuple__33); - __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Direct_NodeID, 215, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 215, __pyx_L1_error) + __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Direct_NodeID, 211, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 211, __pyx_L1_error) - /* "CAStar.pyx":218 + /* "CAStar.pyx":214 * return self.Get_Node_Cache(x,y,z) * - * def All_NodeIDs(self): # <<<<<<<<<<<<<< - * return self.Node_Cache.values() - * + * def All_NodeIDs(self,StartValue = 1, MaxValue = None): # <<<<<<<<<<<<<< + * if MaxValue == None: + * MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. */ - __pyx_tuple__35 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 218, __pyx_L1_error) + __pyx_tuple__35 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_StartValue, __pyx_n_s_MaxValue, __pyx_n_s_NodeIDList, __pyx_n_s_NodeID); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 214, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__35); __Pyx_GIVEREF(__pyx_tuple__35); - __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_All_NodeIDs, 218, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 218, __pyx_L1_error) + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_All_NodeIDs, 214, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 214, __pyx_L1_error) + __pyx_tuple__37 = PyTuple_Pack(2, ((PyObject *)__pyx_int_1), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); - /* "CAStar.pyx":221 - * return self.Node_Cache.values() + /* "CAStar.pyx":224 + * return NodeIDList * * def Find_NodeID(self,x,y,z): # <<<<<<<<<<<<<< * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) * NodeID = self.Get_Node_Cache(mx,my,mz) */ - __pyx_tuple__37 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_mx, __pyx_n_s_my, __pyx_n_s_mz, __pyx_n_s_NodeID); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__37); - __Pyx_GIVEREF(__pyx_tuple__37); - __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Find_NodeID, 221, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 221, __pyx_L1_error) + __pyx_tuple__38 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_mx, __pyx_n_s_my, __pyx_n_s_mz, __pyx_n_s_NodeID); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); + __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Find_NodeID, 224, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 224, __pyx_L1_error) - /* "CAStar.pyx":226 + /* "CAStar.pyx":229 * return NodeID * * def Obj_Find_NodeID(self,Obj): # <<<<<<<<<<<<<< * x,y,z = Obj.Coords.x,Obj.Coords.y,Obj.Coords.z * NodeID = self.Find_NodeID(x,y,z) */ - __pyx_tuple__39 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_Obj, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_NodeID); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 226, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__39); - __Pyx_GIVEREF(__pyx_tuple__39); - __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Obj_Find_NodeID, 226, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 226, __pyx_L1_error) + __pyx_tuple__40 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_Obj, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_NodeID); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__40); + __Pyx_GIVEREF(__pyx_tuple__40); + __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Obj_Find_NodeID, 229, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 229, __pyx_L1_error) - /* "CAStar.pyx":234 + /* "CAStar.pyx":237 * ############################# * * def SaveGraph(self,AutoNodeSave = True,AutoNodeCacheSave = True): # <<<<<<<<<<<<<< * print("Saving graph...") * if AutoNodeSave: */ - __pyx_tuple__41 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_AutoNodeSave, __pyx_n_s_AutoNodeCacheSave, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_e); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 234, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__41); - __Pyx_GIVEREF(__pyx_tuple__41); - __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_SaveGraph, 234, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 234, __pyx_L1_error) - __pyx_tuple__43 = PyTuple_Pack(2, ((PyObject *)Py_True), ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 234, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__43); - __Pyx_GIVEREF(__pyx_tuple__43); + __pyx_tuple__42 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_AutoNodeSave, __pyx_n_s_AutoNodeCacheSave, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_e); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__42); + __Pyx_GIVEREF(__pyx_tuple__42); + __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_SaveGraph, 237, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 237, __pyx_L1_error) + __pyx_tuple__44 = PyTuple_Pack(2, ((PyObject *)Py_True), ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__44); + __Pyx_GIVEREF(__pyx_tuple__44); - /* "CAStar.pyx":252 + /* "CAStar.pyx":255 * print("Error occured while saving graph file ",e) * * def ImportGraph(self): # <<<<<<<<<<<<<< * print("Importing graph") * try: */ - __pyx_tuple__44 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_ImportFile, __pyx_n_s_e); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__44); - __Pyx_GIVEREF(__pyx_tuple__44); - __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_ImportGraph, 252, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 252, __pyx_L1_error) + __pyx_tuple__45 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_ImportFile, __pyx_n_s_e); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__45); + __Pyx_GIVEREF(__pyx_tuple__45); + __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_ImportGraph, 255, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 255, __pyx_L1_error) - /* "CAStar.pyx":266 + /* "CAStar.pyx":269 * * ################ * def Hash(self,Value): # <<<<<<<<<<<<<< * return int(Value//self.BlockSize) * def GetNode(self,NodeID): */ - __pyx_tuple__46 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_Value); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__46); - __Pyx_GIVEREF(__pyx_tuple__46); - __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Hash, 266, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 266, __pyx_L1_error) + __pyx_tuple__47 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_Value); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__47); + __Pyx_GIVEREF(__pyx_tuple__47); + __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Hash, 269, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 269, __pyx_L1_error) - /* "CAStar.pyx":268 + /* "CAStar.pyx":271 * def Hash(self,Value): * return int(Value//self.BlockSize) * def GetNode(self,NodeID): # <<<<<<<<<<<<<< * if NodeID not in self.Nodes: * BlockID = self.Hash(NodeID) */ - __pyx_tuple__48 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_NodeID, __pyx_n_s_BlockID, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_block, __pyx_n_s_e); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__48); - __Pyx_GIVEREF(__pyx_tuple__48); - __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_GetNode, 268, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 268, __pyx_L1_error) + __pyx_tuple__49 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_NodeID, __pyx_n_s_BlockID, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_block, __pyx_n_s_e); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__49); + __Pyx_GIVEREF(__pyx_tuple__49); + __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_GetNode, 271, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 271, __pyx_L1_error) - /* "CAStar.pyx":288 + /* "CAStar.pyx":291 * raise ValueError("NodeID requested is not in the BlockID checked. Check BlockSize or regenerate blockfiles") * * def SaveNodes(self): # <<<<<<<<<<<<<< * Sets = {} * m = self.Hash(max(self.Nodes)) #Finds max blockID */ - __pyx_tuple__50 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_Sets, __pyx_n_s_m, __pyx_n_s_x, __pyx_n_s_node, __pyx_n_s_r, __pyx_n_s_Set, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_data); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 288, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__50); - __Pyx_GIVEREF(__pyx_tuple__50); - __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(1, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_SaveNodes, 288, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 288, __pyx_L1_error) + __pyx_tuple__51 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_Sets, __pyx_n_s_m, __pyx_n_s_x, __pyx_n_s_node, __pyx_n_s_r, __pyx_n_s_Set, __pyx_n_s_filename, __pyx_n_s_file, __pyx_n_s_data); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__51); + __Pyx_GIVEREF(__pyx_tuple__51); + __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_SaveNodes, 291, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 291, __pyx_L1_error) - /* "CAStar.pyx":306 + /* "CAStar.pyx":309 * file.close() * * def EvictNode(self,NodeID): #Removes a node from the Nodes dict # <<<<<<<<<<<<<< * if NodeID in self.Nodes: * self.Nodes.pop(NodeID) */ - __pyx_tuple__52 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_NodeID); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 306, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__52); - __Pyx_GIVEREF(__pyx_tuple__52); - __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_EvictNode, 306, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 306, __pyx_L1_error) + __pyx_tuple__53 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_NodeID); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__53); + __Pyx_GIVEREF(__pyx_tuple__53); + __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_EvictNode, 309, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(0, 309, __pyx_L1_error) - /* "CAStar.pyx":312 + /* "CAStar.pyx":319 * * class Node: * def __init__(self,NodeID,Cost,Coords): # <<<<<<<<<<<<<< * self.NodeID = NodeID * self.Friends = [] */ - __pyx_tuple__54 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_NodeID, __pyx_n_s_Cost, __pyx_n_s_Coords); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__54); - __Pyx_GIVEREF(__pyx_tuple__54); - __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_init, 312, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(0, 312, __pyx_L1_error) + __pyx_tuple__55 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_NodeID, __pyx_n_s_Cost, __pyx_n_s_Coords); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__55); + __Pyx_GIVEREF(__pyx_tuple__55); + __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_init, 319, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 319, __pyx_L1_error) - /* "CAStar.pyx":317 + /* "CAStar.pyx":324 * self.Cost = Cost * self.Coords = Coords * def add_friend(self,friend): # <<<<<<<<<<<<<< * if friend not in self.Friends: * self.Friends.append(friend) */ - __pyx_tuple__56 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_friend); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__56); - __Pyx_GIVEREF(__pyx_tuple__56); - __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_add_friend, 317, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) __PYX_ERR(0, 317, __pyx_L1_error) + __pyx_tuple__57 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_friend); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 324, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__57); + __Pyx_GIVEREF(__pyx_tuple__57); + __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_add_friend, 324, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 324, __pyx_L1_error) - /* "CAStar.pyx":320 - * if friend not in self.Friends: + /* "CAStar.pyx":328 * self.Friends.append(friend) + * + * def Get_NodeID(self): # <<<<<<<<<<<<<< + * return self.NodeID + * def Get_Friends(self): + */ + __pyx_tuple__59 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__59); + __Pyx_GIVEREF(__pyx_tuple__59); + __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_NodeID, 328, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 328, __pyx_L1_error) + + /* "CAStar.pyx":330 + * def Get_NodeID(self): + * return self.NodeID + * def Get_Friends(self): # <<<<<<<<<<<<<< + * return self.Friends + * def Get_Coords(self): + */ + __pyx_tuple__61 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__61); + __Pyx_GIVEREF(__pyx_tuple__61); + __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_Friends, 330, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 330, __pyx_L1_error) + + /* "CAStar.pyx":332 + * def Get_Friends(self): + * return self.Friends * def Get_Coords(self): # <<<<<<<<<<<<<< * return self.Coords * def Get_Cost(self): */ - __pyx_tuple__58 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 320, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__58); - __Pyx_GIVEREF(__pyx_tuple__58); - __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_Coords, 320, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 320, __pyx_L1_error) + __pyx_tuple__63 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__63); + __Pyx_GIVEREF(__pyx_tuple__63); + __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_Coords, 332, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(0, 332, __pyx_L1_error) - /* "CAStar.pyx":322 + /* "CAStar.pyx":334 * def Get_Coords(self): * return self.Coords * def Get_Cost(self): # <<<<<<<<<<<<<< * return self.Cost * */ - __pyx_tuple__60 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 322, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__60); - __Pyx_GIVEREF(__pyx_tuple__60); - __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_Cost, 322, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(0, 322, __pyx_L1_error) + __pyx_tuple__65 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__65); + __Pyx_GIVEREF(__pyx_tuple__65); + __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Get_Cost, 334, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(0, 334, __pyx_L1_error) - /* "CAStar.pyx":347 + /* "CAStar.pyx":359 * * * def AStar2(graph, int start, int target): # Set all g to node_count + 1 # <<<<<<<<<<<<<< * StartTime = time.time() * */ - __pyx_tuple__62 = PyTuple_Pack(26, __pyx_n_s_graph_2, __pyx_n_s_start, __pyx_n_s_target, __pyx_n_s_StartTime, __pyx_n_s_xSize, __pyx_n_s_ySize, __pyx_n_s_zSize, __pyx_n_s_gNode, __pyx_n_s_ClosedSet, __pyx_n_s_OpenSet, __pyx_n_s_cameFrom, __pyx_n_s_g, __pyx_n_s_f, __pyx_n_s_NodeID, __pyx_n_s_current, __pyx_n_s_tScore, __pyx_n_s_xCount, __pyx_n_s_yCount, __pyx_n_s_zCount, __pyx_n_s_OpenList, __pyx_n_s_FriendList, __pyx_n_s_TargetNode, __pyx_n_s_Found, __pyx_n_s_x, __pyx_n_s_Node, __pyx_n_s_EndTime); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 347, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__62); - __Pyx_GIVEREF(__pyx_tuple__62); - __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(3, 0, 26, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_AStar2, 347, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 347, __pyx_L1_error) - - /* "CAStar.pyx":420 - * - * - * def FindPath(cameFrom,current): # <<<<<<<<<<<<<< - * path = [current] - * while current in cameFrom: - */ - __pyx_tuple__64 = PyTuple_Pack(3, __pyx_n_s_cameFrom, __pyx_n_s_current, __pyx_n_s_path); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__64); - __Pyx_GIVEREF(__pyx_tuple__64); - __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_FindPath, 420, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 420, __pyx_L1_error) + __pyx_tuple__67 = PyTuple_Pack(26, __pyx_n_s_graph_2, __pyx_n_s_start, __pyx_n_s_target, __pyx_n_s_StartTime, __pyx_n_s_xSize, __pyx_n_s_ySize, __pyx_n_s_zSize, __pyx_n_s_gNode, __pyx_n_s_ClosedSet, __pyx_n_s_OpenSet, __pyx_n_s_cameFrom, __pyx_n_s_g, __pyx_n_s_f, __pyx_n_s_NodeID, __pyx_n_s_current, __pyx_n_s_tScore, __pyx_n_s_xCount, __pyx_n_s_yCount, __pyx_n_s_zCount, __pyx_n_s_OpenList, __pyx_n_s_FriendList, __pyx_n_s_TargetNode, __pyx_n_s_Found, __pyx_n_s_x, __pyx_n_s_Node, __pyx_n_s_EndTime); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 359, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__67); + __Pyx_GIVEREF(__pyx_tuple__67); + __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(3, 0, 26, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_AStar2, 359, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) __PYX_ERR(0, 359, __pyx_L1_error) - /* "CAStar.pyx":429 + /* "CAStar.pyx":435 * * * def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 2000000): # <<<<<<<<<<<<<< * import random,sys * graph = DynoGraph(BlockSize= 500) */ - __pyx_tuple__66 = PyTuple_Pack(10, __pyx_n_s_FLUSH, __pyx_n_s_BlockSize, __pyx_n_s_MAXNODE, __pyx_n_s_random, __pyx_n_s_sys, __pyx_n_s_graph_2, __pyx_n_s_Count, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_Path); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__66); - __Pyx_GIVEREF(__pyx_tuple__66); - __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Benchmark, 429, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 429, __pyx_L1_error) + __pyx_tuple__69 = PyTuple_Pack(10, __pyx_n_s_FLUSH, __pyx_n_s_BlockSize, __pyx_n_s_MAXNODE, __pyx_n_s_random, __pyx_n_s_sys, __pyx_n_s_graph_2, __pyx_n_s_Count, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_Path); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__69); + __Pyx_GIVEREF(__pyx_tuple__69); + __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_CAStar_pyx, __pyx_n_s_Benchmark, 435, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 435, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -13796,7 +14142,7 @@ static int __Pyx_InitGlobals(void) { __pyx_int_1000 = PyInt_FromLong(1000); if (unlikely(!__pyx_int_1000)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_2000000 = PyInt_FromLong(2000000L); if (unlikely(!__pyx_int_2000000)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_10000000 = PyInt_FromLong(10000000L); if (unlikely(!__pyx_int_10000000)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_10000000000000000000000000000000000 = PyInt_FromString((char *)"10000000000000000000000000000000000", 0, 0); if (unlikely(!__pyx_int_10000000000000000000000000000000000)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_100000000000000000000 = PyInt_FromString((char *)"100000000000000000000", 0, 0); if (unlikely(!__pyx_int_100000000000000000000)) __PYX_ERR(0, 1, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; @@ -13905,7 +14251,7 @@ PyMODINIT_FUNC PyInit_CAStar(void) * * * import os,pickle,heapq,time,math,hashlib # <<<<<<<<<<<<<< - * import numpy as np + * from AATC_Coordinate import * * try: */ __pyx_t_1 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) @@ -13936,18 +14282,24 @@ PyMODINIT_FUNC PyInit_CAStar(void) /* "CAStar.pyx":6 * * import os,pickle,heapq,time,math,hashlib - * import numpy as np # <<<<<<<<<<<<<< + * from AATC_Coordinate import * # <<<<<<<<<<<<<< * try: * _ = math.inf */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_INCREF(__pyx_n_s__6); + __Pyx_GIVEREF(__pyx_n_s__6); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__6); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_AATC_Coordinate, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_import_star(__pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "CAStar.pyx":7 * import os,pickle,heapq,time,math,hashlib - * import numpy as np + * from AATC_Coordinate import * * try: # <<<<<<<<<<<<<< * _ = math.inf * except: @@ -13955,80 +14307,80 @@ PyMODINIT_FUNC PyInit_CAStar(void) { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); /*try:*/ { /* "CAStar.pyx":8 - * import numpy as np + * from AATC_Coordinate import * * try: * _ = math.inf # <<<<<<<<<<<<<< * except: * print("You do not have math.inf object, Python 3.5 onwards. Will use replacement.") */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L2_error) + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_inf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L2_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8, __pyx_L2_error) - __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s__7, __pyx_t_1) < 0) __PYX_ERR(0, 8, __pyx_L2_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s__6, __pyx_t_5) < 0) __PYX_ERR(0, 8, __pyx_L2_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "CAStar.pyx":7 * import os,pickle,heapq,time,math,hashlib - * import numpy as np + * from AATC_Coordinate import * * try: # <<<<<<<<<<<<<< * _ = math.inf * except: */ } - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L7_try_end; __pyx_L2_error:; __Pyx_PyThreadState_assign + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; /* "CAStar.pyx":9 * try: * _ = math.inf * except: # <<<<<<<<<<<<<< * print("You do not have math.inf object, Python 3.5 onwards. Will use replacement.") - * math.inf = 10**34 + * math.inf = 10**20 */ /*except:*/ { __Pyx_AddTraceback("CAStar", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_6) < 0) __PYX_ERR(0, 9, __pyx_L4_except_error) - __Pyx_GOTREF(__pyx_t_5); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_6) < 0) __PYX_ERR(0, 9, __pyx_L4_except_error) __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_2); __Pyx_GOTREF(__pyx_t_6); /* "CAStar.pyx":10 * _ = math.inf * except: * print("You do not have math.inf object, Python 3.5 onwards. Will use replacement.") # <<<<<<<<<<<<<< - * math.inf = 10**34 - * class Coordinate: + * math.inf = 10**20 + * */ if (__Pyx_PrintOne(0, __pyx_kp_s_You_do_not_have_math_inf_object) < 0) __PYX_ERR(0, 10, __pyx_L4_except_error) /* "CAStar.pyx":11 * except: * print("You do not have math.inf object, Python 3.5 onwards. Will use replacement.") - * math.inf = 10**34 # <<<<<<<<<<<<<< - * class Coordinate: - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): + * math.inf = 10**20 # <<<<<<<<<<<<<< + * + * class DynoGraph: */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_math); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11, __pyx_L4_except_error) __Pyx_GOTREF(__pyx_t_7); - if (__Pyx_PyObject_SetAttrStr(__pyx_t_7, __pyx_n_s_inf, __pyx_int_10000000000000000000000000000000000) < 0) __PYX_ERR(0, 11, __pyx_L4_except_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_t_7, __pyx_n_s_inf, __pyx_int_100000000000000000000) < 0) __PYX_ERR(0, 11, __pyx_L4_except_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L3_exception_handled; } @@ -14036,449 +14388,438 @@ PyMODINIT_FUNC PyInit_CAStar(void) /* "CAStar.pyx":7 * import os,pickle,heapq,time,math,hashlib - * import numpy as np + * from AATC_Coordinate import * * try: # <<<<<<<<<<<<<< * _ = math.inf * except: */ __Pyx_PyThreadState_assign - __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); goto __pyx_L1_error; __pyx_L3_exception_handled:; __Pyx_PyThreadState_assign - __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); __pyx_L7_try_end:; } - /* "CAStar.pyx":12 - * print("You do not have math.inf object, Python 3.5 onwards. Will use replacement.") - * math.inf = 10**34 - * class Coordinate: # <<<<<<<<<<<<<< - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - * self.x = x - */ - __pyx_t_6 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Coordinate, __pyx_n_s_Coordinate, (PyObject *) NULL, __pyx_n_s_CAStar, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - /* "CAStar.pyx":13 - * math.inf = 10**34 - * class Coordinate: - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): # <<<<<<<<<<<<<< - * self.x = x - * self.y = y - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_10Coordinate_1__init__, 0, __pyx_n_s_Coordinate___init, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__9); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "CAStar.pyx":12 - * print("You do not have math.inf object, Python 3.5 onwards. Will use replacement.") - * math.inf = 10**34 - * class Coordinate: # <<<<<<<<<<<<<< - * def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - * self.x = x - */ - __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_Coordinate, __pyx_empty_tuple, __pyx_t_6, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Coordinate, __pyx_t_1) < 0) __PYX_ERR(0, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "CAStar.pyx":21 - * self.zSize = zSize + * math.inf = 10**20 * * class DynoGraph: # <<<<<<<<<<<<<< * """ Graph object * BlockSize affects how many nodes are saved in a single BlockFile. Shown by an N before the BlockID */ - __pyx_t_6 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DynoGraph, __pyx_n_s_DynoGraph, (PyObject *) NULL, __pyx_n_s_CAStar, __pyx_kp_s_Graph_object_BlockSize_affects); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 21, __pyx_L1_error) + __pyx_t_6 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DynoGraph, __pyx_n_s_DynoGraph, (PyObject *) NULL, __pyx_n_s_CAStar, __pyx_kp_s_Graph_object_BlockSize_affects); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - /* "CAStar.pyx":32 + /* "CAStar.pyx":24 * * """ * def __init__(self,BlockSize = 500,FolderName = "GraphFolder",GraphFileName = "Graph",GraphFileSuffix = ".graph",BlockFileName = "GraphBlock",BlockFileSuffix = ".blk",Node_Cache_BlockSize = 10000000): # <<<<<<<<<<<<<< * self.Nodes = {} * self.BlockSize = BlockSize */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_1__init__, 0, __pyx_n_s_DynoGraph___init, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__12); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_1__init__, 0, __pyx_n_s_DynoGraph___init, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__10); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init, __pyx_t_2) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":45 + /* "CAStar.pyx":37 * * * def Size(self,xSize,ySize,zSize): # <<<<<<<<<<<<<< * self.xSize = xSize * self.ySize = ySize */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_3Size, 0, __pyx_n_s_DynoGraph_Size, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Size, __pyx_t_1) < 0) __PYX_ERR(0, 45, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_3Size, 0, __pyx_n_s_DynoGraph_Size, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Size, __pyx_t_2) < 0) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":49 - * self.ySize = ySize + /* "CAStar.pyx":42 * self.zSize = zSize + * + * def Get_Size(self): # <<<<<<<<<<<<<< + * return self.xSize, self.ySize, self.zSize + * + */ + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_5Get_Size, 0, __pyx_n_s_DynoGraph_Get_Size, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_Size, __pyx_t_2) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "CAStar.pyx":45 + * return self.xSize, self.ySize, self.zSize + * * def add_node(self,node): # <<<<<<<<<<<<<< - * self.Nodes[node.NodeID] = node + * self.Nodes[node.Get_NodeID()] = node * */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_5add_node, 0, __pyx_n_s_DynoGraph_add_node, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__16)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_add_node, __pyx_t_1) < 0) __PYX_ERR(0, 49, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_7add_node, 0, __pyx_n_s_DynoGraph_add_node, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__16)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_add_node, __pyx_t_2) < 0) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":52 - * self.Nodes[node.NodeID] = node + /* "CAStar.pyx":48 + * self.Nodes[node.Get_NodeID()] = node * * def clean_edges(self): # <<<<<<<<<<<<<< * print("Cleaning edges...") * for item in self.Nodes.values(): */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_7clean_edges, 0, __pyx_n_s_DynoGraph_clean_edges, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_clean_edges, __pyx_t_1) < 0) __PYX_ERR(0, 52, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_9clean_edges, 0, __pyx_n_s_DynoGraph_clean_edges, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_clean_edges, __pyx_t_2) < 0) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":61 + /* "CAStar.pyx":57 * * * def Add_Edges(self,xRange,yRange,zRange): # <<<<<<<<<<<<<< * print("Adding edges...") - * xCount = int(xRange/self.xSize) + * self.xCount = int(xRange/self.xSize) */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_9Add_Edges, 0, __pyx_n_s_DynoGraph_Add_Edges, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Add_Edges, __pyx_t_1) < 0) __PYX_ERR(0, 61, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_11Add_Edges, 0, __pyx_n_s_DynoGraph_Add_Edges, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Add_Edges, __pyx_t_2) < 0) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":78 + /* "CAStar.pyx":74 * node.add_friend(friend) * * def CalculateNeighbours(self,NodeID,xCount,yCount,zCount): # <<<<<<<<<<<<<< * zlow,zhigh,ylow,yhigh,xlow,xhigh = False,False,False,False,False,False * friends = [] */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_11CalculateNeighbours, 0, __pyx_n_s_DynoGraph_CalculateNeighbours, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_CalculateNeighbours, __pyx_t_1) < 0) __PYX_ERR(0, 78, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_13CalculateNeighbours, 0, __pyx_n_s_DynoGraph_CalculateNeighbours, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_CalculateNeighbours, __pyx_t_2) < 0) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":160 + /* "CAStar.pyx":156 * ################################### * * def MapHash(self,value,div): # <<<<<<<<<<<<<< * return int(value//div) * */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_13MapHash, 0, __pyx_n_s_DynoGraph_MapHash, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_MapHash, __pyx_t_1) < 0) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_15MapHash, 0, __pyx_n_s_DynoGraph_MapHash, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_MapHash, __pyx_t_2) < 0) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":163 + /* "CAStar.pyx":159 * return int(value//div) * * def Node_Cache_Hash(self,Key): # <<<<<<<<<<<<<< * return int(int(hashlib.md5(str(Key).encode('utf8')).hexdigest()[:8],16)//self.Node_Cache_BlockSize) #Generates integer hash of key then int div by BlockSize * */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_15Node_Cache_Hash, 0, __pyx_n_s_DynoGraph_Node_Cache_Hash, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Node_Cache_Hash, __pyx_t_1) < 0) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_17Node_Cache_Hash, 0, __pyx_n_s_DynoGraph_Node_Cache_Hash, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Node_Cache_Hash, __pyx_t_2) < 0) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":168 + /* "CAStar.pyx":164 * ################################## * * def Build_Node_Cache(self): # <<<<<<<<<<<<<< * self.Node_Cache = {} * for node in self.Nodes.values(): */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_17Build_Node_Cache, 0, __pyx_n_s_DynoGraph_Build_Node_Cache, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Build_Node_Cache, __pyx_t_1) < 0) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_19Build_Node_Cache, 0, __pyx_n_s_DynoGraph_Build_Node_Cache, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Build_Node_Cache, __pyx_t_2) < 0) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":178 - * self.Node_Cache[(mx,my,mz)] = node.NodeID + /* "CAStar.pyx":174 + * self.Node_Cache[(mx,my,mz)] = node.Get_NodeID() * * def Save_Node_Cache(self): # <<<<<<<<<<<<<< * print("Preparing to save Node Cache") * Sets = {} */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_19Save_Node_Cache, 0, __pyx_n_s_DynoGraph_Save_Node_Cache, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Save_Node_Cache, __pyx_t_1) < 0) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_21Save_Node_Cache, 0, __pyx_n_s_DynoGraph_Save_Node_Cache, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Save_Node_Cache, __pyx_t_2) < 0) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":194 + /* "CAStar.pyx":190 * file.close() * * def Get_Node_Cache(self,x,y,z): # <<<<<<<<<<<<<< * Key = (x,y,z) * if Key not in self.Node_Cache: */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_21Get_Node_Cache, 0, __pyx_n_s_DynoGraph_Get_Node_Cache, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 194, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_Node_Cache, __pyx_t_1) < 0) __PYX_ERR(0, 194, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_23Get_Node_Cache, 0, __pyx_n_s_DynoGraph_Get_Node_Cache, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_Node_Cache, __pyx_t_2) < 0) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":215 + /* "CAStar.pyx":211 * * * def Direct_NodeID(self,x,y,z): # <<<<<<<<<<<<<< * return self.Get_Node_Cache(x,y,z) * */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_23Direct_NodeID, 0, __pyx_n_s_DynoGraph_Direct_NodeID, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Direct_NodeID, __pyx_t_1) < 0) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_25Direct_NodeID, 0, __pyx_n_s_DynoGraph_Direct_NodeID, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Direct_NodeID, __pyx_t_2) < 0) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":218 + /* "CAStar.pyx":214 * return self.Get_Node_Cache(x,y,z) * - * def All_NodeIDs(self): # <<<<<<<<<<<<<< - * return self.Node_Cache.values() - * + * def All_NodeIDs(self,StartValue = 1, MaxValue = None): # <<<<<<<<<<<<<< + * if MaxValue == None: + * MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_25All_NodeIDs, 0, __pyx_n_s_DynoGraph_All_NodeIDs, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_All_NodeIDs, __pyx_t_1) < 0) __PYX_ERR(0, 218, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_27All_NodeIDs, 0, __pyx_n_s_DynoGraph_All_NodeIDs, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__37); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_All_NodeIDs, __pyx_t_2) < 0) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":221 - * return self.Node_Cache.values() + /* "CAStar.pyx":224 + * return NodeIDList * * def Find_NodeID(self,x,y,z): # <<<<<<<<<<<<<< * mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) * NodeID = self.Get_Node_Cache(mx,my,mz) */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_27Find_NodeID, 0, __pyx_n_s_DynoGraph_Find_NodeID, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Find_NodeID, __pyx_t_1) < 0) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_29Find_NodeID, 0, __pyx_n_s_DynoGraph_Find_NodeID, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Find_NodeID, __pyx_t_2) < 0) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":226 + /* "CAStar.pyx":229 * return NodeID * * def Obj_Find_NodeID(self,Obj): # <<<<<<<<<<<<<< * x,y,z = Obj.Coords.x,Obj.Coords.y,Obj.Coords.z * NodeID = self.Find_NodeID(x,y,z) */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_29Obj_Find_NodeID, 0, __pyx_n_s_DynoGraph_Obj_Find_NodeID, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Obj_Find_NodeID, __pyx_t_1) < 0) __PYX_ERR(0, 226, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_31Obj_Find_NodeID, 0, __pyx_n_s_DynoGraph_Obj_Find_NodeID, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Obj_Find_NodeID, __pyx_t_2) < 0) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":234 + /* "CAStar.pyx":237 * ############################# * * def SaveGraph(self,AutoNodeSave = True,AutoNodeCacheSave = True): # <<<<<<<<<<<<<< * print("Saving graph...") * if AutoNodeSave: */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_31SaveGraph, 0, __pyx_n_s_DynoGraph_SaveGraph, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__43); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_SaveGraph, __pyx_t_1) < 0) __PYX_ERR(0, 234, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_33SaveGraph, 0, __pyx_n_s_DynoGraph_SaveGraph, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__44); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_SaveGraph, __pyx_t_2) < 0) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":252 + /* "CAStar.pyx":255 * print("Error occured while saving graph file ",e) * * def ImportGraph(self): # <<<<<<<<<<<<<< * print("Importing graph") * try: */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_33ImportGraph, 0, __pyx_n_s_DynoGraph_ImportGraph, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_ImportGraph, __pyx_t_1) < 0) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_35ImportGraph, 0, __pyx_n_s_DynoGraph_ImportGraph, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_ImportGraph, __pyx_t_2) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":266 + /* "CAStar.pyx":269 * * ################ * def Hash(self,Value): # <<<<<<<<<<<<<< * return int(Value//self.BlockSize) * def GetNode(self,NodeID): */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_35Hash, 0, __pyx_n_s_DynoGraph_Hash, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Hash, __pyx_t_1) < 0) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_37Hash, 0, __pyx_n_s_DynoGraph_Hash, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Hash, __pyx_t_2) < 0) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":268 + /* "CAStar.pyx":271 * def Hash(self,Value): * return int(Value//self.BlockSize) * def GetNode(self,NodeID): # <<<<<<<<<<<<<< * if NodeID not in self.Nodes: * BlockID = self.Hash(NodeID) */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_37GetNode, 0, __pyx_n_s_DynoGraph_GetNode, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_GetNode, __pyx_t_1) < 0) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_39GetNode, 0, __pyx_n_s_DynoGraph_GetNode, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_GetNode, __pyx_t_2) < 0) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":288 + /* "CAStar.pyx":291 * raise ValueError("NodeID requested is not in the BlockID checked. Check BlockSize or regenerate blockfiles") * * def SaveNodes(self): # <<<<<<<<<<<<<< * Sets = {} * m = self.Hash(max(self.Nodes)) #Finds max blockID */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_39SaveNodes, 0, __pyx_n_s_DynoGraph_SaveNodes, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_SaveNodes, __pyx_t_1) < 0) __PYX_ERR(0, 288, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_41SaveNodes, 0, __pyx_n_s_DynoGraph_SaveNodes, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_SaveNodes, __pyx_t_2) < 0) __PYX_ERR(0, 291, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":306 + /* "CAStar.pyx":309 * file.close() * * def EvictNode(self,NodeID): #Removes a node from the Nodes dict # <<<<<<<<<<<<<< * if NodeID in self.Nodes: * self.Nodes.pop(NodeID) */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_41EvictNode, 0, __pyx_n_s_DynoGraph_EvictNode, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_EvictNode, __pyx_t_1) < 0) __PYX_ERR(0, 306, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_9DynoGraph_43EvictNode, 0, __pyx_n_s_DynoGraph_EvictNode, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__54)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_EvictNode, __pyx_t_2) < 0) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":21 - * self.zSize = zSize + /* "CAStar.pyx":13 + * math.inf = 10**20 * * class DynoGraph: # <<<<<<<<<<<<<< * """ Graph object * BlockSize affects how many nodes are saved in a single BlockFile. Shown by an N before the BlockID */ - __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DynoGraph, __pyx_empty_tuple, __pyx_t_6, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DynoGraph, __pyx_t_1) < 0) __PYX_ERR(0, 21, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DynoGraph, __pyx_empty_tuple, __pyx_t_6, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DynoGraph, __pyx_t_2) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "CAStar.pyx":311 + /* "CAStar.pyx":318 * * * class Node: # <<<<<<<<<<<<<< * def __init__(self,NodeID,Cost,Coords): * self.NodeID = NodeID */ - __pyx_t_6 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Node, __pyx_n_s_Node, (PyObject *) NULL, __pyx_n_s_CAStar, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 311, __pyx_L1_error) + __pyx_t_6 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Node, __pyx_n_s_Node, (PyObject *) NULL, __pyx_n_s_CAStar, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 318, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - /* "CAStar.pyx":312 + /* "CAStar.pyx":319 * * class Node: * def __init__(self,NodeID,Cost,Coords): # <<<<<<<<<<<<<< * self.NodeID = NodeID * self.Friends = [] */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_1__init__, 0, __pyx_n_s_Node___init, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_1__init__, 0, __pyx_n_s_Node___init, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init, __pyx_t_2) < 0) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":317 + /* "CAStar.pyx":324 * self.Cost = Cost * self.Coords = Coords * def add_friend(self,friend): # <<<<<<<<<<<<<< * if friend not in self.Friends: * self.Friends.append(friend) */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_3add_friend, 0, __pyx_n_s_Node_add_friend, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__57)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_add_friend, __pyx_t_1) < 0) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_3add_friend, 0, __pyx_n_s_Node_add_friend, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 324, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_add_friend, __pyx_t_2) < 0) __PYX_ERR(0, 324, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":320 - * if friend not in self.Friends: + /* "CAStar.pyx":328 * self.Friends.append(friend) + * + * def Get_NodeID(self): # <<<<<<<<<<<<<< + * return self.NodeID + * def Get_Friends(self): + */ + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_5Get_NodeID, 0, __pyx_n_s_Node_Get_NodeID, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_NodeID, __pyx_t_2) < 0) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "CAStar.pyx":330 + * def Get_NodeID(self): + * return self.NodeID + * def Get_Friends(self): # <<<<<<<<<<<<<< + * return self.Friends + * def Get_Coords(self): + */ + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_7Get_Friends, 0, __pyx_n_s_Node_Get_Friends, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_Friends, __pyx_t_2) < 0) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "CAStar.pyx":332 + * def Get_Friends(self): + * return self.Friends * def Get_Coords(self): # <<<<<<<<<<<<<< * return self.Coords * def Get_Cost(self): */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_5Get_Coords, 0, __pyx_n_s_Node_Get_Coords, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_Coords, __pyx_t_1) < 0) __PYX_ERR(0, 320, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_9Get_Coords, 0, __pyx_n_s_Node_Get_Coords, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__64)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_Coords, __pyx_t_2) < 0) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":322 + /* "CAStar.pyx":334 * def Get_Coords(self): * return self.Coords * def Get_Cost(self): # <<<<<<<<<<<<<< * return self.Cost * */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_7Get_Cost, 0, __pyx_n_s_Node_Get_Cost, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__61)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 322, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_Cost, __pyx_t_1) < 0) __PYX_ERR(0, 322, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6CAStar_4Node_11Get_Cost, 0, __pyx_n_s_Node_Get_Cost, NULL, __pyx_n_s_CAStar, __pyx_d, ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_Get_Cost, __pyx_t_2) < 0) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "CAStar.pyx":311 + /* "CAStar.pyx":318 * * * class Node: # <<<<<<<<<<<<<< * def __init__(self,NodeID,Cost,Coords): * self.NodeID = NodeID */ - __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_Node, __pyx_empty_tuple, __pyx_t_6, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Node, __pyx_t_1) < 0) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_Node, __pyx_empty_tuple, __pyx_t_6, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Node, __pyx_t_2) < 0) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "CAStar.pyx":347 + /* "CAStar.pyx":359 * * * def AStar2(graph, int start, int target): # Set all g to node_count + 1 # <<<<<<<<<<<<<< * StartTime = time.time() * */ - __pyx_t_6 = PyCFunction_NewEx(&__pyx_mdef_6CAStar_1AStar2, NULL, __pyx_n_s_CAStar); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 347, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_AStar2, __pyx_t_6) < 0) __PYX_ERR(0, 347, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "CAStar.pyx":420 - * - * - * def FindPath(cameFrom,current): # <<<<<<<<<<<<<< - * path = [current] - * while current in cameFrom: - */ - __pyx_t_6 = PyCFunction_NewEx(&__pyx_mdef_6CAStar_3FindPath, NULL, __pyx_n_s_CAStar); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 420, __pyx_L1_error) + __pyx_t_6 = PyCFunction_NewEx(&__pyx_mdef_6CAStar_1AStar2, NULL, __pyx_n_s_CAStar); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 359, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_FindPath, __pyx_t_6) < 0) __PYX_ERR(0, 420, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_AStar2, __pyx_t_6) < 0) __PYX_ERR(0, 359, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "CAStar.pyx":429 + /* "CAStar.pyx":435 * * * def Benchmark(FLUSH = 100,BlockSize = 500,MAXNODE = 2000000): # <<<<<<<<<<<<<< * import random,sys * graph = DynoGraph(BlockSize= 500) */ - __pyx_t_6 = PyCFunction_NewEx(&__pyx_mdef_6CAStar_5Benchmark, NULL, __pyx_n_s_CAStar); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 429, __pyx_L1_error) + __pyx_t_6 = PyCFunction_NewEx(&__pyx_mdef_6CAStar_3Benchmark, NULL, __pyx_n_s_CAStar); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Benchmark, __pyx_t_6) < 0) __PYX_ERR(0, 429, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Benchmark, __pyx_t_6) < 0) __PYX_ERR(0, 435, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "CAStar.pyx":1 * #!python # <<<<<<<<<<<<<< - * #cython: boundscheck=False, wraparound=False + * #cython: boundscheck=False, wraparound=False, infer_types=True,cdivision = True * */ __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1, __pyx_L1_error) @@ -14491,7 +14832,7 @@ PyMODINIT_FUNC PyInit_CAStar(void) goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); if (__pyx_m) { @@ -14543,32 +14884,6 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { return result; } -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - /* RaiseDoubleKeywords */ static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, @@ -14685,6 +15000,32 @@ static int __Pyx_ParseOptionalKeywords( return -1; } +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + /* GetModuleGlobalName */ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { PyObject *result; @@ -15873,48 +16214,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject return 0; } -/* WriteUnraisableException */ - static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, - CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, - int full_traceback, CYTHON_UNUSED int nogil) { - PyObject *old_exc, *old_val, *old_tb; - PyObject *ctx; - __Pyx_PyThreadState_declare -#ifdef WITH_THREAD - PyGILState_STATE state; - if (nogil) - state = PyGILState_Ensure(); -#ifdef _MSC_VER - else state = (PyGILState_STATE)-1; -#endif -#endif - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); - if (full_traceback) { - Py_XINCREF(old_exc); - Py_XINCREF(old_val); - Py_XINCREF(old_tb); - __Pyx_ErrRestore(old_exc, old_val, old_tb); - PyErr_PrintEx(1); - } - #if PY_MAJOR_VERSION < 3 - ctx = PyString_FromString(name); - #else - ctx = PyUnicode_FromString(name); - #endif - __Pyx_ErrRestore(old_exc, old_val, old_tb); - if (!ctx) { - PyErr_WriteUnraisable(Py_None); - } else { - PyErr_WriteUnraisable(ctx); - Py_DECREF(ctx); - } -#ifdef WITH_THREAD - if (nogil) - PyGILState_Release(state); -#endif -} - /* pop_index */ static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix) { PyObject *r; @@ -16196,21 +16495,6 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED } #endif -/* None */ - static CYTHON_INLINE long __Pyx_div_long(long a, long b) { - long q = a / b; - long r = a - q*b; - q -= ((r != 0) & ((r ^ b) < 0)); - return q; -} - -/* None */ - static CYTHON_INLINE long __Pyx_mod_long(long a, long b) { - long r = a % b; - r += ((r != 0) & ((r ^ b) < 0)) * b; - return r; -} - /* FetchCommonType */ static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { PyObject* fake_module; @@ -17742,6 +18026,12 @@ static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { return (long) -1; } +/* CStringEquals */ + static CYTHON_INLINE int __Pyx_StrEq(const char *s1, const char *s2) { + while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; } + return *s1 == *s2; +} + /* CheckBinaryVersion */ static int __Pyx_check_binary_version(void) { char ctversion[4], rtversion[4]; diff --git a/CAStar.pyx b/CAStar.pyx index 8fcbfb8..2804016 100644 --- a/CAStar.pyx +++ b/CAStar.pyx @@ -1,22 +1,14 @@ #!python -#cython: boundscheck=False, wraparound=False +#cython: boundscheck=False, wraparound=False, infer_types=True,cdivision = True import os,pickle,heapq,time,math,hashlib -import numpy as np +from AATC_Coordinate import * try: _ = math.inf except: print("You do not have math.inf object, Python 3.5 onwards. Will use replacement.") - math.inf = 10**34 -class Coordinate: - def __init__(self,x,y,z=0,xSize=0,ySize=0,zSize=0): - self.x = x - self.y = y - self.z = z - self.xSize = xSize - self.ySize = ySize - self.zSize = zSize + math.inf = 10**20 class DynoGraph: """ Graph object @@ -46,32 +38,36 @@ class DynoGraph: self.xSize = xSize self.ySize = ySize self.zSize = zSize + + def Get_Size(self): + return self.xSize, self.ySize, self.zSize + def add_node(self,node): - self.Nodes[node.NodeID] = node + self.Nodes[node.Get_NodeID()] = node def clean_edges(self): print("Cleaning edges...") for item in self.Nodes.values(): for num in item.Friends: friend = self.Nodes[num] - if item.NodeID not in friend.Friends: - friend.add_friend(item.NodeID) + if item.Get_NodeID() not in friend.Friends: + friend.add_friend(item.Get_NodeID()) def Add_Edges(self,xRange,yRange,zRange): print("Adding edges...") - xCount = int(xRange/self.xSize) - yCount = int(yRange/self.ySize) - zCount = int(zRange/self.zSize) - self.xCount,self.yCount,self.zCount = xCount,yCount,zCount - - print("xCount:",xCount) - print("yCount:",yCount) - print("zCount:",zCount) + self.xCount = int(xRange/self.xSize) + self.yCount = int(yRange/self.ySize) + self.zCount = int(zRange/self.zSize) + + + print("xCount:",self.xCount) + print("yCount:",self.yCount) + print("zCount:",self.zCount) for node in self.Nodes.values(): - friends = self.CalculateNeighbours(node.NodeID,xCount,yCount,zCount) + friends = self.CalculateNeighbours(node.Get_NodeID(),self.xCount,self.yCount,self.zCount) for friend in friends: node.add_friend(friend) @@ -168,12 +164,12 @@ class DynoGraph: def Build_Node_Cache(self): self.Node_Cache = {} for node in self.Nodes.values(): - x = node.Coords.x + 0.25*self.xSize #Prevents floating point rounding errors - y = node.Coords.y + 0.25*self.ySize - z = node.Coords.z + 0.25*self.zSize + x = node.Coords.Get_X() + 0.25*self.xSize #Prevents floating point rounding errors + y = node.Coords.Get_Y() + 0.25*self.ySize + z = node.Coords.Get_Z() + 0.25*self.zSize mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) - self.Node_Cache[(mx,my,mz)] = node.NodeID + self.Node_Cache[(mx,my,mz)] = node.Get_NodeID() def Save_Node_Cache(self): print("Preparing to save Node Cache") @@ -215,8 +211,15 @@ class DynoGraph: def Direct_NodeID(self,x,y,z): return self.Get_Node_Cache(x,y,z) - def All_NodeIDs(self): - return self.Node_Cache.values() + def All_NodeIDs(self,StartValue = 1, MaxValue = None): + if MaxValue == None: + MaxValue = self.xCount*self.yCount*self.zCount + (StartValue-1) #Gets Maximum start value, StartValue gives the starting NodeID. -1 as x*y*z = max, if start at 1 and therefore xyz +1-1 = max value. XYZ as eg x=2,y=10,z=5 you will have 100 blocks ,starting at 1 so 100 is max. + + NodeIDList = [] + for NodeID in range(1,MaxValue+1): + NodeIDList.append(NodeID) + + return NodeIDList def Find_NodeID(self,x,y,z): mx,my,mz = self.MapHash(x,self.xSize),self.MapHash(y,self.ySize),self.MapHash(z,self.zSize) @@ -292,8 +295,8 @@ class DynoGraph: Sets[x] = {} #Creates sets for each block for node in self.Nodes.values(): - r = self.Hash(node.NodeID) - Sets[r][node.NodeID] = node + r = self.Hash(node.Get_NodeID()) + Sets[r][node.Get_NodeID()] = node for Set in Sets: #Set = BlockID @@ -306,6 +309,10 @@ class DynoGraph: def EvictNode(self,NodeID): #Removes a node from the Nodes dict if NodeID in self.Nodes: self.Nodes.pop(NodeID) + return True + else: + return False + class Node: @@ -317,6 +324,11 @@ class Node: def add_friend(self,friend): if friend not in self.Friends: self.Friends.append(friend) + + def Get_NodeID(self): + return self.NodeID + def Get_Friends(self): + return self.Friends def Get_Coords(self): return self.Coords def Get_Cost(self): @@ -364,9 +376,6 @@ def AStar2(graph, int start, int target): # Set all g to node_count + 1 g,f = {},{} current = -1 - for NodeID in graph.Nodes: - g[NodeID] = math.inf - f[NodeID] = math.inf g[start] = 0 f[start] = EstimateDistance(start,target,xCount,yCount,zCount,xSize,ySize,zSize) @@ -394,21 +403,18 @@ def AStar2(graph, int start, int target): # Set all g to node_count + 1 continue if NodeID not in OpenSet: OpenSet[NodeID] = 1 - - if NodeID not in g: #if not in g it is not yet in f also g[NodeID] = math.inf f[NodeID] = math.inf Node = graph.GetNode(NodeID) - gNode = g[NodeID] tScore = g[current]+ Node.Cost - if tScore >= gNode: + if tScore >= g[NodeID]: continue cameFrom[NodeID] = current g[NodeID] = tScore f[NodeID] = g[NodeID] + EstimateDistance(NodeID,target,xCount,yCount,zCount,xSize,ySize,zSize) EndTime = time.time() - print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds") + print("[A* Time] "+str((EndTime-StartTime)*1000)+" Milliseconds."+" Total Expanded:"+str(len(cameFrom))) if Found: return FindPath(cameFrom,current) else: @@ -417,12 +423,12 @@ def AStar2(graph, int start, int target): # Set all g to node_count + 1 return None -def FindPath(cameFrom,current): +cdef FindPath(dict cameFrom, int current): + cdef list path path = [current] while current in cameFrom: current = cameFrom[current] path.append(current) - print("Total expanded:"+str(len(cameFrom))) return path diff --git a/CAStar.so b/CAStar.so index 7ca0cac50cc6fd42d9ef9e2cae48180d1156d256..dfb205dca0115efed9f5ca144d939f296d9c3bb6 100644 GIT binary patch literal 299260 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 literal 297940 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

E$x-XGJKvbeKcfC|CRDEC;WZ&lcuNk&K}qQ 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 F`#%7