tvm.relay.analysis

This file contains the set of passes for Relay, which exposes an interface for configuring the passes and scripting them in Python.

tvm.relay.analysis.post_order_visit(expr, fvisit)

Recursively visit the ir in post DFS order node, apply fvisit. Each node is guaranteed to be visited only once.

Parameters
  • expr (tvm.relay.Expr) – The input expression.

  • fvisit (function) – The visitor function to be applied.

tvm.relay.analysis.well_formed(expr)

Check that each Var is only bound once (well formed).

Parameters

expr (tvm.relay.Expr) – The input expression

Returns

well_form – Whether the input expression is well formed

Return type

bool

tvm.relay.analysis.check_kind(t, mod=None)

Check that the type is well kinded and return the kind. For example, this mean type cannot has tensor of tensor, or is a tuple type of 2 shapes.

Parameters
  • t (tvm.relay.Type) – The type to check

  • mod (Optional[tvm.relay.Module]) – The global module.

Returns

kind – the kind of t

Return type

Kind

Examples

assert check_kind(relay.TupleType([relay.TypeParam('tp1', relay.Kind.Shape)])) == Shape
assert check_kind(relay.TupleType([relay.TypeParam('tp1', relay.Kind.Type)])) == Type
tvm.relay.analysis.check_constant(expr)

Check whether an expression is constant

Parameters

expr (tvm.relay.Expr) – The input expression

Returns

result – Whether the expression is constant.

Return type

bool

tvm.relay.analysis.free_vars(expr)

Get free Vars from expression expr in Post DFS order.

Parameters

expr (tvm.relay.Expr) – The input expression

Returns

free – The list of free variables in post DFS order.

Return type

List[tvm.relay.Var]

Note

The fact that Vars are post-DFS ordred are useful in neural networks: usually this means weights of previous are ordered first.

tvm.relay.analysis.bound_vars(expr)

Get bound vars from expression expr in post-DFS order.

Parameters

expr (tvm.relay.Expr) – The input expression

Returns

free – The list of bound variables in post-DFS order.

Return type

List[tvm.relay.Var]

tvm.relay.analysis.all_vars(expr)

Get all vars from expression expr in post-DFS order.

Parameters

expr (tvm.relay.Expr) – The input expression

Returns

free – The list of all variables in post-DFS order.

Return type

List[tvm.relay.Var]

tvm.relay.analysis.free_type_vars(expr, mod=None)

Get free type variables from expression/type e

Parameters
  • expr (Union[tvm.relay.Expr,tvm.relay.Type]) – The input expression/type

  • mod (Optional[tvm.relay.Module]) – The global module

Returns

free – The list of free type variables in post-DFS order

Return type

List[tvm.relay.TypeVar]

tvm.relay.analysis.bound_type_vars(expr, mod=None)

Get bound type variables from expression/type e

Parameters
  • expr (Union[tvm.relay.Expr,tvm.relay.Type]) – The input expression/type

  • mod (Optional[tvm.relay.Module]) – The global module

Returns

free – The list of bound type variables in post-DFS order

Return type

List[tvm.relay.TypeVar]

tvm.relay.analysis.all_type_vars(expr, mod=None)

Get all type variables from expression/type e

Parameters
  • expr (Union[tvm.relay.Expr,tvm.relay.Type]) – The input expression/type

  • mod (Optional[tvm.relay.Module]) – The global module

Returns

free – The list of all type variables in post-DFS order

Return type

List[tvm.relay.TypeVar]

tvm.relay.analysis.alpha_equal(lhs, rhs)

Compare two Relay expr for structural equivalence (alpha equivalence).

Parameters
  • lhs (tvm.relay.Expr) – One of the input Expression.

  • rhs (tvm.relay.Expr) – One of the input Expression.

Returns

result – True iff lhs is alpha equal to rhs.

Return type

bool

tvm.relay.analysis.assert_alpha_equal(lhs, rhs)

Assert that two Relay expr is structurally equivalent. (alpha equivalence).

Parameters
  • lhs (tvm.relay.Expr) – One of the input Expression.

  • rhs (tvm.relay.Expr) – One of the input Expression.

tvm.relay.analysis.graph_equal(lhs, rhs)

Compare two Relay expr for data-flow equivalence. The difference between this and alpha-equality is that variables are not expected to match between lhs and rhs; they are treated as sources and are mapped between each other.

Parameters
  • lhs (tvm.relay.Expr) – One of the input Expression.

  • rhs (tvm.relay.Expr) – One of the input Expression.

Returns

result – True iff lhs is data-flow equivalent to rhs.

Return type

bool

tvm.relay.analysis.assert_graph_equal(lhs, rhs)

Compare two Relay expr for data-flow equivalence. The difference between this and alpha-equality is that variables are not expected to match between lhs and rhs; they are treated as sources and are mapped between each other.

Parameters
  • lhs (tvm.relay.Expr) – One of the input Expression.

  • rhs (tvm.relay.Expr) – One of the input Expression.

tvm.relay.analysis.collect_device_info(expr)

Collect the device allocation map for the given expression. The device ids are propagated from the device_copy operators.

Parameters

expr (tvm.relay.Expr) – The input expression.

Returns

ret – A dictionary mapping tvm.relay.Expr to device type.

Return type

Dict[tvm.relay.expr, int]

tvm.relay.analysis.collect_device_annotation_ops(expr)

Collect the device annotation ops for the given expression.

Parameters

expr (tvm.relay.Expr) – The input expression.

Returns

ret – A dictionary mapping tvm.relay.Expr to device type where the keys are annotation expressions.

Return type

Dict[tvm.relay.expr, int]

tvm.relay.analysis.get_total_mac_number(expr)

Count the number of MACs (multiply-accumulate) of a model

Parameters

expr (tvm.relay.Expr) – The input expression.

Returns

result – The number of MACs (multiply-accumulate) of a model

Return type

int64

tvm.relay.analysis.unmatched_cases(match, mod=None)

Finds cases that the match expression does not catch, if any.

Parameters
  • match (tvm.relay.Match) – The match expression

  • mod (Optional[tvm.relay.Module]) – The module (defaults to an empty module)

Returns

missing_patterns – Patterns that the match expression does not catch.

Return type

[tvm.relay.Pattern]

tvm.relay.analysis.detect_feature(a, b=None)

Detect the feature used in a relay program.

Parameters
  • a (Union[tvm.relay.Expr, tvm.relay.Module]) – The input expression or module.

  • b (Optional[Union[tvm.relay.Expr, tvm.relay.Module]]) – The input expression or module. The two arguments cannot both be expression or module.

Returns

features – Features used in the program.

Return type

Set[Feature]

tvm.relay.analysis.structural_hash(value)

Hash a Relay expression structurally.

Parameters

expr (Union[tvm.relay.Expr, tvm.relay.Type]) – The expression to hash.

Returns

result – The hash value

Return type

int