
    Vh                        	 d dl ZdZeI ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      ZndZdZdZdZd Z	d Z
d	 Zd
 Zd ZefdZefdZefdZd Zd Zy# e$ r dZY w xY w)    N
   l   yn< l   .v l   S$ l   W= c                 `   t        j                  t        j                  d      |       } t        j                  d      |z  }t        j                  t        j                  d      t        j                  |       z        }|t        j
                  |      z  |t        j                  |      z  fS )zBox-Muller transformgHz>g-DT!@g       )hlmaxf32sqrtlogcossin)u1u2thrs       V/home/dcms/DCMS/lib/python3.12/site-packages/torch/_inductor/runtime/halide_helpers.py_pair_uniform_to_normalr      st    	v	#B	!	"R	'B
trvvbz)*Arvvbz>1rvvbz>))    c                 `   | j                         t        j                  d      k(  s(| j                         t        j                  d      k(  sJ t        j                  t        j                  d      |       } t        j
                  d      }t        j                  | dk  |  dz
  |       } | |z  S )zo
    Numerically stable function to convert a random uint into a random float uniformly sampled in [0, 1).
        g=r      )typer   UIntIntcastf64select)xscales     r   _uint_to_uniform_floatr      s     668rwwr{"affh"&&*&<<<
r
AAFF#$E
		!a%!a#Au9r   c                     d }t        |      D ]P  }| |}
}	 |t        |
      |z  |z  }  |t        |	      |z  |z  }t        |
z  }t        |	z  }|t        z   }|t        z   }R | |||fS )Nc                 0   t        j                  t        j                  d      |       } t        j                  t        j                  d      |      }t        j                  t        j                  d      | |z  dz	  t        j                  d      z        S N@   r   l    )r   r   r   u64)abs     r   umulhizphilox_impl.<locals>.umulhi.   sa    GGBGGBK#GGBGGBK#wwrwwr{a!e]bffZ6H$HIIr   )rangePHILOX_ROUND_B_U32PHILOX_ROUND_A_U32PHILOX_KEY_A_U32PHILOX_KEY_B_U32)c0c1c2c3k0k1n_roundsr&   __c0_c2s              r   philox_implr6   -   s    J
 8_ 	#rS&,r1B6&,r1B6#%#%""""	# r2r>r   c           	         t        j                  t        j                  d      |       } |j                         j	                         dk(  sJ t        j                  t        j                  d      | dz	  t        j
                  d      z        }t        j                  t        j                  d      | t        j
                  d      z        }t        |||||||      S r!   )r   r   r   r   bitsr#   r6   )seedr,   r-   r.   r/   r2   seed_hiseed_los           r   halide_philoxr<   A   s    772772;%D779>>r!!!ggbggbkDBJ"&&2D#DEGggbggbk4"&&*<#<=Gr2r2wBBr   c                     t        j                  t        j                  d      |      }t        j                  d      }t	        | |||||      S )Nr   r   )r   r   r   u32r<   )r9   offsetr2   _0s       r   	randint4xrA   L   s<    WWRWWR[&)F	Bvr2r8<<r   c                     t        | ||      \  }}}}t        |      }t        |      }t        |      }	t        |      }
|||	|
fS N)rA   r   )r9   r?   r2   i1i2i3i4r   r   u3u4s              r   rand4xrJ   R   sN    tVX6NBB		#B		#B		#B		#Br2r>r   c                 *    t        | ||      \  }}}}|S rC   )rA   )r9   r?   r2   retr3   s        r   randintrM   [   s    T684LCAqJr   c                 2    t        | ||      }t        |      S rC   )rM   r   )r9   r?   r2   sources       r   randrP   `   s    T68,F!&))r   c                 |    t        | |t              \  }}}}t        |      }t        |      }t        ||      \  }}|S rC   )rA   PHILOX_N_ROUNDS_DEFAULTr   r   )r9   r?   rD   rE   r3   r   r   n1s           r   randnrT   e   sB    T6+BCLBAq		#B		#B#B+EBIr   c                    t        | |t              \  }}}}t        j                  t        j                  d      |      }t        j                  t        j                  d      |      }||dz  z  }||z
  }	|t        j                  t        j                  d      |	      z  }t        j                  t        j
                  d      |      |z   }|S )Nr"   r   )rA   rR   r   r   r   r   )
r9   r?   lowhighr0r1_r2_r3resultsizes
             r   	randint64r^   m   s     v/FGBC	b	!B	b	!B28_F#:Dbggbggbk400FWWRVVBZ(3.FMr   )halider   ImportErrorrR   r>   r*   r+   r)   r(   r   r   r6   r<   rA   rJ   rM   rP   rT   r^    r   r   <module>rb      s     >rvvj)rvvj)
+
+* (C= #:  $; 
 !8 *
	S  	Bs   B   B
	B
