Skip to content

Fix missing default type for poisson and geometric template parameter T#2893

Open
ssam18 wants to merge 5 commits intoxtensor-stack:masterfrom
ssam18:fix/poisson-geometric-default-template-type
Open

Fix missing default type for poisson and geometric template parameter T#2893
ssam18 wants to merge 5 commits intoxtensor-stack:masterfrom
ssam18:fix/poisson-geometric-default-template-type

Conversation

@ssam18
Copy link
Copy Markdown
Contributor

@ssam18 ssam18 commented Apr 18, 2026

xt::random::poisson and xt::random::geometric both use T only internally (as the distribution's output type), so the compiler has no way to deduce it from the call site. Adding = int as the default matches the underlying std::poisson_distribution and std::geometric_distribution defaults and lets users call these functions without spelling out the type every time. Fixes #2884.

…tensor-stack#2871)

This commit addresses GitHub issue xtensor-stack#2871 where using 'auto' with xtensor
reducer functions (like amax, sum with keep_dims) in functions causes
crashes or incorrect results in optimized builds.

The issue is that lazy expressions hold references to local variables.
When intermediate results are stored with 'auto', these references
become dangling when the function returns, leading to undefined behavior.

Fixes xtensor-stack#2871
- Only force evaluation of the returned expression; intermediate lazy
  expressions are safe as long as they do not outlive the function
- Use auto for shifted/expVals/sumExp in the doc example and tests
- Remove misleading "Alternatively" sections (eval on intermediates is
  not required; evaluation_strategy::immediate does not fix the issue)
- Fix logSoftmax_eval test variant to drop unnecessary xt::eval wrappers
A lazy reducer (e.g. xt::sum with keep_dims) cannot be safely used as an
operand in a subsequent element-wise expression without first materializing
it. Element-wise lazy expressions (shifted, expVals) are safe as auto, but
the reducer result (sumExp) must be assigned to xt::xtensor or wrapped in
xt::eval before use.

This fixes the CI test failure in issue_2871_intermediate_result_handling.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

xt::random::poisson() function parameters do not include the template parameters

1 participant