'use strict';
module.exports = {
tensor_dialect : $ => choice(
// operation ::= `tensor.empty` `(`$dynamicSizes`)`
// attr-dict `:` type($result)
seq('tensor.empty',
field('dynamicSizes', $._value_use_list_parens),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.cast` $source attr-dict `:`
// type($source) `to` type($dest)
seq('tensor.cast', field('in', $.value_use),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.dim` attr-dict $source `,` $index
// `:` type($source)
seq('tensor.dim',
field('attributes', optional($.attribute)),
field('tensor', $.value_use), ',',
field('index', $.value_use),
field('return', $._type_annotation)),
// operation ::= `tensor.collapse_shape` $src
// $reassociation attr-dict `:` type($src)
// `into` type($result)
seq(choice('tensor.collapse_shape', 'tensor.expand_shape'),
field('tensor', $.value_use),
field('reassociation', $.nested_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.extract` $tensor `[` $indices `]`
// attr-dict `:` type($tensor)
seq('tensor.extract', field('tensor', $.value_use),
field('indices', $._dense_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.insert` $scalar `into` $dest `[`
// $indices `]` attr-dict
// `:` type($dest)
seq('tensor.insert', field('scalar', $.value_use),
token('into'), field('destination', $.value_use),
field('indices', $._dense_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.extract_slice` $source ``
// custom<DynamicIndexList>($offsets,
// $static_offsets)
// custom<DynamicIndexList>($sizes,
// $static_sizes)
// custom<DynamicIndexList>($strides,
// $static_strides) attr-dict `:`
// type($source) `to` type($result)
seq('tensor.extract_slice', field('tensor', $.value_use),
field('offsets', $._dense_idx_list),
field('sizes', $._dense_idx_list),
field('strides', $._dense_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.insert_slice` $source `into` $dest
// ``
// custom<DynamicIndexList>($offsets,
// $static_offsets)
// custom<DynamicIndexList>($sizes,
// $static_sizes)
// custom<DynamicIndexList>($strides,
// $static_strides) attr-dict `:`
// type($source) `into` type($dest)
// operation ::= `tensor.parallel_insert_slice` $source
// `into` $dest ``
// custom<DynamicIndexList>($offsets,
// $static_offsets)
// custom<DynamicIndexList>($sizes,
// $static_sizes)
// custom<DynamicIndexList>($strides,
// $static_strides) attr-dict `:`
// type($source) `into` type($dest)
seq(choice('tensor.insert_slice',
'tensor.parallel_insert_slice'),
field('source', $.value_use), token('into'),
field('destination', $.value_use),
field('offsets', $._dense_idx_list),
field('sizes', $._dense_idx_list),
field('strides', $._dense_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.from_elements` $elements attr-dict
// `:` type($result)
seq('tensor.from_elements',
field('elements', optional($._value_use_list)),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.gather` $source `[` $indices `]`
// `gather_dims` `(` $gather_dims `)`
// (`unique` $unique^)?
// attr-dict
// `:` functional-type(operands, results)
seq('tensor.gather', field('source', $.value_use),
field('indices', $._dense_idx_list),
field('gatherDims', $.gather_dims_attr),
field('unique', optional($.unique_attr)),
field('attributes', optional($.attribute)),
field('return', $._function_type_annotation)),
// operation ::= `tensor.scatter` $source `into` $dest `[`
// $indices `]`
// `scatter_dims` `(` $scatter_dims `)`
// (`unique` $unique^)?
// attr-dict
// `:` functional-type(operands, results)
seq('tensor.scatter', field('source', $.value_use),
token('into'), field('destination', $.value_use),
field('indices', $._dense_idx_list),
field('scatterDims', $.scatter_dims_attr),
field('unique', optional($.unique_attr)),
field('attributes', optional($.attribute)),
field('return', $._function_type_annotation)),
// operation ::= `tensor.pad` $source
// (`nofold` $nofold^)?
// `low` `` custom<DynamicIndexList>($low,
// $static_low) `high` ``
// custom<DynamicIndexList>($high,
// $static_high) $region attr-dict `:`
// type($source) `to` type($result)
seq('tensor.pad', field('source', $.value_use),
field('nofold', optional($.nofold_attr)),
field('low', seq(token('low'), $._dense_idx_list)),
field('high', seq(token('high'), $._dense_idx_list)),
field('body', $.region),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.reshape` $source `(` $shape `)`
// attr-dict
// `:` functional-type(operands, results)
seq('tensor.reshape', field('tensor', $.value_use),
field('shape', $._value_use_list_parens),
field('attributes', optional($.attribute)),
field('return', $._function_type_annotation)),
// operation ::= `tensor.splat` $input attr-dict `:`
// type($aggregate)
seq('tensor.splat', field('input', $.value_use),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.pack` $source
// (`padding_value` `(` $padding_value^ `:`
// type($padding_value) `)`)?
// (`outer_dims_perm` `=` $outer_dims_perm^)?
// `inner_dims_pos` `=` $inner_dims_pos
// `inner_tiles` `=`
// custom<DynamicIndexList>($inner_tiles,
// $static_inner_tiles) `into` $dest
// attr-dict `:` type($source) `->`
// type($dest)
// operation ::= `tensor.unpack` $source
// (`outer_dims_perm` `=` $outer_dims_perm^)?
// `inner_dims_pos` `=` $inner_dims_pos
// `inner_tiles` `=`
// custom<DynamicIndexList>($inner_tiles,
// $static_inner_tiles) `into` $dest
// attr-dict `:` type($source) `->`
// type($dest)
seq(choice('tensor.pack', 'tensor.unpack'),
field('source', $.value_use),
field('padding_value',
optional(seq(token('padding_value'), '(',
$._value_use_and_type, ')'))),
field('outer_dims_perm',
optional($.outer_dims_perm_attr)),
field('inner_dims_pos', $.inner_dims_pos_attr),
field('inner_tiles', $.inner_tiles_attr),
token('into'), field('destination', $.value_use),
field('return', $._function_type_annotation)),
// operation ::= `tensor.generate` $dynamicExtents $body
// attr-dict `:` type($result)
seq('tensor.generate',
field('dynamicExtents', $._value_use_list),
field('body', $.region),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `tensor.rank` $tensor attr-dict `:`
// type($tensor) operation ::= `tensor.yield` $value
// attr-dict `:` type($value)
seq(choice('tensor.rank', 'tensor.yield'),
field('tensor', $.value_use),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)))
}