:py:mod:`ler.image_properties.sample_caustic_points_njit` ========================================================= .. py:module:: ler.image_properties.sample_caustic_points_njit .. autoapi-nested-parse:: 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. .. !! processed by numpydoc !! Module Contents --------------- Functions ~~~~~~~~~ .. autoapisummary:: ler.image_properties.sample_caustic_points_njit.sample_uniform_in_polygon ler.image_properties.sample_caustic_points_njit.sample_many_uniform_in_polygon ler.image_properties.sample_caustic_points_njit.sample_source_from_double_caustic ler.image_properties.sample_caustic_points_njit.sample_many_sources_from_double_caustic Attributes ~~~~~~~~~~ .. autoapisummary:: ler.image_properties.sample_caustic_points_njit.TWO_PI .. py:data:: TWO_PI .. py:function:: sample_uniform_in_polygon(xv, yv, max_tries=100000) 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 :Returns: **x** : ``float`` Sampled x-coordinate. **y** : ``float`` Sampled y-coordinate. **ok** : ``int`` Sampling flag where 1 indicates success and 0 indicates failure. .. rubric:: 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) .. !! processed by numpydoc !! .. py:function:: sample_many_uniform_in_polygon(xv, yv, n_samples, max_tries_per=100000) 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 :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. .. rubric:: 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) .. !! processed by numpydoc !! .. py:function:: sample_source_from_double_caustic(q, phi, gamma, gamma1, gamma2, theta_E=1.0, num_th=500, maginf=-100.0, max_tries=10) 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 :Returns: **beta_x** : ``float`` Sampled source x-coordinate. **beta_y** : ``float`` Sampled source y-coordinate. **ok** : ``int`` Sampling status flag where 1 indicates success. .. rubric:: 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 ... ) .. !! processed by numpydoc !! .. py:function:: 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) 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 :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. .. rubric:: 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 ... ) .. !! processed by numpydoc !!