def biosystem_update_cache(biosystem, record): """ This function will check and update the biosystem :param record - The record of simulation : """ # Auto cache size control. if not os.path.exists("../cache"): os.mkdir("../cache") # There may be IO-async Error, rare but once happened try: cache_files = os.listdir('../cache') dir_size = sum(map(os.path.getsize, cache_files)) cache_files_size = map(os.path.getsize, cache_files) sdict = dict([[cache_files[i], cache_files_size[i]] for i in range(len(cache_files))]) if DEBUG: print debug_info('size of cache'), dir_size cache_files.sort(cache_files, key=lambda x:sdict[x]) while dir_size > 100 * 1000 * 1000: os.remove(cache_files[0]) del cache_files[0] except OSError: pass # our algorithm network_hash = BioSystemNetwork(biosystem).network_hash f_name = '../cache/%d.json' % network_hash if not os.path.exists(f_name): fp = open(f_name, 'w+') json.dump(record, fp) fp.close()
def compare_biosystem(biosystem1, biosystem2): """ Compare two biosystem. If same return True otherwise False """ if biosystem1['system_parameter']['time'] != biosystem2['system_parameter']['time']: return False list1, list2 = map(hash_gates_and_simulation, (biosystem1, biosystem2)) if DEBUG: print debug_info(), list1, list2 if sorted(list1) != sorted(list2): return False net1, net2 = map(BioSystemNetwork, (biosystem1, biosystem2)) return sorted(net1.reaction_lines_hash) == sorted(net2.reaction_lines_hash)
def __init__(self, biosystem): self.vertex = self.reconstruct_arcs(biosystem) if DEBUG: print debug_info('reconstructed_arcs'), self.vertex self.reaction_lines = [] self.resolve_biosystem_net(self.vertex) if DEBUG: print debug_info('BioNetwork_lines'), self.reaction_lines self.reaction_lines_hash = hash_list(self.reaction_lines) if DEBUG: print debug_info('BioNetwork_lines_hash'), self.reaction_lines_hash self.network_hash = hash(dump_ord(sorted(self.reaction_lines_hash))) + biosystem['system_parameter']['time'] if DEBUG: print debug_info('BioNetwork_hash'), self.network_hash
def test_reaction(self): print debug_info('Test self') print hash_list([{'a': 43.5}, {46: '77y'}, {65.6: 7}]) hash_string_list(['zhang hao', 'cuitianyi', 'zhuangsiyuan']) self.assertEqual(hash_dict({1: 2, 3: 4}), hash_dict({3: 4, 1: 2}))