UltraNest icon indicating copy to clipboard operation
UltraNest copied to clipboard

ValueError: Buffer has wrong number of dimensions (expected 2, got 0)

Open pietroleonardi opened this issue 1 year ago • 1 comments

  • UltraNest version: 3.5.7
  • Python version: 3.9.15
  • Operating System: Linux Mint 20.1

Description

I am using UltraNest to try to reproduce a injection retrieval example from Pandora, a open-source exomoon transit detection algorithm. However I am trying to fit the synthetic data with the model produced by the code Gefera, a generic code for light curves of two bodies mutually transiting a star.

My scrypt is extremely similar to the one found here, I just changed the likelihood function in order to create the model using gefera and modified the parameters.

After a few seconds of running, this is the error that I get:

Traceback (most recent call last):-3917.31 [-53114.9584..-5841.1897] | it/evals=14/18559 eff=0.0797% N=1000  
  File "/home/pietro/Desktop/PhD/Work/gefera/ultranest+ge.py", line 233, in <module>
    result_planet_moon = sampler.run(min_num_live_points=1000)
  File "/home/pietro/anaconda3/envs/pandora_env/lib/python3.9/site-packages/ultranest/integrator.py", line 2311, in run
    for result in self.run_iter(
  File "/home/pietro/anaconda3/envs/pandora_env/lib/python3.9/site-packages/ultranest/integrator.py", line 2527, in run_iter
    region_fresh = self._update_region(
  File "/home/pietro/anaconda3/envs/pandora_env/lib/python3.9/site-packages/ultranest/integrator.py", line 1961, in _update_region
    _update_region_bootstrap(self.region, nbootstraps, minvol, self.comm if self.use_mpi else None, self.mpi_size)
  File "/home/pietro/anaconda3/envs/pandora_env/lib/python3.9/site-packages/ultranest/integrator.py", line 369, in _update_region_bootstrap
    r, f = region.compute_enlargement(
  File "ultranest/mlfriends.pyx", line 855, in ultranest.mlfriends.MLFriends.compute_enlargement
  File "ultranest/mlfriends.pyx", line 388, in ultranest.mlfriends.bounding_ellipsoid
  File "ultranest/mlfriends.pyx", line 303, in ultranest.mlfriends.make_eigvals_positive
ValueError: Buffer has wrong number of dimensions (expected 2, got 0)

What I Did

I start my scrypt by simulating my timing data, with the algorithm Pandora. Then I define the prior_transform function and the log_likelihood function:

def prior_transform(cube):
    p     = cube.copy()
    #Planet
    p[0]  = cube[0] * 10 + 360.25    # Period_planet [days]
    p[1]  = cube[1] * 300 + 1        # Semi major axis planet [R_star]
    p[2]  = cube[2] * 360            # Mean anomaly [0..360] [deg]
    p[3]  = cube[3] * 1 + 89         # Inclination planet [0..90] [deg]
    #Moon 
    p[4]  = cube[4] * 1 + 0.005      # Semi major axis moon [R_star]
    p[5]  = cube[5] * 1              # Time of pericenter passage tau_moon normalized by the period [0..1]
    p[6]  = cube[6] * 50             # Period moon [days]
    p[7]  = cube[7] * np.pi          # Longitude of the ascending node moon [rad]
    p[8]  = cube[8] * np.pi          # Inclination omoon [0...pi] [rad]
    p[9]  = cube[9] * 1              # Moon/Planet mass ratio [0..1]
    #Other parameters
    p[10] = cube[10] * 0.04 + 0.09   # Planet radius [R_star]
    p[11] = cube[11] * 0.06 + 0.01   # Moon radius [R_star]
    p[12] = cube[12]                 # LD q1 [0..1]
    p[13] = cube[13]                 # LD q2 [0..1]
    return p
def log_likelihood(p):
    # Convert q priors to u LDs (Kipping 2013)
    q1 = p[12]
    q2 = p[13]
    u1, u2 = ld_convert(q1, q2)
    ap=p[1]
    tp=p[0] * p[2] / 360
    ep=0
    pp = p[0]
    wp=90 * np.pi / 180
    ip=p[3] * np.pi / 180 
    am=p[4]
    tm=p[5] * p[6]
    em=0
    pm=p[6]
    om=p[7]
    wm=-90 * np.pi / 180
    im=p[8]
    mm=p[9]
    rp=p[10]
    rm=p[11]
    po = gf.orbits.PrimaryOrbit(ap, tp, ep, pp, wp, ip)
    mo = gf.orbits.SatelliteOrbit(am, tm, em, pm, om, wm, im, mm)
    sys = gf.systems.HierarchicalSystem(po, mo)
    flux= sys.lightcurve(time, u1, u2, rp, rm, grad=False) + 1
    sigma = 500e-6
    loglike = -0.5 * np.nansum(((flux - testdata) / sigma)**2)
    return loglike
parameters = [
    'Period_p', 
    'a_planet', 
    'Mean Anomaly', 
    'Inclination',
    'a_moon',
    'tau_moon',
    'Period_moon',
    'Omega_moon',
    'inclination_moon',
    'Mm/Mp',
    'Radius_p',
    'Radius_m',
    'q1',
    'q2'
    ]

These are the sampler and step.sampler:

sampler = ReactiveNestedSampler(
            parameters,
            log_likelihood, 
            prior_transform,
            wrapped_params=wrapped_params,
            log_dir="results_injection_retrieval_planet_moon"
            )

sampler.stepsampler = ultranest.stepsampler.RegionSliceSampler(
    nsteps=4000,
    adaptive_nsteps='move-distance',
    )

result_planet_moon = sampler.run(min_num_live_points=1000)

I am attaching the debug.log

pietroleonardi avatar Jan 31 '23 15:01 pietroleonardi