From 14abbc20181dfd0588f2406dc934a97bcdaa2aa4 Mon Sep 17 00:00:00 2001 From: "P.M. Sutter" Date: Wed, 31 Oct 2012 10:43:15 -0500 Subject: [PATCH] Slight re-organization of C/C++ tools. Significant modifications to support observational data. Python and pipeline scripts added --- .../libzobov/contour_pixels.cpp | 0 .../libzobov/contour_pixels.hpp | 0 .../libzobov/gslIntegrate.hpp | 0 .../libzobov/loadZobov.cpp | 0 .../libzobov/loadZobov.hpp | 2 + .../libzobov/particleInfo.cpp | 3 +- .../libzobov/particleInfo.hpp | 1 + .../libzobov/voidTree.hpp | 0 c_tools/mock/generateFromCatalog.cpp | 531 + .../mock/generateFromCatalog.ggo | 7 +- .../mock/generateMock.cpp | 238 +- .../mock/generateMock.ggo | 4 +- .../mock/generateTestMock.cpp | 0 c_tools/stacking/pruneVoids.cpp | 550 + c_tools/stacking/pruneVoids.ggo | 47 + pipeline/generateCatalog.py | 113 + pipeline/prepareCatalogs.py | 466 + pipeline/prepareGadgetCatalog.py | 213 + pipeline_tools/mock/generateFromCatalog.cpp | 365 - python_tools/PKG-INFO | 10 + python_tools/setup.py | 14 + python_tools/void_python_tools/__init__.py | 3 + python_tools/void_python_tools/__init__.pyc | Bin 0 -> 194 bytes .../void_python_tools/apTools/__init__.py | 2 + .../apTools/chi2/__init__.py | 3 + .../apTools/chi2/__init__.pyc | Bin 0 -> 228 bytes .../apTools/chi2/cosmologyTools.py | 94 + .../apTools/chi2/velocityProfileFitNative.c | 10841 ++++++++++++++++ .../apTools/profiles/__init__.py | 6 + .../apTools/profiles/getSurveyProps.py | 53 + .../void_python_tools/backend/__init__.py | 2 + .../void_python_tools/backend/backend.py | 1451 +++ .../void_python_tools/backend/classes.py | 169 + .../void_python_tools/backend/launchers.py | 1317 ++ .../void_python_tools/plotting/__init__.py | 2 + .../void_python_tools/plotting/plotDefs.py | 13 + .../void_python_tools/plotting/plotTools.py | 69 + zobov/jozov.c | 31 +- zobov/voz1b1.c | 12 +- zobov/vozinit.c | 36 +- zobov/voztie.c | 135 +- zobov/vozutil.c | 6 +- 42 files changed, 16252 insertions(+), 557 deletions(-) rename {pipeline_tools => c_tools}/libzobov/contour_pixels.cpp (100%) rename {pipeline_tools => c_tools}/libzobov/contour_pixels.hpp (100%) rename {pipeline_tools => c_tools}/libzobov/gslIntegrate.hpp (100%) rename {pipeline_tools => c_tools}/libzobov/loadZobov.cpp (100%) rename {pipeline_tools => c_tools}/libzobov/loadZobov.hpp (92%) rename {pipeline_tools => c_tools}/libzobov/particleInfo.cpp (96%) rename {pipeline_tools => c_tools}/libzobov/particleInfo.hpp (94%) rename {pipeline_tools => c_tools}/libzobov/voidTree.hpp (100%) create mode 100644 c_tools/mock/generateFromCatalog.cpp rename {pipeline_tools => c_tools}/mock/generateFromCatalog.ggo (72%) rename {pipeline_tools => c_tools}/mock/generateMock.cpp (73%) rename {pipeline_tools => c_tools}/mock/generateMock.ggo (89%) rename {pipeline_tools => c_tools}/mock/generateTestMock.cpp (100%) create mode 100644 c_tools/stacking/pruneVoids.cpp create mode 100644 c_tools/stacking/pruneVoids.ggo create mode 100755 pipeline/generateCatalog.py create mode 100755 pipeline/prepareCatalogs.py create mode 100755 pipeline/prepareGadgetCatalog.py delete mode 100644 pipeline_tools/mock/generateFromCatalog.cpp create mode 100644 python_tools/PKG-INFO create mode 100644 python_tools/setup.py create mode 100644 python_tools/void_python_tools/__init__.py create mode 100644 python_tools/void_python_tools/__init__.pyc create mode 100644 python_tools/void_python_tools/apTools/__init__.py create mode 100644 python_tools/void_python_tools/apTools/chi2/__init__.py create mode 100644 python_tools/void_python_tools/apTools/chi2/__init__.pyc create mode 100644 python_tools/void_python_tools/apTools/chi2/cosmologyTools.py create mode 100644 python_tools/void_python_tools/apTools/chi2/velocityProfileFitNative.c create mode 100644 python_tools/void_python_tools/apTools/profiles/__init__.py create mode 100644 python_tools/void_python_tools/apTools/profiles/getSurveyProps.py create mode 100644 python_tools/void_python_tools/backend/__init__.py create mode 100755 python_tools/void_python_tools/backend/backend.py create mode 100755 python_tools/void_python_tools/backend/classes.py create mode 100755 python_tools/void_python_tools/backend/launchers.py create mode 100644 python_tools/void_python_tools/plotting/__init__.py create mode 100644 python_tools/void_python_tools/plotting/plotDefs.py create mode 100644 python_tools/void_python_tools/plotting/plotTools.py diff --git a/pipeline_tools/libzobov/contour_pixels.cpp b/c_tools/libzobov/contour_pixels.cpp similarity index 100% rename from pipeline_tools/libzobov/contour_pixels.cpp rename to c_tools/libzobov/contour_pixels.cpp diff --git a/pipeline_tools/libzobov/contour_pixels.hpp b/c_tools/libzobov/contour_pixels.hpp similarity index 100% rename from pipeline_tools/libzobov/contour_pixels.hpp rename to c_tools/libzobov/contour_pixels.hpp diff --git a/pipeline_tools/libzobov/gslIntegrate.hpp b/c_tools/libzobov/gslIntegrate.hpp similarity index 100% rename from pipeline_tools/libzobov/gslIntegrate.hpp rename to c_tools/libzobov/gslIntegrate.hpp diff --git a/pipeline_tools/libzobov/loadZobov.cpp b/c_tools/libzobov/loadZobov.cpp similarity index 100% rename from pipeline_tools/libzobov/loadZobov.cpp rename to c_tools/libzobov/loadZobov.cpp diff --git a/pipeline_tools/libzobov/loadZobov.hpp b/c_tools/libzobov/loadZobov.hpp similarity index 92% rename from pipeline_tools/libzobov/loadZobov.hpp rename to c_tools/libzobov/loadZobov.hpp index fca01c8..8734971 100644 --- a/pipeline_tools/libzobov/loadZobov.hpp +++ b/c_tools/libzobov/loadZobov.hpp @@ -14,6 +14,8 @@ struct ZobovVoid float proba; int numParticles, coreParticle; float volume; + float barycenter[3]; + float nearestBoundary; }; struct ZobovRep diff --git a/pipeline_tools/libzobov/particleInfo.cpp b/c_tools/libzobov/particleInfo.cpp similarity index 96% rename from pipeline_tools/libzobov/particleInfo.cpp rename to c_tools/libzobov/particleInfo.cpp index e4e5454..9711db6 100644 --- a/pipeline_tools/libzobov/particleInfo.cpp +++ b/c_tools/libzobov/particleInfo.cpp @@ -12,7 +12,7 @@ bool loadParticleInfo(ParticleInfo& info, int numpart; NcFile f_info(extra_info.c_str()); - + if (!f_info.is_valid()) return false; @@ -22,6 +22,7 @@ bool loadParticleInfo(ParticleInfo& info, info.ranges[1][1] = f_info.get_att("range_y_max")->as_double(0); info.ranges[2][0] = f_info.get_att("range_z_min")->as_double(0); info.ranges[2][1] = f_info.get_att("range_z_max")->as_double(0); + info.mask_index = f_info.get_att("mask_index")->as_int(0); //PMS for (int i = 0; i < 3; i++) info.length[i] = info.ranges[i][1] - info.ranges[i][0]; diff --git a/pipeline_tools/libzobov/particleInfo.hpp b/c_tools/libzobov/particleInfo.hpp similarity index 94% rename from pipeline_tools/libzobov/particleInfo.hpp rename to c_tools/libzobov/particleInfo.hpp index f8397c1..f6e7a82 100644 --- a/pipeline_tools/libzobov/particleInfo.hpp +++ b/c_tools/libzobov/particleInfo.hpp @@ -15,6 +15,7 @@ struct ParticleInfo ParticleVector particles; float ranges[3][2]; float length[3]; + int mask_index; // PMS }; bool loadParticleInfo(ParticleInfo& info, diff --git a/pipeline_tools/libzobov/voidTree.hpp b/c_tools/libzobov/voidTree.hpp similarity index 100% rename from pipeline_tools/libzobov/voidTree.hpp rename to c_tools/libzobov/voidTree.hpp diff --git a/c_tools/mock/generateFromCatalog.cpp b/c_tools/mock/generateFromCatalog.cpp new file mode 100644 index 0000000..f7efcc7 --- /dev/null +++ b/c_tools/mock/generateFromCatalog.cpp @@ -0,0 +1,531 @@ +#include +#include +#include +#include +#include +#include +#include +#include "generateFromCatalog_conf.h" +#include "contour_pixels.hpp" +#include +#include +#include +#include + +#define LIGHT_SPEED 299792.458 + +using namespace std; +using boost::format; +using namespace CosmoTool; + +struct NYU_Data +{ + int index; + int sector; + int region; + double ra, dec; + double cz; + double fgotten; + double phi_z; +}; + +struct Position +{ + double xyz[3]; +}; + +struct ParticleData +{ + vector id_gal; + vector ra; + vector dec; + vector redshift; + int id_mask; + // PMS + int mask_index; + // END PMS + vector pos; + double box[3][2]; + double Lmax; +}; + +typedef vector NYU_VData; + +// this defines the expansion function that we will integrate +// Laveaux & Wandelt (2012) Eq. 24 +struct my_expan_params { double Om; double w0; double wa; }; +double expanFun (double z, void * p) { + struct my_expan_params * params = (struct my_expan_params *)p; + double Om = (params->Om); + double w0 = (params->w0); + double wa = (params->wa); + + //const double h0 = 1.0; + const double h0 = 0.71; + double ez; + + double wz = w0 + wa*z/(1+z); + + ez = Om*pow(1+z,3) + (1.-Om); + //ez = Om*pow(1+z,3) + pow(h0,2) * (1.-Om)*pow(1+z,3+3*wz); + + ez = sqrt(ez); + //ez = sqrt(ez)/h0; + + ez = 1./ez; + + return ez; +} + +void loadData(const string& fname, NYU_VData & data) +{ + ifstream f(fname.c_str()); + + while (!f.eof()) + { + NYU_Data d; + f >> d.index >> d.sector >> d.region >> d.ra >> d.dec >> d.cz >> d.fgotten >> d.phi_z; + data.push_back(d); + } +} + +void generateGalaxiesInCube(NYU_VData& data, ParticleData& output_data, + bool useLCDM) +{ + double d2r = M_PI/180; + + gsl_function expanF; + expanF.function = &expanFun; + struct my_expan_params expanParams; + double maxZ = 2.0, z, result, error, *dL, *redshifts; + int numZ = 1000, iZ; + size_t nEval; + + expanParams.Om = 0.27; + expanParams.w0 = -1.0; + expanParams.wa = 0.0; + expanF.params = &expanParams; + + dL = (double *) malloc(numZ * sizeof(double)); + redshifts = (double *) malloc(numZ * sizeof(double)); + + for (iZ = 0; iZ < numZ; iZ++) { + z = iZ * maxZ/numZ; + //gsl_integration_qng(&expanF, 0.0, z, 1.e-6, 1.e-6, &result, &error, &nEval); + dL[iZ] = result; + redshifts[iZ] = z; + } + + gsl_interp *interp = gsl_interp_alloc(gsl_interp_linear, numZ); + gsl_interp_init(interp, redshifts, dL, numZ); + gsl_interp_accel *acc = gsl_interp_accel_alloc(); + + output_data.pos.resize(data.size()); + output_data.id_gal.resize(data.size()); + output_data.ra.resize(data.size()); + output_data.dec.resize(data.size()); + output_data.redshift.resize(data.size()); + + for (int j = 0; j < 3; j++) + { + output_data.box[j][0] = -INFINITY; + output_data.box[j][1] = INFINITY; + } + + for (int i = 0; i < data.size(); i++) + { + double ra = data[i].ra*d2r, dec = data[i].dec*d2r; + Position& p = output_data.pos[i]; + + if (useLCDM) { + //double pos = gsl_interp_eval(interp, redshifts, dL, data[i].cz, acc); + gsl_integration_qng(&expanF, 1.e-6, data[i].cz/LIGHT_SPEED, + 1.e-6, + 1.e-6, &result, &error, &nEval); + double Dc = result*LIGHT_SPEED; + cout << "HELLO " << data[i].cz << " " << Dc << endl; + p.xyz[0] = Dc*cos(ra)*cos(dec); + p.xyz[1] = Dc*sin(ra)*cos(dec); + p.xyz[2] = Dc*sin(dec); + } else { + p.xyz[0] = data[i].cz*cos(ra)*cos(dec); + p.xyz[1] = data[i].cz*sin(ra)*cos(dec); + p.xyz[2] = data[i].cz*sin(dec); + } +//printf("CREATE %e %e\n", data[i].cz, sqrt(p.xyz[0]*p.xyz[0] + p.xyz[1]*p.xyz[1] + p.xyz[2]*p.xyz[2])); + output_data.id_gal[i] = data[i].index; + output_data.ra[i] = ra; + output_data.dec[i] = dec; + output_data.redshift[i] = data[i].cz; + + for (int j = 0; j < 3; j++) + { + if (p.xyz[j] > output_data.box[j][0]) + output_data.box[j][0] = p.xyz[j]; + if (p.xyz[j] < output_data.box[j][1]) + output_data.box[j][1] = p.xyz[j]; + } +//printf("INSERT GAL %d %e %e %e\n", output_data.id_gal[i], p.xyz[0], p.xyz[1], p.xyz[2]); + } + cout << format("Galaxy position generated: %d galaxies") % output_data.pos.size() << endl; + cout << format("box is %g < x < %g; %g < y < %g; %g < z < %g") + % (1e-2*output_data.box[0][1]) % (1e-2*output_data.box[0][0]) + % (1e-2*output_data.box[1][1]) % (1e-2*output_data.box[1][0]) + % (1e-2*output_data.box[2][1]) % (1e-2*output_data.box[2][0]) << endl; + + gsl_interp_free(interp); +} + +void generateSurfaceMask(generateFromCatalog_info& args , + Healpix_Map& mask, + vector& pixel_list, + vector& full_mask_list, + NYU_VData& data, + ParticleData& output_data) +{ + // Find the first free index + int idx = -1; + int insertion = 0; + double volume = pixel_list.size()*1.0/mask.Npix()*4*M_PI; + int numToInsert; + + for (int i = 0; i < output_data.id_gal.size(); i++) + { + if (idx < output_data.id_gal[i]) + idx = output_data.id_gal[i]+1; + } + + output_data.id_mask = idx; + +// PMS + output_data.mask_index = output_data.id_gal.size(); +// END PMS + cout << "Generate surface mask..." << endl; + + double Rmax = -1; + for (int j = 0; j < 3; j++) + { + Rmax = max(Rmax, max(output_data.box[j][0], -output_data.box[j][1])); + } + + output_data.Lmax = Rmax; + +// PMS - write a small text file with galaxy position + FILE *fp; + fp = fopen("galaxies.txt", "w"); + for (int i = 0; i < data.size(); i++) { + Position& p = output_data.pos[i]; + fprintf(fp, "%e %e %e\n", + (p.xyz[0]), + (p.xyz[1]), + (p.xyz[2])); + } + fclose(fp); +// END PMS + + cout << format("Rmax is %g, surface volume is %g") % (Rmax/100) % (volume/(4*M_PI)) << endl; + volume *= Rmax*Rmax*Rmax/3/1e6; + numToInsert = (int)floor(volume*args.density_fake_arg); + cout << format("3d volume to fill: %g (Mpc/h)^3") % volume << endl; + + cout << format("Will insert %d particles") % numToInsert << endl; + + fp = fopen("mock_galaxies.txt", "w"); + + double pct = 0; + for (int i = 0; i < numToInsert; i++) { + double new_pct = i*100./numToInsert; + + if (new_pct-pct > 5.) { + pct = new_pct; + cout << format(" .. %3.0f %%") % pct << endl; + } + + Position p; + bool stop_here; + + do { + int p0 = (int)floor(drand48()*pixel_list.size()); + vec3 v = mask.pix2vec(pixel_list[p0]); + double r = Rmax*pow(drand48(),1./3); + + p.xyz[0] = v.x * r; + p.xyz[1] = v.y * r; + p.xyz[2] = v.z * r; + + stop_here = true; + for (int j = 0; j < 3; j++) { + if (p.xyz[j] > output_data.box[j][0] || + p.xyz[j] < output_data.box[j][1]) + stop_here = false; + } + } + while (!stop_here); + +// PMS : write mock galaxies to a small file for plotting + fprintf(fp, "%e %e %e\n", + (p.xyz[0]), + (p.xyz[1]), + (p.xyz[2])); +// END PMS + output_data.pos.push_back(p); + output_data.id_gal.push_back(idx); + output_data.ra.push_back(-1); + output_data.dec.push_back(-1); + output_data.redshift.push_back(-1); +//printf("INSERT MOCK %d %e %e %e\n", idx, p.xyz[0], p.xyz[1], p.xyz[2]); + insertion++; + } + + fclose(fp); + + // PMS + // TEST - insert mock galaxies along box edge + fp = fopen("mock_boundary.txt", "w"); + double dx[3]; + dx[0] = output_data.box[0][1] - output_data.box[0][0]; + dx[1] = output_data.box[1][1] - output_data.box[1][0]; + dx[2] = output_data.box[2][1] - output_data.box[2][0]; + + int nPart = 100; +// TEST + for (int iDir = 0; iDir < 0; iDir++) { + for (int iFace = 0; iFace < 0; iFace++) { + //for (int iDir = 0; iDir < 3; iDir++) { + //for (int iFace = 0; iFace < 2; iFace++) { + + int iy = (iDir + 1) % 3; + int iz = (iDir + 2) % 3; + + for (int i = 0; i < nPart; i++) { + for (int j = 0; j < nPart; j++) { + Position p; + + p.xyz[iDir] = output_data.box[iDir][iFace]; + p.xyz[iy] = i * dx[iy]/nPart + output_data.box[iy][0]; + p.xyz[iz] = j * dx[iz]/nPart + output_data.box[iz][0]; + + output_data.pos.push_back(p); + output_data.id_gal.push_back(idx); + output_data.ra.push_back(-1); + output_data.dec.push_back(-1); + output_data.redshift.push_back(-1); + insertion++; + + fprintf(fp, "%e %e %e\n", + (p.xyz[0]), + (p.xyz[1]), + (p.xyz[2])); + } + } + } + } + fclose(fp); + // END PMS + + // PMS + // TEST - insert mock galaxies along spheres of survey redshift boundaries + fp = fopen("mock_sphere.txt", "w"); + + for (int p = 0; p < full_mask_list.size(); p++) { + vec3 v = mask.pix2vec(full_mask_list[p]); + + Position p; + double r = args.zMin_arg * LIGHT_SPEED; + if (r > 0.) { + p.xyz[0] = v.x * r; + p.xyz[1] = v.y * r; + p.xyz[2] = v.z * r; + output_data.pos.push_back(p); + output_data.id_gal.push_back(idx); + output_data.ra.push_back(-1); + output_data.dec.push_back(-1); + output_data.redshift.push_back(-1); + insertion++; + fprintf(fp, "%e %e %e\n", + (p.xyz[0]), + (p.xyz[1]), + (p.xyz[2])); + } + + r = args.zMax_arg * LIGHT_SPEED; + p.xyz[0] = v.x * r; + p.xyz[1] = v.y * r; + p.xyz[2] = v.z * r; + output_data.pos.push_back(p); + output_data.id_gal.push_back(idx); + output_data.ra.push_back(-1); + output_data.dec.push_back(-1); + output_data.redshift.push_back(-1); + insertion++; + fprintf(fp, "%e %e %e\n", + (p.xyz[0]), + (p.xyz[1]), + (p.xyz[2])); + } + fclose(fp); + // END PMS + + cout << format("Done. Inserted %d particles.") % insertion << endl; +} + +void saveData(ParticleData& pdata) +{ + NcFile f("particles.nc", NcFile::Replace); + + assert(f.is_valid()); + + NcDim *d = f.add_dim("space", 3); + NcDim *p = f.add_dim("Np", pdata.pos.size()); + NcVar *v = f.add_var("particles", ncDouble, d, p); + double *x = new double[pdata.pos.size()]; + + for (int j = 0; j < 3; j++) + { + + for (int i = 0; i < pdata.pos.size(); i++) + x[i] = pdata.pos[i].xyz[j]; + + v->put_rec(d, x, j); + } + + v = f.add_var("id_gal", ncInt, p); + v->put(&pdata.id_gal[0], pdata.id_gal.size()); + + delete[] x; + +} + +void saveForZobov(ParticleData& pdata, const string& fname, const string& paramname) +{ + UnformattedWrite f(fname); + static const char axis[] = { 'X', 'Y', 'Z' }; + double Lmax = pdata.Lmax; + + f.beginCheckpoint(); + f.writeInt32(pdata.pos.size()); + f.endCheckpoint(); + + + for (int j = 0; j < 3; j++) + { + cout << format("Writing %c components...") % axis[j] << endl; + f.beginCheckpoint(); + for (uint32_t i = 0; i < pdata.pos.size(); i++) + { + f.writeReal32((pdata.pos[i].xyz[j]+Lmax)/(2*Lmax)); + } + f.endCheckpoint(); + } + + NcFile fp(paramname.c_str(), NcFile::Replace); + + fp.add_att("range_x_min", -Lmax/100.); + fp.add_att("range_x_max", Lmax/100.); + fp.add_att("range_y_min", -Lmax/100.); + fp.add_att("range_y_max", Lmax/100.); + fp.add_att("range_z_min", -Lmax/100.); + fp.add_att("range_z_max", Lmax/100.); + fp.add_att("mask_index", pdata.mask_index); // PMS + + int nOutputPart = pdata.mask_index; + //int nOutputPart = pdata.pos.size(); + + NcDim *NumPart_dim = fp.add_dim("numpart_dim", nOutputPart); + NcVar *v = fp.add_var("particle_ids", ncInt, NumPart_dim); + NcVar *vra = fp.add_var("RA", ncInt, NumPart_dim); + NcVar *vdec = fp.add_var("DEC", ncInt, NumPart_dim); + NcVar *vredshift = fp.add_var("z", ncInt, NumPart_dim); + //NcVar *v2 = fp.add_var("expansion", ncDouble, NumPart_dim); + + //double *expansion_fac = new double[pdata.pos.size()]; + + //for (int i = 0; i < pdata.pos.size(); i++) + // expansion_fac[i] = 1.0; + + v->put(&pdata.id_gal[0], nOutputPart); + vra->put(&pdata.ra[0], nOutputPart); + vdec->put(&pdata.dec[0], nOutputPart); + vredshift->put(&pdata.redshift[0], nOutputPart); + //v2->put(expansion_fac, pdata.pos.size()); + + //delete[] expansion_fac; +} + +int main(int argc, char **argv) +{ + generateFromCatalog_info args_info; + generateFromCatalog_conf_params args_params; + + generateFromCatalog_conf_init(&args_info); + generateFromCatalog_conf_params_init(&args_params); + + args_params.check_required = 0; + if (generateFromCatalog_conf_ext (argc, argv, &args_info, &args_params)) + return 1; + + if (!args_info.configFile_given) + { + if (generateFromCatalog_conf_required (&args_info, GENERATEFROMCATALOG_CONF_PACKAGE)) + return 1; + } + else + { + args_params.check_required = 1; + args_params.initialize = 0; + if (generateFromCatalog_conf_config_file (args_info.configFile_arg, + &args_info, + &args_params)) + return 1; + } + + generateFromCatalog_conf_print_version(); + + cout << "Loading NYU data..." << endl; + vector data; + Healpix_Map o_mask; + vector pixel_list; + vector full_mask_list; + ParticleData output_data; + + loadData(args_info.catalog_arg, data); + + + cout << "Loading mask..." << endl; + read_Healpix_map_from_fits(args_info.mask_arg, o_mask); + + Healpix_Map mask; + + mask.SetNside(128, RING); + mask.Import(o_mask); + + computeContourPixels(mask,pixel_list); + + // We compute a cube holding all the galaxies + the survey surface mask + + cout << "Placing galaxies..." << endl; + generateGalaxiesInCube(data, output_data, args_info.useLCDM_flag); + generateSurfaceMask(args_info, mask, pixel_list, full_mask_list, + data, output_data); + + saveForZobov(output_data, args_info.output_arg, args_info.params_arg); + // saveData(output_data); + + // PMS + FILE *fp = fopen("mask_index.txt", "w"); + fprintf(fp, "%d", output_data.mask_index); + fclose(fp); + + fp = fopen("sample_info.txt", "w"); + fprintf(fp, "Lmax = %f\n", output_data.Lmax); + fprintf(fp, "mask_index = %d\n", output_data.mask_index); + fprintf(fp, "total_particles = %d\n", output_data.pos.size()); + fclose(fp); + + fp = fopen("total_particles.txt", "w"); + fprintf(fp, "%d", output_data.pos.size()); + fclose(fp); + printf("Done!\n"); + // END PMS + return 0; +} diff --git a/pipeline_tools/mock/generateFromCatalog.ggo b/c_tools/mock/generateFromCatalog.ggo similarity index 72% rename from pipeline_tools/mock/generateFromCatalog.ggo rename to c_tools/mock/generateFromCatalog.ggo index 2a41f4f..792fa49 100644 --- a/pipeline_tools/mock/generateFromCatalog.ggo +++ b/c_tools/mock/generateFromCatalog.ggo @@ -7,8 +7,11 @@ option "catalog" - "Input NYU-VAGC catalog" string required option "mask" - "Healpix mask of unobserved data (in Equatorial coordinates)" string required option "density_fake" - "Number density of boundary fake tracers (1 h^3/ Mpc^3)" double optional default="1" +option "zMin" - "Minimum redshift of data" double required + +option "zMax" - "Maximum redshift of data" double required + option "output" - "Filename of particle datafile" string required option "params" - "Output parameters of the datacube" string required -option "box_thickness" - "Thickness of the limiting mask" double optional default="1" -option "box_density" - "Fake Galaxy density on the box" double optional default="1" +option "useLCDM" - "Convert to real space using LCDM cosmology" flag off diff --git a/pipeline_tools/mock/generateMock.cpp b/c_tools/mock/generateMock.cpp similarity index 73% rename from pipeline_tools/mock/generateMock.cpp rename to c_tools/mock/generateMock.cpp index 45fd738..3316436 100644 --- a/pipeline_tools/mock/generateMock.cpp +++ b/c_tools/mock/generateMock.cpp @@ -18,65 +18,9 @@ using namespace CosmoTool; #define LIGHT_SPEED 299792.458 -static double gadgetUnit=1e-3; - -SimuData *doLoadRamses(const char *basename, int baseid, int velAxis, bool goRedshift) -{ - SimuData *d, *outd; - - d = loadRamsesSimu(basename, baseid, -1, true, 0); - outd = new SimuData; - - outd->NumPart = d->TotalNumPart; - outd->BoxSize = d->BoxSize; - outd->TotalNumPart = outd->NumPart; - outd->Hubble = d->Hubble; - outd->Omega_Lambda = d->Omega_Lambda; - outd->Omega_M = d->Omega_M; - outd->time = d->time; - - for (int k = 0; k < 3; k++) - outd->Pos[k] = new float[outd->NumPart]; - outd->Vel[2] = new float[outd->NumPart]; - delete d; - - int curCpu = 0; - cout << "loading cpu 0 " << endl; - while (d = loadRamsesSimu(basename, baseid, curCpu, true, NEED_POSITION|NEED_VELOCITY|NEED_GADGET_ID)) - { - for (int k = 0; k < 3; k++) - for (int i = 0; i < d->NumPart; i++) - { - assert(d->Id[i] >= 1); - assert(d->Id[i] <= outd->TotalNumPart); - outd->Pos[k][d->Id[i]-1] = d->Pos[k][i]; - outd->Vel[2][d->Id[i]-1] = d->Vel[velAxis][i]; - } - - if (goRedshift) - for (int i = 0; i < d->NumPart; i++) - outd->Pos[velAxis][d->Id[i]-1] += d->Vel[velAxis][i]/100.; - - delete d; - curCpu++; - cout << "loading cpu " << curCpu << endl; - } - - return outd; -} - SimuData *myLoadGadget(const char *fname, int id, int flags) { - SimuData *sim = loadGadgetMulti(fname, id, flags); - sim->BoxSize *= gadgetUnit*1000; - for (int j = 0; j < 3; j++) - { - if (sim->Pos[j] != 0) { - for (long i = 0; i < sim->NumPart; i++) - sim->Pos[j][i] *= gadgetUnit*1000; - } - } - return sim; + return loadGadgetMulti(fname, id, flags); } SimuData *doLoadSimulation(const char *gadgetname, int velAxis, bool goRedshift, SimuData *(*loadFunction)(const char *fname, int id, int flags)) @@ -150,6 +94,53 @@ SimuData *doLoadSimulation(const char *gadgetname, int velAxis, bool goRedshift, } +SimuData *doLoadMultidark(const char *multidarkname) +{ + SimuData *outd; + FILE *fp; + int actualNumPart; + + outd = new SimuData; + cout << "opening multidark file " << multidarkname << endl; + fp = fopen(multidarkname, "r"); + if (fp == NULL) { + cout << "could not open file!" << endl; + return 0; + } + fscanf(fp, "%f\n", &outd->BoxSize); + fscanf(fp, "%f\n", &outd->Omega_M); + fscanf(fp, "%f\n", &outd->Hubble); + fscanf(fp, "%f\n", &outd->time); + fscanf(fp, "%d\n", &outd->NumPart); + + outd->time = 1./(1.+outd->time); // convert to scale factor + outd->TotalNumPart = outd->NumPart; + outd->Omega_Lambda = 1.0 - outd->Omega_M; + + for (int k = 0; k < 3; k++) + outd->Pos[k] = new float[outd->NumPart]; + outd->Vel[2] = new float[outd->NumPart]; + + cout << "loading multidark particles" << endl; + actualNumPart = 0; + for (int i = 0; i < outd->NumPart; i++) { + fscanf(fp, "%f %f %f %f\n", &outd->Pos[0][i], &outd->Pos[1][i], + &outd->Pos[2][i], &outd->Vel[2][i]); + + if (outd->Pos[0][i] == -99 && outd->Pos[1][i] == -99 && + outd->Pos[2][i] == -99 && outd->Vel[2][i] == -99) { + break; + } else { + actualNumPart++; + } + } + fclose(fp); + + outd->NumPart = actualNumPart; + outd->TotalNumPart = actualNumPart; + return outd; +} + static double cubic(double a) { @@ -166,7 +157,7 @@ struct TotalExpansion } }; -Interpolate make_cosmological_redshift(double OM, double OL, double z0, double z1, int N = 1000) +Interpolate make_cosmological_redshift(double OM, double OL, double z0, double z1, int N = 5000) { TotalExpansion e_computer; double D_tilde, Q, Qprime; @@ -190,7 +181,7 @@ Interpolate make_cosmological_redshift(double OM, double OL, double z0, double z return buildFromVector(pairs); } -void metricTransform(SimuData *data, int axis, bool reshift, bool pecvel, double*& expfact, bool cosmo_flag) +void metricTransform(SimuData *data, int axis, bool reshift, bool pecvel, double*& expfact) { int x0, x1, x2; @@ -208,25 +199,21 @@ void metricTransform(SimuData *data, int axis, bool reshift, bool pecvel, double abort(); } - double z0 = 1/data->time - 1; - Interpolate z_vs_D = make_cosmological_redshift(data->Omega_M, data->Omega_Lambda, 0., z0+2*data->BoxSize*100/LIGHT_SPEED); // Redshift 2*z0 should be sufficient ? + Interpolate z_vs_D = make_cosmological_redshift(data->Omega_M, data->Omega_Lambda, 0., z0+8*data->BoxSize*100/LIGHT_SPEED); // Redshift 2*z0 should be sufficient ? double z_base = reshift ? z0 : 0; TotalExpansion e_computer; double baseComovingDistance; - float vmax = 0; expfact = new double[data->NumPart]; - cout << "Using base redshift z=" << z0 << endl; + cout << "Using base redshift z=" << z0 << " " << z0+8*data->BoxSize*100/LIGHT_SPEED << endl; e_computer.Omega_M = data->Omega_M; e_computer.Omega_L = data->Omega_Lambda; baseComovingDistance = LIGHT_SPEED/100.* gslIntegrate(e_computer, 0, z0, 1e-3); cout << "Comoving distance = " << baseComovingDistance << " Mpc/h" << endl; - cout << "Add peculiar velocities ? -> " << (pecvel ? " yes " : " no ") << endl; - for (uint32_t i = 0; i < data->NumPart; i++) { float& x = data->Pos[x0][i]; @@ -234,7 +221,7 @@ void metricTransform(SimuData *data, int axis, bool reshift, bool pecvel, double float& z = data->Pos[x2][i]; float& v = data->Vel[2][i]; float z_old = z; - + double reduced_red = (z + baseComovingDistance)*100./LIGHT_SPEED; try { @@ -242,17 +229,13 @@ void metricTransform(SimuData *data, int axis, bool reshift, bool pecvel, double // Distorted redshift if (reduced_red == 0) z = 0; - else if (cosmo_flag) + else { z = (z_vs_D.compute(reduced_red)-z_base)*LIGHT_SPEED/100.; - else - z = reduced_red*LIGHT_SPEED/100.0; - + } expfact[i] = z / z_old; // Add peculiar velocity - if (pecvel) { - vmax = std::max(v,vmax); + if (pecvel) z += v/100; - } } catch(const InvalidRangeException& e) { cout << "Trying to interpolate out of the tabulated range." << endl; @@ -260,7 +243,7 @@ void metricTransform(SimuData *data, int axis, bool reshift, bool pecvel, double abort(); } } - cout << "vmax=" << vmax << endl; + } void generateOutput(SimuData *data, int axis, @@ -315,63 +298,6 @@ void generateOutput(SimuData *data, int axis, f.endCheckpoint(); } -void makeBoxFromParameter(SimuData *simu, double *efac, SimuData* &boxed, generateMock_info& args_info) -{ - NcFile f(args_info.inputParameter_arg); - NcVar *v; - int *particle_id; - double *expansion_fac; - - boxed = new SimuData; - boxed->Hubble = simu->Hubble; - boxed->Omega_M = simu->Omega_M; - boxed->Omega_Lambda = simu->Omega_Lambda; - boxed->time = simu->time; - boxed->BoxSize = simu->BoxSize; - - NcVar *v_id = f.get_var("particle_ids"); - long *edges1; - double ranges[3][2]; - double mul[3]; - - edges1 = v_id->edges(); - assert(v_id->num_dims()==1); - - boxed->NumPart = edges1[0]; - delete[] edges1; - - particle_id = new int[boxed->NumPart]; - - v_id->get(particle_id, boxed->NumPart); - - ranges[0][0] = f.get_att("range_x_min")->as_double(0); - ranges[0][1] = f.get_att("range_x_max")->as_double(0); - ranges[1][0] = f.get_att("range_y_min")->as_double(0); - ranges[1][1] = f.get_att("range_y_max")->as_double(0); - ranges[2][0] = f.get_att("range_z_min")->as_double(0); - ranges[2][1] = f.get_att("range_z_max")->as_double(0); - - for (int j = 0; j < 3; j++) - { - boxed->Pos[j] = new float[boxed->NumPart]; - boxed->Vel[j] = 0; - mul[j] = 1.0/(ranges[j][1] - ranges[j][0]); - } - - uint32_t k = 0; - for (uint32_t i = 0; i < boxed->NumPart; i++) - { - int id = particle_id[i]; - - for (int j = 0; j < 3; j++) - { - boxed->Pos[j][i] = (simu->Pos[j][id]-ranges[j][0])*mul[j]; - } - } - - delete[] particle_id; -} - void makeBox(SimuData *simu, double *efac, SimuData *&boxed, generateMock_info& args_info) { float subsample = args_info.subsample_given ? args_info.subsample_arg : 1.0; @@ -409,15 +335,20 @@ void makeBox(SimuData *simu, double *efac, SimuData *&boxed, generateMock_info& minmax[0][j] = min(simu->Pos[j][i], minmax[0][j]); minmax[1][j] = max(simu->Pos[j][i], minmax[1][j]); } - random_acceptance[i] = acceptance && (drand48() <= subsample); if (random_acceptance[i]) goodParticles++; } + cout << "Subsample fraction: " << subsample << endl; + cout << "Min range = " << ranges[0][0] << " " << ranges[1][0] << " " << ranges[2][0] << endl; + cout << "Max range = " << ranges[0][1] << " " << ranges[1][1] << " " << ranges[2][1] << endl; + cout << "Min position = " << minmax[0][0] << " " << minmax[0][1] << " " << minmax[0][2] << endl; cout << "Max position = " << minmax[1][0] << " " << minmax[1][1] << " " << minmax[1][2] << endl; - + + cout << "Number of accepted particles: " << goodParticles << endl; + for (int j = 0; j < 3; j++) { boxed->Pos[j] = new float[goodParticles]; @@ -425,6 +356,7 @@ void makeBox(SimuData *simu, double *efac, SimuData *&boxed, generateMock_info& mul[j] = 1.0/(ranges[j][1] - ranges[j][0]); } + cout << "Rescaling factors = " << mul[0] << " " << mul[1] << " " << mul[2] << endl; boxed->NumPart = goodParticles; particle_id = new int[goodParticles]; @@ -501,14 +433,13 @@ int main(int argc, char **argv) generateMock_conf_print_version(); - gadgetUnit=args_info.gadgetUnit_arg; - if (args_info.ramsesBase_given || args_info.ramsesId_given) { - if (args_info.ramsesBase_given && args_info.ramsesId_given) - simu = doLoadRamses(args_info.ramsesBase_arg, - args_info.ramsesId_arg, - args_info.axis_arg, false); + if (args_info.ramsesBase_given && args_info.ramsesId_given) { + //simu = doLoadRamses(args_info.ramsesBase_arg, + // args_info.ramsesId_arg, + // args_info.axis_arg, false); + } else { cerr << "Both ramsesBase and ramsesId are required to be able to load snapshots" << endl; @@ -521,7 +452,7 @@ int main(int argc, char **argv) return 1; } } - else if (args_info.gadget_given || args_info.flash_given) + else if (args_info.gadget_given || args_info.flash_given || args_info.multidark_given) { if (args_info.gadget_given && args_info.flash_given) { @@ -529,10 +460,17 @@ int main(int argc, char **argv) return 1; } - if (args_info.gadget_given) + if (args_info.multidark_given) { + simu = doLoadMultidark(args_info.multidark_arg); + } + + if (args_info.gadget_given) { simu = doLoadSimulation(args_info.gadget_arg, args_info.axis_arg, false, myLoadGadget); - else + } + if (args_info.flash_given) { simu = doLoadSimulation(args_info.flash_arg, args_info.axis_arg, false, loadFlashMulti); + } + if (simu == 0) { cerr << "Error while loading " << endl; @@ -551,18 +489,20 @@ int main(int argc, char **argv) double *expfact; - metricTransform(simu, args_info.axis_arg, args_info.preReShift_flag, args_info.peculiarVelocities_flag, expfact, args_info.cosmo_flag); + if (args_info.cosmo_flag){ + metricTransform(simu, args_info.axis_arg, args_info.preReShift_flag, args_info.peculiarVelocities_flag, expfact); + } else { + expfact = new double[simu->NumPart]; + for (int j = 0; j < simu->NumPart; j++) expfact[j] = 1.0; + } - if (args_info.inputParameter_given) - makeBoxFromParameter(simu, expfact, simuOut, args_info); - else - makeBox(simu, expfact, simuOut, args_info); - + makeBox(simu, expfact, simuOut, args_info); delete simu; generateOutput(simuOut, args_info.axis_arg, args_info.output_arg); delete simuOut; - + + printf("Done!\n"); return 0; } diff --git a/pipeline_tools/mock/generateMock.ggo b/c_tools/mock/generateMock.ggo similarity index 89% rename from pipeline_tools/mock/generateMock.ggo rename to c_tools/mock/generateMock.ggo index c048e20..7148f48 100644 --- a/pipeline_tools/mock/generateMock.ggo +++ b/c_tools/mock/generateMock.ggo @@ -9,6 +9,7 @@ option "ramsesId" - "Ramses snapshot id" int optional option "gadget" - "Base name of gadget snapshot (without parallel writing extension)" string optional option "flash" - "Base name for FLASH snapshot" string optional +option "multidark" - "Base name for multidark snapshot" string optional option "axis" - "Redshift axis (X=0, Y=1, Z=2)" int optional default="2" @@ -28,6 +29,3 @@ option "peculiarVelocities" - "Added peculiar velocities distortion" flag off option "cosmo" - "Apply cosmological redshift" flag on option "subsample" - "Subsample the input simulation by the specified amount" double optional - -option "inputParameter" - "Input geometry (optional, warning!)" string optional -option "gadgetUnit" - "Unit of length in gadget file in Mpc/h" double optional default="0.001" diff --git a/pipeline_tools/mock/generateTestMock.cpp b/c_tools/mock/generateTestMock.cpp similarity index 100% rename from pipeline_tools/mock/generateTestMock.cpp rename to c_tools/mock/generateTestMock.cpp diff --git a/c_tools/stacking/pruneVoids.cpp b/c_tools/stacking/pruneVoids.cpp new file mode 100644 index 0000000..4580e60 --- /dev/null +++ b/c_tools/stacking/pruneVoids.cpp @@ -0,0 +1,550 @@ +// Reads in the void catalog and removes any void that could potentially +// be affected by a mock particle. It does this by computing the longest +// particle distance within each void and comparing it to the distance +// of the nearest mock particle. If the void could potentially by rotated +// to include this particle, we throw out the void. + +// This is placed here instead of using the edgeAvoidance option in +// stackVoidsZero so that we can optionally filter the entire +// catalog at once before the stacking phase. This is useful +// for producing a "clean" void catalog for other purposes. + +#include "gsl/gsl_math.h" +#include "string.h" +#include "ctype.h" +#include "stdlib.h" +#include +#include +#include +#include "pruneVoids_conf.h" + +#define LIGHT_SPEED 299792.458 +#define MPC2Z 100./LIGHT_SPEED +#define Z2MPC LIGHT_SPEED/100. + +typedef struct partStruct { + float x, y, z, vol; +} PART; + +typedef struct zoneStruct { + int numPart; + int *partIDs; +} ZONE2PART; + +typedef struct voidZoneStruct { + int numZones; + int *zoneIDs; +} VOID2ZONE; + +typedef struct voidStruct { + float vol, coreDens, zoneVol, densCon, voidProb, radius; + int voidID, numPart, numZones, coreParticle, zoneNumPart; + float maxRadius, nearestMock, centralDen, redshift; + float center[3], barycenter[3]; + int accepted; +} VOID; + +int main(int argc, char **argv) { + + // initialize arguments + pruneVoids_info args_info; + pruneVoids_conf_params args_params; + + pruneVoids_conf_init(&args_info); + pruneVoids_conf_params_init(&args_params); + + args_params.check_required = 0; + if (pruneVoids_conf_ext (argc, argv, &args_info, &args_params)) + return 1; + + if (!args_info.configFile_given) { + if (pruneVoids_conf_required (&args_info, + PRUNEVOIDS_CONF_PACKAGE)) + return 1; + } else { + args_params.check_required = 1; + args_params.initialize = 0; + if (pruneVoids_conf_config_file (args_info.configFile_arg, + &args_info, + &args_params)) + return 1; + } + + int i, p, p2, numPartTot, numZonesTot, dummy, iVoid, iZ; + int numVoids, mockIndex, numKept; + double tolerance; + FILE *fp, *fpBarycenter, *fpDistances, *fpSkyPositions, *fpInfo; + PART *part, *voidPart; + ZONE2PART *zones2Parts; + VOID2ZONE *void2Zones; + VOID *voids; + float *temp, junk, voidVol; + int junkInt, voidID, numPart, numZones, zoneID, partID, maxNumPart; + int coreParticle, zoneNumPart; + float coreDens, zoneVol, densCon, voidProb, dist[3], dist2, minDist, maxDist; + float centralRad, centralDen; + double nearestEdge, redshift; + char line[500], junkStr[10]; + int mask_index; + double ranges[2][3], boxLen[3], mul; + double volNorm, radius; + int clock1, clock2; + + numVoids = args_info.numVoids_arg; + mockIndex = args_info.mockIndex_arg; + tolerance = args_info.tolerance_arg; + + clock1 = clock(); + printf("Pruning parameters: %f %f %f\n", args_info.zMin_arg, + args_info.zMax_arg, + args_info.rMin_arg); + + // load box size + printf("\n Getting info...\n"); + NcFile f_info(args_info.extraInfo_arg); + ranges[0][0] = f_info.get_att("range_x_min")->as_double(0); + ranges[0][1] = f_info.get_att("range_x_max")->as_double(0); + ranges[1][0] = f_info.get_att("range_y_min")->as_double(0); + ranges[1][1] = f_info.get_att("range_y_max")->as_double(0); + ranges[2][0] = f_info.get_att("range_z_min")->as_double(0); + ranges[2][1] = f_info.get_att("range_z_max")->as_double(0); + + boxLen[0] = ranges[0][1] - ranges[0][0]; + boxLen[1] = ranges[1][1] - ranges[1][0]; + boxLen[2] = ranges[2][1] - ranges[2][0]; + + // read in all particle positions + printf("\n Loading particles...\n"); + fp = fopen(args_info.partFile_arg, "r"); + fread(&dummy, 1, 4, fp); + fread(&numPartTot, 1, 4, fp); + fread(&dummy, 1, 4, fp); + + part = (PART *) malloc(numPartTot * sizeof(PART)); + temp = (float *) malloc(numPartTot * sizeof(float)); + + volNorm = numPartTot/(boxLen[0]*boxLen[1]*boxLen[2]); + printf("VOL NORM = %f\n", volNorm); + + printf("CENTRAL DEN = %f\n", args_info.maxCentralDen_arg); + + fread(&dummy, 1, 4, fp); + fread(temp, numPartTot, 4, fp); + mul = ranges[0][1] - ranges[0][0]; + for (p = 0; p < numPartTot; p++) + part[p].x = mul*temp[p]; + fread(&dummy, 1, 4, fp); + fread(&dummy, 1, 4, fp); + fread(temp, numPartTot, 4, fp); + mul = ranges[1][1] - ranges[1][0]; + for (p = 0; p < numPartTot; p++) + part[p].y = mul*temp[p]; + fread(&dummy, 1, 4, fp); + fread(&dummy, 1, 4, fp); + fread(temp, numPartTot, 4, fp); + mul = ranges[2][1] - ranges[2][0]; + for (p = 0; p < numPartTot; p++) + part[p].z = mul*temp[p]; + + if (!args_info.isObservation_flag) { + for (p = 0; p < numPartTot; p++) { + part[p].x += ranges[0][0]; + part[p].y += ranges[1][0]; + part[p].z += ranges[2][0]; + } + } + fclose(fp); + + printf(" Read %d particles...\n", numPartTot); + + if (mockIndex == -1) mockIndex = numPartTot; + + // read in desired voids + printf(" Loading voids...\n"); + fp = fopen(args_info.voidDesc_arg ,"r"); + fgets(line, sizeof(line), fp); + sscanf(line, "%d %s %d %s", &junkInt, junkStr, &junkInt, junkStr); + fgets(line, sizeof(line), fp); + + voids = (VOID *) malloc(numVoids * sizeof(VOID)); + i = 0; + while (fgets(line, sizeof(line), fp) != NULL) { + sscanf(line, "%d %d %d %f %f %d %d %f %d %f %f\n", &iVoid, &voidID, + &coreParticle, &coreDens, &zoneVol, &zoneNumPart, &numZones, + &voidVol, &numPart, &densCon, &voidProb); + + i++; + voids[i-1].coreParticle = coreParticle; + voids[i-1].zoneNumPart = zoneNumPart; + voids[i-1].coreDens = coreDens; + voids[i-1].zoneVol = zoneVol; + voids[i-1].voidID = voidID; + voids[i-1].vol = voidVol; + voids[i-1].numPart = numPart; + voids[i-1].numZones = numZones; + voids[i-1].densCon = densCon; + voids[i-1].voidProb = voidProb; + + voids[i-1].radius = pow(voidVol/volNorm*3./4./M_PI, 1./3.); + voids[i-1].accepted = 1; + } + fclose(fp); + + // load up the zone membership for each void + printf(" Loading void-zone membership info...\n"); + fp = fopen(args_info.void2Zone_arg, "r"); + fread(&numZonesTot, 1, 4, fp); + void2Zones = (VOID2ZONE *) malloc(numZonesTot * sizeof(VOID2ZONE)); + + for (iZ = 0; iZ < numZonesTot; iZ++) { + fread(&numZones, 1, 4, fp); + + void2Zones[iZ].numZones = numZones; + void2Zones[iZ].zoneIDs = (int *) malloc(numZones * sizeof(int)); + + for (p = 0; p < numZones; p++) { + fread(&void2Zones[iZ].zoneIDs[p], 1, 4, fp); + } + } + fclose(fp); + + // now the particles-zone + printf(" Loading particle-zone membership info...\n"); + fp = fopen(args_info.zone2Part_arg, "r"); + fread(&dummy, 1, 4, fp); + fread(&numZonesTot, 1, 4, fp); + + zones2Parts = (ZONE2PART *) malloc(numZonesTot * sizeof(ZONE2PART)); + for (iZ = 0; iZ < numZonesTot; iZ++) { + fread(&numPart, 1, 4, fp); + + zones2Parts[iZ].numPart = numPart; + zones2Parts[iZ].partIDs = (int *) malloc(numPart * sizeof(int)); + + for (p = 0; p < numPart; p++) { + fread(&zones2Parts[iZ].partIDs[p], 1, 4, fp); + } + } + + // and finally volumes + printf(" Loading particle volumes...\n"); + fp = fopen(args_info.partVol_arg, "r"); + fread(&mask_index, 1, 4, fp); + if (mask_index != mockIndex) { + printf("NON-MATCHING MOCK INDICES!? %d %d\n", mask_index, mockIndex); + exit(-1); + } + for (p = 0; p < mask_index; p++) { + fread(&temp[0], 1, 4, fp); + part[p].vol = temp[0]; + } + fclose(fp); + free(temp); + + // check boundaries + printf(" Computing void properties...\n"); + + maxNumPart = 0; + for (iVoid = 0; iVoid < numVoids; iVoid++) { + if (voids[iVoid].numPart > maxNumPart) maxNumPart = voids[iVoid].numPart; + } + + voidPart = (PART *) malloc(maxNumPart * sizeof(PART)); + + for (iVoid = 0; iVoid < numVoids; iVoid++) { + + voidID = voids[iVoid].voidID; + //printf(" DOING %d (of %d) %d %d\n", iVoid, numVoids, voidID, + // voids[iVoid].numPart); + + voids[iVoid].center[0] = part[voids[iVoid].coreParticle].x; + voids[iVoid].center[1] = part[voids[iVoid].coreParticle].y; + voids[iVoid].center[2] = part[voids[iVoid].coreParticle].z; + + // first load up particles into a buffer + i = 0; + for (iZ = 0; iZ < void2Zones[voidID].numZones; iZ++) { + zoneID = void2Zones[voidID].zoneIDs[iZ]; + + for (p = 0; p < zones2Parts[zoneID].numPart; p++) { + partID = zones2Parts[zoneID].partIDs[p]; + + if (partID > mask_index || + (part[partID].vol < 1.e-27 && part[partID].vol > 0.)) { + printf("BAD PART!? %d %d %e", partID, mask_index, part[partID].vol); + exit(-1); + } + + voidPart[i].x = part[partID].x; + voidPart[i].y = part[partID].y; + voidPart[i].z = part[partID].z; + voidPart[i].vol = part[partID].vol; + + i++; + } + } + + // compute barycenters + double weight = 0.; + voids[iVoid].barycenter[0] = 0.; + voids[iVoid].barycenter[1] = 0.; + voids[iVoid].barycenter[2] = 0.; + +// TODO handle periodic boundaries? + for (p = 0; p < voids[iVoid].numPart; p++) { + dist[0] = voidPart[p].x - voids[iVoid].center[0]; + dist[1] = voidPart[p].y - voids[iVoid].center[1]; + dist[2] = voidPart[p].z - voids[iVoid].center[2]; + + //if (!args_info.isObservation_flag) { + // dist[0] = fmin(dist[0], abs(boxLen[0]-dist[0])); + // dist[1] = fmin(dist[1], abs(boxLen[1]-dist[1])); + // dist[2] = fmin(dist[2], abs(boxLen[2]-dist[2])); + //} + + voids[iVoid].barycenter[0] += voidPart[p].vol*(dist[0]); + voids[iVoid].barycenter[1] += voidPart[p].vol*(dist[1]); + voids[iVoid].barycenter[2] += voidPart[p].vol*(dist[2]); + weight += voidPart[p].vol; + } + voids[iVoid].barycenter[0] /= weight; + voids[iVoid].barycenter[1] /= weight; + voids[iVoid].barycenter[2] /= weight; + voids[iVoid].barycenter[0] += voids[iVoid].center[0]; + voids[iVoid].barycenter[1] += voids[iVoid].center[1]; + voids[iVoid].barycenter[2] += voids[iVoid].center[2]; + + // compute central density + centralRad = voids[iVoid].radius/args_info.centralRadFrac_arg; + centralRad *= centralRad; + centralDen = 0.; + for (p = 0; p < voids[iVoid].numPart; p++) { + dist[0] = voidPart[p].x - voids[iVoid].barycenter[0]; + dist[1] = voidPart[p].y - voids[iVoid].barycenter[1]; + dist[2] = voidPart[p].z - voids[iVoid].barycenter[2]; + + //if (!args_info.isObservation_flag) { + // dist[0] = fmin(dist[0], abs(boxLen[0]-dist[0])); + // dist[1] = fmin(dist[1], abs(boxLen[1]-dist[1])); + // dist[2] = fmin(dist[2], abs(boxLen[2]-dist[2])); + //} + + dist2 = pow(dist[0],2) + pow(dist[1],2) + pow(dist[2],2); + if (dist2 < centralRad) centralDen += 1; + } + voids[iVoid].centralDen = centralDen / (4./3. * M_PI * pow(centralRad, 3./2.)); + + // compute maximum extent + if (args_info.isObservation_flag) { + maxDist = 0.; + for (p = 0; p < voids[iVoid].numPart; p++) { + for (p2 = p; p2 < voids[iVoid].numPart; p2++) { + + dist[0] = voidPart[p].x - voidPart[p2].x; + dist[1] = voidPart[p].y - voidPart[p2].y; + dist[2] = voidPart[p].z - voidPart[p2].z; + + dist2 = pow(dist[0],2) + pow(dist[1],2) + pow(dist[2],2); + if (dist2 > maxDist) maxDist = dist2; + } + } + voids[iVoid].maxRadius = sqrt(maxDist)/2.; + } else { + maxDist = 0.; + for (p = 0; p < voids[iVoid].numPart; p++) { + + dist[0] = voidPart[p].x - voids[iVoid].barycenter[0]; + dist[0] = voidPart[p].y - voids[iVoid].barycenter[1]; + dist[0] = voidPart[p].z - voids[iVoid].barycenter[2]; + + dist2 = pow(dist[0],2) + pow(dist[1],2) + pow(dist[2],2); + if (dist2 > maxDist) maxDist = dist2; + } + voids[iVoid].maxRadius = sqrt(maxDist); + } + + if (args_info.isObservation_flag) { + // compute distance from center to nearest mock + minDist = 1.e99; + for (p = mockIndex; p < numPartTot; p++) { + dist[0] = voids[iVoid].barycenter[0] - part[p].x; + dist[1] = voids[iVoid].barycenter[1] - part[p].y; + dist[2] = voids[iVoid].barycenter[2] - part[p].z; + + dist2 = pow(dist[0],2) + pow(dist[1],2) + pow(dist[2],2); + if (dist2 < minDist) minDist = dist2; + } + voids[iVoid].nearestMock = sqrt(minDist); + + } else { + voids[iVoid].nearestMock = 1.e99; + } + + if (args_info.isObservation_flag) { + voids[iVoid].redshift = + sqrt(pow(voids[iVoid].barycenter[0] - boxLen[0]/2.,2) + + pow(voids[iVoid].barycenter[1] - boxLen[1]/2.,2) + + pow(voids[iVoid].barycenter[2] - boxLen[2]/2.,2)); + voids[iVoid].redshift = voids[iVoid].redshift; + redshift = voids[iVoid].redshift; + nearestEdge = fmin(fabs(redshift-args_info.zMin_arg*LIGHT_SPEED), + fabs(redshift-args_info.zMax_arg*LIGHT_SPEED)); + } else { + voids[iVoid].redshift = voids[iVoid].barycenter[2]/LIGHT_SPEED*100.; + + nearestEdge = fmin( + fabs(voids[iVoid].barycenter[0] - ranges[0][0]), + fabs(voids[iVoid].barycenter[0] - ranges[0][1])); + nearestEdge = fmin(nearestEdge, + fabs(voids[iVoid].barycenter[1] - ranges[1][0])); + nearestEdge = fmin(nearestEdge, + fabs(voids[iVoid].barycenter[1] - ranges[1][1])); + nearestEdge = fmin(nearestEdge, + fabs(voids[iVoid].barycenter[2] - ranges[2][0])); + nearestEdge = fmin(nearestEdge, + fabs(voids[iVoid].barycenter[2] - ranges[2][1])); + } + + if (nearestEdge < voids[iVoid].nearestMock) { + voids[iVoid].nearestMock = nearestEdge; + } + } // iVoid + + printf(" Picking winners and losers...\n"); + numKept = numVoids; + for (iVoid = 0; iVoid < numVoids; iVoid++) { + if (strcmp(args_info.dataPortion_arg, "edge") == 0 && + tolerance*voids[iVoid].maxRadius < voids[iVoid].nearestMock) { + numKept--; + voids[iVoid].accepted = 0; + } + + if (strcmp(args_info.dataPortion_arg, "central") == 0 && + tolerance*voids[iVoid].maxRadius > voids[iVoid].nearestMock) { + numKept--; + voids[iVoid].accepted = 0; + } + + if (voids[iVoid].centralDen > args_info.maxCentralDen_arg) { + numKept--; + voids[iVoid].accepted = -1; + } + + if (voids[iVoid].radius < args_info.rMin_arg) { + numKept--; + voids[iVoid].accepted = 0; + } + } + printf(" Number kept: %d (out of %d)\n", numKept, numVoids); + + printf(" Output...\n"); + fp = fopen(args_info.output_arg, "w"); + fpBarycenter = fopen(args_info.outCenters_arg, "w"); + fpInfo = fopen(args_info.outInfo_arg, "w"); + fpDistances = fopen(args_info.outDistances_arg, "w"); + fpSkyPositions = fopen(args_info.outSkyPositions_arg, "w"); + fprintf(fp, "%d particles, %d voids.\n", mockIndex, numKept); + fprintf(fp, "see column in master void file\n"); + fprintf(fpInfo, "# center x,y,z (Mpc/h), volume (normalized), radius (Mpc/h), redshift, volume (Mpc/h^3), void ID\n"); + fprintf(fpSkyPositions, "# RA, dec, redshift, radius (Mpc/h), void ID\n"); + for (iVoid = 0; iVoid < numVoids; iVoid++) { + + if (voids[iVoid].accepted != 1) continue; + + fprintf(fp, "%d %d %d %f %f %d %d %f %d %f %f\n", + i, + voids[iVoid].voidID, + voids[iVoid].coreParticle, + voids[iVoid].coreDens, + voids[iVoid].zoneVol, + voids[iVoid].zoneNumPart, + voids[iVoid].numZones, + voids[iVoid].vol, + voids[iVoid].numPart, + voids[iVoid].densCon, + voids[iVoid].voidProb); + + fprintf(fpBarycenter, "%d %e %e %e\n", + voids[iVoid].voidID, + voids[iVoid].barycenter[0], + voids[iVoid].barycenter[1], + voids[iVoid].barycenter[2]); + + fprintf(fpDistances, "%d %e\n", + voids[iVoid].voidID, + voids[iVoid].nearestMock); + + double outCenter[3]; + outCenter[0] = voids[iVoid].barycenter[0]; + outCenter[1] = voids[iVoid].barycenter[1]; + outCenter[2] = voids[iVoid].barycenter[2]; + + if (args_info.isObservation_flag) { + outCenter[0] = (voids[iVoid].barycenter[0]-boxLen[0]/2.)*100.; + outCenter[1] = (voids[iVoid].barycenter[1]-boxLen[1]/2.)*100.; + outCenter[2] = (voids[iVoid].barycenter[2]-boxLen[2]/2.)*100.; + } + + fprintf(fpInfo, "%.2f %.2f %.2f %.2f %.2f %.5f %.2f %d\n", + outCenter[0], + outCenter[1], + outCenter[2], + voids[iVoid].vol, + voids[iVoid].radius, + voids[iVoid].redshift, + 4./3.*M_PI*pow(voids[iVoid].radius, 3), + voids[iVoid].voidID + ); + + fprintf(fpSkyPositions, "%.2f %.2f %.5f %.2f %d\n", + atan((voids[iVoid].barycenter[1]-boxLen[1]/2.)/(voids[iVoid].barycenter[0]-boxLen[0]/2.)) * 180/M_PI + 180, + asin((voids[iVoid].barycenter[2]-boxLen[2]/2.)/voids[iVoid].redshift) * 180/M_PI, + voids[iVoid].redshift, + voids[iVoid].radius, + voids[iVoid].voidID); + + } + fclose(fp); + fclose(fpInfo); + fclose(fpBarycenter); + fclose(fpDistances); + + // print the centers catalog again but without central density cuts + fpInfo = fopen(args_info.outNoCutInfo_arg, "w"); + fprintf(fpInfo, "# center x,y,z (km/s), volume (normalized), radius (Mpc/h), redshift, volume (Mpc/h^3), void ID\n"); + for (iVoid = 0; iVoid < numVoids; iVoid++) { + + if (voids[iVoid].accepted == 0) continue; + + double outCenter[3]; + outCenter[0] = voids[iVoid].barycenter[0]; + outCenter[1] = voids[iVoid].barycenter[1]; + outCenter[2] = voids[iVoid].barycenter[2]; + + if (args_info.isObservation_flag) { + outCenter[0] = (voids[iVoid].barycenter[0]-boxLen[0]/2.)*100.; + outCenter[1] = (voids[iVoid].barycenter[1]-boxLen[1]/2.)*100.; + outCenter[2] = (voids[iVoid].barycenter[2]-boxLen[2]/2.)*100.; + } + + + fprintf(fpInfo, "%.2f %.2f %.2f %.2f %.2f %.5f %.2f %d\n", + outCenter[0], + outCenter[1], + outCenter[2], + voids[iVoid].vol, + voids[iVoid].radius, + voids[iVoid].redshift, + 4./3.*M_PI*pow(voids[iVoid].radius, 3), + voids[iVoid].voidID); + } + fclose(fpInfo); + + clock2 = clock(); + printf(" Time: %f sec (for %d voids)\n", (1.*clock2-clock1)/CLOCKS_PER_SEC, numVoids); + clock1 = clock(); + + + printf("Done!\n"); + return 0; +} // end main diff --git a/c_tools/stacking/pruneVoids.ggo b/c_tools/stacking/pruneVoids.ggo new file mode 100644 index 0000000..bd97e50 --- /dev/null +++ b/c_tools/stacking/pruneVoids.ggo @@ -0,0 +1,47 @@ +package "removeEdgeVoids" +version "alpha" + + +option "configFile" - "Configuration filename" string optional + +option "partFile" - "Particle file from generateFromCatalog" string required + +option "extraInfo" - "Extra particle file from generateFromCatalog" string required + +option "voidDesc" - "Void list from ZOBOV" string required + +option "void2Zone" - "Zone file from ZOBOV" string required + +option "partVol" - "Particle volume file from ZOBOV" string required + +option "zone2Part" - "Particle file from ZOBOV" string required +option "mockIndex" - "Beginning index of mock particles" int required + +option "numVoids" - "Number of voids" int required + +option "isObservation" - "We are working with observational data" flag off + +option "zMin" - "Minimum redshift of sample" double optional default="0.0" +option "zMax" - "Maximum redshift of sample" double optional default="10.0" + +option "rMin" - "Minimum allowable void radius" double optional default="0.0" + + +option "output" - "Output void file" string required +option "outDistances" - "output of distances from centers to nearest mock particle" string required + +option "outCenters" - "output barycenters of voids" string required + +option "outInfo" - "output info of voids" string required + +option "outNoCutInfo" - "output info of voids" string required + +option "outSkyPositions" - "output sky positions of voids" string required + +option "dataPortion" - "all, central, or edge" string required + +option "tolerance" - "Fraction of void width to consider edge" double optional default="1.0" + +option "centralRadFrac" - "Fraction of void radii to consider central region" double optional default="4" + +option "maxCentralDen" - "Maximum central density to accept as a void" double optional default="0.2" diff --git a/pipeline/generateCatalog.py b/pipeline/generateCatalog.py new file mode 100755 index 0000000..eec1402 --- /dev/null +++ b/pipeline/generateCatalog.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python + +# does full void analysis. Also generates 2d/1d stacked plots and hubble diagram + +from void_python_tools.backend import * +from void_python_tools.plotting import * +import imp + +# ------------------------------------------------------------------------------ + +def my_import(name): + mod = __import__(name) + components = name.split('.') + for comp in components[1:]: + mod = getattr(mod, comp) + return mod + +if (len(sys.argv) == 0): + print "Usage: ./anylyzeVoids.py parameter_file.py" + exit(-1) + +if (len(sys.argv) > 1): + filename = sys.argv[1] + print " Loading parameters from", filename + if not os.access(filename, os.F_OK): + print " Cannot find parameter file!" + exit(-1) + #parms = __import__(filename[:-3], globals(), locals(), ['*']) + parms = imp.load_source("name", filename) + globals().update(vars(parms)) +else: + print " Using default parameters" + +# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ + +if not os.access(logDir, os.F_OK): + os.makedirs(logDir) + +if not os.access(figDir, os.F_OK): + os.makedirs(figDir) + +if not continueRun: + print " Cleaning out log files..." + + if startCatalogStage <= 1 and glob.glob(logDir+"/generate*") != []: + os.system("rm %s/generate*" % logDir) + if startCatalogStage <= 2 and glob.glob(logDir+"/zobov*") != []: + os.system("rm %s/zobov*" % logDir) + if startCatalogStage <= 3 and glob.glob(logDir+"/prune*") != []: + os.system("rm %s/prune*" % logDir) + +for sample in dataSampleList: + + sampleName = sample.fullName + + print " Working with data set", sampleName, "..." + zobovDir = workDir+"/sample_"+sampleName+"/" + sample.zobovDir = zobovDir + + if not os.access(zobovDir, os.F_OK): + os.makedirs(zobovDir) + +# --------------------------------------------------------------------------- + if (startCatalogStage <= 1) and (endCatalogStage >= 1) and not sample.isCombo: + print " Extracting tracers from catalog...", + sys.stdout.flush() + + logFile = logDir+"/generate_"+sampleName+".out" + + if sample.dataType == "observation": + GENERATE_PATH = CTOOLS_PATH+"/mock/generateFromCatalog" + else: + GENERATE_PATH = CTOOLS_PATH+"/mock/generateMock" + + launchGenerate(sample, GENERATE_PATH, workDir=workDir, + inputDataDir=inputDataDir, zobovDir=zobovDir, + figDir=figDir, logFile=logFile, useLCDM=useLCDM, + continueRun=continueRun) + + # -------------------------------------------------------------------------- + if (startCatalogStage <= 2) and (endCatalogStage >= 2) and not sample.isCombo: + print " Extracting voids with ZOBOV...", + sys.stdout.flush() + + launchZobov(sample, ZOBOV_PATH, zobovDir=zobovDir, logDir=logDir, + continueRun=continueRun) + + # ------------------------------------------------------------------------- + if (startCatalogStage <= 3) and (endCatalogStage >= 3) and not sample.isCombo: + + for thisDataPortion in dataPortions: + print " Taking data portion:", thisDataPortion, "...", + sys.stdout.flush() + + logFile = logDir+"/pruneVoids_"+sampleName+"_"+\ + thisDataPortion+".out" + + PRUNE_PATH = CTOOLS_PATH+"/stacking/pruneVoids" + + launchPrune(sample, PRUNE_PATH, thisDataPortion=thisDataPortion, + logFile=logFile, zobovDir=zobovDir, continueRun=continueRun) + +# ------------------------------------------------------------------------- +if (startCatalogStage <= 4) and (endCatalogStage >= 4): + + print " Plotting...", + sys.stdout.flush() + + for thisDataPortion in dataPortions: + plotNumberCounts(workDir, dataSampleList, figDir, showPlot=True, dataPortion=thisDataPortion, setName=setName) + +print "\n Done!" diff --git a/pipeline/prepareCatalogs.py b/pipeline/prepareCatalogs.py new file mode 100755 index 0000000..c2bb424 --- /dev/null +++ b/pipeline/prepareCatalogs.py @@ -0,0 +1,466 @@ +#!/usr/bin/env python + +# prepares input catalogs based on multidark simulations +# (borrows heavily from generateMock, but doesn't hold much in memory) +# also creates necessary analyzeVoids input files + +import numpy as np +import os +import sys +from Scientific.IO.NetCDF import NetCDFFile +import void_python_tools as vp +import argparse + +catalogDir = os.getenv("HOME")+"/workspace/Voids/catalogs/multidark/" +scriptDir = os.getenv("PWD")+"/multidark/" +hodPath = os.getenv("HOME")+"/projects/Voids/hod/HOD.x" + +outputDir = os.getenv("HOME")+"/workspace/Voids/multidark/" +figDir = os.getenv("PWD")+"/../figs/multidark/" +logDir = os.getenv("PWD")+"/../logs/multidark/" + +dataFormat = "multidark" +dataType = "simulation" +useLightCone = True + +redshifts = (("0.0", "0.53", "1.0")) +redshiftFileBase = "mdr1_particles_z" +numSlices = 4 +numSubvolumes = 1 + +prefix = "md_" +subSamples = ((0.1, 0.05, 0.01, 0.002, 0.001, 0.0004, 0.0002)) + +numPart = 1024*1024*1024 # number of particles in base catalog +lbox = 1000 +omegaM = 0.27 +hubble = 0.70 + +# ----------------------------------------------------------------------------- +LIGHT_SPEED = 299792.458 + +parser = argparse.ArgumentParser(description='options') +parser.add_argument('--scripts', dest='script', action='store_const', + const=True, default=False, + help='write scripts') +parser.add_argument('--subsamples', dest='subsample', action='store_const', + const=True, default=False, + help='write subsamples') +parser.add_argument('--halos', dest='halos', action='store_const', + const=True, default=False, + help='write halos') +parser.add_argument('--hod', dest='hod', action='store_const', + const=True, default=False, + help='write hos') +parser.add_argument('--all', dest='all', action='store_const', + const=True, default=False, + help='write everything') +args = parser.parse_args() + +#------------------------------------------------------------------------------ +def getSampleName(prefix, base, redshift, useVel, iSlice=-1, iVol=-1): + useVelString = "" + if useVel: useVelString = "_pv" + + sampleName = prefix + base + useVelString + "_z" + redshift + + if iSlice != -1: + sampleName += "_s" + str(iSlice) + + if iVol != -1: + sampleName += "_d" + iVol + + return sampleName + +#------------------------------------------------------------------------------ +# for given dataset parameters, outputs a script for use with analyzeVoids +def writeScript(prefix, base, scriptDir, catalogDir, redshifts, numSubvolumes, + numSlices, useVel, lbox, minRadius, omegaM, subsample=1.0, + suffix=".dat"): + + setName = prefix + base + + dataFileNameBase = setName #+ ".dat" + + if useVel: setName += "_pv" + + scriptFileName = scriptDir + "/" + "md_" + base + if useVel: scriptFileName += "_pv" + scriptFileName += ".py" + scriptFile = open(scriptFileName, 'w') + + scriptFile.write("""#!/usr/bin/env/python +import os +from void_python_tools.backend.classes import * + +continueRun = False +startCatalogStage = 1 +endCatalogStage = 3 + +startAPStage = 1 +endAPStage = 6 + +ZOBOV_PATH = os.getenv("PWD")+"/../zobov/" +CTOOLS_PATH = os.getenv("PWD")+"/../c_tools/" +freshStack = True +errorBars = "CALCULATED" +numIncoherentRuns = 100 +ranSeed = 101010 +useLCDM = False +bias = 1.16 + +dataPortions = ["central"] +dataSampleList = [] +""") + + dataInfo = """ +catalogName = "{sampleName}" + +workDir = "{outputDir}/{sampleName}/" +inputDataDir = "{catalogDir}" +figDir = "{figDir}/{sampleName}/" +logDir = "{logDir}/{sampleName}/" + """ + scriptFile.write(dataInfo.format(sampleName=setName, figDir=figDir, + logDir=logDir, outputDir=outputDir, + catalogDir=catalogDir, + inputDataDir=catalogDir)) + + sampleInfo = """ +newSample = Sample(dataFile = "{dataFile}", + dataFormat = "{dataFormat}", + fullName = "{sampleName}", + nickName = "{sampleName}", + dataType = "simulation", + zBoundary = ({zMin}, {zMax}), + zRange = ({zMin}, {zMax}), + zBoundaryMpc = ({zMinMpc}, {zMaxMpc}), + omegaM = {omegaM}, + minVoidRadius = {minRadius}, + includeInHubble = True, + partOfCombo = False, + isCombo = False, + boxLen = {boxLen}, + usePecVel = {usePecVel}, + numSubvolumes = {numSubvolumes}, + mySubvolume = "{mySubvolume}", + numSubDivisions = 4, + useLightCone = {useLightCone}, + subsample = {subsample}) +dataSampleList.append(newSample) +newSample.addStack({zMin}, {zMax}, {minRadius} , {minRadius}+2, True, False) +newSample.addStack({zMin}, {zMax}, {minRadius} , {minRadius}+4, True, False) +newSample.addStack({zMin}, {zMax}, {minRadius}+2, {minRadius}+6, True, False) +newSample.addStack({zMin}, {zMax}, {minRadius}+6, {minRadius}+10, True, False) +newSample.addStack({zMin}, {zMax}, {minRadius}+10, {minRadius}+18, True, False) +newSample.addStack({zMin}, {zMax}, {minRadius}+18, {minRadius}+24, True, False) + """ + + for redshift in redshifts: + zBox = float(redshift) + Om = float(omegaM) + zBoxMpc = LIGHT_SPEED/100.*vp.angularDiameter(zBox, Om=Om) + boxMaxMpc = zBoxMpc + lbox + + # converter from redshift to comoving distance + zVsDY = np.linspace(0., zBox+8*lbox*100./LIGHT_SPEED, 10000) + zVsDX = np.zeros(len(zVsDY)) + for i in xrange(len(zVsDY)): + zVsDX[i] = vp.angularDiameter(zVsDY[i], Om=Om) + + if useLightCone: + boxWidthZ = np.interp(vp.angularDiameter(zBox,Om=Om)+100. / \ + LIGHT_SPEED*lbox, zVsDX, zVsDY)-zBox + dzSafe = 0.03 + else: + boxWidthZ = lbox*100./LIGHT_SPEED + dzSafe = 0.0 + + for iSlice in xrange(numSlices): + # trim off the first and last 10,000 km/s + sliceMin = zBox + dzSafe + iSlice*(boxWidthZ-dzSafe)/numSlices + sliceMax = zBox + dzSafe + (iSlice+1)*(boxWidthZ-dzSafe)/numSlices + + sliceMinMpc = sliceMin*LIGHT_SPEED/100. + sliceMaxMpc = sliceMax*LIGHT_SPEED/100. + + sliceMin = "%0.2f" % sliceMin + sliceMax = "%0.2f" % sliceMax + sliceMinMpc = "%0.1f" % sliceMinMpc + sliceMaxMpc = "%0.1f" % sliceMaxMpc + + dataFileName = dataFileNameBase + "_z" + redshift + suffix + + for iX in xrange(numSubvolumes): + for iY in xrange(numSubvolumes): + + mySubvolume = "%d%d" % (iX, iY) + + sampleName = getSampleName(prefix, base, redshift, useVel, + iSlice=iSlice, iVol=mySubvolume) + + scriptFile.write(sampleInfo.format(dataFile=dataFileName, + dataFormat=dataFormat, + sampleName=sampleName, + zMin=sliceMin, + zMax=sliceMax, + zMinMpc=sliceMinMpc, + zMaxMpc=sliceMaxMpc, + omegaM=Om, + boxLen=lbox, + usePecVel=useVel, + minRadius=minRadius, + numSubvolumes=numSubvolumes, + mySubvolume=mySubvolume, + useLightCone=useLightCone, + subsample=subsample)) + + scriptFile.close() + return + + +#------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ +if not os.access(scriptDir, os.F_OK): os.mkdir(scriptDir) + +#------------------------------------------------------------------------------ +# first the directly downsampled runs +# Note: ss0.002 ~ SDSS DR7 dim2 +# ss0.0004 ~ SDSS DR9 mid +baseResolution = numPart/lbox/lbox/lbox # particles/Mpc^3 +for thisSubSample in subSamples: + + keepFraction = float(thisSubSample) / baseResolution + maxKeep = keepFraction * numPart + minRadius = int(np.ceil(lbox/maxKeep**(1./3))) + + if args.script or args.all: + print " Doing subsample", thisSubSample, " scripts" + if dataFormat == "multidark": + writeScript(prefix, + "ss"+str(thisSubSample), scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, False, lbox, minRadius, omegaM, + subsample=1.0) + writeScript(prefix, "ss"+str(thisSubSample), scriptDir, catalogDir, + redshifts, numSubvolumes, numSlices, True, lbox, minRadius, + omegaM, subsample=1.0) + elif dataFormat == "gadget": + writeScript("", redshiftFileBase, scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, True, lbox, minRadius, omegaM, + subsample=thisSubSample, suffix="") + + if args.subsample or args.all: + print " Doing subsample", thisSubSample + + for redshift in redshifts: + print " redshift", redshift + dataFile = catalogDir+"/"+redshiftFileBase+redshift + inFile = open(dataFile, 'r') + + sampleName = getSampleName("ss"+str(thisSubSample), redshift, False) + outFile = open(catalogDir+"/"+sampleName+".dat", 'w') + + outFile.write("%f\n" %(lbox)) + outFile.write("%s" %(omegaM)) + outFile.write("%s" %(hubble)) + outFile.write("%s\n" %(redshift)) + outFile.write("%d\n" %(maxKeep)) + + numKept = 0 + for line in inFile: + if np.random.uniform() > keepFraction: continue + numKept += 1 + if numKept > maxKeep: break + line = line.split(',') + x = float(line[0]) + y = float(line[1]) + z = float(line[2]) + vz = float(line[3]) + + outFile.write("%e %e %e %e\n" %(x,y,z,vz)) + + outFile.write("-99 -99 -99 -99\n") + print "KEEPING:", numKept, "...predicted:", maxKeep + inFile.close() + outFile.close() + +# ----------------------------------------------------------------------------- +# now halos +if args.script or args.all: + print " Doing halo scripts" + + dataFile = catalogDir+"/mdr1_halos_z"+redshifts[0] + inFile = open(dataFile, 'r') + numPart = 0 + for line in inFile: numPart += 1 + inFile.close() + + minRadius = int(np.ceil(lbox/numPart**(1./3.))) + + if dataFormat == "multidark": + writeScript(prefix, "halos", scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, False, lbox, minRadius, omegaM) + writeScript(prefix, "halos", scriptDir, catalogDir, redshifts, numSubvolumes, + numSlices, True, lbox, minRadius, omegaM) + +if args.halos or args.all: + print " Doing halos" + + for redshift in redshifts: + print " z = ", redshift + + dataFile = catalogDir+"/mdr1_halos_z"+redshift + inFile = open(dataFile, 'r') + numPart = 0 + for line in inFile: numPart += 1 + inFile.close() + + sampleName = getSampleName("halos", redshift, False) + + outFile = open(catalogDir+"/"+sampleName+".dat", 'w') + + outFile.write("%f\n" %(lbox)) + outFile.write("%s" %(omegaM)) + outFile.write("%s" %(hubble)) + outFile.write("%s\n" %(redshift)) + outFile.write("%d\n" %(numPart)) + + inFile = open(dataFile, 'r') + numKept = 0 + for line in inFile: + numKept += 1 + line = line.split(',') + x = float(line[0]) + y = float(line[1]) + z = float(line[2]) + vz = float(line[5]) + + # write to output file + outFile.write("%e %e %e %e\n" %(x,y,z,vz)) + + inFile.close() + outFile.close() + +# ----------------------------------------------------------------------------- +# now the SDSS HOD +parFileText = """ +% cosmology +OMEGA_M {omegaM} +HUBBLE {hubble} +OMEGA_B 0.0469 +SIGMA_8 0.82 +SPECTRAL_INDX 0.95 +ITRANS 5 +REDSHIFT {redshift} + +% halo definition +%DELTA_HALO 200 +DELTA_HALO 740.74 % 200/Om_m +M_max 1.00E+16 + +% fit function types +pdfs 11 +pdfc 2 +EXCLUSION 4 + +% hod parameters +M_min {Mmin} +GALAXY_DENSITY 0.0111134 % computed automatically if M_min set, use for sanity +M1 {M1} +sigma_logM {sigma_logM} +alpha {alpha} +M_cut {Mcut} + +% simulation info +real_space_xi 1 +HOD 1 +populate_sim 1 +HaloFile {haloFile} +RESOLUTION {numPartPerSide} +BOX_SIZE {boxSize} + +% output +root_filename hod + """ + +if args.script or args.all: + print " Doing DR7 HOD scripts" + if dataFormat == "multidark": + writeScript(prefix, + "hod_dr72dim2", scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, False, lbox, 5, omegaM) + writeScript(prefix, + "hod_dr72dim2", scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, True, lbox, 5, omegaM) + +if args.hod or args.all: + print " Doing DR7 HOD" + for redshift in redshifts: + print " z = ", redshift + + parFileName = "./hod.par" + parFile = open(parFileName, 'w') + haloFile = catalogDir+"/mdr1_halos_z"+redshift + parFile.write(parFileText.format(omegaM=omegaM, + hubble=hubble, + redshift=redshift, + Mmin=1.99526e12, + M1=3.80189e13, + sigma_logM=0.21, + alpha=1.12, + Mcut=6.91831e11, + haloFile=haloFile, + numPartPerSide=numPart**(1/3.), + boxSize=lbox)) + parFile.close() + + os.system(hodPath+" "+parFileName+">& /dev/null") + + sampleName = getSampleName("hod_dr72dim2", redshift, False) + outFileName = catalogDir+"/"+sampleName+".dat" + os.system("mv hod.mock" + " " + outFileName) + + os.system("rm ./hod.*") + +# ----------------------------------------------------------------------------- +# now the BOSS HOD +if args.script or args.all: + print " Doing DR9 HOD scripts" + if dataFormat == "multidark": + writeScript(prefix, + "hod_dr9mid", scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, False, lbox, 5, omegaM) + writeScript(prefix, + "hod_dr9mid", scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, True, lbox, 5, omegaM) + +if args.hod or args.all: + print " Doing DR9 HOD" + for redshift in redshifts: + print " z = ", redshift + + parFileName = "./hod.par" + parFile = open(parFileName, 'w') + haloFile = catalogDir+"/mdr1_halos_z"+redshift + parFile.write(parFileText.format(omegaM=omegaM, + hubble=hubble, + redshift=redshift, + Mmin=1.23e13, + M1=1.e14, + sigma_logM=0.596, + alpha=1.0127, + Mcut=1.19399e13, + haloFile=haloFile, + numPartPerSide=numPart**(1/3.), + boxSize=lbox)) + parFile.close() + + os.system(hodPath+" "+parFileName+">& /dev/null") + + sampleName = getSampleName("hod_dr9mid", redshift, False) + outFileName = catalogDir+"/"+sampleName+".dat" + os.system("mv hod.mock" + " " + outFileName) + + os.system("rm ./hod.*") + + diff --git a/pipeline/prepareGadgetCatalog.py b/pipeline/prepareGadgetCatalog.py new file mode 100755 index 0000000..cb61be8 --- /dev/null +++ b/pipeline/prepareGadgetCatalog.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python + +# prepares input catalogs based on multidark simulations +# (borrows heavily from generateMock, but doesn't hold much in memory) +# also creates necessary analyzeVoids input files + +import numpy as np +import os +import sys +from Scientific.IO.NetCDF import NetCDFFile +import void_python_tools as vp +import argparse + +catalogDir = os.getenv("HOME")+"/workspace/Voids/catalogs/multidark/" +hodPath = os.getenv("HOME")+"/projects/Voids/hod/HOD.x" + +voidOutputDir = os.getenv("HOME")+"/workspace/Voids/multidark/" +scriptDir = os.getenv("HOME")+"/projects/Voids/scripts/multidark/" +figDir = os.getenv("HOME")+"/projects/Voids/figs/multidark/" +logDir = os.getenv("HOME")+"/projects/Voids/logs/multidark/" + +dataType = "simulation" +dataFormat = "gadget" +useLightCone = False # place particles on a light cone? + +redshiftFileBase = "mdr1_particles_z" # common filename of particle files +redshifts = (("0.0", "0.53", "1.0")) # list of redshift particle files + +numSlices = 4 # how many slices along the z-axis? +numSubvolumes = 1 # how many subdivisions along the x- and y-axes? + +prefix = "testrun_" # prefix to give all outputs +subSamples = [ 0.01 ] # list of desired subsamples + +numPart = 1024*1024*1024 # number of particles in base catalog +lbox = 1000 # Mpc/h +omegaM = 0.27 +hubble = 0.70 + +# ----------------------------------------------------------------------------- +LIGHT_SPEED = 299792.458 + +#------------------------------------------------------------------------------ +def getSampleName(setName, redshift, useVel, iSlice=-1, iVol=-1): + + sampleName = setName + + if useVel: setName += "_pv" + + if iSlice != -1: sampleName += "_s" + str(iSlice) + + if iVol != -1: sampleName += "_d" + iVol + + return sampleName + +#------------------------------------------------------------------------------ +# for given dataset parameters, outputs a script for use with analyzeVoids +def writeScript(setName, dataFileNameBase, + scriptDir, catalogDir, redshifts, numSubvolumes, + numSlices, useVel, lbox, minRadius, omegaM, subsample=1.0, + suffix=".dat"): + + if useVel: setName += "_pv" + + scriptFileName = scriptDir + "/" + setName + ".py" + scriptFile = open(scriptFileName, 'w') + + scriptFile.write("""#!/usr/bin/env/python +import os +from void_python_tools.backend.classes import * + +continueRun = False +startCatalogStage = 1 +endCatalogStage = 3 + +startAPStage = 1 +endAPStage = 6 + +ZOBOV_PATH = os.getenv("PWD")+"/../zobov/" +CTOOLS_PATH = os.getenv("PWD")+"/../c_tools/" +freshStack = True +errorBars = "CALCULATED" +numIncoherentRuns = 100 +ranSeed = 101010 +useLCDM = False +bias = 1.16 + +dataPortions = ["central"] +dataSampleList = [] +""") + + dataInfo = """ +setName = "{setName}" + +workDir = "{voidOutputDir}/{setName}/" +inputDataDir = "{inputDataDir}" +figDir = "{figDir}/{setName}/" +logDir = "{logDir}/{setName}/" + """ + scriptFile.write(dataInfo.format(setName=setName, figDir=figDir, + logDir=logDir, voidOutputDir=voidOutputDir, + inputDataDir=catalogDir)) + + sampleInfo = """ +newSample = Sample(dataFile = "{dataFile}", + dataFormat = "{dataFormat}", + fullName = "{sampleName}", + nickName = "{sampleName}", + dataType = "simulation", + zBoundary = ({zMin}, {zMax}), + zRange = ({zMin}, {zMax}), + zBoundaryMpc = ({zMinMpc}, {zMaxMpc}), + omegaM = {omegaM}, + minVoidRadius = {minRadius}, + includeInHubble = True, + partOfCombo = False, + isCombo = False, + boxLen = {boxLen}, + usePecVel = {usePecVel}, + numSubvolumes = {numSubvolumes}, + mySubvolume = "{mySubvolume}", + numSubDivisions = 4, + useLightCone = {useLightCone}, + subsample = {subsample}) +dataSampleList.append(newSample) + """ + + for redshift in redshifts: + zBox = float(redshift) + Om = float(omegaM) + zBoxMpc = LIGHT_SPEED/100.*vp.angularDiameter(zBox, Om=Om) + boxMaxMpc = zBoxMpc + lbox + + # converter from redshift to comoving distance + zVsDY = np.linspace(0., zBox+8*lbox*100./LIGHT_SPEED, 10000) + zVsDX = np.zeros(len(zVsDY)) + for i in xrange(len(zVsDY)): + zVsDX[i] = vp.angularDiameter(zVsDY[i], Om=Om) + + if useLightCone: + boxWidthZ = np.interp(vp.angularDiameter(zBox,Om=Om)+100. / \ + LIGHT_SPEED*lbox, zVsDX, zVsDY)-zBox + dzSafe = 0.03 + else: + boxWidthZ = lbox*100./LIGHT_SPEED + dzSafe = 0.0 + + for iSlice in xrange(numSlices): + sliceMin = zBox + dzSafe + iSlice*(boxWidthZ-dzSafe)/numSlices + sliceMax = zBox + dzSafe + (iSlice+1)*(boxWidthZ-dzSafe)/numSlices + + sliceMinMpc = sliceMin*LIGHT_SPEED/100. + sliceMaxMpc = sliceMax*LIGHT_SPEED/100. + + sliceMin = "%0.2f" % sliceMin + sliceMax = "%0.2f" % sliceMax + sliceMinMpc = "%0.1f" % sliceMinMpc + sliceMaxMpc = "%0.1f" % sliceMaxMpc + + dataFileName = dataFileNameBase + redshift + suffix + + for iX in xrange(numSubvolumes): + for iY in xrange(numSubvolumes): + + mySubvolume = "%d%d" % (iX, iY) + + sampleName = getSampleName(setName, redshift, useVel, + iSlice=iSlice, iVol=mySubvolume) + + scriptFile.write(sampleInfo.format(dataFile=dataFileName, + dataFormat=dataFormat, + sampleName=sampleName, + zMin=sliceMin, + zMax=sliceMax, + zMinMpc=sliceMinMpc, + zMaxMpc=sliceMaxMpc, + omegaM=Om, + boxLen=lbox, + usePecVel=useVel, + minRadius=minRadius, + numSubvolumes=numSubvolumes, + mySubvolume=mySubvolume, + useLightCone=useLightCone, + subsample=subsample)) + + scriptFile.close() + return + + +#------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ +if not os.access(scriptDir, os.F_OK): os.mkdir(scriptDir) + +#------------------------------------------------------------------------------ +# first the directly downsampled runs +# Note: ss0.002 ~ SDSS DR7 dim2 +# ss0.0004 ~ SDSS DR9 mid +baseResolution = numPart/lbox/lbox/lbox # particles/Mpc^3 +for thisSubSample in subSamples: + + keepFraction = float(thisSubSample) / baseResolution + maxKeep = keepFraction * numPart + minRadius = int(np.ceil(lbox/maxKeep**(1./3))) + + print " Doing subsample", thisSubSample, " scripts" + setName = prefix+"ss"+str(thisSubSample) + writeScript(setName, redshiftFileBase, scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, True, lbox, minRadius, omegaM, + subsample=thisSubSample, suffix="") + writeScript(setName, redshiftFileBase, scriptDir, catalogDir, redshifts, + numSubvolumes, numSlices, False, lbox, minRadius, omegaM, + subsample=thisSubSample, suffix="") + diff --git a/pipeline_tools/mock/generateFromCatalog.cpp b/pipeline_tools/mock/generateFromCatalog.cpp deleted file mode 100644 index 62279ef..0000000 --- a/pipeline_tools/mock/generateFromCatalog.cpp +++ /dev/null @@ -1,365 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "generateFromCatalog_conf.h" -#include "contour_pixels.hpp" -#include -#include - -using namespace std; -using boost::format; -using namespace CosmoTool; - -struct NYU_Data -{ - int index; - int sector; - int region; - double ra, dec; - double cz; - double fgotten; - double phi_z; -}; - -struct Position -{ - double xyz[3]; -}; - -struct ParticleData -{ - vector id_gal; - int id_mask; - vector pos; - double box[3][2]; - double Lmax; -}; - -typedef vector NYU_VData; - -void loadData(const string& fname, NYU_VData & data) -{ - ifstream f(fname.c_str()); - - while (!f.eof()) - { - NYU_Data d; - f >> d.index >> d.sector >> d.region >> d.ra >> d.dec >> d.cz >> d.fgotten >> d.phi_z; - data.push_back(d); - } -} - -void generateGalaxiesInCube(NYU_VData& data, ParticleData& output_data) -{ - double d2r = M_PI/180; - - output_data.pos.resize(data.size()); - output_data.id_gal.resize(data.size()); - - for (int j = 0; j < 3; j++) - { - output_data.box[j][0] = -INFINITY; - output_data.box[j][1] = INFINITY; - } - - for (int i = 0; i < data.size(); i++) - { - double ra = data[i].ra*d2r, dec = data[i].dec*d2r; - Position& p = output_data.pos[i]; - - p.xyz[0] = data[i].cz*cos(ra)*cos(dec); - p.xyz[1] = data[i].cz*sin(ra)*cos(dec); - p.xyz[2] = data[i].cz*sin(dec); - output_data.id_gal[i] = data[i].index; - - for (int j = 0; j < 3; j++) - { - if (p.xyz[j] > output_data.box[j][0]) - output_data.box[j][0] = p.xyz[j]; - if (p.xyz[j] < output_data.box[j][1]) - output_data.box[j][1] = p.xyz[j]; - } - } - cout << format("Galaxy position generated: %d galaxies") % output_data.pos.size() << endl; - cout << format("box is %g < x < %g; %g < y < %g; %g < z < %g") - % (1e-2*output_data.box[0][1]) % (1e-2*output_data.box[0][0]) - % (1e-2*output_data.box[1][1]) % (1e-2*output_data.box[1][0]) - % (1e-2*output_data.box[2][1]) % (1e-2*output_data.box[2][0]) << endl; - -} - -static double cube(double x) -{ - return x*x*x; -} - -void generateBoxMask(generateFromCatalog_info& args , - Healpix_Map& mask, - vector& pixel_list, - NYU_VData& data, - ParticleData& output_data) -{ - int idx = -1; - int insertion = 0; - double volume = pixel_list.size()*1.0/mask.Npix()*4*M_PI; - int numToInsert; - - idx = output_data.id_mask; - - cout << "Generate box mask..." << endl; - - double Rmax = output_data.Lmax, t = args.box_thickness_arg; - output_data.Lmax += args.box_thickness_arg; - - - volume *= Rmax*Rmax/1e6 * args.box_thickness_arg; - numToInsert = (int)floor(volume*args.box_density_arg); - - for (int i = 0; i < numToInsert; i++) - { - Position p; - bool stop_here; - - do - { - - int p0 = (int)floor(drand48()*pixel_list.size()); - vec3 v = mask.pix2vec(pixel_list[p0]); - double r = Rmax*pow(drand48()*(cube(1+t/Rmax)-1) + 1,1./3); - - p.xyz[0] = v.x * r; - p.xyz[1] = v.y * r; - p.xyz[2] = v.z * r; - - stop_here = true; - for (int j = 0; j < 3; j++) - { - if (p.xyz[j] > output_data.box[j][0] || - p.xyz[j] < output_data.box[j][1]) - stop_here = false; - } - } - while (!stop_here); - - output_data.pos.push_back(p); - output_data.id_gal.push_back(idx); - insertion++; - } -} - -void generateSurfaceMask(generateFromCatalog_info& args , - Healpix_Map& mask, - vector& pixel_list, - NYU_VData& data, - ParticleData& output_data) -{ - // Find the first free index - int idx = -1; - int insertion = 0; - double volume = pixel_list.size()*1.0/mask.Npix()*4*M_PI; - int numToInsert; - - for (int i = 0; i < output_data.id_gal.size(); i++) - { - if (idx < output_data.id_gal[i]) - idx = output_data.id_gal[i]+1; - } - - output_data.id_mask = idx; - - cout << "Generate surface mask..." << endl; - - double Rmax = -1; - for (int j = 0; j < 3; j++) - { - Rmax = max(Rmax, max(output_data.box[j][0], -output_data.box[j][1])); - } - - output_data.Lmax = Rmax; - - - cout << format("Rmax is %g, surface volume is %g") % (Rmax/100) % (volume/(4*M_PI)) << endl; - volume *= Rmax*Rmax*Rmax/3/1e6; - numToInsert = (int)floor(volume*args.density_fake_arg); - cout << format("3d volume to fill: %g (Mpc/h)^3") % volume << endl; - - cout << format("Will insert %d particles") % numToInsert << endl; - - double pct = 0; - for (int i = 0; i < numToInsert; i++) - { - double new_pct = i*100./numToInsert; - - if (new_pct-pct > 5.) - { - pct = new_pct; - cout << format(" .. %3.0f %%") % pct << endl; - } - - Position p; - bool stop_here; - - do - { - - int p0 = (int)floor(drand48()*pixel_list.size()); - vec3 v = mask.pix2vec(pixel_list[p0]); - double r = Rmax*pow(drand48(),1./3); - - p.xyz[0] = v.x * r; - p.xyz[1] = v.y * r; - p.xyz[2] = v.z * r; - - stop_here = true; - for (int j = 0; j < 3; j++) - { - if (p.xyz[j] > output_data.box[j][0] || - p.xyz[j] < output_data.box[j][1]) - stop_here = false; - } - } - while (!stop_here); - - output_data.pos.push_back(p); - output_data.id_gal.push_back(idx); - insertion++; - } - cout << format("Done. Inserted %d particles.") % insertion << endl; -} - -void saveData(ParticleData& pdata) -{ - NcFile f("particles.nc", NcFile::Replace); - - assert(f.is_valid()); - - NcDim *d = f.add_dim("space", 3); - NcDim *p = f.add_dim("Np", pdata.pos.size()); - NcVar *v = f.add_var("particles", ncDouble, d, p); - double *x = new double[pdata.pos.size()]; - - for (int j = 0; j < 3; j++) - { - - for (int i = 0; i < pdata.pos.size(); i++) - x[i] = pdata.pos[i].xyz[j]; - - v->put_rec(d, x, j); - } - - v = f.add_var("id_gal", ncInt, p); - v->put(&pdata.id_gal[0], pdata.id_gal.size()); - - delete[] x; - -} - -void saveForZobov(ParticleData& pdata, const string& fname, const string& paramname) -{ - UnformattedWrite f(fname); - static const char axis[] = { 'X', 'Y', 'Z' }; - double Lmax = pdata.Lmax; - - f.beginCheckpoint(); - f.writeInt32(pdata.pos.size()); - f.endCheckpoint(); - - for (int j = 0; j < 3; j++) - { - cout << format("Writing %c components...") % axis[j] << endl; - f.beginCheckpoint(); - for (uint32_t i = 0; i < pdata.pos.size(); i++) - { - f.writeReal32((pdata.pos[i].xyz[j]+Lmax)/(2*Lmax)); - } - f.endCheckpoint(); - } - - NcFile fp(paramname.c_str(), NcFile::Replace); - - fp.add_att("range_x_min", -Lmax); - fp.add_att("range_x_max", Lmax); - fp.add_att("range_y_min", -Lmax); - fp.add_att("range_y_max", Lmax); - fp.add_att("range_z_min", -Lmax); - fp.add_att("range_z_max", Lmax); - - NcDim *NumPart_dim = fp.add_dim("numpart_dim", pdata.pos.size()); - NcVar *v = fp.add_var("particle_ids", ncInt, NumPart_dim); - NcVar *v2 = fp.add_var("expansion", ncDouble, NumPart_dim); - - double *expansion_fac = new double[pdata.pos.size()]; - - for (int i = 0; i < pdata.pos.size(); i++) - expansion_fac[i] = 1.0; - - v->put(&pdata.id_gal[0], pdata.id_gal.size()); - v2->put(expansion_fac, pdata.pos.size()); - - delete[] expansion_fac; -} - -int main(int argc, char **argv) -{ - generateFromCatalog_info args_info; - generateFromCatalog_conf_params args_params; - - generateFromCatalog_conf_init(&args_info); - generateFromCatalog_conf_params_init(&args_params); - - args_params.check_required = 0; - if (generateFromCatalog_conf_ext (argc, argv, &args_info, &args_params)) - return 1; - - if (!args_info.configFile_given) - { - if (generateFromCatalog_conf_required (&args_info, GENERATEFROMCATALOG_CONF_PACKAGE)) - return 1; - } - else - { - args_params.check_required = 1; - args_params.initialize = 0; - if (generateFromCatalog_conf_config_file (args_info.configFile_arg, - &args_info, - &args_params)) - return 1; - } - - generateFromCatalog_conf_print_version(); - - cout << "Loading NYU data..." << endl; - vector data; - Healpix_Map o_mask; - vector pixel_list; - ParticleData output_data; - - loadData(args_info.catalog_arg, data); - - - cout << "Loading mask..." << endl; - read_Healpix_map_from_fits(args_info.mask_arg, o_mask); - - Healpix_Map mask; - - mask.SetNside(128, RING); - mask.Import(o_mask); - - computeContourPixels(mask,pixel_list); - - // We compute a cube holding all the galaxies + the survey surface mask - - generateGalaxiesInCube(data, output_data); - generateSurfaceMask(args_info, mask, pixel_list, data, output_data); - computeFilledPixels(mask,pixel_list); - generateBoxMask(args_info, mask, pixel_list, data, output_data); - - saveForZobov(output_data, args_info.output_arg, args_info.params_arg); - // saveData(output_data); - - return 0; -} diff --git a/python_tools/PKG-INFO b/python_tools/PKG-INFO new file mode 100644 index 0000000..94703da --- /dev/null +++ b/python_tools/PKG-INFO @@ -0,0 +1,10 @@ +Metadata-Version: 1.0 +Name: voidProject +Version: 1.0 +Summary: UNKNOWN +Home-page: UNKNOWN +Author: UNKNOWN +Author-email: UNKNOWN +License: UNKNOWN +Description: UNKNOWN +Platform: UNKNOWN diff --git a/python_tools/setup.py b/python_tools/setup.py new file mode 100644 index 0000000..79c1393 --- /dev/null +++ b/python_tools/setup.py @@ -0,0 +1,14 @@ +from distutils.core import setup +from distutils.extension import Extension +from Cython.Distutils import build_ext +import numpy as np + +setup( + name='void_python_tools', + version='1.0', + cmdclass = {'build_ext': build_ext}, + include_dirs = [np.get_include()], + packages=['void_python_tools','void_python_tools.backend','void_python_tools.apTools','void_python_tools.apTools.profiles','void_python_tools.apTools.chi2', 'void_python_tools.plotting'], + #ext_modules = [Extension("void_python_tools.chi2.velocityProfileFitNative", ["void_python_tools/chi2/velocityProfileFitNative.pyx"], libraries=["gsl", "gslcblas"]), Extension("void_python_tools.chi2.likelihoo", ["void_python_tools/chi2/likelihood.pyx"], libraries=["gsl", "gslcblas"])] + ext_modules = [Extension("void_python_tools.apTools.chi2.velocityProfileFitNative", ["void_python_tools/apTools/chi2/velocityProfileFitNative.pyx"], libraries=["gsl", "gslcblas"])] +) diff --git a/python_tools/void_python_tools/__init__.py b/python_tools/void_python_tools/__init__.py new file mode 100644 index 0000000..d31fbd8 --- /dev/null +++ b/python_tools/void_python_tools/__init__.py @@ -0,0 +1,3 @@ +from void_python_tools.backend import * +from void_python_tools.apTools import * +from void_python_tools.plotting import * diff --git a/python_tools/void_python_tools/__init__.pyc b/python_tools/void_python_tools/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..574d8f0480540bde19aab3cc006c0b3b9592920f GIT binary patch literal 194 zcmZSn%*z$8sqdf600m4y+5w1*C4fW<5HT|3FffEbS&Tpy6GN~DGf*<~KM-gz0$C*> zLd#DBq_;!>NR;JgrUVq_XQd{W=p|=l8kLBk2^JLPr)B1(7Ha^-84yIVII24R`1s7c e%#!$cy@JXT4xpS(ZhlH>PO2Tq!eWqhT#NvmR4O6> literal 0 HcmV?d00001 diff --git a/python_tools/void_python_tools/apTools/__init__.py b/python_tools/void_python_tools/apTools/__init__.py new file mode 100644 index 0000000..b9744dc --- /dev/null +++ b/python_tools/void_python_tools/apTools/__init__.py @@ -0,0 +1,2 @@ +from chi2 import * +from profiles import * diff --git a/python_tools/void_python_tools/apTools/chi2/__init__.py b/python_tools/void_python_tools/apTools/chi2/__init__.py new file mode 100644 index 0000000..06f1f52 --- /dev/null +++ b/python_tools/void_python_tools/apTools/chi2/__init__.py @@ -0,0 +1,3 @@ +from velocityProfileFitNative import * +from likelihood import * +from cosmologyTools import * diff --git a/python_tools/void_python_tools/apTools/chi2/__init__.pyc b/python_tools/void_python_tools/apTools/chi2/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9aba2b1675c8d0658a04b0b1c2c51dcfc6c8376 GIT binary patch literal 228 zcmYL@y$ZrW49D+U2Pr7HIXF2L2Mf+3PL5Tu`yqE{8%>RPvC#MO&3ph&MKmP;{PICa z{2U~s^0Bq*Ymwx&M3{;=ajj6P;!FBRkx-=eX)J5-5=*rZcQVUAT^N-(sK11XlnsHCODAtRvlT2dW8ea8%>3GN TUlx`%xjXt*_eSW6Bs$S=g4r|o literal 0 HcmV?d00001 diff --git a/python_tools/void_python_tools/apTools/chi2/cosmologyTools.py b/python_tools/void_python_tools/apTools/chi2/cosmologyTools.py new file mode 100644 index 0000000..69626cf --- /dev/null +++ b/python_tools/void_python_tools/apTools/chi2/cosmologyTools.py @@ -0,0 +1,94 @@ +# a suite of functions to compute expansion rates, angular diameter +# distances, and expected void stretching + +import numpy as np +import scipy.integrate as integrate + +__all__=['expansion', 'angularDiameter', 'expectedStretch', 'aveStretch', 'aveExpansion', 'aveStretchCone', 'aveWeightedStretch'] + +# returns 1/E(z) for the given cosmology +def expansion(z, Om = 0.27, Ot = 1.0, w0 = -1.0, wa = 0.0): + wz = w0 + wa*z/(1+z) + ez = Om * (1+z)**3 + (Ot-Om)# * (1+z)**(3.+3*wz) + ez = 1./np.sqrt(ez) + return ez + + +# returns D_A(z) for the given cosmology +def angularDiameter(z, Om = 0.27, Ot = 1.0, w0 = -1.0, wa = 0.0): + da = integrate.quad(expansion, 0.0, z, args=(Om, Ot, w0, wa))[0] + return da + + +# returns expected void stretch for the given cosmology +def expectedStretch(z, Om = 0.27, Ot = 1.0, w0 = -1.0, wa = 0.0): + ez = 1./expansion(z, Om=Om, Ot=Ot, w0=w0, wa=wa) + da = angularDiameter(z, Om=Om, Ot=Ot, w0=w0, wa=wa) + return ez*da/z + + +# returns average expected void stretch for a given redshift range +def aveStretch(zStart, zEnd, Om = 0.27, Ot = 1.0, w0 = -1.0, wa = 0.0): + if zStart == 0.0: zStart = 1.e-6 + ave = integrate.quad(expectedStretch, zStart, zEnd, args=(Om, Ot, w0, wa))[0] + ave /= (zEnd-zStart) + return ave + +# ----------------------------------------------------------------------------- +# returns average expected void stretch for a given redshift range +# assuming a cone +def aveStretchCone(zStart, zEnd, skyFrac = 0.19, Om = 0.27, Ot = 1.0, + w0 = -1.0, wa = 0.0): + if zStart == 0.0: zStart = 1.e-6 + + h1 = zStart + h2 = zEnd + + r1 = skyFrac * 4* np.pi * zStart**2 + r2 = skyFrac * 4 * np.pi * zEnd**2 + + # surface area of a slice within a cone + def coneSlice(x, h, r): + return np.pi * (r/h*x)**2 + + def coneFunc(z, h, r, Om = 0.27, Ot = 1.0, w0 = -1.0, wa = 0.0): + return coneSlice(z, h, r) * expectedStretch(z, Om, Ot, w0, wa) + + aveHigh = integrate.quad(coneFunc, 0.0, zEnd, args=(h2, r2, Om, Ot, w0, wa), full_output=1)[0] + aveLow = integrate.quad(coneFunc, 0.0, zStart, args=(h1, r1, Om, Ot, w0, wa), full_output=1)[0] + volumeHigh = integrate.quad(coneSlice, 0.0, zEnd, args=(h2, r2))[0] + volumeLow = integrate.quad(coneSlice, 0.0, zStart, args=(h1, r1))[0] + + return (aveHigh-aveLow)/(volumeHigh-volumeLow) + +# ----------------------------------------------------------------------------- +# returns average expected void stretch for a given redshift range +# weighted by an actual void distribution +def aveWeightedStretch(zStart, zEnd, skyFrac = 0.19, Om = 0.27, Ot = 1.0, + w0 = -1.0, wa = 0.0, dist=None, bins=None): + if zStart == 0.0: zStart = 1.e-6 + + def weightedSlice(x): + return np.interp(x, bins[:-1], dist) + + def weightedFunc(z, Om = 0.27, Ot = 1.0, w0 = -1.0, wa = 0.0): + return expectedStretch(z, Om, Ot, w0, wa) *\ + weightedSlice(z) + + ave = integrate.quad(weightedFunc, zStart, zEnd, args=(Om, Ot, w0, wa), + full_output=1)[0] + + volume = integrate.quad(weightedSlice, zStart, zEnd, full_output=1)[0] + + return ave/volume + + +# ----------------------------------------------------------------------------- +# returns average expected expansion for a given redshift range +def aveExpansion(zStart, zEnd, Om = 0.27, Ot = 1.0, w0 = -1.0, wa = 0.0): + if zStart == 0.0: zStart = 1.e-6 + ave = integrate.quad(expansion, zStart, zEnd, args=(Om, Ot, w0, wa))[0] + ave = (zEnd-zStart)/ave + return ave + + diff --git a/python_tools/void_python_tools/apTools/chi2/velocityProfileFitNative.c b/python_tools/void_python_tools/apTools/chi2/velocityProfileFitNative.c new file mode 100644 index 0000000..6c7837c --- /dev/null +++ b/python_tools/void_python_tools/apTools/chi2/velocityProfileFitNative.c @@ -0,0 +1,10841 @@ +/* Generated by Cython 0.15.1 on Wed Oct 31 08:41:16 2012 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#else + +#include /* For offsetof */ +#ifndef offsetof +#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif + +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif + +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif + +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif + +#if PY_VERSION_HEX < 0x02040000 + #define METH_COEXIST 0 + #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) + #define PyDict_Contains(d,o) PySequence_Contains(d,o) +#endif + +#if PY_VERSION_HEX < 0x02050000 + typedef int Py_ssize_t; + #define PY_SSIZE_T_MAX INT_MAX + #define PY_SSIZE_T_MIN INT_MIN + #define PY_FORMAT_SIZE_T "" + #define PyInt_FromSsize_t(z) PyInt_FromLong(z) + #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) + #define PyNumber_Index(o) PyNumber_Int(o) + #define PyIndex_Check(o) PyNumber_Check(o) + #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) +#endif + +#if PY_VERSION_HEX < 0x02060000 + #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) + #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) + #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) + #define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, + #define PyType_Modified(t) + + typedef struct { + void *buf; + PyObject *obj; + Py_ssize_t len; + Py_ssize_t itemsize; + int readonly; + int ndim; + char *format; + Py_ssize_t *shape; + Py_ssize_t *strides; + Py_ssize_t *suboffsets; + void *internal; + } Py_buffer; + + #define PyBUF_SIMPLE 0 + #define PyBUF_WRITABLE 0x0001 + #define PyBUF_FORMAT 0x0004 + #define PyBUF_ND 0x0008 + #define PyBUF_STRIDES (0x0010 | PyBUF_ND) + #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) + #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) + #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) + #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) + +#endif + +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#endif + +#if PY_MAJOR_VERSION >= 3 + #define Py_TPFLAGS_CHECKTYPES 0 + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif + +#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif + +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#endif + +#if PY_VERSION_HEX < 0x02060000 + #define PyBytesObject PyStringObject + #define PyBytes_Type PyString_Type + #define PyBytes_Check PyString_Check + #define PyBytes_CheckExact PyString_CheckExact + #define PyBytes_FromString PyString_FromString + #define PyBytes_FromStringAndSize PyString_FromStringAndSize + #define PyBytes_FromFormat PyString_FromFormat + #define PyBytes_DecodeEscape PyString_DecodeEscape + #define PyBytes_AsString PyString_AsString + #define PyBytes_AsStringAndSize PyString_AsStringAndSize + #define PyBytes_Size PyString_Size + #define PyBytes_AS_STRING PyString_AS_STRING + #define PyBytes_GET_SIZE PyString_GET_SIZE + #define PyBytes_Repr PyString_Repr + #define PyBytes_Concat PyString_Concat + #define PyBytes_ConcatAndDel PyString_ConcatAndDel +#endif + +#if PY_VERSION_HEX < 0x02060000 + #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) + #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif + +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) + +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask +#endif + +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif + +#if PY_VERSION_HEX < 0x03020000 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif + + +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif + +#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) + #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) + #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) + #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) +#else + #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) + #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) + #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) +#endif + +#if PY_MAJOR_VERSION >= 3 + #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) +#endif + +#if PY_VERSION_HEX < 0x02050000 + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) +#else + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) +#endif + +#if PY_VERSION_HEX < 0x02050000 + #define __Pyx_NAMESTR(n) ((char *)(n)) + #define __Pyx_DOCSTR(n) ((char *)(n)) +#else + #define __Pyx_NAMESTR(n) (n) + #define __Pyx_DOCSTR(n) (n) +#endif + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) +#define _USE_MATH_DEFINES +#endif +#include +#define __PYX_HAVE__voidProject__apTools__chi2__velocityProfileFitNative +#define __PYX_HAVE_API__voidProject__apTools__chi2__velocityProfileFitNative +#include "stdio.h" +#include "stdlib.h" +#include "numpy/arrayobject.h" +#include "numpy/ufuncobject.h" +#include "gsl/gsl_sf_erf.h" +#include "math.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#ifdef PYREX_WITHOUT_ASSERTIONS +#define CYTHON_WITHOUT_ASSERTIONS +#endif + + +/* inline attribute */ +#ifndef CYTHON_INLINE + #if defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +/* unused attribute */ +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || defined(__INTEL_COMPILER) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif + +typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ + + +/* Type Conversion Predeclarations */ + +#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s) +#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s)) + +#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) +#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); + +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); + +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) + + +#ifdef __GNUC__ + /* Test for GCC > 2.95 */ + #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #else /* __GNUC__ > 2 ... */ + #define likely(x) (x) + #define unlikely(x) (x) + #endif /* __GNUC__ > 2 ... */ +#else /* __GNUC__ */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ + +static PyObject *__pyx_m; +static PyObject *__pyx_b; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif defined(_Complex_I) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif + +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + +static const char *__pyx_f[] = { + "velocityProfileFitNative.pyx", + "numpy.pxd", +}; + +/* "numpy.pxd":719 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ +typedef npy_int8 __pyx_t_5numpy_int8_t; + +/* "numpy.pxd":720 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ +typedef npy_int16 __pyx_t_5numpy_int16_t; + +/* "numpy.pxd":721 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ +typedef npy_int32 __pyx_t_5numpy_int32_t; + +/* "numpy.pxd":722 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ +typedef npy_int64 __pyx_t_5numpy_int64_t; + +/* "numpy.pxd":726 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +/* "numpy.pxd":727 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +/* "numpy.pxd":728 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +/* "numpy.pxd":729 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +/* "numpy.pxd":733 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ +typedef npy_float32 __pyx_t_5numpy_float32_t; + +/* "numpy.pxd":734 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ +typedef npy_float64 __pyx_t_5numpy_float64_t; + +/* "numpy.pxd":743 + * # The int types are mapped a bit surprising -- + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t + */ +typedef npy_long __pyx_t_5numpy_int_t; + +/* "numpy.pxd":744 + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong longlong_t + * + */ +typedef npy_longlong __pyx_t_5numpy_long_t; + +/* "numpy.pxd":745 + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_ulong uint_t + */ +typedef npy_longlong __pyx_t_5numpy_longlong_t; + +/* "numpy.pxd":747 + * ctypedef npy_longlong longlong_t + * + * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t + */ +typedef npy_ulong __pyx_t_5numpy_uint_t; + +/* "numpy.pxd":748 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +/* "numpy.pxd":749 + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ +typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; + +/* "numpy.pxd":751 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "numpy.pxd":752 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "numpy.pxd":754 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ +typedef npy_double __pyx_t_5numpy_float_t; + +/* "numpy.pxd":755 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "numpy.pxd":756 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cfloat cfloat_t + */ +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":8 + * + * DTYPE = np.double + * ctypedef np.double_t DTYPE_t # <<<<<<<<<<<<<< + * + * + */ +typedef __pyx_t_5numpy_double_t __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t; + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif + +/*--- Type declarations ---*/ + +/* "numpy.pxd":758 + * ctypedef npy_longdouble longdouble_t + * + * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t + */ +typedef npy_cfloat __pyx_t_5numpy_cfloat_t; + +/* "numpy.pxd":759 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +/* "numpy.pxd":760 + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cdouble complex_t + */ +typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; + +/* "numpy.pxd":762 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ +typedef npy_cdouble __pyx_t_5numpy_complex_t; + + +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif + +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; + #define __Pyx_RefNannySetupContext(name) __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) + #define __Pyx_RefNannyFinishContext() __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif /* CYTHON_REFNANNY */ + +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ + +/* Run-time type information about structs used with buffers */ +struct __Pyx_StructField_; + +typedef struct { + const char* name; /* for error messages only */ + struct __Pyx_StructField_* fields; + size_t size; /* sizeof(type) */ + char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject */ +} __Pyx_TypeInfo; + +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; + +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; + + +static CYTHON_INLINE int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); + +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ + +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ +#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0) + +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ + +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, PyObject* kw_name); /*proto*/ + +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ + +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ + +static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact); /*proto*/ + +static void __Pyx_RaiseBufferFallbackError(void); /*proto*/ + +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/ +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); +static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else +#define __Pyx_GetBuffer PyObject_GetBuffer +#define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + +Py_ssize_t __Pyx_zeros[] = {0}; +Py_ssize_t __Pyx_minusones[] = {-1}; + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/ + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif + +#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + +#if CYTHON_CCOMPLEX + #define __Pyx_c_eqf(a, b) ((a)==(b)) + #define __Pyx_c_sumf(a, b) ((a)+(b)) + #define __Pyx_c_difff(a, b) ((a)-(b)) + #define __Pyx_c_prodf(a, b) ((a)*(b)) + #define __Pyx_c_quotf(a, b) ((a)/(b)) + #define __Pyx_c_negf(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zerof(z) ((z)==(float)0) + #define __Pyx_c_conjf(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_absf(z) (::std::abs(z)) + #define __Pyx_c_powf(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zerof(z) ((z)==0) + #define __Pyx_c_conjf(z) (conjf(z)) + #if 1 + #define __Pyx_c_absf(z) (cabsf(z)) + #define __Pyx_c_powf(a, b) (cpowf(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); + static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); + #if 1 + static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); + #endif +#endif + +static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + +#if CYTHON_CCOMPLEX + #define __Pyx_c_eq(a, b) ((a)==(b)) + #define __Pyx_c_sum(a, b) ((a)+(b)) + #define __Pyx_c_diff(a, b) ((a)-(b)) + #define __Pyx_c_prod(a, b) ((a)*(b)) + #define __Pyx_c_quot(a, b) ((a)/(b)) + #define __Pyx_c_neg(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero(z) ((z)==(double)0) + #define __Pyx_c_conj(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs(z) (::std::abs(z)) + #define __Pyx_c_pow(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero(z) ((z)==0) + #define __Pyx_c_conj(z) (conj(z)) + #if 1 + #define __Pyx_c_abs(z) (cabs(z)) + #define __Pyx_c_pow(a, b) (cpow(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); + #if 1 + static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); + #endif +#endif + +static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); + +static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); + +static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); + +static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); + +static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); + +static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); + +static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); + +static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); + +static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); + +static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); + +static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); + +static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); + +static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); + +static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); + +static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); + +static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); + +static int __Pyx_check_binary_version(void); + +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/ + +static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ + +static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno, + int __pyx_lineno, const char *__pyx_filename); /*proto*/ + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ + +/* Module declarations from 'cython.cython.view' */ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'libc.stdlib' */ + +/* Module declarations from 'numpy' */ + +/* Module declarations from 'numpy' */ +static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; +static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; +static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *, PyObject *); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *, PyObject *, PyObject *); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *, PyObject *, PyObject *, PyObject *); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *, PyObject *, PyObject *, PyObject *, PyObject *); /*proto*/ +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *, PyObject *); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *); /*proto*/ + +/* Module declarations from 'voidProject.apTools.chi2.velocityProfileFitNative' */ +static __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_2pi; +static __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sq2; +static __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_pi_2; +static PyObject *__pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(PyObject *, PyArrayObject *, PyArrayObject *); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t), 'R' }; +#define __Pyx_MODULE_NAME "voidProject.apTools.chi2.velocityProfileFitNative" +int __pyx_module_is_main_voidProject__apTools__chi2__velocityProfileFitNative = 0; + +/* Implementation of 'voidProject.apTools.chi2.velocityProfileFitNative' */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_RuntimeError; +static char __pyx_k_1[] = "Invalid type for x_a or x_b"; +static char __pyx_k_3[] = "ndarray is not C contiguous"; +static char __pyx_k_5[] = "ndarray is not Fortran contiguous"; +static char __pyx_k_7[] = "Non-native byte order not supported"; +static char __pyx_k_9[] = "unknown dtype code in numpy.pxd (%d)"; +static char __pyx_k_10[] = "Format string allocated too short, see comment in numpy.pxd"; +static char __pyx_k_13[] = "Format string allocated too short."; +static char __pyx_k_15[] = "chi2_ellipsoid_aniso"; +static char __pyx_k_16[] = "chi2_ellipsoid_aniso2"; +static char __pyx_k_17[] = "chi2_ellipsoid_aniso3"; +static char __pyx_k_18[] = "chi2_ellipsoid_aniso4"; +static char __pyx_k_19[] = "chi2_ellipsoid_aniso5"; +static char __pyx_k_20[] = "chi2_ellipsoid_aniso6"; +static char __pyx_k_21[] = "voidProject.apTools.chi2.velocityProfileFitNative"; +static char __pyx_k__B[] = "B"; +static char __pyx_k__H[] = "H"; +static char __pyx_k__I[] = "I"; +static char __pyx_k__L[] = "L"; +static char __pyx_k__N[] = "N"; +static char __pyx_k__O[] = "O"; +static char __pyx_k__Q[] = "Q"; +static char __pyx_k__b[] = "b"; +static char __pyx_k__d[] = "d"; +static char __pyx_k__f[] = "f"; +static char __pyx_k__g[] = "g"; +static char __pyx_k__h[] = "h"; +static char __pyx_k__i[] = "i"; +static char __pyx_k__l[] = "l"; +static char __pyx_k__p[] = "p"; +static char __pyx_k__q[] = "q"; +static char __pyx_k__Zd[] = "Zd"; +static char __pyx_k__Zf[] = "Zf"; +static char __pyx_k__Zg[] = "Zg"; +static char __pyx_k__np[] = "np"; +static char __pyx_k__pi[] = "pi"; +static char __pyx_k__x_a[] = "x_a"; +static char __pyx_k__x_b[] = "x_b"; +static char __pyx_k__data[] = "data"; +static char __pyx_k__size[] = "size"; +static char __pyx_k__DTYPE[] = "DTYPE"; +static char __pyx_k__array[] = "array"; +static char __pyx_k__dtype[] = "dtype"; +static char __pyx_k__empty[] = "empty"; +static char __pyx_k__numpy[] = "numpy"; +static char __pyx_k__range[] = "range"; +static char __pyx_k__shape[] = "shape"; +static char __pyx_k__double[] = "double"; +static char __pyx_k____all__[] = "__all__"; +static char __pyx_k__reshape[] = "reshape"; +static char __pyx_k____main__[] = "__main__"; +static char __pyx_k____test__[] = "__test__"; +static char __pyx_k__ValueError[] = "ValueError"; +static char __pyx_k__RuntimeError[] = "RuntimeError"; +static char __pyx_k__ellipsoid_fun[] = "ellipsoid_fun"; +static char __pyx_k__chi2_ellipsoid[] = "chi2_ellipsoid"; +static PyObject *__pyx_kp_s_1; +static PyObject *__pyx_kp_u_10; +static PyObject *__pyx_kp_u_13; +static PyObject *__pyx_n_s_15; +static PyObject *__pyx_n_s_16; +static PyObject *__pyx_n_s_17; +static PyObject *__pyx_n_s_18; +static PyObject *__pyx_n_s_19; +static PyObject *__pyx_n_s_20; +static PyObject *__pyx_n_s_21; +static PyObject *__pyx_kp_u_3; +static PyObject *__pyx_kp_u_5; +static PyObject *__pyx_kp_u_7; +static PyObject *__pyx_kp_u_9; +static PyObject *__pyx_n_s__DTYPE; +static PyObject *__pyx_n_s__N; +static PyObject *__pyx_n_s__RuntimeError; +static PyObject *__pyx_n_s__ValueError; +static PyObject *__pyx_n_s____all__; +static PyObject *__pyx_n_s____main__; +static PyObject *__pyx_n_s____test__; +static PyObject *__pyx_n_s__array; +static PyObject *__pyx_n_s__chi2_ellipsoid; +static PyObject *__pyx_n_s__data; +static PyObject *__pyx_n_s__double; +static PyObject *__pyx_n_s__dtype; +static PyObject *__pyx_n_s__ellipsoid_fun; +static PyObject *__pyx_n_s__empty; +static PyObject *__pyx_n_s__np; +static PyObject *__pyx_n_s__numpy; +static PyObject *__pyx_n_s__p; +static PyObject *__pyx_n_s__pi; +static PyObject *__pyx_n_s__range; +static PyObject *__pyx_n_s__reshape; +static PyObject *__pyx_n_s__shape; +static PyObject *__pyx_n_s__size; +static PyObject *__pyx_n_s__x_a; +static PyObject *__pyx_n_s__x_b; +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_2; +static PyObject *__pyx_int_15; +static PyObject *__pyx_int_50; +static PyObject *__pyx_k_tuple_2; +static PyObject *__pyx_k_tuple_4; +static PyObject *__pyx_k_tuple_6; +static PyObject *__pyx_k_tuple_8; +static PyObject *__pyx_k_tuple_11; +static PyObject *__pyx_k_tuple_12; +static PyObject *__pyx_k_tuple_14; + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":36 + * + * @cython.boundscheck(False) + * cdef ellipsoid_fun_internal(p, np.ndarray[DTYPE_t,ndim=1] x_a, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_b): + * cdef int N = x_a.size + */ + +static PyObject *__pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(PyObject *__pyx_v_p, PyArrayObject *__pyx_v_x_a, PyArrayObject *__pyx_v_x_b) { + int __pyx_v_N; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_A; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_b; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_c; + PyArrayObject *__pyx_v_out_a = 0; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_d2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_tmp_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_tmp_b; + float __pyx_v_pval; + int __pyx_v_i; + Py_buffer __pyx_bstruct_x_b; + Py_ssize_t __pyx_bstride_0_x_b = 0; + Py_ssize_t __pyx_bshape_0_x_b = 0; + Py_buffer __pyx_bstruct_out_a; + Py_ssize_t __pyx_bstride_0_out_a = 0; + Py_ssize_t __pyx_bshape_0_out_a = 0; + Py_buffer __pyx_bstruct_x_a; + Py_ssize_t __pyx_bstride_0_x_a = 0; + Py_ssize_t __pyx_bshape_0_x_a = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_6 = NULL; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *(*__pyx_t_11)(PyObject *); + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_12; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_13; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_14; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ellipsoid_fun_internal"); + __pyx_bstruct_out_a.buf = NULL; + __pyx_bstruct_x_a.buf = NULL; + __pyx_bstruct_x_b.buf = NULL; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_a, (PyObject*)__pyx_v_x_a, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_a = __pyx_bstruct_x_a.strides[0]; + __pyx_bshape_0_x_a = __pyx_bstruct_x_a.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_b, (PyObject*)__pyx_v_x_b, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_b = __pyx_bstruct_x_b.strides[0]; + __pyx_bshape_0_x_b = __pyx_bstruct_x_b.shape[0]; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":38 + * cdef ellipsoid_fun_internal(p, np.ndarray[DTYPE_t,ndim=1] x_a, + * np.ndarray[DTYPE_t,ndim=1] x_b): + * cdef int N = x_a.size # <<<<<<<<<<<<<< + * cdef DTYPE_t A, a, b, c, c2 + * cdef np.ndarray[DTYPE_t,ndim=1] out_a = np.empty(N, dtype=DTYPE) + */ + __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_x_a), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_N = __pyx_t_2; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":40 + * cdef int N = x_a.size + * cdef DTYPE_t A, a, b, c, c2 + * cdef np.ndarray[DTYPE_t,ndim=1] out_a = np.empty(N, dtype=DTYPE) # <<<<<<<<<<<<<< + * cdef DTYPE_t d2, tmp_a, tmp_b + * cdef float pval + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromLong(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_out_a, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_out_a = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_out_a.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_bstride_0_out_a = __pyx_bstruct_out_a.strides[0]; + __pyx_bshape_0_out_a = __pyx_bstruct_out_a.shape[0]; + } + } + __pyx_t_6 = 0; + __pyx_v_out_a = ((PyArrayObject *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":43 + * cdef DTYPE_t d2, tmp_a, tmp_b + * cdef float pval + * assert x_a.dtype == DTYPE and x_b.dtype == DTYPE # <<<<<<<<<<<<<< + * + * # TEST + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_x_a), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_1, Py_EQ); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_7) { + __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_x_b), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_1, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_9 = __pyx_t_8; + } else { + __pyx_t_9 = __pyx_t_7; + } + if (unlikely(!__pyx_t_9)) { + PyErr_SetNone(PyExc_AssertionError); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + #endif + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":47 + * # TEST + * #pval = 3 + * pval = 2 # <<<<<<<<<<<<<< + * A,a,b,c = p + * + */ + __pyx_v_pval = 2.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":48 + * #pval = 3 + * pval = 2 + * A,a,b,c = p # <<<<<<<<<<<<<< + * + * for i in range(N): + */ + if ((likely(PyTuple_CheckExact(__pyx_v_p))) || (PyList_CheckExact(__pyx_v_p))) { + PyObject* sequence = __pyx_v_p; + if (likely(PyTuple_CheckExact(sequence))) { + if (unlikely(PyTuple_GET_SIZE(sequence) != 4)) { + if (PyTuple_GET_SIZE(sequence) > 4) __Pyx_RaiseTooManyValuesError(4); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); + } else { + if (unlikely(PyList_GET_SIZE(sequence) != 4)) { + if (PyList_GET_SIZE(sequence) > 4) __Pyx_RaiseTooManyValuesError(4); + else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + __pyx_t_4 = PyList_GET_ITEM(sequence, 2); + __pyx_t_3 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + } else { + Py_ssize_t index = -1; + __pyx_t_10 = PyObject_GetIter(__pyx_v_p); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext; + index = 0; __pyx_t_5 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + index = 1; __pyx_t_1 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 2; __pyx_t_4 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 3; __pyx_t_3 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); + if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L4_unpacking_done:; + } + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_12 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_13 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_15 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_A = __pyx_t_12; + __pyx_v_a = __pyx_t_13; + __pyx_v_b = __pyx_t_14; + __pyx_v_c = __pyx_t_15; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":50 + * A,a,b,c = p + * + * for i in range(N): # <<<<<<<<<<<<<< + * tmp_a = x_a[i] + * tmp_b = x_b[i] + */ + __pyx_t_2 = __pyx_v_N; + for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_2; __pyx_t_16+=1) { + __pyx_v_i = __pyx_t_16; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":51 + * + * for i in range(N): + * tmp_a = x_a[i] # <<<<<<<<<<<<<< + * tmp_b = x_b[i] + * + */ + __pyx_t_17 = __pyx_v_i; + if (__pyx_t_17 < 0) __pyx_t_17 += __pyx_bshape_0_x_a; + __pyx_v_tmp_a = (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_17, __pyx_bstride_0_x_a)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":52 + * for i in range(N): + * tmp_a = x_a[i] + * tmp_b = x_b[i] # <<<<<<<<<<<<<< + * + * tmp_a = tmp_a/a + */ + __pyx_t_18 = __pyx_v_i; + if (__pyx_t_18 < 0) __pyx_t_18 += __pyx_bshape_0_x_b; + __pyx_v_tmp_b = (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_b.buf, __pyx_t_18, __pyx_bstride_0_x_b)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":54 + * tmp_b = x_b[i] + * + * tmp_a = tmp_a/a # <<<<<<<<<<<<<< + * tmp_b = tmp_b/b + * + */ + if (unlikely(__pyx_v_a == 0)) { + PyErr_Format(PyExc_ZeroDivisionError, "float division"); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_v_tmp_a = (__pyx_v_tmp_a / __pyx_v_a); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":55 + * + * tmp_a = tmp_a/a + * tmp_b = tmp_b/b # <<<<<<<<<<<<<< + * + * d2 = c*(A + pow(tmp_a*tmp_a + tmp_b*tmp_b, pval/2.)) + */ + if (unlikely(__pyx_v_b == 0)) { + PyErr_Format(PyExc_ZeroDivisionError, "float division"); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_v_tmp_b = (__pyx_v_tmp_b / __pyx_v_b); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":57 + * tmp_b = tmp_b/b + * + * d2 = c*(A + pow(tmp_a*tmp_a + tmp_b*tmp_b, pval/2.)) # <<<<<<<<<<<<<< + * if d2 > c: + * out_a[i] = c + */ + __pyx_v_d2 = (__pyx_v_c * (__pyx_v_A + pow(((__pyx_v_tmp_a * __pyx_v_tmp_a) + (__pyx_v_tmp_b * __pyx_v_tmp_b)), (__pyx_v_pval / 2.)))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":58 + * + * d2 = c*(A + pow(tmp_a*tmp_a + tmp_b*tmp_b, pval/2.)) + * if d2 > c: # <<<<<<<<<<<<<< + * out_a[i] = c + * else: + */ + __pyx_t_9 = (__pyx_v_d2 > __pyx_v_c); + if (__pyx_t_9) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":59 + * d2 = c*(A + pow(tmp_a*tmp_a + tmp_b*tmp_b, pval/2.)) + * if d2 > c: + * out_a[i] = c # <<<<<<<<<<<<<< + * else: + * out_a[i] = d2 + */ + __pyx_t_19 = __pyx_v_i; + if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_bshape_0_out_a; + *__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_out_a.buf, __pyx_t_19, __pyx_bstride_0_out_a) = __pyx_v_c; + goto __pyx_L7; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":61 + * out_a[i] = c + * else: + * out_a[i] = d2 # <<<<<<<<<<<<<< + * + * return out_a + */ + __pyx_t_20 = __pyx_v_i; + if (__pyx_t_20 < 0) __pyx_t_20 += __pyx_bshape_0_out_a; + *__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_out_a.buf, __pyx_t_20, __pyx_bstride_0_out_a) = __pyx_v_d2; + } + __pyx_L7:; + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":63 + * out_a[i] = d2 + * + * return out_a # <<<<<<<<<<<<<< + * + * def ellipsoid_fun(p, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_out_a)); + __pyx_r = ((PyObject *)__pyx_v_out_a); + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_10); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_out_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.ellipsoid_fun_internal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_out_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_out_a); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":65 + * return out_a + * + * def ellipsoid_fun(p, # <<<<<<<<<<<<<< + * x_a, + * x_b): + */ + +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun = {__Pyx_NAMESTR("ellipsoid_fun"), (PyCFunction)__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_p = 0; + PyObject *__pyx_v_x_a = 0; + PyObject *__pyx_v_x_b = 0; + PyObject *__pyx_v_out_shape = NULL; + PyObject *__pyx_v_out = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__x_a,&__pyx_n_s__x_b,0}; + __Pyx_RefNannySetupContext("ellipsoid_fun"); + __pyx_self = __pyx_self; + { + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_a); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("ellipsoid_fun", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_b); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("ellipsoid_fun", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "ellipsoid_fun") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v_p = values[0]; + __pyx_v_x_a = values[1]; + __pyx_v_x_b = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("ellipsoid_fun", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.ellipsoid_fun", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __Pyx_INCREF(__pyx_v_x_a); + __Pyx_INCREF(__pyx_v_x_b); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":69 + * x_b): + * + * if (type(x_a) != np.ndarray) or (type(x_b) != np.ndarray): # <<<<<<<<<<<<<< + * raise ValueError("Invalid type for x_a or x_b"); + * + */ + __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_x_a)), ((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), Py_NE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!__pyx_t_2) { + __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_x_b)), ((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), Py_NE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __pyx_t_3; + } else { + __pyx_t_4 = __pyx_t_2; + } + if (__pyx_t_4) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":70 + * + * if (type(x_a) != np.ndarray) or (type(x_b) != np.ndarray): + * raise ValueError("Invalid type for x_a or x_b"); # <<<<<<<<<<<<<< + * + * if x_a.dtype != DTYPE: + */ + __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L6; + } + __pyx_L6:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":72 + * raise ValueError("Invalid type for x_a or x_b"); + * + * if x_a.dtype != DTYPE: # <<<<<<<<<<<<<< + * x_a = np.array(x_a, dtype=DTYPE) + * + */ + __pyx_t_1 = PyObject_GetAttr(__pyx_v_x_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_NE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_4) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":73 + * + * if x_a.dtype != DTYPE: + * x_a = np.array(x_a, dtype=DTYPE) # <<<<<<<<<<<<<< + * + * if x_b.dtype != DTYPE: + */ + __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__array); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_v_x_a); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_x_a); + __Pyx_GIVEREF(__pyx_v_x_a); + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyEval_CallObjectWithKeywords(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_v_x_a); + __pyx_v_x_a = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L7; + } + __pyx_L7:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":75 + * x_a = np.array(x_a, dtype=DTYPE) + * + * if x_b.dtype != DTYPE: # <<<<<<<<<<<<<< + * x_b = np.array(x_b, dtype=DTYPE) + * + */ + __pyx_t_7 = PyObject_GetAttr(__pyx_v_x_b, __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_7, __pyx_t_1, Py_NE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_4) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":76 + * + * if x_b.dtype != DTYPE: + * x_b = np.array(x_b, dtype=DTYPE) # <<<<<<<<<<<<<< + * + * out_shape = 0 + */ + __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_v_x_b); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_x_b); + __Pyx_GIVEREF(__pyx_v_x_b); + __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_7)); + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_v_x_b); + __pyx_v_x_b = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L8; + } + __pyx_L8:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":78 + * x_b = np.array(x_b, dtype=DTYPE) + * + * out_shape = 0 # <<<<<<<<<<<<<< + * + * if x_a.shape == x_b.shape and len(x_a.shape) > 1: + */ + __Pyx_INCREF(__pyx_int_0); + __pyx_v_out_shape = __pyx_int_0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":80 + * out_shape = 0 + * + * if x_a.shape == x_b.shape and len(x_a.shape) > 1: # <<<<<<<<<<<<<< + * out_shape = x_a.shape + * x_a = x_a.reshape(x_a.size) + */ + __pyx_t_5 = PyObject_GetAttr(__pyx_v_x_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = PyObject_GetAttr(__pyx_v_x_b, __pyx_n_s__shape); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_t_7, Py_EQ); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_4) { + __pyx_t_6 = PyObject_GetAttr(__pyx_v_x_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_2 = (__pyx_t_8 > 1); + __pyx_t_3 = __pyx_t_2; + } else { + __pyx_t_3 = __pyx_t_4; + } + if (__pyx_t_3) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":81 + * + * if x_a.shape == x_b.shape and len(x_a.shape) > 1: + * out_shape = x_a.shape # <<<<<<<<<<<<<< + * x_a = x_a.reshape(x_a.size) + * x_b = x_b.reshape(x_b.size) + */ + __pyx_t_6 = PyObject_GetAttr(__pyx_v_x_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_v_out_shape); + __pyx_v_out_shape = __pyx_t_6; + __pyx_t_6 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":82 + * if x_a.shape == x_b.shape and len(x_a.shape) > 1: + * out_shape = x_a.shape + * x_a = x_a.reshape(x_a.size) # <<<<<<<<<<<<<< + * x_b = x_b.reshape(x_b.size) + * + */ + __pyx_t_6 = PyObject_GetAttr(__pyx_v_x_a, __pyx_n_s__reshape); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyObject_GetAttr(__pyx_v_x_a, __pyx_n_s__size); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_5)); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_v_x_a); + __pyx_v_x_a = __pyx_t_7; + __pyx_t_7 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":83 + * out_shape = x_a.shape + * x_a = x_a.reshape(x_a.size) + * x_b = x_b.reshape(x_b.size) # <<<<<<<<<<<<<< + * + * out = ellipsoid_fun_internal(p, x_a, x_b) + */ + __pyx_t_7 = PyObject_GetAttr(__pyx_v_x_b, __pyx_n_s__reshape); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = PyObject_GetAttr(__pyx_v_x_b, __pyx_n_s__size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_v_x_b); + __pyx_v_x_b = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L9; + } + __pyx_L9:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":85 + * x_b = x_b.reshape(x_b.size) + * + * out = ellipsoid_fun_internal(p, x_a, x_b) # <<<<<<<<<<<<<< + * + * if out_shape != 0: + */ + if (!(likely(((__pyx_v_x_a) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_x_a, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __pyx_v_x_a; + __Pyx_INCREF(__pyx_t_5); + if (!(likely(((__pyx_v_x_b) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_x_b, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __pyx_v_x_b; + __Pyx_INCREF(__pyx_t_6); + __pyx_t_7 = __pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(__pyx_v_p, ((PyArrayObject *)__pyx_t_5), ((PyArrayObject *)__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_out = __pyx_t_7; + __pyx_t_7 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":87 + * out = ellipsoid_fun_internal(p, x_a, x_b) + * + * if out_shape != 0: # <<<<<<<<<<<<<< + * return out.reshape(out_shape) + * else: + */ + __pyx_t_7 = PyObject_RichCompare(__pyx_v_out_shape, __pyx_int_0, Py_NE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_3) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":88 + * + * if out_shape != 0: + * return out.reshape(out_shape) # <<<<<<<<<<<<<< + * else: + * return out + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = PyObject_GetAttr(__pyx_v_out, __pyx_n_s__reshape); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_v_out_shape); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_out_shape); + __Pyx_GIVEREF(__pyx_v_out_shape); + __pyx_t_5 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + goto __pyx_L10; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":90 + * return out.reshape(out_shape) + * else: + * return out # <<<<<<<<<<<<<< + * + * @cython.boundscheck(False) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_out); + __pyx_r = __pyx_v_out; + goto __pyx_L0; + } + __pyx_L10:; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.ellipsoid_fun", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_out_shape); + __Pyx_XDECREF(__pyx_v_out); + __Pyx_XDECREF(__pyx_v_x_a); + __Pyx_XDECREF(__pyx_v_x_b); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":94 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_1chi2_ellipsoid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_1chi2_ellipsoid = {__Pyx_NAMESTR("chi2_ellipsoid"), (PyCFunction)__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_1chi2_ellipsoid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_1chi2_ellipsoid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_p = 0; + PyArrayObject *__pyx_v_data = 0; + PyArrayObject *__pyx_v_x_a = 0; + PyArrayObject *__pyx_v_x_b = 0; + int __pyx_v_N; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_A; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_b; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_d; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_norm_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_norm; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_err; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_W; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_log_2W; + PyArrayObject *__pyx_v_predicted = 0; + PyObject *__pyx_v_c = NULL; + int __pyx_v_i; + PyObject *__pyx_v_u = NULL; + Py_buffer __pyx_bstruct_x_b; + Py_ssize_t __pyx_bstride_0_x_b = 0; + Py_ssize_t __pyx_bshape_0_x_b = 0; + Py_buffer __pyx_bstruct_x_a; + Py_ssize_t __pyx_bstride_0_x_a = 0; + Py_ssize_t __pyx_bshape_0_x_a = 0; + Py_buffer __pyx_bstruct_data; + Py_ssize_t __pyx_bstride_0_data = 0; + Py_ssize_t __pyx_bshape_0_data = 0; + Py_buffer __pyx_bstruct_predicted; + Py_ssize_t __pyx_bstride_0_predicted = 0; + Py_ssize_t __pyx_bshape_0_predicted = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_10; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_11; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_12; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_13; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_14; + int __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + int __pyx_t_21; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + int __pyx_t_25; + int __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + double __pyx_t_29; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__data,&__pyx_n_s__x_a,&__pyx_n_s__x_b,&__pyx_n_s__N,0}; + __Pyx_RefNannySetupContext("chi2_ellipsoid"); + __pyx_self = __pyx_self; + { + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_a); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_b); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "chi2_ellipsoid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_p = values[0]; + __pyx_v_data = ((PyArrayObject *)values[1]); + __pyx_v_x_a = ((PyArrayObject *)values[2]); + __pyx_v_x_b = ((PyArrayObject *)values[3]); + __pyx_v_N = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_bstruct_predicted.buf = NULL; + __pyx_bstruct_data.buf = NULL; + __pyx_bstruct_x_a.buf = NULL; + __pyx_bstruct_x_b.buf = NULL; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 0, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_a), __pyx_ptype_5numpy_ndarray, 0, "x_a", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_b), __pyx_ptype_5numpy_ndarray, 0, "x_b", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_data, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_data = __pyx_bstruct_data.strides[0]; + __pyx_bshape_0_data = __pyx_bstruct_data.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_a, (PyObject*)__pyx_v_x_a, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_a = __pyx_bstruct_x_a.strides[0]; + __pyx_bshape_0_x_a = __pyx_bstruct_x_a.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_b, (PyObject*)__pyx_v_x_b, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_b = __pyx_bstruct_x_b.strides[0]; + __pyx_bshape_0_x_b = __pyx_bstruct_x_b.shape[0]; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":102 + * cdef DTYPE_t norm_chi2, sloc, sloc2, one_norm + * cdef DTYPE_t one_err, W, log_2W + * cdef np.ndarray[DTYPE_t, ndim=1] predicted = np.empty(N, dtype=DTYPE) # <<<<<<<<<<<<<< + * global sqrt_2pi, sq2 + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromLong(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + __pyx_v_predicted = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_predicted.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":105 + * global sqrt_2pi, sq2 + * + * A,a,b,c,sigma,W=p # <<<<<<<<<<<<<< + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + */ + if ((likely(PyTuple_CheckExact(__pyx_v_p))) || (PyList_CheckExact(__pyx_v_p))) { + PyObject* sequence = __pyx_v_p; + if (likely(PyTuple_CheckExact(sequence))) { + if (unlikely(PyTuple_GET_SIZE(sequence) != 6)) { + if (PyTuple_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 5); + } else { + if (unlikely(PyList_GET_SIZE(sequence) != 6)) { + if (PyList_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + __pyx_t_6 = PyList_GET_ITEM(sequence, 4); + __pyx_t_7 = PyList_GET_ITEM(sequence, 5); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_v_p); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 2; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 3; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 4; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 5; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); + if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L7_unpacking_done:; + } + __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_A = __pyx_t_10; + __pyx_v_a = __pyx_t_11; + __pyx_v_b = __pyx_t_12; + __pyx_v_c = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_sigma = __pyx_t_13; + __pyx_v_W = __pyx_t_14; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":107 + * A,a,b,c,sigma,W=p + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: # <<<<<<<<<<<<<< + * return 0,True + * + */ + __pyx_t_15 = (__pyx_v_A < 0.0); + if (!__pyx_t_15) { + __pyx_t_16 = (__pyx_v_a < 0.0); + if (!__pyx_t_16) { + __pyx_t_17 = (__pyx_v_b < 0.0); + if (!__pyx_t_17) { + __pyx_t_18 = (__pyx_v_sigma < 0.0); + if (!__pyx_t_18) { + __pyx_t_19 = (__pyx_v_W < 0.0); + __pyx_t_20 = __pyx_t_19; + } else { + __pyx_t_20 = __pyx_t_18; + } + __pyx_t_18 = __pyx_t_20; + } else { + __pyx_t_18 = __pyx_t_17; + } + __pyx_t_17 = __pyx_t_18; + } else { + __pyx_t_17 = __pyx_t_16; + } + __pyx_t_16 = __pyx_t_17; + } else { + __pyx_t_16 = __pyx_t_15; + } + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":108 + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + * return 0,True # <<<<<<<<<<<<<< + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_6); + __pyx_t_6 = 0; + goto __pyx_L0; + goto __pyx_L8; + } + __pyx_L8:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":110 + * return 0,True + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) # <<<<<<<<<<<<<< + * + * chi2 = 0 + */ + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_A); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_a); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_b); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_c); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_c); + __Pyx_GIVEREF(__pyx_v_c); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(((PyObject *)__pyx_t_3), ((PyArrayObject *)__pyx_v_x_a), ((PyArrayObject *)__pyx_v_x_b)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_2); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_t_21 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); + if (unlikely(__pyx_t_21 < 0)) { + PyErr_Fetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_v_predicted, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24); + __Pyx_RaiseBufferFallbackError(); + } else { + PyErr_Restore(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + } + __pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + if (unlikely(__pyx_t_21 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_predicted)); + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":112 + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + * + * chi2 = 0 # <<<<<<<<<<<<<< + * norm_chi2 = 0 + * + */ + __pyx_v_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":113 + * + * chi2 = 0 + * norm_chi2 = 0 # <<<<<<<<<<<<<< + * + * log_2W = log(2*W) + */ + __pyx_v_norm_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":115 + * norm_chi2 = 0 + * + * log_2W = log(2*W) # <<<<<<<<<<<<<< + * + * for i in range(N): + */ + __pyx_v_log_2W = log((2.0 * __pyx_v_W)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":117 + * log_2W = log(2*W) + * + * for i in range(N): # <<<<<<<<<<<<<< + * sloc = sigma*sqrt(1/x_a[i]) + * + */ + __pyx_t_21 = __pyx_v_N; + for (__pyx_t_25 = 0; __pyx_t_25 < __pyx_t_21; __pyx_t_25+=1) { + __pyx_v_i = __pyx_t_25; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":118 + * + * for i in range(N): + * sloc = sigma*sqrt(1/x_a[i]) # <<<<<<<<<<<<<< + * + * one_err = fabs(data[i]-predicted[i]) + */ + __pyx_t_26 = __pyx_v_i; + if (__pyx_t_26 < 0) __pyx_t_26 += __pyx_bshape_0_x_a; + __pyx_v_sloc = (__pyx_v_sigma * sqrt((1.0 / (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_26, __pyx_bstride_0_x_a))))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":120 + * sloc = sigma*sqrt(1/x_a[i]) + * + * one_err = fabs(data[i]-predicted[i]) # <<<<<<<<<<<<<< + * + * if (one_err < W): + */ + __pyx_t_27 = __pyx_v_i; + if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_0_data; + __pyx_t_28 = __pyx_v_i; + if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_predicted; + __pyx_v_one_err = fabs(((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_data.buf, __pyx_t_27, __pyx_bstride_0_data)) - (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_28, __pyx_bstride_0_predicted)))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":122 + * one_err = fabs(data[i]-predicted[i]) + * + * if (one_err < W): # <<<<<<<<<<<<<< + * d = W*W + * else: + */ + __pyx_t_16 = (__pyx_v_one_err < __pyx_v_W); + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":123 + * + * if (one_err < W): + * d = W*W # <<<<<<<<<<<<<< + * else: + * d = one_err*one_err + */ + __pyx_v_d = (__pyx_v_W * __pyx_v_W); + goto __pyx_L11; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":125 + * d = W*W + * else: + * d = one_err*one_err # <<<<<<<<<<<<<< + * + * sloc2 = sloc*sloc + */ + __pyx_v_d = (__pyx_v_one_err * __pyx_v_one_err); + } + __pyx_L11:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":127 + * d = one_err*one_err + * + * sloc2 = sloc*sloc # <<<<<<<<<<<<<< + * chi2 = chi2 + d/(sloc2) + * + */ + __pyx_v_sloc2 = (__pyx_v_sloc * __pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":128 + * + * sloc2 = sloc*sloc + * chi2 = chi2 + d/(sloc2) # <<<<<<<<<<<<<< + * + * u = W*W/sloc2 + */ + __pyx_v_chi2 = (__pyx_v_chi2 + (__pyx_v_d / __pyx_v_sloc2)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":130 + * chi2 = chi2 + d/(sloc2) + * + * u = W*W/sloc2 # <<<<<<<<<<<<<< + * if u > 50: + * # We only keep the first term, the second term is totally + */ + __pyx_t_2 = PyFloat_FromDouble(((__pyx_v_W * __pyx_v_W) / __pyx_v_sloc2)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_v_u); + __pyx_v_u = __pyx_t_2; + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":131 + * + * u = W*W/sloc2 + * if u > 50: # <<<<<<<<<<<<<< + * # We only keep the first term, the second term is totally + * # negligible + */ + __pyx_t_2 = PyObject_RichCompare(__pyx_v_u, __pyx_int_50, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":134 + * # We only keep the first term, the second term is totally + * # negligible + * one_norm = -0.5*u + log_2W # <<<<<<<<<<<<<< + * else: + * one_norm = log(2*W*exp(-0.5*u) + \ + */ + __pyx_t_2 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_log_2W); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_one_norm = __pyx_t_14; + goto __pyx_L12; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":136 + * one_norm = -0.5*u + log_2W + * else: + * one_norm = log(2*W*exp(-0.5*u) + \ # <<<<<<<<<<<<<< + * sqrt_2pi*sloc*gsl_sf_erfc(W/(sq2*sloc))) + * + */ + __pyx_t_7 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyNumber_Multiply(__pyx_t_7, __pyx_v_u); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_29 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_29 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":137 + * else: + * one_norm = log(2*W*exp(-0.5*u) + \ + * sqrt_2pi*sloc*gsl_sf_erfc(W/(sq2*sloc))) # <<<<<<<<<<<<<< + * + * norm_chi2 = norm_chi2 + one_norm + */ + __pyx_v_one_norm = log((((2.0 * __pyx_v_W) * exp(__pyx_t_29)) + ((__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_2pi * __pyx_v_sloc) * gsl_sf_erfc((__pyx_v_W / (__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sq2 * __pyx_v_sloc)))))); + } + __pyx_L12:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":139 + * sqrt_2pi*sloc*gsl_sf_erfc(W/(sq2*sloc))) + * + * norm_chi2 = norm_chi2 + one_norm # <<<<<<<<<<<<<< + * + * return chi2 + 2*norm_chi2, False + */ + __pyx_v_norm_chi2 = (__pyx_v_norm_chi2 + __pyx_v_one_norm); + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":141 + * norm_chi2 = norm_chi2 + one_norm + * + * return chi2 + 2*norm_chi2, False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyFloat_FromDouble((__pyx_v_chi2 + (2.0 * __pyx_v_norm_chi2))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_2 = 0; + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_predicted); + __Pyx_XDECREF(__pyx_v_c); + __Pyx_XDECREF(__pyx_v_u); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":146 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_2chi2_ellipsoid_aniso(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_2chi2_ellipsoid_aniso = {__Pyx_NAMESTR("chi2_ellipsoid_aniso"), (PyCFunction)__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_2chi2_ellipsoid_aniso, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_2chi2_ellipsoid_aniso(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_p = 0; + PyArrayObject *__pyx_v_data = 0; + PyArrayObject *__pyx_v_x_a = 0; + PyArrayObject *__pyx_v_x_b = 0; + int __pyx_v_N; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_A; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_b; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_d; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sqrt_x_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_norm_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_norm; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_err; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_W; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_Wloc; + PyArrayObject *__pyx_v_predicted = 0; + PyObject *__pyx_v_c = NULL; + int __pyx_v_i; + PyObject *__pyx_v_u = NULL; + Py_buffer __pyx_bstruct_x_b; + Py_ssize_t __pyx_bstride_0_x_b = 0; + Py_ssize_t __pyx_bshape_0_x_b = 0; + Py_buffer __pyx_bstruct_x_a; + Py_ssize_t __pyx_bstride_0_x_a = 0; + Py_ssize_t __pyx_bshape_0_x_a = 0; + Py_buffer __pyx_bstruct_data; + Py_ssize_t __pyx_bstride_0_data = 0; + Py_ssize_t __pyx_bshape_0_data = 0; + Py_buffer __pyx_bstruct_predicted; + Py_ssize_t __pyx_bstride_0_predicted = 0; + Py_ssize_t __pyx_bshape_0_predicted = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_10; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_11; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_12; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_13; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_14; + int __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + int __pyx_t_21; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + int __pyx_t_25; + int __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + double __pyx_t_29; + double __pyx_t_30; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__data,&__pyx_n_s__x_a,&__pyx_n_s__x_b,&__pyx_n_s__N,0}; + __Pyx_RefNannySetupContext("chi2_ellipsoid_aniso"); + __pyx_self = __pyx_self; + { + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_a); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_b); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "chi2_ellipsoid_aniso") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_p = values[0]; + __pyx_v_data = ((PyArrayObject *)values[1]); + __pyx_v_x_a = ((PyArrayObject *)values[2]); + __pyx_v_x_b = ((PyArrayObject *)values[3]); + __pyx_v_N = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_bstruct_predicted.buf = NULL; + __pyx_bstruct_data.buf = NULL; + __pyx_bstruct_x_a.buf = NULL; + __pyx_bstruct_x_b.buf = NULL; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 0, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_a), __pyx_ptype_5numpy_ndarray, 0, "x_a", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_b), __pyx_ptype_5numpy_ndarray, 0, "x_b", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_data, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_data = __pyx_bstruct_data.strides[0]; + __pyx_bshape_0_data = __pyx_bstruct_data.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_a, (PyObject*)__pyx_v_x_a, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_a = __pyx_bstruct_x_a.strides[0]; + __pyx_bshape_0_x_a = __pyx_bstruct_x_a.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_b, (PyObject*)__pyx_v_x_b, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_b = __pyx_bstruct_x_b.strides[0]; + __pyx_bshape_0_x_b = __pyx_bstruct_x_b.shape[0]; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":154 + * cdef DTYPE_t norm_chi2, sloc, sloc2, one_norm + * cdef DTYPE_t one_err, W, Wloc + * cdef np.ndarray[DTYPE_t, ndim=1] predicted = np.empty(N, dtype=DTYPE) # <<<<<<<<<<<<<< + * global sqrt_2pi, sq2 + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromLong(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + __pyx_v_predicted = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_predicted.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":157 + * global sqrt_2pi, sq2 + * + * A,a,b,c,sigma,W=p # <<<<<<<<<<<<<< + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + */ + if ((likely(PyTuple_CheckExact(__pyx_v_p))) || (PyList_CheckExact(__pyx_v_p))) { + PyObject* sequence = __pyx_v_p; + if (likely(PyTuple_CheckExact(sequence))) { + if (unlikely(PyTuple_GET_SIZE(sequence) != 6)) { + if (PyTuple_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 5); + } else { + if (unlikely(PyList_GET_SIZE(sequence) != 6)) { + if (PyList_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + __pyx_t_6 = PyList_GET_ITEM(sequence, 4); + __pyx_t_7 = PyList_GET_ITEM(sequence, 5); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_v_p); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 2; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 3; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 4; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 5; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); + if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L7_unpacking_done:; + } + __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_A = __pyx_t_10; + __pyx_v_a = __pyx_t_11; + __pyx_v_b = __pyx_t_12; + __pyx_v_c = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_sigma = __pyx_t_13; + __pyx_v_W = __pyx_t_14; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":159 + * A,a,b,c,sigma,W=p + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: # <<<<<<<<<<<<<< + * return 0,True + * + */ + __pyx_t_15 = (__pyx_v_A < 0.0); + if (!__pyx_t_15) { + __pyx_t_16 = (__pyx_v_a < 0.0); + if (!__pyx_t_16) { + __pyx_t_17 = (__pyx_v_b < 0.0); + if (!__pyx_t_17) { + __pyx_t_18 = (__pyx_v_sigma < 0.0); + if (!__pyx_t_18) { + __pyx_t_19 = (__pyx_v_W < 0.0); + __pyx_t_20 = __pyx_t_19; + } else { + __pyx_t_20 = __pyx_t_18; + } + __pyx_t_18 = __pyx_t_20; + } else { + __pyx_t_18 = __pyx_t_17; + } + __pyx_t_17 = __pyx_t_18; + } else { + __pyx_t_17 = __pyx_t_16; + } + __pyx_t_16 = __pyx_t_17; + } else { + __pyx_t_16 = __pyx_t_15; + } + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":160 + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + * return 0,True # <<<<<<<<<<<<<< + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_6); + __pyx_t_6 = 0; + goto __pyx_L0; + goto __pyx_L8; + } + __pyx_L8:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":162 + * return 0,True + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) # <<<<<<<<<<<<<< + * + * chi2 = 0 + */ + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_A); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_a); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_b); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_c); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_c); + __Pyx_GIVEREF(__pyx_v_c); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(((PyObject *)__pyx_t_3), ((PyArrayObject *)__pyx_v_x_a), ((PyArrayObject *)__pyx_v_x_b)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_2); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_t_21 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); + if (unlikely(__pyx_t_21 < 0)) { + PyErr_Fetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_v_predicted, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24); + __Pyx_RaiseBufferFallbackError(); + } else { + PyErr_Restore(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + } + __pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + if (unlikely(__pyx_t_21 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_predicted)); + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":164 + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + * + * chi2 = 0 # <<<<<<<<<<<<<< + * norm_chi2 = 0 + * + */ + __pyx_v_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":165 + * + * chi2 = 0 + * norm_chi2 = 0 # <<<<<<<<<<<<<< + * + * for i in range(N): + */ + __pyx_v_norm_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":167 + * norm_chi2 = 0 + * + * for i in range(N): # <<<<<<<<<<<<<< + * sqrt_x_a = sqrt(x_a[i]) + * + */ + __pyx_t_21 = __pyx_v_N; + for (__pyx_t_25 = 0; __pyx_t_25 < __pyx_t_21; __pyx_t_25+=1) { + __pyx_v_i = __pyx_t_25; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":168 + * + * for i in range(N): + * sqrt_x_a = sqrt(x_a[i]) # <<<<<<<<<<<<<< + * + * sloc = sigma/sqrt_x_a + */ + __pyx_t_26 = __pyx_v_i; + if (__pyx_t_26 < 0) __pyx_t_26 += __pyx_bshape_0_x_a; + __pyx_v_sqrt_x_a = sqrt((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_26, __pyx_bstride_0_x_a))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":170 + * sqrt_x_a = sqrt(x_a[i]) + * + * sloc = sigma/sqrt_x_a # <<<<<<<<<<<<<< + * Wloc = W/sqrt_x_a + * + */ + __pyx_v_sloc = (__pyx_v_sigma / __pyx_v_sqrt_x_a); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":171 + * + * sloc = sigma/sqrt_x_a + * Wloc = W/sqrt_x_a # <<<<<<<<<<<<<< + * + * one_err = (data[i]-predicted[i]) + */ + __pyx_v_Wloc = (__pyx_v_W / __pyx_v_sqrt_x_a); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":173 + * Wloc = W/sqrt_x_a + * + * one_err = (data[i]-predicted[i]) # <<<<<<<<<<<<<< + * + * if (one_err >= 0) and (one_err < W): + */ + __pyx_t_27 = __pyx_v_i; + if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_0_data; + __pyx_t_28 = __pyx_v_i; + if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_predicted; + __pyx_v_one_err = ((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_data.buf, __pyx_t_27, __pyx_bstride_0_data)) - (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_28, __pyx_bstride_0_predicted))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":175 + * one_err = (data[i]-predicted[i]) + * + * if (one_err >= 0) and (one_err < W): # <<<<<<<<<<<<<< + * d = Wloc*Wloc + * elif (one_err < 0): + */ + __pyx_t_16 = (__pyx_v_one_err >= 0.0); + if (__pyx_t_16) { + __pyx_t_15 = (__pyx_v_one_err < __pyx_v_W); + __pyx_t_17 = __pyx_t_15; + } else { + __pyx_t_17 = __pyx_t_16; + } + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":176 + * + * if (one_err >= 0) and (one_err < W): + * d = Wloc*Wloc # <<<<<<<<<<<<<< + * elif (one_err < 0): + * d = one_err*one_err + Wloc*Wloc + */ + __pyx_v_d = (__pyx_v_Wloc * __pyx_v_Wloc); + goto __pyx_L11; + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":177 + * if (one_err >= 0) and (one_err < W): + * d = Wloc*Wloc + * elif (one_err < 0): # <<<<<<<<<<<<<< + * d = one_err*one_err + Wloc*Wloc + * else: + */ + __pyx_t_17 = (__pyx_v_one_err < 0.0); + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":178 + * d = Wloc*Wloc + * elif (one_err < 0): + * d = one_err*one_err + Wloc*Wloc # <<<<<<<<<<<<<< + * else: + * d = one_err*one_err + */ + __pyx_v_d = ((__pyx_v_one_err * __pyx_v_one_err) + (__pyx_v_Wloc * __pyx_v_Wloc)); + goto __pyx_L11; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":180 + * d = one_err*one_err + Wloc*Wloc + * else: + * d = one_err*one_err # <<<<<<<<<<<<<< + * + * sloc2 = sloc*sloc + */ + __pyx_v_d = (__pyx_v_one_err * __pyx_v_one_err); + } + __pyx_L11:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":182 + * d = one_err*one_err + * + * sloc2 = sloc*sloc # <<<<<<<<<<<<<< + * chi2 = chi2 + d/(sloc2) + * + */ + __pyx_v_sloc2 = (__pyx_v_sloc * __pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":183 + * + * sloc2 = sloc*sloc + * chi2 = chi2 + d/(sloc2) # <<<<<<<<<<<<<< + * + * u = Wloc*Wloc/sloc2 + */ + __pyx_v_chi2 = (__pyx_v_chi2 + (__pyx_v_d / __pyx_v_sloc2)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":185 + * chi2 = chi2 + d/(sloc2) + * + * u = Wloc*Wloc/sloc2 # <<<<<<<<<<<<<< + * if u > 50: + * # We only keep the first term, the second term is totally + */ + __pyx_t_2 = PyFloat_FromDouble(((__pyx_v_Wloc * __pyx_v_Wloc) / __pyx_v_sloc2)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_v_u); + __pyx_v_u = __pyx_t_2; + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":186 + * + * u = Wloc*Wloc/sloc2 + * if u > 50: # <<<<<<<<<<<<<< + * # We only keep the first term, the second term is totally + * # negligible + */ + __pyx_t_2 = PyObject_RichCompare(__pyx_v_u, __pyx_int_50, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_17 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":189 + * # We only keep the first term, the second term is totally + * # negligible + * one_norm = -0.5*u + log(Wloc) # <<<<<<<<<<<<<< + * else: + * one_norm = log(Wloc*exp(-0.5*u) + \ + */ + __pyx_t_2 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyFloat_FromDouble(log(__pyx_v_Wloc)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_one_norm = __pyx_t_14; + goto __pyx_L12; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":191 + * one_norm = -0.5*u + log(Wloc) + * else: + * one_norm = log(Wloc*exp(-0.5*u) + \ # <<<<<<<<<<<<<< + * 0.5*sqrt_2pi*sloc*(1+exp(-0.5*u))*gsl_sf_erfc(Wloc/(sq2*sloc))) + * + */ + __pyx_t_7 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyNumber_Multiply(__pyx_t_7, __pyx_v_u); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_29 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_29 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":192 + * else: + * one_norm = log(Wloc*exp(-0.5*u) + \ + * 0.5*sqrt_2pi*sloc*(1+exp(-0.5*u))*gsl_sf_erfc(Wloc/(sq2*sloc))) # <<<<<<<<<<<<<< + * + * norm_chi2 = norm_chi2 + one_norm + */ + __pyx_t_2 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyNumber_Multiply(__pyx_t_2, __pyx_v_u); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_30 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_30 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_one_norm = log(((__pyx_v_Wloc * exp(__pyx_t_29)) + ((((0.5 * __pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_2pi) * __pyx_v_sloc) * (1.0 + exp(__pyx_t_30))) * gsl_sf_erfc((__pyx_v_Wloc / (__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sq2 * __pyx_v_sloc)))))); + } + __pyx_L12:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":194 + * 0.5*sqrt_2pi*sloc*(1+exp(-0.5*u))*gsl_sf_erfc(Wloc/(sq2*sloc))) + * + * norm_chi2 = norm_chi2 + one_norm # <<<<<<<<<<<<<< + * + * return chi2 + 2*norm_chi2, False + */ + __pyx_v_norm_chi2 = (__pyx_v_norm_chi2 + __pyx_v_one_norm); + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":196 + * norm_chi2 = norm_chi2 + one_norm + * + * return chi2 + 2*norm_chi2, False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = PyFloat_FromDouble((__pyx_v_chi2 + (2.0 * __pyx_v_norm_chi2))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_r = ((PyObject *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_predicted); + __Pyx_XDECREF(__pyx_v_c); + __Pyx_XDECREF(__pyx_v_u); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":201 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso2(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_3chi2_ellipsoid_aniso2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_3chi2_ellipsoid_aniso2 = {__Pyx_NAMESTR("chi2_ellipsoid_aniso2"), (PyCFunction)__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_3chi2_ellipsoid_aniso2, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_3chi2_ellipsoid_aniso2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_p = 0; + PyArrayObject *__pyx_v_data = 0; + PyArrayObject *__pyx_v_x_a = 0; + PyArrayObject *__pyx_v_x_b = 0; + int __pyx_v_N; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_A; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_b; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_d; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_norm_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_norm; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_err; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_W; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_Wloc; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_u; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_u2; + PyArrayObject *__pyx_v_predicted = 0; + PyObject *__pyx_v_c = NULL; + int __pyx_v_i; + Py_buffer __pyx_bstruct_x_b; + Py_ssize_t __pyx_bstride_0_x_b = 0; + Py_ssize_t __pyx_bshape_0_x_b = 0; + Py_buffer __pyx_bstruct_x_a; + Py_ssize_t __pyx_bstride_0_x_a = 0; + Py_ssize_t __pyx_bshape_0_x_a = 0; + Py_buffer __pyx_bstruct_data; + Py_ssize_t __pyx_bstride_0_data = 0; + Py_ssize_t __pyx_bshape_0_data = 0; + Py_buffer __pyx_bstruct_predicted; + Py_ssize_t __pyx_bstride_0_predicted = 0; + Py_ssize_t __pyx_bshape_0_predicted = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_10; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_11; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_12; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_13; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_14; + int __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + int __pyx_t_21; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + int __pyx_t_25; + int __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__data,&__pyx_n_s__x_a,&__pyx_n_s__x_b,&__pyx_n_s__N,0}; + __Pyx_RefNannySetupContext("chi2_ellipsoid_aniso2"); + __pyx_self = __pyx_self; + { + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso2", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_a); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso2", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_b); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso2", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso2", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "chi2_ellipsoid_aniso2") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_p = values[0]; + __pyx_v_data = ((PyArrayObject *)values[1]); + __pyx_v_x_a = ((PyArrayObject *)values[2]); + __pyx_v_x_b = ((PyArrayObject *)values[3]); + __pyx_v_N = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso2", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_bstruct_predicted.buf = NULL; + __pyx_bstruct_data.buf = NULL; + __pyx_bstruct_x_a.buf = NULL; + __pyx_bstruct_x_b.buf = NULL; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 0, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_a), __pyx_ptype_5numpy_ndarray, 0, "x_a", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_b), __pyx_ptype_5numpy_ndarray, 0, "x_b", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_data, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_data = __pyx_bstruct_data.strides[0]; + __pyx_bshape_0_data = __pyx_bstruct_data.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_a, (PyObject*)__pyx_v_x_a, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_a = __pyx_bstruct_x_a.strides[0]; + __pyx_bshape_0_x_a = __pyx_bstruct_x_a.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_b, (PyObject*)__pyx_v_x_b, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_b = __pyx_bstruct_x_b.strides[0]; + __pyx_bshape_0_x_b = __pyx_bstruct_x_b.shape[0]; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":209 + * cdef DTYPE_t norm_chi2, sloc, sloc2, one_norm + * cdef DTYPE_t one_err, W, Wloc, u, u2 + * cdef np.ndarray[DTYPE_t, ndim=1] predicted = np.empty(N, dtype=DTYPE) # <<<<<<<<<<<<<< + * global sqrt_2pi, sq2, sqrt_pi_2 + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromLong(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + __pyx_v_predicted = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_predicted.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":212 + * global sqrt_2pi, sq2, sqrt_pi_2 + * + * A,a,b,c,sigma,W=p # <<<<<<<<<<<<<< + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + */ + if ((likely(PyTuple_CheckExact(__pyx_v_p))) || (PyList_CheckExact(__pyx_v_p))) { + PyObject* sequence = __pyx_v_p; + if (likely(PyTuple_CheckExact(sequence))) { + if (unlikely(PyTuple_GET_SIZE(sequence) != 6)) { + if (PyTuple_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 5); + } else { + if (unlikely(PyList_GET_SIZE(sequence) != 6)) { + if (PyList_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + __pyx_t_6 = PyList_GET_ITEM(sequence, 4); + __pyx_t_7 = PyList_GET_ITEM(sequence, 5); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_v_p); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 2; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 3; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 4; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 5; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); + if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L7_unpacking_done:; + } + __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_A = __pyx_t_10; + __pyx_v_a = __pyx_t_11; + __pyx_v_b = __pyx_t_12; + __pyx_v_c = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_sigma = __pyx_t_13; + __pyx_v_W = __pyx_t_14; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":214 + * A,a,b,c,sigma,W=p + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: # <<<<<<<<<<<<<< + * return 0,True + * + */ + __pyx_t_15 = (__pyx_v_A < 0.0); + if (!__pyx_t_15) { + __pyx_t_16 = (__pyx_v_a < 0.0); + if (!__pyx_t_16) { + __pyx_t_17 = (__pyx_v_b < 0.0); + if (!__pyx_t_17) { + __pyx_t_18 = (__pyx_v_sigma < 0.0); + if (!__pyx_t_18) { + __pyx_t_19 = (__pyx_v_W < 0.0); + __pyx_t_20 = __pyx_t_19; + } else { + __pyx_t_20 = __pyx_t_18; + } + __pyx_t_18 = __pyx_t_20; + } else { + __pyx_t_18 = __pyx_t_17; + } + __pyx_t_17 = __pyx_t_18; + } else { + __pyx_t_17 = __pyx_t_16; + } + __pyx_t_16 = __pyx_t_17; + } else { + __pyx_t_16 = __pyx_t_15; + } + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":215 + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + * return 0,True # <<<<<<<<<<<<<< + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_6); + __pyx_t_6 = 0; + goto __pyx_L0; + goto __pyx_L8; + } + __pyx_L8:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":217 + * return 0,True + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) # <<<<<<<<<<<<<< + * + * chi2 = 0 + */ + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_A); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_a); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_b); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_c); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_c); + __Pyx_GIVEREF(__pyx_v_c); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(((PyObject *)__pyx_t_3), ((PyArrayObject *)__pyx_v_x_a), ((PyArrayObject *)__pyx_v_x_b)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_2); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_t_21 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); + if (unlikely(__pyx_t_21 < 0)) { + PyErr_Fetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_v_predicted, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24); + __Pyx_RaiseBufferFallbackError(); + } else { + PyErr_Restore(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + } + __pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + if (unlikely(__pyx_t_21 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_predicted)); + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":219 + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + * + * chi2 = 0 # <<<<<<<<<<<<<< + * norm_chi2 = 0 + * + */ + __pyx_v_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":220 + * + * chi2 = 0 + * norm_chi2 = 0 # <<<<<<<<<<<<<< + * + * for i in range(N): + */ + __pyx_v_norm_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":222 + * norm_chi2 = 0 + * + * for i in range(N): # <<<<<<<<<<<<<< + * sloc = sigma*sqrt(1/x_a[i]) + * Wloc = W*predicted[i]/sqrt(x_a[i]) + */ + __pyx_t_21 = __pyx_v_N; + for (__pyx_t_25 = 0; __pyx_t_25 < __pyx_t_21; __pyx_t_25+=1) { + __pyx_v_i = __pyx_t_25; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":223 + * + * for i in range(N): + * sloc = sigma*sqrt(1/x_a[i]) # <<<<<<<<<<<<<< + * Wloc = W*predicted[i]/sqrt(x_a[i]) + * + */ + __pyx_t_26 = __pyx_v_i; + if (__pyx_t_26 < 0) __pyx_t_26 += __pyx_bshape_0_x_a; + __pyx_v_sloc = (__pyx_v_sigma * sqrt((1.0 / (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_26, __pyx_bstride_0_x_a))))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":224 + * for i in range(N): + * sloc = sigma*sqrt(1/x_a[i]) + * Wloc = W*predicted[i]/sqrt(x_a[i]) # <<<<<<<<<<<<<< + * + * one_err = (data[i]-predicted[i]) + */ + __pyx_t_27 = __pyx_v_i; + if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_0_predicted; + __pyx_t_28 = __pyx_v_i; + if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_x_a; + __pyx_v_Wloc = ((__pyx_v_W * (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_27, __pyx_bstride_0_predicted))) / sqrt((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_28, __pyx_bstride_0_x_a)))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":226 + * Wloc = W*predicted[i]/sqrt(x_a[i]) + * + * one_err = (data[i]-predicted[i]) # <<<<<<<<<<<<<< + * + * if (one_err >= 0) and (one_err < Wloc): + */ + __pyx_t_29 = __pyx_v_i; + if (__pyx_t_29 < 0) __pyx_t_29 += __pyx_bshape_0_data; + __pyx_t_30 = __pyx_v_i; + if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_bshape_0_predicted; + __pyx_v_one_err = ((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_data.buf, __pyx_t_29, __pyx_bstride_0_data)) - (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_30, __pyx_bstride_0_predicted))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":228 + * one_err = (data[i]-predicted[i]) + * + * if (one_err >= 0) and (one_err < Wloc): # <<<<<<<<<<<<<< + * d = Wloc*Wloc + * elif (one_err < 0): + */ + __pyx_t_16 = (__pyx_v_one_err >= 0.0); + if (__pyx_t_16) { + __pyx_t_15 = (__pyx_v_one_err < __pyx_v_Wloc); + __pyx_t_17 = __pyx_t_15; + } else { + __pyx_t_17 = __pyx_t_16; + } + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":229 + * + * if (one_err >= 0) and (one_err < Wloc): + * d = Wloc*Wloc # <<<<<<<<<<<<<< + * elif (one_err < 0): + * d = Wloc*Wloc + one_err*one_err + */ + __pyx_v_d = (__pyx_v_Wloc * __pyx_v_Wloc); + goto __pyx_L11; + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":230 + * if (one_err >= 0) and (one_err < Wloc): + * d = Wloc*Wloc + * elif (one_err < 0): # <<<<<<<<<<<<<< + * d = Wloc*Wloc + one_err*one_err + * else: + */ + __pyx_t_17 = (__pyx_v_one_err < 0.0); + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":231 + * d = Wloc*Wloc + * elif (one_err < 0): + * d = Wloc*Wloc + one_err*one_err # <<<<<<<<<<<<<< + * else: + * d = one_err*one_err + */ + __pyx_v_d = ((__pyx_v_Wloc * __pyx_v_Wloc) + (__pyx_v_one_err * __pyx_v_one_err)); + goto __pyx_L11; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":233 + * d = Wloc*Wloc + one_err*one_err + * else: + * d = one_err*one_err # <<<<<<<<<<<<<< + * + * sloc2 = sloc*sloc + */ + __pyx_v_d = (__pyx_v_one_err * __pyx_v_one_err); + } + __pyx_L11:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":235 + * d = one_err*one_err + * + * sloc2 = sloc*sloc # <<<<<<<<<<<<<< + * chi2 = chi2 + d/(sloc2) + * + */ + __pyx_v_sloc2 = (__pyx_v_sloc * __pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":236 + * + * sloc2 = sloc*sloc + * chi2 = chi2 + d/(sloc2) # <<<<<<<<<<<<<< + * + * u = Wloc/sloc + */ + __pyx_v_chi2 = (__pyx_v_chi2 + (__pyx_v_d / __pyx_v_sloc2)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":238 + * chi2 = chi2 + d/(sloc2) + * + * u = Wloc/sloc # <<<<<<<<<<<<<< + * u2 = u*u + * if u2 > 50: + */ + __pyx_v_u = (__pyx_v_Wloc / __pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":239 + * + * u = Wloc/sloc + * u2 = u*u # <<<<<<<<<<<<<< + * if u2 > 50: + * # We only keep the first term, the second term is totally + */ + __pyx_v_u2 = (__pyx_v_u * __pyx_v_u); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":240 + * u = Wloc/sloc + * u2 = u*u + * if u2 > 50: # <<<<<<<<<<<<<< + * # We only keep the first term, the second term is totally + * # negligible + */ + __pyx_t_17 = (__pyx_v_u2 > 50.0); + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":243 + * # We only keep the first term, the second term is totally + * # negligible + * one_norm = -0.5*u2 + log(Wloc + sqrt_pi_2 * sloc) # <<<<<<<<<<<<<< + * else: + * one_norm = -0.5*u2 + log(Wloc + sqrt_pi_2 * sloc * (1 + exp(0.5*u2)*gsl_sf_erfc(u/sq2))) + */ + __pyx_v_one_norm = ((-0.5 * __pyx_v_u2) + log((__pyx_v_Wloc + (__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_pi_2 * __pyx_v_sloc)))); + goto __pyx_L12; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":245 + * one_norm = -0.5*u2 + log(Wloc + sqrt_pi_2 * sloc) + * else: + * one_norm = -0.5*u2 + log(Wloc + sqrt_pi_2 * sloc * (1 + exp(0.5*u2)*gsl_sf_erfc(u/sq2))) # <<<<<<<<<<<<<< + * + * # one_norm = log(Wloc*exp(-0.5*u) + \ + */ + __pyx_v_one_norm = ((-0.5 * __pyx_v_u2) + log((__pyx_v_Wloc + ((__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_pi_2 * __pyx_v_sloc) * (1.0 + (exp((0.5 * __pyx_v_u2)) * gsl_sf_erfc((__pyx_v_u / __pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sq2)))))))); + } + __pyx_L12:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":250 + * # 0.5*sqrt_2pi*sloc*(1+exp(-0.5*u))*gsl_sf_erfc(Wloc/(sq2*sloc))) + * + * norm_chi2 = norm_chi2 + one_norm # <<<<<<<<<<<<<< + * + * return chi2 + 2*norm_chi2, False + */ + __pyx_v_norm_chi2 = (__pyx_v_norm_chi2 + __pyx_v_one_norm); + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":252 + * norm_chi2 = norm_chi2 + one_norm + * + * return chi2 + 2*norm_chi2, False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyFloat_FromDouble((__pyx_v_chi2 + (2.0 * __pyx_v_norm_chi2))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_7)); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_r = ((PyObject *)__pyx_t_7); + __pyx_t_7 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_predicted); + __Pyx_XDECREF(__pyx_v_c); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":258 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso3(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_4chi2_ellipsoid_aniso3(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_4chi2_ellipsoid_aniso3 = {__Pyx_NAMESTR("chi2_ellipsoid_aniso3"), (PyCFunction)__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_4chi2_ellipsoid_aniso3, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_4chi2_ellipsoid_aniso3(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_p = 0; + PyArrayObject *__pyx_v_data = 0; + PyArrayObject *__pyx_v_x_a = 0; + PyArrayObject *__pyx_v_x_b = 0; + int __pyx_v_N; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_A; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_b; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_d; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_norm_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_norm; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_err; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_W; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_Wloc; + PyArrayObject *__pyx_v_predicted = 0; + PyObject *__pyx_v_c = NULL; + int __pyx_v_i; + PyObject *__pyx_v_u = NULL; + Py_buffer __pyx_bstruct_x_b; + Py_ssize_t __pyx_bstride_0_x_b = 0; + Py_ssize_t __pyx_bshape_0_x_b = 0; + Py_buffer __pyx_bstruct_x_a; + Py_ssize_t __pyx_bstride_0_x_a = 0; + Py_ssize_t __pyx_bshape_0_x_a = 0; + Py_buffer __pyx_bstruct_data; + Py_ssize_t __pyx_bstride_0_data = 0; + Py_ssize_t __pyx_bshape_0_data = 0; + Py_buffer __pyx_bstruct_predicted; + Py_ssize_t __pyx_bstride_0_predicted = 0; + Py_ssize_t __pyx_bshape_0_predicted = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_10; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_11; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_12; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_13; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_14; + int __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + int __pyx_t_21; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + int __pyx_t_25; + int __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + double __pyx_t_31; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__data,&__pyx_n_s__x_a,&__pyx_n_s__x_b,&__pyx_n_s__N,0}; + __Pyx_RefNannySetupContext("chi2_ellipsoid_aniso3"); + __pyx_self = __pyx_self; + { + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso3", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_a); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso3", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_b); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso3", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso3", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "chi2_ellipsoid_aniso3") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_p = values[0]; + __pyx_v_data = ((PyArrayObject *)values[1]); + __pyx_v_x_a = ((PyArrayObject *)values[2]); + __pyx_v_x_b = ((PyArrayObject *)values[3]); + __pyx_v_N = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso3", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_bstruct_predicted.buf = NULL; + __pyx_bstruct_data.buf = NULL; + __pyx_bstruct_x_a.buf = NULL; + __pyx_bstruct_x_b.buf = NULL; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 0, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_a), __pyx_ptype_5numpy_ndarray, 0, "x_a", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_b), __pyx_ptype_5numpy_ndarray, 0, "x_b", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_data, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_data = __pyx_bstruct_data.strides[0]; + __pyx_bshape_0_data = __pyx_bstruct_data.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_a, (PyObject*)__pyx_v_x_a, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_a = __pyx_bstruct_x_a.strides[0]; + __pyx_bshape_0_x_a = __pyx_bstruct_x_a.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_b, (PyObject*)__pyx_v_x_b, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_b = __pyx_bstruct_x_b.strides[0]; + __pyx_bshape_0_x_b = __pyx_bstruct_x_b.shape[0]; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":266 + * cdef DTYPE_t norm_chi2, sloc, sloc2, one_norm + * cdef DTYPE_t one_err, W, Wloc + * cdef np.ndarray[DTYPE_t, ndim=1] predicted = np.empty(N, dtype=DTYPE) # <<<<<<<<<<<<<< + * global sqrt_2pi, sq2 + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromLong(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + __pyx_v_predicted = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_predicted.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":269 + * global sqrt_2pi, sq2 + * + * A,a,b,c,sigma,W=p # <<<<<<<<<<<<<< + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + */ + if ((likely(PyTuple_CheckExact(__pyx_v_p))) || (PyList_CheckExact(__pyx_v_p))) { + PyObject* sequence = __pyx_v_p; + if (likely(PyTuple_CheckExact(sequence))) { + if (unlikely(PyTuple_GET_SIZE(sequence) != 6)) { + if (PyTuple_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 5); + } else { + if (unlikely(PyList_GET_SIZE(sequence) != 6)) { + if (PyList_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + __pyx_t_6 = PyList_GET_ITEM(sequence, 4); + __pyx_t_7 = PyList_GET_ITEM(sequence, 5); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_v_p); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 2; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 3; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 4; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 5; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); + if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L7_unpacking_done:; + } + __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_A = __pyx_t_10; + __pyx_v_a = __pyx_t_11; + __pyx_v_b = __pyx_t_12; + __pyx_v_c = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_sigma = __pyx_t_13; + __pyx_v_W = __pyx_t_14; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":271 + * A,a,b,c,sigma,W=p + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: # <<<<<<<<<<<<<< + * return 0,True + * + */ + __pyx_t_15 = (__pyx_v_A < 0.0); + if (!__pyx_t_15) { + __pyx_t_16 = (__pyx_v_a < 0.0); + if (!__pyx_t_16) { + __pyx_t_17 = (__pyx_v_b < 0.0); + if (!__pyx_t_17) { + __pyx_t_18 = (__pyx_v_sigma < 0.0); + if (!__pyx_t_18) { + __pyx_t_19 = (__pyx_v_W < 0.0); + __pyx_t_20 = __pyx_t_19; + } else { + __pyx_t_20 = __pyx_t_18; + } + __pyx_t_18 = __pyx_t_20; + } else { + __pyx_t_18 = __pyx_t_17; + } + __pyx_t_17 = __pyx_t_18; + } else { + __pyx_t_17 = __pyx_t_16; + } + __pyx_t_16 = __pyx_t_17; + } else { + __pyx_t_16 = __pyx_t_15; + } + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":272 + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + * return 0,True # <<<<<<<<<<<<<< + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_6); + __pyx_t_6 = 0; + goto __pyx_L0; + goto __pyx_L8; + } + __pyx_L8:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":274 + * return 0,True + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) # <<<<<<<<<<<<<< + * + * chi2 = 0 + */ + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_A); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_a); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_b); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_c); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_c); + __Pyx_GIVEREF(__pyx_v_c); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(((PyObject *)__pyx_t_3), ((PyArrayObject *)__pyx_v_x_a), ((PyArrayObject *)__pyx_v_x_b)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_2); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_t_21 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); + if (unlikely(__pyx_t_21 < 0)) { + PyErr_Fetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_v_predicted, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24); + __Pyx_RaiseBufferFallbackError(); + } else { + PyErr_Restore(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + } + __pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + if (unlikely(__pyx_t_21 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_predicted)); + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":276 + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + * + * chi2 = 0 # <<<<<<<<<<<<<< + * norm_chi2 = 0 + * + */ + __pyx_v_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":277 + * + * chi2 = 0 + * norm_chi2 = 0 # <<<<<<<<<<<<<< + * + * for i in range(N): + */ + __pyx_v_norm_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":279 + * norm_chi2 = 0 + * + * for i in range(N): # <<<<<<<<<<<<<< + * sloc = sigma*sqrt(1/x_a[i]) + * Wloc = W*predicted[i]/sqrt(x_a[i]) + */ + __pyx_t_21 = __pyx_v_N; + for (__pyx_t_25 = 0; __pyx_t_25 < __pyx_t_21; __pyx_t_25+=1) { + __pyx_v_i = __pyx_t_25; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":280 + * + * for i in range(N): + * sloc = sigma*sqrt(1/x_a[i]) # <<<<<<<<<<<<<< + * Wloc = W*predicted[i]/sqrt(x_a[i]) + * # Wloc = W*predicted[i]/sqrt(x_a[i]) + */ + __pyx_t_26 = __pyx_v_i; + if (__pyx_t_26 < 0) __pyx_t_26 += __pyx_bshape_0_x_a; + __pyx_v_sloc = (__pyx_v_sigma * sqrt((1.0 / (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_26, __pyx_bstride_0_x_a))))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":281 + * for i in range(N): + * sloc = sigma*sqrt(1/x_a[i]) + * Wloc = W*predicted[i]/sqrt(x_a[i]) # <<<<<<<<<<<<<< + * # Wloc = W*predicted[i]/sqrt(x_a[i]) + * + */ + __pyx_t_27 = __pyx_v_i; + if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_0_predicted; + __pyx_t_28 = __pyx_v_i; + if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_x_a; + __pyx_v_Wloc = ((__pyx_v_W * (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_27, __pyx_bstride_0_predicted))) / sqrt((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_28, __pyx_bstride_0_x_a)))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":284 + * # Wloc = W*predicted[i]/sqrt(x_a[i]) + * + * one_err = fabs(data[i]-predicted[i]) # <<<<<<<<<<<<<< + * + * if (one_err < Wloc): + */ + __pyx_t_29 = __pyx_v_i; + if (__pyx_t_29 < 0) __pyx_t_29 += __pyx_bshape_0_data; + __pyx_t_30 = __pyx_v_i; + if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_bshape_0_predicted; + __pyx_v_one_err = fabs(((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_data.buf, __pyx_t_29, __pyx_bstride_0_data)) - (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_30, __pyx_bstride_0_predicted)))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":286 + * one_err = fabs(data[i]-predicted[i]) + * + * if (one_err < Wloc): # <<<<<<<<<<<<<< + * d = Wloc*Wloc + * else: + */ + __pyx_t_16 = (__pyx_v_one_err < __pyx_v_Wloc); + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":287 + * + * if (one_err < Wloc): + * d = Wloc*Wloc # <<<<<<<<<<<<<< + * else: + * d = one_err*one_err + */ + __pyx_v_d = (__pyx_v_Wloc * __pyx_v_Wloc); + goto __pyx_L11; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":289 + * d = Wloc*Wloc + * else: + * d = one_err*one_err # <<<<<<<<<<<<<< + * + * sloc2 = sloc*sloc + */ + __pyx_v_d = (__pyx_v_one_err * __pyx_v_one_err); + } + __pyx_L11:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":291 + * d = one_err*one_err + * + * sloc2 = sloc*sloc # <<<<<<<<<<<<<< + * chi2 = chi2 + d/(sloc2) + * + */ + __pyx_v_sloc2 = (__pyx_v_sloc * __pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":292 + * + * sloc2 = sloc*sloc + * chi2 = chi2 + d/(sloc2) # <<<<<<<<<<<<<< + * + * u = Wloc*Wloc/sloc2 + */ + __pyx_v_chi2 = (__pyx_v_chi2 + (__pyx_v_d / __pyx_v_sloc2)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":294 + * chi2 = chi2 + d/(sloc2) + * + * u = Wloc*Wloc/sloc2 # <<<<<<<<<<<<<< + * if u > 50: + * # We only keep the first term, the second term is totally + */ + __pyx_t_2 = PyFloat_FromDouble(((__pyx_v_Wloc * __pyx_v_Wloc) / __pyx_v_sloc2)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_v_u); + __pyx_v_u = __pyx_t_2; + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":295 + * + * u = Wloc*Wloc/sloc2 + * if u > 50: # <<<<<<<<<<<<<< + * # We only keep the first term, the second term is totally + * # negligible + */ + __pyx_t_2 = PyObject_RichCompare(__pyx_v_u, __pyx_int_50, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":298 + * # We only keep the first term, the second term is totally + * # negligible + * one_norm = -0.5*u + log(2*Wloc) # <<<<<<<<<<<<<< + * else: + * one_norm = log(2*Wloc*exp(-0.5*u) + \ + */ + __pyx_t_2 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyFloat_FromDouble(log((2.0 * __pyx_v_Wloc))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_one_norm = __pyx_t_14; + goto __pyx_L12; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":300 + * one_norm = -0.5*u + log(2*Wloc) + * else: + * one_norm = log(2*Wloc*exp(-0.5*u) + \ # <<<<<<<<<<<<<< + * sqrt_2pi*sloc*gsl_sf_erfc(Wloc/(sq2*sloc))) + * + */ + __pyx_t_7 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyNumber_Multiply(__pyx_t_7, __pyx_v_u); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_31 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_31 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":301 + * else: + * one_norm = log(2*Wloc*exp(-0.5*u) + \ + * sqrt_2pi*sloc*gsl_sf_erfc(Wloc/(sq2*sloc))) # <<<<<<<<<<<<<< + * + * norm_chi2 = norm_chi2 + one_norm + */ + __pyx_v_one_norm = log((((2.0 * __pyx_v_Wloc) * exp(__pyx_t_31)) + ((__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_2pi * __pyx_v_sloc) * gsl_sf_erfc((__pyx_v_Wloc / (__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sq2 * __pyx_v_sloc)))))); + } + __pyx_L12:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":303 + * sqrt_2pi*sloc*gsl_sf_erfc(Wloc/(sq2*sloc))) + * + * norm_chi2 = norm_chi2 + one_norm # <<<<<<<<<<<<<< + * + * return chi2 + 2*norm_chi2, False + */ + __pyx_v_norm_chi2 = (__pyx_v_norm_chi2 + __pyx_v_one_norm); + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":305 + * norm_chi2 = norm_chi2 + one_norm + * + * return chi2 + 2*norm_chi2, False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyFloat_FromDouble((__pyx_v_chi2 + (2.0 * __pyx_v_norm_chi2))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_2 = 0; + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_predicted); + __Pyx_XDECREF(__pyx_v_c); + __Pyx_XDECREF(__pyx_v_u); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":311 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso4(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_5chi2_ellipsoid_aniso4(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_5chi2_ellipsoid_aniso4 = {__Pyx_NAMESTR("chi2_ellipsoid_aniso4"), (PyCFunction)__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_5chi2_ellipsoid_aniso4, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_5chi2_ellipsoid_aniso4(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_p = 0; + PyArrayObject *__pyx_v_data = 0; + PyArrayObject *__pyx_v_x_a = 0; + PyArrayObject *__pyx_v_x_b = 0; + int __pyx_v_N; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_A; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_b; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_d; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_norm_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_norm; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_err; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_W; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_Wloc; + PyArrayObject *__pyx_v_predicted = 0; + PyObject *__pyx_v_c = NULL; + int __pyx_v_i; + PyObject *__pyx_v_u = NULL; + Py_buffer __pyx_bstruct_x_b; + Py_ssize_t __pyx_bstride_0_x_b = 0; + Py_ssize_t __pyx_bshape_0_x_b = 0; + Py_buffer __pyx_bstruct_x_a; + Py_ssize_t __pyx_bstride_0_x_a = 0; + Py_ssize_t __pyx_bshape_0_x_a = 0; + Py_buffer __pyx_bstruct_data; + Py_ssize_t __pyx_bstride_0_data = 0; + Py_ssize_t __pyx_bshape_0_data = 0; + Py_buffer __pyx_bstruct_predicted; + Py_ssize_t __pyx_bstride_0_predicted = 0; + Py_ssize_t __pyx_bshape_0_predicted = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_10; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_11; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_12; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_13; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_14; + int __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + int __pyx_t_21; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + int __pyx_t_25; + int __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + int __pyx_t_29; + double __pyx_t_30; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__data,&__pyx_n_s__x_a,&__pyx_n_s__x_b,&__pyx_n_s__N,0}; + __Pyx_RefNannySetupContext("chi2_ellipsoid_aniso4"); + __pyx_self = __pyx_self; + { + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso4", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_a); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso4", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_b); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso4", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso4", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "chi2_ellipsoid_aniso4") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_p = values[0]; + __pyx_v_data = ((PyArrayObject *)values[1]); + __pyx_v_x_a = ((PyArrayObject *)values[2]); + __pyx_v_x_b = ((PyArrayObject *)values[3]); + __pyx_v_N = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso4", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_bstruct_predicted.buf = NULL; + __pyx_bstruct_data.buf = NULL; + __pyx_bstruct_x_a.buf = NULL; + __pyx_bstruct_x_b.buf = NULL; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 0, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_a), __pyx_ptype_5numpy_ndarray, 0, "x_a", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_b), __pyx_ptype_5numpy_ndarray, 0, "x_b", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_data, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_data = __pyx_bstruct_data.strides[0]; + __pyx_bshape_0_data = __pyx_bstruct_data.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_a, (PyObject*)__pyx_v_x_a, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_a = __pyx_bstruct_x_a.strides[0]; + __pyx_bshape_0_x_a = __pyx_bstruct_x_a.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_b, (PyObject*)__pyx_v_x_b, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_b = __pyx_bstruct_x_b.strides[0]; + __pyx_bshape_0_x_b = __pyx_bstruct_x_b.shape[0]; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":319 + * cdef DTYPE_t norm_chi2, sloc, sloc2, one_norm + * cdef DTYPE_t one_err, W, Wloc + * cdef np.ndarray[DTYPE_t, ndim=1] predicted = np.empty(N, dtype=DTYPE) # <<<<<<<<<<<<<< + * global sqrt_2pi, sq2, sqrt_pi_2 + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromLong(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + __pyx_v_predicted = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_predicted.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":322 + * global sqrt_2pi, sq2, sqrt_pi_2 + * + * A,a,b,c,sigma,W=p # <<<<<<<<<<<<<< + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + */ + if ((likely(PyTuple_CheckExact(__pyx_v_p))) || (PyList_CheckExact(__pyx_v_p))) { + PyObject* sequence = __pyx_v_p; + if (likely(PyTuple_CheckExact(sequence))) { + if (unlikely(PyTuple_GET_SIZE(sequence) != 6)) { + if (PyTuple_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 5); + } else { + if (unlikely(PyList_GET_SIZE(sequence) != 6)) { + if (PyList_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + __pyx_t_6 = PyList_GET_ITEM(sequence, 4); + __pyx_t_7 = PyList_GET_ITEM(sequence, 5); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_v_p); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 2; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 3; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 4; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 5; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); + if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L7_unpacking_done:; + } + __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_A = __pyx_t_10; + __pyx_v_a = __pyx_t_11; + __pyx_v_b = __pyx_t_12; + __pyx_v_c = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_sigma = __pyx_t_13; + __pyx_v_W = __pyx_t_14; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":324 + * A,a,b,c,sigma,W=p + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: # <<<<<<<<<<<<<< + * return 0,True + * + */ + __pyx_t_15 = (__pyx_v_A < 0.0); + if (!__pyx_t_15) { + __pyx_t_16 = (__pyx_v_a < 0.0); + if (!__pyx_t_16) { + __pyx_t_17 = (__pyx_v_b < 0.0); + if (!__pyx_t_17) { + __pyx_t_18 = (__pyx_v_sigma < 0.0); + if (!__pyx_t_18) { + __pyx_t_19 = (__pyx_v_W < 0.0); + __pyx_t_20 = __pyx_t_19; + } else { + __pyx_t_20 = __pyx_t_18; + } + __pyx_t_18 = __pyx_t_20; + } else { + __pyx_t_18 = __pyx_t_17; + } + __pyx_t_17 = __pyx_t_18; + } else { + __pyx_t_17 = __pyx_t_16; + } + __pyx_t_16 = __pyx_t_17; + } else { + __pyx_t_16 = __pyx_t_15; + } + if (__pyx_t_16) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":325 + * + * if A < 0 or a < 0 or b < 0 or sigma < 0 or W < 0: + * return 0,True # <<<<<<<<<<<<<< + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_6); + __pyx_t_6 = 0; + goto __pyx_L0; + goto __pyx_L8; + } + __pyx_L8:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":327 + * return 0,True + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) # <<<<<<<<<<<<<< + * + * chi2 = 0 + */ + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_A); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_a); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_b); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_c); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_c); + __Pyx_GIVEREF(__pyx_v_c); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(((PyObject *)__pyx_t_3), ((PyArrayObject *)__pyx_v_x_a), ((PyArrayObject *)__pyx_v_x_b)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_2); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_t_21 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); + if (unlikely(__pyx_t_21 < 0)) { + PyErr_Fetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_v_predicted, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24); + __Pyx_RaiseBufferFallbackError(); + } else { + PyErr_Restore(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + } + __pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + if (unlikely(__pyx_t_21 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_predicted)); + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":329 + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + * + * chi2 = 0 # <<<<<<<<<<<<<< + * norm_chi2 = 0 + * + */ + __pyx_v_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":330 + * + * chi2 = 0 + * norm_chi2 = 0 # <<<<<<<<<<<<<< + * + * for i in range(N): + */ + __pyx_v_norm_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":332 + * norm_chi2 = 0 + * + * for i in range(N): # <<<<<<<<<<<<<< + * sloc = sigma*sqrt(1/x_a[i]) + * Wloc = W*predicted[i] + */ + __pyx_t_21 = __pyx_v_N; + for (__pyx_t_25 = 0; __pyx_t_25 < __pyx_t_21; __pyx_t_25+=1) { + __pyx_v_i = __pyx_t_25; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":333 + * + * for i in range(N): + * sloc = sigma*sqrt(1/x_a[i]) # <<<<<<<<<<<<<< + * Wloc = W*predicted[i] + * + */ + __pyx_t_26 = __pyx_v_i; + if (__pyx_t_26 < 0) __pyx_t_26 += __pyx_bshape_0_x_a; + __pyx_v_sloc = (__pyx_v_sigma * sqrt((1.0 / (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_26, __pyx_bstride_0_x_a))))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":334 + * for i in range(N): + * sloc = sigma*sqrt(1/x_a[i]) + * Wloc = W*predicted[i] # <<<<<<<<<<<<<< + * + * one_err = (data[i]-predicted[i]) + */ + __pyx_t_27 = __pyx_v_i; + if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_0_predicted; + __pyx_v_Wloc = (__pyx_v_W * (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_27, __pyx_bstride_0_predicted))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":336 + * Wloc = W*predicted[i] + * + * one_err = (data[i]-predicted[i]) # <<<<<<<<<<<<<< + * + * if (one_err >= 0) and (one_err < Wloc): + */ + __pyx_t_28 = __pyx_v_i; + if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_data; + __pyx_t_29 = __pyx_v_i; + if (__pyx_t_29 < 0) __pyx_t_29 += __pyx_bshape_0_predicted; + __pyx_v_one_err = ((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_data.buf, __pyx_t_28, __pyx_bstride_0_data)) - (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_29, __pyx_bstride_0_predicted))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":338 + * one_err = (data[i]-predicted[i]) + * + * if (one_err >= 0) and (one_err < Wloc): # <<<<<<<<<<<<<< + * d = Wloc*Wloc + * elif (one_err < 0): + */ + __pyx_t_16 = (__pyx_v_one_err >= 0.0); + if (__pyx_t_16) { + __pyx_t_15 = (__pyx_v_one_err < __pyx_v_Wloc); + __pyx_t_17 = __pyx_t_15; + } else { + __pyx_t_17 = __pyx_t_16; + } + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":339 + * + * if (one_err >= 0) and (one_err < Wloc): + * d = Wloc*Wloc # <<<<<<<<<<<<<< + * elif (one_err < 0): + * d = Wloc*Wloc + one_err*one_err + */ + __pyx_v_d = (__pyx_v_Wloc * __pyx_v_Wloc); + goto __pyx_L11; + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":340 + * if (one_err >= 0) and (one_err < Wloc): + * d = Wloc*Wloc + * elif (one_err < 0): # <<<<<<<<<<<<<< + * d = Wloc*Wloc + one_err*one_err + * else: + */ + __pyx_t_17 = (__pyx_v_one_err < 0.0); + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":341 + * d = Wloc*Wloc + * elif (one_err < 0): + * d = Wloc*Wloc + one_err*one_err # <<<<<<<<<<<<<< + * else: + * d = one_err*one_err + */ + __pyx_v_d = ((__pyx_v_Wloc * __pyx_v_Wloc) + (__pyx_v_one_err * __pyx_v_one_err)); + goto __pyx_L11; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":343 + * d = Wloc*Wloc + one_err*one_err + * else: + * d = one_err*one_err # <<<<<<<<<<<<<< + * + * sloc2 = sloc*sloc + */ + __pyx_v_d = (__pyx_v_one_err * __pyx_v_one_err); + } + __pyx_L11:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":345 + * d = one_err*one_err + * + * sloc2 = sloc*sloc # <<<<<<<<<<<<<< + * chi2 = chi2 + d/(sloc2) + * + */ + __pyx_v_sloc2 = (__pyx_v_sloc * __pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":346 + * + * sloc2 = sloc*sloc + * chi2 = chi2 + d/(sloc2) # <<<<<<<<<<<<<< + * + * u = Wloc*Wloc/sloc2 + */ + __pyx_v_chi2 = (__pyx_v_chi2 + (__pyx_v_d / __pyx_v_sloc2)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":348 + * chi2 = chi2 + d/(sloc2) + * + * u = Wloc*Wloc/sloc2 # <<<<<<<<<<<<<< + * if u > 50: + * # We only keep the first term, the second term is totally + */ + __pyx_t_2 = PyFloat_FromDouble(((__pyx_v_Wloc * __pyx_v_Wloc) / __pyx_v_sloc2)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_v_u); + __pyx_v_u = __pyx_t_2; + __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":349 + * + * u = Wloc*Wloc/sloc2 + * if u > 50: # <<<<<<<<<<<<<< + * # We only keep the first term, the second term is totally + * # negligible + */ + __pyx_t_2 = PyObject_RichCompare(__pyx_v_u, __pyx_int_50, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_17 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":352 + * # We only keep the first term, the second term is totally + * # negligible + * one_norm = -0.5*u + log(Wloc + sqrt_pi_2 * sloc) # <<<<<<<<<<<<<< + * else: + * one_norm = -0.5*u + log(Wloc + sqrt_pi_2 * sloc * (1 + exp(0.5*u)*gsl_sf_erfc(Wloc/(sq2*sloc)))) + */ + __pyx_t_2 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyFloat_FromDouble(log((__pyx_v_Wloc + (__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_pi_2 * __pyx_v_sloc)))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_one_norm = __pyx_t_14; + goto __pyx_L12; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":354 + * one_norm = -0.5*u + log(Wloc + sqrt_pi_2 * sloc) + * else: + * one_norm = -0.5*u + log(Wloc + sqrt_pi_2 * sloc * (1 + exp(0.5*u)*gsl_sf_erfc(Wloc/(sq2*sloc)))) # <<<<<<<<<<<<<< + * + * # one_norm = log(Wloc*exp(-0.5*u) + \ + */ + __pyx_t_7 = PyFloat_FromDouble(-0.5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyNumber_Multiply(__pyx_t_7, __pyx_v_u); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyFloat_FromDouble(0.5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_v_u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_30 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_30 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyFloat_FromDouble(log((__pyx_v_Wloc + ((__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_pi_2 * __pyx_v_sloc) * (1.0 + (exp(__pyx_t_30) * gsl_sf_erfc((__pyx_v_Wloc / (__pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sq2 * __pyx_v_sloc))))))))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_one_norm = __pyx_t_14; + } + __pyx_L12:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":359 + * # 0.5*sqrt_2pi*sloc*(1+exp(-0.5*u))*gsl_sf_erfc(Wloc/(sq2*sloc))) + * + * norm_chi2 = norm_chi2 + one_norm # <<<<<<<<<<<<<< + * + * return chi2 + 2*norm_chi2, False + */ + __pyx_v_norm_chi2 = (__pyx_v_norm_chi2 + __pyx_v_one_norm); + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":361 + * norm_chi2 = norm_chi2 + one_norm + * + * return chi2 + 2*norm_chi2, False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = PyFloat_FromDouble((__pyx_v_chi2 + (2.0 * __pyx_v_norm_chi2))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_7 = 0; + __pyx_t_3 = 0; + __pyx_r = ((PyObject *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_predicted); + __Pyx_XDECREF(__pyx_v_c); + __Pyx_XDECREF(__pyx_v_u); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":367 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso5(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_6chi2_ellipsoid_aniso5(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_6chi2_ellipsoid_aniso5 = {__Pyx_NAMESTR("chi2_ellipsoid_aniso5"), (PyCFunction)__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_6chi2_ellipsoid_aniso5, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_6chi2_ellipsoid_aniso5(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_p = 0; + PyArrayObject *__pyx_v_data = 0; + PyArrayObject *__pyx_v_x_a = 0; + PyArrayObject *__pyx_v_x_b = 0; + int __pyx_v_N; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_A; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_b; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_c; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma_in; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma_out; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_d; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_norm_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_norm; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_err; + PyArrayObject *__pyx_v_predicted = 0; + int __pyx_v_i; + Py_buffer __pyx_bstruct_x_b; + Py_ssize_t __pyx_bstride_0_x_b = 0; + Py_ssize_t __pyx_bshape_0_x_b = 0; + Py_buffer __pyx_bstruct_x_a; + Py_ssize_t __pyx_bstride_0_x_a = 0; + Py_ssize_t __pyx_bshape_0_x_a = 0; + Py_buffer __pyx_bstruct_data; + Py_ssize_t __pyx_bstride_0_data = 0; + Py_ssize_t __pyx_bshape_0_data = 0; + Py_buffer __pyx_bstruct_predicted; + Py_ssize_t __pyx_bstride_0_predicted = 0; + Py_ssize_t __pyx_bshape_0_predicted = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_10; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_11; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_12; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_13; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_14; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + int __pyx_t_21; + int __pyx_t_22; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + int __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__data,&__pyx_n_s__x_a,&__pyx_n_s__x_b,&__pyx_n_s__N,0}; + __Pyx_RefNannySetupContext("chi2_ellipsoid_aniso5"); + __pyx_self = __pyx_self; + { + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso5", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_a); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso5", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_b); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso5", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso5", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "chi2_ellipsoid_aniso5") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_p = values[0]; + __pyx_v_data = ((PyArrayObject *)values[1]); + __pyx_v_x_a = ((PyArrayObject *)values[2]); + __pyx_v_x_b = ((PyArrayObject *)values[3]); + __pyx_v_N = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso5", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_bstruct_predicted.buf = NULL; + __pyx_bstruct_data.buf = NULL; + __pyx_bstruct_x_a.buf = NULL; + __pyx_bstruct_x_b.buf = NULL; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 0, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_a), __pyx_ptype_5numpy_ndarray, 0, "x_a", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_b), __pyx_ptype_5numpy_ndarray, 0, "x_b", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_data, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_data = __pyx_bstruct_data.strides[0]; + __pyx_bshape_0_data = __pyx_bstruct_data.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_a, (PyObject*)__pyx_v_x_a, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_a = __pyx_bstruct_x_a.strides[0]; + __pyx_bshape_0_x_a = __pyx_bstruct_x_a.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_b, (PyObject*)__pyx_v_x_b, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_b = __pyx_bstruct_x_b.strides[0]; + __pyx_bshape_0_x_b = __pyx_bstruct_x_b.shape[0]; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":375 + * cdef DTYPE_t norm_chi2, sloc, sloc2, one_norm + * cdef DTYPE_t one_err, u, u2 + * cdef np.ndarray[DTYPE_t, ndim=1] predicted = np.empty(N, dtype=DTYPE) # <<<<<<<<<<<<<< + * global sqrt_2pi, sq2, sqrt_pi_2 + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromLong(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + __pyx_v_predicted = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_predicted.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":378 + * global sqrt_2pi, sq2, sqrt_pi_2 + * + * A,a,b,c,sigma_in,sigma_out=p # <<<<<<<<<<<<<< + * + * if A < 0 or a < 0 or b < 0 or sigma_in < 0 or sigma_out < 0: + */ + if ((likely(PyTuple_CheckExact(__pyx_v_p))) || (PyList_CheckExact(__pyx_v_p))) { + PyObject* sequence = __pyx_v_p; + if (likely(PyTuple_CheckExact(sequence))) { + if (unlikely(PyTuple_GET_SIZE(sequence) != 6)) { + if (PyTuple_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 5); + } else { + if (unlikely(PyList_GET_SIZE(sequence) != 6)) { + if (PyList_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + __pyx_t_6 = PyList_GET_ITEM(sequence, 4); + __pyx_t_7 = PyList_GET_ITEM(sequence, 5); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_v_p); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 2; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 3; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 4; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 5; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); + if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L7_unpacking_done:; + } + __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_13 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_15 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_A = __pyx_t_10; + __pyx_v_a = __pyx_t_11; + __pyx_v_b = __pyx_t_12; + __pyx_v_c = __pyx_t_13; + __pyx_v_sigma_in = __pyx_t_14; + __pyx_v_sigma_out = __pyx_t_15; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":380 + * A,a,b,c,sigma_in,sigma_out=p + * + * if A < 0 or a < 0 or b < 0 or sigma_in < 0 or sigma_out < 0: # <<<<<<<<<<<<<< + * return 0,True + * + */ + __pyx_t_16 = (__pyx_v_A < 0.0); + if (!__pyx_t_16) { + __pyx_t_17 = (__pyx_v_a < 0.0); + if (!__pyx_t_17) { + __pyx_t_18 = (__pyx_v_b < 0.0); + if (!__pyx_t_18) { + __pyx_t_19 = (__pyx_v_sigma_in < 0.0); + if (!__pyx_t_19) { + __pyx_t_20 = (__pyx_v_sigma_out < 0.0); + __pyx_t_21 = __pyx_t_20; + } else { + __pyx_t_21 = __pyx_t_19; + } + __pyx_t_19 = __pyx_t_21; + } else { + __pyx_t_19 = __pyx_t_18; + } + __pyx_t_18 = __pyx_t_19; + } else { + __pyx_t_18 = __pyx_t_17; + } + __pyx_t_17 = __pyx_t_18; + } else { + __pyx_t_17 = __pyx_t_16; + } + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":381 + * + * if A < 0 or a < 0 or b < 0 or sigma_in < 0 or sigma_out < 0: + * return 0,True # <<<<<<<<<<<<<< + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_6); + __pyx_t_6 = 0; + goto __pyx_L0; + goto __pyx_L8; + } + __pyx_L8:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":383 + * return 0,True + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) # <<<<<<<<<<<<<< + * + * chi2 = 0 + */ + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_A); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_a); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_b); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_c); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = __pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(((PyObject *)__pyx_t_1), ((PyArrayObject *)__pyx_v_x_a), ((PyArrayObject *)__pyx_v_x_b)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_3); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_t_22 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); + if (unlikely(__pyx_t_22 < 0)) { + PyErr_Fetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_v_predicted, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24); Py_XDECREF(__pyx_t_25); + __Pyx_RaiseBufferFallbackError(); + } else { + PyErr_Restore(__pyx_t_23, __pyx_t_24, __pyx_t_25); + } + } + __pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + if (unlikely(__pyx_t_22 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_predicted)); + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":385 + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + * + * chi2 = 0 # <<<<<<<<<<<<<< + * norm_chi2 = 0 + * + */ + __pyx_v_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":386 + * + * chi2 = 0 + * norm_chi2 = 0 # <<<<<<<<<<<<<< + * + * for i in range(N): + */ + __pyx_v_norm_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":388 + * norm_chi2 = 0 + * + * for i in range(N): # <<<<<<<<<<<<<< + * if predicted[i] == c: + * sigma = sigma_out + */ + __pyx_t_22 = __pyx_v_N; + for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_22; __pyx_t_26+=1) { + __pyx_v_i = __pyx_t_26; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":389 + * + * for i in range(N): + * if predicted[i] == c: # <<<<<<<<<<<<<< + * sigma = sigma_out + * sloc = sigma + */ + __pyx_t_27 = __pyx_v_i; + if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_0_predicted; + __pyx_t_17 = ((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_27, __pyx_bstride_0_predicted)) == __pyx_v_c); + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":390 + * for i in range(N): + * if predicted[i] == c: + * sigma = sigma_out # <<<<<<<<<<<<<< + * sloc = sigma + * else: + */ + __pyx_v_sigma = __pyx_v_sigma_out; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":391 + * if predicted[i] == c: + * sigma = sigma_out + * sloc = sigma # <<<<<<<<<<<<<< + * else: + * sigma = sigma_in + */ + __pyx_v_sloc = __pyx_v_sigma; + goto __pyx_L11; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":393 + * sloc = sigma + * else: + * sigma = sigma_in # <<<<<<<<<<<<<< + * sloc = sigma*sqrt(1/x_a[i]) + * + */ + __pyx_v_sigma = __pyx_v_sigma_in; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":394 + * else: + * sigma = sigma_in + * sloc = sigma*sqrt(1/x_a[i]) # <<<<<<<<<<<<<< + * + * one_err = (data[i]-predicted[i]) + */ + __pyx_t_28 = __pyx_v_i; + if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_x_a; + __pyx_v_sloc = (__pyx_v_sigma * sqrt((1.0 / (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_28, __pyx_bstride_0_x_a))))); + } + __pyx_L11:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":396 + * sloc = sigma*sqrt(1/x_a[i]) + * + * one_err = (data[i]-predicted[i]) # <<<<<<<<<<<<<< + * + * d = one_err*one_err + */ + __pyx_t_29 = __pyx_v_i; + if (__pyx_t_29 < 0) __pyx_t_29 += __pyx_bshape_0_data; + __pyx_t_30 = __pyx_v_i; + if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_bshape_0_predicted; + __pyx_v_one_err = ((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_data.buf, __pyx_t_29, __pyx_bstride_0_data)) - (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_30, __pyx_bstride_0_predicted))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":398 + * one_err = (data[i]-predicted[i]) + * + * d = one_err*one_err # <<<<<<<<<<<<<< + * + * sloc2 = sloc*sloc + */ + __pyx_v_d = (__pyx_v_one_err * __pyx_v_one_err); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":400 + * d = one_err*one_err + * + * sloc2 = sloc*sloc # <<<<<<<<<<<<<< + * chi2 = chi2 + d/(sloc2) + * + */ + __pyx_v_sloc2 = (__pyx_v_sloc * __pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":401 + * + * sloc2 = sloc*sloc + * chi2 = chi2 + d/(sloc2) # <<<<<<<<<<<<<< + * + * one_norm = log(sloc) + */ + __pyx_v_chi2 = (__pyx_v_chi2 + (__pyx_v_d / __pyx_v_sloc2)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":403 + * chi2 = chi2 + d/(sloc2) + * + * one_norm = log(sloc) # <<<<<<<<<<<<<< + * norm_chi2 = norm_chi2 + one_norm + * + */ + __pyx_v_one_norm = log(__pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":404 + * + * one_norm = log(sloc) + * norm_chi2 = norm_chi2 + one_norm # <<<<<<<<<<<<<< + * + * return chi2 + 2*norm_chi2, False + */ + __pyx_v_norm_chi2 = (__pyx_v_norm_chi2 + __pyx_v_one_norm); + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":406 + * norm_chi2 = norm_chi2 + one_norm + * + * return chi2 + 2*norm_chi2, False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyFloat_FromDouble((__pyx_v_chi2 + (2.0 * __pyx_v_norm_chi2))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_r = ((PyObject *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_predicted); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":411 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso6(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_7chi2_ellipsoid_aniso6(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_7chi2_ellipsoid_aniso6 = {__Pyx_NAMESTR("chi2_ellipsoid_aniso6"), (PyCFunction)__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_7chi2_ellipsoid_aniso6, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; +static PyObject *__pyx_pf_11voidProject_7apTools_4chi2_24velocityProfileFitNative_7chi2_ellipsoid_aniso6(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_p = 0; + PyArrayObject *__pyx_v_data = 0; + PyArrayObject *__pyx_v_x_a = 0; + PyArrayObject *__pyx_v_x_b = 0; + int __pyx_v_N; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_A; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_a; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_b; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_c; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma_in; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma_out; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sigma; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_d; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_norm_chi2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_sloc2; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_norm; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_v_one_err; + PyArrayObject *__pyx_v_predicted = 0; + int __pyx_v_i; + Py_buffer __pyx_bstruct_x_b; + Py_ssize_t __pyx_bstride_0_x_b = 0; + Py_ssize_t __pyx_bshape_0_x_b = 0; + Py_buffer __pyx_bstruct_x_a; + Py_ssize_t __pyx_bstride_0_x_a = 0; + Py_ssize_t __pyx_bshape_0_x_a = 0; + Py_buffer __pyx_bstruct_data; + Py_ssize_t __pyx_bstride_0_data = 0; + Py_ssize_t __pyx_bshape_0_data = 0; + Py_buffer __pyx_bstruct_predicted; + Py_ssize_t __pyx_bstride_0_predicted = 0; + Py_ssize_t __pyx_bshape_0_predicted = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_10; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_11; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_12; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_13; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_14; + __pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + int __pyx_t_21; + int __pyx_t_22; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + int __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + int __pyx_t_31; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__data,&__pyx_n_s__x_a,&__pyx_n_s__x_b,&__pyx_n_s__N,0}; + __Pyx_RefNannySetupContext("chi2_ellipsoid_aniso6"); + __pyx_self = __pyx_self; + { + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso6", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_a); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso6", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x_b); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso6", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso6", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "chi2_ellipsoid_aniso6") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_p = values[0]; + __pyx_v_data = ((PyArrayObject *)values[1]); + __pyx_v_x_a = ((PyArrayObject *)values[2]); + __pyx_v_x_b = ((PyArrayObject *)values[3]); + __pyx_v_N = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("chi2_ellipsoid_aniso6", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso6", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_bstruct_predicted.buf = NULL; + __pyx_bstruct_data.buf = NULL; + __pyx_bstruct_x_a.buf = NULL; + __pyx_bstruct_x_b.buf = NULL; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 0, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_a), __pyx_ptype_5numpy_ndarray, 0, "x_a", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x_b), __pyx_ptype_5numpy_ndarray, 0, "x_b", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_data, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_data = __pyx_bstruct_data.strides[0]; + __pyx_bshape_0_data = __pyx_bstruct_data.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_a, (PyObject*)__pyx_v_x_a, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_a = __pyx_bstruct_x_a.strides[0]; + __pyx_bshape_0_x_a = __pyx_bstruct_x_a.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_x_b, (PyObject*)__pyx_v_x_b, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_x_b = __pyx_bstruct_x_b.strides[0]; + __pyx_bshape_0_x_b = __pyx_bstruct_x_b.shape[0]; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":419 + * cdef DTYPE_t norm_chi2, sloc, sloc2, one_norm + * cdef DTYPE_t one_err, u, u2 + * cdef np.ndarray[DTYPE_t, ndim=1] predicted = np.empty(N, dtype=DTYPE) # <<<<<<<<<<<<<< + * global sqrt_2pi, sq2, sqrt_pi_2 + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromLong(__pyx_v_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + __pyx_v_predicted = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_predicted.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":422 + * global sqrt_2pi, sq2, sqrt_pi_2 + * + * A,a,b,c,sigma_in,sigma_out=p # <<<<<<<<<<<<<< + * + * if A < 0 or a < 0 or b < 0 or sigma_in < 0 or sigma_out < 0: + */ + if ((likely(PyTuple_CheckExact(__pyx_v_p))) || (PyList_CheckExact(__pyx_v_p))) { + PyObject* sequence = __pyx_v_p; + if (likely(PyTuple_CheckExact(sequence))) { + if (unlikely(PyTuple_GET_SIZE(sequence) != 6)) { + if (PyTuple_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 5); + } else { + if (unlikely(PyList_GET_SIZE(sequence) != 6)) { + if (PyList_GET_SIZE(sequence) > 6) __Pyx_RaiseTooManyValuesError(6); + else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + __pyx_t_6 = PyList_GET_ITEM(sequence, 4); + __pyx_t_7 = PyList_GET_ITEM(sequence, 5); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_v_p); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 2; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 3; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 4; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 5; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); + if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L7_unpacking_done:; + } + __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_13 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_14 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_15 == (npy_double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_A = __pyx_t_10; + __pyx_v_a = __pyx_t_11; + __pyx_v_b = __pyx_t_12; + __pyx_v_c = __pyx_t_13; + __pyx_v_sigma_in = __pyx_t_14; + __pyx_v_sigma_out = __pyx_t_15; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":424 + * A,a,b,c,sigma_in,sigma_out=p + * + * if A < 0 or a < 0 or b < 0 or sigma_in < 0 or sigma_out < 0: # <<<<<<<<<<<<<< + * return 0,True + * + */ + __pyx_t_16 = (__pyx_v_A < 0.0); + if (!__pyx_t_16) { + __pyx_t_17 = (__pyx_v_a < 0.0); + if (!__pyx_t_17) { + __pyx_t_18 = (__pyx_v_b < 0.0); + if (!__pyx_t_18) { + __pyx_t_19 = (__pyx_v_sigma_in < 0.0); + if (!__pyx_t_19) { + __pyx_t_20 = (__pyx_v_sigma_out < 0.0); + __pyx_t_21 = __pyx_t_20; + } else { + __pyx_t_21 = __pyx_t_19; + } + __pyx_t_19 = __pyx_t_21; + } else { + __pyx_t_19 = __pyx_t_18; + } + __pyx_t_18 = __pyx_t_19; + } else { + __pyx_t_18 = __pyx_t_17; + } + __pyx_t_17 = __pyx_t_18; + } else { + __pyx_t_17 = __pyx_t_16; + } + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":425 + * + * if A < 0 or a < 0 or b < 0 or sigma_in < 0 or sigma_out < 0: + * return 0,True # <<<<<<<<<<<<<< + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_6)); + __Pyx_INCREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + __pyx_r = ((PyObject *)__pyx_t_6); + __pyx_t_6 = 0; + goto __pyx_L0; + goto __pyx_L8; + } + __pyx_L8:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":427 + * return 0,True + * + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) # <<<<<<<<<<<<<< + * + * chi2 = 0 + */ + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_A); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_a); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_b); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_c); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = __pyx_f_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun_internal(((PyObject *)__pyx_t_1), ((PyArrayObject *)__pyx_v_x_a), ((PyArrayObject *)__pyx_v_x_b)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = ((PyArrayObject *)__pyx_t_3); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_t_22 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); + if (unlikely(__pyx_t_22 < 0)) { + PyErr_Fetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_predicted, (PyObject*)__pyx_v_predicted, &__Pyx_TypeInfo_nn___pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24); Py_XDECREF(__pyx_t_25); + __Pyx_RaiseBufferFallbackError(); + } else { + PyErr_Restore(__pyx_t_23, __pyx_t_24, __pyx_t_25); + } + } + __pyx_bstride_0_predicted = __pyx_bstruct_predicted.strides[0]; + __pyx_bshape_0_predicted = __pyx_bstruct_predicted.shape[0]; + if (unlikely(__pyx_t_22 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_5 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_predicted)); + __pyx_v_predicted = ((PyArrayObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":429 + * predicted = ellipsoid_fun_internal((A,a,b,c), x_a, x_b) + * + * chi2 = 0 # <<<<<<<<<<<<<< + * norm_chi2 = 0 + * + */ + __pyx_v_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":430 + * + * chi2 = 0 + * norm_chi2 = 0 # <<<<<<<<<<<<<< + * + * for i in range(N): + */ + __pyx_v_norm_chi2 = 0.0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":432 + * norm_chi2 = 0 + * + * for i in range(N): # <<<<<<<<<<<<<< + * if predicted[i] == c: + * sigma = sigma_out + */ + __pyx_t_22 = __pyx_v_N; + for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_22; __pyx_t_26+=1) { + __pyx_v_i = __pyx_t_26; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":433 + * + * for i in range(N): + * if predicted[i] == c: # <<<<<<<<<<<<<< + * sigma = sigma_out + * sloc = sigma*sqrt(1/x_a[i]) + */ + __pyx_t_27 = __pyx_v_i; + if (__pyx_t_27 < 0) __pyx_t_27 += __pyx_bshape_0_predicted; + __pyx_t_17 = ((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_27, __pyx_bstride_0_predicted)) == __pyx_v_c); + if (__pyx_t_17) { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":434 + * for i in range(N): + * if predicted[i] == c: + * sigma = sigma_out # <<<<<<<<<<<<<< + * sloc = sigma*sqrt(1/x_a[i]) + * else: + */ + __pyx_v_sigma = __pyx_v_sigma_out; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":435 + * if predicted[i] == c: + * sigma = sigma_out + * sloc = sigma*sqrt(1/x_a[i]) # <<<<<<<<<<<<<< + * else: + * sigma = sigma_in + */ + __pyx_t_28 = __pyx_v_i; + if (__pyx_t_28 < 0) __pyx_t_28 += __pyx_bshape_0_x_a; + __pyx_v_sloc = (__pyx_v_sigma * sqrt((1.0 / (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_28, __pyx_bstride_0_x_a))))); + goto __pyx_L11; + } + /*else*/ { + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":437 + * sloc = sigma*sqrt(1/x_a[i]) + * else: + * sigma = sigma_in # <<<<<<<<<<<<<< + * sloc = sigma*sqrt(1/x_a[i]) + * + */ + __pyx_v_sigma = __pyx_v_sigma_in; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":438 + * else: + * sigma = sigma_in + * sloc = sigma*sqrt(1/x_a[i]) # <<<<<<<<<<<<<< + * + * one_err = (data[i]-predicted[i]) + */ + __pyx_t_29 = __pyx_v_i; + if (__pyx_t_29 < 0) __pyx_t_29 += __pyx_bshape_0_x_a; + __pyx_v_sloc = (__pyx_v_sigma * sqrt((1.0 / (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_x_a.buf, __pyx_t_29, __pyx_bstride_0_x_a))))); + } + __pyx_L11:; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":440 + * sloc = sigma*sqrt(1/x_a[i]) + * + * one_err = (data[i]-predicted[i]) # <<<<<<<<<<<<<< + * + * d = one_err*one_err + */ + __pyx_t_30 = __pyx_v_i; + if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_bshape_0_data; + __pyx_t_31 = __pyx_v_i; + if (__pyx_t_31 < 0) __pyx_t_31 += __pyx_bshape_0_predicted; + __pyx_v_one_err = ((*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_data.buf, __pyx_t_30, __pyx_bstride_0_data)) - (*__Pyx_BufPtrStrided1d(__pyx_t_11voidProject_7apTools_4chi2_24velocityProfileFitNative_DTYPE_t *, __pyx_bstruct_predicted.buf, __pyx_t_31, __pyx_bstride_0_predicted))); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":442 + * one_err = (data[i]-predicted[i]) + * + * d = one_err*one_err # <<<<<<<<<<<<<< + * + * sloc2 = sloc*sloc + */ + __pyx_v_d = (__pyx_v_one_err * __pyx_v_one_err); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":444 + * d = one_err*one_err + * + * sloc2 = sloc*sloc # <<<<<<<<<<<<<< + * chi2 = chi2 + d/(sloc2) + * + */ + __pyx_v_sloc2 = (__pyx_v_sloc * __pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":445 + * + * sloc2 = sloc*sloc + * chi2 = chi2 + d/(sloc2) # <<<<<<<<<<<<<< + * + * one_norm = log(sloc) + */ + __pyx_v_chi2 = (__pyx_v_chi2 + (__pyx_v_d / __pyx_v_sloc2)); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":447 + * chi2 = chi2 + d/(sloc2) + * + * one_norm = log(sloc) # <<<<<<<<<<<<<< + * norm_chi2 = norm_chi2 + one_norm + * + */ + __pyx_v_one_norm = log(__pyx_v_sloc); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":448 + * + * one_norm = log(sloc) + * norm_chi2 = norm_chi2 + one_norm # <<<<<<<<<<<<<< + * + * return chi2 + 2*norm_chi2, False + */ + __pyx_v_norm_chi2 = (__pyx_v_norm_chi2 + __pyx_v_one_norm); + } + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":450 + * norm_chi2 = norm_chi2 + one_norm + * + * return chi2 + 2*norm_chi2, False # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyFloat_FromDouble((__pyx_v_chi2 + (2.0 * __pyx_v_norm_chi2))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_r = ((PyObject *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("voidProject.apTools.chi2.velocityProfileFitNative.chi2_ellipsoid_aniso6", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_b); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_x_a); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_data); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_predicted); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_predicted); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":190 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fullfill the PEP. + */ + +static CYTHON_UNUSED int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_copy_shape; + int __pyx_v_i; + int __pyx_v_ndim; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + int __pyx_v_t; + char *__pyx_v_f; + PyArray_Descr *__pyx_v_descr = 0; + int __pyx_v_offset; + int __pyx_v_hasfields; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + char *__pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getbuffer__"); + if (__pyx_v_info != NULL) { + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + } + + /* "numpy.pxd":196 + * # of flags + * + * if info == NULL: return # <<<<<<<<<<<<<< + * + * cdef int copy_shape, i, ndim + */ + __pyx_t_1 = (__pyx_v_info == NULL); + if (__pyx_t_1) { + __pyx_r = 0; + goto __pyx_L0; + goto __pyx_L5; + } + __pyx_L5:; + + /* "numpy.pxd":199 + * + * cdef int copy_shape, i, ndim + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + */ + __pyx_v_endian_detector = 1; + + /* "numpy.pxd":200 + * cdef int copy_shape, i, ndim + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * + * ndim = PyArray_NDIM(self) + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "numpy.pxd":202 + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_v_ndim = PyArray_NDIM(((PyArrayObject *)__pyx_v_self)); + + /* "numpy.pxd":204 + * ndim = PyArray_NDIM(self) + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * copy_shape = 1 + * else: + */ + __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t))); + if (__pyx_t_1) { + + /* "numpy.pxd":205 + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * copy_shape = 1 # <<<<<<<<<<<<<< + * else: + * copy_shape = 0 + */ + __pyx_v_copy_shape = 1; + goto __pyx_L6; + } + /*else*/ { + + /* "numpy.pxd":207 + * copy_shape = 1 + * else: + * copy_shape = 0 # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + */ + __pyx_v_copy_shape = 0; + } + __pyx_L6:; + + /* "numpy.pxd":209 + * copy_shape = 0 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS); + if (__pyx_t_1) { + + /* "numpy.pxd":210 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not C contiguous") + * + */ + __pyx_t_2 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_C_CONTIGUOUS)); + __pyx_t_3 = __pyx_t_2; + } else { + __pyx_t_3 = __pyx_t_1; + } + if (__pyx_t_3) { + + /* "numpy.pxd":211 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L7; + } + __pyx_L7:; + + /* "numpy.pxd":213 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + __pyx_t_3 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS); + if (__pyx_t_3) { + + /* "numpy.pxd":214 + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not Fortran contiguous") + * + */ + __pyx_t_1 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_F_CONTIGUOUS)); + __pyx_t_2 = __pyx_t_1; + } else { + __pyx_t_2 = __pyx_t_3; + } + if (__pyx_t_2) { + + /* "numpy.pxd":215 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L8; + } + __pyx_L8:; + + /* "numpy.pxd":217 + * raise ValueError(u"ndarray is not Fortran contiguous") + * + * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< + * info.ndim = ndim + * if copy_shape: + */ + __pyx_v_info->buf = PyArray_DATA(((PyArrayObject *)__pyx_v_self)); + + /* "numpy.pxd":218 + * + * info.buf = PyArray_DATA(self) + * info.ndim = ndim # <<<<<<<<<<<<<< + * if copy_shape: + * # Allocate new buffer for strides and shape info. + */ + __pyx_v_info->ndim = __pyx_v_ndim; + + /* "numpy.pxd":219 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if copy_shape: # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + */ + if (__pyx_v_copy_shape) { + + /* "numpy.pxd":222 + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< + * info.shape = info.strides + ndim + * for i in range(ndim): + */ + __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); + + /* "numpy.pxd":223 + * # This is allocated as one block, strides first. + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) + * info.shape = info.strides + ndim # <<<<<<<<<<<<<< + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + */ + __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); + + /* "numpy.pxd":224 + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) + * info.shape = info.strides + ndim + * for i in range(ndim): # <<<<<<<<<<<<<< + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] + */ + __pyx_t_5 = __pyx_v_ndim; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "numpy.pxd":225 + * info.shape = info.strides + ndim + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + */ + (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(((PyArrayObject *)__pyx_v_self))[__pyx_v_i]); + + /* "numpy.pxd":226 + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< + * else: + * info.strides = PyArray_STRIDES(self) + */ + (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(((PyArrayObject *)__pyx_v_self))[__pyx_v_i]); + } + goto __pyx_L9; + } + /*else*/ { + + /* "numpy.pxd":228 + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + */ + __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(((PyArrayObject *)__pyx_v_self))); + + /* "numpy.pxd":229 + * else: + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + */ + __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(((PyArrayObject *)__pyx_v_self))); + } + __pyx_L9:; + + /* "numpy.pxd":230 + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) + */ + __pyx_v_info->suboffsets = NULL; + + /* "numpy.pxd":231 + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< + * info.readonly = not PyArray_ISWRITEABLE(self) + * + */ + __pyx_v_info->itemsize = PyArray_ITEMSIZE(((PyArrayObject *)__pyx_v_self)); + + /* "numpy.pxd":232 + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< + * + * cdef int t + */ + __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(((PyArrayObject *)__pyx_v_self))); + + /* "numpy.pxd":235 + * + * cdef int t + * cdef char* f = NULL # <<<<<<<<<<<<<< + * cdef dtype descr = self.descr + * cdef list stack + */ + __pyx_v_f = NULL; + + /* "numpy.pxd":236 + * cdef int t + * cdef char* f = NULL + * cdef dtype descr = self.descr # <<<<<<<<<<<<<< + * cdef list stack + * cdef int offset + */ + __Pyx_INCREF(((PyObject *)((PyArrayObject *)__pyx_v_self)->descr)); + __pyx_v_descr = ((PyArrayObject *)__pyx_v_self)->descr; + + /* "numpy.pxd":240 + * cdef int offset + * + * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< + * + * if not hasfields and not copy_shape: + */ + __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); + + /* "numpy.pxd":242 + * cdef bint hasfields = PyDataType_HASFIELDS(descr) + * + * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< + * # do not call releasebuffer + * info.obj = None + */ + __pyx_t_2 = (!__pyx_v_hasfields); + if (__pyx_t_2) { + __pyx_t_3 = (!__pyx_v_copy_shape); + __pyx_t_1 = __pyx_t_3; + } else { + __pyx_t_1 = __pyx_t_2; + } + if (__pyx_t_1) { + + /* "numpy.pxd":244 + * if not hasfields and not copy_shape: + * # do not call releasebuffer + * info.obj = None # <<<<<<<<<<<<<< + * else: + * # need to call releasebuffer + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = Py_None; + goto __pyx_L12; + } + /*else*/ { + + /* "numpy.pxd":247 + * else: + * # need to call releasebuffer + * info.obj = self # <<<<<<<<<<<<<< + * + * if not hasfields: + */ + __Pyx_INCREF(__pyx_v_self); + __Pyx_GIVEREF(__pyx_v_self); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = __pyx_v_self; + } + __pyx_L12:; + + /* "numpy.pxd":249 + * info.obj = self + * + * if not hasfields: # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == '>' and little_endian) or + */ + __pyx_t_1 = (!__pyx_v_hasfields); + if (__pyx_t_1) { + + /* "numpy.pxd":250 + * + * if not hasfields: + * t = descr.type_num # <<<<<<<<<<<<<< + * if ((descr.byteorder == '>' and little_endian) or + * (descr.byteorder == '<' and not little_endian)): + */ + __pyx_v_t = __pyx_v_descr->type_num; + + /* "numpy.pxd":251 + * if not hasfields: + * t = descr.type_num + * if ((descr.byteorder == '>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_1 = (__pyx_v_descr->byteorder == '>'); + if (__pyx_t_1) { + __pyx_t_2 = __pyx_v_little_endian; + } else { + __pyx_t_2 = __pyx_t_1; + } + if (!__pyx_t_2) { + + /* "numpy.pxd":252 + * t = descr.type_num + * if ((descr.byteorder == '>' and little_endian) or + * (descr.byteorder == '<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + */ + __pyx_t_1 = (__pyx_v_descr->byteorder == '<'); + if (__pyx_t_1) { + __pyx_t_3 = (!__pyx_v_little_endian); + __pyx_t_7 = __pyx_t_3; + } else { + __pyx_t_7 = __pyx_t_1; + } + __pyx_t_1 = __pyx_t_7; + } else { + __pyx_t_1 = __pyx_t_2; + } + if (__pyx_t_1) { + + /* "numpy.pxd":253 + * if ((descr.byteorder == '>' and little_endian) or + * (descr.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L14; + } + __pyx_L14:; + + /* "numpy.pxd":254 + * (descr.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + */ + __pyx_t_1 = (__pyx_v_t == NPY_BYTE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__b; + goto __pyx_L15; + } + + /* "numpy.pxd":255 + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + */ + __pyx_t_1 = (__pyx_v_t == NPY_UBYTE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__B; + goto __pyx_L15; + } + + /* "numpy.pxd":256 + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + */ + __pyx_t_1 = (__pyx_v_t == NPY_SHORT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__h; + goto __pyx_L15; + } + + /* "numpy.pxd":257 + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + */ + __pyx_t_1 = (__pyx_v_t == NPY_USHORT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__H; + goto __pyx_L15; + } + + /* "numpy.pxd":258 + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + */ + __pyx_t_1 = (__pyx_v_t == NPY_INT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__i; + goto __pyx_L15; + } + + /* "numpy.pxd":259 + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + */ + __pyx_t_1 = (__pyx_v_t == NPY_UINT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__I; + goto __pyx_L15; + } + + /* "numpy.pxd":260 + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + */ + __pyx_t_1 = (__pyx_v_t == NPY_LONG); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__l; + goto __pyx_L15; + } + + /* "numpy.pxd":261 + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + */ + __pyx_t_1 = (__pyx_v_t == NPY_ULONG); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__L; + goto __pyx_L15; + } + + /* "numpy.pxd":262 + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + */ + __pyx_t_1 = (__pyx_v_t == NPY_LONGLONG); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__q; + goto __pyx_L15; + } + + /* "numpy.pxd":263 + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + */ + __pyx_t_1 = (__pyx_v_t == NPY_ULONGLONG); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__Q; + goto __pyx_L15; + } + + /* "numpy.pxd":264 + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + */ + __pyx_t_1 = (__pyx_v_t == NPY_FLOAT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__f; + goto __pyx_L15; + } + + /* "numpy.pxd":265 + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + */ + __pyx_t_1 = (__pyx_v_t == NPY_DOUBLE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__d; + goto __pyx_L15; + } + + /* "numpy.pxd":266 + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + */ + __pyx_t_1 = (__pyx_v_t == NPY_LONGDOUBLE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__g; + goto __pyx_L15; + } + + /* "numpy.pxd":267 + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + */ + __pyx_t_1 = (__pyx_v_t == NPY_CFLOAT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__Zf; + goto __pyx_L15; + } + + /* "numpy.pxd":268 + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" + */ + __pyx_t_1 = (__pyx_v_t == NPY_CDOUBLE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__Zd; + goto __pyx_L15; + } + + /* "numpy.pxd":269 + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f = "O" + * else: + */ + __pyx_t_1 = (__pyx_v_t == NPY_CLONGDOUBLE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__Zg; + goto __pyx_L15; + } + + /* "numpy.pxd":270 + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_t_1 = (__pyx_v_t == NPY_OBJECT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__O; + goto __pyx_L15; + } + /*else*/ { + + /* "numpy.pxd":272 + * elif t == NPY_OBJECT: f = "O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * info.format = f + * return + */ + __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_9), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_8)); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_8)); + __pyx_t_8 = 0; + __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_L15:; + + /* "numpy.pxd":273 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f # <<<<<<<<<<<<<< + * return + * else: + */ + __pyx_v_info->format = __pyx_v_f; + + /* "numpy.pxd":274 + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f + * return # <<<<<<<<<<<<<< + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) + */ + __pyx_r = 0; + goto __pyx_L0; + goto __pyx_L13; + } + /*else*/ { + + /* "numpy.pxd":276 + * return + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< + * info.format[0] = '^' # Native data types, manual alignment + * offset = 0 + */ + __pyx_v_info->format = ((char *)malloc(255)); + + /* "numpy.pxd":277 + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) + * info.format[0] = '^' # Native data types, manual alignment # <<<<<<<<<<<<<< + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, + */ + (__pyx_v_info->format[0]) = '^'; + + /* "numpy.pxd":278 + * info.format = stdlib.malloc(_buffer_format_string_len) + * info.format[0] = '^' # Native data types, manual alignment + * offset = 0 # <<<<<<<<<<<<<< + * f = _util_dtypestring(descr, info.format + 1, + * info.format + _buffer_format_string_len, + */ + __pyx_v_offset = 0; + + /* "numpy.pxd":281 + * f = _util_dtypestring(descr, info.format + 1, + * info.format + _buffer_format_string_len, + * &offset) # <<<<<<<<<<<<<< + * f[0] = 0 # Terminate format string + * + */ + __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_f = __pyx_t_9; + + /* "numpy.pxd":282 + * info.format + _buffer_format_string_len, + * &offset) + * f[0] = 0 # Terminate format string # <<<<<<<<<<<<<< + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + */ + (__pyx_v_f[0]) = 0; + } + __pyx_L13:; + + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(Py_None); + __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; + } + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_descr); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":284 + * f[0] = 0 # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + */ + +static CYTHON_UNUSED void __pyx_pf_5numpy_7ndarray_1__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ +static CYTHON_UNUSED void __pyx_pf_5numpy_7ndarray_1__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__releasebuffer__"); + + /* "numpy.pxd":285 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_t_1 = PyArray_HASFIELDS(((PyArrayObject *)__pyx_v_self)); + if (__pyx_t_1) { + + /* "numpy.pxd":286 + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) # <<<<<<<<<<<<<< + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * stdlib.free(info.strides) + */ + free(__pyx_v_info->format); + goto __pyx_L5; + } + __pyx_L5:; + + /* "numpy.pxd":287 + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * stdlib.free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t))); + if (__pyx_t_1) { + + /* "numpy.pxd":288 + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * stdlib.free(info.strides) # <<<<<<<<<<<<<< + * # info.shape was stored after info.strides in the same block + * + */ + free(__pyx_v_info->strides); + goto __pyx_L6; + } + __pyx_L6:; + + __Pyx_RefNannyFinishContext(); +} + +/* "numpy.pxd":764 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew1"); + + /* "numpy.pxd":765 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":767 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew2"); + + /* "numpy.pxd":768 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":770 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew3"); + + /* "numpy.pxd":771 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":773 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew4"); + + /* "numpy.pxd":774 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":776 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew5"); + + /* "numpy.pxd":777 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":779 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { + PyArray_Descr *__pyx_v_child = 0; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + PyObject *__pyx_v_fields = 0; + PyObject *__pyx_v_childname = NULL; + PyObject *__pyx_v_new_offset = NULL; + PyObject *__pyx_v_t = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + long __pyx_t_10; + char *__pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_util_dtypestring"); + + /* "numpy.pxd":786 + * cdef int delta_offset + * cdef tuple i + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * cdef tuple fields + */ + __pyx_v_endian_detector = 1; + + /* "numpy.pxd":787 + * cdef tuple i + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * cdef tuple fields + * + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "numpy.pxd":790 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + for (;;) { + if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; + __Pyx_XDECREF(__pyx_v_childname); + __pyx_v_childname = __pyx_t_3; + __pyx_t_3 = 0; + + /* "numpy.pxd":791 + * + * for childname in descr.names: + * fields = descr.fields[childname] # <<<<<<<<<<<<<< + * child, new_offset = fields + * + */ + __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 791; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 791; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_XDECREF(((PyObject *)__pyx_v_fields)); + __pyx_v_fields = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "numpy.pxd":792 + * for childname in descr.names: + * fields = descr.fields[childname] + * child, new_offset = fields # <<<<<<<<<<<<<< + * + * if (end - f) - (new_offset - offset[0]) < 15: + */ + if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) { + PyObject* sequence = ((PyObject *)__pyx_v_fields); + if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) { + if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2); + else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + } else { + __Pyx_UnpackTupleError(((PyObject *)__pyx_v_fields), 2); + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_XDECREF(((PyObject *)__pyx_v_child)); + __pyx_v_child = ((PyArray_Descr *)__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_v_new_offset); + __pyx_v_new_offset = __pyx_t_4; + __pyx_t_4 = 0; + + /* "numpy.pxd":794 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + + /* "numpy.pxd":795 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == '>' and little_endian) or + */ + __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_11), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L5; + } + __pyx_L5:; + + /* "numpy.pxd":797 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == '>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_6 = (__pyx_v_child->byteorder == '>'); + if (__pyx_t_6) { + __pyx_t_7 = __pyx_v_little_endian; + } else { + __pyx_t_7 = __pyx_t_6; + } + if (!__pyx_t_7) { + + /* "numpy.pxd":798 + * + * if ((child.byteorder == '>' and little_endian) or + * (child.byteorder == '<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * # One could encode it in the format string and have Cython + */ + __pyx_t_6 = (__pyx_v_child->byteorder == '<'); + if (__pyx_t_6) { + __pyx_t_8 = (!__pyx_v_little_endian); + __pyx_t_9 = __pyx_t_8; + } else { + __pyx_t_9 = __pyx_t_6; + } + __pyx_t_6 = __pyx_t_9; + } else { + __pyx_t_6 = __pyx_t_7; + } + if (__pyx_t_6) { + + /* "numpy.pxd":799 + * if ((child.byteorder == '>' and little_endian) or + * (child.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L6; + } + __pyx_L6:; + + /* "numpy.pxd":809 + * + * # Output padding bytes + * while offset[0] < new_offset: # <<<<<<<<<<<<<< + * f[0] = 120 # "x"; pad byte + * f += 1 + */ + while (1) { + __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!__pyx_t_6) break; + + /* "numpy.pxd":810 + * # Output padding bytes + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< + * f += 1 + * offset[0] += 1 + */ + (__pyx_v_f[0]) = 120; + + /* "numpy.pxd":811 + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte + * f += 1 # <<<<<<<<<<<<<< + * offset[0] += 1 + * + */ + __pyx_v_f = (__pyx_v_f + 1); + + /* "numpy.pxd":812 + * f[0] = 120 # "x"; pad byte + * f += 1 + * offset[0] += 1 # <<<<<<<<<<<<<< + * + * offset[0] += child.itemsize + */ + __pyx_t_10 = 0; + (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + 1); + } + + /* "numpy.pxd":814 + * offset[0] += 1 + * + * offset[0] += child.itemsize # <<<<<<<<<<<<<< + * + * if not PyDataType_HASFIELDS(child): + */ + __pyx_t_10 = 0; + (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + __pyx_v_child->elsize); + + /* "numpy.pxd":816 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + __pyx_t_6 = (!PyDataType_HASFIELDS(__pyx_v_child)); + if (__pyx_t_6) { + + /* "numpy.pxd":817 + * + * if not PyDataType_HASFIELDS(child): + * t = child.type_num # <<<<<<<<<<<<<< + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") + */ + __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_v_t); + __pyx_v_t = __pyx_t_3; + __pyx_t_3 = 0; + + /* "numpy.pxd":818 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + __pyx_t_6 = ((__pyx_v_end - __pyx_v_f) < 5); + if (__pyx_t_6) { + + /* "numpy.pxd":819 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L10; + } + __pyx_L10:; + + /* "numpy.pxd":822 + * + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + */ + __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 98; + goto __pyx_L11; + } + + /* "numpy.pxd":823 + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + */ + __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 66; + goto __pyx_L11; + } + + /* "numpy.pxd":824 + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + */ + __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 104; + goto __pyx_L11; + } + + /* "numpy.pxd":825 + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + */ + __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 72; + goto __pyx_L11; + } + + /* "numpy.pxd":826 + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + */ + __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 105; + goto __pyx_L11; + } + + /* "numpy.pxd":827 + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + */ + __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 73; + goto __pyx_L11; + } + + /* "numpy.pxd":828 + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + */ + __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 108; + goto __pyx_L11; + } + + /* "numpy.pxd":829 + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + */ + __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 76; + goto __pyx_L11; + } + + /* "numpy.pxd":830 + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + */ + __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 113; + goto __pyx_L11; + } + + /* "numpy.pxd":831 + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + */ + __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 81; + goto __pyx_L11; + } + + /* "numpy.pxd":832 + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + */ + __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 102; + goto __pyx_L11; + } + + /* "numpy.pxd":833 + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + */ + __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 100; + goto __pyx_L11; + } + + /* "numpy.pxd":834 + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + */ + __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 103; + goto __pyx_L11; + } + + /* "numpy.pxd":835 + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + */ + __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 102; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L11; + } + + /* "numpy.pxd":836 + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" + */ + __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 100; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L11; + } + + /* "numpy.pxd":837 + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + */ + __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 103; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L11; + } + + /* "numpy.pxd":838 + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 79; + goto __pyx_L11; + } + /*else*/ { + + /* "numpy.pxd":840 + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * f += 1 + * else: + */ + __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_9), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_5)); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); + __pyx_t_5 = 0; + __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_L11:; + + /* "numpy.pxd":841 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * f += 1 # <<<<<<<<<<<<<< + * else: + * # Cython ignores struct boundary information ("T{...}"), + */ + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L9; + } + /*else*/ { + + /* "numpy.pxd":845 + * # Cython ignores struct boundary information ("T{...}"), + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< + * return f + * + */ + __pyx_t_11 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_11 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_f = __pyx_t_11; + } + __pyx_L9:; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numpy.pxd":846 + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) + * return f # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_f; + goto __pyx_L0; + + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_child); + __Pyx_XDECREF(__pyx_v_fields); + __Pyx_XDECREF(__pyx_v_childname); + __Pyx_XDECREF(__pyx_v_new_offset); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":961 + * + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * cdef PyObject* baseptr + * if base is None: + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + PyObject *__pyx_v_baseptr; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("set_array_base"); + + /* "numpy.pxd":963 + * cdef inline void set_array_base(ndarray arr, object base): + * cdef PyObject* baseptr + * if base is None: # <<<<<<<<<<<<<< + * baseptr = NULL + * else: + */ + __pyx_t_1 = (__pyx_v_base == Py_None); + if (__pyx_t_1) { + + /* "numpy.pxd":964 + * cdef PyObject* baseptr + * if base is None: + * baseptr = NULL # <<<<<<<<<<<<<< + * else: + * Py_INCREF(base) # important to do this before decref below! + */ + __pyx_v_baseptr = NULL; + goto __pyx_L3; + } + /*else*/ { + + /* "numpy.pxd":966 + * baseptr = NULL + * else: + * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< + * baseptr = base + * Py_XDECREF(arr.base) + */ + Py_INCREF(__pyx_v_base); + + /* "numpy.pxd":967 + * else: + * Py_INCREF(base) # important to do this before decref below! + * baseptr = base # <<<<<<<<<<<<<< + * Py_XDECREF(arr.base) + * arr.base = baseptr + */ + __pyx_v_baseptr = ((PyObject *)__pyx_v_base); + } + __pyx_L3:; + + /* "numpy.pxd":968 + * Py_INCREF(base) # important to do this before decref below! + * baseptr = base + * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< + * arr.base = baseptr + * + */ + Py_XDECREF(__pyx_v_arr->base); + + /* "numpy.pxd":969 + * baseptr = base + * Py_XDECREF(arr.base) + * arr.base = baseptr # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + __pyx_v_arr->base = __pyx_v_baseptr; + + __Pyx_RefNannyFinishContext(); +} + +/* "numpy.pxd":971 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base"); + + /* "numpy.pxd":972 + * + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: # <<<<<<<<<<<<<< + * return None + * else: + */ + __pyx_t_1 = (__pyx_v_arr->base == NULL); + if (__pyx_t_1) { + + /* "numpy.pxd":973 + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: + * return None # <<<<<<<<<<<<<< + * else: + * return arr.base + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_None); + __pyx_r = Py_None; + goto __pyx_L0; + goto __pyx_L3; + } + /*else*/ { + + /* "numpy.pxd":975 + * return None + * else: + * return arr.base # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); + __pyx_r = ((PyObject *)__pyx_v_arr->base); + goto __pyx_L0; + } + __pyx_L3:; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + __Pyx_NAMESTR("velocityProfileFitNative"), + 0, /* m_doc */ + -1, /* m_size */ + __pyx_methods /* m_methods */, + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, + {&__pyx_kp_u_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 1, 0, 0}, + {&__pyx_kp_u_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 1, 0, 0}, + {&__pyx_n_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 1}, + {&__pyx_n_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 1}, + {&__pyx_n_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 1}, + {&__pyx_n_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 1}, + {&__pyx_n_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 1}, + {&__pyx_n_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 1}, + {&__pyx_n_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 1}, + {&__pyx_kp_u_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 1, 0, 0}, + {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0}, + {&__pyx_kp_u_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 1, 0, 0}, + {&__pyx_kp_u_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 1, 0, 0}, + {&__pyx_n_s__DTYPE, __pyx_k__DTYPE, sizeof(__pyx_k__DTYPE), 0, 0, 1, 1}, + {&__pyx_n_s__N, __pyx_k__N, sizeof(__pyx_k__N), 0, 0, 1, 1}, + {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, + {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, + {&__pyx_n_s____all__, __pyx_k____all__, sizeof(__pyx_k____all__), 0, 0, 1, 1}, + {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, + {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, + {&__pyx_n_s__array, __pyx_k__array, sizeof(__pyx_k__array), 0, 0, 1, 1}, + {&__pyx_n_s__chi2_ellipsoid, __pyx_k__chi2_ellipsoid, sizeof(__pyx_k__chi2_ellipsoid), 0, 0, 1, 1}, + {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1}, + {&__pyx_n_s__double, __pyx_k__double, sizeof(__pyx_k__double), 0, 0, 1, 1}, + {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1}, + {&__pyx_n_s__ellipsoid_fun, __pyx_k__ellipsoid_fun, sizeof(__pyx_k__ellipsoid_fun), 0, 0, 1, 1}, + {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1}, + {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1}, + {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1}, + {&__pyx_n_s__p, __pyx_k__p, sizeof(__pyx_k__p), 0, 0, 1, 1}, + {&__pyx_n_s__pi, __pyx_k__pi, sizeof(__pyx_k__pi), 0, 0, 1, 1}, + {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1}, + {&__pyx_n_s__reshape, __pyx_k__reshape, sizeof(__pyx_k__reshape), 0, 0, 1, 1}, + {&__pyx_n_s__shape, __pyx_k__shape, sizeof(__pyx_k__shape), 0, 0, 1, 1}, + {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1}, + {&__pyx_n_s__x_a, __pyx_k__x_a, sizeof(__pyx_k__x_a), 0, 0, 1, 1}, + {&__pyx_n_s__x_b, __pyx_k__x_b, sizeof(__pyx_k__x_b), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + return 0; + __pyx_L1_error:; + return -1; +} + +static int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":70 + * + * if (type(x_a) != np.ndarray) or (type(x_b) != np.ndarray): + * raise ValueError("Invalid type for x_a or x_b"); # <<<<<<<<<<<<<< + * + * if x_a.dtype != DTYPE: + */ + __pyx_k_tuple_2 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_2)); + __Pyx_INCREF(((PyObject *)__pyx_kp_s_1)); + PyTuple_SET_ITEM(__pyx_k_tuple_2, 0, ((PyObject *)__pyx_kp_s_1)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2)); + + /* "numpy.pxd":211 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_4)); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_3)); + PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_u_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4)); + + /* "numpy.pxd":215 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6)); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_5)); + PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_u_5)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_5)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); + + /* "numpy.pxd":253 + * if ((descr.byteorder == '>' and little_endian) or + * (descr.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_8)); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_7)); + PyTuple_SET_ITEM(__pyx_k_tuple_8, 0, ((PyObject *)__pyx_kp_u_7)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_7)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8)); + + /* "numpy.pxd":795 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == '>' and little_endian) or + */ + __pyx_k_tuple_11 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_11)); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_10)); + PyTuple_SET_ITEM(__pyx_k_tuple_11, 0, ((PyObject *)__pyx_kp_u_10)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_10)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_11)); + + /* "numpy.pxd":799 + * if ((child.byteorder == '>' and little_endian) or + * (child.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_12)); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_7)); + PyTuple_SET_ITEM(__pyx_k_tuple_12, 0, ((PyObject *)__pyx_kp_u_7)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_7)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_12)); + + /* "numpy.pxd":819 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_14)); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_13)); + PyTuple_SET_ITEM(__pyx_k_tuple_14, 0, ((PyObject *)__pyx_kp_u_13)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_13)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14)); + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + return 0; + __pyx_L1_error:; + return -1; +} + +#if PY_MAJOR_VERSION < 3 +PyMODINIT_FUNC initvelocityProfileFitNative(void); /*proto*/ +PyMODINIT_FUNC initvelocityProfileFitNative(void) +#else +PyMODINIT_FUNC PyInit_velocityProfileFitNative(void); /*proto*/ +PyMODINIT_FUNC PyInit_velocityProfileFitNative(void) +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + double __pyx_t_3; + __Pyx_RefNannyDeclarations + #if CYTHON_REFNANNY + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); + if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); + } + #endif + __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_velocityProfileFitNative(void)"); + if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #ifdef __pyx_binding_PyCFunctionType_USED + if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4(__Pyx_NAMESTR("velocityProfileFitNative"), __pyx_methods, 0, 0, PYTHON_API_VERSION); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + #if PY_MAJOR_VERSION < 3 + Py_INCREF(__pyx_m); + #endif + __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); + if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + /*--- Initialize various global constants etc. ---*/ + if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_module_is_main_voidProject__apTools__chi2__velocityProfileFitNative) { + if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + } + /*--- Builtin init code ---*/ + if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Constants init code ---*/ + if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Global init code ---*/ + /*--- Variable export code ---*/ + /*--- Function export code ---*/ + /*--- Type init code ---*/ + /*--- Type import code ---*/ + __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Variable import code ---*/ + /*--- Function import code ---*/ + /*--- Execution code ---*/ + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":2 + * cimport cython + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * + */ + __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":5 + * cimport numpy as np + * + * np.import_array() # <<<<<<<<<<<<<< + * + * DTYPE = np.double + */ + import_array(); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":7 + * np.import_array() + * + * DTYPE = np.double # <<<<<<<<<<<<<< + * ctypedef np.double_t DTYPE_t + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__double); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":25 + * cdef DTYPE_t sqrt_2pi, sq2, sqrt_pi_2 + * + * sqrt_pi_2 = sqrt(np.pi/2) # <<<<<<<<<<<<<< + * sqrt_2pi = sqrt(2*np.pi) + * sq2 = sqrt(2.0) + */ + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__pi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_int_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_pi_2 = sqrt(__pyx_t_3); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":26 + * + * sqrt_pi_2 = sqrt(np.pi/2) + * sqrt_2pi = sqrt(2*np.pi) # <<<<<<<<<<<<<< + * sq2 = sqrt(2.0) + * + */ + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__pi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyNumber_Multiply(__pyx_int_2, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sqrt_2pi = sqrt(__pyx_t_3); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":27 + * sqrt_pi_2 = sqrt(np.pi/2) + * sqrt_2pi = sqrt(2*np.pi) + * sq2 = sqrt(2.0) # <<<<<<<<<<<<<< + * + * __all__=["chi2_ellipsoid", + */ + __pyx_v_11voidProject_7apTools_4chi2_24velocityProfileFitNative_sq2 = sqrt(2.0); + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":29 + * sq2 = sqrt(2.0) + * + * __all__=["chi2_ellipsoid", # <<<<<<<<<<<<<< + * "chi2_ellipsoid_aniso","chi2_ellipsoid_aniso2", + * "chi2_ellipsoid_aniso3","chi2_ellipsoid_aniso4", + */ + __pyx_t_2 = PyList_New(8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + __Pyx_INCREF(((PyObject *)__pyx_n_s__chi2_ellipsoid)); + PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__chi2_ellipsoid)); + __Pyx_GIVEREF(((PyObject *)__pyx_n_s__chi2_ellipsoid)); + __Pyx_INCREF(((PyObject *)__pyx_n_s_15)); + PyList_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s_15)); + __Pyx_GIVEREF(((PyObject *)__pyx_n_s_15)); + __Pyx_INCREF(((PyObject *)__pyx_n_s_16)); + PyList_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_n_s_16)); + __Pyx_GIVEREF(((PyObject *)__pyx_n_s_16)); + __Pyx_INCREF(((PyObject *)__pyx_n_s_17)); + PyList_SET_ITEM(__pyx_t_2, 3, ((PyObject *)__pyx_n_s_17)); + __Pyx_GIVEREF(((PyObject *)__pyx_n_s_17)); + __Pyx_INCREF(((PyObject *)__pyx_n_s_18)); + PyList_SET_ITEM(__pyx_t_2, 4, ((PyObject *)__pyx_n_s_18)); + __Pyx_GIVEREF(((PyObject *)__pyx_n_s_18)); + __Pyx_INCREF(((PyObject *)__pyx_n_s_19)); + PyList_SET_ITEM(__pyx_t_2, 5, ((PyObject *)__pyx_n_s_19)); + __Pyx_GIVEREF(((PyObject *)__pyx_n_s_19)); + __Pyx_INCREF(((PyObject *)__pyx_n_s_20)); + PyList_SET_ITEM(__pyx_t_2, 6, ((PyObject *)__pyx_n_s_20)); + __Pyx_GIVEREF(((PyObject *)__pyx_n_s_20)); + __Pyx_INCREF(((PyObject *)__pyx_n_s__ellipsoid_fun)); + PyList_SET_ITEM(__pyx_t_2, 7, ((PyObject *)__pyx_n_s__ellipsoid_fun)); + __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ellipsoid_fun)); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s____all__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":65 + * return out_a + * + * def ellipsoid_fun(p, # <<<<<<<<<<<<<< + * x_a, + * x_b): + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_ellipsoid_fun, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ellipsoid_fun, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":94 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_1chi2_ellipsoid, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__chi2_ellipsoid, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":146 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_2chi2_ellipsoid_aniso, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_15, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":201 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso2(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_3chi2_ellipsoid_aniso2, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_16, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":258 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso3(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_4chi2_ellipsoid_aniso3, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_17, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":311 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso4(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_5chi2_ellipsoid_aniso4, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_18, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":367 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso5(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_6chi2_ellipsoid_aniso5, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":411 + * @cython.boundscheck(False) + * @cython.cdivision(True) + * def chi2_ellipsoid_aniso6(p, np.ndarray[DTYPE_t,ndim=1] data not None, # <<<<<<<<<<<<<< + * np.ndarray[DTYPE_t,ndim=1] x_a not None, + * np.ndarray[DTYPE_t,ndim=1] x_b not None, + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11voidProject_7apTools_4chi2_24velocityProfileFitNative_7chi2_ellipsoid_aniso6, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_20, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "voidProject/apTools/chi2/velocityProfileFitNative.pyx":1 + * cimport cython # <<<<<<<<<<<<<< + * import numpy as np + * cimport numpy as np + */ + __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; + + /* "numpy.pxd":971 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + if (__pyx_m) { + __Pyx_AddTraceback("init voidProject.apTools.chi2.velocityProfileFitNative", __pyx_clineno, __pyx_lineno, __pyx_filename); + Py_DECREF(__pyx_m); __pyx_m = 0; + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init voidProject.apTools.chi2.velocityProfileFitNative"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if PY_MAJOR_VERSION < 3 + return; + #else + return __pyx_m; + #endif +} + +/* Runtime support code */ + +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule((char *)modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif /* CYTHON_REFNANNY */ + +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { + PyObject *result; + result = PyObject_GetAttr(dict, name); + if (!result) { + if (dict != __pyx_b) { + PyErr_Clear(); + result = PyObject_GetAttr(__pyx_b, name); + } + if (!result) { + PyErr_SetObject(PyExc_NameError, name); + } + } + return result; +} + +static CYTHON_INLINE int __Pyx_IsLittleEndian(void) { + unsigned int n = 1; + return *(unsigned char*)(&n) != 0; +} + +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; +} __Pyx_BufFmt_Context; + +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} + +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t < '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} + +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} + +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case 'b': return "'char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 0: return "end"; + default: return "unparseable format string"; + } +} + +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} + +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case 'c': case 'b': case 'B': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} + +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif + +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} + +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': case 'b': case 'h': case 'i': case 'l': case 'q': return 'I'; + case 'B': case 'H': case 'I': case 'L': case 'Q': return 'U'; + case 'f': case 'd': case 'g': return (is_complex ? 'C' : 'R'); + case 'O': return 'O'; + case 'P': return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} + +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} + +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset; + if (ctx->enc_type == 0) return 0; + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + } + + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + /* special case -- treat as struct rather than complex number */ + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %"PY_FORMAT_SIZE_T"d but %"PY_FORMAT_SIZE_T"d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + + ctx->fmt_offset += size; + + --ctx->enc_count; /* Consume from buffer string */ + + /* Done checking, move to next field, pushing or popping struct stack if needed */ + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; /* breaks both loops as ctx->enc_count == 0 */ + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; /* empty struct */ + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} + +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case 10: + case 13: + ++ts; + break; + case '<': + if (!__Pyx_IsLittleEndian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_IsLittleEndian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': /* substruct */ + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + } + break; + case '}': /* end of substruct; either repeat or move on */ + ++ts; + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } /* fall through */ + case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': + if (ctx->enc_type == *ts && got_Z == ctx->is_complex && + ctx->enc_packmode == ctx->new_packmode) { + /* Continue pooling same type */ + ctx->enc_count += ctx->new_count; + } else { + /* New type */ + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + } + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + default: + { + int number = __Pyx_BufFmt_ParseNumber(&ts); + if (number == -1) { /* First char was not a digit */ + PyErr_Format(PyExc_ValueError, + "Does not understand character buffer dtype format string ('%c')", *ts); + return NULL; + } + ctx->new_count = (size_t)number; + } + } + } +} + +static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} + +static CYTHON_INLINE int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack) { + if (obj == Py_None || obj == NULL) { + __Pyx_ZeroBuffer(buf); + return 0; + } + buf->buf = NULL; + if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail; + if (buf->ndim != nd) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if ((unsigned)buf->itemsize != dtype->size) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%"PY_FORMAT_SIZE_T"d byte%s) does not match size of '%s' (%"PY_FORMAT_SIZE_T"d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_ZeroBuffer(buf); + return -1; +} + +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (info->buf == NULL) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} + +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_Format(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(PyObject_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %"PY_FORMAT_SIZE_T"d value%s to unpack", + index, (index == 1) ? "" : "s"); +} + +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %"PY_FORMAT_SIZE_T"d)", expected); +} + +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } else if (PyErr_Occurred()) { + if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { + PyErr_Clear(); + return 0; + } else { + return -1; + } + } + return 0; +} + +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyThreadState *tstate = PyThreadState_GET(); + + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} + +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { + PyThreadState *tstate = PyThreadState_GET(); + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} + + +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AS_STRING(kw_name)); + #endif +} + +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + } else { + #if PY_MAJOR_VERSION < 3 + if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) { + #else + if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) { + #endif + goto invalid_keyword_type; + } else { + for (name = first_kw_arg; *name; name++) { + #if PY_MAJOR_VERSION >= 3 + if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && + PyUnicode_Compare(**name, key) == 0) break; + #else + if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && + _PyString_Eq(**name, key)) break; + #endif + } + if (*name) { + values[name-argnames] = value; + } else { + /* unexpected keyword found */ + for (name=argnames; name != first_kw_arg; name++) { + if (**name == key) goto arg_passed_twice; + #if PY_MAJOR_VERSION >= 3 + if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && + PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice; + #else + if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && + _PyString_Eq(**name, key)) goto arg_passed_twice; + #endif + } + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + } + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, **name); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%s() got an unexpected keyword argument '%s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + /* cause is unused */ + Py_XINCREF(type); + Py_XINCREF(value); + Py_XINCREF(tb); + /* First, check the traceback argument, replacing None with NULL. */ + if (tb == Py_None) { + Py_DECREF(tb); + tb = 0; + } + else if (tb != NULL && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + /* Next, replace a missing value with None */ + if (value == NULL) { + value = Py_None; + Py_INCREF(value); + } + #if PY_VERSION_HEX < 0x02050000 + if (!PyClass_Check(type)) + #else + if (!PyType_Check(type)) + #endif + { + /* Raising an instance. The value should be a dummy. */ + if (value != Py_None) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + /* Normalize to raise , */ + Py_DECREF(value); + value = type; + #if PY_VERSION_HEX < 0x02050000 + if (PyInstance_Check(type)) { + type = (PyObject*) ((PyInstanceObject*)type)->in_class; + Py_INCREF(type); + } + else { + type = 0; + PyErr_SetString(PyExc_TypeError, + "raise: exception must be an old-style class or instance"); + goto raise_error; + } + #else + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + #endif + } + + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} + +#else /* Python 3+ */ + +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (!PyExceptionClass_Check(type)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + + if (cause) { + PyObject *fixed_cause; + if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } + else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } + else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + if (!value) { + value = PyObject_CallObject(type, NULL); + } + PyException_SetCause(value, fixed_cause); + } + + PyErr_SetObject(type, value); + + if (tb) { + PyThreadState *tstate = PyThreadState_GET(); + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } + } + +bad: + return; +} +#endif + +static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact) +{ + if (!type) { + PyErr_Format(PyExc_SystemError, "Missing type object"); + return 0; + } + if (none_allowed && obj == Py_None) return 1; + else if (exact) { + if (Py_TYPE(obj) == type) return 1; + } + else { + if (PyObject_TypeCheck(obj, type)) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%s' has incorrect type (expected %s, got %s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +static void __Pyx_RaiseBufferFallbackError(void) { + PyErr_Format(PyExc_ValueError, + "Buffer acquisition failed on assignment; and then reacquiring the old buffer failed too!"); +} + + +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(index); + } +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + #if PY_VERSION_HEX >= 0x02060000 + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + #endif + if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pf_5numpy_7ndarray___getbuffer__(obj, view, flags); + else { + PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name); + return -1; + } +} + +static void __Pyx_ReleaseBuffer(Py_buffer *view) { + PyObject* obj = view->obj; + if (obj) { + #if PY_VERSION_HEX >= 0x02060000 + if (PyObject_CheckBuffer(obj)) {PyBuffer_Release(view); return;} + #endif + if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) __pyx_pf_5numpy_7ndarray_1__releasebuffer__(obj, view); + Py_DECREF(obj); + view->obj = NULL; + } +} + +#endif + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) { + PyObject *py_import = 0; + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + py_import = __Pyx_GetAttrString(__pyx_b, "__import__"); + if (!py_import) + goto bad; + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + #if PY_VERSION_HEX >= 0x02050000 + { + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, NULL); + Py_DECREF(py_level); + } + #else + if (level>0) { + PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); + goto bad; + } + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, NULL); + #endif +bad: + Py_XDECREF(empty_list); + Py_XDECREF(py_import); + Py_XDECREF(empty_dict); + return module; +} + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +#if CYTHON_CCOMPLEX +#else + static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float denom = b.real * b.real + b.imag * b.imag; + z.real = (a.real * b.real + a.imag * b.imag) / denom; + z.imag = (a.imag * b.real - a.real * b.imag) / denom; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(a, a); + case 3: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(z, a); + case 4: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } + r = a.real; + theta = 0; + } else { + r = __Pyx_c_absf(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return ::std::complex< double >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return x + y*(__pyx_t_double_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + __pyx_t_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +#if CYTHON_CCOMPLEX +#else + static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double denom = b.real * b.real + b.imag * b.imag; + z.real = (a.real * b.real + a.imag * b.imag) / denom; + z.imag = (a.imag * b.real - a.real * b.imag) / denom; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrt(z.real*z.real + z.imag*z.imag); + #else + return hypot(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(a, a); + case 3: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(z, a); + case 4: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } + r = a.real; + theta = 0; + } else { + r = __Pyx_c_abs(a); + theta = atan2(a.imag, a.real); + } + lnr = log(r); + z_r = exp(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cos(z_theta); + z.imag = z_r * sin(z_theta); + return z; + } + #endif +#endif + +static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { + const unsigned char neg_one = (unsigned char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned char" : + "value too large to convert to unsigned char"); + } + return (unsigned char)-1; + } + return (unsigned char)val; + } + return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); +} + +static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { + const unsigned short neg_one = (unsigned short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned short" : + "value too large to convert to unsigned short"); + } + return (unsigned short)-1; + } + return (unsigned short)val; + } + return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); +} + +static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { + const unsigned int neg_one = (unsigned int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned int" : + "value too large to convert to unsigned int"); + } + return (unsigned int)-1; + } + return (unsigned int)val; + } + return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); +} + +static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { + const char neg_one = (char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to char" : + "value too large to convert to char"); + } + return (char)-1; + } + return (char)val; + } + return (char)__Pyx_PyInt_AsLong(x); +} + +static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { + const short neg_one = (short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to short" : + "value too large to convert to short"); + } + return (short)-1; + } + return (short)val; + } + return (short)__Pyx_PyInt_AsLong(x); +} + +static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { + const int neg_one = (int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to int" : + "value too large to convert to int"); + } + return (int)-1; + } + return (int)val; + } + return (int)__Pyx_PyInt_AsLong(x); +} + +static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { + const signed char neg_one = (signed char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed char" : + "value too large to convert to signed char"); + } + return (signed char)-1; + } + return (signed char)val; + } + return (signed char)__Pyx_PyInt_AsSignedLong(x); +} + +static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { + const signed short neg_one = (signed short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed short" : + "value too large to convert to signed short"); + } + return (signed short)-1; + } + return (signed short)val; + } + return (signed short)__Pyx_PyInt_AsSignedLong(x); +} + +static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { + const signed int neg_one = (signed int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed int" : + "value too large to convert to signed int"); + } + return (signed int)-1; + } + return (signed int)val; + } + return (signed int)__Pyx_PyInt_AsSignedLong(x); +} + +static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { + const int neg_one = (int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to int" : + "value too large to convert to int"); + } + return (int)-1; + } + return (int)val; + } + return (int)__Pyx_PyInt_AsLong(x); +} + +static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { + const unsigned long neg_one = (unsigned long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long)-1; + } + return (unsigned long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long)-1; + } + return (unsigned long)PyLong_AsUnsignedLong(x); + } else { + return (unsigned long)PyLong_AsLong(x); + } + } else { + unsigned long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (unsigned long)-1; + val = __Pyx_PyInt_AsUnsignedLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { + const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned PY_LONG_LONG"); + return (unsigned PY_LONG_LONG)-1; + } + return (unsigned PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned PY_LONG_LONG"); + return (unsigned PY_LONG_LONG)-1; + } + return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); + } else { + return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); + } + } else { + unsigned PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (unsigned PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsUnsignedLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { + const long neg_one = (long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long)-1; + } + return (long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long)-1; + } + return (long)PyLong_AsUnsignedLong(x); + } else { + return (long)PyLong_AsLong(x); + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (long)-1; + val = __Pyx_PyInt_AsLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { + const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to PY_LONG_LONG"); + return (PY_LONG_LONG)-1; + } + return (PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to PY_LONG_LONG"); + return (PY_LONG_LONG)-1; + } + return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); + } else { + return (PY_LONG_LONG)PyLong_AsLongLong(x); + } + } else { + PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { + const signed long neg_one = (signed long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed long"); + return (signed long)-1; + } + return (signed long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed long"); + return (signed long)-1; + } + return (signed long)PyLong_AsUnsignedLong(x); + } else { + return (signed long)PyLong_AsLong(x); + } + } else { + signed long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (signed long)-1; + val = __Pyx_PyInt_AsSignedLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { + const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed PY_LONG_LONG"); + return (signed PY_LONG_LONG)-1; + } + return (signed PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed PY_LONG_LONG"); + return (signed PY_LONG_LONG)-1; + } + return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); + } else { + return (signed PY_LONG_LONG)PyLong_AsLongLong(x); + } + } else { + signed PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (signed PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsSignedLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + #if PY_VERSION_HEX < 0x02050000 + return PyErr_Warn(NULL, message); + #else + return PyErr_WarnEx(NULL, message, 1); + #endif + } + return 0; +} + +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, + size_t size, int strict) +{ + PyObject *py_module = 0; + PyObject *result = 0; + PyObject *py_name = 0; + char warning[200]; + + py_module = __Pyx_ImportModule(module_name); + if (!py_module) + goto bad; + #if PY_MAJOR_VERSION < 3 + py_name = PyString_FromString(class_name); + #else + py_name = PyUnicode_FromString(class_name); + #endif + if (!py_name) + goto bad; + result = PyObject_GetAttr(py_module, py_name); + Py_DECREF(py_name); + py_name = 0; + Py_DECREF(py_module); + py_module = 0; + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%s.%s is not a type object", + module_name, class_name); + goto bad; + } + if (!strict && ((PyTypeObject *)result)->tp_basicsize > (Py_ssize_t)size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility", + module_name, class_name); + #if PY_VERSION_HEX < 0x02050000 + if (PyErr_Warn(NULL, warning) < 0) goto bad; + #else + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + #endif + } + else if (((PyTypeObject *)result)->tp_basicsize != (Py_ssize_t)size) { + PyErr_Format(PyExc_ValueError, + "%s.%s has the wrong size, try recompiling", + module_name, class_name); + goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(py_module); + Py_XDECREF(result); + return NULL; +} +#endif + +#ifndef __PYX_HAVE_RT_ImportModule +#define __PYX_HAVE_RT_ImportModule +static PyObject *__Pyx_ImportModule(const char *name) { + PyObject *py_name = 0; + PyObject *py_module = 0; + + #if PY_MAJOR_VERSION < 3 + py_name = PyString_FromString(name); + #else + py_name = PyUnicode_FromString(name); + #endif + if (!py_name) + goto bad; + py_module = PyImport_Import(py_name); + Py_DECREF(py_name); + return py_module; +bad: + Py_XDECREF(py_name); + return 0; +} +#endif + +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" + +static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno, + int __pyx_lineno, const char *__pyx_filename) { + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + PyObject *py_globals = 0; + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(__pyx_filename); + #else + py_srcfile = PyUnicode_FromString(__pyx_filename); + #endif + if (!py_srcfile) goto bad; + if (__pyx_clineno) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_globals = PyModule_GetDict(__pyx_m); + if (!py_globals) goto bad; + py_code = PyCode_New( + 0, /*int argcount,*/ + #if PY_MAJOR_VERSION >= 3 + 0, /*int kwonlyargcount,*/ + #endif + 0, /*int nlocals,*/ + 0, /*int stacksize,*/ + 0, /*int flags,*/ + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + __pyx_lineno, /*int firstlineno,*/ + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + if (!py_code) goto bad; + py_frame = PyFrame_New( + PyThreadState_GET(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + py_globals, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = __pyx_lineno; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else /* Python 3+ has unicode identifiers */ + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + ++t; + } + return 0; +} + +/* Type Conversion Functions */ + +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} + +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { + PyNumberMethods *m; + const char *name = NULL; + PyObject *res = NULL; +#if PY_VERSION_HEX < 0x03000000 + if (PyInt_Check(x) || PyLong_Check(x)) +#else + if (PyLong_Check(x)) +#endif + return Py_INCREF(x), x; + m = Py_TYPE(x)->tp_as_number; +#if PY_VERSION_HEX < 0x03000000 + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = PyNumber_Long(x); + } +#else + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Long(x); + } +#endif + if (res) { +#if PY_VERSION_HEX < 0x03000000 + if (!PyInt_Check(res) && !PyLong_Check(res)) { +#else + if (!PyLong_Check(res)) { +#endif + PyErr_Format(PyExc_TypeError, + "__%s__ returned non-%s (type %.200s)", + name, name, Py_TYPE(res)->tp_name); + Py_DECREF(res); + return NULL; + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} + +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject* x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} + +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { +#if PY_VERSION_HEX < 0x02050000 + if (ival <= LONG_MAX) + return PyInt_FromLong((long)ival); + else { + unsigned char *bytes = (unsigned char *) &ival; + int one = 1; int little = (int)*(unsigned char*)&one; + return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); + } +#else + return PyInt_FromSize_t(ival); +#endif +} + +static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { + unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); + if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) { + return (size_t)-1; + } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to size_t"); + return (size_t)-1; + } + return (size_t)val; +} + + +#endif /* Py_PYTHON_H */ diff --git a/python_tools/void_python_tools/apTools/profiles/__init__.py b/python_tools/void_python_tools/apTools/profiles/__init__.py new file mode 100644 index 0000000..b05e408 --- /dev/null +++ b/python_tools/void_python_tools/apTools/profiles/__init__.py @@ -0,0 +1,6 @@ +from build import * +from draw import * +from fit import * +from mcmc import * +from generateExpFigure import * +from getSurveyProps import * diff --git a/python_tools/void_python_tools/apTools/profiles/getSurveyProps.py b/python_tools/void_python_tools/apTools/profiles/getSurveyProps.py new file mode 100644 index 0000000..764a115 --- /dev/null +++ b/python_tools/void_python_tools/apTools/profiles/getSurveyProps.py @@ -0,0 +1,53 @@ +import numpy as np +import healpy as healpy +import scipy.integrate + +__all__=['getSurveyProps'] + +# returns the volume and galaxy density for a given redshit slice +def getSurveyProps(maskFile, zmin, zmax, selFunMin, selFunMax, portion, selectionFuncFile=None): + + mask = healpy.read_map(maskFile) + area = (1.*np.size(np.where(mask > 0)) / np.size(mask)) * 4.*np.pi + zmin = zmin * 3000 + zmax = zmax * 3000 + volume = area * (zmax**3 - zmin**3) / 3 + + if selectionFuncFile != None: + selfunc = np.genfromtxt(selectionFuncFile) + selfunc = np.array(selfunc) + selfunc[:,0] = selfunc[:,0]/100. + selfuncUnity = selfunc + selfuncUnity[:,1] = 1.0 + selfuncMin = selfunc[0,0] + selfuncMax = selfunc[-1,0] + selfuncDx = selfunc[1,0] - selfunc[0,0] + selfuncN = np.size(selfunc[:,0]) + + selFunMin *= 3000 + selFunMax *= 3000 + + selFunMin = max(selFunMin, selfuncMin) + selFunMax = min(selFunMax, selfuncMax) + + + def f(z): return selfunc[np.ceil((z-selfuncMin)/selfuncDx), 1]*z**2 + def fTotal(z): return selfuncUnity[np.ceil((z-selfuncMin)/selfuncDx), 1]*z**2 + + zrange = np.linspace(selFunMin, selFunMax) + + nbar = scipy.integrate.quad(f, selFunMin, selFunMax) + nbar = nbar[0] + + ntotal = scipy.integrate.quad(fTotal, 0.0, max(selfuncUnity[:,0])) + #ntotal = scipy.integrate.quad(f, 0.0, max(selfunc[:,0])) + ntotal = ntotal[0] + + nbar = ntotal / area / nbar + + else: + nbar = 1.0 + + #print "PROPERTIES: ", volume, nbar + + return (volume, nbar) diff --git a/python_tools/void_python_tools/backend/__init__.py b/python_tools/void_python_tools/backend/__init__.py new file mode 100644 index 0000000..045ef20 --- /dev/null +++ b/python_tools/void_python_tools/backend/__init__.py @@ -0,0 +1,2 @@ +from classes import * +from launchers import * diff --git a/python_tools/void_python_tools/backend/backend.py b/python_tools/void_python_tools/backend/backend.py new file mode 100755 index 0000000..4fc1c8a --- /dev/null +++ b/python_tools/void_python_tools/backend/backend.py @@ -0,0 +1,1451 @@ +#!/usr/bin/env python + +# classes and routines used to support the analyzeVoids script + +import os +import glob +import voidProject as vp +import numpy as np +import numpy.ma as ma +import os +import shutil +import glob +import subprocess +import sys +from pylab import figure +from Scientific.IO.NetCDF import NetCDFFile +import Scientific.N as Num + +class Stack: + zMin = 0.0 + zMax = 0.1 + rMin = 5 + rMax = 15 + zMinPlot = 0.0 + zMaxPlot = 0.1 + includeInHubble = True + partOfCombo = False + needProfile = True + rescaleMode = "rmax" # options: "rmax" to scale to largest void in stack + # "rv" normalize each void + + def __init__(self, zMin, zMax, rMin, rMax, includeInHubble, partOfCombo, + zMinPlot=None, needProfile=True, rescaleMode="rmax"): + self.zMin = zMin + self.zMax = zMax + self.rMin = rMin + self.rMax = rMax + self.zMaxPlot = zMax + self.includeInHubble = includeInHubble + self.partOfCombo = partOfCombo + self.needProfile = needProfile + self.rescaleMode = rescaleMode + + if zMinPlot == None: + self.zMinPlot = self.zMin + else: + self.zMinPlot = zMinPlot + +class Sample: + dataType = "observation" + dataFile = "lss.dr72dim.dat" + fullName = "lss.dr72dim.dat" + nickName = "dim" + zobovDir = "" + maskFile = "rast_window_512.fits" + selFunFile = "czselfunc.all.dr72dim.dat" + skyFraction = 0.19 + zBoundary = (0.0, 0.1) + zRange = (0.0, 0.1) + minVoidRadius = 5 + fakeDensity = 0.01 + profileBinSize = 2 # Mpc + volumeLimited = True + includeInHubble = True + partOfCombo = False + isCombo = False + comboList = [] + numSubVolumes = 2 + + # applies to simulations only + boxLen = 1024 # Mpc/h + usePecVel = False + + stacks = [] + + def __init__(self, dataFile="", fullName="", + nickName="", maskFile="", selFunFile="", + zBoundary=(), zRange=(), + minVoidRadius=0, fakeDensity=0.01, volumeLimited=True, + includeInHubble=True, partOfCombo=False, isCombo=False, + comboList=(), profileBinSize=2.0, skyFraction=0.19, + dataType="observation", numSubVolumes=2, + boxLen=1024, usePecVel=False): + self.dataFile = dataFile + self.fullName = fullName + self.nickName = nickName + self.maskFile = maskFile + self.selFunFile = selFunFile + self.zBoundary = zBoundary + self.zRange = zRange + self.minVoidRadius = minVoidRadius + self.fakeDensity = fakeDensity + self.volumeLimited = volumeLimited + self.includeInHubble = includeInHubble + self.partOfCombo = partOfCombo + self.isCombo = isCombo + self.comboList = comboList + self.zobovDir = None + self.profileBinSize = profileBinSize + self.skyFraction = skyFraction + self.dataType = dataType + self.numSubVolumes = numSubVolumes + self.boxLen = boxLen + self.usePecVel = usePecVel + + self.stacks = [] + + def addStack(self, zMin, zMax, rMin, rMax, + includeInHubble, partOfCombo,zMinPlot=None, + needProfile=True, rescaleMode="rmax"): + self.stacks.append(Stack(zMin, zMax, rMin, rMax, + includeInHubble, partOfCombo, + zMinPlot=zMinPlot, needProfile=needProfile, + rescaleMode=rescaleMode)) + + def getHubbleStacks(self): + stacksForHubble = [] + for stack in self.stacks: + if stack.includeInHubble: + stacksForHubble.append(stack) + return stacksForHubble + + def getUniqueRBins(self): + uniqueRStacks = [] + for stack in self.stacks: + if not stack.includeInHubble: + continue + alreadyHere = False + for stackCheck in uniqueRStacks: + if stack.rMin == stackCheck.rMin and stack.rMax == stackCheck.rMax: + alreadyHere = True + break + if not alreadyHere: + uniqueRStacks.append(stack) + return uniqueRStacks + + def getUniqueZBins(self): + uniqueZStacks = [] + for stack in self.stacks: + if not stack.includeInHubble: + continue + alreadyHere = False + for stackCheck in uniqueZStacks: + if stack.zMin == stackCheck.zMin and stack.zMax == stackCheck.zMax: + alreadyHere = True + break + if not alreadyHere: + uniqueZStacks.append(stack) + return uniqueZStacks + +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +def jobSuccessful(logFile, doneString): + jobDone = False + checkLine = "" + if os.access(logFile, os.F_OK): + filelines = file(logFile, "r").readlines() + if len(filelines) >= 1: + checkLine = filelines[-1] + jobDone = (checkLine == doneString) + return jobDone + +def getStackSuffix(zMin, zMax, rMin, rMax, dataPortion): + return "z"+str(zMin)+"-"+str(zMax)+"_"+str(rMin)+"-"+str(rMax)+\ + "Mpc"+"_"+dataPortion + + +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +# routines which communicate with individual data analysis portions - +# they make the analyzeVoids.py script easier to read + +# ----------------------------------------------------------------------------- +def launchGenerate(sample, binPath, workDir=None, inputDataDir=None, + zobovDir=None, figDir=None, logFile=None, useLCDM=False, + continueRun=None, dataType=None): + + if dataType == "observation": + sampleName = sample.fullName + + if sample.dataFile == "": + datafile = inputDataDir+"/"+sampleName + else: + dataFile = sample.dataFile + + maskFile = sample.maskFile + + if useLCDM: + useLCDMFlag = "useLCDM" + else: + useLCDMFlag = "" + + conf=""" + catalog %s + mask %s + output %s + params %s + zMin %g + zMax %g + density_fake %g + %s + """ % (datafile, maskFile, zobovDir+"/zobov_slice_"+sampleName, + zobovDir+"/zobov_slice_"+sampleName+".par", + sample.zBoundary[0], sample.zBoundary[1], sample.fakeDensity, + useLCDMFlag) + + parmFile = os.getcwd()+"/generate.par" + + file(parmFile, mode="w").write(conf) + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + cmd = "%s --configFile=%s >& %s" % (binPath,parmFile,logFile) + os.system(cmd) + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + if os.access(parmFile, os.F_OK): + os.unlink(parmFile) + + if os.access("contour_map.fits", os.F_OK): + os.system("mv %s %s" % ("contour_map.fits", zobovDir)) + os.system("mv %s %s" % ("mask_map.fits", zobovDir)) + + if os.access("comoving_distance.txt", os.F_OK): + os.system("mv %s %s" % ("comoving_distance.txt", zobovDir)) + + if os.access("mask_index.txt", os.F_OK): + os.system("mv %s %s" % ("mask_index.txt", zobovDir)) + os.system("mv %s %s" % ("total_particles.txt", zobovDir)) + os.system("mv %s %s" % ("sample_info.txt", zobovDir)) + + if os.access("galaxies.txt", os.F_OK): + os.system("mv %s %s" % ("galaxies.txt", zobovDir)) + os.system("mv %s %s" % ("mock_galaxies.txt", zobovDir)) + os.system("mv %s %s" % ("mock_boundary.txt", zobovDir)) + os.system("mv %s %s" % ("mock_sphere.txt", zobovDir)) + + else: # simulation + sampleName = sample.fullName + + datafile = inputDataDir+"/"+sample.dataFile + + if sample.includePecVel: + includePecVelString = "peculiarVelocities" + else: + includePecVelString = "" + + conf=""" + multidark %s + output %s + outputParameter %s + %s + rangeX_min %g + rangeX_max %g + rangey_min %g + rangeY_max %g + rangeZ_min %g + rangeZ_max %g + """ % (datafile, zobovDir+"/zobov_slice_"+sampleName, + zobovDir+"/zobov_slice_"+sampleName+".par", + includePecVelString, + 0, sample.boxLen, 0, sample.boxLen, + sample.zBoundary[0], sample.zBoundary[1]) + + parmFile = os.getcwd()+"/generate.par" + + file(parmFile, mode="w").write(conf) + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + cmd = "%s --configFile=%s >& %s" % (binPath,parmFile,logFile) + os.system(cmd) + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + if os.access(parmFile, os.F_OK): + os.unlink(parmFile) + +# ----------------------------------------------------------------------------- +def launchZobov(sample, binPath, zobovDir=None, logDir=None, continueRun=None, + dataType=None, numSubVolumes=None): + + sampleName = sample.fullName + + datafile = zobovDir+"zobov_slice_"+sampleName + + logFile = logDir+"/zobov_"+sampleName+".out" + + vozScript = "./scr_"+sampleName + + if os.access(vozScript, os.F_OK): + os.unlink(vozScript) + + if dataType == "observation": + maskIndex = open(zobovDir+"/mask_index.txt", "r").read() + totalPart = open(zobovDir+"/total_particles.txt", "r").read() + maxDen = 0.2*float(maskIndex)/float(totalPart) + else: + maskIndex = 999999999 + maxDen = 0.2 + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + for fileName in glob.glob(zobovDir+"/part._"+sampleName+".*"): + os.unlink(fileName) + + if os.access(zobovDir+"/adj_"+sampleName+".dat", os.F_OK): + os.unlink(zobovDir+"adj_"+sampleName+".dat") + + if os.access(zobovDir+"/voidDesc_"+sampleName+".out", os.F_OK): + os.unlink(zobovDir+"/voidDesc_"+sampleName+".out") + + cmd = "%s/vozinit %s 0.1 1.0 2 %s %g %s %s %s >& %s" % \ + (binPath, datafile, \ + "_"+sampleName, numSubVolumes, \ + binPath, zobovDir, maskIndex, logFile) + os.system(cmd) + + cmd = "./%s >> %s 2>&1" % (vozScript, logFile) + os.system(cmd) + + cmd = "%s/jozov %s %s %s %s %s %g %s >> %s 2>&1" % \ + (binPath, \ + zobovDir+"/adj_"+sampleName+".dat", \ + zobovDir+"/vol_"+sampleName+".dat", \ + zobovDir+"/voidPart_"+sampleName+".dat", \ + zobovDir+"/voidZone_"+sampleName+".dat", \ + zobovDir+"/voidDesc_"+sampleName+".out", \ + maxDen, maskIndex, logFile) + os.system(cmd) + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + if os.access(vozScript, os.F_OK): + os.unlink(vozScript) + +# ----------------------------------------------------------------------------- +def launchPrune(sample, binPath, thisDataPortion=None, + summaryFile=None, logFile=None, zobovDir=None, + continueRun=None, dataType=None): + + sampleName = sample.fullName + + numVoids = sum(1 for line in \ + open(zobovDir+"/voidDesc_"+sampleName+".out")) + numVoids -= 2 + + if dataType == "observation": + mockIndex = open(zobovDir+"/mask_index.txt", "r").read() + totalPart = open(zobovDir+"/total_particles.txt", "r").read() + maxDen = 0.2*float(mockIndex)/float(totalPart) + else: + mockIndex = "9999999999" + maxDen = 0.2 + + if not (continueRun and jobSuccessful(logFile, "NetCDF: Not a valid ID\n")): + cmd = binPath + cmd += " --partFile=" + zobovDir+"/zobov_slice_"+str(sampleName) + cmd += " --voidDesc=" + zobovDir+"/voidDesc_"+str(sampleName)+".out" + cmd += " --void2Zone="+zobovDir+"/voidZone_"+str(sampleName)+".dat" + cmd += " --zone2Part=" + zobovDir+"/voidPart_"+str(sampleName)+".dat" + cmd += " --partVol=" + zobovDir+"/vol_"+str(sampleName)+".dat" + cmd += " --extraInfo=" + zobovDir+"/zobov_slice_"+str(sampleName)+\ + ".par" + cmd += " --tolerance=1.0" + cmd += " --dataPortion=" + thisDataPortion + cmd += " --mockIndex=" + str(mockIndex) + cmd += " --maxCentralDen=" + str(maxDen) + cmd += " --zMin=" + str(sample.zBoundary[0]) + cmd += " --zMax=" + str(sample.zBoundary[1]) + cmd += " --rMin=" + str(sample.minVoidRadius) + cmd += " --numVoids=" + str(numVoids) + cmd += " --output=" + zobovDir+"/voidDesc_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outCenters=" + zobovDir+"/barycenters_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outInfo=" + zobovDir+"/centers_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outNoCutInfo=" + zobovDir+"/centers_nocut_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outSkyPositions=" + zobovDir+"/sky_positions_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outDistances=" + zobovDir+"/boundaryDistances_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " >& " + logFile + os.system(cmd) + + if jobSuccessful(logFile, "NetCDF: Not a valid ID\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + +# ----------------------------------------------------------------------------- +def launchStack(sample, stack, binPath, thisDataPortion=None, logDir=None, + voidDir=None, freshStack=True, runSuffix=None, + zobovDir=None, + INCOHERENT=False, ranSeed=None, summaryFile=None, + continueRun=None, dataType=None): + + sampleName = sample.fullName + + runSuffix = getStackSuffix(stack.zMin, stack.zMax, stack.rMin, + stack.rMax, thisDataPortion) + + logFile = logDir+"/stack_"+sampleName+"_"+runSuffix+".out" + + treeFile = voidDir+"/tree.data" + + if (freshStack) and os.access(treeFile, os.F_OK): + os.unlink(treeFile) + + centralRadius = stack.rMin * 0.25 + + # restrict to relavent ranges of sample + zMin = max(sample.zRange[0],stack.zMin) * 3000 + zMax = min(sample.zRange[1],stack.zMax) * 3000 + + if dataType == "observation": + obsFlag = "observation" + else: + obsFlag = "" + + Rextracut = stack.rMin*3 + 1 + Rcircular = stack.rMin*3 + 2 + + if dataType == "observation": + maskIndex = open(zobovDir+"/mask_index.txt", "r").read() + totalPart = open(zobovDir+"/total_particles.txt", "r").read() + maxDen = 0.2*float(maskIndex)/float(totalPart) + else: + maskIndex = 999999999 + maxDen = 0.2 + + if INCOHERENT: + nullTestFlag = "INCOHERENT" + else: + nullTestFlag = "" + + if stack.rescaleMode == "rmax": + rescaleFlag = "rescale" + else: + rescaleFlag = "" + + conf=""" + desc %s + partzone %s + zonevoid %s + volumefile %s + Rmin %g + Rmax %g + particles %s + extraInfo %s + densityThreshold %g + centralRadius %g + edgeAvoidance %g + Circular %g + Zmin %g + Zmax %g + %s + %s + ranSeed %d + dataPortion %s + barycenters %s + boundaryDistances %s + %s + """ % \ + (zobovDir+"/voidDesc_"+thisDataPortion+"_"+sampleName+".out", + zobovDir+"/voidPart_"+sampleName+".dat", + zobovDir+"/voidZone_"+sampleName+".dat", + zobovDir+"/vol_"+sampleName+".dat", + stack.rMin, + stack.rMax, + zobovDir+"/zobov_slice_"+sampleName, + zobovDir+"/zobov_slice_"+sampleName+".par", + maxDen, + centralRadius, + Rextracut, + Rcircular, + zMin, + zMax, + obsFlag, + nullTestFlag, + ranSeed, + thisDataPortion, + zobovDir+"/barycenters_"+thisDataPortion+"_"+sampleName+".out", + zobovDir+"/boundaryDistances_"+thisDataPortion+"_"+sampleName+".out", + rescaleFlag) + + parmFile = os.getcwd()+"/stack.par" + + fp = file(parmFile, mode="w") + fp.write(conf) + + # continue stacking if requested; pull files to local directory + if os.access(treeFile, os.F_OK): + os.system("mv %s %s" % (treeFile, "./"+tree.data)) + fp.write("loadSearchTree\n") + fp.write("getTree\n") + fp.write("doExtraction\n") + else: + fp.write("dumpSearchTree\n") + fp.write("dumpTree\n") + fp.write("doExtraction\n") + fp.close() + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + cmd = "%s --configFile=%s >& %s" % \ + (binPath, parmFile, logFile) + os.system(cmd) + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + return + + minDist = None + maxDist = None + numVoids = None + numParticles = None + for line in open(logFile): + if "Minimum void distance is" in line: + line = line.split() + minDist = float(line[4])/3000 + + if "Maximum void distance is" in line: + line = line.split() + maxDist = float(line[4])/3000 + + if "Selected" in line: + line = line.split() + numVoids = line[1] + + if "Number of particles =" in line: + line = line.split() + numParticles = line[4] + + open(voidDir+"/num_voids.txt", "w").write(numVoids) + open(voidDir+"/num_particles.txt", "w").write(numParticles) + + if os.access(voidDir+"/NOVOID", os.F_OK): + os.unlink(voidDir+"/NOVOID") + + if (numVoids == "0"): + print " No voids found; skipping!" + fp = open(voidDir+"/NOVOID", "w") + fp.write("no voids found\n") + fp.close() + return + + emptyStack = False + for line in open(logFile): + if "EMPTY STACK" in line: + emptyStack = True + if emptyStack: + print " Stack is empty; skipping!" + fp = open(voidDir+"/NOVOID", "w") + fp.write("empty stack\n") + fp.close() + return + + # figure out box volume and average density + maskFile = sample.maskFile + sulFunFile = sample.selFunFile + + if not os.access(sample.selFunFile, os.F_OK) and not volumeLimited: + print " Cannot find", selFunFile, "!" + exit(-1) + + sys.stdout = open(logFile, 'a') + sys.stderr = open(logFile, 'a') + zMin = sample.zRange[0] + zMax = sample.zRange[1] + if not sample.volumeLimited: + props = vp.getSurveyProps(maskFile, stack.zMin, + stack.zMax, zMin, zMax, "all", + selectionFuncFile=sample.selFunFile) + else: + zMinForVol = sample.zBoundary[0] + zMaxForVol = sample.zBoundary[1] + props = vp.getSurveyProps(maskFile, zMinForVol, + zMaxForVol, zMin, zMax, "all") + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + boxVol = props[0] + nbar = props[1] + + if sample.volumeLimited: + nbar = 1.0 + + summaryLine = runSuffix + " " + \ + thisDataPortion + " " + \ + str(stack.zMin) + " " + \ + str(stack.zMax) + \ + " " + str(numVoids) + " " + str(minDist) + \ + " " + str(maxDist) + if summaryFile != None: + open(summaryFile, "a").write(summaryLine+"\n") + + # move local outputs to storage directory + if os.access("tree.data", os.F_OK): + normalization = float(numParticles)/float(boxVol)/nbar + dataTemp = file("centers.txt", "r").readlines() + fp = file("normalizations.txt", "w") + for iVoid in xrange(len(dataTemp)): + fp.write(str(normalization)+"\n") + fp.close() + + os.system("mv %s %s" % ("tree.data", treeFile)) + os.system("mv %s %s" % ("void_indexes.txt", voidDir+"/")) + os.system("mv %s %s" % ("posx.nc", voidDir+"/posx.nc")) + os.system("mv %s %s" % ("posy.nc", voidDir+"/posy.nc")) + os.system("mv %s %s" % ("posz.nc", voidDir+"/posz.nc")) + os.system("mv %s %s" % ("redshifts.nc", voidDir+"/redshifts.nc")) + os.system("mv %s %s" % ("indexes.nc", voidDir+"/")) + os.system("mv %s %s" % ("kdtree_stackvoids.dat", voidDir+"/")) + os.system("mv %s %s" % ("centers.txt", voidDir+"/")) + os.system("mv %s %s" % ("sky_positions.txt", voidDir+"/")) + os.system("mv %s %s" % ("check.txt", voidDir+"/")) + os.system("mv %s %s" % ("tracer.txt", voidDir+"/")) + os.system("mv %s %s" % ("normalizations.txt", voidDir+"/")) + os.system("mv %s %s" % ("boundaryDistances.txt", voidDir+"/")) + + if os.access(parmFile, os.F_OK): + os.unlink(parmFile) + + return + +# ----------------------------------------------------------------------------- +def launchCombine(sample, stack, voidDir=None, logFile=None, + zobovDir=None, workDir=None, thisDataPortion=None): + + sampleName = sample.fullName + + runSuffix = getStackSuffix(stack.zMin, stack.zMax, stack.rMin, + stack.rMax, thisDataPortion) + + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + + if os.access(voidDir+"/num_voids.txt", os.F_OK): + os.unlink(voidDir+"/num_voids.txt") + + doneGalUpdate = os.access(zobovDir+"donegalupdate", os.F_OK) + + for comboName in sample.comboList: + if not os.access(zobovDir+"/galaxies.txt", os.F_OK): + shutil.copy(workDir+"/sample_"+comboName+"/galaxies.txt", zobovDir) + elif not doneGalUpdate: + dataTemp = file(workDir+"/sample_"+comboName+"/galaxies.txt", +"r").read() + file(zobovDir+"/galaxies.txt", "a").write(dataTemp) + + sourceStackDir = workDir+"/sample_"+comboName+"/stacks_"+\ + runSuffix + + if os.access(sourceStackDir+"/NOVOID", os.F_OK): + continue + + if not os.access(voidDir+"/num_voids.txt", os.F_OK): + # just copy + shutil.copy(sourceStackDir+"/num_voids.txt", voidDir) + shutil.copy(sourceStackDir+"/num_particles.txt", voidDir) + shutil.copy(sourceStackDir+"/posx.nc", voidDir) + shutil.copy(sourceStackDir+"/posy.nc", voidDir) + shutil.copy(sourceStackDir+"/posz.nc", voidDir) + shutil.copy(sourceStackDir+"/indexes.nc", voidDir) + shutil.copy(sourceStackDir+"/redshifts.nc", voidDir) + shutil.copy(sourceStackDir+"/centers.txt", voidDir) + shutil.copy(sourceStackDir+"/void_indexes.txt", voidDir) + shutil.copy(sourceStackDir+"/sky_positions.txt", voidDir) + shutil.copy(sourceStackDir+"/normalizations.txt", voidDir) + shutil.copy(sourceStackDir+"/boundaryDistances.txt", voidDir) + + else: + # append data + dataTemp = file(voidDir+"/num_voids.txt", "r").readlines() + dataTemp2 = file(sourceStackDir+"/num_voids.txt", "r").\ + readlines() + dataTemp = np.array(dataTemp, dtype='i') + dataTemp2 = np.array(dataTemp2, dtype='i') + dataTemp += dataTemp2 + dataTemp = str(dataTemp[0]) + file(voidDir+"/num_voids.txt", "w").write(str(dataTemp)) + + dataTemp = file(voidDir+"/num_particles.txt", "r").readlines() + dataTemp2 = file(sourceStackDir+"/num_particles.txt", "r").\ + readlines() + dataTemp = np.array(dataTemp, dtype='i') + dataTemp2 = np.array(dataTemp2, dtype='i') + dataTemp += dataTemp2 + dataTemp = str(dataTemp[0]) + file(voidDir+"/num_particles.txt", "w").write(str(dataTemp)) + + dataTemp = file(sourceStackDir+"/centers.txt", "r").read() + file(voidDir+"/centers.txt", "a").write(dataTemp) + dataTemp = file(sourceStackDir+"/normalizations.txt", "r").\ + read() + file(voidDir+"/normalizations.txt", "a").write(dataTemp) + + dataTemp = file(sourceStackDir+"/boundaryDistances.txt","r").\ + read() + file(voidDir+"/boundaryDistances.txt", "a").write(dataTemp) + + dataTemp = file(sourceStackDir+"/sky_positions.txt", "r").\ + read() + file(voidDir+"/sky_positions.txt", "a").write(dataTemp) + + idxTemp = file(sourceStackDir+"/void_indexes.txt", "r").\ + readlines() + idxTemp = np.array(idxTemp, dtype='i') + dataTemp = (NetCDFFile(voidDir+"/posx.nc").\ + variables['array'])[0:] + idxTemp[:] += len(dataTemp) + fp = open(voidDir+"/void_indexes.txt", "a") + for idx in idxTemp: + fp.write(str(idx)+"\n") + fp.close() + dataTemp = () + + fp = NetCDFFile(voidDir+"/posx.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/posx.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/posx.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + fp = NetCDFFile(voidDir+"/posy.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/posy.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/posy.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + fp = NetCDFFile(voidDir+"/posz.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/posz.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/posz.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + fp = NetCDFFile(voidDir+"/redshifts.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/redshifts.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/redshifts.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + fp = NetCDFFile(voidDir+"/indexes.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/indexes.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/indexes.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + # add NOVOID if necessary + if not os.access(voidDir+"/centers.txt", os.F_OK): + fp = open(voidDir+"/NOVOID", "w") + fp.write("no voids in combo\n") + fp.close() + + fp = open(zobovDir+"/donegalupdate", "w") + fp.close() + + print "Done!" + + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + #else: + # print "already done!" + +# ----------------------------------------------------------------------------- +def launchProfile(sample, stack, voidDir=None, logFile=None, continueRun=None): + + sampleName = sample.fullName + + if os.access(voidDir+"/NOVOID", os.F_OK): + print "no stack here; skipping!" + return + + numVoids = open(voidDir+"/num_voids.txt", "r").readline() + numParticles = open(voidDir+"/num_particles.txt", "r").readline() + + Rextracut = stack.rMin*3 + 1 + Rcircular = stack.rMin*3 + 2 + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + profileParmFile = voidDir+"/params.txt" + fp = open(profileParmFile, "w") + fp.write(str(stack.rMin)+"\n") + fp.write(str(stack.rMax)+"\n") + fp.write(str(Rcircular)+"\n") + fp.write(numVoids+"\n") + fp.close() + + if sample.zRange[0] > stack.zMax or sample.zRange[1] < stack.zMin: + print "outside sample redshift range; skipping!" + fp = open(voidDir+"/NOVOID", "w") + fp.write("outside z range: profile\n") + fp.close() + return + + # TEST + if sample.profileBinSize == "auto": + density = 0.5 * 50 / Rcircular + else: + #density = 0.5 * 50 / 60 + density = 0.5 * 50 / Rcircular / sample.profileBinSize + + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + vp.build_1d_profile(base_dir=voidDir, density=density, + rescaleMode=stack.rescaleMode) + vp.build_2d_profile(base_dir=voidDir, density=density) + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + if jobSuccessful(logFile, "Done!\n"): + print "done", numVoids + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + +# ----------------------------------------------------------------------------- +def launchFit(sample, stack, logFile=None, voidDir=None, figDir=None, + continueRun=None, thisDataPortion=None): + + sampleName = sample.fullName + + runSuffix = getStackSuffix(stack.zMin, stack.zMax, stack.rMin, + stack.rMax, thisDataPortion) + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + if os.access(voidDir+"/NOVOID", os.F_OK): + print "no voids here; skipping!" + return + + if stack.zMin < sample.zRange[0] or stack.zMax > sample.zRange[1]: + print "outside sample redshift range; skipping!" + return + + if sample.partOfCombo or not sample.includeInHubble: + print "sample not needed for further analysis; skipping!" + fp = open(voidDir+"/NOFIT", "w") + fp.write("sample not needed for hubble\n") + fp.close() + return + + if not stack.includeInHubble: + print "radius not needed for further analysis; skipping!" + return + + if not stack.includeInHubble: + print "redshift not needed for further analysis; skipping!" + return + + if os.access(figDir+"/stackedVoid_"+sampleName+"_"+\ + runSuffix+".eps", os.F_OK): + os.unlink(figDir+"/stackedVoid_"+sampleName+"_"+\ + runSuffix+".eps") + + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + + badChain = True + ntries = 0 + maxtries = 5 + while badChain: + Rexpect = (stack.rMin+stack.rMax)/2 + Rtruncate = stack.rMax*3. + 1 # TEST + ret,fits,args = vp.fit_ellipticity(voidDir,Rbase=Rexpect, + Niter=300000, + Nburn=100000, + Rextracut=Rtruncate) + badChain = (args[0][0] > 0.5 or args[0][1] > stack.rMax or \ + args[0][2] > stack.rMax) and \ + (ntries < maxtries) + ntries += 1 + + np.save(voidDir+"/chain.npy", ret) + np.savetxt(voidDir+"/fits.out", fits) + + plotTitle = "Sample: "+sample.nickName+\ + ", z = "+str(stack.zMin)+"-"+\ + str(stack.zMax)+", R = "+str(stack.rMin)+"-"+\ + str(stack.rMax)+r" $h^{-1}$ Mpc" + + showRatio = (ntries <= maxtries) + showContours = (ntries <= maxtries) + + if stack.rescaleMode == "rmax": + rescaleFactor = stack.rMax + else: + rescaleFactor = 1.0 + + # TEST - plotting raw galaxy counts + vp.draw_fit(*args, delta_tick=50, vmax=1.0, delta_v=0.01, + #vp.draw_fit(*args, delta_tick=0.2, vmax=1.0, delta_v=0.01, + nocontour=True, model_max=1.0, delta_model=0.1, + plotTitle=plotTitle, show_ratio=showRatio, + showContours=showContours, + rescaleFactor=rescaleFactor) + figure(1).savefig(figDir+"/stackedVoid_"+sampleName+\ + "_"+runSuffix+".eps") + figure(1).savefig(figDir+"/stackedVoid_"+sampleName+\ + "_"+runSuffix+".pdf") + figure(1).savefig(figDir+"/stackedVoid_"+sampleName+\ + "_"+runSuffix+".png") + + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + if jobSuccessful(logFile, "Done!\n"): + print "done (", ntries, " tries)" + else: + print "FAILED!" + exit(-1) + + # record the measured stretch + exp = args[1] + expError = args[2] + outline = str(exp) + " " + str(expError) + open(voidDir+"/expansion.out", "w").write(outline) + + if os.access(voidDir+"/NOFIT", os.F_OK): + os.unlink(voidDir+"/NOFIT") + if ntries > maxtries: + print " No reliable fit found; skipping!" + fp = open(voidDir+"/NOFIT", "w") + fp.write("bad ellipticity fit\n") + fp.close() + return + + else: + print "already done!" + + +# ----------------------------------------------------------------------------- +def launchHubble(dataPortions=None, dataSampleList=None, logDir=None, + INCOHERENT=None, workDir=None, figDir=None, errorBars=None, + ZOBOV_PATH=None, continueRun=None, voidDir=None, + doPlot = True): + + for thisDataPortion in dataPortions: + print " For data portion", thisDataPortion + sys.stdout.flush() + + # merge the bins from all samples + numSamplesForHubble = 0 + maxRBins = 0 + maxZBins = 0 + allRBins = [] + allZBins = [] + + for sample in dataSampleList: + if sample.includeInHubble: + numSamplesForHubble += 1 + + for stack in sample.getHubbleStacks(): + alreadyHere = False + for stackCheck in allRBins: + if stack.rMin == stackCheck.rMin and stack.rMax==stackCheck.rMax: + alreadyHere = True + break + if not alreadyHere: + allRBins.append(stack) + + alreadyHere = False + for stackCheck in allZBins: + if stack.zMin == stackCheck.zMin and stack.zMax==stackCheck.zMax: + alreadyHere = True + break + if not alreadyHere: + allZBins.append(stack) + + allExpList = np.zeros((numSamplesForHubble,len(allRBins),len(allZBins),3)) + allExpList[:] = -1 + aveDistList = np.zeros((len(allZBins),3)) + + iSample = -1 + for sample in dataSampleList: + if not sample.includeInHubble: + continue + + iSample += 1 + + zobovDir = sample.zobovDir + sampleName = sample.fullName + + print " For data set", sampleName, "...", + sys.stdout.flush() + + logFile = logDir+"/hubble_"+sampleName+"_"+thisDataPortion+".out" + + #AVEDIST_PATH = ZOBOV_PATH+"/mytools/computeAverageDistortionPMS" + + # compute the average stretch in each redshift bin for cleaner-looking + # (not not fully accurate) plots + for (iZBin, stack) in enumerate(sample.getUniqueZBins()): + + aveDist = vp.aveStretchCone(stack.zMin, stack.zMax, + skyFrac = sample.skyFraction) + aveDistList[iZBin, 0] = stack.zMin + aveDistList[iZBin, 1] = aveDist + aveDistList[iZBin, 2] = 0.00125 + + numFits = 0 + fp = file(zobovDir+'/calculatedExpansions_'+thisDataPortion+'.txt', + mode="w") + + expList = np.zeros((1, len(sample.getUniqueRBins()), + len(sample.getUniqueZBins()), 3)) + + for (iZBin, zBin) in enumerate(sample.getUniqueZBins()): + for (iR, rBin) in enumerate(sample.getUniqueRBins()): + + runSuffix = getStackSuffix(zBin.zMin, zBin.zMax, rBin.rMin, + rBin.rMax, thisDataPortion) + + expFile = zobovDir+"/stacks_"+runSuffix+"/expansion.out" + if not (os.access(zobovDir+"/stacks_"+runSuffix+"/NOVOID", \ + os.F_OK) or + os.access(zobovDir+"/stacks_"+runSuffix+"/NOFIT", \ + os.F_OK) or + not os.access(expFile, os.F_OK)): + exp = float(open(expFile, "r").readline().split()[0]) + expError = float(open(expFile, "r").readline().split()[1]) + else: + exp = -1 + expError = 0 + + expList[0, iR, iZBin, 0] = exp + expList[0, iR, iZBin, 1] = expError + + # TODO + # compute the per-stack stretch for liklihood calculation + #runSuffix = getStackSuffix(stack.zMin, stack.zMax, stack.rMin, + # stack.rMax, thisDataPortion) + #voidDir = zobovDir+"/stacks_" + runSuffix + #centersFile = voidDir+"/centers.txt" + #voidRedshifts = np.loadtxt(centersFile)[:,5] + #aveDist = vp.aveWeightedStretchCone(stack.zMin, stack.zMax, + # skyFrac = sample.skyFraction, + # voidRedshifts=voidRedshifts) + + aveDist = vp.aveStretchCone(zBin.zMin, zBin.zMax, + skyFrac = sample.skyFraction) + expList[0, iR, iZBin, 2] = aveDist + + for (iZCheck,zBinCheck) in enumerate(allZBins): + for (iRCheck,rBinCheck) in enumerate(allRBins): + if zBin.zMin == zBinCheck.zMin and zBin.zMax == zBinCheck.zMax: + if rBin.rMin == rBinCheck.rMin and rBin.rMax == rBinCheck.rMax: + aveDist = vp.aveStretchCone(zBin.zMin, zBin.zMax, + skyFrac = sample.skyFraction) + allExpList[iSample, iRCheck, iZCheck, 0] = exp + allExpList[iSample, iRCheck, iZCheck, 1] = expError + + fp.write(str(exp) + " " + str(expError) + " "+ " "+ \ + str(aveDist) + " -1 " + runSuffix+"\n") + numFits += 1 + + fp.close() + + rlist = np.zeros((len(sample.getUniqueRBins()),2)) + for (iR,rBin) in enumerate(sample.getUniqueRBins()): + rlist[iR, 0] = rBin.rMin + rlist[iR, 1] = rBin.rMax + + zbase = np.zeros((len(sample.getUniqueZBins()),2)) + for (iZ,zBin) in enumerate(sample.getUniqueZBins()): + zbase[iZBin,0] = zBin.zMinPlot + zbase[iZBin,1] = zBin.zMaxPlot + #np.savetxt(zobovDir+'/zbase_'+thisDataPortion+'.txt', zbase) + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + plotTitle = "Sample: "+sample.nickName+", "+thisDataPortion+" voids" + if doPlot: + #vp.do_all_obs(zbase, expList, workDir+"/avedistortion_", + vp.do_all_obs(zbase, expList, aveDistList, + rlist, plotTitle=plotTitle, plotAve=True) + figure(1).savefig(figDir+"/hubble_"+sampleName+"_"+thisDataPortion+\ + ".eps",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_"+sampleName+"_"+thisDataPortion+\ + ".pdf",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_"+sampleName+"_"+thisDataPortion+\ + ".png",bbox_inches='tight') + else: + print "Skipping plot" + print "Done!" + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + # now do all samples in one plot + print " For data set combined...", + sys.stdout.flush() + + logFile = logDir+"/hubble_combined_"+thisDataPortion+".out" + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + + if errorBars == "ESTIMATED": + # replace calculated errors with estimated ones + errorBarFile = workDir+"/calculatedErrorBars_"+thisDataPortion+".txt" + if os.access(errorBarFile, os.F_OK): + print "REPLACING ERROR BARS!", + sys.stdout.flush() + fp = file(errorBarFile, mode="r") + ignoreLine = fp.readline() + for iZ in xrange(len(allExpList[0,0,:,0])): + ignoreLine = fp.readline() + + for iZ in xrange(len(allExpList[0,0,:,0])): + for iSample in xrange(len(allExpList[:,0,0,0])): + for iR in xrange(len(allExpList[0,:,0,0])): + line = fp.readline().split() + allExpList[iSample,iR,iZ,2] = allExpList[iSample,iR,iZ,1] + allExpList[iSample,iR,iZ,1] = float(line[1]) + + fp.close() + + rlist = np.zeros((len(allRBins),2)) + for (iR,rBin) in enumerate(allRBins): + rlist[iR, 0] = rBin.rMin + rlist[iR, 1] = rBin.rMax + + zbase = np.zeros((len(allZBins),2)) + plotZmax = 0.0 + plotZmin = 1.e99 + for (iZ,zBin) in enumerate(allZBins): + zbase[iZ,0] = zBin.zMinPlot + zbase[iZ,1] = zBin.zMaxPlot + + if zBin.zMaxPlot > plotZmax: plotZmax = zBin.zMaxPlot + if zBin.zMinPlot < plotZmin: plotZmin = zBin.zMinPlot + + aveDist = vp.aveStretchCone(zBin.zMin, zBin.zMax, + skyFrac = sample.skyFraction) + aveDistList[iZ, 0] = zBin.zMin + aveDistList[iZ, 1] = aveDist + aveDistList[iZ, 2] = 0.00125 + + + shortSampleNames = list() + for sample in dataSampleList: + if sample.includeInHubble: + shortSampleNames.append(sample.nickName) + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + if doPlot: + if INCOHERENT: + #plotTitle = "all samples, incoherent "+\ + # thisDataPortion+" voids" + plotTitle = '' + else: + #plotTitle = "all samples, "+thisDataPortion+" voids" + plotTitle = '' + vp.do_all_obs(zbase, allExpList, aveDistList, + rlist, plotTitle=plotTitle, sampleNames=shortSampleNames, + plotAve=True, mulfac = 1.0, biasLine = 1.16, + plotZmin=plotZmin, plotZmax=plotZmax+0.2) + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + ".eps",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + ".pdf",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + ".png",bbox_inches='tight') + + if INCOHERENT: + plotTitle = "all samples, incoherent "+\ + thisDataPortion+" voids (systematics corrected)" + else: + plotTitle = "all samples, "+thisDataPortion+\ + " voids (systematics corrected)" + vp.do_all_obs(zbase, allExpList, aveDistList, + rlist, plotTitle=plotTitle, sampleNames=shortSampleNames, + plotAve=True, mulfac = 1.16, + plotZmin=plotZmin, plotZmax=plotZmax+0.2) + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + "_debiased.eps",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + "_debiased.pdf",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + "_debiased.png",bbox_inches='tight') + else: + print "Skipping plot" + print "Done!" + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + # save all expansion data to a single file + fp = file(workDir+'/calculatedExpansions_'+thisDataPortion+'.txt', + mode="w") + fp.write(str(numSamplesForHubble) + " " + + str(len(allRBins)) + " " + str(len(allZBins)) + "\n") + for zBin in allZBins: + fp.write(str(zBin.zMin) + " " + str(zBin.zMax) + "\n") + + for iZ in xrange(len(allExpList[0,0,:,0])): + for iSample in xrange(len(allExpList[:,0,0,0])): + for iR in xrange(len(allExpList[0,:,0,0])): + fp.write(str(allExpList[iSample,iR,iZ,0]) + " " +\ + str(allExpList[iSample,iR,iZ,1]) + " " +\ + str(allExpList[iSample,iR,iZ,2]) + "\n") + fp.close() + + # save all void distribution data to a single file + fp = file(workDir+'/voidDistributions_'+thisDataPortion+'.txt', + mode="w") + fp.write(str(numSamplesForHubble) + " " + + str(len(allRBins)) + " " + str(len(allZBins)) + "\n") + for zBin in allZBins: + fp.write(str(zBin.zMin) + " " + str(zBin.zMax) + "\n") + + for zBin in allZBins: + for sample in dataSampleList: + if not sample.includeInHubble: continue + for rBin in allRBins: + runSuffix = getStackSuffix(zBin.zMin, zBin.zMax, rBin.rMin, + rBin.rMax, thisDataPortion) + voidDir = sample.zobovDir+"/stacks_" + runSuffix + centersFile = voidDir+"/centers.txt" + if os.access(centersFile, os.F_OK): + voidRedshifts = np.loadtxt(centersFile)[:,5] + #fp.write(str(len(voidRedshifts))+" ") + np.savetxt(fp, voidRedshifts[None]) + else: + fp.write("-1\n") + fp.close() + + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + +# ----------------------------------------------------------------------------- +def launchLikelihood(dataPortions=None, logDir=None, workDir=None, + continueRun=False): + + for thisDataPortion in dataPortions: + print " For data portion", thisDataPortion, "...", + sys.stdout.flush() + + logFile = logDir+"/likelihood_"+thisDataPortion+".out" + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + + vp.build1dLikelihood(workDir+"/calculatedExpansions_"+\ + thisDataPortion+".txt", + workDir+"/voidDistributions_" + \ + thisDataPortion+".txt", + nbins = 20, + OmStart = 0.0, + OmEnd = 1.0, + biasStart = 1.0, + biasEnd = 1.2, + outputBase = workDir+"/1dlikelihoods_"+thisDataPortion+"_", + useBinAve = False) + + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + +# ----------------------------------------------------------------------------- +def launchEstimateErrorBars(workDir=None, nullDir=None, numNulls=None, + dataPortion=None): + + IVALUE = 0 + IERROR = 1 + + # open first null file to get sizes + nullFile = nullDir + "/" + str(1) + "/calculatedExpansions_" + \ + str(dataPortion) + ".txt" + fp = open(nullFile, "r") + binLine = fp.readline() + numSamples = int(binLine.split(" ")[0]) + numRBins = int(binLine.split(" ")[1]) + numZBins = int(binLine.split(" ")[2]) + numBins = numRBins * numSamples * numZBins + nRTotal = numRBins * numSamples + fp.close() + + # load null data + nullData = np.zeros([numNulls, numBins, 2]) + + for iNull in xrange(numNulls): + nullFile = nullDir + "/" + str(iNull) + "/calculatedExpansions_" + \ + str(dataPortion) + ".txt" + fp = open(nullFile, "r") + + binLine = fp.readline() + numSamples = int(binLine.split(" ")[0]) + numRBins = int(binLine.split(" ")[1]) + numZBins = int(binLine.split(" ")[2]) + numBins = numRBins * numSamples * numZBins + + zList = np.zeros( [numZBins,2] ) + for iZ in xrange(int(numZBins)): + line = fp.readline().split() + zList[iZ,0] = float(line[0]) + zList[iZ,1] = float(line[1]) + + for iZ in xrange(numZBins): + iRTotal = 0 + for iSample in xrange(numSamples): + for iR in xrange(numRBins): + line = fp.readline().split() + nullData[iNull,iRTotal*numZBins+iZ,IVALUE] = float(line[0]) + nullData[iNull,iRTotal*numZBins+iZ,IERROR] = float(line[1]) + iRTotal += 1 + fp.close() + + # use 68% limits to get error bars + errorBars = np.zeros([numBins, 2]) + for iBin in xrange(numBins): + binData = nullData[:,iBin,IVALUE] + validData = binData[:] > -1 + binData = binData[validData] + binData = np.sort(binData) + + if np.size(binData) > 0: + errorBars[iBin, 0] = binData[int(0.16*np.size(binData))] + errorBars[iBin, 1] = binData[int(0.84*np.size(binData))] + + mean = (errorBars[iBin, 1] + errorBars[iBin, 0])/2 + sig = (errorBars[iBin, 1] - errorBars[iBin, 0])/2 + errorBars[iBin, 0] = mean + errorBars[iBin, 1] = sig + else: + errorBars[iBin, :] = -1 + + # writes out error bars + fp = file(workDir+"/calculatedErrorBars_" + \ + str(dataPortion) + ".txt", mode="w") + fp.write(str(numSamples) + " " + str(numRBins) + " " + str(numZBins) + "\n") + for iZ in xrange(numZBins): + fp.write(str(zList[iZ,0]) + " " + str(zList[iZ,1]) + "\n") + + for iZ in xrange(numZBins): + iRTotal = 0 + for iSample in xrange(numSamples): + for iR in xrange(numRBins): + fp.write(str(errorBars[iRTotal*numZBins+iZ,0]) + " " + \ + str(errorBars[iRTotal*numZBins+iZ,1]) + "\n") + iRTotal += 1 + fp.close() + + + + diff --git a/python_tools/void_python_tools/backend/classes.py b/python_tools/void_python_tools/backend/classes.py new file mode 100755 index 0000000..7466acb --- /dev/null +++ b/python_tools/void_python_tools/backend/classes.py @@ -0,0 +1,169 @@ +# classes and routines used to support scripts + +import os + +LIGHT_SPEED = 299792.458 + +class Stack: + zMin = 0.0 + zMax = 0.1 + rMin = 5 + rMax = 15 + zMinPlot = 0.0 + zMaxPlot = 0.1 + includeInHubble = True + partOfCombo = False + needProfile = True + rescaleMode = "rmax" # options: "rmax" to scale to largest void in stack + # "rv" normalize each void + + def __init__(self, zMin, zMax, rMin, rMax, includeInHubble, partOfCombo, + zMinPlot=None, needProfile=True, rescaleMode="rmax"): + self.zMin = zMin + self.zMax = zMax + self.rMin = rMin + self.rMax = rMax + self.zMaxPlot = zMax + self.includeInHubble = includeInHubble + self.partOfCombo = partOfCombo + self.needProfile = needProfile + self.rescaleMode = rescaleMode + + if zMinPlot == None: + self.zMinPlot = self.zMin + else: + self.zMinPlot = zMinPlot + +class Sample: + dataType = "observation" + dataFormat = "sdss" + dataFile = "lss.dr72dim.dat" + fullName = "lss.dr72dim.dat" + nickName = "dim" + zobovDir = "" + maskFile = "rast_window_512.fits" + selFunFile = "czselfunc.all.dr72dim.dat" + skyFraction = 0.19 + zBoundary = (0.0, 0.1) + zBoundaryMpc = (0., 300) + zRange = (0.0, 0.1) + omegaM = 0.27 + minVoidRadius = 5 + fakeDensity = 0.01 + profileBinSize = 2 # Mpc + volumeLimited = True + includeInHubble = True + partOfCombo = False + isCombo = False + comboList = [] + + # applies to simulations only + boxLen = 1024 # Mpc/h + usePecVel = False + subsample = 1.0 + useLightCone = True + numSubDivisions = 1 + numSubvolumes = 1 + mySubvolume = 1 + + stacks = [] + + def __init__(self, dataFile="", fullName="", + nickName="", maskFile="", selFunFile="", + zBoundary=(), zRange=(), zBoundaryMpc=(), + minVoidRadius=0, fakeDensity=0.01, volumeLimited=True, + includeInHubble=True, partOfCombo=False, isCombo=False, + comboList=(), profileBinSize=2.0, skyFraction=0.19, + dataType="observation", numSubDivisions=2, + boxLen=1024, usePecVel=False, omegaM=0.27, + numSubvolumes=1, mySubvolume=1, dataFormat="sdss", + subsample="1.0", useLightCone=True): + self.dataFile = dataFile + self.fullName = fullName + self.nickName = nickName + self.maskFile = maskFile + self.selFunFile = selFunFile + self.zBoundary = zBoundary + self.zBoundaryMpc = zBoundaryMpc + self.zRange = zRange + self.minVoidRadius = minVoidRadius + self.fakeDensity = fakeDensity + self.volumeLimited = volumeLimited + self.includeInHubble = includeInHubble + self.partOfCombo = partOfCombo + self.isCombo = isCombo + self.comboList = comboList + self.zobovDir = None + self.profileBinSize = profileBinSize + self.skyFraction = skyFraction + self.dataType = dataType + self.numSubDivisions = numSubDivisions + self.boxLen = boxLen + self.usePecVel = usePecVel + self.omegaM = omegaM + self.numSubvolumes = numSubvolumes + self.mySubvolume = mySubvolume + self.dataFormat = dataFormat + self.subsample = subsample + self.useLightCone = useLightCone + + self.stacks = [] + + def addStack(self, zMin, zMax, rMin, rMax, + includeInHubble, partOfCombo,zMinPlot=None, + needProfile=True, rescaleMode="rmax"): + self.stacks.append(Stack(zMin, zMax, rMin, rMax, + includeInHubble, partOfCombo, + zMinPlot=zMinPlot, needProfile=needProfile, + rescaleMode=rescaleMode)) + + def getHubbleStacks(self): + stacksForHubble = [] + for stack in self.stacks: + if stack.includeInHubble: + stacksForHubble.append(stack) + return stacksForHubble + + def getUniqueRBins(self): + uniqueRStacks = [] + for stack in self.stacks: + if not stack.includeInHubble: + continue + alreadyHere = False + for stackCheck in uniqueRStacks: + if stack.rMin == stackCheck.rMin and stack.rMax == stackCheck.rMax: + alreadyHere = True + break + if not alreadyHere: + uniqueRStacks.append(stack) + return uniqueRStacks + + def getUniqueZBins(self): + uniqueZStacks = [] + for stack in self.stacks: + if not stack.includeInHubble: + continue + alreadyHere = False + for stackCheck in uniqueZStacks: + if stack.zMin == stackCheck.zMin and stack.zMax == stackCheck.zMax: + alreadyHere = True + break + if not alreadyHere: + uniqueZStacks.append(stack) + return uniqueZStacks + +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +def jobSuccessful(logFile, doneString): + jobDone = False + checkLine = "" + if os.access(logFile, os.F_OK): + filelines = file(logFile, "r").readlines() + if len(filelines) >= 1: + checkLine = filelines[-1] + jobDone = (checkLine == doneString) + return jobDone + +def getStackSuffix(zMin, zMax, rMin, rMax, dataPortion): + return "z"+str(zMin)+"-"+str(zMax)+"_"+str(rMin)+"-"+str(rMax)+\ + "Mpc"+"_"+dataPortion diff --git a/python_tools/void_python_tools/backend/launchers.py b/python_tools/void_python_tools/backend/launchers.py new file mode 100755 index 0000000..888639a --- /dev/null +++ b/python_tools/void_python_tools/backend/launchers.py @@ -0,0 +1,1317 @@ +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +# routines which communicate with individual data analysis portions - +# they make the analyzeVoids.py script easier to read + +import os +import glob +import classes +import numpy as np +import numpy.ma as ma +import os +import shutil +import glob +import subprocess +import sys +from pylab import figure +from Scientific.IO.NetCDF import NetCDFFile +import Scientific.N as Num +from void_python_tools.backend.classes import * +import void_python_tools.apTools as vp + +# ----------------------------------------------------------------------------- +def launchGenerate(sample, binPath, workDir=None, inputDataDir=None, + zobovDir=None, figDir=None, logFile=None, useLCDM=False, + continueRun=None): + + if sample.dataType == "observation": + sampleName = sample.fullName + + if sample.dataFile == "": + datafile = inputDataDir+"/"+sampleName + else: + datafile = sample.dataFile + + maskFile = sample.maskFile + + if useLCDM: + useLCDMFlag = "useLCDM" + else: + useLCDMFlag = "" + + conf=""" + catalog %s + mask %s + output %s + params %s + zMin %g + zMax %g + density_fake %g + %s + """ % (datafile, maskFile, zobovDir+"/zobov_slice_"+sampleName, + zobovDir+"/zobov_slice_"+sampleName+".par", + sample.zBoundary[0], sample.zBoundary[1], sample.fakeDensity, + useLCDMFlag) + + parmFile = os.getcwd()+"/generate.par" + + file(parmFile, mode="w").write(conf) + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + cmd = "%s --configFile=%s >& %s" % (binPath,parmFile,logFile) + os.system(cmd) + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + if os.access(parmFile, os.F_OK): + os.unlink(parmFile) + + if os.access("contour_map.fits", os.F_OK): + os.system("mv %s %s" % ("contour_map.fits", zobovDir)) + os.system("mv %s %s" % ("mask_map.fits", zobovDir)) + + if os.access("comoving_distance.txt", os.F_OK): + os.system("mv %s %s" % ("comoving_distance.txt", zobovDir)) + + if os.access("mask_index.txt", os.F_OK): + os.system("mv %s %s" % ("mask_index.txt", zobovDir)) + os.system("mv %s %s" % ("total_particles.txt", zobovDir)) + os.system("mv %s %s" % ("sample_info.txt", zobovDir)) + + if os.access("galaxies.txt", os.F_OK): + os.system("mv %s %s" % ("galaxies.txt", zobovDir)) + os.system("mv %s %s" % ("mock_galaxies.txt", zobovDir)) + os.system("mv %s %s" % ("mock_boundary.txt", zobovDir)) + os.system("mv %s %s" % ("mock_sphere.txt", zobovDir)) + + else: # simulation + sampleName = sample.fullName + + datafile = inputDataDir+"/"+sample.dataFile + + if sample.usePecVel: + includePecVelString = "peculiarVelocities" + else: + includePecVelString = "" + + if sample.dataFormat == "multidark": + dataFileLine = "multidark " + datafile + elif sample.dataFormat == "gadget": + dataFileLine = "gadget " + datafile + + iX = float(sample.mySubvolume[0]) + iY = float(sample.mySubvolume[1]) + + xMin = iX/sample.numSubvolumes * sample.boxLen + yMin = iY/sample.numSubvolumes * sample.boxLen + xMax = (iX+1)/sample.numSubvolumes * sample.boxLen + yMax = (iY+1)/sample.numSubvolumes * sample.boxLen + + conf=""" + %s + output %s + outputParameter %s + %s + rangeX_min %g + rangeX_max %g + rangeY_min %g + rangeY_max %g + rangeZ_min %g + rangeZ_max %g + subsample %g + """ % (dataFileLine, zobovDir+"/zobov_slice_"+sampleName, + zobovDir+"/zobov_slice_"+sampleName+".par", + includePecVelString, + xMin, xMax, yMin, yMax, + sample.zBoundaryMpc[0], sample.zBoundaryMpc[1], + sample.subsample) + + parmFile = os.getcwd()+"/generate.par" + + file(parmFile, mode="w").write(conf) + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + cmd = "%s --configFile=%s >& %s" % (binPath,parmFile,logFile) + os.system(cmd) + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + if os.access(parmFile, os.F_OK): + os.unlink(parmFile) + +# ----------------------------------------------------------------------------- +def launchZobov(sample, binPath, zobovDir=None, logDir=None, continueRun=None): + + sampleName = sample.fullName + + datafile = zobovDir+"zobov_slice_"+sampleName + + logFile = logDir+"/zobov_"+sampleName+".out" + + vozScript = "./scr_"+sampleName + + if os.access(vozScript, os.F_OK): + os.unlink(vozScript) + + if sample.dataType == "observation": + maskIndex = open(zobovDir+"/mask_index.txt", "r").read() + totalPart = open(zobovDir+"/total_particles.txt", "r").read() + maxDen = 0.2*float(maskIndex)/float(totalPart) + else: + maskIndex = -1 + maxDen = 0.2 + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + for fileName in glob.glob(zobovDir+"/part._"+sampleName+".*"): + os.unlink(fileName) + + if os.access(zobovDir+"/adj_"+sampleName+".dat", os.F_OK): + os.unlink(zobovDir+"adj_"+sampleName+".dat") + + if os.access(zobovDir+"/voidDesc_"+sampleName+".out", os.F_OK): + os.unlink(zobovDir+"/voidDesc_"+sampleName+".out") + + cmd = "%s/vozinit %s 0.1 1.0 2 %s %g %s %s %s >& %s" % \ + (binPath, datafile, \ + "_"+sampleName, sample.numSubDivisions, \ + binPath, zobovDir, maskIndex, logFile) + os.system(cmd) + + cmd = "./%s >> %s 2>&1" % (vozScript, logFile) + os.system(cmd) + + cmd = "%s/jozov %s %s %s %s %s %g %s >> %s 2>&1" % \ + (binPath, \ + zobovDir+"/adj_"+sampleName+".dat", \ + zobovDir+"/vol_"+sampleName+".dat", \ + zobovDir+"/voidPart_"+sampleName+".dat", \ + zobovDir+"/voidZone_"+sampleName+".dat", \ + zobovDir+"/voidDesc_"+sampleName+".out", \ + maxDen, maskIndex, logFile) + os.system(cmd) + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + if os.access(vozScript, os.F_OK): + os.unlink(vozScript) + +# ----------------------------------------------------------------------------- +def launchPrune(sample, binPath, thisDataPortion=None, + summaryFile=None, logFile=None, zobovDir=None, + continueRun=None): + + sampleName = sample.fullName + + numVoids = sum(1 for line in \ + open(zobovDir+"/voidDesc_"+sampleName+".out")) + numVoids -= 2 + + if sample.dataType == "observation": + mockIndex = open(zobovDir+"/mask_index.txt", "r").read() + totalPart = open(zobovDir+"/total_particles.txt", "r").read() + maxDen = 0.2*float(mockIndex)/float(totalPart) + observationLine = " --isObservation" + else: + mockIndex = -1 + maxDen = 0.2 + observationLine = "" + + if not (continueRun and jobSuccessful(logFile, "NetCDF: Not a valid ID\n")): + cmd = binPath + cmd += " --partFile=" + zobovDir+"/zobov_slice_"+str(sampleName) + cmd += " --voidDesc=" + zobovDir+"/voidDesc_"+str(sampleName)+".out" + cmd += " --void2Zone="+zobovDir+"/voidZone_"+str(sampleName)+".dat" + cmd += " --zone2Part=" + zobovDir+"/voidPart_"+str(sampleName)+".dat" + cmd += " --partVol=" + zobovDir+"/vol_"+str(sampleName)+".dat" + cmd += " --extraInfo=" + zobovDir+"/zobov_slice_"+str(sampleName)+\ + ".par" + cmd += " --tolerance=1.0" + cmd += " --dataPortion=" + thisDataPortion + cmd += " --mockIndex=" + str(mockIndex) + cmd += " --maxCentralDen=" + str(maxDen) + cmd += " --zMin=" + str(sample.zBoundary[0]) + cmd += " --zMax=" + str(sample.zBoundary[1]) + cmd += " --rMin=" + str(sample.minVoidRadius) + cmd += " --numVoids=" + str(numVoids) + cmd += observationLine + cmd += " --output=" + zobovDir+"/voidDesc_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outCenters=" + zobovDir+"/barycenters_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outInfo=" + zobovDir+"/centers_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outNoCutInfo=" + zobovDir+"/centers_nocut_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outSkyPositions=" + zobovDir+"/sky_positions_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " --outDistances=" + zobovDir+"/boundaryDistances_"+\ + str(thisDataPortion)+"_"+\ + str(sampleName)+".out" + cmd += " >& " + logFile + os.system(cmd) + + if jobSuccessful(logFile, "NetCDF: Not a valid ID\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + +# ----------------------------------------------------------------------------- +def launchStack(sample, stack, binPath, thisDataPortion=None, logDir=None, + voidDir=None, freshStack=True, runSuffix=None, + zobovDir=None, + INCOHERENT=False, ranSeed=None, summaryFile=None, + continueRun=None, dataType=None): + + sampleName = sample.fullName + + runSuffix = getStackSuffix(stack.zMin, stack.zMax, stack.rMin, + stack.rMax, thisDataPortion) + + logFile = logDir+"/stack_"+sampleName+"_"+runSuffix+".out" + + treeFile = voidDir+"/tree.data" + + if (freshStack) and os.access(treeFile, os.F_OK): + os.unlink(treeFile) + + centralRadius = stack.rMin * 0.25 + + # restrict to relavent ranges of sample + zMin = max(sample.zRange[0],stack.zMin) * 3000 + zMax = min(sample.zRange[1],stack.zMax) * 3000 + + if dataType == "observation": + obsFlag = "observation" + else: + obsFlag = "" + + Rextracut = stack.rMin*3 + 1 + Rcircular = stack.rMin*3 + 2 + + if dataType == "observation": + maskIndex = open(zobovDir+"/mask_index.txt", "r").read() + totalPart = open(zobovDir+"/total_particles.txt", "r").read() + maxDen = 0.2*float(maskIndex)/float(totalPart) + else: + maskIndex = 999999999 + maxDen = 0.2 + + if INCOHERENT: + nullTestFlag = "INCOHERENT" + else: + nullTestFlag = "" + + if stack.rescaleMode == "rmax": + rescaleFlag = "rescale" + else: + rescaleFlag = "" + + conf=""" + desc %s + partzone %s + zonevoid %s + volumefile %s + Rmin %g + Rmax %g + particles %s + extraInfo %s + densityThreshold %g + centralRadius %g + edgeAvoidance %g + Circular %g + Zmin %g + Zmax %g + %s + %s + ranSeed %d + dataPortion %s + barycenters %s + boundaryDistances %s + %s + """ % \ + (zobovDir+"/voidDesc_"+thisDataPortion+"_"+sampleName+".out", + zobovDir+"/voidPart_"+sampleName+".dat", + zobovDir+"/voidZone_"+sampleName+".dat", + zobovDir+"/vol_"+sampleName+".dat", + stack.rMin, + stack.rMax, + zobovDir+"/zobov_slice_"+sampleName, + zobovDir+"/zobov_slice_"+sampleName+".par", + maxDen, + centralRadius, + Rextracut, + Rcircular, + zMin, + zMax, + obsFlag, + nullTestFlag, + ranSeed, + thisDataPortion, + zobovDir+"/barycenters_"+thisDataPortion+"_"+sampleName+".out", + zobovDir+"/boundaryDistances_"+thisDataPortion+"_"+sampleName+".out", + rescaleFlag) + + parmFile = os.getcwd()+"/stack.par" + + fp = file(parmFile, mode="w") + fp.write(conf) + + # continue stacking if requested; pull files to local directory + if os.access(treeFile, os.F_OK): + os.system("mv %s %s" % (treeFile, "./"+tree.data)) + fp.write("loadSearchTree\n") + fp.write("getTree\n") + fp.write("doExtraction\n") + else: + fp.write("dumpSearchTree\n") + fp.write("dumpTree\n") + fp.write("doExtraction\n") + fp.close() + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + cmd = "%s --configFile=%s >& %s" % \ + (binPath, parmFile, logFile) + os.system(cmd) + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + return + + minDist = None + maxDist = None + numVoids = None + numParticles = None + for line in open(logFile): + if "Minimum void distance is" in line: + line = line.split() + minDist = float(line[4])/3000 + + if "Maximum void distance is" in line: + line = line.split() + maxDist = float(line[4])/3000 + + if "Selected" in line: + line = line.split() + numVoids = line[1] + + if "Number of particles =" in line: + line = line.split() + numParticles = line[4] + + open(voidDir+"/num_voids.txt", "w").write(numVoids) + open(voidDir+"/num_particles.txt", "w").write(numParticles) + + if os.access(voidDir+"/NOVOID", os.F_OK): + os.unlink(voidDir+"/NOVOID") + + if (numVoids == "0"): + print " No voids found; skipping!" + fp = open(voidDir+"/NOVOID", "w") + fp.write("no voids found\n") + fp.close() + return + + emptyStack = False + for line in open(logFile): + if "EMPTY STACK" in line: + emptyStack = True + if emptyStack: + print " Stack is empty; skipping!" + fp = open(voidDir+"/NOVOID", "w") + fp.write("empty stack\n") + fp.close() + return + + # figure out box volume and average density + maskFile = sample.maskFile + sulFunFile = sample.selFunFile + + if not os.access(sample.selFunFile, os.F_OK) and not volumeLimited: + print " Cannot find", selFunFile, "!" + exit(-1) + + sys.stdout = open(logFile, 'a') + sys.stderr = open(logFile, 'a') + zMin = sample.zRange[0] + zMax = sample.zRange[1] + if not sample.volumeLimited: + props = vp.getSurveyProps(maskFile, stack.zMin, + stack.zMax, zMin, zMax, "all", + selectionFuncFile=sample.selFunFile) + else: + zMinForVol = sample.zBoundary[0] + zMaxForVol = sample.zBoundary[1] + props = vp.getSurveyProps(maskFile, zMinForVol, + zMaxForVol, zMin, zMax, "all") + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + boxVol = props[0] + nbar = props[1] + + if sample.volumeLimited: + nbar = 1.0 + + summaryLine = runSuffix + " " + \ + thisDataPortion + " " + \ + str(stack.zMin) + " " + \ + str(stack.zMax) + \ + " " + str(numVoids) + " " + str(minDist) + \ + " " + str(maxDist) + if summaryFile != None: + open(summaryFile, "a").write(summaryLine+"\n") + + # move local outputs to storage directory + if os.access("tree.data", os.F_OK): + normalization = float(numParticles)/float(boxVol)/nbar + dataTemp = file("centers.txt", "r").readlines() + fp = file("normalizations.txt", "w") + for iVoid in xrange(len(dataTemp)): + fp.write(str(normalization)+"\n") + fp.close() + + os.system("mv %s %s" % ("tree.data", treeFile)) + os.system("mv %s %s" % ("void_indexes.txt", voidDir+"/")) + os.system("mv %s %s" % ("posx.nc", voidDir+"/posx.nc")) + os.system("mv %s %s" % ("posy.nc", voidDir+"/posy.nc")) + os.system("mv %s %s" % ("posz.nc", voidDir+"/posz.nc")) + os.system("mv %s %s" % ("redshifts.nc", voidDir+"/redshifts.nc")) + os.system("mv %s %s" % ("indexes.nc", voidDir+"/")) + os.system("mv %s %s" % ("kdtree_stackvoids.dat", voidDir+"/")) + os.system("mv %s %s" % ("centers.txt", voidDir+"/")) + os.system("mv %s %s" % ("sky_positions.txt", voidDir+"/")) + os.system("mv %s %s" % ("check.txt", voidDir+"/")) + os.system("mv %s %s" % ("tracer.txt", voidDir+"/")) + os.system("mv %s %s" % ("normalizations.txt", voidDir+"/")) + os.system("mv %s %s" % ("boundaryDistances.txt", voidDir+"/")) + + if os.access(parmFile, os.F_OK): + os.unlink(parmFile) + + return + +# ----------------------------------------------------------------------------- +def launchCombine(sample, stack, voidDir=None, logFile=None, + zobovDir=None, workDir=None, thisDataPortion=None): + + sampleName = sample.fullName + + runSuffix = getStackSuffix(stack.zMin, stack.zMax, stack.rMin, + stack.rMax, thisDataPortion) + + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + + if os.access(voidDir+"/num_voids.txt", os.F_OK): + os.unlink(voidDir+"/num_voids.txt") + + doneGalUpdate = os.access(zobovDir+"donegalupdate", os.F_OK) + + for comboName in sample.comboList: + if not os.access(zobovDir+"/galaxies.txt", os.F_OK): + shutil.copy(workDir+"/sample_"+comboName+"/galaxies.txt", zobovDir) + elif not doneGalUpdate: + dataTemp = file(workDir+"/sample_"+comboName+"/galaxies.txt", +"r").read() + file(zobovDir+"/galaxies.txt", "a").write(dataTemp) + + sourceStackDir = workDir+"/sample_"+comboName+"/stacks_"+\ + runSuffix + + if os.access(sourceStackDir+"/NOVOID", os.F_OK): + continue + + if not os.access(voidDir+"/num_voids.txt", os.F_OK): + # just copy + shutil.copy(sourceStackDir+"/num_voids.txt", voidDir) + shutil.copy(sourceStackDir+"/num_particles.txt", voidDir) + shutil.copy(sourceStackDir+"/posx.nc", voidDir) + shutil.copy(sourceStackDir+"/posy.nc", voidDir) + shutil.copy(sourceStackDir+"/posz.nc", voidDir) + shutil.copy(sourceStackDir+"/indexes.nc", voidDir) + shutil.copy(sourceStackDir+"/redshifts.nc", voidDir) + shutil.copy(sourceStackDir+"/centers.txt", voidDir) + shutil.copy(sourceStackDir+"/void_indexes.txt", voidDir) + shutil.copy(sourceStackDir+"/sky_positions.txt", voidDir) + shutil.copy(sourceStackDir+"/normalizations.txt", voidDir) + shutil.copy(sourceStackDir+"/boundaryDistances.txt", voidDir) + + else: + # append data + dataTemp = file(voidDir+"/num_voids.txt", "r").readlines() + dataTemp2 = file(sourceStackDir+"/num_voids.txt", "r").\ + readlines() + dataTemp = np.array(dataTemp, dtype='i') + dataTemp2 = np.array(dataTemp2, dtype='i') + dataTemp += dataTemp2 + dataTemp = str(dataTemp[0]) + file(voidDir+"/num_voids.txt", "w").write(str(dataTemp)) + + dataTemp = file(voidDir+"/num_particles.txt", "r").readlines() + dataTemp2 = file(sourceStackDir+"/num_particles.txt", "r").\ + readlines() + dataTemp = np.array(dataTemp, dtype='i') + dataTemp2 = np.array(dataTemp2, dtype='i') + dataTemp += dataTemp2 + dataTemp = str(dataTemp[0]) + file(voidDir+"/num_particles.txt", "w").write(str(dataTemp)) + + dataTemp = file(sourceStackDir+"/centers.txt", "r").read() + file(voidDir+"/centers.txt", "a").write(dataTemp) + dataTemp = file(sourceStackDir+"/normalizations.txt", "r").\ + read() + file(voidDir+"/normalizations.txt", "a").write(dataTemp) + + dataTemp = file(sourceStackDir+"/boundaryDistances.txt","r").\ + read() + file(voidDir+"/boundaryDistances.txt", "a").write(dataTemp) + + dataTemp = file(sourceStackDir+"/sky_positions.txt", "r").\ + read() + file(voidDir+"/sky_positions.txt", "a").write(dataTemp) + + idxTemp = file(sourceStackDir+"/void_indexes.txt", "r").\ + readlines() + idxTemp = np.array(idxTemp, dtype='i') + dataTemp = (NetCDFFile(voidDir+"/posx.nc").\ + variables['array'])[0:] + idxTemp[:] += len(dataTemp) + fp = open(voidDir+"/void_indexes.txt", "a") + for idx in idxTemp: + fp.write(str(idx)+"\n") + fp.close() + dataTemp = () + + fp = NetCDFFile(voidDir+"/posx.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/posx.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/posx.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + fp = NetCDFFile(voidDir+"/posy.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/posy.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/posy.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + fp = NetCDFFile(voidDir+"/posz.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/posz.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/posz.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + fp = NetCDFFile(voidDir+"/redshifts.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/redshifts.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/redshifts.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + fp = NetCDFFile(voidDir+"/indexes.nc") + dataTemp = fp.variables['array'][0:] + fp.close() + fp = NetCDFFile(sourceStackDir+"/indexes.nc") + dataTemp2 = fp.variables['array'][0:] + fp.close() + dataTemp = np.append(dataTemp, dataTemp2) + outFile = NetCDFFile(voidDir+"/indexes.nc", mode='w') + outFile.createDimension("dim", len(dataTemp)) + v = outFile.createVariable("array", Num.Float, ("dim",)) + v[:] = dataTemp + outFile.close() + + # add NOVOID if necessary + if not os.access(voidDir+"/centers.txt", os.F_OK): + fp = open(voidDir+"/NOVOID", "w") + fp.write("no voids in combo\n") + fp.close() + + fp = open(zobovDir+"/donegalupdate", "w") + fp.close() + + print "Done!" + + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + #else: + # print "already done!" + +# ----------------------------------------------------------------------------- +def launchProfile(sample, stack, voidDir=None, logFile=None, continueRun=None): + + sampleName = sample.fullName + + if os.access(voidDir+"/NOVOID", os.F_OK): + print "no stack here; skipping!" + return + + numVoids = open(voidDir+"/num_voids.txt", "r").readline() + numParticles = open(voidDir+"/num_particles.txt", "r").readline() + + Rextracut = stack.rMin*3 + 1 + Rcircular = stack.rMin*3 + 2 + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + profileParmFile = voidDir+"/params.txt" + fp = open(profileParmFile, "w") + fp.write(str(stack.rMin)+"\n") + fp.write(str(stack.rMax)+"\n") + fp.write(str(Rcircular)+"\n") + fp.write(numVoids+"\n") + fp.close() + + if sample.zRange[0] > stack.zMax or sample.zRange[1] < stack.zMin: + print "outside sample redshift range; skipping!" + fp = open(voidDir+"/NOVOID", "w") + fp.write("outside z range: profile\n") + fp.close() + return + + # TEST + if sample.profileBinSize == "auto": + density = 0.5 * 50 / Rcircular + else: + #density = 0.5 * 50 / 60 + density = 0.5 * 50 / Rcircular / sample.profileBinSize + + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + vp.build_1d_profile(base_dir=voidDir, density=density, + rescaleMode=stack.rescaleMode) + vp.build_2d_profile(base_dir=voidDir, density=density) + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + if jobSuccessful(logFile, "Done!\n"): + print "done", numVoids + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + +# ----------------------------------------------------------------------------- +def launchFit(sample, stack, logFile=None, voidDir=None, figDir=None, + continueRun=None, thisDataPortion=None): + + sampleName = sample.fullName + + runSuffix = getStackSuffix(stack.zMin, stack.zMax, stack.rMin, + stack.rMax, thisDataPortion) + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + if os.access(voidDir+"/NOVOID", os.F_OK): + print "no voids here; skipping!" + return + + if stack.zMin < sample.zRange[0] or stack.zMax > sample.zRange[1]: + print "outside sample redshift range; skipping!" + return + + if sample.partOfCombo or not sample.includeInHubble: + print "sample not needed for further analysis; skipping!" + fp = open(voidDir+"/NOFIT", "w") + fp.write("sample not needed for hubble\n") + fp.close() + return + + if not stack.includeInHubble: + print "radius not needed for further analysis; skipping!" + return + + if not stack.includeInHubble: + print "redshift not needed for further analysis; skipping!" + return + + if os.access(figDir+"/stackedVoid_"+sampleName+"_"+\ + runSuffix+".eps", os.F_OK): + os.unlink(figDir+"/stackedVoid_"+sampleName+"_"+\ + runSuffix+".eps") + + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + + badChain = True + ntries = 0 + maxtries = 5 + while badChain: + Rexpect = (stack.rMin+stack.rMax)/2 + Rtruncate = stack.rMax*3. + 1 # TEST + ret,fits,args = vp.fit_ellipticity(voidDir,Rbase=Rexpect, + Niter=300000, + Nburn=100000, + Rextracut=Rtruncate) + badChain = (args[0][0] > 0.5 or args[0][1] > stack.rMax or \ + args[0][2] > stack.rMax) and \ + (ntries < maxtries) + ntries += 1 + + np.save(voidDir+"/chain.npy", ret) + np.savetxt(voidDir+"/fits.out", fits) + + plotTitle = "Sample: "+sample.nickName+\ + ", z = "+str(stack.zMin)+"-"+\ + str(stack.zMax)+", R = "+str(stack.rMin)+"-"+\ + str(stack.rMax)+r" $h^{-1}$ Mpc" + + showRatio = (ntries <= maxtries) + showContours = (ntries <= maxtries) + + if stack.rescaleMode == "rmax": + rescaleFactor = stack.rMax + else: + rescaleFactor = 1.0 + + # TEST - plotting raw galaxy counts + vp.draw_fit(*args, delta_tick=50, vmax=1.0, delta_v=0.01, + #vp.draw_fit(*args, delta_tick=0.2, vmax=1.0, delta_v=0.01, + nocontour=True, model_max=1.0, delta_model=0.1, + plotTitle=plotTitle, show_ratio=showRatio, + showContours=showContours, + rescaleFactor=rescaleFactor) + figure(1).savefig(figDir+"/stackedVoid_"+sampleName+\ + "_"+runSuffix+".eps") + figure(1).savefig(figDir+"/stackedVoid_"+sampleName+\ + "_"+runSuffix+".pdf") + figure(1).savefig(figDir+"/stackedVoid_"+sampleName+\ + "_"+runSuffix+".png") + + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + if jobSuccessful(logFile, "Done!\n"): + print "done (", ntries, " tries)" + else: + print "FAILED!" + exit(-1) + + # record the measured stretch + exp = args[1] + expError = args[2] + outline = str(exp) + " " + str(expError) + open(voidDir+"/expansion.out", "w").write(outline) + + if os.access(voidDir+"/NOFIT", os.F_OK): + os.unlink(voidDir+"/NOFIT") + if ntries > maxtries: + print " No reliable fit found; skipping!" + fp = open(voidDir+"/NOFIT", "w") + fp.write("bad ellipticity fit\n") + fp.close() + return + + else: + print "already done!" + + +# ----------------------------------------------------------------------------- +def launchHubble(dataPortions=None, dataSampleList=None, logDir=None, + INCOHERENT=None, workDir=None, figDir=None, errorBars=None, + ZOBOV_PATH=None, continueRun=None, voidDir=None, + doPlot = True): + + for thisDataPortion in dataPortions: + print " For data portion", thisDataPortion + sys.stdout.flush() + + # merge the bins from all samples + numSamplesForHubble = 0 + maxRBins = 0 + maxZBins = 0 + allRBins = [] + allZBins = [] + + for sample in dataSampleList: + if sample.includeInHubble: + numSamplesForHubble += 1 + + for stack in sample.getHubbleStacks(): + alreadyHere = False + for stackCheck in allRBins: + if stack.rMin == stackCheck.rMin and stack.rMax==stackCheck.rMax: + alreadyHere = True + break + if not alreadyHere: + allRBins.append(stack) + + alreadyHere = False + for stackCheck in allZBins: + if stack.zMin == stackCheck.zMin and stack.zMax==stackCheck.zMax: + alreadyHere = True + break + if not alreadyHere: + allZBins.append(stack) + + allExpList = np.zeros((numSamplesForHubble,len(allRBins),len(allZBins),3)) + allExpList[:] = -1 + aveDistList = np.zeros((len(allZBins),3)) + + iSample = -1 + for sample in dataSampleList: + if not sample.includeInHubble: + continue + + iSample += 1 + + zobovDir = sample.zobovDir + sampleName = sample.fullName + + print " For data set", sampleName, "...", + sys.stdout.flush() + + logFile = logDir+"/hubble_"+sampleName+"_"+thisDataPortion+".out" + + #AVEDIST_PATH = ZOBOV_PATH+"/mytools/computeAverageDistortionPMS" + + # compute the average stretch in each redshift bin for cleaner-looking + # (not not fully accurate) plots + for (iZBin, stack) in enumerate(sample.getUniqueZBins()): + + aveDist = vp.aveStretchCone(stack.zMin, stack.zMax, + skyFrac = sample.skyFraction) + aveDistList[iZBin, 0] = stack.zMin + aveDistList[iZBin, 1] = aveDist + aveDistList[iZBin, 2] = 0.00125 + + numFits = 0 + fp = file(zobovDir+'/calculatedExpansions_'+thisDataPortion+'.txt', + mode="w") + + expList = np.zeros((1, len(sample.getUniqueRBins()), + len(sample.getUniqueZBins()), 3)) + + for (iZBin, zBin) in enumerate(sample.getUniqueZBins()): + for (iR, rBin) in enumerate(sample.getUniqueRBins()): + + runSuffix = getStackSuffix(zBin.zMin, zBin.zMax, rBin.rMin, + rBin.rMax, thisDataPortion) + + expFile = zobovDir+"/stacks_"+runSuffix+"/expansion.out" + if not (os.access(zobovDir+"/stacks_"+runSuffix+"/NOVOID", \ + os.F_OK) or + os.access(zobovDir+"/stacks_"+runSuffix+"/NOFIT", \ + os.F_OK) or + not os.access(expFile, os.F_OK)): + exp = float(open(expFile, "r").readline().split()[0]) + expError = float(open(expFile, "r").readline().split()[1]) + else: + exp = -1 + expError = 0 + + expList[0, iR, iZBin, 0] = exp + expList[0, iR, iZBin, 1] = expError + + # TODO + # compute the per-stack stretch for liklihood calculation + #runSuffix = getStackSuffix(stack.zMin, stack.zMax, stack.rMin, + # stack.rMax, thisDataPortion) + #voidDir = zobovDir+"/stacks_" + runSuffix + #centersFile = voidDir+"/centers.txt" + #voidRedshifts = np.loadtxt(centersFile)[:,5] + #aveDist = vp.aveWeightedStretchCone(stack.zMin, stack.zMax, + # skyFrac = sample.skyFraction, + # voidRedshifts=voidRedshifts) + + aveDist = vp.aveStretchCone(zBin.zMin, zBin.zMax, + skyFrac = sample.skyFraction) + expList[0, iR, iZBin, 2] = aveDist + + for (iZCheck,zBinCheck) in enumerate(allZBins): + for (iRCheck,rBinCheck) in enumerate(allRBins): + if zBin.zMin == zBinCheck.zMin and zBin.zMax == zBinCheck.zMax: + if rBin.rMin == rBinCheck.rMin and rBin.rMax == rBinCheck.rMax: + aveDist = vp.aveStretchCone(zBin.zMin, zBin.zMax, + skyFrac = sample.skyFraction) + allExpList[iSample, iRCheck, iZCheck, 0] = exp + allExpList[iSample, iRCheck, iZCheck, 1] = expError + + fp.write(str(exp) + " " + str(expError) + " "+ " "+ \ + str(aveDist) + " -1 " + runSuffix+"\n") + numFits += 1 + + fp.close() + + rlist = np.zeros((len(sample.getUniqueRBins()),2)) + for (iR,rBin) in enumerate(sample.getUniqueRBins()): + rlist[iR, 0] = rBin.rMin + rlist[iR, 1] = rBin.rMax + + zbase = np.zeros((len(sample.getUniqueZBins()),2)) + for (iZ,zBin) in enumerate(sample.getUniqueZBins()): + zbase[iZBin,0] = zBin.zMinPlot + zbase[iZBin,1] = zBin.zMaxPlot + #np.savetxt(zobovDir+'/zbase_'+thisDataPortion+'.txt', zbase) + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + plotTitle = "Sample: "+sample.nickName+", "+thisDataPortion+" voids" + if doPlot: + #vp.do_all_obs(zbase, expList, workDir+"/avedistortion_", + vp.do_all_obs(zbase, expList, aveDistList, + rlist, plotTitle=plotTitle, plotAve=True) + figure(1).savefig(figDir+"/hubble_"+sampleName+"_"+thisDataPortion+\ + ".eps",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_"+sampleName+"_"+thisDataPortion+\ + ".pdf",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_"+sampleName+"_"+thisDataPortion+\ + ".png",bbox_inches='tight') + else: + print "Skipping plot" + print "Done!" + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + # now do all samples in one plot + print " For data set combined...", + sys.stdout.flush() + + logFile = logDir+"/hubble_combined_"+thisDataPortion+".out" + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + + if errorBars == "ESTIMATED": + # replace calculated errors with estimated ones + errorBarFile = workDir+"/calculatedErrorBars_"+thisDataPortion+".txt" + if os.access(errorBarFile, os.F_OK): + print "REPLACING ERROR BARS!", + sys.stdout.flush() + fp = file(errorBarFile, mode="r") + ignoreLine = fp.readline() + for iZ in xrange(len(allExpList[0,0,:,0])): + ignoreLine = fp.readline() + + for iZ in xrange(len(allExpList[0,0,:,0])): + for iSample in xrange(len(allExpList[:,0,0,0])): + for iR in xrange(len(allExpList[0,:,0,0])): + line = fp.readline().split() + allExpList[iSample,iR,iZ,2] = allExpList[iSample,iR,iZ,1] + allExpList[iSample,iR,iZ,1] = float(line[1]) + + fp.close() + + rlist = np.zeros((len(allRBins),2)) + for (iR,rBin) in enumerate(allRBins): + rlist[iR, 0] = rBin.rMin + rlist[iR, 1] = rBin.rMax + + zbase = np.zeros((len(allZBins),2)) + plotZmax = 0.0 + plotZmin = 1.e99 + for (iZ,zBin) in enumerate(allZBins): + zbase[iZ,0] = zBin.zMinPlot + zbase[iZ,1] = zBin.zMaxPlot + + if zBin.zMaxPlot > plotZmax: plotZmax = zBin.zMaxPlot + if zBin.zMinPlot < plotZmin: plotZmin = zBin.zMinPlot + + aveDist = vp.aveStretchCone(zBin.zMin, zBin.zMax, + skyFrac = sample.skyFraction) + aveDistList[iZ, 0] = zBin.zMin + aveDistList[iZ, 1] = aveDist + aveDistList[iZ, 2] = 0.00125 + + + shortSampleNames = list() + for sample in dataSampleList: + if sample.includeInHubble: + shortSampleNames.append(sample.nickName) + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + if doPlot: + if INCOHERENT: + #plotTitle = "all samples, incoherent "+\ + # thisDataPortion+" voids" + plotTitle = '' + else: + #plotTitle = "all samples, "+thisDataPortion+" voids" + plotTitle = '' + vp.do_all_obs(zbase, allExpList, aveDistList, + rlist, plotTitle=plotTitle, sampleNames=shortSampleNames, + plotAve=True, mulfac = 1.0, biasLine = 1.16, + plotZmin=plotZmin, plotZmax=plotZmax+0.2) + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + ".eps",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + ".pdf",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + ".png",bbox_inches='tight') + + if INCOHERENT: + plotTitle = "all samples, incoherent "+\ + thisDataPortion+" voids (systematics corrected)" + else: + plotTitle = "all samples, "+thisDataPortion+\ + " voids (systematics corrected)" + vp.do_all_obs(zbase, allExpList, aveDistList, + rlist, plotTitle=plotTitle, sampleNames=shortSampleNames, + plotAve=True, mulfac = 1.16, + plotZmin=plotZmin, plotZmax=plotZmax+0.2) + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + "_debiased.eps",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + "_debiased.pdf",bbox_inches='tight') + figure(1).savefig(figDir+"/hubble_combined_"+thisDataPortion+\ + "_debiased.png",bbox_inches='tight') + else: + print "Skipping plot" + print "Done!" + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + # save all expansion data to a single file + fp = file(workDir+'/calculatedExpansions_'+thisDataPortion+'.txt', + mode="w") + fp.write(str(numSamplesForHubble) + " " + + str(len(allRBins)) + " " + str(len(allZBins)) + "\n") + for zBin in allZBins: + fp.write(str(zBin.zMin) + " " + str(zBin.zMax) + "\n") + + for iZ in xrange(len(allExpList[0,0,:,0])): + for iSample in xrange(len(allExpList[:,0,0,0])): + for iR in xrange(len(allExpList[0,:,0,0])): + fp.write(str(allExpList[iSample,iR,iZ,0]) + " " +\ + str(allExpList[iSample,iR,iZ,1]) + " " +\ + str(allExpList[iSample,iR,iZ,2]) + "\n") + fp.close() + + # save all void distribution data to a single file + fp = file(workDir+'/voidDistributions_'+thisDataPortion+'.txt', + mode="w") + fp.write(str(numSamplesForHubble) + " " + + str(len(allRBins)) + " " + str(len(allZBins)) + "\n") + for zBin in allZBins: + fp.write(str(zBin.zMin) + " " + str(zBin.zMax) + "\n") + + for zBin in allZBins: + for sample in dataSampleList: + if not sample.includeInHubble: continue + for rBin in allRBins: + runSuffix = getStackSuffix(zBin.zMin, zBin.zMax, rBin.rMin, + rBin.rMax, thisDataPortion) + voidDir = sample.zobovDir+"/stacks_" + runSuffix + centersFile = voidDir+"/centers.txt" + if os.access(centersFile, os.F_OK): + voidRedshifts = np.loadtxt(centersFile)[:,5] + #fp.write(str(len(voidRedshifts))+" ") + np.savetxt(fp, voidRedshifts[None]) + else: + fp.write("-1\n") + fp.close() + + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + +# ----------------------------------------------------------------------------- +def launchLikelihood(dataPortions=None, logDir=None, workDir=None, + continueRun=False): + + for thisDataPortion in dataPortions: + print " For data portion", thisDataPortion, "...", + sys.stdout.flush() + + logFile = logDir+"/likelihood_"+thisDataPortion+".out" + + if not (continueRun and jobSuccessful(logFile, "Done!\n")): + + sys.stdout = open(logFile, 'w') + sys.stderr = open(logFile, 'a') + + vp.build1dLikelihood(workDir+"/calculatedExpansions_"+\ + thisDataPortion+".txt", + workDir+"/voidDistributions_" + \ + thisDataPortion+".txt", + nbins = 20, + OmStart = 0.0, + OmEnd = 1.0, + biasStart = 1.0, + biasEnd = 1.2, + outputBase = workDir+"/1dlikelihoods_"+thisDataPortion+"_", + useBinAve = False) + + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + if jobSuccessful(logFile, "Done!\n"): + print "done" + else: + print "FAILED!" + exit(-1) + + else: + print "already done!" + + +# ----------------------------------------------------------------------------- +def launchEstimateErrorBars(workDir=None, nullDir=None, numNulls=None, + dataPortion=None): + + IVALUE = 0 + IERROR = 1 + + # open first null file to get sizes + nullFile = nullDir + "/" + str(1) + "/calculatedExpansions_" + \ + str(dataPortion) + ".txt" + fp = open(nullFile, "r") + binLine = fp.readline() + numSamples = int(binLine.split(" ")[0]) + numRBins = int(binLine.split(" ")[1]) + numZBins = int(binLine.split(" ")[2]) + numBins = numRBins * numSamples * numZBins + nRTotal = numRBins * numSamples + fp.close() + + # load null data + nullData = np.zeros([numNulls, numBins, 2]) + + for iNull in xrange(numNulls): + nullFile = nullDir + "/" + str(iNull) + "/calculatedExpansions_" + \ + str(dataPortion) + ".txt" + fp = open(nullFile, "r") + + binLine = fp.readline() + numSamples = int(binLine.split(" ")[0]) + numRBins = int(binLine.split(" ")[1]) + numZBins = int(binLine.split(" ")[2]) + numBins = numRBins * numSamples * numZBins + + zList = np.zeros( [numZBins,2] ) + for iZ in xrange(int(numZBins)): + line = fp.readline().split() + zList[iZ,0] = float(line[0]) + zList[iZ,1] = float(line[1]) + + for iZ in xrange(numZBins): + iRTotal = 0 + for iSample in xrange(numSamples): + for iR in xrange(numRBins): + line = fp.readline().split() + nullData[iNull,iRTotal*numZBins+iZ,IVALUE] = float(line[0]) + nullData[iNull,iRTotal*numZBins+iZ,IERROR] = float(line[1]) + iRTotal += 1 + fp.close() + + # use 68% limits to get error bars + errorBars = np.zeros([numBins, 2]) + for iBin in xrange(numBins): + binData = nullData[:,iBin,IVALUE] + validData = binData[:] > -1 + binData = binData[validData] + binData = np.sort(binData) + + if np.size(binData) > 0: + errorBars[iBin, 0] = binData[int(0.16*np.size(binData))] + errorBars[iBin, 1] = binData[int(0.84*np.size(binData))] + + mean = (errorBars[iBin, 1] + errorBars[iBin, 0])/2 + sig = (errorBars[iBin, 1] - errorBars[iBin, 0])/2 + errorBars[iBin, 0] = mean + errorBars[iBin, 1] = sig + else: + errorBars[iBin, :] = -1 + + # writes out error bars + fp = file(workDir+"/calculatedErrorBars_" + \ + str(dataPortion) + ".txt", mode="w") + fp.write(str(numSamples) + " " + str(numRBins) + " " + str(numZBins) + "\n") + for iZ in xrange(numZBins): + fp.write(str(zList[iZ,0]) + " " + str(zList[iZ,1]) + "\n") + + for iZ in xrange(numZBins): + iRTotal = 0 + for iSample in xrange(numSamples): + for iR in xrange(numRBins): + fp.write(str(errorBars[iRTotal*numZBins+iZ,0]) + " " + \ + str(errorBars[iRTotal*numZBins+iZ,1]) + "\n") + iRTotal += 1 + fp.close() + + + + diff --git a/python_tools/void_python_tools/plotting/__init__.py b/python_tools/void_python_tools/plotting/__init__.py new file mode 100644 index 0000000..c2750a7 --- /dev/null +++ b/python_tools/void_python_tools/plotting/__init__.py @@ -0,0 +1,2 @@ +from plotTools import * +from plotDefs import * diff --git a/python_tools/void_python_tools/plotting/plotDefs.py b/python_tools/void_python_tools/plotting/plotDefs.py new file mode 100644 index 0000000..980e442 --- /dev/null +++ b/python_tools/void_python_tools/plotting/plotDefs.py @@ -0,0 +1,13 @@ +colorList = ['r', 'b', 'g', 'y', 'c', 'm', 'y', + 'brown', 'grey', + 'darkred', 'orange', 'pink', 'darkblue', + 'lightblue', 'chocolate', + 'indigo', 'lightseagreen', 'maroon', 'olive', + 'royalblue', 'palevioletred', 'seagreen', 'tomato', + 'aquamarine', 'darkslateblue', + 'khaki', 'lawngreen', 'mediumorchid', + 'orangered', 'thistle' + 'yellowgreen'] + +linewidth = 4 +fontsize = 12 diff --git a/python_tools/void_python_tools/plotting/plotTools.py b/python_tools/void_python_tools/plotting/plotTools.py new file mode 100644 index 0000000..4fad79a --- /dev/null +++ b/python_tools/void_python_tools/plotting/plotTools.py @@ -0,0 +1,69 @@ +__all__=['plotNumberCounts'] + +from void_python_tools.backend.classes import * +from plotDefs import * +import numpy as np +import os +import pylab as plt + +# ----------------------------------------------------------------------------- +def plotNumberCounts(workDir=None, sampleList=None, figDir=None, plotNameBase="numbercount", + showPlot=False, dataPortion=None, setName=None): + + plt.clf() + plt.xlabel("Comoving Distance (Mpc/h)") + plt.ylabel("Number of Voids") + + plotTitle = setName + + plotName = plotNameBase + + xMin = 1.e00 + xMax = 0 + + for (iSample,sample) in enumerate(sampleList): + + sampleName = sample.fullName + lineTitle = sampleName + + filename = workDir+"/sample_"+sampleName+"/centers_"+dataPortion+"_"+\ + sampleName+".out" + if not os.access(filename, os.F_OK): + print "File not found: ", filename + continue + + data = np.loadtxt(filename, comments="#") + if data.ndim == 1: + print " Too few!" + continue + + zMin = sample.zRange[0] + zMax = sample.zRange[1] + + range = (zMin, zMax) + nbins = np.ceil((zMax-zMin)/0.1) + + thisMax = np.max(data[:,5]) + thisMin = np.min(data[:,5]) + if thisMax > xMax: xMax = thisMax + if thisMin < xMin: xMin = thisMin + + plt.hist(data[:,5], bins=nbins, + label=lineTitle, color=colorList[iSample], + histtype = "step", range=range, + linewidth=linewidth) + + #plt.legend(title = "Samples", loc = "upper right") + plt.title(plotTitle) + + plt.xlim(xMin, xMax) + #plt.xlim(xMin, xMax*1.4) # make room for legend + + plt.savefig(figDir+"/fig_"+plotName+".pdf", bbox_inches="tight") + plt.savefig(figDir+"/fig_"+plotName+".eps", bbox_inches="tight") + plt.savefig(figDir+"/fig_"+plotName+".png", bbox_inches="tight") + + if showPlot: + os.system("display %s" % figDir+"/fig_"+plotName+".png") + + diff --git a/zobov/jozov.c b/zobov/jozov.c index f5fb4e7..e5ebf7f 100644 --- a/zobov/jozov.c +++ b/zobov/jozov.c @@ -5,7 +5,7 @@ #include #define BIGFLT 1e30 /* Biggest possible floating-point number */ -#define NLINKS 100 /* Number of possible links with the same rho_sl */ +#define NLINKS 1000 /* Number of possible links with the same rho_sl */ #define FF fflush(stdout) typedef struct Particle { @@ -61,16 +61,19 @@ int main(int argc,char **argv) { double *sorter, e1,maxdenscontrast; int *iord; + int mockIndex; + e1 = exp(1.)-1.; - if (argc != 7) { + if (argc != 8) { printf("Wrong number of arguments.\n"); printf("arg1: adjacency file\n"); printf("arg2: volume file\n"); printf("arg3: output file containing particles in each zone\n"); printf("arg4: output file containing zones in each void\n"); printf("arg5: output text file\n"); - printf("arg6: Density threshold (0 for no threshold)\n\n"); + printf("arg6: Density threshold (0 for no threshold)\n"); + printf("arg7: Beginning index of mock galaxies\n\n"); exit(0); } adjfile = argv[1]; @@ -82,6 +85,11 @@ int main(int argc,char **argv) { printf("Bad density threshold.\n"); exit(0); } + if (sscanf(argv[7],"%f",&mockIndex) == 0) { + printf("Bad mock galaxy index.\n"); + exit(0); + } + printf("TOLERANCE: %f\n", voltol); if (voltol <= 0.) { printf("Proceeding without a density threshold.\n"); voltol = 1e30; @@ -140,7 +148,10 @@ int main(int argc,char **argv) { // fread(&np,1, sizeof(int),adj); for (i=0;i 1e30)) { + // PMS + if ((p[i].dens < 1e-30) || (p[i].dens > 1e30) && i < mockIndex) { + //if ((p[i].dens < 1e-30) || (p[i].dens > 1e30)) { + // END PMS printf("Whacked-out volume found, of particle %d: %f\n",i,p[i].dens); p[i].dens = 1.; } @@ -343,6 +357,9 @@ int main(int argc,char **argv) { fwrite(&np,1,4,zon); fwrite(&nzones,1,4,zon); for (h=0; h -1.) - if (fabs(vols[orig[p]]-volstemp)/volstemp > 1.5e-3) { -// printf("Inconsistent volumes for p. %d: (%10g,%10g)!\n", -// orig[p],vols[orig[p]],volstemp); -// exit(0); +// PMS + if (fabs(vols[orig[p]]-volstemp)/volstemp > 1.5e-3 && orig[p] < mockIndex) { + //if (fabs(vols[orig[p]]-volstemp)/volstemp > 1.5e-3) { +// END PMS + printf("Inconsistent volumes for p. %d: (%10g,%10g)!\n", + orig[p],vols[orig[p]],volstemp); +// TEST + //exit(0); } vols[orig[p]] = volstemp; } @@ -121,8 +142,71 @@ int main(int argc, char *argv[]) { } } printf("\n"); + + // PMS : remove mock galaxies and anything adjacent to a mock galaxy + printf("\nRemoving mock galaxies...\n"); + + // completely unlink mock particles + for (i = mockIndex; i < np; i++) { + vols[i] = 1.e-29; + adjs[i].nadj = 0; + } + + int numRemoved = 0; + + // unlink particles adjacent to mock galaxies + for (i = 0; i < mockIndex; i++) { + for (j = 0; j < adjs[i].nadj; j++) { + if (adjs[i].adj[j] > mockIndex) { +//printf("KILLING %d\n", i); + vols[i] = 1.e-29; + adjs[i].nadj = 0; + numRemoved++; + break; + } + } + } + + // update all other adjacencies + for (i = 0; i < mockIndex; i++) { + + int numAdjSaved = 0; + for (j = 0; j < adjs[i].nadj; j++) { + + //if ( vols[adjs[i].adj[j]] != -99) { + if ( adjs[adjs[i].adj[j]].nadj != 0) { + adjs[i].adj[numAdjSaved] = adjs[i].adj[j]; + numAdjSaved++; + } + + } + adjs[i].nadj = numAdjSaved; + + } + +/* + for (i = 0; i < mockIndex; i++) { +printf("ADJ: %d %d : ", i, adjs[i].nadj); + for (j = 0; j < adjs[i].nadj; j++) { +printf(" %d", adjs[i].adj[j]); + } +printf("\n"); + } +*/ + + + + printf("Removed %d mock galaxies and %d adjacent galaxies.\n", np-mockIndex, + numRemoved); + printf("There are %d galaxies remaining.\n", mockIndex-numRemoved); + + // END PMS + npnotdone = 0; avgnadj = 0.; avgvol = 0.; for (p=0;p 0) { + // PMS + for (i=0;i 0) { +// END PMS nout = 0; for (j=0;j i) nout++; fwrite(&nout,1,sizeof(int),adj); @@ -173,8 +266,12 @@ int main(int argc, char *argv[]) { printf("Unable to open %s\n",volfile); exit(0); } - fwrite(&np,1, sizeof(int),vol); - fwrite(vols,sizeof(float),np,vol); +// PMS + fwrite(&mockIndex,1, sizeof(int),vol); + fwrite(vols,sizeof(float),mockIndex,vol); + //fwrite(&np,1, sizeof(int),vol); + //fwrite(vols,sizeof(float),np,vol); +// END PMS fclose(vol); diff --git a/zobov/vozutil.c b/zobov/vozutil.c index 6b9e3b6..aba81e2 100644 --- a/zobov/vozutil.c +++ b/zobov/vozutil.c @@ -36,6 +36,8 @@ int delaunadj (coordT *points, int nvp, int nvpbuf, int nvpall, PARTADJ **adjs) int numdiv; PARTADJ adjst; + + int errorReported = 0; adjst.adj = (int *)malloc(MAXVERVER*sizeof(int)); if (adjst.adj == NULL) { @@ -100,9 +102,11 @@ int delaunadj (coordT *points, int nvp, int nvpbuf, int nvpall, PARTADJ **adjs) if (adjst.nadj >= 4) { qsort((void *)adjst.adj, adjst.nadj, sizeof(int), &compar); count = 1; + for (i=1; i= nvpbuf) { + if (adjst.adj[i] >= nvpbuf && !errorReported) { + errorReported = 1; printf("Guard point encountered. Increase border and/or nguard.\n"); printf("P:(%f,%f,%f), G: (%f,%f,%f)\n",points[3*ver],points[3*ver+1],points[3*ver+2], points[3*adjst.adj[i]],points[3*adjst.adj[i]+1],points[3*adjst.adj[i]+2]);