Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
def Logsigastensor(array, degree):
    logsig = ts.stream2logsig(array, degree)
    dimension = len(array[0])
    M = changeofbasis(dimension, degree)
    result = np.dot(logsig, M)

    return result
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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)
Ejemplo n.º 7
0
 def get_sig(self, path, map):
     if isinstance(path, np.ndarray):
         return pathsig.stream2logsig(path, self.max_sigdim)
     elif path == []:
         return []
Ejemplo n.º 8
0
 def _logsig(self, path):
     return tosig.stream2logsig(path, self.order)
Ejemplo n.º 9
0
 def logsignature(self, order):
     return tosig.stream2logsig(self.path, order)
Ejemplo n.º 10
0
 def compute_log_signature(self, stream, depth):
     return tosig.stream2logsig(stream, depth)
Ejemplo n.º 11
0
 def signature(self, degree, log=False):
     return ts.stream2sig(self.concat_drawing(),
                          degree) if not log else ts.stream2logsig(
                              self.concat_drawing(), degree)