生成网络图的一种假设策略
hypothesis-networkx的Python项目详细描述
假设网络x
该模块为生成networkx图提供了一种假设策略。 这可以用来有效和彻底地测试代码。
安装
此模块可以通过pip
:
pip install hypothesis-networkx
用户指南
模块公开一个函数:graph_builder
。这个函数是
构造图的假设合成策略。您可以如下使用:
fromhypothesis_networkximportgraph_builderfromhypothesisimportstrategiesasstimportnetworkxasnxnode_data=st.fixed_dictionaries({'name':st.text(),'number':st.integers()})edge_data=st.fixed_dictionaries({'weight':st.floats(allow_nan=False,allow_infinity=False)})builder=graph_builder(graph_type=nx.Graph,node_keys=st.integers(),node_data=node_data,edge_data=edge_data,min_nodes=2,max_nodes=10,min_edges=1,max_edges=None,self_loops=False,connected=True)graph=builder.example()print(graph.nodes(data=True))print(graph.edges(data=True))
当然,这个构建器是一个有效的假设策略,并且使用它来 举例并不是很有用。相反,你可以(也应该)在 您的测试框架:
fromhypothesisimportgiven@given(graph=builder)deftest_my_function(graph):assertmy_function(graph)==known_function(graph)
给graph_builder
的参数的含义是非常漂亮的
不言而喻,但它们必须作为关键字参数给出。
node_data
:从中提取节点属性的策略。edge_data
:从中提取边缘属性的策略。node_keys
:从中提取节点键的策略,或者 没有。如果没有,则节点键将是范围(0,节点数)中的整数。graph_type
:将调用此函数(或类)而不使用 创建一个空的初始图形。connected
:如果为true,则生成的图保证是单个的 连接的组件。self_loops
:如果为false,则生成的图中不会有自循环。 自循环是节点和自身之间的边。
min_edges
的边,则可以添加
没有足够的节点,并且超过
max_edges
如果connected
为真。已知限制
本模块有一些(次要)未解决的问题:
- 对于大型图,图形生成可能很慢。
- 当生成的图 太小了。
- 如果
connected
为真,则不总是遵守max_edges
参数。 - 它目前适用于Python2.7,但这被认为是不推荐的,而且 可能会在没有通知的情况下停止工作。