_dispatchable#
- _dispatchable(func=None, *, name=None, graphs='G', edge_attrs=None, node_attrs=None, preserve_edge_attrs=False, preserve_node_attrs=False, preserve_graph_attrs=False, preserve_all_attrs=False, mutates_input=False, returns_graph=False)[源码]#
一个装饰器函数,用于将
func
函数的执行重定向到其后端实现。此装饰器函数根据输入图的类型分派到不同的后端实现,它还管理所有
backend_kwargs
。用法可以是以下任何一种装饰器形式:@_dispatchable
@_dispatchable()
@_dispatchable(name="override_name")
@_dispatchable(graphs="graph_var_name")
@_dispatchable(edge_attrs="weight")
@_dispatchable(graphs={"G": 0, "H": 1}, edge_attrs={"weight": "default"})
其中 0 和 1 表示图对象在函数签名中的位置。当
edge_attrs
是一个字典时,键是关键字名称,值是默认值。
- 参数:
- func可调用对象,可选
要被装饰的函数。如果未提供
func
,则返回一个 partial 对象,该对象可用于后续装饰函数。如果提供了func
,则返回一个新的可调用对象,该对象根据输入图的类型分派到后端算法。- namestr,可选
用于分派的算法名称。如果未提供,将使用
func
的名称。name
对于避免命名冲突很有用,因为所有分派的算法都位于单个命名空间中。例如,tournament.is_strongly_connected
与标准nx.is_strongly_connected
存在命名冲突,因此我们使用了@_dispatchable(name="tournament_is_strongly_connected")
。- graphsstr 或 dict 或 None,默认为 “G”
如果是一个字符串,表示图参数的名称,该参数必须是包装函数的第一个参数。如果算法需要多个图(或者图不是第一个参数),请提供一个字典,以参数名称为键,参数位置为值,表示每个图参数。例如,
@_dispatchable(graphs={"G": 0, "auxiliary?": 4})
表示函数的第 0 个参数G
是一个必需的图,而第 4 个参数auxiliary?
是一个可选的图。要指示某个参数是图的列表,请使用"[graphs]"
。如果没有参数是 NetworkX 图对象(例如对于图生成器、读取器和转换函数),请使用graphs=None
。- edge_attrsstr 或 dict,可选
edge_attrs
包含关于边属性参数及其默认值的信息。如果是一个字符串,edge_attrs
保存表示要包含在转换后的图中的单个边属性的函数参数名称。此属性的默认值为 1。要指示某个参数是属性列表(默认值均为 1),请使用例如"[attrs]"
。如果是一个字典,edge_attrs
保存一个以参数名称为键的字典,其值是默认值,或者,如果是一个字符串,则是指示默认值的参数名称。- node_attrsstr 或 dict,可选
类似于
edge_attrs
,但用于节点属性。- preserve_edge_attrsbool 或 str 或 dict,可选
如果是 bool 类型,表示是否保留所有边属性。如果是 str 类型,表示可能通过该参数名称(使用
True
或可调用参数)指示在转换时是否应保留所有边属性。如果是{graph_name: {attr: default}}
形式的字典,则表示要为输入图保留的预定边属性(及其默认值)。- preserve_node_attrsbool 或 str 或 dict,可选
类似于
preserve_edge_attrs
,但用于节点属性。- preserve_graph_attrsbool 或 set
如果是 bool 类型,表示是否保留所有图属性。如果是 set 类型,表示要保留哪些输入图参数的图属性。
- preserve_all_attrsbool
是否保留所有边、节点和图属性。这会覆盖所有其他 preserve_*_attrs 参数。
- mutates_inputbool 或 dict,默认为 False
如果是 bool 类型,表示函数是否会修改输入图参数。如果是
{arg_name: arg_pos}
形式的字典,表示哪些参数指示输入图是否会被修改,其中arg_name
可以以"not "
开头来否定逻辑(例如,copy=
参数使用此方式)。默认情况下,对于会修改输入图的函数,分派不会将输入图转换为不同的后端。- returns_graphbool,默认为 False
函数是否可能返回或 yield 图对象。默认情况下,对于返回图对象的函数,分派不会将输入图转换为不同的后端。