PyTransit 2.6.6__tar.gz → 2.6.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. {pytransit-2.6.6 → pytransit-2.6.7}/PKG-INFO +2 -1
  2. {pytransit-2.6.6 → pytransit-2.6.7}/PyTransit.egg-info/PKG-INFO +2 -1
  3. {pytransit-2.6.6 → pytransit-2.6.7}/PyTransit.egg-info/SOURCES.txt +3 -0
  4. pytransit-2.6.6/requirements.txt → pytransit-2.6.7/PyTransit.egg-info/requires.txt +2 -1
  5. {pytransit-2.6.6 → pytransit-2.6.7}/pyproject.toml +1 -1
  6. pytransit-2.6.7/pytransit/models/roadrunner/opmodel.py +111 -0
  7. pytransit-2.6.7/pytransit/models/roadrunner/rrmodel.py +230 -0
  8. pytransit-2.6.7/pytransit/models/roadrunner/tsmodel.py +136 -0
  9. pytransit-2.6.6/PyTransit.egg-info/requires.txt → pytransit-2.6.7/requirements.txt +1 -0
  10. {pytransit-2.6.6 → pytransit-2.6.7}/LICENSE +0 -0
  11. {pytransit-2.6.6 → pytransit-2.6.7}/MANIFEST.in +0 -0
  12. {pytransit-2.6.6 → pytransit-2.6.7}/PyTransit.egg-info/dependency_links.txt +0 -0
  13. {pytransit-2.6.6 → pytransit-2.6.7}/PyTransit.egg-info/top_level.txt +0 -0
  14. {pytransit-2.6.6 → pytransit-2.6.7}/README.md +0 -0
  15. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/__init__.py +0 -0
  16. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/contamination/__init__.py +0 -0
  17. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/contamination/contamination.py +0 -0
  18. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/contamination/data/spectra.h5 +0 -0
  19. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/contamination/data/transmission.nc +0 -0
  20. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/contamination/filter.py +0 -0
  21. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/contamination/instrument.py +0 -0
  22. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/contamination/plotting.py +0 -0
  23. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/limb_darkening.py +0 -0
  24. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/__init__.py +0 -0
  25. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/baselines/__init__.py +0 -0
  26. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/baselines/legendrebaseline.py +0 -0
  27. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/baselines/linearbaseline.py +0 -0
  28. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/cntlpf.py +0 -0
  29. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/eclipselpf.py +0 -0
  30. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/loglikelihood/__init__.py +0 -0
  31. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/loglikelihood/celeriteloglikelihood.py +0 -0
  32. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/loglikelihood/clloglikelihood.py +0 -0
  33. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/loglikelihood/fmcloglikelihood.py +0 -0
  34. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/loglikelihood/logisticloglikelihood.py +0 -0
  35. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/loglikelihood/multiceleriteloglikelihood.py +0 -0
  36. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/loglikelihood/wnloglikelihood.py +0 -0
  37. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/logposteriorfunction.py +0 -0
  38. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/lpf.py +0 -0
  39. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/mclpf.py +0 -0
  40. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/mptlpf.py +0 -0
  41. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/ocllpf.py +0 -0
  42. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/ocltdvlpf.py +0 -0
  43. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/oclttvlpf.py +0 -0
  44. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/phasecurvelpf.py +0 -0
  45. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/rvlpf.py +0 -0
  46. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tdvlpf.py +0 -0
  47. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tess/__init__.py +0 -0
  48. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tess/ctesslpf.py +0 -0
  49. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tess/tessttvlpf.py +0 -0
  50. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tess/tgclpf.py +0 -0
  51. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tess/tgcmplpf.py +0 -0
  52. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tess/tmpclpf.py +0 -0
  53. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tesslpf.py +0 -0
  54. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/tessoclttvlpf.py +0 -0
  55. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/transitanalysis.py +0 -0
  56. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/transitlpf.py +0 -0
  57. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/lpf/ttvlpf.py +0 -0
  58. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/__init__.py +0 -0
  59. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/eclipse_model.py +0 -0
  60. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/gdmodel.py +0 -0
  61. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/general.py +0 -0
  62. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/ldmodel.py +0 -0
  63. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/ldtkldm.py +0 -0
  64. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/limb_darkening/__init__.py +0 -0
  65. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/limb_darkening/general.py +0 -0
  66. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/limb_darkening/linear.py +0 -0
  67. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/limb_darkening/nonlinear.py +0 -0
  68. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/limb_darkening/power_2.py +0 -0
  69. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/limb_darkening/quadratic.py +0 -0
  70. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/limb_darkening/quadratic_tri.py +0 -0
  71. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/limb_darkening/uniform.py +0 -0
  72. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/ma_chromosphere.py +0 -0
  73. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/ma_quadratic.py +0 -0
  74. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/ma_quadratic_cl.py +0 -0
  75. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/ma_uniform.py +0 -0
  76. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/ma_uniform_cl.py +0 -0
  77. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/__init__.py +0 -0
  78. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/gdmodel.py +0 -0
  79. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/general_nb.py +0 -0
  80. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/ldmodels.py +0 -0
  81. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/ldtkldm.py +0 -0
  82. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/ma_chromosphere_nb.py +0 -0
  83. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/ma_quadratic_nb.py +0 -0
  84. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/ma_uniform_nb.py +0 -0
  85. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/phasecurves.py +0 -0
  86. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/qpower2_nb.py +0 -0
  87. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/rrmodel.py +0 -0
  88. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/spmodel.py +0 -0
  89. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/numba/udmodel.py +0 -0
  90. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/opencl/ma_quadratic.cl +0 -0
  91. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/opencl/ma_uniform.cl +0 -0
  92. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/opencl/orbits.cl +0 -0
  93. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/opencl/qpower2.cl +0 -0
  94. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/osmodel.py +0 -0
  95. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/qpower2.py +0 -0
  96. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/qpower2_cl.py +0 -0
  97. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/__init__.py +0 -0
  98. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/common.py +0 -0
  99. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/ecintersection.py +0 -0
  100. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/model.py +0 -0
  101. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/model_full.py +0 -0
  102. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/model_simple.py +0 -0
  103. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/model_trspec.py +0 -0
  104. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/opmodel_full.py +0 -0
  105. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/rrmodel.cl +0 -0
  106. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/roadrunner/rrmodel_cl.py +0 -0
  107. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/transitmodel.py +0 -0
  108. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/models/uniform.py +0 -0
  109. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/orbits/__init__.py +0 -0
  110. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/orbits/orbits.py +0 -0
  111. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/orbits/orbits_py.py +0 -0
  112. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/orbits/taylor_z.py +0 -0
  113. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/param/__init__.py +0 -0
  114. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/param/parameter.py +0 -0
  115. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/param/prior.py +0 -0
  116. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/param/utilities.py +0 -0
  117. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/stars/__init__.py +0 -0
  118. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/stars/btsettl.py +0 -0
  119. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/stars/data/avg_bt_settl.fits +0 -0
  120. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/stars/data/avg_husser2013.fits +0 -0
  121. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/stars/husser2013.py +0 -0
  122. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/__init__.py +0 -0
  123. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/astrometry.py +0 -0
  124. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/constants.py +0 -0
  125. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/de.py +0 -0
  126. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/downsample.py +0 -0
  127. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/eclipses.py +0 -0
  128. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/io/__init__.py +0 -0
  129. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/io/lightcurvedata.py +0 -0
  130. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/keplerlc.py +0 -0
  131. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/mdwarfs.py +0 -0
  132. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/misc.py +0 -0
  133. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/mocklc.py +0 -0
  134. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/octasphere.py +0 -0
  135. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/phasecurves.py +0 -0
  136. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/physics.py +0 -0
  137. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/rv.py +0 -0
  138. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/utils/tess.py +0 -0
  139. {pytransit-2.6.6 → pytransit-2.6.7}/pytransit/version.py +0 -0
  140. {pytransit-2.6.6 → pytransit-2.6.7}/setup.cfg +0 -0
  141. {pytransit-2.6.6 → pytransit-2.6.7}/tests/test_contamination.py +0 -0
  142. {pytransit-2.6.6 → pytransit-2.6.7}/tests/test_ma_quadratic.py +0 -0
  143. {pytransit-2.6.6 → pytransit-2.6.7}/tests/test_ma_quadratic_nb.py +0 -0
  144. {pytransit-2.6.6 → pytransit-2.6.7}/tests/test_qpower2_nb.py +0 -0
  145. {pytransit-2.6.6 → pytransit-2.6.7}/tests/test_uniform_model.py +0 -0
  146. {pytransit-2.6.6 → pytransit-2.6.7}/tests/test_uniform_model_nb.py +0 -0
  147. {pytransit-2.6.6 → pytransit-2.6.7}/tests/test_z.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyTransit
3
- Version: 2.6.6
3
+ Version: 2.6.7
4
4
  Summary: Fast and painless exoplanet transit light curve modelling.
5
5
  Author-email: Hannu Parviainen <hpparvi@gmail.com>
6
6
  License: GPLv2
@@ -37,6 +37,7 @@ Requires-Dist: pyopencl
37
37
  Requires-Dist: corner
38
38
  Requires-Dist: celerite
39
39
  Requires-Dist: pyrr
40
+ Requires-Dist: meepmeep
40
41
 
41
42
  PyTransit
42
43
  =========
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyTransit
3
- Version: 2.6.6
3
+ Version: 2.6.7
4
4
  Summary: Fast and painless exoplanet transit light curve modelling.
5
5
  Author-email: Hannu Parviainen <hpparvi@gmail.com>
6
6
  License: GPLv2
@@ -37,6 +37,7 @@ Requires-Dist: pyopencl
37
37
  Requires-Dist: corner
38
38
  Requires-Dist: celerite
39
39
  Requires-Dist: pyrr
40
+ Requires-Dist: meepmeep
40
41
 
41
42
  PyTransit
42
43
  =========
@@ -100,9 +100,12 @@ pytransit/models/roadrunner/model.py
100
100
  pytransit/models/roadrunner/model_full.py
101
101
  pytransit/models/roadrunner/model_simple.py
102
102
  pytransit/models/roadrunner/model_trspec.py
103
+ pytransit/models/roadrunner/opmodel.py
103
104
  pytransit/models/roadrunner/opmodel_full.py
104
105
  pytransit/models/roadrunner/rrmodel.cl
106
+ pytransit/models/roadrunner/rrmodel.py
105
107
  pytransit/models/roadrunner/rrmodel_cl.py
108
+ pytransit/models/roadrunner/tsmodel.py
106
109
  pytransit/orbits/__init__.py
107
110
  pytransit/orbits/orbits.py
108
111
  pytransit/orbits/orbits_py.py
@@ -18,4 +18,5 @@ ldtk
18
18
  pyopencl
19
19
  corner
20
20
  celerite
21
- pyrr
21
+ pyrr
22
+ meepmeep
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "PyTransit"
7
- version = "2.6.6"
7
+ version = "2.6.7"
8
8
  description = 'Fast and painless exoplanet transit light curve modelling.'
9
9
  authors=[{name='Hannu Parviainen', email='hpparvi@gmail.com'}]
10
10
  classifiers=[
@@ -0,0 +1,111 @@
1
+ # PyTransit: fast and easy exoplanet transit modelling in Python.
2
+ # Copyright (C) 2010-2019 Hannu Parviainen
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
+ #
17
+ # This program is free software: you can redistribute it and/or modify
18
+ # it under the terms of the GNU General Public License as published by
19
+ # the Free Software Foundation, either version 3 of the License, or
20
+ # (at your option) any later version.
21
+ #
22
+ # This program is distributed in the hope that it will be useful,
23
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
24
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25
+ # GNU General Public License for more details.
26
+ #
27
+ # You should have received a copy of the GNU General Public License
28
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
29
+ from typing import Tuple, Callable, Union, List, Optional
30
+
31
+ from numpy import ndarray, linspace, isscalar, unique, atleast_1d
32
+ from scipy.integrate import trapezoid
33
+
34
+ from ..ldmodel import LDModel
35
+ from ..numba.ldmodels import *
36
+
37
+ from .opmodel_full import opmodel
38
+ from .rrmodel import RoadRunnerModel
39
+
40
+ __all__ = ['OblatePlanetModel']
41
+
42
+
43
+ class OblatePlanetModel(RoadRunnerModel):
44
+ def __init__(self, ldmodel: Union[str, Callable, Tuple[Callable, Callable]] = 'quadratic',
45
+ precompute_weights: bool = False, klims: tuple = (0.005, 0.5), nk: int = 256,
46
+ nzin: int = 20, nzlimb: int = 20, zcut: float = 0.7, ng: int = 100, nlines: int = 100,
47
+ nthreads: int = 1, small_planet_limit: float = 0.05, **kwargs):
48
+ super().__init__(ldmodel, precompute_weights, klims, nk, nzin, nzlimb, zcut, ng, nthreads, small_planet_limit, **kwargs)
49
+ self.nlines = nlines
50
+
51
+ def evaluate(self, k: Union[float, ndarray], f: Union[float, ndarray], alpha: Union[float, ndarray],
52
+ ldc: Union[ndarray, List],
53
+ t0: Union[float, ndarray], p: Union[float, ndarray], a: Union[float, ndarray],
54
+ i: Union[float, ndarray], e: Union[float, ndarray] = 0.0, w: Union[float, ndarray] = 0.0,
55
+ copy: bool = True) -> ndarray:
56
+ """Evaluate the transit model for a set of scalar or vector parameters.
57
+
58
+ Parameters
59
+ ----------
60
+ k
61
+ Radius ratio(s) either as a single float, 1D vector, or 2D array.
62
+ ldc
63
+ Limb darkening coefficients as a 1D or 2D array.
64
+ t0
65
+ Transit center(s) as a float or a 1D vector.
66
+ p
67
+ Orbital period(s) as a float or a 1D vector.
68
+ a
69
+ Orbital semi-major axis (axes) divided by the stellar radius as a float or a 1D vector.
70
+ i
71
+ Orbital inclination(s) as a float or a 1D vector.
72
+ e : optional
73
+ Orbital eccentricity as a float or a 1D vector.
74
+ w : optional
75
+ Argument of periastron as a float or a 1D vector.
76
+
77
+ Notes
78
+ -----
79
+ The model can be evaluated either for one set of parameters or for many sets of parameters simultaneously. In
80
+ the first case, the orbital parameters should all be given as floats. In the second case, the orbital parameters
81
+ should be given as a 1D array-like.
82
+
83
+ Returns
84
+ -------
85
+ ndarray
86
+ Modelled flux either as a 1D or 2D ndarray.
87
+ """
88
+
89
+ npv = 1 if isscalar(p) else p.size
90
+ ldc = atleast_1d(ldc)
91
+
92
+ if isinstance(self.ldmodel, LDModel):
93
+ ldp, istar = self.ldmodel(self.mu, ldc)
94
+ else:
95
+ ldp = evaluate_ld(self.ldmodel, self.mu, ldc)
96
+
97
+ if self.ldmmean is not None:
98
+ istar = evaluate_ldi(self.ldmmean, ldc)
99
+ else:
100
+ istar = zeros((npv, self.npb))
101
+ ldpi = evaluate_ld(self.ldmodel, self._ldmu, ldc)
102
+ for ipv in range(npv):
103
+ for ipb in range(self.npb):
104
+ istar[ipv, ipb] = 2 * pi * trapezoid(self._ldz * ldpi[ipv, ipb], self._ldz)
105
+
106
+ flux = opmodel(self.time, k, f, alpha, t0, p, a, i, e, w, self.parallel,
107
+ self.nlc, self.npb, self.nep, self.nlines,
108
+ self.lcids, self.pbids, self.epids, self.nsamples, self.exptimes,
109
+ ldp, istar, self.weights, self.dk, self.klims[0], self.klims[1], self.dg, self.ze)
110
+
111
+ return flux
@@ -0,0 +1,230 @@
1
+ # PyTransit: fast and easy exoplanet transit modelling in Python.
2
+ # Copyright (C) 2010-2019 Hannu Parviainen
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
+ #
17
+ # This program is free software: you can redistribute it and/or modify
18
+ # it under the terms of the GNU General Public License as published by
19
+ # the Free Software Foundation, either version 3 of the License, or
20
+ # (at your option) any later version.
21
+ #
22
+ # This program is distributed in the hope that it will be useful,
23
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
24
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25
+ # GNU General Public License for more details.
26
+ #
27
+ # You should have received a copy of the GNU General Public License
28
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
29
+ from typing import Tuple, Callable, Union, List, Optional
30
+ from warnings import warn
31
+
32
+ from numba import get_num_threads
33
+ from numpy import ndarray, linspace, isscalar, unique, atleast_1d
34
+ from scipy.integrate import trapezoid
35
+
36
+ from ..ldmodel import LDModel
37
+ from ..numba.ldmodels import *
38
+ from ..transitmodel import TransitModel
39
+
40
+ from .common import create_z_grid, calculate_weights_3d
41
+ from .model import rrmodel
42
+
43
+ __all__ = ['RoadRunnerModel']
44
+
45
+
46
+ class RoadRunnerModel(TransitModel):
47
+ ldmodels = {'uniform': (ld_uniform, ldi_uniform),
48
+ 'linear': (ld_linear, ldi_linear),
49
+ 'quadratic': (ld_quadratic, ldi_quadratic),
50
+ 'quadratic-tri': (ld_quadratic_tri, ldi_quadratic_tri),
51
+ 'nonlinear': ld_nonlinear,
52
+ 'general': ld_general,
53
+ 'square_root': ld_square_root,
54
+ 'logarithmic': ld_logarithmic,
55
+ 'exponential': ld_exponential,
56
+ 'power-2': (ld_power_2, ldi_power_2),
57
+ 'power-2-pm': ld_power_2_pm}
58
+
59
+ def __init__(self, ldmodel: Union[str, Callable, Tuple[Callable, Callable]] = 'quadratic',
60
+ precompute_weights: bool = False, klims: tuple = (0.005, 0.5), nk: int = 256,
61
+ nzin: int = 20, nzlimb: int = 20, zcut: float = 0.7, ng: int = 100,
62
+ nthreads: int = 1, small_planet_limit: float = 0.05, **kwargs):
63
+ """The RoadRunner transit model by Parviainen (2020).
64
+
65
+ Parameters
66
+ ----------
67
+ precompute_weights : bool, optional
68
+ Precompute a 3D weight table for radius ratio values set by `klims`.
69
+ klims : tuple, optional
70
+ Radius ratio limits (kmin, kmax) for the precomputed weight table.
71
+ nk : int, optional
72
+ Radius ratio grid size for the precomputed weight table.
73
+ nzin : int, optional
74
+ Normalized distance grid size for the inner disk.
75
+ nzlimb : int, optional
76
+ Normalized distance grid size for the limb.
77
+ zcut: float, optional
78
+ Normalized distance that separates the stellar disk into an inner disk and limb.
79
+ ng : int, optional
80
+ Size of the grazing value table.
81
+ nthreads: int, optional
82
+ Number of threads to use for the model computation.
83
+ small_planet_limit: float, optional
84
+ The radius ratio limit below which to use a small planet approximation.
85
+ """
86
+ super().__init__()
87
+
88
+ if 'interpolate' in kwargs:
89
+ warn("The 'interpolate' argument has been replaced by 'precompute_weights' and will be removed in the future.", FutureWarning)
90
+ self.interpolate: bool = kwargs.get('interpolate', False)
91
+ else:
92
+ self.interpolate: bool = precompute_weights
93
+
94
+ if 'parallel' in kwargs:
95
+ warn("The 'parallel' argument has been replaced by 'nthreads' and will be removed in the future.", FutureWarning)
96
+ self.nthreads: int = get_num_threads()
97
+ self.parallel: bool = True
98
+ else:
99
+ self.nthreads: int = nthreads
100
+ self.parallel = self.nthreads > 1
101
+
102
+ self.splimit: float = small_planet_limit
103
+
104
+ # Set up the limb darkening model
105
+ # --------------------------------
106
+ if isinstance(ldmodel, str):
107
+ try:
108
+ if isinstance(self.ldmodels[ldmodel], tuple):
109
+ self.ldmodel = self.ldmodels[ldmodel][0]
110
+ self.ldmmean = self.ldmodels[ldmodel][1]
111
+ else:
112
+ self.ldmodel = self.ldmodels[ldmodel]
113
+ self.ldmmean = None
114
+ except KeyError:
115
+ print(
116
+ f"Unknown limb darkening model: {ldmodel}. Choose from [{', '.join(self.ldmodels.keys())}] or supply a callable function.")
117
+ raise
118
+ elif isinstance(ldmodel, LDModel):
119
+ self.ldmodel = ldmodel
120
+ self.ldmmean = ldmodel._integrate
121
+ elif callable(ldmodel):
122
+ self.ldmodel = ldmodel
123
+ self.ldmmean = None
124
+ elif isinstance(ldmodel, tuple) and callable(ldmodel[0]) and callable(ldmodel[1]):
125
+ self.ldmodel = ldmodel[0]
126
+ self.ldmmean = ldmodel[1]
127
+ else:
128
+ raise NotImplementedError
129
+
130
+ # Set the basic variable
131
+ # ----------------------
132
+ self.klims = klims
133
+ self.nk = nk
134
+ self.ng = ng
135
+ self.nzin = nzin
136
+ self.nzlimb = nzlimb
137
+ self.zcut = zcut
138
+
139
+ # Declare the basic arrays
140
+ # ------------------------
141
+ self.ze = None
142
+ self.zm = None
143
+ self.mu = None
144
+ self.dk = None
145
+ self.dg = None
146
+ self.weights = None
147
+
148
+ self._ldmu = linspace(1, 0, 200)
149
+ self._ldz = sqrt(1 - self._ldmu ** 2)
150
+
151
+ self.init_integration(nzin, nzlimb, zcut, ng, nk)
152
+
153
+ def set_data(self, time: Union[ndarray, List],
154
+ lcids: Optional[Union[ndarray, List]] = None,
155
+ pbids: Optional[Union[ndarray, List]] = None,
156
+ nsamples: Optional[Union[ndarray, List]] = None,
157
+ exptimes: Optional[Union[ndarray, List]] = None,
158
+ epids: Optional[Union[ndarray, List]] = None) -> None:
159
+ super().set_data(time, lcids, pbids, nsamples, exptimes, epids)
160
+ self.nep = unique(self.epids).size
161
+
162
+ def init_integration(self, nzin, nzlimb, zcut, ng, nk):
163
+ self.nk = nk
164
+ self.ng = ng
165
+ self.nzin = nzin
166
+ self.nzlimb = nzlimb
167
+ self.zcut = zcut
168
+ self.ze, self.zm = create_z_grid(zcut, nzin, nzlimb)
169
+ self.mu = sqrt(1 - self.zm ** 2)
170
+ self.dk, self.dg, self.weights = calculate_weights_3d(nk, self.klims[0], self.klims[1], self.ze, ng)
171
+
172
+ def evaluate(self, k: Union[float, ndarray], ldc: Union[ndarray, List],
173
+ t0: Union[float, ndarray], p: Union[float, ndarray], a: Union[float, ndarray],
174
+ i: Union[float, ndarray], e: Union[float, ndarray] = 0.0, w: Union[float, ndarray] = 0.0,
175
+ copy: bool = True) -> ndarray:
176
+ """Evaluate the transit model for a set of scalar or vector parameters.
177
+
178
+ Parameters
179
+ ----------
180
+ k
181
+ Radius ratio(s) either as a single float, 1D vector, or 2D array.
182
+ ldc
183
+ Limb darkening coefficients as a 1D or 2D array.
184
+ t0
185
+ Transit center(s) as a float or a 1D vector.
186
+ p
187
+ Orbital period(s) as a float or a 1D vector.
188
+ a
189
+ Orbital semi-major axis (axes) divided by the stellar radius as a float or a 1D vector.
190
+ i
191
+ Orbital inclination(s) as a float or a 1D vector.
192
+ e : optional
193
+ Orbital eccentricity as a float or a 1D vector.
194
+ w : optional
195
+ Argument of periastron as a float or a 1D vector.
196
+
197
+ Notes
198
+ -----
199
+ The model can be evaluated either for one set of parameters or for many sets of parameters simultaneously. In
200
+ the first case, the orbital parameters should all be given as floats. In the second case, the orbital parameters
201
+ should be given as a 1D array-like.
202
+
203
+ Returns
204
+ -------
205
+ ndarray
206
+ Modelled flux either as a 1D or 2D ndarray.
207
+ """
208
+
209
+ npv = 1 if isscalar(p) else p.size
210
+ ldc = atleast_1d(ldc)
211
+
212
+ if isinstance(self.ldmodel, LDModel):
213
+ ldp, istar = self.ldmodel(self.mu, ldc)
214
+ else:
215
+ ldp = evaluate_ld(self.ldmodel, self.mu, ldc)
216
+
217
+ if self.ldmmean is not None:
218
+ istar = evaluate_ldi(self.ldmmean, ldc)
219
+ else:
220
+ istar = zeros((npv, self.npb))
221
+ ldpi = evaluate_ld(self.ldmodel, self._ldmu, ldc)
222
+ for ipv in range(npv):
223
+ for ipb in range(self.npb):
224
+ istar[ipv, ipb] = 2 * pi * trapezoid(self._ldz * ldpi[ipv, ipb], self._ldz)
225
+
226
+ flux = rrmodel(self.time, k, t0, p, a, i, e, w, self.parallel,
227
+ self.nlc, self.npb, self.nep, self.lcids, self.pbids, self.epids, self.nsamples, self.exptimes,
228
+ ldp, istar, self.weights, self.dk, self.klims[0], self.klims[1], self.dg, self.ze)
229
+
230
+ return flux
@@ -0,0 +1,136 @@
1
+ # PyTransit: fast and easy exoplanet transit modelling in Python.
2
+ # Copyright (C) 2010-2019 Hannu Parviainen
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
+ #
17
+ # This program is free software: you can redistribute it and/or modify
18
+ # it under the terms of the GNU General Public License as published by
19
+ # the Free Software Foundation, either version 3 of the License, or
20
+ # (at your option) any later version.
21
+ #
22
+ # This program is distributed in the hope that it will be useful,
23
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
24
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25
+ # GNU General Public License for more details.
26
+ #
27
+ # You should have received a copy of the GNU General Public License
28
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
29
+ from typing import Union, List, Optional
30
+
31
+ from numpy import ndarray, isscalar, atleast_2d, atleast_1d, array
32
+ from pytransit.models.roadrunner.common import calculate_weights_3d
33
+ from scipy.integrate import trapezoid
34
+
35
+ from ..ldmodel import LDModel
36
+ from ..numba.ldmodels import *
37
+ from .rrmodel import RoadRunnerModel
38
+
39
+ from .model_trspec import tsmodel_serial, tsmodel_parallel
40
+
41
+ __all__ = ['TransmissionSpectroscopyModel']
42
+
43
+
44
+ class TransmissionSpectroscopyModel(RoadRunnerModel):
45
+
46
+ def evaluate(self, k: Union[float, ndarray], ldc: Union[ndarray, List],
47
+ t0: Union[float, ndarray], p: Union[float, ndarray], a: Union[float, ndarray],
48
+ i: Union[float, ndarray], e: Union[float, ndarray] = 0.0, w: Union[float, ndarray] = 0.0,
49
+ copy: bool = True) -> ndarray:
50
+ """Evaluate the transit model for a set of scalar or vector parameters.
51
+
52
+ Parameters
53
+ ----------
54
+ k
55
+ Radius ratio(s) either as a single float, 1D vector, or 2D array.
56
+ ldc
57
+ Limb darkening coefficients as a 1D or 2D array.
58
+ t0
59
+ Transit center(s) as a float or a 1D vector.
60
+ p
61
+ Orbital period(s) as a float or a 1D vector.
62
+ a
63
+ Orbital semi-major axis (axes) divided by the stellar radius as a float or a 1D vector.
64
+ i
65
+ Orbital inclination(s) as a float or a 1D vector.
66
+ e : optional
67
+ Orbital eccentricity as a float or a 1D vector.
68
+ w : optional
69
+ Argument of periastron as a float or a 1D vector.
70
+
71
+ Notes
72
+ -----
73
+ The model can be evaluated either for one set of parameters or for many sets of parameters simultaneously. In
74
+ the first case, the orbital parameters should all be given as floats. In the second case, the orbital parameters
75
+ should be given as a 1D array-like.
76
+
77
+ Returns
78
+ -------
79
+ ndarray
80
+ Modelled flux either as a 1D or 2D ndarray.
81
+ """
82
+ k = atleast_2d(k)
83
+ ldc = atleast_2d(ldc)
84
+ t0, p, a, i, e, w = map(atleast_1d, (t0, p, a, i, e, w))
85
+ npv = k.shape[0]
86
+
87
+ # Limb darkening
88
+ # --------------
89
+ ldc = array(ldc)
90
+ if npv > 1 and ldc.ndim != 3:
91
+ raise ValueError("""The limb darkening parameters (ldp) should be given as a 3D array with shape [npv, npb, nldp]
92
+ when evaluating the model for a set of parameters (npv > 1).""")
93
+ if ldc.ndim == 1:
94
+ ldc = ldc.reshape((1, 1, ldc.shape[1]))
95
+ elif ldc.ndim == 2:
96
+ ldc = ldc.reshape((1, ldc.shape[0], ldc.shape[1]))
97
+ elif ldc.ndim == 3:
98
+ pass
99
+ else:
100
+ raise ValueError()
101
+ self.npb = npb = ldc.shape[1]
102
+
103
+ if isinstance(self.ldmodel, LDModel):
104
+ ldp, istar = self.ldmodel(self.mu, ldc)
105
+ else:
106
+ ldp = evaluate_ld(self.ldmodel, self.mu, ldc)
107
+
108
+ if self.ldmmean is not None:
109
+ istar = evaluate_ldi(self.ldmmean, ldc)
110
+ else:
111
+ istar = zeros((npv, npb))
112
+ ldpi = evaluate_ld(self.ldmodel, self._ldmu, ldc)
113
+ for ipv in range(npv):
114
+ for ipb in range(npb):
115
+ istar[ipv, ipb] = 2 * pi * trapezoid(self._ldz * ldpi[ipv, ipb], self._ldz)
116
+
117
+ if self.interpolate:
118
+ dk, dg, weights = self.dk, self.dg, self.weights
119
+ else:
120
+ dk, dg, weights = None, None, None
121
+
122
+ if self.parallel:
123
+ flux = tsmodel_parallel(self.time, k, t0, p, a, i, e, w, self.nsamples, self.exptimes,
124
+ ldp, istar, weights, dk, self.klims[0], self.klims[1], self.ng, dg, self.ze,
125
+ self.nthreads)
126
+ else:
127
+ flux = tsmodel_serial(self.time, k, t0, p, a, i, e, w, self.nsamples, self.exptimes,
128
+ ldp, istar, weights, dk, self.klims[0], self.klims[1], self.ng, dg, self.ze)
129
+
130
+ return flux.squeeze()
131
+
132
+ def __call__(self, k: Union[float, ndarray], ldc: Union[ndarray, List],
133
+ t0: Union[float, ndarray], p: Union[float, ndarray], a: Union[float, ndarray],
134
+ i: Union[float, ndarray], e: Union[float, ndarray] = 0.0, w: Union[float, ndarray] = 0.0,
135
+ copy: bool = True) -> ndarray:
136
+ return self.evaluate(k, ldc, t0, p, a, i, e, w, copy)
@@ -19,3 +19,4 @@ pyopencl
19
19
  corner
20
20
  celerite
21
21
  pyrr
22
+ meepmeep
File without changes
File without changes
File without changes
File without changes
File without changes