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
|
Draw one uniform random point inside a polygon via rejection sampling. |
|
Draw multiple uniform random points inside a polygon. |
|
Draw one source position uniformly inside the double caustic. |
|
Draw many source positions uniformly inside the double caustic. |
Attributes
- 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:
- xv
numpy.ndarray Polygon vertex x-coordinates.
- yv
numpy.ndarray Polygon vertex y-coordinates.
- max_tries
int Maximum number of rejection-sampling attempts. default: 100000
- xv
- Returns:
- x
float Sampled x-coordinate.
- y
float Sampled y-coordinate.
- ok
int Sampling flag where 1 indicates success and 0 indicates failure.
- x
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:
- xv
numpy.ndarray Polygon vertex x-coordinates.
- yv
numpy.ndarray Polygon vertex y-coordinates.
- n_samples
int Number of requested samples.
- max_tries_per
int Maximum attempts per requested sample. default: 100000
- xv
- Returns:
- x_src
numpy.ndarray Sampled x-coordinates with capacity
n_samples.- y_src
numpy.ndarray Sampled y-coordinates with capacity
n_samples.- n_ok
int Number of valid samples in the leading entries.
- x_src
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:
- q
float Lens axis ratio.
- phi
float Lens position angle (rad).
- gamma
float EPL slope parameter.
- gamma1
float External shear component 1.
- gamma2
float External shear component 2.
- theta_E
float Einstein radius used to construct the caustic. default: 1.0
- num_th
int Number of angular samples for the boundary curve. default: 500
- maginf
float Magnification cutoff used in the caustic construction. default: -100.0
- max_tries
int Maximum rejection-sampling attempts. default: 100000
- q
- Returns:
- beta_x
float Sampled source x-coordinate.
- beta_y
float Sampled source y-coordinate.
- ok
int Sampling status flag where 1 indicates success.
- beta_x
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:
- q
float Lens axis ratio.
- phi
float Lens position angle (rad).
- gamma
float EPL slope parameter.
- gamma1
float External shear component 1.
- gamma2
float External shear component 2.
- n_samples
int Number of source samples requested.
- theta_E
float Einstein radius used to construct the caustic. default: 1.0
- num_th
int Number of angular samples for the boundary curve. default: 500
- maginf
float Magnification cutoff used in the caustic construction. default: -100.0
- max_tries_per
int Maximum rejection attempts per requested sample. default: 100000
- q
- Returns:
- beta_x
numpy.ndarray Sampled source x-coordinates.
- beta_y
numpy.ndarray Sampled source y-coordinates.
- n_ok
int Number of valid samples in the leading entries.
- beta_x
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 ... )