| Server IP : 217.160.0.135 / Your IP : 216.73.217.85 Web Server : Apache System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64 User : sws1074145052 ( 1074145052) PHP Version : 8.3.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /usr/lib/python3/dist-packages/pythran/pythonic/types/ |
Upload File : |
#ifndef PYTHONIC_TYPES_NUMPY_BROADCAST_HPP
#define PYTHONIC_TYPES_NUMPY_BROADCAST_HPP
#include "pythonic/include/types/numpy_broadcast.hpp"
#include "pythonic/types/vectorizable_type.hpp"
#include "pythonic/types/nditerator.hpp"
#include "pythonic/types/slice.hpp"
#include "pythonic/types/tuple.hpp"
PYTHONIC_NS_BEGIN
namespace types
{
template <class T>
T const &broadcasted<T>::operator[](long i) const
{
return ref;
}
template <class T>
T const &broadcasted<T>::fast(long i) const
{
return ref;
}
#ifdef USE_XSIMD
template <class T>
template <class vectorizer>
typename broadcasted<T>::simd_iterator
broadcasted<T>::vbegin(vectorizer) const
{
return {*this};
}
template <class T>
template <class vectorizer>
typename broadcasted<T>::simd_iterator broadcasted<T>::vend(vectorizer) const
{
return {*this}; // should ! happen anyway
}
#endif
template <class T>
template <class Arg1, class... Args>
auto broadcasted<T>::operator()(long arg0, Arg1 &&arg1, Args &&... args) const
-> decltype(ref(std::forward<Arg1>(arg1), std::forward<Args>(args)...))
{
return ref(std::forward<Arg1>(arg1), std::forward<Args>(args)...);
}
template <class T>
template <class S, class Arg1, class... Args>
auto broadcasted<T>::operator()(S arg0, Arg1 &&arg1, Args &&... args) const
-> decltype(ref((arg0.step, std::forward<Arg1>(arg1)),
std::forward<Args>(args)...))
{
return {ref(std::forward<Arg1>(arg1), std::forward<Args>(args)...)};
}
template <class T>
long broadcasted<T>::flat_size() const
{
return 0;
}
template <class dtype, bool is_vectorizable>
template <class V>
broadcast_base<dtype, is_vectorizable>::broadcast_base(V v)
: _value(v)
{
}
#ifdef USE_XSIMD
template <class dtype>
template <class V>
broadcast_base<dtype, true>::broadcast_base(V v)
: _value(v), _splated(xsimd::batch<dtype>(_value))
{
}
#endif
template <class T, class B>
template <class V>
broadcast<T, B>::broadcast(V v)
: _base(v)
{
}
template <class T, class B>
typename broadcast<T, B>::dtype broadcast<T, B>::operator[](long) const
{
return _base._value;
}
template <class T, class B>
template <size_t N>
typename broadcast<T, B>::dtype broadcast<T, B>::
operator[](array<long, N>) const
{
return _base._value;
}
template <class T, class B>
typename broadcast<T, B>::dtype broadcast<T, B>::fast(long) const
{
return _base._value;
}
template <class T, class B>
template <class... Args>
typename broadcast<T, B>::dtype broadcast<T, B>::
operator()(Args &&... args) const
{
return _base._value;
}
template <class T, class B>
template <size_t I>
std::integral_constant<long, 1> broadcast<T, B>::shape() const
{
return {};
}
template <class T, class B>
long broadcast<T, B>::flat_size() const
{
return 0;
}
}
PYTHONIC_NS_END
#endif