def get_sig(self, trajec): max_sigdim = getattr(self, "max_sigdim") if max_sigdim is None: raise ValueError("hyperparameter needed: 'max_sigdim'") return pathsig.stream2logsig(trajec, self.max_sigdim)
def Logsigastensor(array, degree): logsig = ts.stream2logsig(array, degree) dimension = len(array[0]) M = changeofbasis(dimension, degree) result = np.dot(logsig, M) return result
def categorical_path_sig(node_index, mol, adjacent_matrix, index_map, L, cat_dim, sig_deg, flag): """function will output the signatures/logsignatures of categorical path of a node up to radius L input: node_index adjacent matrix mol:molecule information dictionary index_map: a dictionary assign atom labels to each index of categorical path L: radius around the node cat_dim: number of atom types sig_deg:degree of signature flag: 0 return signature, 1 return log-signature output: signatures/logsignatures of the all categorical paths of the node up to length L has shape (m,n), m depends on the number of paths at each L, n depends on the cat_dim and sig_deg """ sig_dim = ts.sigdim(cat_dim, sig_deg) logsig_dim = ts.logsigdim(cat_dim, sig_deg) signatures = None log_signatures = None if (flag == 0): for i in range(L): paths = get_paths(node_index, adjacent_matrix, i + 1) num_path = len(paths) paths_sig = np.zeros([num_path, sig_dim], dtype=float) k = 0 for path in paths: mat = categorical_path(path, mol, cat_dim, index_map, i) paths_sig[k, ] = ts.stream2sig(np.transpose(mat), sig_deg) k = k + 1 if signatures is None: signatures = paths_sig else: signatures = np.concatenate(([signatures, paths_sig]), axis=0) return (signatures) elif (flag == 1): for i in range(L): paths = get_paths(node_index, adjacent_matrix, i + 1) num_path = len(paths) paths_logsig = np.zeros([num_path, logsig_dim], dtype=float) k = 0 for path in paths: mat = categorical_path(path, mol, cat_dim, index_map, i) paths_logsig[k, ] = ts.stream2logsig(np.transpose(mat), sig_deg) k = k + 1 if log_signatures is None: log_signatures = paths_logsig else: log_signatures = np.concatenate( ([log_signatures, paths_logsig]), axis=0) return log_signatures
def coordinate_path_sig(node_index, mol, adjacent_matrix, L, sig_deg, flag): """ function will output the signatures/logsignatures of coordinate path of a node up to radius L Input: node_index: starting node adjacent_matrix: the matrix shows the connection between atoms mol:molecule information dictionary L: length of path sig_deg: degree of signature flag: 0 return signature, 1 return log_signature output: signatures/logsignatures of the all coordinate paths of the node up to length L has shape (m,n), m depends on the number of paths at each L, n= sig_dim/logsig_dim """ sig_dim = ts.sigdim(3, sig_deg) logsig_dim = ts.logsigdim(3, sig_deg) signatures = None log_signatures = None if (flag == 0): for i in range(L): paths = get_paths(node_index, adjacent_matrix, i + 1) num_path = len(paths) paths_sig = np.zeros([num_path, sig_dim]) #paths_logsig = np.zeros([num_path, logsig_dim]) k = 0 for path in paths: temp = np.zeros([len(path), 3]) for j in range(len(path)): temp[j, :] = mol['atoms'][path[j]].features paths_sig[k, ] = ts.stream2sig(temp, sig_deg) #paths_logsig[k,] = ts.stream2logsig(temp, sig_deg) k = k + 1 if signatures is None: signatures = paths_sig else: signatures = np.concatenate(([signatures, paths_sig]), axis=0) return (signatures) if (flag == 1): for i in range(L): paths = get_paths(node_index, adjacent_matrix, i + 1) num_path = len(paths) paths_logsig = np.zeros([num_path, logsig_dim]) k = 0 for path in paths: temp = np.zeros([len(path), 3]) for j in range(len(path)): temp[j, :] = mol['atoms'][path[j]].features paths_logsig[k, ] = ts.stream2logsig(temp, sig_deg) k = k + 1 if log_signatures is None: log_signatures = paths_logsig else: log_signatures = np.concatenate( ([log_signatures, paths_logsig]), axis=0) return log_signatures
def run_esig(A,n,m,deg,islog): m = int(m) # m is the dimension n = int(n) islog = int(islog) deg = int(deg) B = np.reshape(A,(n,m),order='F') siglength = siglen(m,deg,islog); sigmat = np.zeros((1,siglength)) if islog: sigmat[0,:] = ts.stream2logsig(B,deg) else: sigmat[0,:] = ts.stream2sig(B,deg) return(sigmat)
def embed(self, data): return ts.stream2sig(data.concat_drawing(), self.degree) if not self.log else ts.stream2logsig(data.concat_drawing(), self.degree)
def get_sig(self, path, map): if isinstance(path, np.ndarray): return pathsig.stream2logsig(path, self.max_sigdim) elif path == []: return []
def _logsig(self, path): return tosig.stream2logsig(path, self.order)
def logsignature(self, order): return tosig.stream2logsig(self.path, order)
def compute_log_signature(self, stream, depth): return tosig.stream2logsig(stream, depth)
def signature(self, degree, log=False): return ts.stream2sig(self.concat_drawing(), degree) if not log else ts.stream2logsig( self.concat_drawing(), degree)