tdanalysis 1.0.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.
- tdanalysis-1.0.0/LICENSE +203 -0
- tdanalysis-1.0.0/NOTICE.md +133 -0
- tdanalysis-1.0.0/PKG-INFO +174 -0
- tdanalysis-1.0.0/README.md +126 -0
- tdanalysis-1.0.0/pyproject.toml +168 -0
- tdanalysis-1.0.0/tdanalysis/__init__.py +0 -0
- tdanalysis-1.0.0/tdanalysis/_compat.py +173 -0
- tdanalysis-1.0.0/tdanalysis/covariance/covariance_calc.py +811 -0
- tdanalysis-1.0.0/tdanalysis/covariance/psd.py +987 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/A1_aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/A1_aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_1p0MW_Aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_1p0MW_Aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_1p0MW_aLIGO_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_1p0MW_aLIGO_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_1p5MW_Aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_1p5MW_Aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_1p5MW_aLIGO_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_1p5MW_aLIGO_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_gwforge_default_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE20_gwforge_default_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_1p0MW_Aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_1p0MW_Aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_1p0MW_aLIGO_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_1p0MW_aLIGO_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_1p5MW_Aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_1p5MW_Aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_1p5MW_aLIGO_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_1p5MW_aLIGO_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_gwforge_default_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/CE40_gwforge_default_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/ET1ET2ET3_ET_D_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/ET1ET2ET3_ET_D_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/ET1ET2ET3_cryo_10km_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/ET1ET2ET3_cryo_10km_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/ET1ET2ET3_cryo_15km_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/ET1ET2ET3_cryo_15km_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/PROVENANCE.md +1143 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_A1_aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_A1_aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_1p0MW_Aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_1p0MW_Aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_1p0MW_aLIGO_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_1p0MW_aLIGO_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_1p5MW_Aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_1p5MW_Aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_1p5MW_aLIGO_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_1p5MW_aLIGO_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_gwforge_default_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE20_gwforge_default_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_1p0MW_Aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_1p0MW_Aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_1p0MW_aLIGO_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_1p0MW_aLIGO_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_1p5MW_Aplus_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_1p5MW_Aplus_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_1p5MW_aLIGO_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_1p5MW_aLIGO_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_gwforge_default_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_CE40_gwforge_default_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_ET1ET2ET3_ET_D_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_ET1ET2ET3_ET_D_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_ET1ET2ET3_cryo_10km_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_ET1ET2ET3_cryo_10km_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_ET1ET2ET3_cryo_15km_acorr_4s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/acorrs/half_ET1ET2ET3_cryo_15km_acorr_8s_4096.npy +0 -0
- tdanalysis-1.0.0/tdanalysis/data/detectors/A1.interferometer +13 -0
- tdanalysis-1.0.0/tdanalysis/data/detectors/CE20.ifo +11 -0
- tdanalysis-1.0.0/tdanalysis/data/detectors/CE40.ifo +11 -0
- tdanalysis-1.0.0/tdanalysis/data/detectors/ET.ifo +12 -0
- tdanalysis-1.0.0/tdanalysis/data/detectors/PROVENANCE.md +230 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE20-asd.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE20km_1p0MW_Aplus_coat_strain.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE20km_1p0MW_aLIGO_coat_strain.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE20km_1p5MW_Aplus_coat_strain.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE20km_1p5MW_aLIGO_coat_strain.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE40-asd.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE40km_1p0MW_Aplus_coat_strain.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE40km_1p0MW_aLIGO_coat_strain.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE40km_1p5MW_Aplus_coat_strain.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/CE40km_1p5MW_aLIGO_coat_strain.txt +1000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/ET-psd.txt +3000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/ET_cryo_10km_psd.txt +3000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/ET_cryo_15km_psd.txt +3000 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/PROVENANCE.md +130 -0
- tdanalysis-1.0.0/tdanalysis/data/noise_curves/aplus.txt +3000 -0
- tdanalysis-1.0.0/tdanalysis/detectors/__init__.py +89 -0
- tdanalysis-1.0.0/tdanalysis/detectors/xg.py +1040 -0
- tdanalysis-1.0.0/tdanalysis/dtypes.py +75 -0
- tdanalysis-1.0.0/tdanalysis/exe/config.py +129 -0
- tdanalysis-1.0.0/tdanalysis/exe/runner.py +755 -0
- tdanalysis-1.0.0/tdanalysis/exe/tdpipe.py +72 -0
- tdanalysis-1.0.0/tdanalysis/fitting_factor.py +908 -0
- tdanalysis-1.0.0/tdanalysis/forms/cd.py +81 -0
- tdanalysis-1.0.0/tdanalysis/forms/gs.py +200 -0
- tdanalysis-1.0.0/tdanalysis/forms/gs_batched.py +66 -0
- tdanalysis-1.0.0/tdanalysis/forms/invld.py +105 -0
- tdanalysis-1.0.0/tdanalysis/forms/llt.py +122 -0
- tdanalysis-1.0.0/tdanalysis/forms/pcg.py +362 -0
- tdanalysis-1.0.0/tdanalysis/gpu/gpu_matrix_multiplier.py +215 -0
- tdanalysis-1.0.0/tdanalysis/gpu/kernels.py +14 -0
- tdanalysis-1.0.0/tdanalysis/inference/nr_injection.py +178 -0
- tdanalysis-1.0.0/tdanalysis/likelihoods/comparison/discriminators.py +218 -0
- tdanalysis-1.0.0/tdanalysis/likelihoods/multi/consistency_test.py +232 -0
- tdanalysis-1.0.0/tdanalysis/likelihoods/multi/pe.py +442 -0
- tdanalysis-1.0.0/tdanalysis/likelihoods/reduced_batch.py +203 -0
- tdanalysis-1.0.0/tdanalysis/likelihoods/single/consistency_test.py +443 -0
- tdanalysis-1.0.0/tdanalysis/likelihoods/single/pe.py +2424 -0
- tdanalysis-1.0.0/tdanalysis/priors/bbh.py +215 -0
- tdanalysis-1.0.0/tdanalysis/priors/bilby.py +67 -0
- tdanalysis-1.0.0/tdanalysis/utils/bilby.py +480 -0
- tdanalysis-1.0.0/tdanalysis/utils/conditioning.py +128 -0
- tdanalysis-1.0.0/tdanalysis/utils/io.py +117 -0
- tdanalysis-1.0.0/tdanalysis/utils/plotting.py +434 -0
- tdanalysis-1.0.0/tdanalysis/utils/serialize.py +62 -0
- tdanalysis-1.0.0/tdanalysis/waveforms/__init__.py +9 -0
- tdanalysis-1.0.0/tdanalysis/waveforms/nraasur.py +575 -0
- tdanalysis-1.0.0/tests/test_pe_smoke.py +261 -0
- tdanalysis-1.0.0/tests/test_psd_band_patching.py +542 -0
- tdanalysis-1.0.0/tests/test_taper_conditioning.py +158 -0
- tdanalysis-1.0.0/tests/test_whitening_backends.py +424 -0
- tdanalysis-1.0.0/tests/test_xg_acorrs.py +488 -0
tdanalysis-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
tdanalysis is licensed under the PolyForm Noncommercial License 1.0.0, WITH
|
|
2
|
+
TWO ADDITIONAL TERMS stated at the end of this file. It is therefore a
|
|
3
|
+
MODIFIED PolyForm licence and must not be described as plain PolyForm
|
|
4
|
+
Noncommercial 1.0.0, nor identified by that SPDX identifier.
|
|
5
|
+
|
|
6
|
+
Copyright (c) 2026 Vaishak Prasad and Viviana Cáceres
|
|
7
|
+
|
|
8
|
+
WHAT THIS MEANS IN SHORT, with the licence text below governing:
|
|
9
|
+
|
|
10
|
+
* Research, teaching, personal and other noncommercial use: permitted,
|
|
11
|
+
freely, with no need to contact anyone or pay anything.
|
|
12
|
+
* Commercial use: NOT permitted under this licence. Contact the licensor to
|
|
13
|
+
arrange separate terms. Those terms may require a fee or a royalty.
|
|
14
|
+
* Using this work as training data for machine-learning models: NOT
|
|
15
|
+
permitted under this licence, commercial or not. See ADDITIONAL TERM 1.
|
|
16
|
+
* Working on or with this software using an AI tool that retains or trains
|
|
17
|
+
on what you give it: NOT permitted. See ADDITIONAL TERM 2.
|
|
18
|
+
|
|
19
|
+
This applies from the first release. No earlier version of tdanalysis has been
|
|
20
|
+
published under any other licence.
|
|
21
|
+
|
|
22
|
+
--------------------------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
# PolyForm Noncommercial License 1.0.0
|
|
25
|
+
|
|
26
|
+
<https://polyformproject.org/licenses/noncommercial/1.0.0>
|
|
27
|
+
|
|
28
|
+
## Acceptance
|
|
29
|
+
|
|
30
|
+
In order to get any license under these terms, you must agree
|
|
31
|
+
to them as both strict obligations and conditions to all
|
|
32
|
+
your licenses.
|
|
33
|
+
|
|
34
|
+
## Copyright License
|
|
35
|
+
|
|
36
|
+
The licensor grants you a copyright license for the
|
|
37
|
+
software to do everything you might do with the software
|
|
38
|
+
that would otherwise infringe the licensor's copyright
|
|
39
|
+
in it for any permitted purpose. However, you may
|
|
40
|
+
only distribute the software according to [Distribution
|
|
41
|
+
License](#distribution-license) and make changes or new works
|
|
42
|
+
based on the software according to [Changes and New Works
|
|
43
|
+
License](#changes-and-new-works-license).
|
|
44
|
+
|
|
45
|
+
## Distribution License
|
|
46
|
+
|
|
47
|
+
The licensor grants you an additional copyright license
|
|
48
|
+
to distribute copies of the software. Your license
|
|
49
|
+
to distribute covers distributing the software with
|
|
50
|
+
changes and new works permitted by [Changes and New Works
|
|
51
|
+
License](#changes-and-new-works-license).
|
|
52
|
+
|
|
53
|
+
## Notices
|
|
54
|
+
|
|
55
|
+
You must ensure that anyone who gets a copy of any part of
|
|
56
|
+
the software from you also gets a copy of these terms or the
|
|
57
|
+
URL for them above, as well as copies of any plain-text lines
|
|
58
|
+
beginning with `Required Notice:` that the licensor provided
|
|
59
|
+
with the software. For example:
|
|
60
|
+
|
|
61
|
+
> Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
|
|
62
|
+
|
|
63
|
+
## Changes and New Works License
|
|
64
|
+
|
|
65
|
+
The licensor grants you an additional copyright license to
|
|
66
|
+
make changes and new works based on the software for any
|
|
67
|
+
permitted purpose.
|
|
68
|
+
|
|
69
|
+
## Patent License
|
|
70
|
+
|
|
71
|
+
The licensor grants you a patent license for the software that
|
|
72
|
+
covers patent claims the licensor can license, or becomes able
|
|
73
|
+
to license, that you would infringe by using the software.
|
|
74
|
+
|
|
75
|
+
## Noncommercial Purposes
|
|
76
|
+
|
|
77
|
+
Any noncommercial purpose is a permitted purpose.
|
|
78
|
+
|
|
79
|
+
## Personal Uses
|
|
80
|
+
|
|
81
|
+
Personal use for research, experiment, and testing for
|
|
82
|
+
the benefit of public knowledge, personal study, private
|
|
83
|
+
entertainment, hobby projects, amateur pursuits, or religious
|
|
84
|
+
observance, without any anticipated commercial application,
|
|
85
|
+
is use for a permitted purpose.
|
|
86
|
+
|
|
87
|
+
## Noncommercial Organizations
|
|
88
|
+
|
|
89
|
+
Use by any charitable organization, educational institution,
|
|
90
|
+
public research organization, public safety or health
|
|
91
|
+
organization, environmental protection organization,
|
|
92
|
+
or government institution is use for a permitted purpose
|
|
93
|
+
regardless of the source of funding or obligations resulting
|
|
94
|
+
from the funding.
|
|
95
|
+
|
|
96
|
+
## Fair Use
|
|
97
|
+
|
|
98
|
+
You may have "fair use" rights for the software under the
|
|
99
|
+
law. These terms do not limit them.
|
|
100
|
+
|
|
101
|
+
## No Other Rights
|
|
102
|
+
|
|
103
|
+
These terms do not allow you to sublicense or transfer any of
|
|
104
|
+
your licenses to anyone else, or prevent the licensor from
|
|
105
|
+
granting licenses to anyone else. These terms do not imply
|
|
106
|
+
any other licenses.
|
|
107
|
+
|
|
108
|
+
## Patent Defense
|
|
109
|
+
|
|
110
|
+
If you make any written claim that the software infringes or
|
|
111
|
+
contributes to infringement of any patent, your patent license
|
|
112
|
+
for the software granted under these terms ends immediately. If
|
|
113
|
+
your company makes such a claim, your patent license ends
|
|
114
|
+
immediately for work on behalf of your company.
|
|
115
|
+
|
|
116
|
+
## Violations
|
|
117
|
+
|
|
118
|
+
The first time you are notified in writing that you have
|
|
119
|
+
violated any of these terms, or done anything with the software
|
|
120
|
+
not covered by your licenses, your licenses can nonetheless
|
|
121
|
+
continue if you come into full compliance with these terms,
|
|
122
|
+
and take practical steps to correct past violations, within
|
|
123
|
+
32 days of receiving notice. Otherwise, all your licenses
|
|
124
|
+
end immediately.
|
|
125
|
+
|
|
126
|
+
## No Liability
|
|
127
|
+
|
|
128
|
+
***As far as the law allows, the software comes as is, without
|
|
129
|
+
any warranty or condition, and the licensor will not be liable
|
|
130
|
+
to you for any damages arising out of these terms or the use
|
|
131
|
+
or nature of the software, under any kind of legal claim.***
|
|
132
|
+
|
|
133
|
+
## Definitions
|
|
134
|
+
|
|
135
|
+
The **licensor** is the individual or entity offering these
|
|
136
|
+
terms, and the **software** is the software the licensor makes
|
|
137
|
+
available under these terms.
|
|
138
|
+
|
|
139
|
+
**You** refers to the individual or entity agreeing to these
|
|
140
|
+
terms.
|
|
141
|
+
|
|
142
|
+
**Your company** is any legal entity, sole proprietorship,
|
|
143
|
+
or other kind of organization that you work for, plus all
|
|
144
|
+
organizations that have control over, are under the control of,
|
|
145
|
+
or are under common control with that organization. **Control**
|
|
146
|
+
means ownership of substantially all the assets of an entity,
|
|
147
|
+
or the power to direct its management and policies by vote,
|
|
148
|
+
contract, or otherwise. Control can be direct or indirect.
|
|
149
|
+
|
|
150
|
+
**Your licenses** are all the licenses granted to you for the
|
|
151
|
+
software under these terms.
|
|
152
|
+
|
|
153
|
+
**Use** means anything you do with the software requiring one
|
|
154
|
+
of your licenses.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
Required Notice: Copyright (c) 2026 Vaishak Prasad and Viviana Cáceres. Commercial use requires a
|
|
159
|
+
separate written licence from the copyright holder — contact vbp5193@psu.edu.
|
|
160
|
+
See NOTICE.md.
|
|
161
|
+
|
|
162
|
+
--------------------------------------------------------------------------
|
|
163
|
+
|
|
164
|
+
## ADDITIONAL TERM 1: machine-learning training
|
|
165
|
+
|
|
166
|
+
This term is added by the licensor and is not part of the published PolyForm
|
|
167
|
+
Noncommercial License 1.0.0.
|
|
168
|
+
|
|
169
|
+
Use of the software, its documentation, or its outputs as training,
|
|
170
|
+
fine-tuning, validation or evaluation data for a machine-learning model,
|
|
171
|
+
statistical language model, or other automated system that generates or
|
|
172
|
+
reproduces code or text, is NOT a permitted purpose under these terms,
|
|
173
|
+
whether or not that use is commercial. Contact the licensor for permission.
|
|
174
|
+
|
|
175
|
+
This does not restrict using the software for its intended scientific
|
|
176
|
+
purpose, including as a component of, or a source of training data for,
|
|
177
|
+
scientific models of gravitational-wave signals -- for example emulators,
|
|
178
|
+
surrogates or reduced-order models of the waveforms or posteriors this
|
|
179
|
+
software produces. That is ordinary research use and is permitted.
|
|
180
|
+
|
|
181
|
+
## ADDITIONAL TERM 2: AI tools used on this software
|
|
182
|
+
|
|
183
|
+
This term is added by the licensor and is not part of the published PolyForm
|
|
184
|
+
Noncommercial License 1.0.0.
|
|
185
|
+
|
|
186
|
+
You may use an AI assistant, coding agent, or similar automated system to
|
|
187
|
+
read, write, analyse or modify this software ONLY where that system is
|
|
188
|
+
configured so that the software, its documentation, and anything you derive
|
|
189
|
+
from them are not retained beyond serving your immediate request and are not
|
|
190
|
+
used to train, fine-tune, or evaluate any model.
|
|
191
|
+
|
|
192
|
+
Where such a tool offers that setting -- it goes by names like "training
|
|
193
|
+
off", "do not use my data for model improvement", or "zero data retention"
|
|
194
|
+
-- it must be enabled for the whole of your use of this software. Where a
|
|
195
|
+
tool offers no such setting, or where its terms of service reserve a right
|
|
196
|
+
to train on what you submit, use of that tool with this software is not
|
|
197
|
+
permitted under these terms.
|
|
198
|
+
|
|
199
|
+
This term does NOT prohibit AI assistance as such. It prohibits one
|
|
200
|
+
configuration of it: the one that would feed this software into a model's
|
|
201
|
+
training corpus, which is what ADDITIONAL TERM 1 already forbids doing
|
|
202
|
+
directly. The purpose is to close the same door twice, not to bar a tool
|
|
203
|
+
that keeps your input out of its training data.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Notices
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Vaishak Prasad and Viviana Cáceres. All rights reserved except as licensed below.
|
|
4
|
+
|
|
5
|
+
This file summarises the licensing position. `LICENSE` governs; where the two
|
|
6
|
+
differ, `LICENSE` wins.
|
|
7
|
+
|
|
8
|
+
## Licence
|
|
9
|
+
|
|
10
|
+
`tdanalysis` is licensed under the **PolyForm Noncommercial License 1.0.0, with
|
|
11
|
+
two additional terms** on machine-learning training and on AI tooling. The full
|
|
12
|
+
text is in `LICENSE`.
|
|
13
|
+
|
|
14
|
+
Because those terms modify it, this is **not** plain PolyForm Noncommercial and
|
|
15
|
+
must not be identified by that SPDX id. The metadata declares
|
|
16
|
+
`LicenseRef-PolyForm-Noncommercial-1.0.0-with-AI-terms`.
|
|
17
|
+
|
|
18
|
+
**This is not an open-source licence.** It is deliberately not OSI-approved,
|
|
19
|
+
because it restricts the field of use, which the Open Source Definition forbids.
|
|
20
|
+
Two consequences worth planning around: conda-forge will not accept it, and
|
|
21
|
+
neither will JOSS or most software-paper venues. PyPI has no such requirement.
|
|
22
|
+
|
|
23
|
+
This applies from the first release. No version of `tdanalysis` has been
|
|
24
|
+
published under any other licence.
|
|
25
|
+
|
|
26
|
+
## Copyright, authorship and contributors
|
|
27
|
+
|
|
28
|
+
Copyright is held jointly by **Vaishak Prasad** and **Viviana Cáceres**, the two
|
|
29
|
+
principal developers of `tdanalysis`.
|
|
30
|
+
|
|
31
|
+
Copyright holder and contributor are different things, and this section lists
|
|
32
|
+
both. Contributors to this release, and to the wider project it is drawn from:
|
|
33
|
+
|
|
34
|
+
* **Vaishak Prasad** — the parameter estimation core, the consistency test, the
|
|
35
|
+
covariance and quadratic-form machinery, and the runner that this tier
|
|
36
|
+
consists of.
|
|
37
|
+
* **Viviana Cáceres** — the ringdown spectroscopy and multi-segment analysis,
|
|
38
|
+
and contributions across the shared code this release builds on.
|
|
39
|
+
* **Sayan Neogi** — a fix to the merger placement, where a missing `abs()` had
|
|
40
|
+
the peak located on the signed strain rather than on its amplitude.
|
|
41
|
+
|
|
42
|
+
The source repository was licensed GPL-3.0 from its first commit until this
|
|
43
|
+
release, and the change of licence was made with the agreement of both copyright
|
|
44
|
+
holders. It is prospective: anyone who received a copy of the software under
|
|
45
|
+
GPL-3.0 keeps GPL-3.0 rights to that copy. A licence already granted cannot be retracted, and
|
|
46
|
+
nothing here attempts to do so.
|
|
47
|
+
|
|
48
|
+
## What you may do without asking
|
|
49
|
+
|
|
50
|
+
Research, teaching, academic and other noncommercial use, including publishing
|
|
51
|
+
results obtained with this software. No permission, no contact, no payment. The
|
|
52
|
+
licence grants this outright to "any charitable organization, educational
|
|
53
|
+
institution, public research organization, public safety or health organization,
|
|
54
|
+
environmental protection organization, or government institution ... regardless
|
|
55
|
+
of the source of funding" — so academic use funded by industry is still
|
|
56
|
+
noncommercial use, and needs nothing from anyone.
|
|
57
|
+
|
|
58
|
+
Modifying it, and sharing your modifications, for those same noncommercial
|
|
59
|
+
purposes.
|
|
60
|
+
|
|
61
|
+
## What requires permission
|
|
62
|
+
|
|
63
|
+
**Commercial use of any kind.** If you or your company would use this software
|
|
64
|
+
in connection with a product, service, or activity from which commercial
|
|
65
|
+
advantage or monetary compensation is anticipated, you need a separate licence.
|
|
66
|
+
Commercial licences are available and separate terms can be arranged; those
|
|
67
|
+
terms may require a fee or a royalty. The licence is not a refusal, it is a
|
|
68
|
+
request that you ask.
|
|
69
|
+
|
|
70
|
+
**Use as training data.** Using the software, its documentation, or its outputs
|
|
71
|
+
to train, fine-tune, validate or evaluate a machine-learning model, language
|
|
72
|
+
model, or other system that generates or reproduces code or text — commercial or
|
|
73
|
+
not. See ADDITIONAL TERM 1.
|
|
74
|
+
|
|
75
|
+
This restriction is **not** aimed at scientific modelling. Building an emulator,
|
|
76
|
+
surrogate or reduced-order model *of the waveforms or posteriors this software
|
|
77
|
+
produces* is ordinary research use and is permitted. The term is aimed at
|
|
78
|
+
ingestion of the source and documentation into general-purpose code and language
|
|
79
|
+
models.
|
|
80
|
+
|
|
81
|
+
**AI tools configured to train on what you give them.** Reading, writing or
|
|
82
|
+
modifying this software with an AI assistant or coding agent is permitted only
|
|
83
|
+
where that tool is configured not to retain your input or use it for training.
|
|
84
|
+
See ADDITIONAL TERM 2. This does not prohibit AI assistance; it prohibits the
|
|
85
|
+
one configuration that would route the software into a training corpus by
|
|
86
|
+
another path.
|
|
87
|
+
|
|
88
|
+
Contact **vbp5193@psu.edu** for any of the above.
|
|
89
|
+
|
|
90
|
+
## Reservation of rights for text and data mining
|
|
91
|
+
|
|
92
|
+
The copyright holders **expressly reserve** the right to reproduce, extract, or
|
|
93
|
+
otherwise use this software, in whole or in part, for text and data mining, or
|
|
94
|
+
for the training, fine-tuning, evaluation, or validation of machine-learning or
|
|
95
|
+
generative-AI models. No such right is granted by the licence above, whether the
|
|
96
|
+
use would otherwise be commercial or noncommercial.
|
|
97
|
+
|
|
98
|
+
This reservation is made in machine-readable form for the purposes of Article
|
|
99
|
+
4(3) of Directive (EU) 2019/790, and is asserted generally elsewhere.
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
tdm-reservation: all
|
|
103
|
+
ai-training: disallowed
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**An honest note on how strong these are.** They are not equally strong, and it
|
|
107
|
+
is better to know which is which.
|
|
108
|
+
|
|
109
|
+
The noncommercial term rests on copyright and is the strongest of the three. A
|
|
110
|
+
commercial user who ignores it is using a copyrighted work outside its licence.
|
|
111
|
+
|
|
112
|
+
The training restrictions — ADDITIONAL TERM 1 and the reservation above — are
|
|
113
|
+
weaker. Whether model training requires a copyright licence at all is unsettled,
|
|
114
|
+
and in some jurisdictions it may be permitted regardless of what a licence says.
|
|
115
|
+
|
|
116
|
+
ADDITIONAL TERM 2, on AI tooling, is a contractual condition rather than a
|
|
117
|
+
copyright one: it binds someone who accepted this licence, and it is close to
|
|
118
|
+
unverifiable in practice. Treat all three as a clear statement of the copyright
|
|
119
|
+
holders' position — which is what a reservation of rights is for — and not as a
|
|
120
|
+
guarantee of enforcement.
|
|
121
|
+
|
|
122
|
+
## Dependencies
|
|
123
|
+
|
|
124
|
+
This software is an independent work that calls the public APIs of separately
|
|
125
|
+
installed third-party packages. It does not incorporate, vendor, or redistribute
|
|
126
|
+
their source. Those packages carry their own licences — several, including
|
|
127
|
+
`lalsuite` and `pycbc`, are GPL — and installing them is the user's own act
|
|
128
|
+
under their own terms. No third-party code is distributed with this package.
|
|
129
|
+
|
|
130
|
+
`tdanalysis._compat.Model` is a self-contained reimplementation of the model
|
|
131
|
+
base class from `mcsamplers` (https://gitlab.com/vaishakp/parameter-estimation),
|
|
132
|
+
which is the work of one of the same authors and is included here under the same terms
|
|
133
|
+
as the rest of this package.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: tdanalysis
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Time-domain parameter estimation and multi-segment consistency tests for gravitational-wave data
|
|
5
|
+
Project-URL: Homepage, https://github.com/vaishakp/tdanalysis
|
|
6
|
+
Author: Vaishak Prasad, Viviana Cáceres
|
|
7
|
+
Maintainer-email: Vaishak Prasad <vbp5193@psu.edu>
|
|
8
|
+
License-Expression: LicenseRef-PolyForm-Noncommercial-1.0.0-with-AI-terms
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
License-File: NOTICE.md
|
|
11
|
+
Keywords: consistency-test,gravitational-waves,parameter-estimation,time-domain
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
17
|
+
Requires-Python: >=3.11
|
|
18
|
+
Requires-Dist: bilby-pipe
|
|
19
|
+
Requires-Dist: bilby<3,>=2.4
|
|
20
|
+
Requires-Dist: corner
|
|
21
|
+
Requires-Dist: dask
|
|
22
|
+
Requires-Dist: dynesty>=2.1
|
|
23
|
+
Requires-Dist: gwpy>=3.0
|
|
24
|
+
Requires-Dist: h5py
|
|
25
|
+
Requires-Dist: lalsuite>=7.20
|
|
26
|
+
Requires-Dist: matplotlib>=3.7
|
|
27
|
+
Requires-Dist: numba
|
|
28
|
+
Requires-Dist: numpy>=1.24
|
|
29
|
+
Requires-Dist: pandas>=2.0
|
|
30
|
+
Requires-Dist: pycbc>=2.3
|
|
31
|
+
Requires-Dist: scipy>=1.10
|
|
32
|
+
Requires-Dist: spectools
|
|
33
|
+
Requires-Dist: statsmodels
|
|
34
|
+
Requires-Dist: tqdm
|
|
35
|
+
Requires-Dist: waveformtools
|
|
36
|
+
Provides-Extra: all
|
|
37
|
+
Requires-Dist: nrhjsurrogate; extra == 'all'
|
|
38
|
+
Requires-Dist: threadpoolctl; extra == 'all'
|
|
39
|
+
Requires-Dist: vlconf; extra == 'all'
|
|
40
|
+
Provides-Extra: gpu-legacy
|
|
41
|
+
Requires-Dist: torch; extra == 'gpu-legacy'
|
|
42
|
+
Provides-Extra: nr
|
|
43
|
+
Requires-Dist: nrhjsurrogate; extra == 'nr'
|
|
44
|
+
Provides-Extra: pipeline
|
|
45
|
+
Requires-Dist: threadpoolctl; extra == 'pipeline'
|
|
46
|
+
Requires-Dist: vlconf; extra == 'pipeline'
|
|
47
|
+
Description-Content-Type: text/markdown
|
|
48
|
+
|
|
49
|
+
# tdanalysis
|
|
50
|
+
|
|
51
|
+
Time-domain parameter estimation for gravitational-wave data, and the
|
|
52
|
+
inspiral-ringdown consistency test built on it.
|
|
53
|
+
|
|
54
|
+
The likelihood is `-½ δᵀ C⁻¹ δ` evaluated on a chosen data segment, where `C` is
|
|
55
|
+
a full noise covariance built from a detector autocorrelation function rather
|
|
56
|
+
than from a diagonal-in-frequency PSD approximation. That is what makes short,
|
|
57
|
+
gated or gappy segments tractable, which is the regime a ringdown analysis lives
|
|
58
|
+
in.
|
|
59
|
+
|
|
60
|
+
This is release **v1**. It is pure Python, it installs from PyPI with no
|
|
61
|
+
compiler, and it contains the parameter estimation core and the consistency
|
|
62
|
+
test. The batched GPU sampling path (v2) and the ringdown spectroscopy
|
|
63
|
+
likelihoods (v3) are separate, later releases of this same package.
|
|
64
|
+
|
|
65
|
+
## Install
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
pip install tdanalysis
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The wheel is `py3-none-any`. Python 3.11 or newer.
|
|
72
|
+
|
|
73
|
+
Optional extras:
|
|
74
|
+
|
|
75
|
+
| Extra | Pulls in | For |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `tdanalysis[pipeline]` | `vlconf`, `threadpoolctl` | the `tdanalysis` config-driven CLI |
|
|
78
|
+
| `tdanalysis[nr]` | `nrhjsurrogate` | the NRAASur action-angle waveform backend |
|
|
79
|
+
| `tdanalysis[gpu-legacy]` | `torch` | non-numba backends of the legacy matrix multiplier |
|
|
80
|
+
| `tdanalysis[all]` | the first two | |
|
|
81
|
+
|
|
82
|
+
Every one of these is imported inside a function at the point it is first
|
|
83
|
+
needed, so the library imports and runs without any of them.
|
|
84
|
+
|
|
85
|
+
`nrhjsurrogate` declares `requires-python >= 3.12`, so the `[nr]` extra can
|
|
86
|
+
only be resolved on 3.12 or newer even though the package itself supports
|
|
87
|
+
3.11. On an older interpreter pip fails with that as the reason, which is
|
|
88
|
+
the intended behaviour: the alternative is a marker that installs nothing
|
|
89
|
+
and leaves the backend quietly missing.
|
|
90
|
+
|
|
91
|
+
## What is in here
|
|
92
|
+
|
|
93
|
+
* **Parameter estimation.** `tdanalysis.likelihoods.single.pe.GWTransientTD` for
|
|
94
|
+
one detector, `...likelihoods.multi.pe.GWTransientTDMultiDetector` for a
|
|
95
|
+
coherent network. A bilby `Likelihood`, so it drops into a bilby sampler run.
|
|
96
|
+
* **Inspiral-ringdown consistency test.**
|
|
97
|
+
`tdanalysis.likelihoods.single.consistency_test.InspiralRingdownConsistencyTD`
|
|
98
|
+
and `...likelihoods.multi.consistency_test.IMRConsistencyMultiDetector`,
|
|
99
|
+
comparing an inspiral-derived and a ringdown-derived remnant, plus
|
|
100
|
+
`tdanalysis.likelihoods.comparison.discriminators.ChiSquaredRingdown`.
|
|
101
|
+
* **Quadratic forms and whiteners.** `tdanalysis.forms`, selected with
|
|
102
|
+
`qform_method`: Gohberg-Semencul (`gs`, O(N log N) via FFT), preconditioned CG
|
|
103
|
+
(`pcg`), `invLD`, `Llt` and `CD`. `gs_batched` is the numpy batched chi-square
|
|
104
|
+
that `reduced_batch` drives.
|
|
105
|
+
* **Covariance and PSD handling.** `tdanalysis.covariance`, including the band
|
|
106
|
+
patching and taper conditioning the tests cover.
|
|
107
|
+
* **Next-generation detectors.** `tdanalysis.detectors.xg`: CE40, CE20, the
|
|
108
|
+
triangular ET (ET1/ET2/ET3) and LIGO-India, with vendored noise curves and
|
|
109
|
+
conditioned autocorrelations under `tdanalysis/data/`. Importing
|
|
110
|
+
`tdanalysis.detectors` registers them with pycbc. Provenance for every
|
|
111
|
+
vendored file is in `tdanalysis/data/*/PROVENANCE.md`.
|
|
112
|
+
* **Waveform backends.** LAL and pycbc approximants, plus the NRAASur
|
|
113
|
+
action-angle surrogate (`tdanalysis.waveforms.nraasur`). All wrapped at the
|
|
114
|
+
generator level, so peak finding, tapers, padding, the segment crop and the
|
|
115
|
+
projection are the same code for every approximant. That is what makes
|
|
116
|
+
parameters estimated with different models comparable.
|
|
117
|
+
* **A CLI.** `tdanalysis --help`, a config-driven run driver.
|
|
118
|
+
|
|
119
|
+
Not in v1: ringdown spectroscopy likelihoods and Kerr QNM templates (v3), the
|
|
120
|
+
Kokkos GPU kernels and batched sampling (v2).
|
|
121
|
+
|
|
122
|
+
## Worked example
|
|
123
|
+
|
|
124
|
+
`tests/test_pe_smoke.py` is the reference example as well as the release gate.
|
|
125
|
+
It builds a real `GWTransientTD` with real LAL waveform generation, real
|
|
126
|
+
conditioning and projection, and a real Gohberg-Semencul form from a real
|
|
127
|
+
Cholesky factor, with nothing mocked. It carries no data-file dependency, so it
|
|
128
|
+
runs anywhere the package installs.
|
|
129
|
+
|
|
130
|
+
Read it for the constructor arguments in context. The properties it pins are
|
|
131
|
+
worth knowing about:
|
|
132
|
+
|
|
133
|
+
* the zero-noise truth is the maximum, and moving off it costs chi-square
|
|
134
|
+
* scalar and batched evaluation give the same number, so a posterior does not
|
|
135
|
+
depend on the batch size
|
|
136
|
+
* batching is row-order independent, and a one-row batch matches the scalar call
|
|
137
|
+
* the likelihood survives a pickle round trip, which is what lets a bilby
|
|
138
|
+
multiprocessing pool carry it
|
|
139
|
+
|
|
140
|
+
## Tests
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
pip install tdanalysis
|
|
144
|
+
python -m pytest tests/ -q
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Five files ship: the `GWTransientTD` gate above, plus PSD band patching, taper
|
|
148
|
+
conditioning, whitening backend agreement and the XG autocorrelations.
|
|
149
|
+
|
|
150
|
+
## Licence
|
|
151
|
+
|
|
152
|
+
**PolyForm Noncommercial License 1.0.0, with two additional terms.** See
|
|
153
|
+
`LICENSE` for the text and `NOTICE.md` for what it means in practice, and for
|
|
154
|
+
the contributors to this release.
|
|
155
|
+
|
|
156
|
+
This is deliberately not an open-source licence, because it restricts the field
|
|
157
|
+
of use.
|
|
158
|
+
|
|
159
|
+
* **Noncommercial use is free and needs no permission** — research, teaching,
|
|
160
|
+
and publishing results obtained with it. The licence grants that outright,
|
|
161
|
+
including where the funding is industrial.
|
|
162
|
+
* **Commercial use needs a written licence**, which may carry a fee or a
|
|
163
|
+
royalty: vbp5193@psu.edu.
|
|
164
|
+
* **Training a model on this software is not permitted**, commercial or not.
|
|
165
|
+
Building a surrogate or emulator of the *waveforms and posteriors it produces*
|
|
166
|
+
is ordinary research use and is fine; ingesting the source and documentation
|
|
167
|
+
into a general-purpose code or language model is not.
|
|
168
|
+
* **AI tools may be used on this software only with training and retention
|
|
169
|
+
off.** AI assistance as such is not prohibited; the configuration that would
|
|
170
|
+
feed this code into a training corpus is.
|
|
171
|
+
|
|
172
|
+
Because those additional terms modify PolyForm, the metadata declares
|
|
173
|
+
`LicenseRef-PolyForm-Noncommercial-1.0.0-with-AI-terms` rather than the bare
|
|
174
|
+
PolyForm identifier.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# tdanalysis
|
|
2
|
+
|
|
3
|
+
Time-domain parameter estimation for gravitational-wave data, and the
|
|
4
|
+
inspiral-ringdown consistency test built on it.
|
|
5
|
+
|
|
6
|
+
The likelihood is `-½ δᵀ C⁻¹ δ` evaluated on a chosen data segment, where `C` is
|
|
7
|
+
a full noise covariance built from a detector autocorrelation function rather
|
|
8
|
+
than from a diagonal-in-frequency PSD approximation. That is what makes short,
|
|
9
|
+
gated or gappy segments tractable, which is the regime a ringdown analysis lives
|
|
10
|
+
in.
|
|
11
|
+
|
|
12
|
+
This is release **v1**. It is pure Python, it installs from PyPI with no
|
|
13
|
+
compiler, and it contains the parameter estimation core and the consistency
|
|
14
|
+
test. The batched GPU sampling path (v2) and the ringdown spectroscopy
|
|
15
|
+
likelihoods (v3) are separate, later releases of this same package.
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pip install tdanalysis
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The wheel is `py3-none-any`. Python 3.11 or newer.
|
|
24
|
+
|
|
25
|
+
Optional extras:
|
|
26
|
+
|
|
27
|
+
| Extra | Pulls in | For |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `tdanalysis[pipeline]` | `vlconf`, `threadpoolctl` | the `tdanalysis` config-driven CLI |
|
|
30
|
+
| `tdanalysis[nr]` | `nrhjsurrogate` | the NRAASur action-angle waveform backend |
|
|
31
|
+
| `tdanalysis[gpu-legacy]` | `torch` | non-numba backends of the legacy matrix multiplier |
|
|
32
|
+
| `tdanalysis[all]` | the first two | |
|
|
33
|
+
|
|
34
|
+
Every one of these is imported inside a function at the point it is first
|
|
35
|
+
needed, so the library imports and runs without any of them.
|
|
36
|
+
|
|
37
|
+
`nrhjsurrogate` declares `requires-python >= 3.12`, so the `[nr]` extra can
|
|
38
|
+
only be resolved on 3.12 or newer even though the package itself supports
|
|
39
|
+
3.11. On an older interpreter pip fails with that as the reason, which is
|
|
40
|
+
the intended behaviour: the alternative is a marker that installs nothing
|
|
41
|
+
and leaves the backend quietly missing.
|
|
42
|
+
|
|
43
|
+
## What is in here
|
|
44
|
+
|
|
45
|
+
* **Parameter estimation.** `tdanalysis.likelihoods.single.pe.GWTransientTD` for
|
|
46
|
+
one detector, `...likelihoods.multi.pe.GWTransientTDMultiDetector` for a
|
|
47
|
+
coherent network. A bilby `Likelihood`, so it drops into a bilby sampler run.
|
|
48
|
+
* **Inspiral-ringdown consistency test.**
|
|
49
|
+
`tdanalysis.likelihoods.single.consistency_test.InspiralRingdownConsistencyTD`
|
|
50
|
+
and `...likelihoods.multi.consistency_test.IMRConsistencyMultiDetector`,
|
|
51
|
+
comparing an inspiral-derived and a ringdown-derived remnant, plus
|
|
52
|
+
`tdanalysis.likelihoods.comparison.discriminators.ChiSquaredRingdown`.
|
|
53
|
+
* **Quadratic forms and whiteners.** `tdanalysis.forms`, selected with
|
|
54
|
+
`qform_method`: Gohberg-Semencul (`gs`, O(N log N) via FFT), preconditioned CG
|
|
55
|
+
(`pcg`), `invLD`, `Llt` and `CD`. `gs_batched` is the numpy batched chi-square
|
|
56
|
+
that `reduced_batch` drives.
|
|
57
|
+
* **Covariance and PSD handling.** `tdanalysis.covariance`, including the band
|
|
58
|
+
patching and taper conditioning the tests cover.
|
|
59
|
+
* **Next-generation detectors.** `tdanalysis.detectors.xg`: CE40, CE20, the
|
|
60
|
+
triangular ET (ET1/ET2/ET3) and LIGO-India, with vendored noise curves and
|
|
61
|
+
conditioned autocorrelations under `tdanalysis/data/`. Importing
|
|
62
|
+
`tdanalysis.detectors` registers them with pycbc. Provenance for every
|
|
63
|
+
vendored file is in `tdanalysis/data/*/PROVENANCE.md`.
|
|
64
|
+
* **Waveform backends.** LAL and pycbc approximants, plus the NRAASur
|
|
65
|
+
action-angle surrogate (`tdanalysis.waveforms.nraasur`). All wrapped at the
|
|
66
|
+
generator level, so peak finding, tapers, padding, the segment crop and the
|
|
67
|
+
projection are the same code for every approximant. That is what makes
|
|
68
|
+
parameters estimated with different models comparable.
|
|
69
|
+
* **A CLI.** `tdanalysis --help`, a config-driven run driver.
|
|
70
|
+
|
|
71
|
+
Not in v1: ringdown spectroscopy likelihoods and Kerr QNM templates (v3), the
|
|
72
|
+
Kokkos GPU kernels and batched sampling (v2).
|
|
73
|
+
|
|
74
|
+
## Worked example
|
|
75
|
+
|
|
76
|
+
`tests/test_pe_smoke.py` is the reference example as well as the release gate.
|
|
77
|
+
It builds a real `GWTransientTD` with real LAL waveform generation, real
|
|
78
|
+
conditioning and projection, and a real Gohberg-Semencul form from a real
|
|
79
|
+
Cholesky factor, with nothing mocked. It carries no data-file dependency, so it
|
|
80
|
+
runs anywhere the package installs.
|
|
81
|
+
|
|
82
|
+
Read it for the constructor arguments in context. The properties it pins are
|
|
83
|
+
worth knowing about:
|
|
84
|
+
|
|
85
|
+
* the zero-noise truth is the maximum, and moving off it costs chi-square
|
|
86
|
+
* scalar and batched evaluation give the same number, so a posterior does not
|
|
87
|
+
depend on the batch size
|
|
88
|
+
* batching is row-order independent, and a one-row batch matches the scalar call
|
|
89
|
+
* the likelihood survives a pickle round trip, which is what lets a bilby
|
|
90
|
+
multiprocessing pool carry it
|
|
91
|
+
|
|
92
|
+
## Tests
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pip install tdanalysis
|
|
96
|
+
python -m pytest tests/ -q
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Five files ship: the `GWTransientTD` gate above, plus PSD band patching, taper
|
|
100
|
+
conditioning, whitening backend agreement and the XG autocorrelations.
|
|
101
|
+
|
|
102
|
+
## Licence
|
|
103
|
+
|
|
104
|
+
**PolyForm Noncommercial License 1.0.0, with two additional terms.** See
|
|
105
|
+
`LICENSE` for the text and `NOTICE.md` for what it means in practice, and for
|
|
106
|
+
the contributors to this release.
|
|
107
|
+
|
|
108
|
+
This is deliberately not an open-source licence, because it restricts the field
|
|
109
|
+
of use.
|
|
110
|
+
|
|
111
|
+
* **Noncommercial use is free and needs no permission** — research, teaching,
|
|
112
|
+
and publishing results obtained with it. The licence grants that outright,
|
|
113
|
+
including where the funding is industrial.
|
|
114
|
+
* **Commercial use needs a written licence**, which may carry a fee or a
|
|
115
|
+
royalty: vbp5193@psu.edu.
|
|
116
|
+
* **Training a model on this software is not permitted**, commercial or not.
|
|
117
|
+
Building a surrogate or emulator of the *waveforms and posteriors it produces*
|
|
118
|
+
is ordinary research use and is fine; ingesting the source and documentation
|
|
119
|
+
into a general-purpose code or language model is not.
|
|
120
|
+
* **AI tools may be used on this software only with training and retention
|
|
121
|
+
off.** AI assistance as such is not prohibited; the configuration that would
|
|
122
|
+
feed this code into a training corpus is.
|
|
123
|
+
|
|
124
|
+
Because those additional terms modify PolyForm, the metadata declares
|
|
125
|
+
`LicenseRef-PolyForm-Noncommercial-1.0.0-with-AI-terms` rather than the bare
|
|
126
|
+
PolyForm identifier.
|