Skip to content

Commit 4d2b22c

Browse files
Cover memmap parts with tests
1 parent fbac0ea commit 4d2b22c

3 files changed

Lines changed: 49 additions & 36 deletions

File tree

hendrics/efsearch.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@ def transient_search(
517517
t0=None,
518518
t1=None,
519519
oversample=4,
520+
force_memmap=False,
520521
):
521522
"""Search for transient pulsations.
522523
@@ -604,8 +605,8 @@ def transient_search(
604605
)
605606
if all_results is None:
606607
results_shape = (len(allvalues), nave.size, results.shape[1])
607-
use_memmap = False
608-
if np.prod(results_shape) > 1e7:
608+
use_memmap = force_memmap
609+
if np.prod(results_shape) > 1e7 or force_memmap:
609610
import tempfile
610611

611612
tmp_results = tempfile.NamedTemporaryFile(delete=True).name + "_hen.npy"
@@ -902,6 +903,7 @@ def search_with_qffa(
902903
t0=None,
903904
t1=None,
904905
silent=False,
906+
force_memmap=False,
905907
):
906908
"""'Quite fast folding' algorithm.
907909
@@ -1008,7 +1010,7 @@ def local_show_progress(x):
10081010
fgrid_shape = fgrid.shape
10091011
all_fgrid_shape = (fgrid_shape[0] * len(allvalues), fgrid_shape[1])
10101012
log.info(f"Initializing result arrays of shape {all_fgrid_shape}")
1011-
if all_fgrid_shape[0] * all_fgrid_shape[1] > 1e7:
1013+
if all_fgrid_shape[0] * all_fgrid_shape[1] > 1e7 or force_memmap:
10121014
import tempfile
10131015

10141016
log.info(
@@ -1710,6 +1712,12 @@ def _common_parser(args=None):
17101712
help="The number of harmonics to use in the search "
17111713
"(the 'N' in Z^2_N; only relevant to Z search!)",
17121714
)
1715+
parser.add_argument(
1716+
"--force-memmap",
1717+
help="Force the use of memory-mapped files",
1718+
default=False,
1719+
action="store_true",
1720+
)
17131721

17141722
args = check_negative_numbers_in_args(args)
17151723
_add_default_args(parser, ["deorbit", "loglevel", "debug"])
@@ -1793,6 +1801,7 @@ def _common_main(args, func):
17931801
n=n,
17941802
nprof=args.n_transient_intervals,
17951803
oversample=oversample,
1804+
force_memmap=args.force_memmap,
17961805
)
17971806
plot_transient_search(results, out_fname + "_transient.gif")
17981807
if not args.fast and not args.ffa:
@@ -1840,6 +1849,7 @@ def _common_main(args, func):
18401849
npfact=args.npfact,
18411850
oversample=oversample,
18421851
search_fdot=search_fdot,
1852+
force_memmap=args.force_memmap,
18431853
)
18441854

18451855
ref_time = (events.time[-1] + events.time[0]) / 2

hendrics/phaseogram.py

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,37 +1039,36 @@ def main_phaseogram(args=None):
10391039

10401040
log.setLevel(args.loglevel)
10411041

1042-
with log.log_to_file("HENphaseogram.log"):
1043-
if args.periodogram is None and args.freq is None:
1044-
raise ValueError("One of -f or --periodogram arguments MUST be " "specified")
1045-
elif args.periodogram is not None:
1046-
periodogram = load_folding(args.periodogram)
1047-
frequency = float(periodogram.peaks[0])
1048-
fdot = 0
1049-
fddot = 0
1050-
else:
1051-
frequency = args.freq
1052-
fdot = args.fdot
1053-
fddot = args.fddot
1054-
1055-
ip = run_interactive_phaseogram(
1056-
args.file,
1057-
freq=frequency,
1058-
fdot=fdot,
1059-
fddot=fddot,
1060-
nbin=args.nbin,
1061-
nt=args.ntimes,
1062-
test=args.test or args.get_toa,
1063-
binary=args.binary,
1064-
binary_parameters=args.binary_parameters,
1065-
pepoch=args.pepoch,
1066-
norm=args.norm,
1067-
plot_only=args.plot_only,
1068-
deorbit_par=args.deorbit_par,
1069-
emin=args.emin,
1070-
emax=args.emax,
1071-
colormap=args.colormap,
1072-
)
1042+
if args.periodogram is None and args.freq is None:
1043+
raise ValueError("One of -f or --periodogram arguments MUST be " "specified")
1044+
elif args.periodogram is not None:
1045+
periodogram = load_folding(args.periodogram)
1046+
frequency = float(periodogram.peaks[0])
1047+
fdot = 0
1048+
fddot = 0
1049+
else:
1050+
frequency = args.freq
1051+
fdot = args.fdot
1052+
fddot = args.fddot
1053+
1054+
ip = run_interactive_phaseogram(
1055+
args.file,
1056+
freq=frequency,
1057+
fdot=fdot,
1058+
fddot=fddot,
1059+
nbin=args.nbin,
1060+
nt=args.ntimes,
1061+
test=args.test or args.get_toa,
1062+
binary=args.binary,
1063+
binary_parameters=args.binary_parameters,
1064+
pepoch=args.pepoch,
1065+
norm=args.norm,
1066+
plot_only=args.plot_only,
1067+
deorbit_par=args.deorbit_par,
1068+
emin=args.emin,
1069+
emax=args.emax,
1070+
colormap=args.colormap,
1071+
)
10731072
if args.get_toa:
10741073
ip.toa(1)
10751074

hendrics/tests/test_efsearch.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,8 @@ def test_zsearch_fdots(self):
371371
os.unlink(outfile)
372372

373373
@pytest.mark.skipif("not HAS_IMAGEIO")
374-
def test_transient(self):
374+
@pytest.mark.parametrize("options", [["--force-memmap"], []])
375+
def test_transient(self, options):
375376
evfile = self.dum
376377
main_zsearch(
377378
[
@@ -390,6 +391,7 @@ def test_transient(self):
390391
"--n-transient-intervals",
391392
"16",
392393
]
394+
+ options
393395
)
394396
outfile = "events_Z22_9.85-9.95Hz_transient.gif"
395397
assert os.path.exists(outfile)
@@ -425,7 +427,8 @@ def test_zsearch_print_upperlim(self):
425427
# assert "Upper limit for sinusoids:" in caplog.text
426428
os.unlink(outfile)
427429

428-
def test_zsearch_fast(self):
430+
@pytest.mark.parametrize("options", [["--force-memmap"], []])
431+
def test_zsearch_fast(self, options):
429432
evfile = self.dum
430433
main_zsearch(
431434
[
@@ -441,6 +444,7 @@ def test_zsearch_fast(self):
441444
"--oversample",
442445
"4",
443446
]
447+
+ options
444448
)
445449
outfile = "events_Z22_9.85-9.95Hz_fast" + HEN_FILE_EXTENSION
446450
assert os.path.exists(outfile)

0 commit comments

Comments
 (0)