"""Use cffi to access any of the underlying C functions from distributions.h"""importosimportnumpyasnpimportcffifrom.parseimportparse_distributions_hffi=cffi.FFI()inc_dir=os.path.join(np.get_include(),'numpy')# Basic numpy typesffi.cdef(''' typedef intptr_t npy_intp; typedef unsigned char npy_bool;''')parse_distributions_h(ffi,inc_dir)lib=ffi.dlopen(np.random._generator.__file__)# Compare the distributions.h random_standard_normal_fill to# Generator.standard_randombit_gen=np.random.PCG64()rng=np.random.Generator(bit_gen)state=bit_gen.stateinterface=rng.bit_generator.cffin=100vals_cffi=ffi.new('double[%d]'%n)lib.random_standard_normal_fill(interface.bit_generator,n,vals_cffi)# reset the statebit_gen.state=statevals=rng.standard_normal(n)foriinrange(n):assertvals[i]==vals_cffi[i]