Class: Kumi::IR::DF::Ops::AxisCross

Inherits:
Node show all
Defined in:
lib/kumi/ir/df/ops/axis_cross.rb

Overview

Re-exposes source (an array over source_axis) under a fresh, independent axis axis backed by the same carrier. The result has the source's axes plus axis appended as the new innermost axis, so the element at (i, j) reads source. This is the broadcast-dual of a reduction and is what makes all-pairs / self-join computations (e.g. N-body) expressible.

Instance Attribute Summary

Attributes inherited from Base::Instruction

#attributes, #axes, #dtype, #effects, #inputs, #metadata, #opcode, #result

Instance Method Summary collapse

Methods inherited from Node

opcode, #to_h

Methods inherited from Base::Instruction

#control_effect?, #defs, #effectful?, #io_effect?, #memory_effect?, #normalized_attributes, #printer_attributes, #printer_axes, #printer_dtype, #produces?, #stamp, #state_effect?, #to_h, #to_print_string, #uses, #validate!, #value_signature, #with_metadata

Constructor Details

#initialize(source:, axis:, source_axis:, **kwargs) ⇒ AxisCross

Returns a new instance of AxisCross.



16
17
18
19
20
21
22
23
24
25
# File 'lib/kumi/ir/df/ops/axis_cross.rb', line 16

def initialize(source:, axis:, source_axis:, **kwargs)
  super(
    inputs: [source],
    attributes: {
      axis: axis.to_sym,
      source_axis: source_axis.to_sym
    },
    **kwargs
  )
end

Instance Method Details

#axisObject



28
# File 'lib/kumi/ir/df/ops/axis_cross.rb', line 28

def axis = attributes[:axis]

#sourceObject



27
# File 'lib/kumi/ir/df/ops/axis_cross.rb', line 27

def source = inputs.first

#source_axisObject



29
# File 'lib/kumi/ir/df/ops/axis_cross.rb', line 29

def source_axis = attributes[:source_axis]