---
title: "ClikaRT::ops::rotary_embedding_varlen"
sidebar_label: "rotary_embedding_varlen"
description: "Rotary position embedding over token-packed (variable-length) layouts."
---

<!-- Generated by tools/doxygen2mdx from Doxygen XML. Do not edit. -->

<span class="api-kind api-kind--function">function</span>

## rotary\_embedding\_varlen() {#rotary_embedding_varlen}

<div class="api-signature">

[`Tensor`](../Tensor.md) **`rotary_embedding_varlen`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`Tensor`](../Tensor.md) `input`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`Tensor`](../Tensor.md) `cu_seqlens`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`OptionalTensor`](../../index.md#OptionalTensor) `seqlens` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`OptionalTensor`](../../index.md#OptionalTensor) `position_ids` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`OptionalTensor`](../../index.md#OptionalTensor) `cos` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`OptionalTensor`](../../index.md#OptionalTensor) `sin` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<`[`RotaryMode`](./index.md#RotaryMode)`>` `mode` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<int64_t>` `rotary_dim` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<double>` `theta` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<`[`RopeScaling`](./index.md#RopeScaling)`>` `scaling` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<double>` `scale` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<double>` `low_freq_factor` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<double>` `high_freq_factor` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<int64_t>` `original_max_pos` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<double>` `beta_fast` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<double>` `beta_slow` `=` `std::nullopt`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`OptionalTensor`](../../index.md#OptionalTensor) `freq_factors` `=` `{}`<br />
)

</div>

Rotary position embedding over token-packed (variable-length) layouts.

Packed `[Sum(S), .., D]` input with `cu_seqlens` `[B+1]` Int32 prefix sums (per-sequence positions restart at 0 unless `position_ids` is given); `seqlens` optionally carries explicit per-sequence lengths. angles (RoPE). [`cos`](./cos.md#cos) / [`sin`](./sin.md#sin) are the precomputed angle planes `[max_pos, rotary_dim/2]` Float32; `position_ids` (Int32/Int64) selects each token's row; absent, positions run 0, 1, 2, … per sequence. `mode` picks the pair layout (interleaved vs half-split); `rotary_dim` absent rotates the whole head dim.

**Throws**

- `ClikaRT::Error`: when the input's dtype/shape is not served for this operation (the machine-readable reason rides `code_name()`).

**Returns:** `input` rotated; same shape and dtype.

<div class="api-declared">

Declared in `ClikaRT/compute/ops.h`, line 2205

</div>
