def test_particle_profiles(): for nproc in [1, 2, 4, 8]: ds = fake_random_ds(32, nprocs=nproc, particles = 32**3) dd = ds.all_data() p1d = Profile1D(dd, "particle_position_x", 128, 0.0, 1.0, False, weight_field = None) p1d.add_fields(["particle_ones"]) assert_equal(p1d["particle_ones"].sum(), 32**3) p1d = create_profile(dd, ["particle_position_x"], ["particle_ones"], weight_field=None, n_bins=128, extrema=extrema_s, logs=logs_s) assert_equal(p1d["particle_ones"].sum(), 32**3) p1d = create_profile(dd, [("all", "particle_position_x")], [("all", "particle_ones")], weight_field=None, n_bins=128, extrema=extrema_t, logs=logs_t) assert_equal(p1d["particle_ones"].sum(), 32**3) p2d = Profile2D(dd, "particle_position_x", 128, 0.0, 1.0, False, "particle_position_y", 128, 0.0, 1.0, False, weight_field = None) p2d.add_fields(["particle_ones"]) assert_equal(p2d["particle_ones"].sum(), 32**3) p3d = Profile3D(dd, "particle_position_x", 128, 0.0, 1.0, False, "particle_position_y", 128, 0.0, 1.0, False, "particle_position_z", 128, 0.0, 1.0, False, weight_field = None) p3d.add_fields(["particle_ones"]) assert_equal(p3d["particle_ones"].sum(), 32**3)
def test_profiles(): ds = fake_random_ds(64, nprocs=8, fields=_fields, units=_units) nv = ds.domain_dimensions.prod() dd = ds.all_data() (rmi, rma), (tmi, tma), (dmi, dma) = dd.quantities["Extrema"]( ["density", "temperature", "dinosaurs"]) rt, tt, dt = dd.quantities["TotalQuantity"]( ["density", "temperature", "dinosaurs"]) e1, e2 = 0.9, 1.1 for nb in [8, 16, 32, 64]: for input_units in ['mks', 'cgs']: for ex in [rmi, rma, tmi, tma, dmi, dma]: getattr(ex, 'convert_to_%s' % input_units)() # We log all the fields or don't log 'em all. No need to do them # individually. for lf in [True, False]: direct_profile = Profile1D(dd, "density", nb, rmi * e1, rma * e2, lf, weight_field=None) direct_profile.add_fields(["ones", "temperature"]) indirect_profile_s = create_profile( dd, "density", ["ones", "temperature"], n_bins=nb, extrema={'density': (rmi * e1, rma * e2)}, logs={'density': lf}, weight_field=None) indirect_profile_t = create_profile( dd, ("gas", "density"), [("index", "ones"), ("gas", "temperature")], n_bins=nb, extrema={'density': (rmi * e1, rma * e2)}, logs={'density': lf}, weight_field=None) for p1d in [ direct_profile, indirect_profile_s, indirect_profile_t ]: assert_equal(p1d["index", "ones"].sum(), nv) assert_rel_equal(tt, p1d["gas", "temperature"].sum(), 7) p2d = Profile2D(dd, "density", nb, rmi * e1, rma * e2, lf, "temperature", nb, tmi * e1, tma * e2, lf, weight_field=None) p2d.add_fields(["ones", "temperature"]) assert_equal(p2d["ones"].sum(), nv) assert_rel_equal(tt, p2d["temperature"].sum(), 7) p3d = Profile3D(dd, "density", nb, rmi * e1, rma * e2, lf, "temperature", nb, tmi * e1, tma * e2, lf, "dinosaurs", nb, dmi * e1, dma * e2, lf, weight_field=None) p3d.add_fields(["ones", "temperature"]) assert_equal(p3d["ones"].sum(), nv) assert_rel_equal(tt, p3d["temperature"].sum(), 7) p1d = Profile1D(dd, "x", nb, 0.0, 1.0, False, weight_field=None) p1d.add_fields("ones") av = nv / nb assert_equal(p1d["ones"], np.ones(nb) * av) # We re-bin ones with a weight now p1d = Profile1D(dd, "x", nb, 0.0, 1.0, False, weight_field="temperature") p1d.add_fields(["ones"]) assert_equal(p1d["ones"], np.ones(nb)) # Verify we can access "ones" after adding a new field # See issue 988 p1d.add_fields(["density"]) assert_equal(p1d["ones"], np.ones(nb)) p2d = Profile2D(dd, "x", nb, 0.0, 1.0, False, "y", nb, 0.0, 1.0, False, weight_field=None) p2d.add_fields("ones") av = nv / nb**2 assert_equal(p2d["ones"], np.ones((nb, nb)) * av) # We re-bin ones with a weight now p2d = Profile2D(dd, "x", nb, 0.0, 1.0, False, "y", nb, 0.0, 1.0, False, weight_field="temperature") p2d.add_fields(["ones"]) assert_equal(p2d["ones"], np.ones((nb, nb))) p3d = Profile3D(dd, "x", nb, 0.0, 1.0, False, "y", nb, 0.0, 1.0, False, "z", nb, 0.0, 1.0, False, weight_field=None) p3d.add_fields("ones") av = nv / nb**3 assert_equal(p3d["ones"], np.ones((nb, nb, nb)) * av) # We re-bin ones with a weight now p3d = Profile3D(dd, "x", nb, 0.0, 1.0, False, "y", nb, 0.0, 1.0, False, "z", nb, 0.0, 1.0, False, weight_field="temperature") p3d.add_fields(["ones"]) assert_equal(p3d["ones"], np.ones((nb, nb, nb))) p2d = create_profile(dd, ('gas', 'density'), ('gas', 'temperature'), weight_field=('gas', 'cell_mass'), extrema={'density': (None, rma * e2)}) assert_equal(p2d.x_bins[0], rmi - np.spacing(rmi)) assert_equal(p2d.x_bins[-1], rma * e2) p2d = create_profile(dd, ('gas', 'density'), ('gas', 'temperature'), weight_field=('gas', 'cell_mass'), extrema={'density': (rmi * e2, None)}) assert_equal(p2d.x_bins[0], rmi * e2) assert_equal(p2d.x_bins[-1], rma + np.spacing(rma))
def test_profiles(): ds = fake_random_ds(64, nprocs=8, fields=_fields, units=_units) nv = ds.domain_dimensions.prod() dd = ds.all_data() (rmi, rma), (tmi, tma), (dmi, dma) = dd.quantities["Extrema"]( ["density", "temperature", "dinosaurs"]) rt, tt, dt = dd.quantities["TotalQuantity"]( ["density", "temperature", "dinosaurs"]) # First we look at the e1, e2 = 0.9, 1.1 for nb in [8, 16, 32, 64]: # We log all the fields or don't log 'em all. No need to do them # individually. for lf in [True, False]: direct_profile = Profile1D(dd, "density", nb, rmi * e1, rma * e2, lf, weight_field=None) direct_profile.add_fields(["ones", "temperature"]) indirect_profile_s = create_profile( dd, "density", ["ones", "temperature"], n_bins=nb, extrema={'density': (rmi * e1, rma * e2)}, logs={'density': lf}, weight_field=None) indirect_profile_t = create_profile( dd, ("gas", "density"), [("index", "ones"), ("gas", "temperature")], n_bins=nb, extrema={'density': (rmi * e1, rma * e2)}, logs={'density': lf}, weight_field=None) for p1d in [ direct_profile, indirect_profile_s, indirect_profile_t ]: yield assert_equal, p1d["index", "ones"].sum(), nv yield assert_rel_equal, tt, p1d["gas", "temperature"].sum(), 7 p2d = Profile2D(dd, "density", nb, rmi * e1, rma * e2, lf, "temperature", nb, tmi * e1, tma * e2, lf, weight_field=None) p2d.add_fields(["ones", "temperature"]) yield assert_equal, p2d["ones"].sum(), nv yield assert_rel_equal, tt, p2d["temperature"].sum(), 7 p3d = Profile3D(dd, "density", nb, rmi * e1, rma * e2, lf, "temperature", nb, tmi * e1, tma * e2, lf, "dinosaurs", nb, dmi * e1, dma * e2, lf, weight_field=None) p3d.add_fields(["ones", "temperature"]) yield assert_equal, p3d["ones"].sum(), nv yield assert_rel_equal, tt, p3d["temperature"].sum(), 7 p1d = Profile1D(dd, "x", nb, 0.0, 1.0, False, weight_field=None) p1d.add_fields("ones") av = nv / nb yield assert_equal, p1d["ones"], np.ones(nb) * av # We re-bin ones with a weight now p1d = Profile1D(dd, "x", nb, 0.0, 1.0, False, weight_field="temperature") p1d.add_fields(["ones"]) yield assert_equal, p1d["ones"], np.ones(nb) # Verify we can access "ones" after adding a new field # See issue 988 p1d.add_fields(["density"]) yield assert_equal, p1d["ones"], np.ones(nb) p2d = Profile2D(dd, "x", nb, 0.0, 1.0, False, "y", nb, 0.0, 1.0, False, weight_field=None) p2d.add_fields("ones") av = nv / nb**2 yield assert_equal, p2d["ones"], np.ones((nb, nb)) * av # We re-bin ones with a weight now p2d = Profile2D(dd, "x", nb, 0.0, 1.0, False, "y", nb, 0.0, 1.0, False, weight_field="temperature") p2d.add_fields(["ones"]) yield assert_equal, p2d["ones"], np.ones((nb, nb)) p3d = Profile3D(dd, "x", nb, 0.0, 1.0, False, "y", nb, 0.0, 1.0, False, "z", nb, 0.0, 1.0, False, weight_field=None) p3d.add_fields("ones") av = nv / nb**3 yield assert_equal, p3d["ones"], np.ones((nb, nb, nb)) * av # We re-bin ones with a weight now p3d = Profile3D(dd, "x", nb, 0.0, 1.0, False, "y", nb, 0.0, 1.0, False, "z", nb, 0.0, 1.0, False, weight_field="temperature") p3d.add_fields(["ones"]) yield assert_equal, p3d["ones"], np.ones((nb, nb, nb))