未验证 提交 8594fa23 编写于 作者: rictjo's avatar rictjo 提交者: GitHub

Update convert.py

上级 20e34b0d
...@@ -417,7 +417,7 @@ class NodeGraph ( Neuron ) : ...@@ -417,7 +417,7 @@ class NodeGraph ( Neuron ) :
def calculate_adjacency_matrix( self , bSparse:bool = False , def calculate_adjacency_matrix( self , bSparse:bool = False ,
analyte_identifier:str = None , analyte_identifier:str = None ,
analyte_adjacency_level:int = None, analyte_adjacency_level:int = None,
linktypes:list[str] = [ 'links' , 'ascendants' , 'descendants' ] ) -> dict : linktypes:list[str] = [ 'ascendants' , 'descendants' ] ) -> dict :
# #
# IF ANALYTE IDENTIFIER IS PASSED THEN CONSTRUCT THE # IF ANALYTE IDENTIFIER IS PASSED THEN CONSTRUCT THE
# ANALYTE ADJACENCY MATRIX AT A SPECIFIED LEVEL # ANALYTE ADJACENCY MATRIX AT A SPECIFIED LEVEL
...@@ -428,14 +428,7 @@ class NodeGraph ( Neuron ) : ...@@ -428,14 +428,7 @@ class NodeGraph ( Neuron ) :
# DEFAULT: CONSTRUCT NODE TO NODE (CLUSTERS) LINK ADJACENCY MATRIX # DEFAULT: CONSTRUCT NODE TO NODE (CLUSTERS) LINK ADJACENCY MATRIX
# WE DONT ENFORCE SYMMETRY # WE DONT ENFORCE SYMMETRY
# #
def unravel( seq:list ) -> list :
if isinstance( seq , (list) ):
yield from (x for y in seq for x in unravel(y))
else:
yield seq
graph = self.get_graph() graph = self.get_graph()
if analyte_identifier is None or analyte_adjacency_level is None : if analyte_identifier is None or analyte_adjacency_level is None :
names = list(self.keys()) names = list(self.keys())
Nn = len(names) Nn = len(names)
...@@ -445,13 +438,19 @@ class NodeGraph ( Neuron ) : ...@@ -445,13 +438,19 @@ class NodeGraph ( Neuron ) :
else : else :
amat = np.zeros(Nn*Nn).reshape(Nn,Nn) amat = np.zeros(Nn*Nn).reshape(Nn,Nn)
for name in names : for name in names :
LINKS = [] for linktype in linktypes:
for linktype in linktypes : # WRONG BOOK-KEEPING HERE for link in graph[name].get_links(linktype) :
LINKS.append( graph[name].get_links(linktype) ) i = lookup[name]
for link in list(unravel(LINKS)): j = lookup[link]
i = lookup[name] if i == j :
j = lookup[link] continue
amat[i,j] = 1 if linktype == 'ascendants':
amat[j,i] = 1
if linktype == 'descendants':
amat[i,j] = 1
if linktype == 'links':
amat[j,i] = 1
amat[i,j] = 1
else : else :
level = analyte_adjacency_level level = analyte_adjacency_level
root_data = graph[ self.get_root_id() ].get_data() root_data = graph[ self.get_root_id() ].get_data()
...@@ -468,19 +467,24 @@ class NodeGraph ( Neuron ) : ...@@ -468,19 +467,24 @@ class NodeGraph ( Neuron ) :
else : else :
amat = np.zeros(Nn*Nn).reshape(Nn,Nn) amat = np.zeros(Nn*Nn).reshape(Nn,Nn)
for name in nnames : for name in nnames :
LINKS = [] for linktype in linktypes :
for linktype in linktypes : # WRONG BOOK-KEEPING HERE for link in graph[name].get_links(linktype) :
LINKS.append( graph[name].get_links(linktype) ) i_names = graph[ name ].get_data()[ analyte_identifier ]
for link in list(unravel(LINKS)): j_names = graph[ link ].get_data()[ analyte_identifier ]
i_names = graph[ name ].get_data()[ analyte_identifier ] if (graph[ link ].level()==level or graph[name].level()==level) or level<0 :
j_names = graph[ link ].get_data()[ analyte_identifier ] for namei in i_names :
if (graph[ link ].level()==level or graph[name].level()==level) or level<0 : for namej in j_names :
for namei in i_names : i = lookup [ namei ]
for namej in j_names : j = lookup [ namej ]
i = lookup [ namei ] if i == j :
j = lookup [ namej ] continue
if not i == j : if linktype == 'ascendants':
amat[i,j] = 1 amat[j,i] = 1
if linktype == 'descendants':
amat[i,j] = 1
if linktype == 'links':
amat[j,i] = 1
amat[i,j] = 1
self.adjacency_matrix_ = { 'adjacency matrix':amat , 'index names':names , 'sparsity':bSparse } self.adjacency_matrix_ = { 'adjacency matrix':amat , 'index names':names , 'sparsity':bSparse }
return ( self.adjacency_matrix_ ) return ( self.adjacency_matrix_ )
...@@ -576,15 +580,15 @@ class NodeGraph ( Neuron ) : ...@@ -576,15 +580,15 @@ class NodeGraph ( Neuron ) :
d_adjv = adj_matrix[i,:] d_adjv = adj_matrix[i,:]
a_adjv = adj_matrix[:,i] a_adjv = adj_matrix[:,i]
for j in range(len(d_adjv)) : for j in range(len(d_adjv)) :
if d_adjv[j] == 1 and i!=j : if i == j :
continue
if d_adjv[j] == 1 :
desc.append(set_name(j,names,bAssignIDs)) desc.append(set_name(j,names,bAssignIDs))
if a_adjv[j] == 1 and i!=j : if a_adjv[j] == 1 :
ascs.append(set_name(j,names,bAssignIDs)) ascs.append(set_name(j,names,bAssignIDs))
if a_adjv[j] == 1 or d_adjv[j] == 1 and i!=j : n.add_links(list(set(desc)),linktype='descendants' )
linx.append(set_name(j,names,bAssignIDs)) n.add_links(list(set(desc)|set(ascs)),linktype='links' )
n.add_links(desc,linktype='descendants' ) n.add_links(list(set(ascs)),linktype='ascendants' )
n.add_links(linx,linktype='links' )
n.add_links(ascs,linktype='ascendants' )
self.add(n) self.add(n)
def add_ascendant_descendant ( self, ascendant:str, descendant:str ) -> None : def add_ascendant_descendant ( self, ascendant:str, descendant:str ) -> None :
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册