pysanepic 0.2.1__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.
- pysanepic-0.2.1/.gitignore +4 -0
- pysanepic-0.2.1/CHANGELOG.md +49 -0
- pysanepic-0.2.1/LICENSE +674 -0
- pysanepic-0.2.1/PKG-INFO +105 -0
- pysanepic-0.2.1/README.md +72 -0
- pysanepic-0.2.1/pyproject.toml +42 -0
- pysanepic-0.2.1/src/pysanepic/__init__.py +4 -0
- pysanepic-0.2.1/src/pysanepic/gls.py +569 -0
- pysanepic-0.2.1/src/pysanepic/mapmaker.py +357 -0
- pysanepic-0.2.1/src/pysanepic/sanepic_io.py +118 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
Packaging for PyPI: metadata, source distribution without the C++ code, and
|
|
6
|
+
publication from GitHub releases. No code changes.
|
|
7
|
+
|
|
8
|
+
## 0.2.0 (2026-10-14)
|
|
9
|
+
|
|
10
|
+
First release: a standalone Python port of the SANEPIC GLS map-maker for
|
|
11
|
+
correlated (1/f) noise, used by litebird_sim (`make_sanepic_maps`).
|
|
12
|
+
|
|
13
|
+
### Map-making
|
|
14
|
+
|
|
15
|
+
- GLS solution of $(P^T N^{-1} P)\,m = P^T N^{-1} d$ with a preconditioned
|
|
16
|
+
conjugate gradient; $N^{-1}$ applied per chunk as a Fourier filter (ducc0
|
|
17
|
+
FFTs), I or I/Q/U maps, optional HWP angle.
|
|
18
|
+
- Block 3×3 preconditioner (Jacobi still available) and the Q/U
|
|
19
|
+
angle-coverage criterion `min_pol_rcond` (#2).
|
|
20
|
+
- Chunk padding, as SANEPIC's `-m`/`-q` options (#4).
|
|
21
|
+
- `GLSParameters` collects the solver options (#6).
|
|
22
|
+
|
|
23
|
+
### Interface
|
|
24
|
+
|
|
25
|
+
- `Pointing`: either angles (θ, φ, ψ in some coordinates), rotated and
|
|
26
|
+
pixelized by `make_maps` at the output nside and coordinates, or HEALPix
|
|
27
|
+
pixels already computed (RING or NESTED), used as they are; the arrays are
|
|
28
|
+
checked when the object is created. `DetectorData` takes a `Pointing` (#6,
|
|
29
|
+
#7, #12).
|
|
30
|
+
- Low-level `GLS` class: `apply_A` and `rhs` work on the pixels of the MPI
|
|
31
|
+
rank, `GLS.full` gathers a per-pixel array (#14).
|
|
32
|
+
|
|
33
|
+
### Parallelism and memory
|
|
34
|
+
|
|
35
|
+
- MPI: the PCG state is distributed by pixel; the $P^T$ maps are summed with a
|
|
36
|
+
reduce-scatter and the search direction is rebuilt with an allgather. Maps
|
|
37
|
+
up to nside 4096 with MPI (#14).
|
|
38
|
+
- Threads (`nthreads`, default `OMP_NUM_THREADS`) for the FFTs and the numba
|
|
39
|
+
kernels; $P^T$ shares one map among the threads, each owning a range of
|
|
40
|
+
pixels (#3, #5, #15).
|
|
41
|
+
- 8 bytes per sample besides the TODs: int32 pixel and 2a in float32;
|
|
42
|
+
γ cos 2a and γ sin 2a recomputed for each chunk (#6, #8, #11).
|
|
43
|
+
- Faster setup: counting sort by pixel and one irfft per weights array (#13);
|
|
44
|
+
cos and sin from a table, 10 times faster than libm without SVML (#16).
|
|
45
|
+
|
|
46
|
+
### Documentation
|
|
47
|
+
|
|
48
|
+
- Sphinx documentation on Read the Docs, with notebooks, MPI and memory
|
|
49
|
+
notes and benchmarks on G100 (#9, #17).
|