26
26
Cls = Sequence [NDArray [Any ]]
27
27
28
28
29
- def inv_triangle_number ( triangle_number : int ) -> int :
29
+ def nfields_from_nspectra ( nspectra : int ) -> int :
30
30
r"""
31
- The :math:`n`-th triangle number is :math:`T_n = n \, (n+1)/2`. If
32
- the argument is :math:`T_n`, then :math:`n` is returned. Otherwise,
33
- a :class:`ValueError` is raised.
31
+ Returns the number of fields for a number of spectra.
32
+
33
+ Given the number of spectra *nspectra*, returns the number of
34
+ fields *n* such that ``n * (n + 1) // 2 == nspectra``.
34
35
"""
35
- n = math .floor (math .sqrt (2 * triangle_number ))
36
- if n * (n + 1 ) // 2 != triangle_number :
37
- msg = f"not a triangle number : { triangle_number } "
36
+ n = math .floor (math .sqrt (2 * nspectra ))
37
+ if n * (n + 1 ) // 2 != nspectra :
38
+ msg = f"invalid number of spectra : { nspectra } "
38
39
raise ValueError (msg )
39
40
return n
40
41
@@ -274,11 +275,7 @@ def discretized_cls(
274
275
275
276
"""
276
277
if ncorr is not None :
277
- try :
278
- n = inv_triangle_number (len (cls ))
279
- except ValueError :
280
- msg = "length of cls array is not a triangle number"
281
- raise ValueError (msg ) from None
278
+ n = nfields_from_nspectra (len (cls ))
282
279
cls = [
283
280
cls [i * (i + 1 ) // 2 + j ] if j <= ncorr else np .asarray ([])
284
281
for i in range (n )
@@ -371,7 +368,7 @@ def generate_gaussian(
371
368
372
369
# number of gls and number of fields
373
370
ngls = len (gls )
374
- ngrf = inv_triangle_number (ngls )
371
+ ngrf = nfields_from_nspectra (ngls )
375
372
376
373
# number of correlated fields if not specified
377
374
if ncorr is None :
@@ -591,11 +588,7 @@ def effective_cls(
591
588
592
589
"""
593
590
# this is the number of fields
594
- try :
595
- n = inv_triangle_number (len (cls ))
596
- except ValueError :
597
- msg = "length of cls is not a triangle number"
598
- raise ValueError (msg ) from None
591
+ n = nfields_from_nspectra (len (cls ))
599
592
600
593
# find lmax if not given
601
594
if lmax is None :
@@ -844,7 +837,7 @@ def glass_to_healpix_spectra(spectra: Cls) -> Cls:
844
837
Sequence of spectra in HEALPix order.
845
838
846
839
"""
847
- n = inv_triangle_number (len (spectra ))
840
+ n = nfields_from_nspectra (len (spectra ))
848
841
849
842
comb = [(i , j ) for i , j in spectra_indices (n )]
850
843
return [spectra [comb .index ((i + k , i ))] for k in range (n ) for i in range (n - k )]
@@ -867,7 +860,7 @@ def healpix_to_glass_spectra(spectra: Cls) -> Cls:
867
860
Sequence of spectra in GLASS order.
868
861
869
862
"""
870
- n = inv_triangle_number (len (spectra ))
863
+ n = nfields_from_nspectra (len (spectra ))
871
864
872
865
comb = [(i + k , i ) for k in range (n ) for i in range (n - k )]
873
866
return [spectra [comb .index ((i , j ))] for i , j in spectra_indices (n )]
@@ -914,11 +907,7 @@ def cov_from_spectra(spectra: Cls, *, lmax: int | None = None) -> NDArray[Any]:
914
907
915
908
"""
916
909
# recover the number of fields from the number of spectra
917
- try :
918
- n = inv_triangle_number (len (spectra ))
919
- except ValueError :
920
- msg = "invalid number of spectra"
921
- raise ValueError (msg ) from None
910
+ n = nfields_from_nspectra (len (spectra ))
922
911
923
912
if lmax is None : # noqa: SIM108
924
913
# maximum length in input spectra
0 commit comments