Skip to content

Navigation Menu

Sign in
Sign up

Added multilayer hypergraph - #75

Open
922397935 wants to merge 2 commits into
iMoonLab:main from
922397935:main
Open

Added multilayer hypergraph #75
922397935 wants to merge 2 commits into
iMoonLab:main from
922397935:main

Conversation

@922397935

@922397935 922397935 commented Jun 30, 2026

Copy link
Copy Markdown

我简单写了一个多层超图应用的notebook,不知道是否不太规范,如果您觉得写的还行,我可以帮忙再加点儿文档的使用说明

@yifanfeng97 yifanfeng97 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

感谢你的贡献!多层超图是社区非常需要的功能(#69, #71 都在讨论),非常欢迎这个 PR。但在合入前,有几个问题需要修复:


🔴 Bug — 需要修复

1. node_sum_before 列表累积污染

self.node_sum_beforeconstruct_multi_layer_hypergraph()_inter_layer_connect()node_layer_list() 三个方法中都被 append。如果对同一个实例调用多个方法,列表会不断增长,导致偏移量计算错误。

建议:不要把 node_sum_before 作为可变实例状态,改为每次计算时使用局部变量:

def _compute_offsets(self):
 layer_num_v = [layer.num_v for layer in self.layers_list]
 return [sum(layer_num_v[:i]) for i in range(self.num_layers)]

2. construct_multi_layer_hypergraph 返回新的 MultilayerHypergraph

返回的新实例本身又需要调用 construct_multi_layer_hypergraph(),形成递归调用。建议:直接在当前实例上构建,或返回一个普通的 Hypergraph

3. temp 列表推导式逻辑可能有误

temp = [self.node_layer[i][j] for i in range(num_layers) for j in range(num_layers) if i == j]

这只取了对角线元素 [node_layer[0][0], node_layer[1][1], ...]。如果意图是获取每层选中的节点列表,请确认逻辑是否正确。

4. load_interlayer_mappingsave 逻辑

isinstance(path, list) 分支中,连续两次 open(save_path, 'w') —— 第二次会覆盖第一次的内容。此外 gene_info 只在首次遇到 gene 时赋值,后续不更新。

5. 测试文件无法通过

  • test_construct_multilayer_hypergraph 把 fixture g1/g2 当函数调用(g1())→ 会抛 TypeError,fixture 不需要加括号
  • test_draw 引用了不存在的 fixture mhg
  • test_savetest_adjacency_matrix 测的是普通 Hypergraph,与多层超图无关,疑似从其他测试文件复制

🟡 代码质量 — 建议改进

# 问题 建议
6 import matplotlib.pyplot as plt 核心结构类不应依赖 matplotlib,移除或改为延迟导入
7 from tqdm import tqdm 同上,print + tqdm 应改用 logging 或去掉
8 docstring 混用中英文 项目约定用英文(Google/NumPy style)
9 from dhg import Hypergraph 有循环导入风险,改为 from .hypergraph import Hypergraph
10 文件末尾缺换行符 加一个 trailing newline
11 select_nodes 类型标注 num_v: int 实际接收 range,应改为正确的类型标注
12 notebook from data import MultilayerHypergraph 导入路径不对,应为 from dhg.structure import MultilayerHypergraph
13 notebook 含 870KB+ base64 图片 提交前请清除所有 cell output(jupyter nbconvert --clear-output)

整体来说功能方向很好,期待修改后的版本。如果需要帮助实现其中某些部分,欢迎讨论。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@yifanfeng97 yifanfeng97 yifanfeng97 requested changes

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /