maya.utils.converter.rules

Conversion rules for tik.maya → maya.cmds transformation.

Rules define how specific tik.maya patterns should be expanded into their maya.cmds equivalents. Each rule is a deterministic, testable unit of transformation.

Rule categories: 1. Language-level expressions (always convertible) 2. Blessed helpers (explicitly registered, opt-in)

Classes

ConversionRule

Base class for all conversion rules.

CurveCreateRule

Convert Curve.create() to cmds.curve(...).

DagNodeSelectRule

Convert node.select() to cmds.select(node, replace=True).

JointCreateRule

Convert Joint.create() to cmds.joint(...).

LocatorCreateRule

Convert Locator.create() to cmds.spaceLocator(...).

MeshCreateRule

Convert Mesh.create() to cmds.poly* or cmds.createNode('mesh', ...).

NodeAddAttrRule

Convert node.add_attr(name, **kwargs) to cmds.addAttr(...).

NodeDeleteRule

Convert node.delete() to cmds.delete(node).

NodeDuplicateRule

Convert node.duplicate() to cmds.duplicate(node).

NodeRenameRule

Convert node.rename(name) to cmds.rename(node, name).

PlugConnectRule

Convert plug.connect(other) to cmds.connectAttr(src, dst).

PlugGetRule

Convert node["attr"].get() to cmds.getAttr('node.attr').

PlugLockRule

Convert plug.lock() to cmds.setAttr(plug.path, lock=True).

PlugRshiftRule

Convert src_plug >> dst_plug to cmds.connectAttr(...).

PlugSetRule

Convert node["attr"].set(value) to cmds.setAttr('node.attr', value).

PlugUnlockRule

Convert plug.unlock() to cmds.setAttr(plug.path, lock=False).

PlugValueGetRule

Convert node["attr"].value (read) to cmds.getAttr('node.attr').

PlugValueSetRule

Convert node["attr"].value = x to cmds.setAttr('node.attr', x).

ResolveRule

Convert resolve(name) to name (pass-through for string node names).

RuleContext

Context information available during rule matching.

RuleMatch

Result of a successful rule match.

TransformCreateRule

Convert Transform.create() to cmds.createNode('transform', ...).

TransformFreezeRule

Convert transform.freeze() to cmds.makeIdentity(...).

TransformPropertySetRule

Convert transform property assignment to cmds.setAttr.

Functions

get_default_rules(→ List[ConversionRule])

Return the default set of conversion rules.

Module Contents

class ConversionRule

Bases: abc.ABC

Base class for all conversion rules.

A rule defines: - A pattern to match in the AST - A transformation to apply when matched - Metadata about the rule (name, category, etc.)

abstractmethod convert(node: ast.AST, context: RuleContext) RuleMatch

Convert the matched AST node to maya.cmds code.

Args:

node: AST node that matched this rule. context: Context with variable type information.

Returns:

RuleMatch with the converted code.

abstractmethod matches(node: ast.AST, context: RuleContext) bool

Check if this rule applies to the given AST node.

Args:

node: AST node to check. context: Context with variable type information.

Returns:

True if this rule can convert the node.

category: str = 'general'
description: str = ''
name: str = 'unnamed_rule'
class CurveCreateRule

Bases: ConversionRule

Convert Curve.create() to cmds.curve(…).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.curve(…).

matches(node: ast.AST, context: RuleContext) bool

Match Curve.create(…) calls.

category = 'node_creation'
description = 'Convert Curve.create() to cmds.curve'
name = 'curve_create'
class DagNodeSelectRule

Bases: ConversionRule

Convert node.select() to cmds.select(node, replace=True).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.select(…).

matches(node: ast.AST, context: RuleContext) bool

Match node.select() patterns.

category = 'node_methods'
description = 'Convert DagNode.select() to cmds.select'
name = 'dagnode_select'
class JointCreateRule

Bases: ConversionRule

Convert Joint.create() to cmds.joint(…).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.joint(…).

matches(node: ast.AST, context: RuleContext) bool

Match Joint.create(…) calls.

category = 'node_creation'
description = 'Convert Joint.create() to cmds.joint'
name = 'joint_create'
class LocatorCreateRule

Bases: ConversionRule

Convert Locator.create() to cmds.spaceLocator(…).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.spaceLocator(…).

matches(node: ast.AST, context: RuleContext) bool

Match Locator.create(…) calls.

category = 'node_creation'
description = 'Convert Locator.create() to cmds.spaceLocator'
name = 'locator_create'
class MeshCreateRule

Bases: ConversionRule

Convert Mesh.create() to cmds.poly* or cmds.createNode(‘mesh’, …).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to appropriate cmds call.

matches(node: ast.AST, context: RuleContext) bool

Match Mesh.create(…) calls.

POLY_PRIMITIVES
category = 'node_creation'
description = 'Convert Mesh.create() to cmds.poly* commands'
name = 'mesh_create'
class NodeAddAttrRule

Bases: ConversionRule

Convert node.add_attr(name, **kwargs) to cmds.addAttr(…).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.addAttr(…).

matches(node: ast.AST, context: RuleContext) bool

Match node.add_attr() patterns.

category = 'node_methods'
description = 'Convert Node.add_attr() to cmds.addAttr'
name = 'node_add_attr'
class NodeDeleteRule

Bases: ConversionRule

Convert node.delete() to cmds.delete(node).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.delete(…).

matches(node: ast.AST, context: RuleContext) bool

Match node.delete() patterns.

category = 'node_methods'
description = 'Convert Node.delete() to cmds.delete'
name = 'node_delete'
class NodeDuplicateRule

Bases: ConversionRule

Convert node.duplicate() to cmds.duplicate(node).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.duplicate(…).

matches(node: ast.AST, context: RuleContext) bool

Match node.duplicate() patterns.

category = 'node_methods'
description = 'Convert Node.duplicate() to cmds.duplicate'
name = 'node_duplicate'
class NodeRenameRule

Bases: ConversionRule

Convert node.rename(name) to cmds.rename(node, name).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.rename(…).

matches(node: ast.AST, context: RuleContext) bool

Match node.rename(…) patterns.

category = 'node_methods'
description = 'Convert Node.rename() to cmds.rename'
name = 'node_rename'
class PlugConnectRule

Bases: ConversionRule

Convert plug.connect(other) to cmds.connectAttr(src, dst).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.connectAttr(…).

matches(node: ast.AST, context: RuleContext) bool

Match plug.connect(other) patterns.

category = 'connections'
description = 'Convert Plug.connect() to cmds.connectAttr'
name = 'plug_connect'
class PlugGetRule

Bases: ConversionRule

Convert node[“attr”].get() to cmds.getAttr(‘node.attr’).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.getAttr(…).

matches(node: ast.AST, context: RuleContext) bool

Match node[“attr”].get() or node[“attr”].value patterns.

category = 'attribute_access'
description = 'Convert Plug.get() to cmds.getAttr'
name = 'plug_get'
class PlugLockRule

Bases: ConversionRule

Convert plug.lock() to cmds.setAttr(plug.path, lock=True).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.setAttr(…, lock=True).

matches(node: ast.AST, context: RuleContext) bool

Match node[“attr”].lock() patterns.

category = 'attribute_methods'
description = 'Convert Plug.lock() to cmds.setAttr with lock flag'
name = 'plug_lock'
class PlugRshiftRule

Bases: ConversionRule

Convert src_plug >> dst_plug to cmds.connectAttr(…).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.connectAttr(…).

matches(node: ast.AST, context: RuleContext) bool

Match plug >> other_plug patterns.

category = 'connections'
description = 'Convert >> operator connection to cmds.connectAttr'
name = 'plug_rshift_connect'
class PlugSetRule

Bases: ConversionRule

Convert node[“attr”].set(value) to cmds.setAttr(‘node.attr’, value).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.setAttr(…).

matches(node: ast.AST, context: RuleContext) bool

Match node[“attr”].set(value) patterns.

category = 'attribute_access'
description = 'Convert Plug.set() to cmds.setAttr'
name = 'plug_set'
class PlugUnlockRule

Bases: ConversionRule

Convert plug.unlock() to cmds.setAttr(plug.path, lock=False).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.setAttr(…, lock=False).

matches(node: ast.AST, context: RuleContext) bool

Match node[“attr”].unlock() patterns.

category = 'attribute_methods'
description = 'Convert Plug.unlock() to cmds.setAttr with lock=False'
name = 'plug_unlock'
class PlugValueGetRule

Bases: ConversionRule

Convert node[“attr”].value (read) to cmds.getAttr(‘node.attr’).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.getAttr(…).

matches(node: ast.AST, context: RuleContext) bool

Match node[“attr”].value read patterns.

category = 'attribute_access'
description = 'Convert Plug.value property read to cmds.getAttr'
name = 'plug_value_get'
class PlugValueSetRule

Bases: ConversionRule

Convert node[“attr”].value = x to cmds.setAttr(‘node.attr’, x).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.setAttr(…).

matches(node: ast.AST, context: RuleContext) bool

Match node[“attr”].value = x assignment patterns.

Note: This matches Assign nodes where target is attr.value on subscript.

category = 'attribute_access'
description = 'Convert Plug.value property assignment to cmds.setAttr'
name = 'plug_value_set'
class ResolveRule

Bases: ConversionRule

Convert resolve(name) to name (pass-through for string node names).

Handles: - resolve(‘nodeName’) - tm.resolve(‘nodeName’) - tik.maya.resolve(‘nodeName’)

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert resolve(name) to just name.

matches(node: ast.AST, context: RuleContext) bool

Match resolve(…) calls in various forms.

category = 'utilities'
description = 'Convert resolve() to direct node name usage'
name = 'resolve_call'
class RuleContext

Context information available during rule matching.

Provides access to tracked variable names and their types, allowing rules to make informed decisions about conversions.

get_variable_type(name: str) str | None

Get the tracked type for a variable name.

imports: Dict[str, str]
source_lines: List[str]
variable_types: Dict[str, str]
class RuleMatch

Result of a successful rule match.

confidence: float = 1.0
converted_code: str
notes: str | None = None
original_node: ast.AST
rule_name: str
class TransformCreateRule

Bases: ConversionRule

Convert Transform.create() to cmds.createNode(‘transform’, …).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.createNode(‘transform’, …).

matches(node: ast.AST, context: RuleContext) bool

Match Transform.create(…) calls.

category = 'node_creation'
description = 'Convert Transform.create() to cmds.createNode'
name = 'transform_create'
class TransformFreezeRule

Bases: ConversionRule

Convert transform.freeze() to cmds.makeIdentity(…).

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.makeIdentity(…).

matches(node: ast.AST, context: RuleContext) bool

Match transform.freeze() patterns.

category = 'transform_methods'
description = 'Convert Transform.freeze() to cmds.makeIdentity'
name = 'transform_freeze'
class TransformPropertySetRule

Bases: ConversionRule

Convert transform property assignment to cmds.setAttr.

convert(node: ast.AST, context: RuleContext) RuleMatch

Convert to cmds.setAttr(…).

matches(node: ast.AST, context: RuleContext) bool

Match node.property = value patterns for known properties.

PROPERTY_MAP
category = 'properties'
description = 'Convert transform property assignment to cmds.setAttr'
name = 'transform_property_set'
get_default_rules() List[ConversionRule]

Return the default set of conversion rules.

Returns:

List of ConversionRule instances in priority order.