403Webshell
Server IP : 217.160.0.135  /  Your IP : 216.73.217.117
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 :  /lib/python3/dist-packages/pythran/pythonic/include/types/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/pythran/pythonic/include/types/complex.hpp
#ifndef PYTHONIC_INCLUDE_TYPES_COMPLEX_HPP
#define PYTHONIC_INCLUDE_TYPES_COMPLEX_HPP

#include <complex>

#if defined(_OPENMP)
#pragma omp declare reduction(+ : std::complex < float > : omp_out += omp_in)
#pragma omp declare reduction(* : std::complex < float > : omp_out *= omp_in)
#pragma omp declare reduction(+ : std::complex < double > : omp_out += omp_in)
#pragma omp declare reduction(* : std::complex < double > : omp_out *= omp_in)
#pragma omp declare reduction(+ : std::complex < long double > : omp_out +=    \
                              omp_in)
#pragma omp declare reduction(* : std::complex < long double > : omp_out *=    \
                              omp_in)
#endif

PYTHONIC_NS_BEGIN
namespace numpy
{
  namespace functor
  {
    struct complex64;
    struct complex128;
    struct complex256;
  }
}

PYTHONIC_NS_END

namespace std
{

  template <class T, class S>
  using complex_broadcast_t = typename std::enable_if<
      std::is_scalar<S>::value && !std::is_same<T, S>::value,
      std::complex<typename std::common_type<T, S>::type>>::type;
  template <class T, class S>
  using complex_bool_t = typename std::enable_if<
      std::is_scalar<S>::value && !std::is_same<T, S>::value, bool>::type;

  template <class T, class S>
  complex_broadcast_t<T, S> operator+(std::complex<T> self, S other);
  template <class T, class S>
  complex_broadcast_t<T, S> operator+(S self, std::complex<T> other);
  template <class T, class S>
  complex_broadcast_t<T, S> operator-(std::complex<T> self, S other);
  template <class T, class S>
  complex_broadcast_t<T, S> operator-(S self, std::complex<T> other);
  template <class T, class S>
  complex_broadcast_t<T, S> operator*(std::complex<T> self, S other);
  template <class T, class S>
  complex_broadcast_t<T, S> operator*(S self, std::complex<T> other);
  template <class T, class S>
  complex_broadcast_t<T, S> operator/(std::complex<T> self, S other);
  template <class T, class S>
  complex_broadcast_t<T, S> operator/(S self, std::complex<T> other);

  template <class T, class S>
  complex_bool_t<T, S> operator==(std::complex<T> self, S other);
  template <class T, class S>
  complex_bool_t<T, S> operator==(S self, std::complex<T> other);
  template <class T, class S>
  complex_bool_t<T, S> operator!=(std::complex<T> self, S other);
  template <class T, class S>
  complex_bool_t<T, S> operator!=(S self, std::complex<T> other);

  template <class T, class S>
  bool operator<(std::complex<T> self, std::complex<S> other);
  template <class T, class S>
  bool operator<=(std::complex<T> self, std::complex<S> other);
  template <class T, class S>
  bool operator>(std::complex<T> self, std::complex<S> other);
  template <class T, class S>
  bool operator>=(std::complex<T> self, std::complex<S> other);
  template <class T, class S>
  bool operator&&(std::complex<T> self, std::complex<S> other);
  template <class T, class S>
  bool operator||(std::complex<T> self, std::complex<S> other);

  template <class T>
  bool operator!(std::complex<T> self);

  template <class T>
  struct hash<std::complex<T>> {
    size_t operator()(std::complex<T> const &x) const;
  };
}

PYTHONIC_NS_BEGIN
namespace builtins
{
  template <class T>
  T getattr(types::attr::REAL, std::complex<T> const &self);
  template <class T>
  T getattr(types::attr::IMAG, std::complex<T> const &self);
  numpy::functor::complex64 getattr(types::attr::DTYPE,
                                    std::complex<float> const &self);
  numpy::functor::complex128 getattr(types::attr::DTYPE,
                                     std::complex<double> const &self);
  numpy::functor::complex256 getattr(types::attr::DTYPE,
                                     std::complex<long double> const &self);
}
PYTHONIC_NS_END

/* for type inference { */

#include "pythonic/include/types/combined.hpp"
template <class K, class T>
struct __combined<indexable<K>, std::complex<T>> {
  using type = std::complex<T>;
};

template <class K, class T>
struct __combined<std::complex<T>, indexable<K>> {
  using type = std::complex<T>;
};
template <class T0, class T1>
struct __combined<std::complex<T0>, std::complex<T1>> {
  using type = std::complex<typename __combined<T0, T1>::type>;
};

/* } */

#define STD_COMPLEX_IMPLICT_OPERATOR_CAST(op)                                  \
  template <class T, class U>                                                  \
  auto operator op(std::complex<T> const &lhs, std::complex<U> const &rhs)     \
      ->std::complex<typename std::common_type<T, U>::type>                    \
  {                                                                            \
    using ctype = std::complex<typename std::common_type<T, U>::type>;         \
    return ctype                                                               \
    {                                                                          \
      lhs                                                                      \
    }                                                                          \
    op ctype{rhs};                                                             \
  }

STD_COMPLEX_IMPLICT_OPERATOR_CAST(+)
STD_COMPLEX_IMPLICT_OPERATOR_CAST(-)
STD_COMPLEX_IMPLICT_OPERATOR_CAST(*)
STD_COMPLEX_IMPLICT_OPERATOR_CAST(/ )
STD_COMPLEX_IMPLICT_OPERATOR_CAST(== )
STD_COMPLEX_IMPLICT_OPERATOR_CAST(!= )

#ifdef ENABLE_PYTHON_MODULE

#include "pythonic/python/core.hpp"

PYTHONIC_NS_BEGIN

template <class T>
struct to_python<std::complex<T>> {
  static PyObject *convert(std::complex<T> const &c);
};

template <class T>
struct from_python<std::complex<T>> {
  static bool is_convertible(PyObject *obj);
  static std::complex<T> convert(PyObject *obj);
};
PYTHONIC_NS_END
#endif

#endif

Youez - 2016 - github.com/yon3zu
LinuXploit