_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)[source]#
一个装饰器函数,用于将
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
是字典时,键是关键字名称,值是默认值。
- Parameters:
- funccallable, 可选
要装饰的函数。如果未提供
func
,则返回一个可用于稍后装饰函数的偏函数对象。如果提供了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, 可选
对于布尔值,是否保留所有边属性。对于字符串,参数名称可能指示(通过
True
或可调用参数)在转换时是否应保留所有边属性。对于{graph_name: {attr: default}}
的字典,指示要保留的预定义边属性(和默认值)。- preserve_node_attrsbool 或 str 或 dict, 可选
类似于
preserve_edge_attrs
,但用于节点属性。- preserve_graph_attrsbool 或 set
对于布尔值,是否保留所有图属性。对于集合,指示要保留图属性的输入图参数。
- preserve_all_attrsbool
是否保留所有边、节点和图属性。这将覆盖所有其他preserve_*_attrs。
- mutates_inputbool 或 dict, 默认 False
对于布尔值,函数是否修改输入图参数。对于
{arg_name: arg_pos}
的字典,指示输入图是否会被修改的参数,arg_name
可能以"not "
开头以否定逻辑(例如,这用于copy=
参数)。默认情况下,对于修改输入图的函数,分派不会将输入图转换为不同的后台。- returns_graphbool, 默认 False
函数是否可以返回或生成图对象。默认情况下,对于返回图的函数,分派不会将输入图转换为不同的后台。