def TQtwo2oneRows(self):
        nr,nc = self._graph['dim']
        C = Graph(); C._graph['mode'] = 1; C._graph['nNodes'] = nr
        for v in range(nr):
            C.addNode(v+1,1); C._nodes[v+1][3] = dict(self._nodes[v+1][3])
        for t in self.nodesMode(2):
            for p in self.inStar(t):
                u = self.twin(t,p); Apw = self._links[p][4]['tq']
                for q in self.inStar(t):
                    v = self.twin(t,q); r = (u,v)
                    if not r in C._links: C._links[r] = \
                       [ u, v, True, None, {'tq': []} ]
                    C._links[r][4]['tq'] = TQ.TQ.sum(C._links[r][4]['tq'],
                       TQ.TQ.prod(Apw,self._links[q][4]['tq']))
        return C
    def TQtwo2oneCols(self,lType='edge',key='tq'):
        nr,nc = self._graph['dim']
        C = Graph(); C._graph['mode'] = 1; C._graph['nNodes'] = nc
        C._graph['temporal'] = True; C._graph['simple'] = True
        C._graph['network'] = self._graph['network']+'COLS'
        C._graph['title'] = 'COLS of '+self._graph['title']
        C._graph['time'] = self._graph['time']
        if 'legends' in self._graph: C._graph['legends']['Tlabs'] = \
            self._graph['legends']['Tlabs']
        C._graph['meta'] = self._graph['meta']
        C._graph['required'] = self._graph['required']
        C._graph['multirel'] = self._graph['multirel']
        for v in range(nc):
            C.addNode(v+1,1); C._nodes[v+1][3] = dict(self._nodes[nr+v+1][3])
            C._nodes[v+1][3]['mode'] = 1
        for t in self.nodesMode(1):
            for p in self.outStar(t):
                u = self.twin(t,p)-nr; Apw = self._links[p][4][key]
                for q in self.outStar(t):
                    v = self.twin(t,q)-nr
                    if u<=v:
                        r = (u,v)
                        if lType=='edge':
                            if not r in C._links:
                                C.addEdge(u,v,lid=r,w={key: []})
                            s = TQ.TQ.prod(Apw,self._links[q][4][key])
                            if u!=v: s = TQ.TQ.sum(s,s)
                            C._links[r][4][key] = TQ.TQ.sum(C._links[r][4][key],s)
                        else:
                            if not r in C._links:
                                C.addArc(u,v,lid=r,w={key: []})
                            s = TQ.TQ.prod(Apw,self._links[q][4][key])
                            C._links[r][4][key] = TQ.TQ.sum(C._links[r][4][key],s)
                            if u!=v:
                                rr = (v,u)
                                if not rr in C._links:
                                    C.addArc(v,u,lid=rr,w={key: []})
                                C._links[rr][4][key] = C._links[r][4][key] 
        return C
    def TQmultiply(A,B,oneMode=False):
        nar,nac = A._graph['dim']; nbr,nbc = B._graph['dim']
        if nac != nbr: raise Graph.graphError(
            "Noncompatible networks {0} != {1}".format(nac,nbr))
        if oneMode and (nar != nbc): raise Graph.graphError(
            "Product is not a one-mode network {0} != {1}".format(nar,nbc))
        C = Graph(); C._graph['mode'] = 2; C._graph['dim'] = [nar,nbc]
        for v in range(nar):
            C.addNode(v+1,1); C._nodes[v+1][3] = dict(A._nodes[v+1][3])
        if not oneMode:
            for v in range(nar,nar+nbc):
                C.addNode(v+1,2)
                C._nodes[v+1][3] = dict(B._nodes[v+1+nbr-nar][3])
        for t in A.nodesMode(2):
            for p in A.inStar(t):
                u = A.twin(t,p); Apw = A._links[p][4]['tq']
                for q in B.outStar(t-nar):
                    v = B.twin(t-nar,q)-nbr
                    if not oneMode: v = v+nar
                    r = (u,v)
                    if not r in C._links: C._links[r] = \
                       [ u, v, True, None, {'tq': []} ]
                    C._links[r][4]['tq'] = TQ.TQ.sum(C._links[r][4]['tq'],
                       TQ.TQ.prod(Apw,B._links[q][4]['tq']))
        return C
tq/print/t1.txt · Last modified: 2016/10/26 15:30 by vlado
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki