From a35afb51b92ff862847152c5dcee8f3b070209ae Mon Sep 17 00:00:00 2001 From: jaimerzp Date: Tue, 27 Jan 2026 09:52:50 +0000 Subject: [PATCH 1/5] bug --- heracles/unmixing.py | 49 ++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/heracles/unmixing.py b/heracles/unmixing.py index 04cb88f..0b96215 100644 --- a/heracles/unmixing.py +++ b/heracles/unmixing.py @@ -79,10 +79,8 @@ def _natural_unmixing(d, wm, fields, lmax=None): # Grab metadata dtype = _d.array.dtype # pad cls - _d = np.atleast_2d(_d.array) - pad_width = [(0, 0)] * _d.ndim # no padding for other dims - pad_width[-1] = (0, lmax_mask - lmax) # pad only last dim - _d = np.pad(_d, pad_width, mode="constant", constant_values=0) + pad_width = [(0, 0)] * (_d.ndim - 1) + [(0, lmax_mask - lmax)] + _d = np.pad(_d, pad_width) if (s1 != 0) and (s2 != 0): __d = np.array( [ @@ -113,17 +111,42 @@ def _natural_unmixing(d, wm, fields, lmax=None): _corr_d[1, 1] = __corr_d[2] # BB like spin-2 _corr_d[0, 1] = -__icorr_d[1] # EB like spin-0 _corr_d[1, 0] = __icorr_d[2] # EB like spin-0 + elif (s1 != 0) or (s2 != 0): + __dp = np.array( + [ + np.zeros_like(_d[0]), + np.zeros_like(_d[0]), + np.zeros_like(_d[0]), + _d[0]+_d[1], # TE like spin-2 + ]) + __dm = np.array( + [ + np.zeros_like(_d[0]), + np.zeros_like(_d[0]), + np.zeros_like(_d[0]), + _d[0]-_d[1], # TE like spin-2 + ]) + # Correct by alpha + wp = cl2corr(__dp.T).T + wm = cl2corr(__dm.T).T + corr_wp = (wp / _wm).real + corr_wm = (wm / _wm).imag + # Transform back to Cl + corr_dp = corr2cl(corr_wp.T).T + corr_dm = corr2cl(corr_wm.T).T + # reorder + _corr_d = np.zeros_like(_d) + _corr_d[0] = 0.5 * (corr_dp[3]+corr_dm[3]) # TE + _corr_d[1] = 0.5 * (corr_dp[3]-corr_dm[3]) # TB + print("shape of _d:", np.zeros_like(_d).shape) + print("shape of corr_d:", np.zeros_like(_corr_d).shape) + print(corr_dp[3].shape, corr_dm[3].shape) else: # Treat everything as spin-0 - _corr_d = [] - for cl in _d: - wd = cl2corr(cl).T - corr_wd = wd / _wm - # Transform back to Cl - __corr_d = corr2cl(corr_wd.T).T - _corr_d.append(__corr_d[0]) - # remove extra axis - _corr_d = np.squeeze(_corr_d) + wd = cl2corr(_d).T + corr_wd = wd / _wm + # Transform back to Cl + _corr_d = corr2cl(corr_wd.T).T[0] # Add metadata back _corr_d = np.array(list(_corr_d), dtype=dtype) corr_d[key] = replace(d[key], array=_corr_d) From 60f3cc8991e4e7443e2f0c0af48b46d7017597c7 Mon Sep 17 00:00:00 2001 From: jaimerzp Date: Mon, 16 Feb 2026 11:05:27 +0000 Subject: [PATCH 2/5] ruff --- heracles/unmixing.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/heracles/unmixing.py b/heracles/unmixing.py index 0b96215..7116db0 100644 --- a/heracles/unmixing.py +++ b/heracles/unmixing.py @@ -117,15 +117,17 @@ def _natural_unmixing(d, wm, fields, lmax=None): np.zeros_like(_d[0]), np.zeros_like(_d[0]), np.zeros_like(_d[0]), - _d[0]+_d[1], # TE like spin-2 - ]) + _d[0] + _d[1], # TE like spin-2 + ] + ) __dm = np.array( [ np.zeros_like(_d[0]), np.zeros_like(_d[0]), np.zeros_like(_d[0]), - _d[0]-_d[1], # TE like spin-2 - ]) + _d[0] - _d[1], # TE like spin-2 + ] + ) # Correct by alpha wp = cl2corr(__dp.T).T wm = cl2corr(__dm.T).T @@ -136,8 +138,8 @@ def _natural_unmixing(d, wm, fields, lmax=None): corr_dm = corr2cl(corr_wm.T).T # reorder _corr_d = np.zeros_like(_d) - _corr_d[0] = 0.5 * (corr_dp[3]+corr_dm[3]) # TE - _corr_d[1] = 0.5 * (corr_dp[3]-corr_dm[3]) # TB + _corr_d[0] = 0.5 * (corr_dp[3] + corr_dm[3]) # TE + _corr_d[1] = 0.5 * (corr_dp[3] - corr_dm[3]) # TB print("shape of _d:", np.zeros_like(_d).shape) print("shape of corr_d:", np.zeros_like(_corr_d).shape) print(corr_dp[3].shape, corr_dm[3].shape) From c451574723f1e9902076cf08c110eb7f61c1e5bc Mon Sep 17 00:00:00 2001 From: jaimerzp Date: Mon, 16 Feb 2026 11:29:27 +0000 Subject: [PATCH 3/5] fixes --- heracles/unmixing.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/heracles/unmixing.py b/heracles/unmixing.py index 7116db0..945e6e5 100644 --- a/heracles/unmixing.py +++ b/heracles/unmixing.py @@ -70,6 +70,8 @@ def _natural_unmixing(d, wm, fields, lmax=None): for key in d.keys(): a, b, i, j = key m_key = (masks[a], masks[b], i, j) + print("Processing key:", key, "with mask key:", m_key) + print(wm) _wm = get_cl(m_key, wm) _d = d[key] s1, s2 = _d.spin @@ -129,20 +131,17 @@ def _natural_unmixing(d, wm, fields, lmax=None): ] ) # Correct by alpha - wp = cl2corr(__dp.T).T - wm = cl2corr(__dm.T).T - corr_wp = (wp / _wm).real - corr_wm = (wm / _wm).imag + wplus = cl2corr(__dp.T).T + wminus = cl2corr(__dm.T).T + corr_wplus = (wplus / _wm).real + corr_wminus = (wminus / _wm).imag # Transform back to Cl - corr_dp = corr2cl(corr_wp.T).T - corr_dm = corr2cl(corr_wm.T).T + corr_dp = corr2cl(corr_wplus.T).T + corr_dm = corr2cl(corr_wminus.T).T # reorder _corr_d = np.zeros_like(_d) _corr_d[0] = 0.5 * (corr_dp[3] + corr_dm[3]) # TE _corr_d[1] = 0.5 * (corr_dp[3] - corr_dm[3]) # TB - print("shape of _d:", np.zeros_like(_d).shape) - print("shape of corr_d:", np.zeros_like(_corr_d).shape) - print(corr_dp[3].shape, corr_dm[3].shape) else: # Treat everything as spin-0 wd = cl2corr(_d).T From 293ce3efe6d160c7ccb36cb02f5fe9c0dd958bb7 Mon Sep 17 00:00:00 2001 From: jaimerzp Date: Mon, 16 Feb 2026 11:30:56 +0000 Subject: [PATCH 4/5] prints --- heracles/unmixing.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/heracles/unmixing.py b/heracles/unmixing.py index 945e6e5..09434da 100644 --- a/heracles/unmixing.py +++ b/heracles/unmixing.py @@ -70,8 +70,6 @@ def _natural_unmixing(d, wm, fields, lmax=None): for key in d.keys(): a, b, i, j = key m_key = (masks[a], masks[b], i, j) - print("Processing key:", key, "with mask key:", m_key) - print(wm) _wm = get_cl(m_key, wm) _d = d[key] s1, s2 = _d.spin From fe7aea91cb30b0f65f1c58ce00a6cdee12aa3c7a Mon Sep 17 00:00:00 2001 From: jaimerzp Date: Mon, 16 Feb 2026 15:01:32 +0000 Subject: [PATCH 5/5] working --- heracles/unmixing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/heracles/unmixing.py b/heracles/unmixing.py index 09434da..40f6776 100644 --- a/heracles/unmixing.py +++ b/heracles/unmixing.py @@ -131,8 +131,8 @@ def _natural_unmixing(d, wm, fields, lmax=None): # Correct by alpha wplus = cl2corr(__dp.T).T wminus = cl2corr(__dm.T).T - corr_wplus = (wplus / _wm).real - corr_wminus = (wminus / _wm).imag + corr_wplus = wplus / _wm + corr_wminus = wminus / _wm # Transform back to Cl corr_dp = corr2cl(corr_wplus.T).T corr_dm = corr2cl(corr_wminus.T).T