_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 图对象。默认情况下,对于返回图对象的函数,分派不会将输入图转换为不同的后端。