def sanity_check()

in design_utils/design.py [0:0]


    def sanity_check(self):
        insanity_list = [] # list of Inanities

        # fronts check
        fronts_1 = sum([len(block.get_fronts("task_name_dir")) for block in self.get_blocks() if block.type == "mem"])
        fronts_2 = sum([len(block.get_fronts("task_dir_work_ratio")) for block in self.get_blocks() if block.type== "mem"])
        if not fronts_1 == fronts_2:
            pre_mvd_fronts_1 = [block.get_fronts("task_name_dir") for block in self.get_blocks() if block.type == "mem"]
            pre_mvd_fronts_2 = [block.get_fronts("task_dir_work_ratio") for block in self.get_blocks() if block.type == "mem"]
            raise UnEqualFrontsError

        # all the tasks have pe and mem
        for task in self.get_tasks():
            pe_blocks = self.get_blocks_of_task_by_block_type(task, "pe")
            mem_blocks = self.get_blocks_of_task_by_block_type(task, "mem")
            if len(pe_blocks) == 0:
                print("task:" + task.name + " does not have any pes")
                insanity = Insanity("_", "_", "none")
                insanity.set_block("_")
                insanity.set_name("no_pe")
                insanity_list.append(insanity)
                pe_blocks = self.get_blocks_of_task_by_block_type(task, "pe")
                print(insanity.gen_msg())
                raise NoPEError
                #break
            elif (len(mem_blocks) == 0 and not("siink" in task.name)):
                print("task:" + task.name + " does not have any mems")
                insanity = Insanity("_", "_", "none")
                insanity.set_block("_")
                insanity.set_name("no_mem")
                insanity_list.append(insanity)
                print(insanity.gen_msg())
                mem_blocks = self.get_blocks_of_task_by_block_type(task, "mem")
                raise NoMemError
                #break

        # every pe or memory needs to be connected to a bus
        for block in self.get_blocks():
            if block.type in ["pe", "mem"]:
                connectd_ics = [True  for block_ in block.get_neighs() if block_.type =="ic" ]
                if len(connectd_ics) > 1:
                    print("block: " + block.instance_name + " is connected to more than one ic")
                    insanity = Insanity("_", "_", "multi_bus")
                    insanity.set_name("multi_bus")
                    insanity_list.append(insanity)
                    print(insanity.gen_msg())
                    raise MultiBusBlockError
                    #break
                elif len(connectd_ics) < 1:
                    print("block: " + block.instance_name + " is not connected any ic")
                    insanity = Insanity("_", "_", "none")
                    insanity.set_block(block)
                    insanity.set_name("no_bus")
                    insanity_list.append(insanity)
                    print(insanity.gen_msg())
                    raise NoBusError
                    #break

        # every bus needs to have at least one pe and mem
        for block in self.get_blocks():
            if block.type in ["ic"]:
                connectd_pes = [True  for block_ in block.get_neighs() if block_.type =="pe" ]
                connectd_mems = [True  for block_ in block.get_neighs() if block_.type =="mem" ]
                connectd_ics = [True  for block_ in block.get_neighs() if block_.type =="ic" ]

                system_ic_exist = self.check_system_ic_exist(block)

                if len(connectd_mems) == 0 and not system_ic_exist:
                    insanity = Insanity("_",block, "bus_with_no_mem")
                    print(insanity.gen_msg())
                    if self.hardware_graph.generation_mode == "user_generated":
                        print("deactivated Bus with No memory error, since hardware graph was directly user generated/parsed ")
                    else:
                        raise BusWithNoMemError
                    """
                    elif len(connectd_pes) > 0 and self.block_is_system_ic(block):
                        insanity = Insanity("_", block, "system_ic_with_pe")
                        insanity_list.append(insanity)
                        print(insanity.gen_msg())
                        if self.hardware_graph.generation_mode == "user_generated":
                            print(
                                "deactivated Bus with No Bus error, since hardware graph was directly user generated/parsed ")
                        else:
                            raise SystemICWithPEException
                    """
                elif len(connectd_pes) == 0 and not self.block_is_system_ic(block):
                    insanity = Insanity("_", block, "bus_with_no_pes")
                    insanity_list.append(insanity)
                    print(insanity.gen_msg())
                    if self.hardware_graph.generation_mode == "user_generated":
                        print("deactivated Bus with No Bus error, since hardware graph was directly user generated/parsed ")
                    else:
                        raise BusWithNoPEError
        # every design needs to have at least on pe, mem, and bus
        block_type_count_dict = {}
        block_type_count_dict["mem"] = 0
        block_type_count_dict["pe"] = 0
        block_type_count_dict["ic"] = 0
        for block in self.get_blocks():
            block_type_count_dict[block.type] +=1
        for type_, count in block_type_count_dict.items():
            if count < 1:
                print("no block of type " + type_ + " found")
                insanity = Insanity("_", "_", "none")
                insanity.set_name("not_enough_ip_of_certain_type")
                insanity_list.append(insanity)
                print(insanity.gen_msg())
                raise NotEnoughIPOfCertainType
                #break

       # every block should host at least one task
        for block in self.get_blocks():
            if block.type == "ic":   # since we unload
                continue
            if len(block.get_tasks_of_block()) == 0:
                print( "block: " + block.instance_name + " does not host any tasks")
                insanity = Insanity("_", "_", "none")
                insanity.set_block(block)
                insanity.set_name("no_task")
                insanity_list.append(insanity)
                print(insanity.gen_msg())
                raise BlockWithNoTaskError