Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added broadcast overload for bool #1089

Merged
merged 3 commits into from
Feb 25, 2025

Conversation

JohanMabille
Copy link
Member

@JohanMabille JohanMabille commented Feb 24, 2025

Fixes missing APIs due to #973

@serge-sans-paille This is the last missing piece to upgrade xtensor to xsimd 13. If you don't have any objection, I will tag a release after this one gets in.

template <class A>
struct broadcaster<bool, A>
{
using return_type = batch_bool<xsimd::as_unsigned_integer_t<bool>, A>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not quite sure about that. You're creating a batch_bool out of bool, which looks fine at first glance, but a batch_bool neeads to know what kind of type it's operating one, why choosing xsimd::as_unsigned_integer_t<bool> ? The user has no way to specify the actual type...

Copy link
Member Author

@JohanMabille JohanMabille Feb 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method is called only when you want to operate on batches of boolean values (the old batch<bool> that we removed), therefore the underlying type does not really matter. I chose uint8_t so that we can operate on a maximum number of boolean values in the batch_bool.

If you need a specific underlying type for the batch_bool, then you have to use broadcast_as instead.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok. I think we need to document that somewhere, either in the doxygen comment or by moving the specializatin at the API level so that the difference in behavior is clear when passing a bool to xsimd::broadcast. Bonus point if you mention xsimd::broadcast_as there ;-)

Copy link
Member Author

@JohanMabille JohanMabille Feb 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving the specialization at the API level is what I did initially (where it actually becomes an overload, since we cannot partially specialize functions). The issue is that the overload as only one template parameter, and with the default value of the first overload, the compiler does not pick the right overload, leading to compilation issues for regular cases (i.e. not bool). I'll add more documentation.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gotcha

@serge-sans-paille serge-sans-paille merged commit 40ef070 into xtensor-stack:master Feb 25, 2025
59 checks passed
@serge-sans-paille
Copy link
Contributor

🙇

@JohanMabille JohanMabille deleted the broadcast_bool branch February 25, 2025 15:56
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.

2 participants