LSSTApplications  21.0.0+75b29a8a7f,21.0.0+e70536a077,21.0.0-1-ga51b5d4+62c747d40b,21.0.0-11-ga6ea59e8e+47cba9fc36,21.0.0-2-g103fe59+914993bf7c,21.0.0-2-g1367e85+e2614ded12,21.0.0-2-g45278ab+e70536a077,21.0.0-2-g4bc9b9f+7b2b5f8678,21.0.0-2-g5242d73+e2614ded12,21.0.0-2-g54e2caa+6403186824,21.0.0-2-g7f82c8f+3ac4acbffc,21.0.0-2-g8dde007+04a6aea1af,21.0.0-2-g8f08a60+9402881886,21.0.0-2-ga326454+3ac4acbffc,21.0.0-2-ga63a54e+81dd751046,21.0.0-2-gc738bc1+5f65c6e7a9,21.0.0-2-gde069b7+26c92b3210,21.0.0-2-gecfae73+0993ddc9bd,21.0.0-2-gfc62afb+e2614ded12,21.0.0-21-gba890a8+5a4f502a26,21.0.0-23-g9966ff26+03098d1af8,21.0.0-3-g357aad2+8ad216c477,21.0.0-3-g4be5c26+e2614ded12,21.0.0-3-g6d51c4a+4d2fe0280d,21.0.0-3-g7d9da8d+75b29a8a7f,21.0.0-3-gaa929c8+522e0f12c2,21.0.0-3-ge02ed75+4d2fe0280d,21.0.0-4-g3300ddd+e70536a077,21.0.0-4-gc004bbf+eac6615e82,21.0.0-4-gccdca77+f94adcd104,21.0.0-4-gd1c1571+18b81799f9,21.0.0-5-g7b47fff+4d2fe0280d,21.0.0-5-gb155db7+d2632f662b,21.0.0-5-gdf36809+637e4641ee,21.0.0-6-g722ad07+28c848f42a,21.0.0-7-g959bb79+522e0f12c2,21.0.0-7-gfd72ab2+cf01990774,21.0.0-9-g87fb7b8d+e2ab11cdd6,w.2021.04
LSSTDataManagementBasePackage
Functions
random.cc File Reference
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include "lsst/afw/image/Image.h"
#include "lsst/afw/math/Random.h"

Go to the source code of this file.

Functions

template<typename ImageT >
void declareRandomImage (py::module &mod)
 
 PYBIND11_MODULE (random, mod)
 

Function Documentation

◆ declareRandomImage()

template<typename ImageT >
void declareRandomImage ( py::module &  mod)

Definition at line 36 of file random.cc.

36  {
37  mod.def("randomUniformImage", (void (*)(ImageT *, Random &))randomUniformImage<ImageT>);
38  mod.def("randomUniformPosImage", (void (*)(ImageT *, Random &))randomUniformPosImage<ImageT>);
39  mod.def("randomUniformIntImage",
40  (void (*)(ImageT *, Random &, unsigned long))randomUniformIntImage<ImageT>);
41  mod.def("randomFlatImage",
42  (void (*)(ImageT *, Random &, double const, double const))randomFlatImage<ImageT>);
43  mod.def("randomGaussianImage", (void (*)(ImageT *, Random &))randomGaussianImage<ImageT>);
44  mod.def("randomChisqImage", (void (*)(ImageT *, Random &, double const))randomChisqImage<ImageT>);
45  mod.def("randomPoissonImage", (void (*)(ImageT *, Random &, double const))randomPoissonImage<ImageT>);
46 }

◆ PYBIND11_MODULE()

PYBIND11_MODULE ( random  ,
mod   
)

Definition at line 48 of file random.cc.

48  {
49  py::class_<Random> clsRandom(mod, "Random");
50 
51  /* Member types and enums */
52  py::enum_<Random::Algorithm>(clsRandom, "Algorithm")
53  .value("MT19937", Random::Algorithm::MT19937)
54  .value("RANLXS0", Random::Algorithm::RANLXS0)
55  .value("RANLXS1", Random::Algorithm::RANLXS1)
56  .value("RANLXS2", Random::Algorithm::RANLXS2)
57  .value("RANLXD1", Random::Algorithm::RANLXD1)
58  .value("RANLXD2", Random::Algorithm::RANLXD2)
59  .value("RANLUX", Random::Algorithm::RANLUX)
60  .value("RANLUX389", Random::Algorithm::RANLUX389)
61  .value("CMRG", Random::Algorithm::CMRG)
62  .value("MRG", Random::Algorithm::MRG)
63  .value("TAUS", Random::Algorithm::TAUS)
64  .value("TAUS2", Random::Algorithm::TAUS2)
65  .value("GFSR4", Random::Algorithm::GFSR4)
66  .value("NUM_ALGORITHMS", Random::Algorithm::NUM_ALGORITHMS)
67  .export_values();
68 
69  /* Constructors */
70  clsRandom.def(py::init<Random::Algorithm, unsigned long>(), "algorithm"_a = Random::Algorithm::MT19937,
71  "seed"_a = 1);
72  clsRandom.def(py::init<std::string const &, unsigned long>(), "algorithm"_a, "seed"_a = 1);
73 
74  /* Members */
75  clsRandom.def("deepCopy", &Random::deepCopy);
76  clsRandom.def("getAlgorithm", &Random::getAlgorithm);
77  clsRandom.def("getAlgorithmName", &Random::getAlgorithmName);
78  clsRandom.def_static("getAlgorithmNames", &Random::getAlgorithmNames);
79  clsRandom.def("getSeed", &Random::getSeed);
80  clsRandom.def("uniform", &Random::uniform);
81  clsRandom.def("uniformPos", &Random::uniformPos);
82  clsRandom.def("uniformInt", &Random::uniformInt);
83  clsRandom.def("flat", &Random::flat);
84  clsRandom.def("gaussian", &Random::gaussian);
85  clsRandom.def("chisq", &Random::chisq);
86  clsRandom.def("poisson", &Random::poisson);
87 
88  // getState and setState are special, their std::string cannot
89  // be converted to a Python string (needs to go to bytes instead)
90  // thus use the same solution as employed with Swig
91  clsRandom.def("getState", [](Random &self) -> py::object {
92  std::string state = self.getState();
93  return py::reinterpret_steal<py::object>(PyBytes_FromStringAndSize(state.data(), state.size()));
94  });
95  clsRandom.def("setState", [](Random &self, py::bytes const &state) { self.setState(state); });
96 
97  /* Module level */
98  declareRandomImage<lsst::afw::image::Image<double>>(mod);
99  declareRandomImage<lsst::afw::image::Image<float>>(mod);
100 }
std::string
STL class.
std::string::size
T size(T... args)
bytes
table::Key< table::Array< std::uint8_t > > bytes
Definition: python.h:135
lsst::afw::math::Random
A class that can be used to generate sequences of random numbers according to a number of different a...
Definition: Random.h:57
std::string::data
T data(T... args)