ler.image_properties.sample_caustic_points_njit

Module for sampling source positions from EPL + shear caustic regions.

Provides numba-accelerated routines for uniform rejection sampling inside arbitrary polygons, with convenience wrappers to sample from the double caustic of an EPL + external shear lens model.

Usage:

Draw a single source from the double-caustic region:

>>> from ler.image_properties.sample_caustic_points_njit import sample_source_from_double_caustic
>>> beta, pts = sample_source_from_double_caustic(
...     q=0.8, phi=0.0, gamma=2.0, gamma1=0.03, gamma2=-0.01
... )

Copyright (C) 2026 Phurailatpam Hemantakumar. Distributed under MIT License.

Module Contents

Functions

sample_uniform_in_polygon(xv, yv[, max_tries])

Draw one uniform random point inside a polygon via rejection sampling.

sample_many_uniform_in_polygon(xv, yv, n_samples[, ...])

Draw multiple uniform random points inside a polygon.

sample_source_from_double_caustic(q, phi, gamma, ...)

Draw one source position uniformly inside the double caustic.

sample_many_sources_from_double_caustic(q, phi, gamma, ...)

Draw many source positions uniformly inside the double caustic.

Attributes

TWO_PI

ler.image_properties.sample_caustic_points_njit.TWO_PI[source]
ler.image_properties.sample_caustic_points_njit.sample_uniform_in_polygon(xv, yv, max_tries=100000)[source]

Draw one uniform random point inside a polygon via rejection sampling.

Parameters:
xvnumpy.ndarray

Polygon vertex x-coordinates.

yvnumpy.ndarray

Polygon vertex y-coordinates.

max_triesint

Maximum number of rejection-sampling attempts. default: 100000

Returns:
xfloat

Sampled x-coordinate.

yfloat

Sampled y-coordinate.

okint

Sampling flag where 1 indicates success and 0 indicates failure.

Examples

>>> import numpy as np
>>> xv = np.array([0.0, 1.0, 1.0, 0.0])
>>> yv = np.array([0.0, 0.0, 1.0, 1.0])
>>> x, y, ok = sample_uniform_in_polygon(xv, yv)
ler.image_properties.sample_caustic_points_njit.sample_many_uniform_in_polygon(xv, yv, n_samples, max_tries_per=100000)[source]

Draw multiple uniform random points inside a polygon.

Sampling uses batched rejection from the polygon bounding box.

Parameters:
xvnumpy.ndarray

Polygon vertex x-coordinates.

yvnumpy.ndarray

Polygon vertex y-coordinates.

n_samplesint

Number of requested samples.

max_tries_perint

Maximum attempts per requested sample. default: 100000

Returns:
x_srcnumpy.ndarray

Sampled x-coordinates with capacity n_samples.

y_srcnumpy.ndarray

Sampled y-coordinates with capacity n_samples.

n_okint

Number of valid samples in the leading entries.

Examples

>>> import numpy as np
>>> xv = np.array([0.0, 1.0, 1.0, 0.0])
>>> yv = np.array([0.0, 0.0, 1.0, 1.0])
>>> x_src, y_src, n_ok = sample_many_uniform_in_polygon(xv, yv, 100)
ler.image_properties.sample_caustic_points_njit.sample_source_from_double_caustic(q, phi, gamma, gamma1, gamma2, theta_E=1.0, num_th=500, maginf=-100.0, max_tries=10)[source]

Draw one source position uniformly inside the double caustic.

Parameters:
qfloat

Lens axis ratio.

phifloat

Lens position angle (rad).

gammafloat

EPL slope parameter.

gamma1float

External shear component 1.

gamma2float

External shear component 2.

theta_Efloat

Einstein radius used to construct the caustic. default: 1.0

num_thint

Number of angular samples for the boundary curve. default: 500

maginffloat

Magnification cutoff used in the caustic construction. default: -100.0

max_triesint

Maximum rejection-sampling attempts. default: 100000

Returns:
beta_xfloat

Sampled source x-coordinate.

beta_yfloat

Sampled source y-coordinate.

okint

Sampling status flag where 1 indicates success.

Examples

>>> beta_x, beta_y, ok = sample_source_from_double_caustic(
...     q=0.8, phi=0.0, gamma=2.0, gamma1=0.03, gamma2=-0.01
... )
ler.image_properties.sample_caustic_points_njit.sample_many_sources_from_double_caustic(q, phi, gamma, gamma1, gamma2, n_samples, theta_E=1.0, num_th=500, maginf=-100.0, max_tries_per=10)[source]

Draw many source positions uniformly inside the double caustic.

Parameters:
qfloat

Lens axis ratio.

phifloat

Lens position angle (rad).

gammafloat

EPL slope parameter.

gamma1float

External shear component 1.

gamma2float

External shear component 2.

n_samplesint

Number of source samples requested.

theta_Efloat

Einstein radius used to construct the caustic. default: 1.0

num_thint

Number of angular samples for the boundary curve. default: 500

maginffloat

Magnification cutoff used in the caustic construction. default: -100.0

max_tries_perint

Maximum rejection attempts per requested sample. default: 100000

Returns:
beta_xnumpy.ndarray

Sampled source x-coordinates.

beta_ynumpy.ndarray

Sampled source y-coordinates.

n_okint

Number of valid samples in the leading entries.

Examples

>>> bx, by, n_ok = sample_many_sources_from_double_caustic(
...     q=0.8, phi=0.0, gamma=2.0, gamma1=0.03, gamma2=-0.01, n_samples=1000
... )