15#error "This file is for OpenMP compilation only." 
   19#error "This file is for C++ compilation only." 
   22#ifndef _LIBCPP_COMPLEX 
   23#define _LIBCPP_COMPLEX 
   28#define __DEVICE__ static constexpr __attribute__((nothrow)) 
   45typename enable_if<is_integral<_Tp>::value || is_same<_Tp, double>::value,
 
   48  return atan2(0., __re);
 
 
   52typename enable_if<is_same<_Tp, float>::value, 
float>::type 
arg(_Tp __re) {
 
 
   63  return __c.real() * 
__c.real() + 
__c.imag() * 
__c.imag();
 
 
   67#ifdef _GLIBCXX20_CONSTEXPR 
   68#define CXX20_CONSTEXPR_DEVICE __DEVICE__ 
   70#define CXX20_CONSTEXPR_DEVICE 
   74  return std::complex<_Tp>(
__c.real(), -
__c.imag());
 
 
   79template <
class _Tp> std::complex<_Tp> 
proj(
const std::complex<_Tp> &
__c) {
 
   80  std::complex<_Tp> __r = 
__c;
 
 
   89complex<_Tp> 
polar(
const _Tp &__rho, 
const _Tp &__theta = _Tp()) {
 
   91    return std::complex<_Tp>(_Tp(
NAN), _Tp(
NAN));
 
   94      return std::complex<_Tp>(__rho, __theta);
 
   95    return std::complex<_Tp>(__theta, __theta);
 
   99      return std::complex<_Tp>(__rho, _Tp(
NAN));
 
  100    return std::complex<_Tp>(_Tp(
NAN), _Tp(
NAN));
 
  102  _Tp __x = __rho * 
cos(__theta);
 
  105  _Tp 
__y = __rho * 
sin(__theta);
 
  108  return std::complex<_Tp>(__x, 
__y);
 
 
  113template <
class _Tp> std::complex<_Tp> 
log(
const std::complex<_Tp> &__x) {
 
  114  return std::complex<_Tp>(
log(
abs(__x)), 
arg(__x));
 
 
  119template <
class _Tp> std::complex<_Tp> 
log10(
const std::complex<_Tp> &__x) {
 
  120  return log(__x) / 
log(_Tp(10));
 
 
  128    return std::complex<_Tp>(_Tp(
INFINITY), __x.imag());
 
  130    if (__x.real() > _Tp(0))
 
  131      return std::complex<_Tp>(__x.real(), 
std::isnan(__x.imag())
 
  134    return std::complex<_Tp>(
std::isnan(__x.imag()) ? __x.imag() : _Tp(0),
 
 
  144  _Tp __i = __x.imag();
 
  146    if (__x.real() < _Tp(0)) {
 
  152      return std::complex<_Tp>(__x.real(), __i);
 
  154  } 
else if (
std::isnan(__x.real()) && __x.imag() == 0)
 
  156  _Tp __e = 
exp(__x.real());
 
  157  return std::complex<_Tp>(__e * 
cos(__i), __e * 
sin(__i));
 
 
  163std::complex<_Tp> 
pow(
const std::complex<_Tp> &__x,
 
  164                      const std::complex<_Tp> &
__y) {
 
 
  170template <
class _Tp> std::complex<_Tp> 
__sqr(
const std::complex<_Tp> &__x) {
 
  171  return std::complex<_Tp>((__x.real() - __x.imag()) *
 
  172                               (__x.real() + __x.imag()),
 
  173                           _Tp(2) * __x.real() * __x.imag());
 
 
  180  const _Tp __pi(
atan2(+0., -0.));
 
  185      return std::complex<_Tp>(__x.real(),
 
  186                               copysign(__pi * _Tp(0.25), __x.imag()));
 
  187    return std::complex<_Tp>(__x.real(), 
copysign(_Tp(0), __x.imag()));
 
  191      return std::complex<_Tp>(__x.imag(), __x.real());
 
  194    return std::complex<_Tp>(__x.real(), __x.real());
 
  197    return std::complex<_Tp>(
copysign(__x.imag(), __x.real()),
 
  198                             copysign(__pi / _Tp(2), __x.imag()));
 
  199  std::complex<_Tp> __z = 
log(__x + 
sqrt(
__sqr(__x) + _Tp(1)));
 
  200  return std::complex<_Tp>(
copysign(__z.real(), __x.real()),
 
 
  208  const _Tp __pi(
atan2(+0., -0.));
 
  211      return std::complex<_Tp>(
abs(__x.real()), __x.imag());
 
  214        return std::complex<_Tp>(__x.real(),
 
  215                                 copysign(__pi * _Tp(0.25), __x.imag()));
 
  217        return std::complex<_Tp>(-__x.real(),
 
  218                                 copysign(__pi * _Tp(0.75), __x.imag()));
 
  221      return std::complex<_Tp>(-__x.real(), 
copysign(__pi, __x.imag()));
 
  222    return std::complex<_Tp>(__x.real(), 
copysign(_Tp(0), __x.imag()));
 
  226      return std::complex<_Tp>(
abs(__x.imag()), __x.real());
 
  227    return std::complex<_Tp>(__x.real(), __x.real());
 
  230    return std::complex<_Tp>(
abs(__x.imag()),
 
  231                             copysign(__pi / _Tp(2), __x.imag()));
 
  232  std::complex<_Tp> __z = 
log(__x + 
sqrt(
__sqr(__x) - _Tp(1)));
 
  233  return std::complex<_Tp>(
copysign(__z.real(), _Tp(0)),
 
 
  241  const _Tp __pi(
atan2(+0., -0.));
 
  243    return std::complex<_Tp>(
copysign(_Tp(0), __x.real()),
 
  244                             copysign(__pi / _Tp(2), __x.imag()));
 
  247    if (
std::isinf(__x.real()) || __x.real() == 0)
 
  248      return std::complex<_Tp>(
copysign(_Tp(0), __x.real()), __x.imag());
 
  249    return std::complex<_Tp>(__x.imag(), __x.imag());
 
  252    return std::complex<_Tp>(__x.real(), __x.real());
 
  255    return std::complex<_Tp>(
copysign(_Tp(0), __x.real()),
 
  256                             copysign(__pi / _Tp(2), __x.imag()));
 
  258  if (
abs(__x.real()) == _Tp(1) && __x.imag() == _Tp(0)) {
 
  262  std::complex<_Tp> __z = 
log((_Tp(1) + __x) / (_Tp(1) - __x)) / _Tp(2);
 
  263  return std::complex<_Tp>(
copysign(__z.real(), __x.real()),
 
 
  272    return std::complex<_Tp>(__x.real(), _Tp(
NAN));
 
  274    return std::complex<_Tp>(__x.real(), _Tp(
NAN));
 
  277  return std::complex<_Tp>(
sinh(__x.real()) * 
cos(__x.imag()),
 
  278                           cosh(__x.real()) * 
sin(__x.imag()));
 
 
  286    return std::complex<_Tp>(
abs(__x.real()), _Tp(
NAN));
 
  288    return std::complex<_Tp>(_Tp(
NAN), __x.real());
 
  289  if (__x.real() == 0 && __x.imag() == 0)
 
  290    return std::complex<_Tp>(_Tp(1), __x.imag());
 
  292    return std::complex<_Tp>(
abs(__x.real()), __x.imag());
 
  293  return std::complex<_Tp>(
cosh(__x.real()) * 
cos(__x.imag()),
 
  294                           sinh(__x.real()) * 
sin(__x.imag()));
 
 
  303      return std::complex<_Tp>(_Tp(1), _Tp(0));
 
  304    return std::complex<_Tp>(_Tp(1),
 
  307  if (
std::isnan(__x.real()) && __x.imag() == 0)
 
  309  _Tp __2r(_Tp(2) * __x.real());
 
  310  _Tp __2i(_Tp(2) * __x.imag());
 
  311  _Tp __d(
cosh(__2r) + 
cos(__2i));
 
  312  _Tp __2rsh(
sinh(__2r));
 
  314    return std::complex<_Tp>(__2rsh > _Tp(0) ? _Tp(1) : _Tp(-1),
 
  315                             __2i > _Tp(0) ? _Tp(0) : _Tp(-0.));
 
  316  return std::complex<_Tp>(__2rsh / __d, 
sin(__2i) / __d);
 
 
  323  std::complex<_Tp> __z = 
asinh(complex<_Tp>(-__x.imag(), __x.real()));
 
  324  return std::complex<_Tp>(__z.imag(), -__z.real());
 
 
  331  const _Tp __pi(
atan2(+0., -0.));
 
  334      return std::complex<_Tp>(__x.imag(), __x.real());
 
  336      if (__x.real() < _Tp(0))
 
  337        return std::complex<_Tp>(_Tp(0.75) * __pi, -__x.imag());
 
  338      return std::complex<_Tp>(_Tp(0.25) * __pi, -__x.imag());
 
  340    if (__x.real() < _Tp(0))
 
  341      return std::complex<_Tp>(__pi,
 
  342                               signbit(__x.imag()) ? -__x.real() : __x.real());
 
  343    return std::complex<_Tp>(_Tp(0),
 
  344                             signbit(__x.imag()) ? __x.real() : -__x.real());
 
  348      return std::complex<_Tp>(__x.real(), -__x.imag());
 
  349    return std::complex<_Tp>(__x.real(), __x.real());
 
  352    return std::complex<_Tp>(__pi / _Tp(2), -__x.imag());
 
  353  if (__x.real() == 0 && (__x.imag() == 0 || 
isnan(__x.imag())))
 
  354    return std::complex<_Tp>(__pi / _Tp(2), -__x.imag());
 
  355  std::complex<_Tp> __z = 
log(__x + 
sqrt(
__sqr(__x) - _Tp(1)));
 
  357    return std::complex<_Tp>(
abs(__z.imag()), 
abs(__z.real()));
 
  358  return std::complex<_Tp>(
abs(__z.imag()), -
abs(__z.real()));
 
 
  365  std::complex<_Tp> __z = 
atanh(complex<_Tp>(-__x.imag(), __x.real()));
 
  366  return std::complex<_Tp>(__z.imag(), -__z.real());
 
 
  373  std::complex<_Tp> __z = 
sinh(complex<_Tp>(-__x.imag(), __x.real()));
 
  374  return std::complex<_Tp>(__z.imag(), -__z.real());
 
 
  379template <
class _Tp> std::complex<_Tp> 
cos(
const std::complex<_Tp> &__x) {
 
  380  return cosh(complex<_Tp>(-__x.imag(), __x.real()));
 
 
  387  std::complex<_Tp> __z = 
tanh(complex<_Tp>(-__x.imag(), __x.real()));
 
  388  return std::complex<_Tp>(__z.imag(), -__z.real());
 
 
static __inline__ vector float vector float vector float __c
static __inline__ uint32_t uint32_t __y
#define CXX20_CONSTEXPR_DEVICE
__DEVICE__ _Tp norm(const std::complex< _Tp > &__c)
__DEVICE__ bool isnan(float __x)
__DEVICE__ bool isfinite(float __x)
__DEVICE__ _Tp abs(const std::complex< _Tp > &__c)
std::complex< _Tp > __sqr(const std::complex< _Tp > &__x)
complex< _Tp > polar(const _Tp &__rho, const _Tp &__theta=_Tp())
__DEVICE__ bool signbit(float __x)
__DEVICE__ bool isinf(float __x)
__DEVICE__ float atan2f(float __a, float __b)
__DEVICE__ _Tp arg(const std::complex< _Tp > &__c)
std::complex< _Tp > proj(const std::complex< _Tp > &__c)
#define copysign(__x, __y)