Source code for breads.grid_search

import multiprocessing as mp
import numpy as np
import itertools

from scipy.optimize import lsq_linear
from scipy.special import loggamma
from scipy.interpolate import InterpolatedUnivariateSpline
from astropy import constants as const

from breads.fit import fitfm

__all__ = ('grid_search', 'process_chunk')

try:
    import mkl
    mkl_exists = True
except ImportError:
    mkl_exists = False



[docs] def process_chunk(args): """ Process for grid_search() """ nonlin_paras_list, dataobj, fm_func, fm_paras, bounds,computeH0,scale_noise, marginalize_noise_scaling = args out_chunk = None # define up front for safety outarr_not_created = True for k, nonlin_paras in enumerate(zip(*nonlin_paras_list)): try: # if 1: log_prob,log_prob_H0,rchi2,linparas,linparas_err = fitfm(nonlin_paras,dataobj,fm_func,fm_paras,bounds=bounds, computeH0=computeH0,scale_noise=scale_noise, marginalize_noise_scaling=marginalize_noise_scaling) new_N_linpara = np.size(linparas) # if k == 0: # out_chunk = np.zeros((np.size(nonlin_paras_list[0]),1+1+1+2*N_linpara))+np.nan # out_chunk[k,0] = log_prob # out_chunk[k,1] = log_prob_H0 # out_chunk[k,2] = rchi2 # out_chunk[k,3:(N_linpara+3)] = linparas # out_chunk[k,(N_linpara+3):(2*N_linpara+3)] = linparas_err if outarr_not_created: out_chunk = np.zeros((np.size(nonlin_paras_list[0]),1+1+1+2*new_N_linpara))+np.nan outarr_not_created = False old_N_linpara = int((out_chunk.shape[-1] - 3) / 2) # print(old_N_linpara,new_N_linpara) if old_N_linpara >= new_N_linpara: # If the out array has more parameters than the current fit out_chunk[k,0] = log_prob out_chunk[k,1] = log_prob_H0 out_chunk[k,2] = rchi2 out_chunk[k,3:3 + new_N_linpara] = linparas out_chunk[k,3 + old_N_linpara:3 + old_N_linpara + new_N_linpara] = linparas_err elif old_N_linpara < new_N_linpara: # If we made the out array too small, then make it bigger new_out_shape = (np.size(nonlin_paras_list[0]),new_N_linpara-old_N_linpara) list2concatenate = [] list2concatenate.append(out_chunk[:,0:3 + old_N_linpara]) list2concatenate.append(np.zeros(new_out_shape)) list2concatenate.append(out_chunk[:,3 + old_N_linpara::]) list2concatenate.append(np.zeros(new_out_shape)) out_chunk = np.concatenate(list2concatenate, axis=1) out_chunk[k,0] = log_prob out_chunk[k,1] = log_prob_H0 out_chunk[k,2] = rchi2 out_chunk[k,3:3 + new_N_linpara] = linparas out_chunk[k,3 + new_N_linpara::] = linparas_err except Exception as e: print(f"[process_chunk] Error for nonlin_paras {nonlin_paras}: {e}") import traceback traceback.print_exc() if out_chunk is None: print("[process_chunk] All fits failed for this chunk.") return None return out_chunk