Пример #1
0
    def _flatten_structures(self):
        c_specs, self.edges, self.weights, self.einstrs, self.einpaths = [], [], [], [], []
        ks = {}

        # handle n=1 case specially
        c_specs.append([1,0,0,0,0,1,1,0])
        self.edges.append(())
        self.weights.append(())
        self.einstrs.append(self.einstrs_d[(1,0)][0])
        self.einpaths.append(self.einpaths_d[(1,0)][0])

        for ne in sorted(self.edges_d.keys()):
            n, e = ne
            z = zip(self.edges_d[ne], self.weights_d[ne], self.chis_d[ne],
                    self.einstrs_d[ne], self.einpaths_d[ne])
            for edgs, ws, c, es, ep in z:
                for w in ws:
                    d = sum(w)
                    k = ks.setdefault((n,d), 0)
                    ks[(n,d)] += 1
                    vs = valencies(EFP(edgs, weights=w).graph).values()
                    v = max(vs)
                    h = Counter(vs)[1]
                    c_specs.append([n, e, d, v, k, c, 1, h])
                    self.edges.append(edgs)
                    self.weights.append(w)
                    self.einstrs.append(es)
                    self.einpaths.append(ep)
        self.c_specs = np.asarray(c_specs)
Пример #2
0
 def _generate_efms(self):
     self.efm_einstrs, self.efm_specs, self.efm_einpaths = [], [], []
     if self.gen_efms:
         for edgs,ws in zip(self.edges, self.weights):
             einstr, efm_spec = efp2efms(EFP(edgs, weights=ws).graph)
             self.efm_einstrs.append(einstr)
             self.efm_specs.append(efm_spec)
             self.efm_einpaths.append(np.einsum_path(einstr, 
                                                     *[np.empty([4]*sum(s)) for s in efm_spec],
                                                     optimize=self.ve.np_optimize)[0])