def init_kb(width, matrix, cellVectorX, cellVectorY):

  log_to_terminal("Initializing KB...")
  
  if global_vars.LOG_KB:
    log_kb()
  
  reset_prolog_files(cellVectorX, cellVectorY)
  
  doors = [[]]
  dyn_nodes = []
  room_list = []
  
  print "resetted prolog"
  
  for i in xrange(len(matrix)):
    if (matrix[i] != "0"):
      room_tag, obj_tag, door_adj, obj_par      = matrix[i].split(";")
      obj_list                                  = obj_tag.split("#")
      par_list                                  = obj_par.split("#")
      door_map                                  = {}
      column                                    = int(i % width)
      row                                       = int(i / width)
      
      if(room_tag != "0"):
        if not (room_tag in room_list):
          room_list.append(room_tag)
        
        logic_form = "cellCoordIsPartOf(%s,%s,%s)"%(column,row,room_tag)
        global_vars.prolog_files["cells"].write(logic_form + ".\n")

      if (obj_tag != "0"):
        for index in xrange(len(obj_list)):
          learn(room_tag, obj_list[index], par_list[index], column, row)
          
          #if ("room_center" in obj_list[index]):
            #logic_form = "dyn_node(%s_center,%s,%s)"%(room_tag,column,row)
            #global_vars.prolog_files["graph"].write(logic_form + ".\n")
            #dyn_nodes.append(room_tag)
          #else:
    
      if (door_adj != "false#false#false#false"):
        doors.append(["%s#%s%s"%(room_tag,column,row),column,row])
  
  print "processed all the cells"
  
  global_vars.prolog_files["cells"].flush()
  global_vars.prolog_load_handle("cells.pl")
  
  calculate_and_assert_rooms_center_and_type(room_list)
  global_vars.prolog_load_handle("rooms.pl")

  write_doors_to_file(doors)
  create_topological_graph(room_list, doors)
  flush_prolog_files()

  global_vars.prolog_load_handle("graph.pl")
  
  global_vars.old_matrix = matrix  
  log_to_terminal("Done Initializing KB")
  
  if global_vars.DRAW_GRAPH:
    drawGraph()
def reset_prolog_files(cellVectorX, cellVectorY):
    for key in global_vars.prolog_files.keys():
        if os.path.exists(key + ".pl") and key != "old_objects" and key != "plans":
            os.remove(key + ".pl")
        global_vars.prolog_files[key] = open(key + ".pl", "a")

        if key == "rooms":
            global_vars.prolog_files[key].write(":- dynamic roomType/2, roomCenter/3.\n")
        elif key == "objects":
            global_vars.prolog_files[key].write(
                ":- dynamic objectPos/4, objectType/2, objectLastSeen/2, objectAngle/2.\n"
            )
        elif key == "graph":
            global_vars.prolog_files[key].write(":- dynamic edge/2, dyn_node/3, stat_node/3.\n")
        elif key == "centroids":
            for i in xrange(len(cellVectorX)):
                for j in xrange(len(cellVectorY)):
                    global_vars.prolog_files[key].write(
                        "cellCenterInMap(%s,%s,%s,%s).\n" % (i, j, cellVectorX[i], cellVectorY[j])
                    )

        global_vars.prolog_files[key].flush()

    global_vars.prolog_load_handle("centroids.pl")
    global_vars.prolog_load_handle("plans.pl")
    global_vars.prolog_load_handle("searchGraph.pl")
    global_vars.prolog_load_handle("cone_based_reasoner.pl")
    global_vars.prolog_load_handle("logicalFormTranslator.pl")
    global_vars.prolog_load_handle("plan_reasoner.pl")
def reset_prolog_files(cellVectorX, cellVectorY):
    for key in global_vars.prolog_files.keys():
        if (os.path.exists(key + ".pl") and key != "old_objects"
                and key != "plans"):
            os.remove(key + ".pl")
        global_vars.prolog_files[key] = open(key + ".pl", 'a')

        if key == "rooms":
            global_vars.prolog_files[key].write(
                ":- dynamic roomType/2, roomCenter/3.\n")
        elif key == "objects":
            global_vars.prolog_files[key].write(
                ":- dynamic objectPos/4, objectType/2, objectLastSeen/2, objectAngle/2.\n"
            )
        elif key == "graph":
            global_vars.prolog_files[key].write(
                ":- dynamic edge/2, dyn_node/3, stat_node/3.\n")
        elif key == "centroids":
            for i in xrange(len(cellVectorX)):
                for j in xrange(len(cellVectorY)):
                    global_vars.prolog_files[key].write(
                        "cellCenterInMap(%s,%s,%s,%s).\n" %
                        (i, j, cellVectorX[i], cellVectorY[j]))

        global_vars.prolog_files[key].flush()

    global_vars.prolog_load_handle("centroids.pl")
    global_vars.prolog_load_handle("plans.pl")
    global_vars.prolog_load_handle("searchGraph.pl")
    global_vars.prolog_load_handle("cone_based_reasoner.pl")
    global_vars.prolog_load_handle("logicalFormTranslator.pl")
    global_vars.prolog_load_handle("plan_reasoner.pl")