def main(): """Main CLI function :returns: TODO """ global debug_mode global start_time cli_args = __parse_arguments() if cli_args.version: status("Current version {0}".format(__version__)) return 0 messages.debug_mode = cli_args.verbose messages.quiet = cli_args.quiet messages.logger = cli_args.logger action = "" # While True is always a bad idea while action.upper() != "E": action = input(MAIN_MENU) if action == "1": create_record() elif action == "2": print_to_console() elif action == "3": update_record() elif action == "4": delete_record() elif action.upper() != "E": print("Sin acción en {action}".format(action=action))
def main(): """Main CLI function :returns: TODO """ global debug_mode global start_time cli_args = __parse_arguments() if cli_args.version: status("Current version {0}".format(__version__)) return 0 messages.debug_mode = cli_args.verbose messages.quiet = cli_args.quiet messages.logger = cli_args.logger menu_choice = 0 print_menu() while menu_choice != 5: menu_choice = int(input("Ingresa un numero (1-5): ")) if menu_choice == 1: procesar1() elif menu_choice == 2: procesar2('samples/kroA100.txt') elif menu_choice == 3: procesar2('samples/kroA150.txt') elif menu_choice == 4: procesar2('samples/kroA200.txt') elif menu_choice != 5: print_menu()
def main(): """Main function """ global debug_mode global start_time cli_args = __parse_arguments() if cli_args.version: status("Current version {0}".format(__version__)) return 0 messages.debug_mode = cli_args.verbose messages.quiet = cli_args.quiet messages.logger = cli_args.logger start_time = time.time() if cli_args.test == "1M" or cli_args.test == "all": _multi_length(cli_args.override) if cli_args.test == "100" or cli_args.test == "all": _same_size_length(cli_args.override) final_time = str(time.time() - start_time) status("Final time {0}".format(final_time))
def _update_field(self, register): """Update a specific field of the register :register: TODO :returns: TODO """ status("Please select the field you want to update") valid = False while not valid: answer = input("""Please select a valid option: 1) Last name 2) Address 3) Cellphone 4) Email 5) Social Network 6) All : """) try: value = int(answer) if value < 1 or value > 6: error("Not a valid option {0}".format(value)) continue hashvalue = self.hashfunction(register.name) if value == 6: register.last_name = input("Enter last name: ") register.address = input("Enter address: ") register.cellphone = input("Enter cellphone: ") register.email = input("Enter email address: ") register.social_network = input("Enter social network: ") else: if value == 1: self.last_names[register.last_name].remove(hashvalue) register.last_name = input("enter last name: ") if register.last_name not in self.last_names: self.last_names[register.last_name] = [hashvalue] else: self.last_names[register.last_name].append( hashvalue) elif value == 2: register.address = input("Enter address: ") elif value == 3: self.numbers.pop(register.cellphone, None) register.cellphone = input("Enter cellphone: ") self.numbers[register.cellphone] = hashvalue elif value == 4: register.email = input("Enter email address: ") elif value == 5: register.social_network = input( "Enter social network: ") valid = True except Exception: error("Please select a valid option from the menu from 1 to 6") return register
def insert(self, register=None): """TODO: Docstring for insert. :register: TODO :returns: TODO """ if register is None: valid = False while not valid: name = input("Enter name: ") last_name = input("Enter last name: ") address = input("Enter address: ") cellphone = input("Enter cellphone: ") if cellphone in self.numbers: error("This cellphone is already in use") continue valid = True email = input("Enter email address: ") social_network = input("Enter social network: ") register = self.Register(name, last_name, address, cellphone, email, social_network) rc = False start = time() hashvalue = self.hashfunction(register.name) isEmpty = False # TODO: This must be changed for the tree if len(self.container[hashvalue]) == 0: isEmpty = True # TODO: This must be changed for the tree self.container[hashvalue][register.name] = register self.numbers[register.cellphone] = hashvalue if register.last_name not in self.last_names: self.last_names[register.last_name] = [hashvalue] else: self.last_names[register.last_name].append(hashvalue) if not isEmpty: self.collisions[hashvalue] += 1 verbose("Collisions in container {0}: {1}".format( hashvalue, self.collisions[hashvalue])) rc = True status("Register inserted") end = time() verbose("Insertion time {0}".format(end - start)) return rc
def main(): """Main CLI function :returns: TODO """ global debug_mode global start_time cli_args = __parse_arguments() if cli_args.version: status("Current version {0}".format(__version__)) return 0 messages.debug_mode = cli_args.verbose messages.quiet = cli_args.quiet messages.logger = cli_args.logger if cli_args.hash == 1: hashfunction = hashAscii else: hashfunction = hashBase64 verbose("Hash function {0}".format(repr(hashfunction.__name__))) action = "" table = HashDataBase(hashfunction=hashfunction, json_db=cli_args.json) # While True is always a bad idea while action.upper() != "E": action = input(MAIN_MENU) if action == "1": table.insert() elif action == "2": result = table.search() if result is not None and len(result) == 0: status("Register: {0}".format(result)) elif result is not None and len(result) > 0: for item in result: status("Register: {0}".format(item)) else: error("Element was not found") elif action == "3": table.update() elif action == "4": table.delete() elif action == "5": for item in table.container: for name, register in item.items(): status("Register: {0}".format(register)) elif action.upper() != "E": status("Sin acción en {action}".format(action=action))
def get_array(filename="", size=None): """TODO: Docstring for get_array. :size: TODO :returns: TODO """ if filename == "": filename = get_filename(size) + ".txt" array = None with open(filename, "r") as data: status("Searching in {0}".format(filename)) array = data.read() array = array.split(",") return array
def update(self, register=None, name=None, last_name=None, cellphone=None): """TODO: Docstring for insert. :register: TODO :returns: TODO """ selected_type = -1 if register is None and name is None and last_name is None and cellphone is None: parameter, selected_type = self._select_search_type() elif register is not None: parameter = register.name selected_type = 0 elif name is not None: parameter = name selected_type = 0 elif last_name is not None: parameter = last_name selected_type = 1 elif cellphone is not None: parameter = cellphone selected_type = 2 rc = False start = time() hashvalue = self.hashfunction(parameter, selected_type) # register = self.container[hashvalue].search(parameter, selected_type) if parameter in self.container[hashvalue]: register = self.container[hashvalue][parameter] register = self._update_field(register) self.container[hashvalue][parameter] = register status("Register updated") else: # if register is None: error("{0} doesn't exists".format(parameter, selected_type)) # else: # pass end = time() verbose("Update time {0}".format(end - start)) return rc
def _delete_register(self, register, hashvalue): """TODO: Docstring for _delete_register. :register: TODO :returns: TODO """ # TODO: This must be changed for the tree self.container[hashvalue].pop(register.name, None) if self.collisions[hashvalue] > 0: self.collisions[hashvalue] -= 1 self.numbers.pop(register.cellphone, None) for container in self.last_names[register.last_name]: if container == hashvalue: self.last_names[register.last_name].remove(hashvalue) break verbose("Collisions in container {0}: {1}".format( hashvalue, self.collisions[hashvalue])) status("Register deleted: {0}".format(register))
def start(self): """Look for the next triplet of numbers :returns: Tuple, Returns a tuple with a vector of the 3 numbers and the updated dictionary, And empty vector is return if no triplet was found """ start_time = time.time() while not self.done: self.done = True for item in range(-100, 101): # Check whether or not we have elements in the next number if self.tree[item] > 0: verbose("Looking triplet for {0} with {1} elements".format( item, self.tree[item])) usable = self._find_triplet(item, item * -1) if not usable: verbose("No triplet found for {0}".format(item)) else: verbose("Skipping {0}: {1}".format(item, self.tree[item])) end_time = time.time() self.time = end_time - start_time status("End time of {0}. {1} different triplets found".format( self.time, len(self.triplets))) # Save time by not doing this shit if is not debug mode if messages.debug_mode: total = 0 verbose("Unpaird numbers") for key in range(-100, 101): value = self.tree[key] if value > 0: total += value verbose("Key: {0}; Value: {1}".format(key, value)) verbose("Total {0}".format(total))