quasar-models 0.1.0__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.
- quasar_models-0.1.0/PKG-INFO +24 -0
- quasar_models-0.1.0/README.md +0 -0
- quasar_models-0.1.0/pyproject.toml +60 -0
- quasar_models-0.1.0/setup.cfg +4 -0
- quasar_models-0.1.0/setup.py +123 -0
- quasar_models-0.1.0/src/quasar_models/__init__.py +42 -0
- quasar_models-0.1.0/src/quasar_models/_core/convolution/__init__.py +231 -0
- quasar_models-0.1.0/src/quasar_models/_core/convolution/utils.c +31271 -0
- quasar_models-0.1.0/src/quasar_models/_core/convolution/utils.pxd +57 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/__init__.py +202 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/continuum/__init__.py +92 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/continuum/evaluate.c +28527 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/continuum/evaluate.pxd +33 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/evaluate.c +27915 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/evaluate.pxd +32 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/fit_deriv.c +32689 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/fit_deriv.pxd +177 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/series/__init__.py +35 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/series/evaluate.c +27200 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/series/evaluate.pxd +9 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/balmer/utils.py +140 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/gaussian/__init__.py +151 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/gaussian/evaluate.c +28259 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/gaussian/evaluate.pxd +39 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/gaussian/fit_deriv.c +33241 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/gaussian/fit_deriv.pxd +201 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/gaussian/utils.py +226 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/host/__init__.py +131 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/host/evaluate.c +27723 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/host/evaluate.pxd +26 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/host/fit_deriv.c +28847 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/host/fit_deriv.pxd +63 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/host/utils.py +122 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/iron/__init__.py +360 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/iron/evaluate.c +28376 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/iron/evaluate.pxd +50 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/iron/fit_deriv.c +43073 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/iron/fit_deriv.pxd +488 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/iron/utils.py +138 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/powerlaw/__init__.py +36 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/powerlaw/evaluate.c +27316 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/powerlaw/evaluate.pxd +7 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/powerlaw/fit_deriv.c +27660 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/powerlaw/fit_deriv.pxd +23 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/powerlaw/utils.py +91 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/split/__init__.py +139 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/split/evaluate.c +27187 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/split/evaluate.pxd +9 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/split/fit_deriv.c +29549 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/split/fit_deriv.pxd +69 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/template/__init__.py +15 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/template/cytemplate.c +31308 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/template/cytemplate.pxd +113 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/template/evaluate.c +28045 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/template/evaluate.pxd +26 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/template/fit_deriv.c +29212 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/template/fit_deriv.pxd +62 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/template/utils.py +93 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/utils.py +178 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/vprofilecopy/__init__.py +81 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/vprofilecopy/evaluate.c +27521 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/vprofilecopy/evaluate.pxd +21 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/vprofilecopy/fit_deriv.c +28779 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/vprofilecopy/fit_deriv.pxd +45 -0
- quasar_models-0.1.0/src/quasar_models/_core/modeling/vprofilecopy/utils.py +258 -0
- quasar_models-0.1.0/src/quasar_models/_core/utils.c +25036 -0
- quasar_models-0.1.0/src/quasar_models/_core/utils.pxd +23 -0
- quasar_models-0.1.0/src/quasar_models/balmer/__init__.py +21 -0
- quasar_models-0.1.0/src/quasar_models/balmer/balmer_model.py +594 -0
- quasar_models-0.1.0/src/quasar_models/balmer/continuum/__init__.py +37 -0
- quasar_models-0.1.0/src/quasar_models/balmer/continuum/balmer_continuum_template.py +210 -0
- quasar_models-0.1.0/src/quasar_models/balmer/continuum/io.py +165 -0
- quasar_models-0.1.0/src/quasar_models/balmer/continuum/setup.py +134 -0
- quasar_models-0.1.0/src/quasar_models/balmer/series/__init__.py +37 -0
- quasar_models-0.1.0/src/quasar_models/balmer/series/balmer_series_template.py +321 -0
- quasar_models-0.1.0/src/quasar_models/balmer/series/io.py +222 -0
- quasar_models-0.1.0/src/quasar_models/balmer/series/setup.py +192 -0
- quasar_models-0.1.0/src/quasar_models/cli/main.py +37 -0
- quasar_models-0.1.0/src/quasar_models/cli/utils.py +195 -0
- quasar_models-0.1.0/src/quasar_models/continuum/__init__.py +3 -0
- quasar_models-0.1.0/src/quasar_models/continuum/powerlaw.py +525 -0
- quasar_models-0.1.0/src/quasar_models/host/__init__.py +24 -0
- quasar_models-0.1.0/src/quasar_models/host/host_galaxy_model.py +316 -0
- quasar_models-0.1.0/src/quasar_models/host/host_galaxy_template.py +120 -0
- quasar_models-0.1.0/src/quasar_models/host/io.py +114 -0
- quasar_models-0.1.0/src/quasar_models/host/setup.py +130 -0
- quasar_models-0.1.0/src/quasar_models/iron/__init__.py +24 -0
- quasar_models-0.1.0/src/quasar_models/iron/create_template.py +157 -0
- quasar_models-0.1.0/src/quasar_models/iron/io.py +90 -0
- quasar_models-0.1.0/src/quasar_models/iron/iron_model.py +488 -0
- quasar_models-0.1.0/src/quasar_models/iron/iron_template.py +162 -0
- quasar_models-0.1.0/src/quasar_models/iron/setup.py +473 -0
- quasar_models-0.1.0/src/quasar_models/iron/utils.py +117 -0
- quasar_models-0.1.0/src/quasar_models/line/__init__.py +47 -0
- quasar_models-0.1.0/src/quasar_models/line/gaussian.py +644 -0
- quasar_models-0.1.0/src/quasar_models/line/instantiation_utils.py +152 -0
- quasar_models-0.1.0/src/quasar_models/line/line.py +142 -0
- quasar_models-0.1.0/src/quasar_models/line/vprofilecopies/__init__.py +35 -0
- quasar_models-0.1.0/src/quasar_models/line/vprofilecopies/_vprofilecopy.py +611 -0
- quasar_models-0.1.0/src/quasar_models/line/vprofilecopies/vprofilecopies.py +262 -0
- quasar_models-0.1.0/src/quasar_models/modeling/__init__.py +27 -0
- quasar_models-0.1.0/src/quasar_models/modeling/base_model.py +172 -0
- quasar_models-0.1.0/src/quasar_models/modeling/fitting/__init__.py +19 -0
- quasar_models-0.1.0/src/quasar_models/modeling/fitting/emcee.py +297 -0
- quasar_models-0.1.0/src/quasar_models/modeling/fitting/nonlinear.py +166 -0
- quasar_models-0.1.0/src/quasar_models/modeling/fitting/utils.py +203 -0
- quasar_models-0.1.0/src/quasar_models/modeling/interpolated_sequential_model.py +196 -0
- quasar_models-0.1.0/src/quasar_models/modeling/prepare_model.py +238 -0
- quasar_models-0.1.0/src/quasar_models/modeling/prepared_sequential_model.py +60 -0
- quasar_models-0.1.0/src/quasar_models/modeling/sequential_model.py +585 -0
- quasar_models-0.1.0/src/quasar_models/modeling/stop_conditions.py +137 -0
- quasar_models-0.1.0/src/quasar_models/modeling/template/__init__.py +19 -0
- quasar_models-0.1.0/src/quasar_models/modeling/template/base_template.py +518 -0
- quasar_models-0.1.0/src/quasar_models/modeling/template/evaluation.py +217 -0
- quasar_models-0.1.0/src/quasar_models/modeling/template/io.py +247 -0
- quasar_models-0.1.0/src/quasar_models/modeling/template/template_model.py +158 -0
- quasar_models-0.1.0/src/quasar_models/modeling/utils.py +215 -0
- quasar_models-0.1.0/src/quasar_models/utils/astropy.py +192 -0
- quasar_models-0.1.0/src/quasar_models/utils/interpolation.py +19 -0
- quasar_models-0.1.0/src/quasar_models/utils/linear_regression.py +90 -0
- quasar_models-0.1.0/src/quasar_models/utils/masking.py +64 -0
- quasar_models-0.1.0/src/quasar_models/utils/serialization.py +227 -0
- quasar_models-0.1.0/src/quasar_models/utils/setup_utils.py +39 -0
- quasar_models-0.1.0/src/quasar_models.egg-info/PKG-INFO +24 -0
- quasar_models-0.1.0/src/quasar_models.egg-info/SOURCES.txt +127 -0
- quasar_models-0.1.0/src/quasar_models.egg-info/dependency_links.txt +1 -0
- quasar_models-0.1.0/src/quasar_models.egg-info/requires.txt +16 -0
- quasar_models-0.1.0/src/quasar_models.egg-info/top_level.txt +1 -0
- quasar_models-0.1.0/tests/test_raster.py +82 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: quasar-models
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Author-email: Liam <liam_deburca@me.com>
|
|
5
|
+
Project-URL: Repository, https://github.com/liamdeburca/quasar-models
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
8
|
+
Requires-Python: >=3.12
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
Requires-Dist: quasar-typing==0.1.0
|
|
11
|
+
Requires-Dist: quasar-utils==0.1.0
|
|
12
|
+
Requires-Dist: matplotlib==3.10.0
|
|
13
|
+
Requires-Dist: pydantic==2.12
|
|
14
|
+
Requires-Dist: astropy==7.0
|
|
15
|
+
Requires-Dist: numpy==1.26
|
|
16
|
+
Requires-Dist: scipy==1.16
|
|
17
|
+
Requires-Dist: click==8.5.0
|
|
18
|
+
Requires-Dist: emcee==3.1.6
|
|
19
|
+
Requires-Dist: lazy-imports==1.2.0
|
|
20
|
+
Provides-Extra: dev
|
|
21
|
+
Requires-Dist: pytest==9.1.1; extra == "dev"
|
|
22
|
+
Requires-Dist: pytest-cov==7.1.0; extra == "dev"
|
|
23
|
+
Requires-Dist: black==26.10.1; extra == "dev"
|
|
24
|
+
Requires-Dist: isort==9.0.2; extra == "dev"
|
|
File without changes
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = [
|
|
3
|
+
"wheel",
|
|
4
|
+
"setuptools==72.1.0",
|
|
5
|
+
"Cython==3.0.12",
|
|
6
|
+
"numpy==1.26",
|
|
7
|
+
]
|
|
8
|
+
build-backend = "setuptools.build_meta"
|
|
9
|
+
|
|
10
|
+
[project]
|
|
11
|
+
name = "quasar-models"
|
|
12
|
+
authors = [{name = "Liam", email = "liam_deburca@me.com"}]
|
|
13
|
+
version = "0.1.0"
|
|
14
|
+
readme = "README.md"
|
|
15
|
+
requires-python = ">=3.12"
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Programming Language :: Python :: 3",
|
|
18
|
+
"Programming Language :: Python :: 3.12",
|
|
19
|
+
]
|
|
20
|
+
dependencies = [
|
|
21
|
+
"quasar-typing==0.1.0",
|
|
22
|
+
"quasar-utils==0.1.0",
|
|
23
|
+
|
|
24
|
+
"matplotlib==3.10.0",
|
|
25
|
+
"pydantic==2.12",
|
|
26
|
+
"astropy==7.0",
|
|
27
|
+
"numpy==1.26",
|
|
28
|
+
"scipy==1.16",
|
|
29
|
+
"click==8.5.0",
|
|
30
|
+
"emcee==3.1.6",
|
|
31
|
+
"lazy-imports==1.2.0",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
[project.optional-dependencies]
|
|
35
|
+
dev = [
|
|
36
|
+
"pytest==9.1.1",
|
|
37
|
+
"pytest-cov==7.1.0",
|
|
38
|
+
"black==26.10.1",
|
|
39
|
+
"isort==9.0.2",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
[project.urls]
|
|
43
|
+
Repository = "https://github.com/liamdeburca/quasar-models"
|
|
44
|
+
|
|
45
|
+
[tool.setuptools]
|
|
46
|
+
package-dir = {"" = "src"}
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.packages.find]
|
|
49
|
+
where = ["src"]
|
|
50
|
+
|
|
51
|
+
[tool.ruff]
|
|
52
|
+
line-length = 79
|
|
53
|
+
|
|
54
|
+
[lint.pyupgrade]
|
|
55
|
+
keep-runtime-typing = true
|
|
56
|
+
|
|
57
|
+
[tool.pytest.ini_options]
|
|
58
|
+
markers = [
|
|
59
|
+
"benchmark: test benchmarks different methods",
|
|
60
|
+
]
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
from Cython.Build import cythonize
|
|
2
|
+
from numpy import get_include
|
|
3
|
+
from setuptools import Extension, find_packages, setup
|
|
4
|
+
|
|
5
|
+
setup(
|
|
6
|
+
name="quasar_models",
|
|
7
|
+
packages=find_packages(where="src"),
|
|
8
|
+
package_dir={"": "src"},
|
|
9
|
+
ext_modules=cythonize(
|
|
10
|
+
[
|
|
11
|
+
# Array utils
|
|
12
|
+
Extension(
|
|
13
|
+
"quasar_models._core.utils",
|
|
14
|
+
sources=["src/quasar_models/_core/utils.pyx"],
|
|
15
|
+
),
|
|
16
|
+
# Powerlaw
|
|
17
|
+
Extension(
|
|
18
|
+
"quasar_models._core.modeling.powerlaw.evaluate",
|
|
19
|
+
sources=["src/quasar_models/_core/modeling/powerlaw/evaluate.pyx"],
|
|
20
|
+
),
|
|
21
|
+
Extension(
|
|
22
|
+
"quasar_models._core.modeling.powerlaw.fit_deriv",
|
|
23
|
+
sources=["src/quasar_models/_core/modeling/powerlaw/fit_deriv.pyx"],
|
|
24
|
+
),
|
|
25
|
+
# Gaussian
|
|
26
|
+
Extension(
|
|
27
|
+
"quasar_models._core.modeling.gaussian.evaluate",
|
|
28
|
+
sources=["src/quasar_models/_core/modeling/gaussian/evaluate.pyx"],
|
|
29
|
+
),
|
|
30
|
+
Extension(
|
|
31
|
+
"quasar_models._core.modeling.gaussian.fit_deriv",
|
|
32
|
+
sources=["src/quasar_models/_core/modeling/gaussian/fit_deriv.pyx"],
|
|
33
|
+
),
|
|
34
|
+
# VProfileCopy
|
|
35
|
+
Extension(
|
|
36
|
+
"quasar_models._core.modeling.vprofilecopy.evaluate",
|
|
37
|
+
sources=["src/quasar_models/_core/modeling/vprofilecopy/evaluate.pyx"],
|
|
38
|
+
),
|
|
39
|
+
Extension(
|
|
40
|
+
"quasar_models._core.modeling.vprofilecopy.fit_deriv",
|
|
41
|
+
sources=["src/quasar_models/_core/modeling/vprofilecopy/fit_deriv.pyx"],
|
|
42
|
+
),
|
|
43
|
+
# Convolution
|
|
44
|
+
Extension(
|
|
45
|
+
"quasar_models._core.convolution.utils",
|
|
46
|
+
sources=["src/quasar_models/_core/convolution/utils.pyx"],
|
|
47
|
+
),
|
|
48
|
+
# Template
|
|
49
|
+
Extension(
|
|
50
|
+
"quasar_models._core.modeling.template.evaluate",
|
|
51
|
+
sources=["src/quasar_models/_core/modeling/template/evaluate.pyx"],
|
|
52
|
+
),
|
|
53
|
+
Extension(
|
|
54
|
+
"quasar_models._core.modeling.template.fit_deriv",
|
|
55
|
+
sources=["src/quasar_models/_core/modeling/template/fit_deriv.pyx"],
|
|
56
|
+
),
|
|
57
|
+
Extension(
|
|
58
|
+
"quasar_models._core.modeling.template.cytemplate",
|
|
59
|
+
sources=["src/quasar_models/_core/modeling/template/cytemplate.pyx"],
|
|
60
|
+
),
|
|
61
|
+
# Host
|
|
62
|
+
Extension(
|
|
63
|
+
"quasar_models._core.modeling.host.evaluate",
|
|
64
|
+
sources=["src/quasar_models/_core/modeling/host/evaluate.pyx"],
|
|
65
|
+
),
|
|
66
|
+
Extension(
|
|
67
|
+
"quasar_models._core.modeling.host.fit_deriv",
|
|
68
|
+
sources=["src/quasar_models/_core/modeling/host/fit_deriv.pyx"],
|
|
69
|
+
),
|
|
70
|
+
# Split
|
|
71
|
+
Extension(
|
|
72
|
+
"quasar_models._core.modeling.split.evaluate",
|
|
73
|
+
sources=["src/quasar_models/_core/modeling/split/evaluate.pyx"],
|
|
74
|
+
),
|
|
75
|
+
Extension(
|
|
76
|
+
"quasar_models._core.modeling.split.fit_deriv",
|
|
77
|
+
sources=["src/quasar_models/_core/modeling/split/fit_deriv.pyx"],
|
|
78
|
+
),
|
|
79
|
+
# Iron
|
|
80
|
+
Extension(
|
|
81
|
+
"quasar_models._core.modeling.iron.evaluate",
|
|
82
|
+
sources=["src/quasar_models/_core/modeling/iron/evaluate.pyx"],
|
|
83
|
+
),
|
|
84
|
+
Extension(
|
|
85
|
+
"quasar_models._core.modeling.iron.fit_deriv",
|
|
86
|
+
sources=["src/quasar_models/_core/modeling/iron/fit_deriv.pyx"],
|
|
87
|
+
),
|
|
88
|
+
# Balmer - Continuum
|
|
89
|
+
Extension(
|
|
90
|
+
"quasar_models._core.modeling.balmer.continuum.evaluate",
|
|
91
|
+
sources=[
|
|
92
|
+
"src/quasar_models/_core/modeling/balmer/continuum/evaluate.pyx"
|
|
93
|
+
],
|
|
94
|
+
),
|
|
95
|
+
# Balmer - Series
|
|
96
|
+
Extension(
|
|
97
|
+
"quasar_models._core.modeling.balmer.series.evaluate",
|
|
98
|
+
sources=["src/quasar_models/_core/modeling/balmer/series/evaluate.pyx"],
|
|
99
|
+
),
|
|
100
|
+
# Balmer
|
|
101
|
+
Extension(
|
|
102
|
+
"quasar_models._core.modeling.balmer.evaluate",
|
|
103
|
+
sources=["src/quasar_models/_core/modeling/balmer/evaluate.pyx"],
|
|
104
|
+
),
|
|
105
|
+
Extension(
|
|
106
|
+
"quasar_models._core.modeling.balmer.fit_deriv",
|
|
107
|
+
sources=["src/quasar_models/_core/modeling/balmer/fit_deriv.pyx"],
|
|
108
|
+
),
|
|
109
|
+
],
|
|
110
|
+
language_level=3,
|
|
111
|
+
compiler_directives={
|
|
112
|
+
"boundscheck": False,
|
|
113
|
+
"wraparound": False,
|
|
114
|
+
"cdivision": True,
|
|
115
|
+
"warn.undeclared": False,
|
|
116
|
+
"warn.unreachable": False,
|
|
117
|
+
},
|
|
118
|
+
force=True, # Tabula rasa
|
|
119
|
+
include_path=["src"], # Necessary for cimporing .pxd files
|
|
120
|
+
),
|
|
121
|
+
include_dirs=[get_include()],
|
|
122
|
+
package_data={"quasar_models._core": ["**/*.pxd"]},
|
|
123
|
+
)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from lazy_imports import LazyImporter
|
|
5
|
+
|
|
6
|
+
_import_structure: dict[str, list[str]] = {
|
|
7
|
+
"balmer": [
|
|
8
|
+
"BalmerModel",
|
|
9
|
+
"BaModel",
|
|
10
|
+
],
|
|
11
|
+
"continuum": [
|
|
12
|
+
"PlModel",
|
|
13
|
+
"PowerLawModel",
|
|
14
|
+
],
|
|
15
|
+
"host": [
|
|
16
|
+
"HgModel",
|
|
17
|
+
"HostGalaxyModel",
|
|
18
|
+
],
|
|
19
|
+
"iron": [
|
|
20
|
+
"FeModel",
|
|
21
|
+
"IronModel",
|
|
22
|
+
],
|
|
23
|
+
"line": [
|
|
24
|
+
"EmModel",
|
|
25
|
+
"GaussianModel",
|
|
26
|
+
"VProfileCopy",
|
|
27
|
+
],
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from .balmer import BalmerModel, BaModel # noqa: F401
|
|
32
|
+
from .continuum import PlModel, PowerLawModel # noqa: F401
|
|
33
|
+
from .host import HgModel, HostGalaxyModel # noqa: F401
|
|
34
|
+
from .iron import FeModel, IronModel # noqa: F401
|
|
35
|
+
from .line import EmModel, GaussianModel, VProfileCopy # noqa: F401
|
|
36
|
+
|
|
37
|
+
else:
|
|
38
|
+
sys.modules[__name__] = LazyImporter(
|
|
39
|
+
__name__,
|
|
40
|
+
__file__,
|
|
41
|
+
_import_structure,
|
|
42
|
+
)
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
from quasar_typing.numpy import FloatMatrix, FloatVector
|
|
2
|
+
|
|
3
|
+
from .utils import convolve as _convolve
|
|
4
|
+
from .utils import convolve_deriv as _convolve_deriv
|
|
5
|
+
from .utils import convolve_signal as _convolve_signal
|
|
6
|
+
from .utils import convolve_signal2d as _convolve_signal2d
|
|
7
|
+
from .utils import identify_closest_idx as _identify_closest_idx
|
|
8
|
+
from .utils import (
|
|
9
|
+
identify_closest_idx_for_deriv as _identify_closest_idx_for_deriv,
|
|
10
|
+
)
|
|
11
|
+
from .utils import kernel as _kernel
|
|
12
|
+
from .utils import kernel_deriv as _kernel_deriv
|
|
13
|
+
from .utils import pixels as _pixels
|
|
14
|
+
from .utils import scale as _scale
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def scale(fwhm: float, sigma_res: float) -> float:
|
|
18
|
+
"""
|
|
19
|
+
Parameters
|
|
20
|
+
----------
|
|
21
|
+
fwhm : float
|
|
22
|
+
FWHM (km/s) of the template.
|
|
23
|
+
sigma_res : float
|
|
24
|
+
Velocity resolution (c) of the spectrum.
|
|
25
|
+
|
|
26
|
+
Returns
|
|
27
|
+
-------
|
|
28
|
+
float
|
|
29
|
+
"""
|
|
30
|
+
return _scale(fwhm, sigma_res)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def pixels(scale: float, n_scales: float) -> FloatVector:
|
|
34
|
+
"""
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
scale : float
|
|
38
|
+
n_scales : float
|
|
39
|
+
|
|
40
|
+
Returns
|
|
41
|
+
-------
|
|
42
|
+
FloatVector
|
|
43
|
+
"""
|
|
44
|
+
return _pixels(scale, n_scales)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def kernel(fwhm: float, sigma_res: float, n_scales: float) -> FloatVector:
|
|
48
|
+
"""
|
|
49
|
+
Calculate the Gaussian kernel used for convolution.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
fwhm : float
|
|
54
|
+
FWHM (km/s) of the template.
|
|
55
|
+
sigma_res : float
|
|
56
|
+
Velocity resolution (c) of the spectrum.
|
|
57
|
+
n_scales : float
|
|
58
|
+
|
|
59
|
+
Returns
|
|
60
|
+
-------
|
|
61
|
+
FloatVector
|
|
62
|
+
"""
|
|
63
|
+
return _kernel(fwhm, sigma_res, n_scales)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def kernel_deriv(
|
|
67
|
+
fwhm: float, sigma_res: float, n_scales: float
|
|
68
|
+
) -> FloatVector:
|
|
69
|
+
"""
|
|
70
|
+
Calculate the derivative of the Gaussian kernel used for convolution w.r.t.
|
|
71
|
+
FWHM.
|
|
72
|
+
|
|
73
|
+
Parameters
|
|
74
|
+
----------
|
|
75
|
+
fwhm : float
|
|
76
|
+
FWHM (km/s) of the template.
|
|
77
|
+
sigma_res : float
|
|
78
|
+
Velocity resolution (c) of the spectrum.
|
|
79
|
+
n_scales : float
|
|
80
|
+
|
|
81
|
+
Returns
|
|
82
|
+
-------
|
|
83
|
+
FloatVector
|
|
84
|
+
"""
|
|
85
|
+
return _kernel_deriv(fwhm, sigma_res, n_scales)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def convolve_signal(signal: FloatVector, kernel: FloatVector) -> FloatVector:
|
|
89
|
+
"""
|
|
90
|
+
Convolve a signal with a kernel.
|
|
91
|
+
|
|
92
|
+
Parameters
|
|
93
|
+
----------
|
|
94
|
+
signal : FloatVector
|
|
95
|
+
Signal to be convolved.
|
|
96
|
+
kernel : FloatVector
|
|
97
|
+
Kernel to convolve with the signal.
|
|
98
|
+
|
|
99
|
+
Returns
|
|
100
|
+
-------
|
|
101
|
+
FloatVector
|
|
102
|
+
Convolved signal.
|
|
103
|
+
"""
|
|
104
|
+
return _convolve_signal(signal, kernel)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def convolve_signal2d(
|
|
108
|
+
signal2d: FloatMatrix, kernel: FloatVector
|
|
109
|
+
) -> FloatVector:
|
|
110
|
+
"""
|
|
111
|
+
Convolve a 2D signal with a kernel.
|
|
112
|
+
|
|
113
|
+
Parameters
|
|
114
|
+
----------
|
|
115
|
+
signal2d : FloatMatrix
|
|
116
|
+
2D signal to be convolved.
|
|
117
|
+
kernel : FloatVector
|
|
118
|
+
Kernel to convolve with the signal.
|
|
119
|
+
|
|
120
|
+
Returns
|
|
121
|
+
-------
|
|
122
|
+
FloatVector
|
|
123
|
+
Convolved signal.
|
|
124
|
+
"""
|
|
125
|
+
return _convolve_signal2d(signal2d, kernel)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def identify_closest_idx(fwhm: FloatVector, fwhm_final: float) -> int:
|
|
129
|
+
"""
|
|
130
|
+
Find the index of the closest FWHM value in an array to a given FWHM value.
|
|
131
|
+
|
|
132
|
+
Parameters
|
|
133
|
+
----------
|
|
134
|
+
fwhm : FloatVector
|
|
135
|
+
Array of FWHM values.
|
|
136
|
+
fwhm_final : float
|
|
137
|
+
Target FWHM value to find the closest index for.
|
|
138
|
+
|
|
139
|
+
Returns
|
|
140
|
+
-------
|
|
141
|
+
int
|
|
142
|
+
Index of the closest element.
|
|
143
|
+
"""
|
|
144
|
+
return _identify_closest_idx(fwhm, fwhm_final)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def identify_closest_idx_for_deriv(
|
|
148
|
+
fwhm: FloatVector, fwhm_final: float
|
|
149
|
+
) -> int:
|
|
150
|
+
"""
|
|
151
|
+
Find the index of the closest FWHM value in an array to a given FWHM value.
|
|
152
|
+
|
|
153
|
+
This function is specifically used for derivative calculations as it ensures
|
|
154
|
+
that if 'fwhm_final' lies in the 'fwhm' array, the index is shifted
|
|
155
|
+
downwards to guarantee convolution.
|
|
156
|
+
|
|
157
|
+
Parameters
|
|
158
|
+
----------
|
|
159
|
+
fwhm : FloatVector
|
|
160
|
+
Array of FWHM values.
|
|
161
|
+
fwhm_final : float
|
|
162
|
+
Target FWHM value to find the closest index for.
|
|
163
|
+
|
|
164
|
+
Returns
|
|
165
|
+
-------
|
|
166
|
+
int
|
|
167
|
+
Index of the element.
|
|
168
|
+
"""
|
|
169
|
+
return _identify_closest_idx_for_deriv(fwhm, fwhm_final)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def convolve(
|
|
173
|
+
data: FloatMatrix,
|
|
174
|
+
fwhm: FloatVector,
|
|
175
|
+
fwhm_final: float,
|
|
176
|
+
sigma_res: float,
|
|
177
|
+
n_scales: float,
|
|
178
|
+
) -> FloatVector:
|
|
179
|
+
"""
|
|
180
|
+
Find the index of the closest FWHM value and convolve the corresponding data
|
|
181
|
+
array.
|
|
182
|
+
|
|
183
|
+
Parameters
|
|
184
|
+
----------
|
|
185
|
+
data : FloatMatrix
|
|
186
|
+
2D array of data to be convolved.
|
|
187
|
+
fwhm : FloatVector
|
|
188
|
+
Array of FWHM values corresponding to the data.
|
|
189
|
+
fwhm_final : float
|
|
190
|
+
Target FWHM value for convolution.
|
|
191
|
+
sigma_res : float
|
|
192
|
+
Velocity resolution (c) of the spectrum.
|
|
193
|
+
n_scales : float
|
|
194
|
+
|
|
195
|
+
Returns
|
|
196
|
+
-------
|
|
197
|
+
FloatVector
|
|
198
|
+
Convolved data array.
|
|
199
|
+
"""
|
|
200
|
+
return _convolve(data, fwhm, fwhm_final, sigma_res, n_scales)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def convolve_deriv(
|
|
204
|
+
data: FloatMatrix,
|
|
205
|
+
fwhm: FloatVector,
|
|
206
|
+
fwhm_final: float,
|
|
207
|
+
sigma_res: float,
|
|
208
|
+
n_scales: float,
|
|
209
|
+
) -> FloatVector:
|
|
210
|
+
"""
|
|
211
|
+
Find the index the closest FWHM value and calculate the derivative of the
|
|
212
|
+
convolved data array w.r.t. FWHM.
|
|
213
|
+
|
|
214
|
+
Parameters
|
|
215
|
+
----------
|
|
216
|
+
data : FloatMatrix
|
|
217
|
+
2D array of data to be convolved.
|
|
218
|
+
fwhm : FloatVector
|
|
219
|
+
Array of FWHM values corresponding to the data.
|
|
220
|
+
fwhm_final : float
|
|
221
|
+
Target FWHM value for convolution.
|
|
222
|
+
sigma_res : float
|
|
223
|
+
Velocity resolution (c) of the spectrum.
|
|
224
|
+
n_scales : float
|
|
225
|
+
|
|
226
|
+
Returns
|
|
227
|
+
-------
|
|
228
|
+
FloatVector
|
|
229
|
+
Derivative of the convolved data array w.r.t. FWHM.
|
|
230
|
+
"""
|
|
231
|
+
return _convolve_deriv(data, fwhm, fwhm_final, sigma_res, n_scales)
|