o
    ְi/                     @   s   d dl mZ dd Zdd ZdZejddefd	d
ddddddddfdeddZed Zejddefd	d
ddddddddfdeddZdS )    )_corec                   C      t d)Nz*gcd cannot be computed with boolean arrays	TypeError r   r   G/home/ubuntu/.local/lib/python3.10/site-packages/cupy/_math/rational.py_negative_gcd_error      r   c                   C   r   )Nz*lcm cannot be computed with boolean arraysr   r   r   r   r   _negative_lcm_error   r	   r
   z
template <typename T> inline __device__ T gcd(T in0, T in1) {
  T r;
  while (in1 != 0) {
    r = in0 % in1;
    in0 = in1;
    in1 = r;
  }
  if (in0 < 0)
    return -in0;
  return in0;
}
cupy_gcdz??->?zbb->bzBB->Bzhh->hzHH->Hzii->izII->Izll->lzLL->Lzqq->qzQQ->Qzout0 = gcd(in0, in1)zXComputes gcd of ``x1`` and ``x2`` elementwise.

    .. seealso:: :data:`numpy.gcd`

    )preambledocz
template <typename T> inline __device__ T lcm(T in0, T in1) {
  T r = gcd(in0, in1);
  if (r == 0)
    return 0;
  r = in0 / r * in1;
  if (r < 0)
    return -r;
  return r;
}
cupy_lcmzout0 = lcm(in0, in1)zXComputes lcm of ``x1`` and ``x2`` elementwise.

    .. seealso:: :data:`numpy.lcm`

    N)	cupyr   r   r
   _gcd_preamblecreate_ufuncgcd_lcm_preamblelcmr   r   r   r   <module>   s2    
