diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index db62ca2..c7ded52 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,8 +9,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - # os: [macos-latest, ubuntu-latest, windows-latest] - os: [macos-latest, ubuntu-latest] + os: [macos-latest, macos-14, ubuntu-latest] #, windows-latest] python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: @@ -24,6 +23,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip + pip install cython pip install tox tox-gh-actions - name: Test generator and physics output run: tox diff --git a/README.md b/README.md index 1db111d..d58136e 100755 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ If you experience any problems or bugs, either open a new issue or contact N4 C12 --> nu_light e+ e- C12\n", - "Helicity conserving upscattering.\n", - "N4 three-body decays.\n", - "Parent N4 proper decay length: 2.234E+08 cm.\n", - "\n", - "Predicted (22 +/- 0.832) events.\n", - "\n", - "nu(mu) proton_in_C12 --> N4 proton_in_C12 --> nu_light e+ e- proton_in_C12\n", - "Helicity conserving upscattering.\n", - "N4 three-body decays.\n", - "Parent N4 proper decay length: 2.218E+08 cm.\n", - "\n", - "Predicted (39.1 +/- 1.45) events.\n", - "\n", - "nu(mu) proton_in_H1 --> N4 proton_in_H1 --> nu_light e+ e- proton_in_H1\n", - "Helicity conserving upscattering.\n", - "N4 three-body decays.\n", - "Parent N4 proper decay length: 2.235E+08 cm.\n", - "\n", - "Predicted (13.1 +/- 0.49) events.\n", - "\n", - "---------------------------------------------------------\n", - "Generation successful\n", - "\n", - "Total events predicted:\n", - "(74.2 +/- 1.74) events.\n", - "\n", - "---------------------------------------------------------\n", - "Events in pandas dataframe saved to file successfully:\n", - "data/miniboone_fhc/3plus1/m4_0.14_mzprime_1.25_dirac/pandas_df.pckl\n", - "\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from DarkNews import GenLauncher\n", "\n", @@ -175,99 +106,9 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------------------------------------------------------\n", - " ______ _ _ _ \n", - " | _ \\ | | | \\ | | \n", - " | | | |__ _ _ __| | __ | \\| | _____ _____ \n", - " | | | / _ | ___| |/ / | . |/ _ \\ \\ /\\ / / __| \n", - " | |/ / (_| | | | < | |\\ | __/\\ V V /\\__ \\ \n", - " |___/ \\__,_|_| |_|\\_\\ \\_| \\_/\\___| \\_/\\_/ |___/ \n", - "\n", - "Initializing the three-portal model.\n", - "---------------------------------------------------------\n", - "Model:\n", - "\t2 dirac heavy neutrino(s).\n", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------------------------------------------------------\n", - "Experiment:\n", - "\tminiboone_fhc\n", - "\tfluxfile loaded: MiniBooNE_FHC.dat\n", - "\tPOT: 1.875e+21\n", - "\tnuclear targets: ['C12', 'H1']\n", - "\tfiducial mass: [701.1428571428571, 116.85714285714286] tonnes\n", - "\n", - "Directory tree for this run already exists. Overriding it.\n", - "---------------------------------------------------------\n", - "Generating Events using the neutrino-nucleus upscattering engine\n", - "\n", - "nu(mu) C12 --> N5 C12 --> N4 e+ e- C12\n", - "Helicity conserving upscattering.\n", - "N5 decays via on-shell Z'.\n", - "Parent N5 proper decay length: 1.104E-12 cm.\n", - "\n", - "Predicted (1.05e+08 +/- 4.16e+06) events.\n", - "\n", - "nu(mu) C12 --> N5 C12 --> N4 e+ e- C12\n", - "Helicity flipping upscattering.\n", - "N5 decays via on-shell Z'.\n", - "Parent N5 proper decay length: 1.103E-12 cm.\n", - "\n", - "Predicted (1.28e+04 +/- 502) events.\n", - "\n", - "nu(mu) proton_in_C12 --> N5 proton_in_C12 --> N4 e+ e- proton_in_C12\n", - "Helicity conserving upscattering.\n", - "N5 decays via on-shell Z'.\n", - "Parent N5 proper decay length: 1.105E-12 cm.\n", - "\n", - "Predicted (2.01e+07 +/- 7.49e+05) events.\n", - "\n", - "nu(mu) proton_in_C12 --> N5 proton_in_C12 --> N4 e+ e- proton_in_C12\n", - "Helicity flipping upscattering.\n", - "N5 decays via on-shell Z'.\n", - "Parent N5 proper decay length: 1.103E-12 cm.\n", - "\n", - "Predicted (1.22e+04 +/- 441) events.\n", - "\n", - "nu(mu) proton_in_H1 --> N5 proton_in_H1 --> N4 e+ e- proton_in_H1\n", - "Helicity conserving upscattering.\n", - "N5 decays via on-shell Z'.\n", - "Parent N5 proper decay length: 1.104E-12 cm.\n", - "\n", - "Predicted (6.66e+06 +/- 2.48e+05) events.\n", - "\n", - "nu(mu) proton_in_H1 --> N5 proton_in_H1 --> N4 e+ e- proton_in_H1\n", - "Helicity flipping upscattering.\n", - "N5 decays via on-shell Z'.\n", - "Parent N5 proper decay length: 1.104E-12 cm.\n", - "\n", - "Predicted (3.98e+03 +/- 150) events.\n", - "\n", - "---------------------------------------------------------\n", - "Generation successful\n", - "\n", - "Total events predicted:\n", - "(1.32e+08 +/- 4.24e+06) events.\n", - "\n", - "---------------------------------------------------------\n", - "Events in pandas dataframe saved to file successfully:\n", - "data/miniboone_fhc/3plus2/m5_0.14_m4_0.08_mzprime_0.03_dirac/pandas_df.pckl\n", - "\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "gen_object_2 = GenLauncher(Umu5=1e-3, UD5=1/np.sqrt(2), chi=0.0031, gD=2, mzprime=0.03, m4=0.080, m5=0.140, neval=1000, HNLtype=\"dirac\")\n", "df_2 = gen_object_2.run(loglevel=\"INFO\")" @@ -284,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -308,20 +149,11 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: HEPevt is not a lossless format -- you will lose the event weights. If you want to force-print weights, use the hepevt_legacy format instead. Otherwise, please set hep_unweight=True and set the desired number of unweighted events.\n", - "WARNING::WriterHEPEVT::WriterHEPEVT: HEPEVT format is outdated. Please use HepMC3 format instead.\n" - ] - } - ], + "outputs": [], "source": [ "cmd_string = \"dn_gen --mzprime=0.03 --m4=0.140 --alpha_epsilon2=2e-10 --Umu4=1e-4 --UD4=1 --alphaD=0.25 --neval=1000 --HNLtype=dirac --loglevel=WARNING --hepevt --numpy --pandas --parquet\"\n", "_=os.system(cmd_string)" @@ -381,17 +213,9 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('P_projectile', '0') ('P_projectile', '1') ('P_projectile', '2') ('P_projectile', '3') ('P_target', '0') ('P_target', '1') ('P_target', '2') ('P_target', '3') ('P_recoil', '0') ('P_recoil', '1') ('P_recoil', '2') ('P_recoil', '3') ('P_decay_N_parent', '0') ('P_decay_N_parent', '1') ('P_decay_N_parent', '2') ('P_decay_N_parent', '3') ('P_decay_ell_minus', '0') ('P_decay_ell_minus', '1') ('P_decay_ell_minus', '2') ('P_decay_ell_minus', '3') ('P_decay_ell_plus', '0') ('P_decay_ell_plus', '1') ('P_decay_ell_plus', '2') ('P_decay_ell_plus', '3') ('P_decay_N_daughter', '0') ('P_decay_N_daughter', '1') ('P_decay_N_daughter', '2') ('P_decay_N_daughter', '3') ('w_decay_rate_0', '') ('w_event_rate', '') ('target_pdgid', '') ('projectile_pdgid', '') ('w_flux_avg_xsec', '') ('target', '') ('scattering_regime', '') ('helicity', '') ('underlying_process', '') ('h_projectile', '') ('h_parent', '') ('pos_scatt', '0') ('pos_scatt', '1') ('pos_scatt', '2') ('pos_scatt', '3') ('pos_prod', '1') ('pos_prod', '2') ('pos_prod', '3') ('pos_decay', '0') ('pos_decay', '1') ('pos_decay', '2') ('pos_decay', '3')\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(*df_1)" ] @@ -410,21 +234,9 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Attributes of Detector class: \n", - " NAME FLUXFILE FLUX_NORM ERANGE NUCLEAR_TARGETS POTS FIDUCIAL_MASS_PER_TARGET NUMBER_OF_TARGETS FLUX_FUNCTIONS place_scatters\n", - "\n", - "Attributes of NuclearTarget class: \n", - " name Z N A atomic_Eb nuclear_Eb atomic_mass excess_mass nuclear_mass beta_decay_energy mass charge is_hadron is_nucleus is_proton is_neutron is_nucleon is_free_nucleon is_bound_nucleon pdgid tau3 F1_EM F2_EM F1_NC F2_NC F3_NC\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "keys = list(df_1.attrs['experiment'].__dict__.keys())\n", "print(f\"Attributes of Detector class: \\n\", *keys)\n", @@ -440,18 +252,9 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "701.14 tonnes of C12\n", - "116.86 tonnes of H1\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "fid_mass = df_1.attrs['experiment'].FIDUCIAL_MASS_PER_TARGET\n", "for target, fid_mass in zip(df_1.attrs['experiment'].NUCLEAR_TARGETS, df_1.attrs['experiment'].FIDUCIAL_MASS_PER_TARGET):\n", @@ -468,18 +271,9 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "dict_keys(['experiment', 'model', 'N5_ctau0', 'data_path'])\n", - "2.2059237706016695e-10\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print(df_3.attrs.keys())\n", "\n", @@ -488,23 +282,11 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Some low-level parameters:\n", - " model_file user_input name m4 m5 m6 HNLtype mzprime mhprime mu_tr_e4 mu_tr_e5 mu_tr_e6 mu_tr_mu4 mu_tr_mu5 mu_tr_mu6 mu_tr_tau4 mu_tr_tau5 mu_tr_tau6 mu_tr_44 ...\n", - "\n", - "Some high-level parameters:\n", - " fd fs fN_higgs c_nucleon_higgs cnucleonS ceS deS deP is_mass_mixed has_Zboson_coupling has_vector_coupling zprime has_scalar_coupling has_TMM ...\n" - ] - } - ], + "outputs": [], "source": [ "print(\"Some low-level parameters:\\n\", *list(df_1.attrs['model'].__dict__.keys())[:19],' ...')\n", "print(\"\\nSome high-level parameters:\\n\", *list(df_1.attrs['model'].__dict__.keys())[-14:],' ...')" @@ -522,20 +304,11 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/ipykernel_18598/2623147467.py:14: VisibleDeprecationWarning: importing ReaderHEPEVT from pyhepmc is deprecated, please import from pyhepmc.io\n", - " hepevt_file = hep.ReaderHEPEVT(str(path_to_data/'HEPevt.dat'))\n" - ] - } - ], + "outputs": [], "source": [ "path_to_data = Path('./data/miniboone_fhc/3plus1/m4_0.14_mzprime_0.03_dirac/')\n", "\n", @@ -556,30 +329,9 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 0, '$E_\\\\nu/$GeV')" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# and now histogram neutrino energy as an example\n", "fig, ax = dn.plot_tools.std_fig(figsize=(10,4))\n", @@ -597,30 +349,9 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 0, '$\\\\Delta \\\\theta_{ee}$ (degrees)')" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# Let's compute something more interesting: opening angle of e+e-\n", "\n", @@ -666,28 +397,9 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "dune_nd_fhc\n", - "dune_nd_rhc\n", - "microboone\n", - "minerva_le_fhc\n", - "minerva_me_fhc\n", - "minerva_me_rhc\n", - "miniboone_fhc\n", - "minos_le_fhc\n", - "nd280_fhc\n", - "nova_le_fhc\n", - "nutev_fhc\n", - "fasernu\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "list_of_experiments = [\n", "'dune_nd_fhc',\n", @@ -725,28 +437,9 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "dune_nd_fhc: 3.9e+03\n", - "dune_nd_rhc: 3e+02\n", - "microboone: 8.1\n", - "minerva_le_fhc: 7.4\n", - "minerva_me_fhc: 59\n", - "minerva_me_rhc: 64\n", - "miniboone_fhc: 74\n", - "minos_le_fhc: 29\n", - "nd280_fhc: 7\n", - "nova_le_fhc: 3.6e+02\n", - "nutev_fhc: 5.1\n", - "fasernu: 0.01\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "for exp,rate in zip(list_of_experiments,rates):\n", " print(f'{exp}: {rate:.2g}')" @@ -764,131 +457,9 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------------------------------------------------------\n", - " ______ _ _ _ \n", - " | _ \\ | | | \\ | | \n", - " | | | |__ _ _ __| | __ | \\| | _____ _____ \n", - " | | | / _ | ___| |/ / | . |/ _ \\ \\ /\\ / / __| \n", - " | |/ / (_| | | | < | |\\ | __/\\ V V /\\__ \\ \n", - " |___/ \\__,_|_| |_|\\_\\ \\_| \\_/\\___| \\_/\\_/ |___/ \n", - "\n", - "Initializing the three-portal model.\n", - "---------------------------------------------------------\n", - "Model:\n", - "\t1 dirac heavy neutrino(s).\n", - "\n", - "Warning: nuclear density for Li3 not tabulated in Nuclear Data Table. Using symmetrized Fermi form factor instead.\n", - "---------------------------------------------------------\n", - "Experiment:\n", - "\tMy Experiment\n", - "\tfluxfile loaded: ./fluxfile_uniform_0.1_200_GeV.dat\n", - "\tPOT: 1e+20\n", - "\tnuclear targets: ['H1', 'He3', 'Li3']\n", - "\tfiducial mass: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333] tonnes\n", - "\n", - "---------------------------------------------------------\n", - "Generating Events using the neutrino-nucleus upscattering engine\n", - "\n", - "nu(mu) proton_in_H1 --> N4 proton_in_H1 --> nu_light e+ e- proton_in_H1\n", - "Helicity conserving upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.588E+08 cm.\n", - "\n", - "Predicted (1.11e+08 +/- 1.36e+06) events.\n", - "\n", - "nu(mu) proton_in_H1 --> N4 proton_in_H1 --> nu_light e+ e- proton_in_H1\n", - "Helicity flipping upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.588E+08 cm.\n", - "\n", - "Predicted (4.93e+04 +/- 603) events.\n", - "\n", - "nu(mu) He3 --> N4 He3 --> nu_light e+ e- He3\n", - "Helicity conserving upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.589E+08 cm.\n", - "\n", - "Predicted (2.07e+07 +/- 2.47e+05) events.\n", - "\n", - "nu(mu) He3 --> N4 He3 --> nu_light e+ e- He3\n", - "Helicity flipping upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.579E+08 cm.\n", - "\n", - "Predicted (5.45e+03 +/- 65.3) events.\n", - "\n", - "nu(mu) proton_in_He3 --> N4 proton_in_He3 --> nu_light e+ e- proton_in_He3\n", - "Helicity conserving upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.588E+08 cm.\n", - "\n", - "Predicted (7.41e+07 +/- 9.09e+05) events.\n", - "\n", - "nu(mu) proton_in_He3 --> N4 proton_in_He3 --> nu_light e+ e- proton_in_He3\n", - "Helicity flipping upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.581E+08 cm.\n", - "\n", - "Predicted (3.33e+04 +/- 403) events.\n", - "\n", - "nu(mu) Li3 --> N4 Li3 --> nu_light e+ e- Li3\n", - "Helicity conserving upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.587E+08 cm.\n", - "\n", - "Predicted (3.37e+07 +/- 4.22e+05) events.\n", - "\n", - "nu(mu) Li3 --> N4 Li3 --> nu_light e+ e- Li3\n", - "Helicity flipping upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.574E+08 cm.\n", - "\n", - "Predicted (6.87e+03 +/- 82.1) events.\n", - "\n", - "nu(mu) proton_in_Li3 --> N4 proton_in_Li3 --> nu_light e+ e- proton_in_Li3\n", - "Helicity conserving upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.580E+08 cm.\n", - "\n", - "Predicted (1.12e+08 +/- 1.52e+06) events.\n", - "\n", - "nu(mu) proton_in_Li3 --> N4 proton_in_Li3 --> nu_light e+ e- proton_in_Li3\n", - "Helicity flipping upscattering.\n", - "N4 three-body decays.\n", - "Experimental geometry for My Experiment not implemented, assuming scattering at (0,0,0,0)\n", - "Parent N4 proper decay length: 1.587E+08 cm.\n", - "\n", - "Predicted (4.91e+04 +/- 599) events.\n", - "\n", - "---------------------------------------------------------\n", - "Generation successful\n", - "\n", - "Total events predicted:\n", - "(3.52e+08 +/- 2.29e+06) events.\n", - "\n", - "---------------------------------------------------------\n", - "Events in pandas dataframe saved to file successfully:\n", - "data/my_experiment/3plus1/m4_0.15_mzprime_1.25_dirac/pandas_df.pckl\n", - "\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "cmd_string = \"dn_gen --experiment=./template_custom_experiment.txt --loglevel=INFO\"\n", "_=os.system(cmd_string)" @@ -896,7 +467,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -921,7 +492,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -931,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -941,7 +512,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -951,7 +522,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/examples/Example_1_total_xsecs.ipynb b/examples/Example_1_total_xsecs.ipynb index d554af9..752c454 100644 --- a/examples/Example_1_total_xsecs.ipynb +++ b/examples/Example_1_total_xsecs.ipynb @@ -654,7 +654,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.11.0" }, "vscode": { "interpreter": { diff --git a/examples/Example_2_TMM.ipynb b/examples/Example_2_TMM.ipynb index b8833ba..3f843ac 100644 --- a/examples/Example_2_TMM.ipynb +++ b/examples/Example_2_TMM.ipynb @@ -345,7 +345,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.11.0" }, "orig_nbformat": 4, "vscode": { diff --git a/examples/Example_3_geometries.ipynb b/examples/Example_3_geometries.ipynb index 5d396c0..ff09a99 100644 --- a/examples/Example_3_geometries.ipynb +++ b/examples/Example_3_geometries.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "compact-danger", "metadata": {}, "outputs": [], @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "professional-latitude", "metadata": {}, "outputs": [], @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "fc5e1894", "metadata": {}, "outputs": [], @@ -164,6 +164,14 @@ " ax.set_xlabel(xlabel, fontsize=12)\n", " ax.set_ylabel(ylabel, fontsize=12)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a419d677", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -182,7 +190,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.11.0" }, "vscode": { "interpreter": { diff --git a/examples/Example_4_fastbnb.ipynb b/examples/Example_4_fastbnb.ipynb index 41b0a62..5cdddda 100644 --- a/examples/Example_4_fastbnb.ipynb +++ b/examples/Example_4_fastbnb.ipynb @@ -15,19 +15,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "compact-danger", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" @@ -35,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "professional-latitude", "metadata": {}, "outputs": [], @@ -44,7 +35,10 @@ "import numpy as np\n", "from scipy import interpolate\n", "\n", - "from importlib import resources\n", + "try:\n", + " from importlib.resources import files\n", + "except ImportError:\n", + " from importlib_resources import files\n", "\n", "import DarkNews as dn\n", "from DarkNews import GenLauncher\n", @@ -54,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "a54bb01c", "metadata": {}, "outputs": [], @@ -74,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "5becc5d3", "metadata": {}, "outputs": [], @@ -84,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "fc5e1894", "metadata": {}, "outputs": [], @@ -124,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "140ec642", "metadata": {}, "outputs": [], @@ -135,7 +129,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "c5af01a6", "metadata": {}, "outputs": [], @@ -147,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "6481ea04", "metadata": {}, "outputs": [], @@ -183,7 +177,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "084f25cc", "metadata": {}, "outputs": [], @@ -198,7 +192,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "2f32f0f9", "metadata": {}, "outputs": [], @@ -210,29 +204,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "6aaa639e", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/homebrew/Caskroom/miniforge/base/envs/darknews/lib/python3.11/site-packages/pandas/core/arraylike.py:399: RuntimeWarning: invalid value encountered in sqrt\n", - " result = getattr(ufunc, method)(*inputs, **kwargs)\n" - ] - }, - { - "data": { - "image/png": "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RQQCAQQCAfh8PsiyDEVRLFftsHPh4pUURTEClCiKRhteM1wnqj9WawdWgwEwR0XjABvE5OSkqcpRv5HqJiYm8gKdXsVUiB0li1AohEAgYKo203+5r9TX1wdRFAumrcbv96O3t9codRWysupxZVCRJAlerxeRSKTiNqVKroe+H7B83iRJMvKml3Ss1KoEmEqlcPz48byJuvVV5JvhOjlhenraWIZI197eji996Uu4ePEiFhYWTGnbt2/HwYMH8dZbb+Hu3bumNH1x5fPnz+PevXumtK6uLuzfv9/yO7579250d3fjnXfeseld2WO1KvSy2dKXtMk04zAISZK0eDxuPHa73Vo6ndY0bbmbud79PBqNGtvi8XjJXc8rEY1GjTxls1ktHA6b8qdLp9OmfBRLWymbzRrvSX/u8PCw8TgcDpuen0wm87ri5543nSRJmiAIlq+ZTCaNc1tIuddD365vWzmkwOfzFX09O2DF0IKV12xlvur9OtWjGzduaF/96leNoSX631e/+lVN0zTtyJEjeWmPPfaYpmmatmfPnrw0/Xps3749L+3kyZOapml52wFoTz75pHEf3Lp1q3blyhVnTsgKdg+DYAnQTq84P1VQIaqq5v2azu0cIIqiaRVzvct4LavOvF6vaZsgCMav+Gg0ikAggP7+fkxNTZlKQ8XSculDLfQOFJIkGZ00gOVB09FoFIlEwlj01+12IxgMGscHrJc3GhkZKViq0EtbhfIFlH899O2yLCMcDhslQf191nJwtyzLxuuNjo6iv78fkiRBEAT09fUhFApBEASk0+mGuk71qKurC3//93+Pq1evmra3ty8Pf4pGo5YlQAB49dVXLUuAAPD6669blgABWLa97969G+3t7Ugmk9i5cyf27dtX+ZuqY22apmlOZ6Le6AvizszMoKOjo/jOn8413VRoes86QRAwMDBgutlSaVYGLzukUikMDQ0ZNyy9owg1j4sXLxrt7keOHHE6O3Xn9ddfxze+8Y3S7s0lYAmwWuu3Lgcip167RnIHnuu/usk5iqJgaGgI586dA7BcgkwkEgyATWZhYcGynY+WrVtn79B1BsBqtbU1zewsOrfbDbfbverMHWRNlmXbx+/19vbC5/NhcnISqqoiHA6vOmyEqNn87u/+rq3HYwCkgjweT9ExXWStFoPXV/a0rGTMHlGju3z5sq3H41Ro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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -278,21 +253,10 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "62984c78", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -335,21 +299,10 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "6f6799c2", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -393,21 +346,10 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "be0bd270", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -453,7 +395,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "7f17679a", "metadata": {}, "outputs": [], @@ -494,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "6cfd3dd1", "metadata": {}, "outputs": [], @@ -506,7 +448,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "393d0b55", "metadata": {}, "outputs": [], @@ -537,31 +479,10 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "15aa9e7d", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Events (a.u.)')" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -605,31 +526,10 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "ed2301f0", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Events (a.u.)')" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -673,31 +573,10 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "id": "3faf4bd4", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Events (a.u.)')" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "VAR = emax_r/etot_r\n", @@ -730,39 +609,10 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "9f68d3d9", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/ipykernel_50070/2401580745.py:2: RuntimeWarning: invalid value encountered in divide\n", - " VAR = (np.sqrt(pep[:,0]**2 - dn.const.m_e**2) - np.sqrt(pem[:,0]**2 - dn.const.m_e**2))/(np.sqrt(pep[:,0]**2 - dn.const.m_e**2) + np.sqrt(pem[:,0]**2 - dn.const.m_e**2))\n" - ] - }, - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Events (a.u.)')" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "VAR = (np.sqrt(pep[:,0]**2 - dn.const.m_e**2) - np.sqrt(pem[:,0]**2 - dn.const.m_e**2))/(np.sqrt(pep[:,0]**2 - dn.const.m_e**2) + np.sqrt(pem[:,0]**2 - dn.const.m_e**2))\n", @@ -806,31 +656,10 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "971ba3fa", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Events (a.u.)')" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -875,31 +704,10 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "d80b873a", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Events (a.u.)')" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -946,7 +754,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "a97bd7f9", "metadata": {}, "outputs": [], @@ -969,31 +777,10 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "id": "729c0f36", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Events (a.u.)')" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = pt.std_fig()\n", "\n", @@ -1024,6 +811,14 @@ "ax.set_xlabel(r'$m_{e^+e^-}$/GeV')\n", "ax.set_ylabel(r'Events (a.u.)')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "601cfbe6", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/pyproject.toml b/pyproject.toml index 3536a97..12b49ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = [ "setuptools>=42", "wheel", "numpy", - "cython>=3.0a6" + "cython>=3.0a6", ] build-backend = "setuptools.build_meta" diff --git a/setup.cfg b/setup.cfg index 40d8008..4ce7a49 100644 --- a/setup.cfg +++ b/setup.cfg @@ -34,7 +34,7 @@ package_dir = packages = find: -python_requires = >=3.7 +python_requires = >=3.8 install_requires = dill @@ -48,6 +48,7 @@ install_requires = pyhepmc>=2.7.1 setup_requires = + cython numpy [options.packages.find] @@ -59,6 +60,7 @@ where = src include/*/*.txt include/*/*.py include/assets/* + *.pyx DarkNews = py.typed diff --git a/setup.py b/setup.py index 9f249a0..71f082a 100644 --- a/setup.py +++ b/setup.py @@ -10,6 +10,7 @@ except ImportError: cythonize = None + # https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html#distributing-cython-modules def no_cythonize(extensions, **_ignore): for extension in extensions: @@ -28,21 +29,19 @@ def no_cythonize(extensions, **_ignore): extensions = [ - Extension("DarkNews.Cfourvec", ["src/DarkNews/Cfourvec.pyx"]), + Extension("DarkNews.Cfourvec", ["src/DarkNews/Cfourvec.pyx"], include_dirs=[np.get_include()]), ] -CYTHONIZE = bool(int(os.getenv("CYTHONIZE", 0))) and cythonize is not None - +CYTHONIZE = cythonize is not None if CYTHONIZE: compiler_directives = {"language_level": 3, "embedsignature": True} extensions = cythonize(extensions, compiler_directives=compiler_directives) else: extensions = no_cythonize(extensions) - setup_args = dict( - # ext_modules = cythonize(["src/DarkNews/Cfourvec.pyx"]), - ext_modules=extensions, - include_dirs=np.get_include(), + ext_modules=cythonize(["src/DarkNews/Cfourvec.pyx"]), + # ext_modules=extensions, + include_dirs=[np.get_include()], ) diff --git a/src/DarkNews/Cfourvec.c b/src/DarkNews/Cfourvec.c index 6ded521..dff1618 100644 --- a/src/DarkNews/Cfourvec.c +++ b/src/DarkNews/Cfourvec.c @@ -1,4 +1,26 @@ -/* Generated by Cython 3.0.8 */ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [ + "/private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/_core/include/numpy/arrayobject.h", + "/private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/_core/include/numpy/arrayscalars.h", + "/private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/_core/include/numpy/ndarrayobject.h", + "/private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/_core/include/numpy/ndarraytypes.h", + "/private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/_core/include/numpy/ufuncobject.h" + ], + "include_dirs": [ + "/private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/_core/include" + ], + "name": "DarkNews.Cfourvec", + "sources": [ + "src/DarkNews/Cfourvec.pyx" + ] + }, + "module_name": "DarkNews.Cfourvec" +} +END: Cython Metadata */ #ifndef PY_SSIZE_T_CLEAN #define PY_SSIZE_T_CLEAN @@ -24,10 +46,10 @@ #else #define __PYX_EXTRA_ABI_MODULE_NAME "" #endif -#define CYTHON_ABI "3_0_8" __PYX_EXTRA_ABI_MODULE_NAME +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." -#define CYTHON_HEX_VERSION 0x030008F0 +#define CYTHON_HEX_VERSION 0x03000BF0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -119,6 +141,8 @@ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(PYPY_VERSION) #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -180,6 +204,8 @@ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(CYTHON_LIMITED_API) #ifdef Py_LIMITED_API #undef __PYX_LIMITED_VERSION_HEX @@ -241,6 +267,8 @@ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -250,11 +278,17 @@ #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -262,8 +296,6 @@ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -275,11 +307,22 @@ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -287,6 +330,12 @@ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 @@ -377,6 +426,9 @@ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) @@ -720,8 +772,13 @@ typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames); #else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif #endif #if CYTHON_METH_FASTCALL #define __Pyx_METH_FASTCALL METH_FASTCALL @@ -1073,7 +1130,7 @@ static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) #endif -#if PY_VERSION_HEX >= 0x030d00A1 +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) #else static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { @@ -1160,7 +1217,7 @@ static CYTHON_INLINE float __PYX_NAN() { #endif #define __PYX_MARK_ERR_POS(f_index, lineno) \ - { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } #define __PYX_ERR(f_index, lineno, Ln_error) \ { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } @@ -1275,24 +1332,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) #define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -#if CYTHON_COMPILING_IN_LIMITED_API -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const wchar_t *u) -{ - const wchar_t *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#else -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#endif #define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) #define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) @@ -1483,7 +1523,7 @@ static const char *__pyx_filename; /* #### Code section: filename_table ### */ static const char *__pyx_f[] = { - "Cfourvec.pyx", + "src/DarkNews/Cfourvec.pyx", "__init__.cython-30.pxd", "type.pxd", }; @@ -1537,7 +1577,7 @@ typedef struct { /* #### Code section: numeric_typedefs ### */ -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":730 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":769 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< @@ -1546,7 +1586,7 @@ typedef struct { */ typedef npy_int8 __pyx_t_5numpy_int8_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":731 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":770 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< @@ -1555,7 +1595,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t; */ typedef npy_int16 __pyx_t_5numpy_int16_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":732 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":771 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< @@ -1564,7 +1604,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t; */ typedef npy_int32 __pyx_t_5numpy_int32_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":733 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":772 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< @@ -1573,7 +1613,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t; */ typedef npy_int64 __pyx_t_5numpy_int64_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":737 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":776 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< @@ -1582,7 +1622,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t; */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":738 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":777 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< @@ -1591,7 +1631,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t; */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":739 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":778 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< @@ -1600,7 +1640,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t; */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":740 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":779 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< @@ -1609,7 +1649,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t; */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":744 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":783 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< @@ -1618,7 +1658,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t; */ typedef npy_float32 __pyx_t_5numpy_float32_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":745 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":784 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< @@ -1627,43 +1667,25 @@ typedef npy_float32 __pyx_t_5numpy_float32_t; */ typedef npy_float64 __pyx_t_5numpy_float64_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":754 - * # 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 longlong_t +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":791 + * ctypedef double complex complex128_t * - */ -typedef npy_long __pyx_t_5numpy_int_t; - -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":755 - * # numpy.int corresponds to 'l' and numpy.long to 'q' - * ctypedef npy_long int_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< - * - * ctypedef npy_ulong uint_t - */ -typedef npy_longlong __pyx_t_5numpy_longlong_t; - -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":757 - * ctypedef npy_longlong longlong_t - * - * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulonglong_t * */ -typedef npy_ulong __pyx_t_5numpy_uint_t; +typedef npy_longlong __pyx_t_5numpy_longlong_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":758 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":792 * - * ctypedef npy_ulong uint_t + * ctypedef npy_longlong longlong_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< * * ctypedef npy_intp intp_t */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":760 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":794 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< @@ -1672,7 +1694,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; */ typedef npy_intp __pyx_t_5numpy_intp_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":761 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":795 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< @@ -1681,7 +1703,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t; */ typedef npy_uintp __pyx_t_5numpy_uintp_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":763 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":797 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< @@ -1690,7 +1712,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t; */ typedef npy_double __pyx_t_5numpy_float_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":764 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":798 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< @@ -1699,14 +1721,23 @@ typedef npy_double __pyx_t_5numpy_float_t; */ typedef npy_double __pyx_t_5numpy_double_t; -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":765 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":799 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< * - * ctypedef npy_cfloat cfloat_t + * ctypedef float complex cfloat_t */ typedef npy_longdouble __pyx_t_5numpy_longdouble_t; + +/* "DarkNews/Cfourvec.pyx":12 + * np.import_array() + * DTYPE = np.float64 + * ctypedef np.float64_t DTYPE_t # <<<<<<<<<<<<<< + * + * ####################################### + */ +typedef __pyx_t_5numpy_float64_t __pyx_t_8DarkNews_8Cfourvec_DTYPE_t; /* #### Code section: complex_type_declarations ### */ /* Declarations.proto */ #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) @@ -1732,45 +1763,39 @@ static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(floa #endif static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< long double > __pyx_t_long_double_complex; + #else + typedef long double _Complex __pyx_t_long_double_complex; + #endif +#else + typedef struct { long double real, imag; } __pyx_t_long_double_complex; +#endif +static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double, long double); + /* #### Code section: type_declarations ### */ /*--- Type declarations ---*/ -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":767 - * 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; - -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":768 - * - * ctypedef npy_cfloat cfloat_t - * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< - * ctypedef npy_clongdouble clongdouble_t +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1095 * - */ -typedef npy_cdouble __pyx_t_5numpy_cdouble_t; - -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":769 - * ctypedef npy_cfloat cfloat_t - * ctypedef npy_cdouble cdouble_t - * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< + * # Iterator API added in v1.6 + * ctypedef int (*NpyIter_IterNextFunc)(NpyIter* it) noexcept nogil # <<<<<<<<<<<<<< + * ctypedef void (*NpyIter_GetMultiIndexFunc)(NpyIter* it, npy_intp* outcoords) noexcept nogil * - * ctypedef npy_cdouble complex_t */ -typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; +typedef int (*__pyx_t_5numpy_NpyIter_IterNextFunc)(NpyIter *); -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":771 - * ctypedef npy_clongdouble clongdouble_t +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1096 + * # Iterator API added in v1.6 + * ctypedef int (*NpyIter_IterNextFunc)(NpyIter* it) noexcept nogil + * ctypedef void (*NpyIter_GetMultiIndexFunc)(NpyIter* it, npy_intp* outcoords) noexcept nogil # <<<<<<<<<<<<<< * - * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew1(a): + * cdef extern from "numpy/arrayobject.h": */ -typedef npy_cdouble __pyx_t_5numpy_complex_t; +typedef void (*__pyx_t_5numpy_NpyIter_GetMultiIndexFunc)(NpyIter *, npy_intp *); /* #### Code section: utility_code_proto ### */ /* --- Runtime support code (head) --- */ @@ -2075,6 +2100,39 @@ static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_ve static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); #endif +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* BufferGetAndValidate.proto */ +#define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\ + ((obj == Py_None || obj == NULL) ?\ + (__Pyx_ZeroBuffer(buf), 0) :\ + __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)) +static int __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj, + __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static void __Pyx_ZeroBuffer(Py_buffer* buf); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); +static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + +#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0) +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) +#define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2) /* PyFunctionFastCall.proto */ #if CYTHON_FAST_PYCALL #if !CYTHON_VECTORCALL @@ -2119,56 +2177,23 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject #define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); -/* ExtTypeTest.proto */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); - -/* IsLittleEndian.proto */ -static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); - -/* BufferFormatCheck.proto */ -static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); -static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, - __Pyx_BufFmt_StackElem* stack, - __Pyx_TypeInfo* type); - -/* BufferGetAndValidate.proto */ -#define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\ - ((obj == Py_None || obj == NULL) ?\ - (__Pyx_ZeroBuffer(buf), 0) :\ - __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)) -static int __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj, - __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); -static void __Pyx_ZeroBuffer(Py_buffer* buf); -static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); -static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - -#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0) -/* ArgTypeTest.proto */ -#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ - ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ - __Pyx__ArgTypeTest(obj, type, name, exact)) -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); - -#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) -#define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2) /* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_8 -#define __PYX_HAVE_RT_ImportType_proto_3_0_8 +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_11 +#define __PYX_HAVE_RT_ImportType_proto_3_0_11 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L #include #endif #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L -#define __PYX_GET_STRUCT_ALIGNMENT_3_0_8(s) alignof(s) +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) alignof(s) #else -#define __PYX_GET_STRUCT_ALIGNMENT_3_0_8(s) sizeof(void*) +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) sizeof(void*) #endif -enum __Pyx_ImportType_CheckSize_3_0_8 { - __Pyx_ImportType_CheckSize_Error_3_0_8 = 0, - __Pyx_ImportType_CheckSize_Warn_3_0_8 = 1, - __Pyx_ImportType_CheckSize_Ignore_3_0_8 = 2 +enum __Pyx_ImportType_CheckSize_3_0_11 { + __Pyx_ImportType_CheckSize_Error_3_0_11 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_11 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_11 = 2 }; -static PyTypeObject *__Pyx_ImportType_3_0_8(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_8 check_size); +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size); #endif /* Import.proto */ @@ -2482,6 +2507,44 @@ typedef struct { #endif #endif +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_long__double(a, b) ((a)==(b)) + #define __Pyx_c_sum_long__double(a, b) ((a)+(b)) + #define __Pyx_c_diff_long__double(a, b) ((a)-(b)) + #define __Pyx_c_prod_long__double(a, b) ((a)*(b)) + #define __Pyx_c_quot_long__double(a, b) ((a)/(b)) + #define __Pyx_c_neg_long__double(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_long__double(z) ((z)==(long double)0) + #define __Pyx_c_conj_long__double(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_long__double(z) (::std::abs(z)) + #define __Pyx_c_pow_long__double(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_long__double(z) ((z)==0) + #define __Pyx_c_conj_long__double(z) (conjl(z)) + #if 1 + #define __Pyx_c_abs_long__double(z) (cabsl(z)) + #define __Pyx_c_pow_long__double(a, b) (cpowl(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex); + #if 1 + static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + #endif +#endif + /* CIntFromPy.proto */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); @@ -2532,6 +2595,18 @@ static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /* #### Code section: module_declarations ### */ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray_subarray(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_dimensions(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self); /* proto*/ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self); /* proto*/ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self); /* proto*/ @@ -2557,6 +2632,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p /* Module declarations from "numpy" */ /* Module declarations from "numpy" */ +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void); /*proto*/ /* Module declarations from "libc.math" */ @@ -2566,7 +2642,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p static double __pyx_f_8DarkNews_8Cfourvec_UniformRand(void); /*proto*/ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double, double); /*proto*/ /* #### Code section: typeinfo ### */ -static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t), { 0 }, 0, 'R', 0, 0 }; /* #### Code section: before_global_var ### */ #define __Pyx_MODULE_NAME "DarkNews.Cfourvec" extern int __pyx_module_is_main_DarkNews__Cfourvec; @@ -2608,7 +2684,9 @@ static const char __pyx_k_sign[] = "sign"; static const char __pyx_k_size[] = "size"; static const char __pyx_k_spec[] = "__spec__"; static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_DTYPE[] = "DTYPE"; static const char __pyx_k_dotXY[] = "dotXY"; +static const char __pyx_k_dtype[] = "dtype"; static const char __pyx_k_empty[] = "empty"; static const char __pyx_k_numpy[] = "numpy"; static const char __pyx_k_range[] = "range"; @@ -2617,6 +2695,7 @@ static const char __pyx_k_theta[] = "theta"; static const char __pyx_k_ctheta[] = "ctheta"; static const char __pyx_k_import[] = "__import__"; static const char __pyx_k_stheta[] = "stheta"; +static const char __pyx_k_float64[] = "float64"; static const char __pyx_k_inv_mass[] = "inv_mass"; static const char __pyx_k_dotXY_vec[] = "dotXY_vec"; static const char __pyx_k_getXYnorm[] = "getXYnorm"; @@ -2624,7 +2703,6 @@ static const char __pyx_k_rotationx[] = "rotationx"; static const char __pyx_k_rotationy[] = "rotationy"; static const char __pyx_k_rotationz[] = "rotationz"; static const char __pyx_k_ImportError[] = "ImportError"; -static const char __pyx_k_Cfourvec_pyx[] = "Cfourvec.pyx"; static const char __pyx_k_get_cosTheta[] = "get_cosTheta"; static const char __pyx_k_get_vec_norm[] = "get_vec_norm"; static const char __pyx_k_initializing[] = "_initializing"; @@ -2648,8 +2726,9 @@ static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; static const char __pyx_k_get_3direction_3vec[] = "get_3direction_3vec"; static const char __pyx_k_get_cos_opening_angle[] = "get_cos_opening_angle"; -static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import"; -static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import"; +static const char __pyx_k_src_DarkNews_Cfourvec_pyx[] = "src/DarkNews/Cfourvec.pyx"; +static const char __pyx_k_numpy__core_multiarray_failed_to[] = "numpy._core.multiarray failed to import"; +static const char __pyx_k_numpy__core_umath_failed_to_impo[] = "numpy._core.umath failed to import"; /* #### Code section: decls ### */ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_random_generator(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_size, double __pyx_v_min, double __pyx_v_max); /* proto */ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_2random_normal(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_sigma); /* proto */ @@ -2749,7 +2828,7 @@ typedef struct { #endif #if CYTHON_USE_MODULE_STATE #endif - PyObject *__pyx_kp_s_Cfourvec_pyx; + PyObject *__pyx_n_s_DTYPE; PyObject *__pyx_n_s_DarkNews_Cfourvec; PyObject *__pyx_n_s_E; PyObject *__pyx_n_s_ImportError; @@ -2769,7 +2848,9 @@ typedef struct { PyObject *__pyx_n_s_dot4; PyObject *__pyx_n_s_dotXY; PyObject *__pyx_n_s_dotXY_vec; + PyObject *__pyx_n_s_dtype; PyObject *__pyx_n_s_empty; + PyObject *__pyx_n_s_float64; PyObject *__pyx_n_s_getXYnorm; PyObject *__pyx_n_s_getXYnorm_3vec; PyObject *__pyx_n_s_get_3direction; @@ -2794,8 +2875,8 @@ typedef struct { PyObject *__pyx_n_s_name; PyObject *__pyx_n_s_np; PyObject *__pyx_n_s_numpy; - PyObject *__pyx_kp_u_numpy_core_multiarray_failed_to; - PyObject *__pyx_kp_u_numpy_core_umath_failed_to_impor; + PyObject *__pyx_kp_u_numpy__core_multiarray_failed_to; + PyObject *__pyx_kp_u_numpy__core_umath_failed_to_impo; PyObject *__pyx_n_s_p; PyObject *__pyx_n_s_phi; PyObject *__pyx_n_s_put_in_z_axis; @@ -2816,6 +2897,7 @@ typedef struct { PyObject *__pyx_n_s_sign; PyObject *__pyx_n_s_size; PyObject *__pyx_n_s_spec; + PyObject *__pyx_kp_s_src_DarkNews_Cfourvec_pyx; PyObject *__pyx_n_s_stheta; PyObject *__pyx_n_s_test; PyObject *__pyx_n_s_theta; @@ -2930,7 +3012,7 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible); Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character); Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc); - Py_CLEAR(clear_module_state->__pyx_kp_s_Cfourvec_pyx); + Py_CLEAR(clear_module_state->__pyx_n_s_DTYPE); Py_CLEAR(clear_module_state->__pyx_n_s_DarkNews_Cfourvec); Py_CLEAR(clear_module_state->__pyx_n_s_E); Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); @@ -2950,7 +3032,9 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_dot4); Py_CLEAR(clear_module_state->__pyx_n_s_dotXY); Py_CLEAR(clear_module_state->__pyx_n_s_dotXY_vec); + Py_CLEAR(clear_module_state->__pyx_n_s_dtype); Py_CLEAR(clear_module_state->__pyx_n_s_empty); + Py_CLEAR(clear_module_state->__pyx_n_s_float64); Py_CLEAR(clear_module_state->__pyx_n_s_getXYnorm); Py_CLEAR(clear_module_state->__pyx_n_s_getXYnorm_3vec); Py_CLEAR(clear_module_state->__pyx_n_s_get_3direction); @@ -2975,8 +3059,8 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_name); Py_CLEAR(clear_module_state->__pyx_n_s_np); Py_CLEAR(clear_module_state->__pyx_n_s_numpy); - Py_CLEAR(clear_module_state->__pyx_kp_u_numpy_core_multiarray_failed_to); - Py_CLEAR(clear_module_state->__pyx_kp_u_numpy_core_umath_failed_to_impor); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy__core_multiarray_failed_to); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); Py_CLEAR(clear_module_state->__pyx_n_s_p); Py_CLEAR(clear_module_state->__pyx_n_s_phi); Py_CLEAR(clear_module_state->__pyx_n_s_put_in_z_axis); @@ -2997,6 +3081,7 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_sign); Py_CLEAR(clear_module_state->__pyx_n_s_size); Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_kp_s_src_DarkNews_Cfourvec_pyx); Py_CLEAR(clear_module_state->__pyx_n_s_stheta); Py_CLEAR(clear_module_state->__pyx_n_s_test); Py_CLEAR(clear_module_state->__pyx_n_s_theta); @@ -3089,7 +3174,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible); Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character); Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc); - Py_VISIT(traverse_module_state->__pyx_kp_s_Cfourvec_pyx); + Py_VISIT(traverse_module_state->__pyx_n_s_DTYPE); Py_VISIT(traverse_module_state->__pyx_n_s_DarkNews_Cfourvec); Py_VISIT(traverse_module_state->__pyx_n_s_E); Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); @@ -3109,7 +3194,9 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_dot4); Py_VISIT(traverse_module_state->__pyx_n_s_dotXY); Py_VISIT(traverse_module_state->__pyx_n_s_dotXY_vec); + Py_VISIT(traverse_module_state->__pyx_n_s_dtype); Py_VISIT(traverse_module_state->__pyx_n_s_empty); + Py_VISIT(traverse_module_state->__pyx_n_s_float64); Py_VISIT(traverse_module_state->__pyx_n_s_getXYnorm); Py_VISIT(traverse_module_state->__pyx_n_s_getXYnorm_3vec); Py_VISIT(traverse_module_state->__pyx_n_s_get_3direction); @@ -3134,8 +3221,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_name); Py_VISIT(traverse_module_state->__pyx_n_s_np); Py_VISIT(traverse_module_state->__pyx_n_s_numpy); - Py_VISIT(traverse_module_state->__pyx_kp_u_numpy_core_multiarray_failed_to); - Py_VISIT(traverse_module_state->__pyx_kp_u_numpy_core_umath_failed_to_impor); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy__core_multiarray_failed_to); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); Py_VISIT(traverse_module_state->__pyx_n_s_p); Py_VISIT(traverse_module_state->__pyx_n_s_phi); Py_VISIT(traverse_module_state->__pyx_n_s_put_in_z_axis); @@ -3156,6 +3243,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_sign); Py_VISIT(traverse_module_state->__pyx_n_s_size); Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_kp_s_src_DarkNews_Cfourvec_pyx); Py_VISIT(traverse_module_state->__pyx_n_s_stheta); Py_VISIT(traverse_module_state->__pyx_n_s_test); Py_VISIT(traverse_module_state->__pyx_n_s_theta); @@ -3280,7 +3368,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #endif #if CYTHON_USE_MODULE_STATE #endif -#define __pyx_kp_s_Cfourvec_pyx __pyx_mstate_global->__pyx_kp_s_Cfourvec_pyx +#define __pyx_n_s_DTYPE __pyx_mstate_global->__pyx_n_s_DTYPE #define __pyx_n_s_DarkNews_Cfourvec __pyx_mstate_global->__pyx_n_s_DarkNews_Cfourvec #define __pyx_n_s_E __pyx_mstate_global->__pyx_n_s_E #define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError @@ -3300,7 +3388,9 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_dot4 __pyx_mstate_global->__pyx_n_s_dot4 #define __pyx_n_s_dotXY __pyx_mstate_global->__pyx_n_s_dotXY #define __pyx_n_s_dotXY_vec __pyx_mstate_global->__pyx_n_s_dotXY_vec +#define __pyx_n_s_dtype __pyx_mstate_global->__pyx_n_s_dtype #define __pyx_n_s_empty __pyx_mstate_global->__pyx_n_s_empty +#define __pyx_n_s_float64 __pyx_mstate_global->__pyx_n_s_float64 #define __pyx_n_s_getXYnorm __pyx_mstate_global->__pyx_n_s_getXYnorm #define __pyx_n_s_getXYnorm_3vec __pyx_mstate_global->__pyx_n_s_getXYnorm_3vec #define __pyx_n_s_get_3direction __pyx_mstate_global->__pyx_n_s_get_3direction @@ -3325,8 +3415,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name #define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np #define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy -#define __pyx_kp_u_numpy_core_multiarray_failed_to __pyx_mstate_global->__pyx_kp_u_numpy_core_multiarray_failed_to -#define __pyx_kp_u_numpy_core_umath_failed_to_impor __pyx_mstate_global->__pyx_kp_u_numpy_core_umath_failed_to_impor +#define __pyx_kp_u_numpy__core_multiarray_failed_to __pyx_mstate_global->__pyx_kp_u_numpy__core_multiarray_failed_to +#define __pyx_kp_u_numpy__core_umath_failed_to_impo __pyx_mstate_global->__pyx_kp_u_numpy__core_umath_failed_to_impo #define __pyx_n_s_p __pyx_mstate_global->__pyx_n_s_p #define __pyx_n_s_phi __pyx_mstate_global->__pyx_n_s_phi #define __pyx_n_s_put_in_z_axis __pyx_mstate_global->__pyx_n_s_put_in_z_axis @@ -3347,6 +3437,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_sign __pyx_mstate_global->__pyx_n_s_sign #define __pyx_n_s_size __pyx_mstate_global->__pyx_n_s_size #define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_kp_s_src_DarkNews_Cfourvec_pyx __pyx_mstate_global->__pyx_kp_s_src_DarkNews_Cfourvec_pyx #define __pyx_n_s_stheta __pyx_mstate_global->__pyx_n_s_stheta #define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test #define __pyx_n_s_theta __pyx_mstate_global->__pyx_n_s_theta @@ -3405,33 +3496,33 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_codeobj__48 __pyx_mstate_global->__pyx_codeobj__48 /* #### Code section: module_code ### */ -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":245 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":286 * * @property - * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< - * """Returns a borrowed reference to the object owning the data/memory. - * """ + * cdef inline npy_intp itemsize(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ELSIZE(self) + * */ -static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { - PyObject *__pyx_r; +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(PyArray_Descr *__pyx_v_self) { + npy_intp __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":248 - * """Returns a borrowed reference to the object owning the data/memory. - * """ - * return PyArray_BASE(self) # <<<<<<<<<<<<<< + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":287 + * @property + * cdef inline npy_intp itemsize(self) noexcept nogil: + * return PyDataType_ELSIZE(self) # <<<<<<<<<<<<<< * * @property */ - __pyx_r = PyArray_BASE(__pyx_v_self); + __pyx_r = PyDataType_ELSIZE(__pyx_v_self); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":245 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":286 * * @property - * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< - * """Returns a borrowed reference to the object owning the data/memory. - * """ + * cdef inline npy_intp itemsize(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ELSIZE(self) + * */ /* function exit code */ @@ -3439,143 +3530,151 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":251 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":290 * * @property - * cdef inline dtype descr(self): # <<<<<<<<<<<<<< - * """Returns an owned reference to the dtype of the array. - * """ + * cdef inline npy_intp alignment(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ALIGNMENT(self) + * */ -static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) { - PyArray_Descr *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyArray_Descr *__pyx_t_1; - __Pyx_RefNannySetupContext("descr", 1); +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment(PyArray_Descr *__pyx_v_self) { + npy_intp __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":254 - * """Returns an owned reference to the dtype of the array. - * """ - * return PyArray_DESCR(self) # <<<<<<<<<<<<<< - * + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":291 * @property + * cdef inline npy_intp alignment(self) noexcept nogil: + * return PyDataType_ALIGNMENT(self) # <<<<<<<<<<<<<< + * + * # Use fields/names with care as they may be NULL. You must check */ - __Pyx_XDECREF((PyObject *)__pyx_r); - __pyx_t_1 = PyArray_DESCR(__pyx_v_self); - __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1)); - __pyx_r = ((PyArray_Descr *)__pyx_t_1); + __pyx_r = PyDataType_ALIGNMENT(__pyx_v_self); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":251 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":290 * * @property - * cdef inline dtype descr(self): # <<<<<<<<<<<<<< - * """Returns an owned reference to the dtype of the array. - * """ + * cdef inline npy_intp alignment(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ALIGNMENT(self) + * */ /* function exit code */ __pyx_L0:; - __Pyx_XGIVEREF((PyObject *)__pyx_r); - __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":257 - * +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":296 + * # for this using PyDataType_HASFIELDS. * @property - * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< - * """Returns the number of dimensions in the array. - * """ + * cdef inline object fields(self): # <<<<<<<<<<<<<< + * return PyDataType_FIELDS(self) + * */ -static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { - int __pyx_r; +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyArray_Descr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1; + __Pyx_RefNannySetupContext("fields", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":260 - * """Returns the number of dimensions in the array. - * """ - * return PyArray_NDIM(self) # <<<<<<<<<<<<<< + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":297 + * @property + * cdef inline object fields(self): + * return PyDataType_FIELDS(self) # <<<<<<<<<<<<<< * * @property */ - __pyx_r = PyArray_NDIM(__pyx_v_self); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyDataType_FIELDS(__pyx_v_self); + __Pyx_INCREF(((PyObject *)__pyx_t_1)); + __pyx_r = ((PyObject *)__pyx_t_1); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":257 - * + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":296 + * # for this using PyDataType_HASFIELDS. * @property - * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< - * """Returns the number of dimensions in the array. - * """ + * cdef inline object fields(self): # <<<<<<<<<<<<<< + * return PyDataType_FIELDS(self) + * */ /* function exit code */ __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":263 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":300 * * @property - * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< - * """Returns a pointer to the dimensions/shape of the array. - * The number of elements matches the number of dimensions of the array (ndim). + * cdef inline tuple names(self): # <<<<<<<<<<<<<< + * return PyDataType_NAMES(self) + * */ -static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { - npy_intp *__pyx_r; +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArray_Descr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1; + __Pyx_RefNannySetupContext("names", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":268 - * Can return NULL for 0-dimensional arrays. - * """ - * return PyArray_DIMS(self) # <<<<<<<<<<<<<< - * + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":301 * @property + * cdef inline tuple names(self): + * return PyDataType_NAMES(self) # <<<<<<<<<<<<<< + * + * # Use PyDataType_HASSUBARRAY to test whether this field is */ - __pyx_r = PyArray_DIMS(__pyx_v_self); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyDataType_NAMES(__pyx_v_self); + __Pyx_INCREF(((PyObject*)__pyx_t_1)); + __pyx_r = ((PyObject*)__pyx_t_1); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":263 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":300 * * @property - * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< - * """Returns a pointer to the dimensions/shape of the array. - * The number of elements matches the number of dimensions of the array (ndim). + * cdef inline tuple names(self): # <<<<<<<<<<<<<< + * return PyDataType_NAMES(self) + * */ /* function exit code */ __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":271 - * +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":307 + * # this field via the inline helper method PyDataType_SHAPE. * @property - * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< - * """Returns a pointer to the strides of the array. - * The number of elements matches the number of dimensions of the array (ndim). + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_SUBARRAY(self) + * */ -static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { - npy_intp *__pyx_r; +static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray_subarray(PyArray_Descr *__pyx_v_self) { + PyArray_ArrayDescr *__pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":275 - * The number of elements matches the number of dimensions of the array (ndim). - * """ - * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":308 + * @property + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: + * return PyDataType_SUBARRAY(self) # <<<<<<<<<<<<<< * * @property */ - __pyx_r = PyArray_STRIDES(__pyx_v_self); + __pyx_r = PyDataType_SUBARRAY(__pyx_v_self); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":271 - * + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":307 + * # this field via the inline helper method PyDataType_SHAPE. * @property - * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< - * """Returns a pointer to the strides of the array. - * The number of elements matches the number of dimensions of the array (ndim). + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_SUBARRAY(self) + * */ /* function exit code */ @@ -3583,33 +3682,33 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":278 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":311 * * @property - * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< - * """Returns the total size (in number of elements) of the array. - * """ + * cdef inline npy_uint64 flags(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The data types flags.""" + * return PyDataType_FLAGS(self) */ -static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { - npy_intp __pyx_r; +static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArray_Descr *__pyx_v_self) { + npy_uint64 __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":281 - * """Returns the total size (in number of elements) of the array. - * """ - * return PyArray_SIZE(self) # <<<<<<<<<<<<<< + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":313 + * cdef inline npy_uint64 flags(self) noexcept nogil: + * """The data types flags.""" + * return PyDataType_FLAGS(self) # <<<<<<<<<<<<<< + * * - * @property */ - __pyx_r = PyArray_SIZE(__pyx_v_self); + __pyx_r = PyDataType_FLAGS(__pyx_v_self); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":278 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":311 * * @property - * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< - * """Returns the total size (in number of elements) of the array. - * """ + * cdef inline npy_uint64 flags(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The data types flags.""" + * return PyDataType_FLAGS(self) */ /* function exit code */ @@ -3617,31 +3716,447 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":284 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":323 * * @property - * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< - * """The pointer to the data buffer as a char*. - * This is provided for legacy reasons to avoid direct struct field access. + * cdef inline int numiter(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) */ -static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { - char *__pyx_r; +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyArrayMultiIterObject *__pyx_v_self) { + int __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":290 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":325 + * cdef inline int numiter(self) noexcept nogil: + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_NUMITER(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":323 + * + * @property + * cdef inline int numiter(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":328 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":330 + * cdef inline npy_intp size(self) noexcept nogil: + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_SIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":328 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":333 + * + * @property + * cdef inline npy_intp index(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":335 + * cdef inline npy_intp index(self) noexcept nogil: + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_INDEX(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":333 + * + * @property + * cdef inline npy_intp index(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":338 + * + * @property + * cdef inline int nd(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) + */ + +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIterObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":340 + * cdef inline int nd(self) noexcept nogil: + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_NDIM(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":338 + * + * @property + * cdef inline int nd(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":343 + * + * @property + * cdef inline npy_intp* dimensions(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_dimensions(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":345 + * cdef inline npy_intp* dimensions(self) noexcept nogil: + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_DIMS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":343 + * + * @property + * cdef inline npy_intp* dimensions(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":348 + * + * @property + * cdef inline void** iters(self) noexcept nogil: # <<<<<<<<<<<<<< + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + */ + +static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArrayMultiIterObject *__pyx_v_self) { + void **__pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":351 + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + * return PyArray_MultiIter_ITERS(self) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyArray_MultiIter_ITERS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":348 + * + * @property + * cdef inline void** iters(self) noexcept nogil: # <<<<<<<<<<<<<< + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":366 + * + * @property + * cdef inline PyObject* base(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { + PyObject *__pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":369 + * """Returns a borrowed reference to the object owning the data/memory. + * """ + * return PyArray_BASE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_BASE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":366 + * + * @property + * cdef inline PyObject* base(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":372 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) { + PyArray_Descr *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyArray_Descr *__pyx_t_1; + __Pyx_RefNannySetupContext("descr", 1); + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":375 + * """Returns an owned reference to the dtype of the array. + * """ + * return PyArray_DESCR(self) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __pyx_t_1 = PyArray_DESCR(__pyx_v_self); + __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1)); + __pyx_r = ((PyArray_Descr *)__pyx_t_1); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":372 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":378 + * + * @property + * cdef inline int ndim(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ + */ + +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":381 + * """Returns the number of dimensions in the array. + * """ + * return PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_NDIM(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":378 + * + * @property + * cdef inline int ndim(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":384 + * + * @property + * cdef inline npy_intp *shape(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":389 + * Can return NULL for 0-dimensional arrays. + * """ + * return PyArray_DIMS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_DIMS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":384 + * + * @property + * cdef inline npy_intp *shape(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":392 + * + * @property + * cdef inline npy_intp *strides(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":396 + * The number of elements matches the number of dimensions of the array (ndim). + * """ + * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_STRIDES(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":392 + * + * @property + * cdef inline npy_intp *strides(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":399 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":402 + * """Returns the total size (in number of elements) of the array. + * """ + * return PyArray_SIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_SIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":399 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":405 + * + * @property + * cdef inline char* data(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { + char *__pyx_r; + + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":411 * of `PyArray_DATA()` instead, which returns a 'void*'. * """ * return PyArray_BYTES(self) # <<<<<<<<<<<<<< * - * ctypedef unsigned char npy_bool + * */ __pyx_r = PyArray_BYTES(__pyx_v_self); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":284 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":405 * * @property - * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< + * cdef inline char* data(self) noexcept nogil: # <<<<<<<<<<<<<< * """The pointer to the data buffer as a char*. * This is provided for legacy reasons to avoid direct struct field access. */ @@ -3651,8 +4166,8 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":773 - * ctypedef npy_cdouble complex_t +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":806 + * ctypedef long double complex clongdouble_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(1, a) @@ -3668,7 +4183,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":774 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":807 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< @@ -3676,14 +4191,14 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ * 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_ERR(1, 774, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 807, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":773 - * ctypedef npy_cdouble complex_t + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":806 + * ctypedef long double complex clongdouble_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(1, a) @@ -3701,7 +4216,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":776 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":809 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -3718,7 +4233,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":777 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":810 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< @@ -3726,13 +4241,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ * 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_ERR(1, 777, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 810, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":776 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":809 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -3751,7 +4266,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":779 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":812 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -3768,7 +4283,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":780 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":813 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< @@ -3776,13 +4291,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ * 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_ERR(1, 780, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":779 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":812 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -3801,7 +4316,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":782 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":815 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -3818,7 +4333,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":783 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":816 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< @@ -3826,13 +4341,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ * 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_ERR(1, 783, __pyx_L1_error) + __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_ERR(1, 816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":782 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":815 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -3851,7 +4366,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":785 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":818 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -3868,7 +4383,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":786 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":819 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< @@ -3876,13 +4391,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ * cdef inline tuple PyDataType_SHAPE(dtype d): */ __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_ERR(1, 786, __pyx_L1_error) + __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_ERR(1, 819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":785 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":818 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -3901,7 +4416,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":788 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":821 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -3913,9 +4428,10 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; + PyObject *__pyx_t_2; __Pyx_RefNannySetupContext("PyDataType_SHAPE", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":822 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -3925,7 +4441,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); if (__pyx_t_1) { - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":790 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":823 * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape # <<<<<<<<<<<<<< @@ -3933,11 +4449,12 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ * return () */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape)); - __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); + __pyx_t_2 = __pyx_f_5numpy_5dtype_8subarray_subarray(__pyx_v_d)->shape; + __Pyx_INCREF(((PyObject*)__pyx_t_2)); + __pyx_r = ((PyObject*)__pyx_t_2); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":822 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -3946,7 +4463,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ */ } - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":792 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":825 * return d.subarray.shape * else: * return () # <<<<<<<<<<<<<< @@ -3960,7 +4477,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ goto __pyx_L0; } - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":788 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":821 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -3975,10 +4492,10 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":968 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1009 * int _import_umath() except -1 * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * cdef inline void set_array_base(ndarray arr, object base) except *: # <<<<<<<<<<<<<< * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) */ @@ -3989,28 +4506,28 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a const char *__pyx_filename = NULL; int __pyx_clineno = 0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":969 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1010 * - * cdef inline void set_array_base(ndarray arr, object base): + * cdef inline void set_array_base(ndarray arr, object base) except *: * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< * PyArray_SetBaseObject(arr, base) * */ Py_INCREF(__pyx_v_base); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":970 - * cdef inline void set_array_base(ndarray arr, object base): + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1011 + * cdef inline void set_array_base(ndarray arr, object base) except *: * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< * * cdef inline object get_array_base(ndarray arr): */ - __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 970, __pyx_L1_error) + __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 1011, __pyx_L1_error) - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":968 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1009 * int _import_umath() except -1 * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * cdef inline void set_array_base(ndarray arr, object base) except *: # <<<<<<<<<<<<<< * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) */ @@ -4022,7 +4539,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a __pyx_L0:; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":972 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1013 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -4037,7 +4554,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":973 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1014 * * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< @@ -4046,7 +4563,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ __pyx_v_base = PyArray_BASE(__pyx_v_arr); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1015 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -4056,7 +4573,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_t_1 = (__pyx_v_base == NULL); if (__pyx_t_1) { - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":975 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1016 * base = PyArray_BASE(arr) * if base is NULL: * return None # <<<<<<<<<<<<<< @@ -4067,7 +4584,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1015 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -4076,7 +4593,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ } - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":976 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1017 * if base is NULL: * return None * return base # <<<<<<<<<<<<<< @@ -4088,7 +4605,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = ((PyObject *)__pyx_v_base); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":972 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1013 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -4103,7 +4620,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":980 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1021 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -4127,7 +4644,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_array", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1022 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4143,16 +4660,16 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":982 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1023 * cdef inline int import_array() except -1: * try: * __pyx_import_array() # <<<<<<<<<<<<<< * except Exception: - * raise ImportError("numpy.core.multiarray failed to import") + * raise ImportError("numpy._core.multiarray failed to import") */ - __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 982, __pyx_L3_error) + __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1023, __pyx_L3_error) - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1022 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4166,37 +4683,37 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":983 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1024 * try: * __pyx_import_array() * except Exception: # <<<<<<<<<<<<<< - * raise ImportError("numpy.core.multiarray failed to import") + * raise ImportError("numpy._core.multiarray failed to import") * */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 983, __pyx_L5_except_error) + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 1024, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1025 * __pyx_import_array() * except Exception: - * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.multiarray failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_umath() except -1: */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 984, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1025, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 984, __pyx_L5_except_error) + __PYX_ERR(1, 1025, __pyx_L5_except_error) } goto __pyx_L5_except_error; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1022 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4212,7 +4729,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __pyx_L8_try_end:; } - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":980 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1021 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -4235,8 +4752,8 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":986 - * raise ImportError("numpy.core.multiarray failed to import") +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1027 + * raise ImportError("numpy._core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< * try: @@ -4259,7 +4776,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_umath", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1028 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4275,16 +4792,16 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":988 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1029 * cdef inline int import_umath() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< * except Exception: - * raise ImportError("numpy.core.umath failed to import") + * raise ImportError("numpy._core.umath failed to import") */ - __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 988, __pyx_L3_error) + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1029, __pyx_L3_error) - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1028 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4298,37 +4815,37 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":989 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1030 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< - * raise ImportError("numpy.core.umath failed to import") + * raise ImportError("numpy._core.umath failed to import") * */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 989, __pyx_L5_except_error) + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 1030, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1031 * _import_umath() * except Exception: - * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_ufunc() except -1: */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 990, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1031, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 990, __pyx_L5_except_error) + __PYX_ERR(1, 1031, __pyx_L5_except_error) } goto __pyx_L5_except_error; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1028 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4344,8 +4861,8 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __pyx_L8_try_end:; } - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":986 - * raise ImportError("numpy.core.multiarray failed to import") + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1027 + * raise ImportError("numpy._core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< * try: @@ -4367,8 +4884,8 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":992 - * raise ImportError("numpy.core.umath failed to import") +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1033 + * raise ImportError("numpy._core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< * try: @@ -4391,7 +4908,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_ufunc", 1); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1034 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4407,16 +4924,16 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":994 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1035 * cdef inline int import_ufunc() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< * except Exception: - * raise ImportError("numpy.core.umath failed to import") + * raise ImportError("numpy._core.umath failed to import") */ - __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 994, __pyx_L3_error) + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1035, __pyx_L3_error) - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1034 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4430,37 +4947,37 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":995 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1036 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< - * raise ImportError("numpy.core.umath failed to import") + * raise ImportError("numpy._core.umath failed to import") * */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 995, __pyx_L5_except_error) + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 1036, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":996 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1037 * _import_umath() * except Exception: - * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< * * */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 996, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1037, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 996, __pyx_L5_except_error) + __PYX_ERR(1, 1037, __pyx_L5_except_error) } goto __pyx_L5_except_error; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1034 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4476,8 +4993,8 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __pyx_L8_try_end:; } - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":992 - * raise ImportError("numpy.core.umath failed to import") + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1033 + * raise ImportError("numpy._core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< * try: @@ -4499,10 +5016,10 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":999 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1040 * * - * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * cdef inline bint is_timedelta64_object(object obj) noexcept: # <<<<<<<<<<<<<< * """ * Cython equivalent of `isinstance(obj, np.timedelta64)` */ @@ -4510,7 +5027,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1011 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1052 * bool * """ * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< @@ -4520,10 +5037,10 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":999 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1040 * * - * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * cdef inline bint is_timedelta64_object(object obj) noexcept: # <<<<<<<<<<<<<< * """ * Cython equivalent of `isinstance(obj, np.timedelta64)` */ @@ -4533,10 +5050,10 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1014 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1055 * * - * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * cdef inline bint is_datetime64_object(object obj) noexcept: # <<<<<<<<<<<<<< * """ * Cython equivalent of `isinstance(obj, np.datetime64)` */ @@ -4544,7 +5061,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1026 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1067 * bool * """ * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< @@ -4554,10 +5071,10 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1014 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1055 * * - * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * cdef inline bint is_datetime64_object(object obj) noexcept: # <<<<<<<<<<<<<< * """ * Cython equivalent of `isinstance(obj, np.datetime64)` */ @@ -4567,10 +5084,10 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1029 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1070 * * - * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * cdef inline npy_datetime get_datetime64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< * """ * returns the int64 value underlying scalar numpy datetime64 object */ @@ -4578,7 +5095,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { npy_datetime __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1036 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1077 * also needed. That can be found using `get_datetime64_unit`. * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4588,10 +5105,10 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1029 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1070 * * - * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * cdef inline npy_datetime get_datetime64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< * """ * returns the int64 value underlying scalar numpy datetime64 object */ @@ -4601,10 +5118,10 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1039 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1080 * * - * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * cdef inline npy_timedelta get_timedelta64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< * """ * returns the int64 value underlying scalar numpy timedelta64 object */ @@ -4612,7 +5129,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { npy_timedelta __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1043 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1084 * returns the int64 value underlying scalar numpy timedelta64 object * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4622,10 +5139,10 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1039 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1080 * * - * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * cdef inline npy_timedelta get_timedelta64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< * """ * returns the int64 value underlying scalar numpy timedelta64 object */ @@ -4635,10 +5152,10 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject return __pyx_r; } -/* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1046 +/* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1087 * * - * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) noexcept nogil: # <<<<<<<<<<<<<< * """ * returns the unit part of the dtype for a numpy datetime64 object. */ @@ -4646,18 +5163,20 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { NPY_DATETIMEUNIT __pyx_r; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1050 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1091 * returns the unit part of the dtype for a numpy datetime64 object. * """ * return (obj).obmeta.base # <<<<<<<<<<<<<< + * + * */ __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); goto __pyx_L0; - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1046 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1087 * * - * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) noexcept nogil: # <<<<<<<<<<<<<< * """ * returns the unit part of the dtype for a numpy datetime64 object. */ @@ -4667,7 +5186,7 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":19 +/* "DarkNews/Cfourvec.pyx":22 * from libc.stdlib cimport rand, RAND_MAX * * cdef double UniformRand(): # <<<<<<<<<<<<<< @@ -4678,7 +5197,7 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec static double __pyx_f_8DarkNews_8Cfourvec_UniformRand(void) { double __pyx_r; - /* "DarkNews/Cfourvec.pyx":20 + /* "DarkNews/Cfourvec.pyx":23 * * cdef double UniformRand(): * return ( rand() + 1. )/(RAND_MAX + 1. ) # <<<<<<<<<<<<<< @@ -4688,7 +5207,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_UniformRand(void) { __pyx_r = ((rand() + 1.) / (RAND_MAX + 1.)); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":19 + /* "DarkNews/Cfourvec.pyx":22 * from libc.stdlib cimport rand, RAND_MAX * * cdef double UniformRand(): # <<<<<<<<<<<<<< @@ -4701,7 +5220,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_UniformRand(void) { return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":25 +/* "DarkNews/Cfourvec.pyx":28 * ####################################### * # Box muller method for NORMAL distributed random variables * cdef double NormalRand(double mean, double stddev): # <<<<<<<<<<<<<< @@ -4726,7 +5245,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double const char *__pyx_filename = NULL; int __pyx_clineno = 0; - /* "DarkNews/Cfourvec.pyx":26 + /* "DarkNews/Cfourvec.pyx":29 * # Box muller method for NORMAL distributed random variables * cdef double NormalRand(double mean, double stddev): * cdef double n2 = 0.0 # <<<<<<<<<<<<<< @@ -4735,7 +5254,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ __pyx_v_n2 = 0.0; - /* "DarkNews/Cfourvec.pyx":27 + /* "DarkNews/Cfourvec.pyx":30 * cdef double NormalRand(double mean, double stddev): * cdef double n2 = 0.0 * cdef int n2_cached = 0 # <<<<<<<<<<<<<< @@ -4744,7 +5263,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ __pyx_v_n2_cached = 0; - /* "DarkNews/Cfourvec.pyx":31 + /* "DarkNews/Cfourvec.pyx":34 * cdef double result,d,n1 * * if (not n2_cached): # <<<<<<<<<<<<<< @@ -4754,7 +5273,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double __pyx_t_1 = (!(__pyx_v_n2_cached != 0)); if (__pyx_t_1) { - /* "DarkNews/Cfourvec.pyx":32 + /* "DarkNews/Cfourvec.pyx":35 * * if (not n2_cached): * while (True): # <<<<<<<<<<<<<< @@ -4763,27 +5282,27 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ while (1) { - /* "DarkNews/Cfourvec.pyx":33 + /* "DarkNews/Cfourvec.pyx":36 * if (not n2_cached): * while (True): * x = 2.0*UniformRand() - 1 # <<<<<<<<<<<<<< * y = 2.0*UniformRand() - 1 * */ - __pyx_t_2 = __pyx_f_8DarkNews_8Cfourvec_UniformRand(); if (unlikely(__pyx_t_2 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 33, __pyx_L1_error) + __pyx_t_2 = __pyx_f_8DarkNews_8Cfourvec_UniformRand(); if (unlikely(__pyx_t_2 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L1_error) __pyx_v_x = ((2.0 * __pyx_t_2) - 1.0); - /* "DarkNews/Cfourvec.pyx":34 + /* "DarkNews/Cfourvec.pyx":37 * while (True): * x = 2.0*UniformRand() - 1 * y = 2.0*UniformRand() - 1 # <<<<<<<<<<<<<< * * r = x*x + y*y */ - __pyx_t_2 = __pyx_f_8DarkNews_8Cfourvec_UniformRand(); if (unlikely(__pyx_t_2 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L1_error) + __pyx_t_2 = __pyx_f_8DarkNews_8Cfourvec_UniformRand(); if (unlikely(__pyx_t_2 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L1_error) __pyx_v_y = ((2.0 * __pyx_t_2) - 1.0); - /* "DarkNews/Cfourvec.pyx":36 + /* "DarkNews/Cfourvec.pyx":39 * y = 2.0*UniformRand() - 1 * * r = x*x + y*y # <<<<<<<<<<<<<< @@ -4792,7 +5311,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ __pyx_v_r = ((__pyx_v_x * __pyx_v_x) + (__pyx_v_y * __pyx_v_y)); - /* "DarkNews/Cfourvec.pyx":38 + /* "DarkNews/Cfourvec.pyx":41 * r = x*x + y*y * * if (r != 0.0 and r <= 1.0): # <<<<<<<<<<<<<< @@ -4810,7 +5329,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double __pyx_L7_bool_binop_done:; if (__pyx_t_1) { - /* "DarkNews/Cfourvec.pyx":39 + /* "DarkNews/Cfourvec.pyx":42 * * if (r != 0.0 and r <= 1.0): * break # <<<<<<<<<<<<<< @@ -4819,7 +5338,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ goto __pyx_L5_break; - /* "DarkNews/Cfourvec.pyx":38 + /* "DarkNews/Cfourvec.pyx":41 * r = x*x + y*y * * if (r != 0.0 and r <= 1.0): # <<<<<<<<<<<<<< @@ -4830,7 +5349,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double } __pyx_L5_break:; - /* "DarkNews/Cfourvec.pyx":42 + /* "DarkNews/Cfourvec.pyx":45 * * * d = sqrt(-2.0*log(r)/r) # <<<<<<<<<<<<<< @@ -4839,7 +5358,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ __pyx_v_d = sqrt(((-2.0 * log(__pyx_v_r)) / __pyx_v_r)); - /* "DarkNews/Cfourvec.pyx":43 + /* "DarkNews/Cfourvec.pyx":46 * * d = sqrt(-2.0*log(r)/r) * n1 = x*d # <<<<<<<<<<<<<< @@ -4848,7 +5367,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ __pyx_v_n1 = (__pyx_v_x * __pyx_v_d); - /* "DarkNews/Cfourvec.pyx":44 + /* "DarkNews/Cfourvec.pyx":47 * d = sqrt(-2.0*log(r)/r) * n1 = x*d * n2 = y*d # <<<<<<<<<<<<<< @@ -4857,7 +5376,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ __pyx_v_n2 = (__pyx_v_y * __pyx_v_d); - /* "DarkNews/Cfourvec.pyx":45 + /* "DarkNews/Cfourvec.pyx":48 * n1 = x*d * n2 = y*d * result = n1*stddev + mean # <<<<<<<<<<<<<< @@ -4866,7 +5385,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ __pyx_v_result = ((__pyx_v_n1 * __pyx_v_stddev) + __pyx_v_mean); - /* "DarkNews/Cfourvec.pyx":46 + /* "DarkNews/Cfourvec.pyx":49 * n2 = y*d * result = n1*stddev + mean * n2_cached = 1 # <<<<<<<<<<<<<< @@ -4875,7 +5394,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ __pyx_v_n2_cached = 1; - /* "DarkNews/Cfourvec.pyx":47 + /* "DarkNews/Cfourvec.pyx":50 * result = n1*stddev + mean * n2_cached = 1 * return result # <<<<<<<<<<<<<< @@ -4885,7 +5404,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double __pyx_r = __pyx_v_result; goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":31 + /* "DarkNews/Cfourvec.pyx":34 * cdef double result,d,n1 * * if (not n2_cached): # <<<<<<<<<<<<<< @@ -4894,7 +5413,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double */ } - /* "DarkNews/Cfourvec.pyx":49 + /* "DarkNews/Cfourvec.pyx":52 * return result * else: * n2_cached = 0; # <<<<<<<<<<<<<< @@ -4904,7 +5423,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double /*else*/ { __pyx_v_n2_cached = 0; - /* "DarkNews/Cfourvec.pyx":50 + /* "DarkNews/Cfourvec.pyx":53 * else: * n2_cached = 0; * return n2*stddev + mean # <<<<<<<<<<<<<< @@ -4915,7 +5434,7 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double goto __pyx_L0; } - /* "DarkNews/Cfourvec.pyx":25 + /* "DarkNews/Cfourvec.pyx":28 * ####################################### * # Box muller method for NORMAL distributed random variables * cdef double NormalRand(double mean, double stddev): # <<<<<<<<<<<<<< @@ -4931,11 +5450,11 @@ static double __pyx_f_8DarkNews_8Cfourvec_NormalRand(double __pyx_v_mean, double return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":57 +/* "DarkNews/Cfourvec.pyx":60 * * #****************************** * def random_generator(int size, double min, double max): # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): */ @@ -4947,7 +5466,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_1random_generator = {"random_generator", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_1random_generator, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_random_generator, "random_generator(int size, double min, double max)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_1random_generator = {"random_generator", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_1random_generator, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_random_generator}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_1random_generator(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -4998,7 +5518,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -5006,9 +5526,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("random_generator", 1, 3, 3, 1); __PYX_ERR(0, 57, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("random_generator", 1, 3, 3, 1); __PYX_ERR(0, 60, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -5016,14 +5536,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("random_generator", 1, 3, 3, 2); __PYX_ERR(0, 57, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("random_generator", 1, 3, 3, 2); __PYX_ERR(0, 60, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "random_generator") < 0)) __PYX_ERR(0, 57, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "random_generator") < 0)) __PYX_ERR(0, 60, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; @@ -5032,13 +5552,13 @@ PyObject *__pyx_args, PyObject *__pyx_kwds values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } - __pyx_v_size = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) - __pyx_v_min = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_min == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) - __pyx_v_max = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_max == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) + __pyx_v_size = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error) + __pyx_v_min = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_min == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error) + __pyx_v_max = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_max == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("random_generator", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 57, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("random_generator", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 60, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -5076,8 +5596,8 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_random_generator(CYTHON_UNUSED PyO PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyArrayObject *__pyx_t_6 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; double __pyx_t_9; @@ -5091,82 +5611,75 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_random_generator(CYTHON_UNUSED PyO __pyx_pybuffernd_s.data = NULL; __pyx_pybuffernd_s.rcbuffer = &__pyx_pybuffer_s; - /* "DarkNews/Cfourvec.pyx":58 + /* "DarkNews/Cfourvec.pyx":61 * #****************************** * def random_generator(int size, double min, double max): - * cdef ndarray[double,ndim=1] s = np.empty((size)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) # <<<<<<<<<<<<<< * for i in range(size): * s[i] = (max-min)*UniformRand()+min */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = NULL; - __pyx_t_5 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_5 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; - __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 58, __pyx_L1_error) - __pyx_t_6 = ((PyArrayObject *)__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__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_ERR(0, 61, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 58, __pyx_L1_error) + __PYX_ERR(0, 61, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_6 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":59 + /* "DarkNews/Cfourvec.pyx":62 * def random_generator(int size, double min, double max): - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): # <<<<<<<<<<<<<< * s[i] = (max-min)*UniformRand()+min * return s */ - __pyx_t_5 = __pyx_v_size; - __pyx_t_7 = __pyx_t_5; + __pyx_t_6 = __pyx_v_size; + __pyx_t_7 = __pyx_t_6; for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":60 - * cdef ndarray[double,ndim=1] s = np.empty((size)) + /* "DarkNews/Cfourvec.pyx":63 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): * s[i] = (max-min)*UniformRand()+min # <<<<<<<<<<<<<< * return s * */ - __pyx_t_9 = __pyx_f_8DarkNews_8Cfourvec_UniformRand(); if (unlikely(__pyx_t_9 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L1_error) + __pyx_t_9 = __pyx_f_8DarkNews_8Cfourvec_UniformRand(); if (unlikely(__pyx_t_9 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L1_error) __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_s.diminfo[0].strides) = (((__pyx_v_max - __pyx_v_min) * __pyx_t_9) + __pyx_v_min); + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_s.diminfo[0].strides) = (((__pyx_v_max - __pyx_v_min) * __pyx_t_9) + __pyx_v_min); } - /* "DarkNews/Cfourvec.pyx":61 + /* "DarkNews/Cfourvec.pyx":64 * for i in range(size): * s[i] = (max-min)*UniformRand()+min * return s # <<<<<<<<<<<<<< @@ -5178,11 +5691,11 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_random_generator(CYTHON_UNUSED PyO __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":57 + /* "DarkNews/Cfourvec.pyx":60 * * #****************************** * def random_generator(int size, double min, double max): # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): */ @@ -5210,12 +5723,12 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_random_generator(CYTHON_UNUSED PyO return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":64 +/* "DarkNews/Cfourvec.pyx":67 * * #****************************** - * def random_normal(ndarray[double, ndim=1] x, ndarray[double, ndim=1] sigma): # <<<<<<<<<<<<<< + * def random_normal(np.ndarray[DTYPE_t, ndim=1] x, np.ndarray[DTYPE_t, ndim=1] sigma): # <<<<<<<<<<<<<< * cdef int size = x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) */ /* Python wrapper */ @@ -5226,7 +5739,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_3random_normal = {"random_normal", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_3random_normal, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_2random_normal, "random_normal(ndarray x, ndarray sigma)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_3random_normal = {"random_normal", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_3random_normal, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_2random_normal}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_3random_normal(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -5274,7 +5788,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 64, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -5282,14 +5796,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 64, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("random_normal", 1, 2, 2, 1); __PYX_ERR(0, 64, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("random_normal", 1, 2, 2, 1); __PYX_ERR(0, 67, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "random_normal") < 0)) __PYX_ERR(0, 64, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "random_normal") < 0)) __PYX_ERR(0, 67, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -5302,7 +5816,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("random_normal", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 64, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("random_normal", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 67, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -5316,8 +5830,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 64, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sigma), __pyx_ptype_5numpy_ndarray, 1, "sigma", 0))) __PYX_ERR(0, 64, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 67, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sigma), __pyx_ptype_5numpy_ndarray, 1, "sigma", 0))) __PYX_ERR(0, 67, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_2random_normal(__pyx_self, __pyx_v_x, __pyx_v_sigma); /* function exit code */ @@ -5347,18 +5861,17 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_2random_normal(CYTHON_UNUSED PyObj __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - double __pyx_t_12; + double __pyx_t_11; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -5377,103 +5890,95 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_2random_normal(CYTHON_UNUSED PyObj __pyx_pybuffernd_sigma.rcbuffer = &__pyx_pybuffer_sigma; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 64, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 67, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sigma.rcbuffer->pybuffer, (PyObject*)__pyx_v_sigma, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 64, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sigma.rcbuffer->pybuffer, (PyObject*)__pyx_v_sigma, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 67, __pyx_L1_error) } __pyx_pybuffernd_sigma.diminfo[0].strides = __pyx_pybuffernd_sigma.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sigma.diminfo[0].shape = __pyx_pybuffernd_sigma.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":65 + /* "DarkNews/Cfourvec.pyx":68 * #****************************** - * def random_normal(ndarray[double, ndim=1] x, ndarray[double, ndim=1] sigma): + * def random_normal(np.ndarray[DTYPE_t, ndim=1] x, np.ndarray[DTYPE_t, ndim=1] sigma): * cdef int size = x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L1_error) - __pyx_v_size = (__pyx_t_1[0]); + __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":66 - * def random_normal(ndarray[double, ndim=1] x, ndarray[double, ndim=1] sigma): + /* "DarkNews/Cfourvec.pyx":69 + * def random_normal(np.ndarray[DTYPE_t, ndim=1] x, np.ndarray[DTYPE_t, ndim=1] sigma): * cdef int size = x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((size)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) # <<<<<<<<<<<<<< * for i in range(size): * s[i] = NormalRand(x[i], sigma[i]) */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 66, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 69, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 66, __pyx_L1_error) + __PYX_ERR(0, 69, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":67 + /* "DarkNews/Cfourvec.pyx":70 * cdef int size = x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): # <<<<<<<<<<<<<< * s[i] = NormalRand(x[i], sigma[i]) * return s */ __pyx_t_6 = __pyx_v_size; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":68 - * cdef ndarray[double,ndim=1] s = np.empty((size)) + /* "DarkNews/Cfourvec.pyx":71 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): * s[i] = NormalRand(x[i], sigma[i]) # <<<<<<<<<<<<<< * return s * */ + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = __pyx_f_8DarkNews_8Cfourvec_NormalRand((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_sigma.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_sigma.diminfo[0].strides))); if (unlikely(__pyx_t_11 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 71, __pyx_L1_error) __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = __pyx_f_8DarkNews_8Cfourvec_NormalRand((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_sigma.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_sigma.diminfo[0].strides))); if (unlikely(__pyx_t_12 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 68, __pyx_L1_error) - __pyx_t_11 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_s.diminfo[0].strides) = __pyx_t_12; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_s.diminfo[0].strides) = __pyx_t_11; } - /* "DarkNews/Cfourvec.pyx":69 + /* "DarkNews/Cfourvec.pyx":72 * for i in range(size): * s[i] = NormalRand(x[i], sigma[i]) * return s # <<<<<<<<<<<<<< @@ -5485,20 +5990,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_2random_normal(CYTHON_UNUSED PyObj __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":64 + /* "DarkNews/Cfourvec.pyx":67 * * #****************************** - * def random_normal(ndarray[double, ndim=1] x, ndarray[double, ndim=1] sigma): # <<<<<<<<<<<<<< + * def random_normal(np.ndarray[DTYPE_t, ndim=1] x, np.ndarray[DTYPE_t, ndim=1] sigma): # <<<<<<<<<<<<<< * cdef int size = x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -5521,10 +6026,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_2random_normal(CYTHON_UNUSED PyObj return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":77 +/* "DarkNews/Cfourvec.pyx":80 * * #****************************** - * def build_fourvec(ndarray[double, ndim=1] E, ndarray[double, ndim=1] p, ndarray[double, ndim=1] cost, ndarray[double, ndim=1] phi): # <<<<<<<<<<<<<< + * def build_fourvec(np.ndarray[DTYPE_t, ndim=1] E, np.ndarray[DTYPE_t, ndim=1] p, np.ndarray[DTYPE_t, ndim=1] cost, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * * cdef int i,m */ @@ -5537,7 +6042,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_5build_fourvec = {"build_fourvec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_5build_fourvec, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_4build_fourvec, "build_fourvec(ndarray E, ndarray p, ndarray cost, ndarray phi)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_5build_fourvec = {"build_fourvec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_5build_fourvec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_4build_fourvec}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_5build_fourvec(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -5591,7 +6097,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -5599,9 +6105,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("build_fourvec", 1, 4, 4, 1); __PYX_ERR(0, 77, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("build_fourvec", 1, 4, 4, 1); __PYX_ERR(0, 80, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -5609,9 +6115,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("build_fourvec", 1, 4, 4, 2); __PYX_ERR(0, 77, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("build_fourvec", 1, 4, 4, 2); __PYX_ERR(0, 80, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: @@ -5619,14 +6125,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("build_fourvec", 1, 4, 4, 3); __PYX_ERR(0, 77, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("build_fourvec", 1, 4, 4, 3); __PYX_ERR(0, 80, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "build_fourvec") < 0)) __PYX_ERR(0, 77, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "build_fourvec") < 0)) __PYX_ERR(0, 80, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 4)) { goto __pyx_L5_argtuple_error; @@ -5643,7 +6149,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("build_fourvec", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 77, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("build_fourvec", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 80, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -5657,10 +6163,10 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_E), __pyx_ptype_5numpy_ndarray, 1, "E", 0))) __PYX_ERR(0, 77, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p), __pyx_ptype_5numpy_ndarray, 1, "p", 0))) __PYX_ERR(0, 77, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cost), __pyx_ptype_5numpy_ndarray, 1, "cost", 0))) __PYX_ERR(0, 77, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_phi), __pyx_ptype_5numpy_ndarray, 1, "phi", 0))) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_E), __pyx_ptype_5numpy_ndarray, 1, "E", 0))) __PYX_ERR(0, 80, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p), __pyx_ptype_5numpy_ndarray, 1, "p", 0))) __PYX_ERR(0, 80, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cost), __pyx_ptype_5numpy_ndarray, 1, "cost", 0))) __PYX_ERR(0, 80, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_phi), __pyx_ptype_5numpy_ndarray, 1, "phi", 0))) __PYX_ERR(0, 80, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_4build_fourvec(__pyx_self, __pyx_v_E, __pyx_v_p, __pyx_v_cost, __pyx_v_phi); /* function exit code */ @@ -5694,21 +6200,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_4build_fourvec(CYTHON_UNUSED PyObj __Pyx_Buffer __pyx_pybuffer_s; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; Py_ssize_t __pyx_t_13; Py_ssize_t __pyx_t_14; - Py_ssize_t __pyx_t_15; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -5735,96 +6240,88 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_4build_fourvec(CYTHON_UNUSED PyObj __pyx_pybuffernd_phi.rcbuffer = &__pyx_pybuffer_phi; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_E.rcbuffer->pybuffer, (PyObject*)__pyx_v_E, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_E.rcbuffer->pybuffer, (PyObject*)__pyx_v_E, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 80, __pyx_L1_error) } __pyx_pybuffernd_E.diminfo[0].strides = __pyx_pybuffernd_E.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_E.diminfo[0].shape = __pyx_pybuffernd_E.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_p.rcbuffer->pybuffer, (PyObject*)__pyx_v_p, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_p.rcbuffer->pybuffer, (PyObject*)__pyx_v_p, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 80, __pyx_L1_error) } __pyx_pybuffernd_p.diminfo[0].strides = __pyx_pybuffernd_p.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_p.diminfo[0].shape = __pyx_pybuffernd_p.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cost.rcbuffer->pybuffer, (PyObject*)__pyx_v_cost, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cost.rcbuffer->pybuffer, (PyObject*)__pyx_v_cost, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 80, __pyx_L1_error) } __pyx_pybuffernd_cost.diminfo[0].strides = __pyx_pybuffernd_cost.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cost.diminfo[0].shape = __pyx_pybuffernd_cost.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_phi.rcbuffer->pybuffer, (PyObject*)__pyx_v_phi, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_phi.rcbuffer->pybuffer, (PyObject*)__pyx_v_phi, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 80, __pyx_L1_error) } __pyx_pybuffernd_phi.diminfo[0].strides = __pyx_pybuffernd_phi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_phi.diminfo[0].shape = __pyx_pybuffernd_phi.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":80 + /* "DarkNews/Cfourvec.pyx":83 * * cdef int i,m * m = phi.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=2] s = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t,ndim=2] s = np.empty((m,4), dtype=DTYPE) * */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_phi)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_phi))[0]); - /* "DarkNews/Cfourvec.pyx":81 + /* "DarkNews/Cfourvec.pyx":84 * cdef int i,m * m = phi.shape[0] - * cdef ndarray[double,ndim=2] s = np.empty((m,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=2] s = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< * * with nogil: */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 81, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 81, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 81, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 81, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 81, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 84, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 81, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 84, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 81, __pyx_L1_error) + __PYX_ERR(0, 84, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_s.diminfo[1].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_s.diminfo[1].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":83 - * cdef ndarray[double,ndim=2] s = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":86 + * cdef np.ndarray[DTYPE_t,ndim=2] s = np.empty((m,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -5839,7 +6336,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_4build_fourvec(CYTHON_UNUSED PyObj #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":84 + /* "DarkNews/Cfourvec.pyx":87 * * with nogil: * for i in range(m): # <<<<<<<<<<<<<< @@ -5847,69 +6344,69 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_4build_fourvec(CYTHON_UNUSED PyObj * s[i,1] = p[i]*cos(phi[i])*sqrt(1.0-cost[i]*cost[i]) */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":85 + /* "DarkNews/Cfourvec.pyx":88 * with nogil: * for i in range(m): * s[i,0] = E[i] # <<<<<<<<<<<<<< * s[i,1] = p[i]*cos(phi[i])*sqrt(1.0-cost[i]*cost[i]) * s[i,2] = p[i]*sin(phi[i])*sqrt(1.0-cost[i]*cost[i]) */ + __pyx_t_9 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_s.diminfo[1].strides) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_E.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_E.diminfo[0].strides)); + __pyx_t_11 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_s.diminfo[1].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_E.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_E.diminfo[0].strides)); - /* "DarkNews/Cfourvec.pyx":86 + /* "DarkNews/Cfourvec.pyx":89 * for i in range(m): * s[i,0] = E[i] * s[i,1] = p[i]*cos(phi[i])*sqrt(1.0-cost[i]*cost[i]) # <<<<<<<<<<<<<< * s[i,2] = p[i]*sin(phi[i])*sqrt(1.0-cost[i]*cost[i]) * s[i,3] = p[i]*cost[i] */ + __pyx_t_9 = __pyx_v_i; + __pyx_t_11 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; __pyx_t_12 = __pyx_v_i; - __pyx_t_11 = __pyx_v_i; __pyx_t_13 = __pyx_v_i; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_s.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_p.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_p.diminfo[0].strides)) * cos((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_phi.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_phi.diminfo[0].strides)))) * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_cost.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_cost.diminfo[0].strides)))))); + __pyx_t_14 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_s.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_p.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_p.diminfo[0].strides)) * cos((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_phi.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_phi.diminfo[0].strides)))) * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_cost.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_cost.diminfo[0].strides)))))); - /* "DarkNews/Cfourvec.pyx":87 + /* "DarkNews/Cfourvec.pyx":90 * s[i,0] = E[i] * s[i,1] = p[i]*cos(phi[i])*sqrt(1.0-cost[i]*cost[i]) * s[i,2] = p[i]*sin(phi[i])*sqrt(1.0-cost[i]*cost[i]) # <<<<<<<<<<<<<< * s[i,3] = p[i]*cost[i] * */ - __pyx_t_13 = __pyx_v_i; - __pyx_t_11 = __pyx_v_i; __pyx_t_12 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; - __pyx_t_15 = __pyx_v_i; - __pyx_t_14 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_s.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_p.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_p.diminfo[0].strides)) * sin((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_phi.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_phi.diminfo[0].strides)))) * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_cost.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_cost.diminfo[0].strides)))))); + __pyx_t_11 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_14 = __pyx_v_i; + __pyx_t_13 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_s.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_p.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_p.diminfo[0].strides)) * sin((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_phi.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_phi.diminfo[0].strides)))) * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_cost.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_cost.diminfo[0].strides)))))); - /* "DarkNews/Cfourvec.pyx":88 + /* "DarkNews/Cfourvec.pyx":91 * s[i,1] = p[i]*cos(phi[i])*sqrt(1.0-cost[i]*cost[i]) * s[i,2] = p[i]*sin(phi[i])*sqrt(1.0-cost[i]*cost[i]) * s[i,3] = p[i]*cost[i] # <<<<<<<<<<<<<< * * return s */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_12 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; __pyx_t_11 = __pyx_v_i; - __pyx_t_13 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_p.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_p.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_cost.diminfo[0].strides))); + __pyx_t_10 = __pyx_v_i; + __pyx_t_12 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_p.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_p.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_cost.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_cost.diminfo[0].strides))); } } - /* "DarkNews/Cfourvec.pyx":83 - * cdef ndarray[double,ndim=2] s = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":86 + * cdef np.ndarray[DTYPE_t,ndim=2] s = np.empty((m,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -5927,7 +6424,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_4build_fourvec(CYTHON_UNUSED PyObj } } - /* "DarkNews/Cfourvec.pyx":90 + /* "DarkNews/Cfourvec.pyx":93 * s[i,3] = p[i]*cost[i] * * return s # <<<<<<<<<<<<<< @@ -5939,20 +6436,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_4build_fourvec(CYTHON_UNUSED PyObj __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":77 + /* "DarkNews/Cfourvec.pyx":80 * * #****************************** - * def build_fourvec(ndarray[double, ndim=1] E, ndarray[double, ndim=1] p, ndarray[double, ndim=1] cost, ndarray[double, ndim=1] phi): # <<<<<<<<<<<<<< + * def build_fourvec(np.ndarray[DTYPE_t, ndim=1] E, np.ndarray[DTYPE_t, ndim=1] p, np.ndarray[DTYPE_t, ndim=1] cost, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * * cdef int i,m */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -5979,10 +6476,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_4build_fourvec(CYTHON_UNUSED PyObj return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":93 +/* "DarkNews/Cfourvec.pyx":96 * * #****************************** - * def momentum_scalar(ndarray[double] E, double mass): # <<<<<<<<<<<<<< + * def momentum_scalar(np.ndarray[DTYPE_t, ndim=1] E, double mass): # <<<<<<<<<<<<<< * * cdef int i,m */ @@ -5995,7 +6492,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_7momentum_scalar = {"momentum_scalar", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_7momentum_scalar, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_6momentum_scalar, "momentum_scalar(ndarray E, double mass)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_7momentum_scalar = {"momentum_scalar", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_7momentum_scalar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_6momentum_scalar}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_7momentum_scalar(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -6043,7 +6541,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -6051,14 +6549,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("momentum_scalar", 1, 2, 2, 1); __PYX_ERR(0, 93, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("momentum_scalar", 1, 2, 2, 1); __PYX_ERR(0, 96, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "momentum_scalar") < 0)) __PYX_ERR(0, 93, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "momentum_scalar") < 0)) __PYX_ERR(0, 96, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -6067,11 +6565,11 @@ PyObject *__pyx_args, PyObject *__pyx_kwds values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_E = ((PyArrayObject *)values[0]); - __pyx_v_mass = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_mass == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L3_error) + __pyx_v_mass = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_mass == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("momentum_scalar", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 93, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("momentum_scalar", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 96, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -6085,7 +6583,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_E), __pyx_ptype_5numpy_ndarray, 1, "E", 0))) __PYX_ERR(0, 93, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_E), __pyx_ptype_5numpy_ndarray, 1, "E", 0))) __PYX_ERR(0, 96, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_6momentum_scalar(__pyx_self, __pyx_v_E, __pyx_v_mass); /* function exit code */ @@ -6113,18 +6611,17 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_6momentum_scalar(CYTHON_UNUSED PyO __Pyx_Buffer __pyx_pybuffer_s; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; - Py_ssize_t __pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -6139,73 +6636,65 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_6momentum_scalar(CYTHON_UNUSED PyO __pyx_pybuffernd_E.rcbuffer = &__pyx_pybuffer_E; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_E.rcbuffer->pybuffer, (PyObject*)__pyx_v_E, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 93, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_E.rcbuffer->pybuffer, (PyObject*)__pyx_v_E, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 96, __pyx_L1_error) } __pyx_pybuffernd_E.diminfo[0].strides = __pyx_pybuffernd_E.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_E.diminfo[0].shape = __pyx_pybuffernd_E.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":96 + /* "DarkNews/Cfourvec.pyx":99 * * cdef int i,m * m = E.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_E)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_E))[0]); - /* "DarkNews/Cfourvec.pyx":97 + /* "DarkNews/Cfourvec.pyx":100 * cdef int i,m * m = E.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * * with nogil: */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 97, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 97, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 97, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 100, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 97, __pyx_L1_error) + __PYX_ERR(0, 100, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":99 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":102 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -6220,7 +6709,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_6momentum_scalar(CYTHON_UNUSED PyO #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":100 + /* "DarkNews/Cfourvec.pyx":103 * * with nogil: * for i in range(m): # <<<<<<<<<<<<<< @@ -6228,26 +6717,26 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_6momentum_scalar(CYTHON_UNUSED PyO * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":101 + /* "DarkNews/Cfourvec.pyx":104 * with nogil: * for i in range(m): * s[i] = sqrt(E[i]*E[i] - mass*mass) # <<<<<<<<<<<<<< * return s * */ + __pyx_t_9 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_E.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_E.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_E.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_E.diminfo[0].strides))) - (__pyx_v_mass * __pyx_v_mass))); + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_E.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_E.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_E.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_E.diminfo[0].strides))) - (__pyx_v_mass * __pyx_v_mass))); } } - /* "DarkNews/Cfourvec.pyx":99 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":102 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -6265,7 +6754,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_6momentum_scalar(CYTHON_UNUSED PyO } } - /* "DarkNews/Cfourvec.pyx":102 + /* "DarkNews/Cfourvec.pyx":105 * for i in range(m): * s[i] = sqrt(E[i]*E[i] - mass*mass) * return s # <<<<<<<<<<<<<< @@ -6277,20 +6766,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_6momentum_scalar(CYTHON_UNUSED PyO __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":93 + /* "DarkNews/Cfourvec.pyx":96 * * #****************************** - * def momentum_scalar(ndarray[double] E, double mass): # <<<<<<<<<<<<<< + * def momentum_scalar(np.ndarray[DTYPE_t, ndim=1] E, double mass): # <<<<<<<<<<<<<< * * cdef int i,m */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -6311,10 +6800,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_6momentum_scalar(CYTHON_UNUSED PyO return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":105 +/* "DarkNews/Cfourvec.pyx":108 * * #****************************** - * def get_theta_3vec(ndarray[double, ndim=2] r): # <<<<<<<<<<<<<< + * def get_theta_3vec(np.ndarray[DTYPE_t, ndim=2] r): # <<<<<<<<<<<<<< * * cdef int i,m */ @@ -6327,7 +6816,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_9get_theta_3vec = {"get_theta_3vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_9get_theta_3vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_8get_theta_3vec, "get_theta_3vec(ndarray r)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_9get_theta_3vec = {"get_theta_3vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_9get_theta_3vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_8get_theta_3vec}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_9get_theta_3vec(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -6372,12 +6862,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 108, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_theta_3vec") < 0)) __PYX_ERR(0, 105, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_theta_3vec") < 0)) __PYX_ERR(0, 108, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -6388,7 +6878,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_theta_3vec", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 105, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_theta_3vec", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 108, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -6402,7 +6892,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_r), __pyx_ptype_5numpy_ndarray, 1, "r", 0))) __PYX_ERR(0, 105, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_r), __pyx_ptype_5numpy_ndarray, 1, "r", 0))) __PYX_ERR(0, 108, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(__pyx_self, __pyx_v_r); /* function exit code */ @@ -6430,15 +6920,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(CYTHON_UNUSED PyOb __Pyx_Buffer __pyx_pybuffer_s; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -6453,7 +6943,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(CYTHON_UNUSED PyOb Py_ssize_t __pyx_t_21; Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -6468,73 +6957,65 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(CYTHON_UNUSED PyOb __pyx_pybuffernd_r.rcbuffer = &__pyx_pybuffer_r; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_r.rcbuffer->pybuffer, (PyObject*)__pyx_v_r, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 105, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_r.rcbuffer->pybuffer, (PyObject*)__pyx_v_r, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 108, __pyx_L1_error) } __pyx_pybuffernd_r.diminfo[0].strides = __pyx_pybuffernd_r.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_r.diminfo[0].shape = __pyx_pybuffernd_r.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_r.diminfo[1].strides = __pyx_pybuffernd_r.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_r.diminfo[1].shape = __pyx_pybuffernd_r.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":108 + /* "DarkNews/Cfourvec.pyx":111 * * cdef int i,m * m = r.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_r)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 108, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_r))[0]); - /* "DarkNews/Cfourvec.pyx":109 + /* "DarkNews/Cfourvec.pyx":112 * cdef int i,m * m = r.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * * with nogil: */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 109, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 112, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 109, __pyx_L1_error) + __PYX_ERR(0, 112, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":111 - * cdef ndarray[double, ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":114 + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -6549,7 +7030,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(CYTHON_UNUSED PyOb #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":112 + /* "DarkNews/Cfourvec.pyx":115 * * with nogil: * for i in range(m): # <<<<<<<<<<<<<< @@ -6557,38 +7038,38 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(CYTHON_UNUSED PyOb * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":113 + /* "DarkNews/Cfourvec.pyx":116 * with nogil: * for i in range(m): * s[i] = acos(r[i,3]/sqrt(r[i,1]*r[i,1]+r[i,2]*r[i,2]+r[i,3]*r[i,3])) # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 3; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 3; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 3; - __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides) = acos(((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_r.diminfo[1].strides)) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_r.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_r.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_r.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_r.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_r.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_r.diminfo[1].strides))))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 3; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 3; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 3; + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_s.diminfo[0].strides) = acos(((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_r.diminfo[1].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_r.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_r.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_r.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_r.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_r.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_r.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_r.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_r.diminfo[1].strides)))))))); } } - /* "DarkNews/Cfourvec.pyx":111 - * cdef ndarray[double, ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":114 + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -6606,7 +7087,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(CYTHON_UNUSED PyOb } } - /* "DarkNews/Cfourvec.pyx":114 + /* "DarkNews/Cfourvec.pyx":117 * for i in range(m): * s[i] = acos(r[i,3]/sqrt(r[i,1]*r[i,1]+r[i,2]*r[i,2]+r[i,3]*r[i,3])) * return s # <<<<<<<<<<<<<< @@ -6618,20 +7099,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(CYTHON_UNUSED PyOb __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":105 + /* "DarkNews/Cfourvec.pyx":108 * * #****************************** - * def get_theta_3vec(ndarray[double, ndim=2] r): # <<<<<<<<<<<<<< + * def get_theta_3vec(np.ndarray[DTYPE_t, ndim=2] r): # <<<<<<<<<<<<<< * * cdef int i,m */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -6652,10 +7133,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_8get_theta_3vec(CYTHON_UNUSED PyOb return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":117 +/* "DarkNews/Cfourvec.pyx":120 * * #****************************** - * def mass(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def mass(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -6668,7 +7149,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_11mass = {"mass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_11mass, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_10mass, "mass(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_11mass = {"mass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_11mass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_10mass}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_11mass(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -6713,12 +7195,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 117, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 120, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mass") < 0)) __PYX_ERR(0, 117, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mass") < 0)) __PYX_ERR(0, 120, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -6729,7 +7211,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("mass", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 117, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("mass", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 120, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -6743,7 +7225,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 117, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 120, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_10mass(__pyx_self, __pyx_v_x); /* function exit code */ @@ -6771,15 +7253,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -6796,8 +7278,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; - int __pyx_t_27; + int __pyx_t_26; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -6812,74 +7293,66 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 117, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 120, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":119 - * def mass(ndarray[double, ndim=2] x): + /* "DarkNews/Cfourvec.pyx":122 + * def mass(np.ndarray[DTYPE_t, ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 119, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":120 + /* "DarkNews/Cfourvec.pyx":123 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 120, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 123, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 120, __pyx_L1_error) + __PYX_ERR(0, 123, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":121 + /* "DarkNews/Cfourvec.pyx":124 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,0]*x[i,0] - x[i,1]*x[i,1] - x[i,2]*x[i,2] - x[i,3]*x[i,3] @@ -6893,67 +7366,67 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":122 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":125 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = x[i,0]*x[i,0] - x[i,1]*x[i,1] - x[i,2]*x[i,2] - x[i,3]*x[i,3] * if s[i] <= 0.0: */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":123 + /* "DarkNews/Cfourvec.pyx":126 * with nogil: * for i in range(m): * s[i] = x[i,0]*x[i,0] - x[i,1]*x[i,1] - x[i,2]*x[i,2] - x[i,3]*x[i,3] # <<<<<<<<<<<<<< * if s[i] <= 0.0: * s[i]=0 */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 2; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 3; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 3; - __pyx_t_26 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_s.diminfo[0].strides) = (((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_x.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 2; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 3; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 3; + __pyx_t_25 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides) = (((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_x.diminfo[1].strides)))); } - /* "DarkNews/Cfourvec.pyx":124 + /* "DarkNews/Cfourvec.pyx":127 * for i in range(m): * s[i] = x[i,0]*x[i,0] - x[i,1]*x[i,1] - x[i,2]*x[i,2] - x[i,3]*x[i,3] * if s[i] <= 0.0: # <<<<<<<<<<<<<< * s[i]=0 * else: */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_27 = ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides)) <= 0.0); - if (__pyx_t_27) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_26 = ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides)) <= 0.0); + if (__pyx_t_26) { - /* "DarkNews/Cfourvec.pyx":125 + /* "DarkNews/Cfourvec.pyx":128 * s[i] = x[i,0]*x[i,0] - x[i,1]*x[i,1] - x[i,2]*x[i,2] - x[i,3]*x[i,3] * if s[i] <= 0.0: * s[i]=0 # <<<<<<<<<<<<<< * else: * s[i]=sqrt(s[i]) */ - __pyx_t_25 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides) = 0.0; + __pyx_t_24 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":124 + /* "DarkNews/Cfourvec.pyx":127 * for i in range(m): * s[i] = x[i,0]*x[i,0] - x[i,1]*x[i,1] - x[i,2]*x[i,2] - x[i,3]*x[i,3] * if s[i] <= 0.0: # <<<<<<<<<<<<<< @@ -6963,7 +7436,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p goto __pyx_L8; } - /* "DarkNews/Cfourvec.pyx":127 + /* "DarkNews/Cfourvec.pyx":130 * s[i]=0 * else: * s[i]=sqrt(s[i]) # <<<<<<<<<<<<<< @@ -6971,16 +7444,16 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p * */ /*else*/ { - __pyx_t_25 = __pyx_v_i; __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides))); + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides))); } __pyx_L8:; } - /* "DarkNews/Cfourvec.pyx":121 + /* "DarkNews/Cfourvec.pyx":124 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,0]*x[i,0] - x[i,1]*x[i,1] - x[i,2]*x[i,2] - x[i,3]*x[i,3] @@ -6997,7 +7470,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p } } - /* "DarkNews/Cfourvec.pyx":128 + /* "DarkNews/Cfourvec.pyx":131 * else: * s[i]=sqrt(s[i]) * return s # <<<<<<<<<<<<<< @@ -7009,20 +7482,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":117 + /* "DarkNews/Cfourvec.pyx":120 * * #****************************** - * def mass(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def mass(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -7043,10 +7516,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_10mass(CYTHON_UNUSED PyObject *__p return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":131 +/* "DarkNews/Cfourvec.pyx":134 * * #****************************** - * def inv_mass(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def inv_mass(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -7059,7 +7532,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_13inv_mass = {"inv_mass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_13inv_mass, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_12inv_mass, "inv_mass(ndarray x, ndarray y)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_13inv_mass = {"inv_mass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_13inv_mass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_12inv_mass}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_13inv_mass(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -7107,7 +7581,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 131, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 134, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -7115,14 +7589,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 131, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 134, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("inv_mass", 1, 2, 2, 1); __PYX_ERR(0, 131, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("inv_mass", 1, 2, 2, 1); __PYX_ERR(0, 134, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "inv_mass") < 0)) __PYX_ERR(0, 131, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "inv_mass") < 0)) __PYX_ERR(0, 134, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -7135,7 +7609,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("inv_mass", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 131, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("inv_mass", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 134, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -7149,8 +7623,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 131, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 131, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 134, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 134, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_12inv_mass(__pyx_self, __pyx_v_x, __pyx_v_y); /* function exit code */ @@ -7180,15 +7654,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject __Pyx_Buffer __pyx_pybuffer_y; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -7205,8 +7679,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; - int __pyx_t_27; + int __pyx_t_26; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -7225,79 +7698,71 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 131, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 134, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 131, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 134, __pyx_L1_error) } __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y.diminfo[1].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y.diminfo[1].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":133 - * def inv_mass(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): + /* "DarkNews/Cfourvec.pyx":136 + * def inv_mass(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 133, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":134 + /* "DarkNews/Cfourvec.pyx":137 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 134, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 137, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 134, __pyx_L1_error) + __PYX_ERR(0, 137, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":135 + /* "DarkNews/Cfourvec.pyx":138 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] @@ -7311,66 +7776,66 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":136 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":139 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] * if s[i] <= 0.0: */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":137 + /* "DarkNews/Cfourvec.pyx":140 * with nogil: * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] # <<<<<<<<<<<<<< * if s[i] <= 0.0: * s[i]=0 */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 2; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 3; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 3; - __pyx_t_26 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_s.diminfo[0].strides) = (((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_y.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_y.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_y.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_y.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 2; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 3; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 3; + __pyx_t_25 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides) = (((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_y.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_y.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_y.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_y.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":138 + /* "DarkNews/Cfourvec.pyx":141 * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] * if s[i] <= 0.0: # <<<<<<<<<<<<<< * s[i]=0 * else: */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_27 = ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides)) <= 0.0); - if (__pyx_t_27) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_26 = ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides)) <= 0.0); + if (__pyx_t_26) { - /* "DarkNews/Cfourvec.pyx":139 + /* "DarkNews/Cfourvec.pyx":142 * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] * if s[i] <= 0.0: * s[i]=0 # <<<<<<<<<<<<<< * else: * s[i]=sqrt(s[i]) */ - __pyx_t_25 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides) = 0.0; + __pyx_t_24 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":138 + /* "DarkNews/Cfourvec.pyx":141 * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] * if s[i] <= 0.0: # <<<<<<<<<<<<<< @@ -7380,7 +7845,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject goto __pyx_L8; } - /* "DarkNews/Cfourvec.pyx":141 + /* "DarkNews/Cfourvec.pyx":144 * s[i]=0 * else: * s[i]=sqrt(s[i]) # <<<<<<<<<<<<<< @@ -7388,17 +7853,17 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject * */ /*else*/ { - __pyx_t_25 = __pyx_v_i; __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides))); + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides))); } __pyx_L8:; } } - /* "DarkNews/Cfourvec.pyx":135 + /* "DarkNews/Cfourvec.pyx":138 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] @@ -7415,7 +7880,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject } } - /* "DarkNews/Cfourvec.pyx":142 + /* "DarkNews/Cfourvec.pyx":145 * else: * s[i]=sqrt(s[i]) * return s # <<<<<<<<<<<<<< @@ -7427,20 +7892,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":131 + /* "DarkNews/Cfourvec.pyx":134 * * #****************************** - * def inv_mass(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def inv_mass(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -7463,10 +7928,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_12inv_mass(CYTHON_UNUSED PyObject return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":145 +/* "DarkNews/Cfourvec.pyx":148 * * #****************************** - * def dot4(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dot4(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -7479,7 +7944,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_15dot4 = {"dot4", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_15dot4, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_14dot4, "dot4(ndarray x, ndarray y)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_15dot4 = {"dot4", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_15dot4, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_14dot4}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_15dot4(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -7527,7 +7993,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 145, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 148, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -7535,14 +8001,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 145, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 148, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("dot4", 1, 2, 2, 1); __PYX_ERR(0, 145, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dot4", 1, 2, 2, 1); __PYX_ERR(0, 148, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dot4") < 0)) __PYX_ERR(0, 145, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dot4") < 0)) __PYX_ERR(0, 148, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -7555,7 +8021,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("dot4", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 145, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dot4", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 148, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -7569,8 +8035,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 145, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 145, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 148, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 148, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_14dot4(__pyx_self, __pyx_v_x, __pyx_v_y); /* function exit code */ @@ -7600,15 +8066,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_14dot4(CYTHON_UNUSED PyObject *__p __Pyx_Buffer __pyx_pybuffer_y; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -7625,7 +8091,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_14dot4(CYTHON_UNUSED PyObject *__p Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -7644,79 +8109,71 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_14dot4(CYTHON_UNUSED PyObject *__p __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 145, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 148, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 145, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 148, __pyx_L1_error) } __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y.diminfo[1].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y.diminfo[1].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":147 - * def dot4(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): + /* "DarkNews/Cfourvec.pyx":150 + * def dot4(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 147, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":148 + /* "DarkNews/Cfourvec.pyx":151 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 148, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 151, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 148, __pyx_L1_error) + __PYX_ERR(0, 151, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":149 + /* "DarkNews/Cfourvec.pyx":152 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] @@ -7730,49 +8187,49 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_14dot4(CYTHON_UNUSED PyObject *__p #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":150 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":153 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":151 + /* "DarkNews/Cfourvec.pyx":154 * with nogil: * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 2; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 3; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 3; - __pyx_t_26 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_s.diminfo[0].strides) = (((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_y.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_y.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_y.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_y.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 2; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 3; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 3; + __pyx_t_25 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides) = (((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_y.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_y.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_y.diminfo[1].strides)))) - ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_y.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":149 + /* "DarkNews/Cfourvec.pyx":152 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] @@ -7789,7 +8246,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_14dot4(CYTHON_UNUSED PyObject *__p } } - /* "DarkNews/Cfourvec.pyx":152 + /* "DarkNews/Cfourvec.pyx":155 * for i in range(m): * s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] * return s # <<<<<<<<<<<<<< @@ -7801,20 +8258,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_14dot4(CYTHON_UNUSED PyObject *__p __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":145 + /* "DarkNews/Cfourvec.pyx":148 * * #****************************** - * def dot4(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dot4(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -7837,10 +8294,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_14dot4(CYTHON_UNUSED PyObject *__p return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":155 +/* "DarkNews/Cfourvec.pyx":158 * * #****************************** - * def dot3(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dot3(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -7853,7 +8310,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_17dot3 = {"dot3", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_17dot3, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_16dot3, "dot3(ndarray x, ndarray y)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_17dot3 = {"dot3", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_17dot3, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_16dot3}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_17dot3(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -7901,7 +8359,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 158, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -7909,14 +8367,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 158, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("dot3", 1, 2, 2, 1); __PYX_ERR(0, 155, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dot3", 1, 2, 2, 1); __PYX_ERR(0, 158, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dot3") < 0)) __PYX_ERR(0, 155, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dot3") < 0)) __PYX_ERR(0, 158, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -7929,7 +8387,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("dot3", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 155, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dot3", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 158, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -7943,8 +8401,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 155, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 155, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 158, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 158, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_16dot3(__pyx_self, __pyx_v_x, __pyx_v_y); /* function exit code */ @@ -7974,15 +8432,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_16dot3(CYTHON_UNUSED PyObject *__p __Pyx_Buffer __pyx_pybuffer_y; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -7995,7 +8453,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_16dot3(CYTHON_UNUSED PyObject *__p Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -8014,79 +8471,71 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_16dot3(CYTHON_UNUSED PyObject *__p __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 155, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 158, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 155, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 158, __pyx_L1_error) } __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y.diminfo[1].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y.diminfo[1].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":157 - * def dot3(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): + /* "DarkNews/Cfourvec.pyx":160 + * def dot3(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 157, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":158 + /* "DarkNews/Cfourvec.pyx":161 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 158, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 158, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 161, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 158, __pyx_L1_error) + __PYX_ERR(0, 161, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":159 + /* "DarkNews/Cfourvec.pyx":162 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3] @@ -8100,45 +8549,45 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_16dot3(CYTHON_UNUSED PyObject *__p #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":160 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":163 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3] * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":161 + /* "DarkNews/Cfourvec.pyx":164 * with nogil: * for i in range(m): * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3] # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 2; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 3; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 3; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_s.diminfo[0].strides) = ((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_y.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_y.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 2; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 3; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 3; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_s.diminfo[0].strides) = ((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_y.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_y.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":159 + /* "DarkNews/Cfourvec.pyx":162 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3] @@ -8155,7 +8604,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_16dot3(CYTHON_UNUSED PyObject *__p } } - /* "DarkNews/Cfourvec.pyx":162 + /* "DarkNews/Cfourvec.pyx":165 * for i in range(m): * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3] * return s # <<<<<<<<<<<<<< @@ -8167,20 +8616,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_16dot3(CYTHON_UNUSED PyObject *__p __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":155 + /* "DarkNews/Cfourvec.pyx":158 * * #****************************** - * def dot3(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dot3(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -8203,10 +8652,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_16dot3(CYTHON_UNUSED PyObject *__p return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":165 +/* "DarkNews/Cfourvec.pyx":168 * * #****************************** - * def dotXY(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dotXY(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -8219,7 +8668,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_19dotXY = {"dotXY", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_19dotXY, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_18dotXY, "dotXY(ndarray x, ndarray y)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_19dotXY = {"dotXY", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_19dotXY, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_18dotXY}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_19dotXY(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -8267,7 +8717,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 165, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 168, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -8275,14 +8725,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 165, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 168, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("dotXY", 1, 2, 2, 1); __PYX_ERR(0, 165, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dotXY", 1, 2, 2, 1); __PYX_ERR(0, 168, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dotXY") < 0)) __PYX_ERR(0, 165, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dotXY") < 0)) __PYX_ERR(0, 168, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -8295,7 +8745,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("dotXY", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 165, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dotXY", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 168, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -8309,8 +8759,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 165, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 165, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 168, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 168, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_18dotXY(__pyx_self, __pyx_v_x, __pyx_v_y); /* function exit code */ @@ -8340,15 +8790,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_18dotXY(CYTHON_UNUSED PyObject *__ __Pyx_Buffer __pyx_pybuffer_y; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -8357,7 +8807,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_18dotXY(CYTHON_UNUSED PyObject *__ Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -8376,79 +8825,71 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_18dotXY(CYTHON_UNUSED PyObject *__ __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 165, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 168, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 165, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 168, __pyx_L1_error) } __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y.diminfo[1].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y.diminfo[1].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":167 - * def dotXY(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): + /* "DarkNews/Cfourvec.pyx":170 + * def dotXY(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":168 + /* "DarkNews/Cfourvec.pyx":171 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 168, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 171, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 168, __pyx_L1_error) + __PYX_ERR(0, 171, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":169 + /* "DarkNews/Cfourvec.pyx":172 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] @@ -8462,41 +8903,41 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_18dotXY(CYTHON_UNUSED PyObject *__ #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":170 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":173 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":171 + /* "DarkNews/Cfourvec.pyx":174 * with nogil: * for i in range(m): * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 2; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_s.diminfo[0].strides) = (((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_y.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 2; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_s.diminfo[0].strides) = (((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_y.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":169 + /* "DarkNews/Cfourvec.pyx":172 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] @@ -8513,7 +8954,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_18dotXY(CYTHON_UNUSED PyObject *__ } } - /* "DarkNews/Cfourvec.pyx":172 + /* "DarkNews/Cfourvec.pyx":175 * for i in range(m): * s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] * return s # <<<<<<<<<<<<<< @@ -8525,20 +8966,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_18dotXY(CYTHON_UNUSED PyObject *__ __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":165 + /* "DarkNews/Cfourvec.pyx":168 * * #****************************** - * def dotXY(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dotXY(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -8561,10 +9002,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_18dotXY(CYTHON_UNUSED PyObject *__ return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":175 +/* "DarkNews/Cfourvec.pyx":178 * * #****************************** - * def dotXY_vec(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dotXY_vec(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -8577,7 +9018,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_21dotXY_vec = {"dotXY_vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_21dotXY_vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_20dotXY_vec, "dotXY_vec(ndarray x, ndarray y)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_21dotXY_vec = {"dotXY_vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_21dotXY_vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_20dotXY_vec}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_21dotXY_vec(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -8625,7 +9067,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 175, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 178, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -8633,14 +9075,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 175, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 178, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("dotXY_vec", 1, 2, 2, 1); __PYX_ERR(0, 175, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dotXY_vec", 1, 2, 2, 1); __PYX_ERR(0, 178, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dotXY_vec") < 0)) __PYX_ERR(0, 175, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dotXY_vec") < 0)) __PYX_ERR(0, 178, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -8653,7 +9095,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("dotXY_vec", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 175, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dotXY_vec", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 178, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -8667,8 +9109,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 175, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 175, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 178, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 178, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_20dotXY_vec(__pyx_self, __pyx_v_x, __pyx_v_y); /* function exit code */ @@ -8698,15 +9140,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_20dotXY_vec(CYTHON_UNUSED PyObject __Pyx_Buffer __pyx_pybuffer_y; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -8715,7 +9157,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_20dotXY_vec(CYTHON_UNUSED PyObject Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -8734,79 +9175,71 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_20dotXY_vec(CYTHON_UNUSED PyObject __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 175, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 178, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 175, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 178, __pyx_L1_error) } __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y.diminfo[1].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y.diminfo[1].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":177 - * def dotXY_vec(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): + /* "DarkNews/Cfourvec.pyx":180 + * def dotXY_vec(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":178 + /* "DarkNews/Cfourvec.pyx":181 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 178, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__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_ERR(0, 181, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 178, __pyx_L1_error) + __PYX_ERR(0, 181, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":179 + /* "DarkNews/Cfourvec.pyx":182 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,0]*y[i,0] + x[i,1]*y[i,1] @@ -8820,41 +9253,41 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_20dotXY_vec(CYTHON_UNUSED PyObject #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":180 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":183 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = x[i,0]*y[i,0] + x[i,1]*y[i,1] * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":181 + /* "DarkNews/Cfourvec.pyx":184 * with nogil: * for i in range(m): * s[i] = x[i,0]*y[i,0] + x[i,1]*y[i,1] # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_s.diminfo[0].strides) = (((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_y.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_s.diminfo[0].strides) = (((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_y.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":179 + /* "DarkNews/Cfourvec.pyx":182 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,0]*y[i,0] + x[i,1]*y[i,1] @@ -8871,7 +9304,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_20dotXY_vec(CYTHON_UNUSED PyObject } } - /* "DarkNews/Cfourvec.pyx":182 + /* "DarkNews/Cfourvec.pyx":185 * for i in range(m): * s[i] = x[i,0]*y[i,0] + x[i,1]*y[i,1] * return s # <<<<<<<<<<<<<< @@ -8883,20 +9316,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_20dotXY_vec(CYTHON_UNUSED PyObject __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":175 + /* "DarkNews/Cfourvec.pyx":178 * * #****************************** - * def dotXY_vec(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dotXY_vec(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -8919,10 +9352,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_20dotXY_vec(CYTHON_UNUSED PyObject return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":185 +/* "DarkNews/Cfourvec.pyx":188 * * #****************************** - * def getXYnorm(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def getXYnorm(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -8935,7 +9368,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_23getXYnorm = {"getXYnorm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_23getXYnorm, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_22getXYnorm, "getXYnorm(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_23getXYnorm = {"getXYnorm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_23getXYnorm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_22getXYnorm}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_23getXYnorm(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -8980,12 +9414,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 185, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 188, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "getXYnorm") < 0)) __PYX_ERR(0, 185, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "getXYnorm") < 0)) __PYX_ERR(0, 188, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -8996,7 +9430,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("getXYnorm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 185, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("getXYnorm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 188, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -9010,7 +9444,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 185, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 188, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_22getXYnorm(__pyx_self, __pyx_v_x); /* function exit code */ @@ -9038,15 +9472,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_22getXYnorm(CYTHON_UNUSED PyObject __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -9055,7 +9489,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_22getXYnorm(CYTHON_UNUSED PyObject Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -9070,74 +9503,66 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_22getXYnorm(CYTHON_UNUSED PyObject __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 185, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 188, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":187 - * def getXYnorm(ndarray[double, ndim=2] x): + /* "DarkNews/Cfourvec.pyx":190 + * def getXYnorm(np.ndarray[DTYPE_t, ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 187, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":188 + /* "DarkNews/Cfourvec.pyx":191 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 188, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 191, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 188, __pyx_L1_error) + __PYX_ERR(0, 191, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":189 + /* "DarkNews/Cfourvec.pyx":192 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2]) @@ -9151,41 +9576,41 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_22getXYnorm(CYTHON_UNUSED PyObject #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":190 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":193 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2]) * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":191 + /* "DarkNews/Cfourvec.pyx":194 * with nogil: * for i in range(m): * s[i] = sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2]) # <<<<<<<<<<<<<< * return s * #****************************** */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 2; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 2; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides))))); } } - /* "DarkNews/Cfourvec.pyx":189 + /* "DarkNews/Cfourvec.pyx":192 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2]) @@ -9202,32 +9627,32 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_22getXYnorm(CYTHON_UNUSED PyObject } } - /* "DarkNews/Cfourvec.pyx":192 + /* "DarkNews/Cfourvec.pyx":195 * for i in range(m): * s[i] = sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2]) * return s # <<<<<<<<<<<<<< * #****************************** - * def getXYnorm_3vec(ndarray[double, ndim=2] x): + * def getXYnorm_3vec(np.ndarray[DTYPE_t, ndim=2] x): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_s); __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":185 + /* "DarkNews/Cfourvec.pyx":188 * * #****************************** - * def getXYnorm(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def getXYnorm(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -9248,10 +9673,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_22getXYnorm(CYTHON_UNUSED PyObject return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":194 +/* "DarkNews/Cfourvec.pyx":197 * return s * #****************************** - * def getXYnorm_3vec(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def getXYnorm_3vec(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -9264,7 +9689,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_25getXYnorm_3vec = {"getXYnorm_3vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_25getXYnorm_3vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_24getXYnorm_3vec, "getXYnorm_3vec(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_25getXYnorm_3vec = {"getXYnorm_3vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_25getXYnorm_3vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_24getXYnorm_3vec}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_25getXYnorm_3vec(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -9309,12 +9735,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 194, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 197, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "getXYnorm_3vec") < 0)) __PYX_ERR(0, 194, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "getXYnorm_3vec") < 0)) __PYX_ERR(0, 197, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -9325,7 +9751,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("getXYnorm_3vec", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 194, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("getXYnorm_3vec", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 197, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -9339,7 +9765,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 194, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 197, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_24getXYnorm_3vec(__pyx_self, __pyx_v_x); /* function exit code */ @@ -9367,15 +9793,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_24getXYnorm_3vec(CYTHON_UNUSED PyO __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -9384,7 +9810,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_24getXYnorm_3vec(CYTHON_UNUSED PyO Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -9399,74 +9824,66 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_24getXYnorm_3vec(CYTHON_UNUSED PyO __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 194, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 197, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":196 - * def getXYnorm_3vec(ndarray[double, ndim=2] x): + /* "DarkNews/Cfourvec.pyx":199 + * def getXYnorm_3vec(np.ndarray[DTYPE_t, ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 196, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":197 + /* "DarkNews/Cfourvec.pyx":200 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 200, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 200, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 197, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 197, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 197, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 200, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 197, __pyx_L1_error) + __PYX_ERR(0, 200, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":198 + /* "DarkNews/Cfourvec.pyx":201 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1]) @@ -9480,41 +9897,41 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_24getXYnorm_3vec(CYTHON_UNUSED PyO #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":199 - * cdef ndarray[double,ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":202 + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1]) * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":200 + /* "DarkNews/Cfourvec.pyx":203 * with nogil: * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1]) # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides))))); } } - /* "DarkNews/Cfourvec.pyx":198 + /* "DarkNews/Cfourvec.pyx":201 * m= x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1]) @@ -9531,7 +9948,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_24getXYnorm_3vec(CYTHON_UNUSED PyO } } - /* "DarkNews/Cfourvec.pyx":201 + /* "DarkNews/Cfourvec.pyx":204 * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1]) * return s # <<<<<<<<<<<<<< @@ -9543,20 +9960,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_24getXYnorm_3vec(CYTHON_UNUSED PyO __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":194 + /* "DarkNews/Cfourvec.pyx":197 * return s * #****************************** - * def getXYnorm_3vec(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def getXYnorm_3vec(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -9577,10 +9994,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_24getXYnorm_3vec(CYTHON_UNUSED PyO return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":204 +/* "DarkNews/Cfourvec.pyx":207 * * #****************************** - * def get_vec_norm(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_vec_norm(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -9593,7 +10010,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_27get_vec_norm = {"get_vec_norm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_27get_vec_norm, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_26get_vec_norm, "get_vec_norm(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_27get_vec_norm = {"get_vec_norm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_27get_vec_norm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_26get_vec_norm}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_27get_vec_norm(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -9638,12 +10056,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 204, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 207, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_vec_norm") < 0)) __PYX_ERR(0, 204, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_vec_norm") < 0)) __PYX_ERR(0, 207, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -9654,7 +10072,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_vec_norm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 204, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_vec_norm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 207, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -9668,7 +10086,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 204, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 207, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_26get_vec_norm(__pyx_self, __pyx_v_x); /* function exit code */ @@ -9696,15 +10114,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_26get_vec_norm(CYTHON_UNUSED PyObj __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -9717,7 +10135,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_26get_vec_norm(CYTHON_UNUSED PyObj Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -9732,74 +10149,66 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_26get_vec_norm(CYTHON_UNUSED PyObj __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 204, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 207, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":206 - * def get_vec_norm(ndarray[double, ndim=2] x): + /* "DarkNews/Cfourvec.pyx":209 + * def get_vec_norm(np.ndarray[DTYPE_t, ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 206, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":207 + /* "DarkNews/Cfourvec.pyx":210 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 207, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 210, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 207, __pyx_L1_error) + __PYX_ERR(0, 210, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":208 + /* "DarkNews/Cfourvec.pyx":211 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1] + x[i,2]*x[i,2]) @@ -9813,45 +10222,45 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_26get_vec_norm(CYTHON_UNUSED PyObj #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":209 - * cdef ndarray[double, ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":212 + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1] + x[i,2]*x[i,2]) * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":210 + /* "DarkNews/Cfourvec.pyx":213 * with nogil: * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1] + x[i,2]*x[i,2]) # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 2; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 2; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides))))); } } - /* "DarkNews/Cfourvec.pyx":208 + /* "DarkNews/Cfourvec.pyx":211 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1] + x[i,2]*x[i,2]) @@ -9868,7 +10277,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_26get_vec_norm(CYTHON_UNUSED PyObj } } - /* "DarkNews/Cfourvec.pyx":211 + /* "DarkNews/Cfourvec.pyx":214 * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1] + x[i,2]*x[i,2]) * return s # <<<<<<<<<<<<<< @@ -9880,20 +10289,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_26get_vec_norm(CYTHON_UNUSED PyObj __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":204 + /* "DarkNews/Cfourvec.pyx":207 * * #****************************** - * def get_vec_norm(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_vec_norm(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -9914,10 +10323,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_26get_vec_norm(CYTHON_UNUSED PyObj return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":214 +/* "DarkNews/Cfourvec.pyx":217 * * #****************************** - * def get_3vec_norm(ndarray[double,ndim=2] x): # <<<<<<<<<<<<<< + * def get_3vec_norm(np.ndarray[DTYPE_t,ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -9930,7 +10339,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_29get_3vec_norm = {"get_3vec_norm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_29get_3vec_norm, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_28get_3vec_norm, "get_3vec_norm(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_29get_3vec_norm = {"get_3vec_norm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_29get_3vec_norm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_28get_3vec_norm}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_29get_3vec_norm(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -9975,12 +10385,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 214, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 217, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_3vec_norm") < 0)) __PYX_ERR(0, 214, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_3vec_norm") < 0)) __PYX_ERR(0, 217, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -9991,7 +10401,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_3vec_norm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 214, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_3vec_norm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 217, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -10005,7 +10415,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 214, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 217, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_28get_3vec_norm(__pyx_self, __pyx_v_x); /* function exit code */ @@ -10033,15 +10443,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_28get_3vec_norm(CYTHON_UNUSED PyOb __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -10054,7 +10464,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_28get_3vec_norm(CYTHON_UNUSED PyOb Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -10069,74 +10478,66 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_28get_3vec_norm(CYTHON_UNUSED PyOb __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 214, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 217, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":216 - * def get_3vec_norm(ndarray[double,ndim=2] x): + /* "DarkNews/Cfourvec.pyx":219 + * def get_3vec_norm(np.ndarray[DTYPE_t,ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":217 + /* "DarkNews/Cfourvec.pyx":220 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 220, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 217, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__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_ERR(0, 220, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 217, __pyx_L1_error) + __PYX_ERR(0, 220, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":218 + /* "DarkNews/Cfourvec.pyx":221 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) @@ -10150,45 +10551,45 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_28get_3vec_norm(CYTHON_UNUSED PyOb #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":219 - * cdef ndarray[double, ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":222 + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":220 + /* "DarkNews/Cfourvec.pyx":223 * with nogil: * for i in range(m): * s[i] = sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 2; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 3; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 3; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 2; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 3; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 3; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides))))); } } - /* "DarkNews/Cfourvec.pyx":218 + /* "DarkNews/Cfourvec.pyx":221 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) @@ -10205,7 +10606,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_28get_3vec_norm(CYTHON_UNUSED PyOb } } - /* "DarkNews/Cfourvec.pyx":221 + /* "DarkNews/Cfourvec.pyx":224 * for i in range(m): * s[i] = sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) * return s # <<<<<<<<<<<<<< @@ -10217,20 +10618,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_28get_3vec_norm(CYTHON_UNUSED PyOb __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":214 + /* "DarkNews/Cfourvec.pyx":217 * * #****************************** - * def get_3vec_norm(ndarray[double,ndim=2] x): # <<<<<<<<<<<<<< + * def get_3vec_norm(np.ndarray[DTYPE_t,ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -10251,10 +10652,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_28get_3vec_norm(CYTHON_UNUSED PyOb return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":224 +/* "DarkNews/Cfourvec.pyx":227 * * #****************************** - * def get_3norm_vec(ndarray[double,ndim=2] x): # <<<<<<<<<<<<<< + * def get_3norm_vec(np.ndarray[DTYPE_t,ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -10267,7 +10668,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_31get_3norm_vec = {"get_3norm_vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_31get_3norm_vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_30get_3norm_vec, "get_3norm_vec(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_31get_3norm_vec = {"get_3norm_vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_31get_3norm_vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_30get_3norm_vec}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_31get_3norm_vec(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -10312,12 +10714,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_3norm_vec") < 0)) __PYX_ERR(0, 224, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_3norm_vec") < 0)) __PYX_ERR(0, 227, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -10328,7 +10730,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_3norm_vec", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 224, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_3norm_vec", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 227, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -10342,7 +10744,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 224, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 227, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_30get_3norm_vec(__pyx_self, __pyx_v_x); /* function exit code */ @@ -10370,15 +10772,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_30get_3norm_vec(CYTHON_UNUSED PyOb __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -10391,7 +10793,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_30get_3norm_vec(CYTHON_UNUSED PyOb Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -10406,74 +10807,66 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_30get_3norm_vec(CYTHON_UNUSED PyOb __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 224, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 227, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":226 - * def get_3norm_vec(ndarray[double,ndim=2] x): + /* "DarkNews/Cfourvec.pyx":229 + * def get_3norm_vec(np.ndarray[DTYPE_t,ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 226, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":227 + /* "DarkNews/Cfourvec.pyx":230 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 227, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 230, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 227, __pyx_L1_error) + __PYX_ERR(0, 230, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":228 + /* "DarkNews/Cfourvec.pyx":231 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) @@ -10487,45 +10880,45 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_30get_3norm_vec(CYTHON_UNUSED PyOb #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":229 - * cdef ndarray[double, ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":232 + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":230 + /* "DarkNews/Cfourvec.pyx":233 * with nogil: * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 2; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 2; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_s.diminfo[0].strides) = sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides))))); } } - /* "DarkNews/Cfourvec.pyx":228 + /* "DarkNews/Cfourvec.pyx":231 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) @@ -10542,7 +10935,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_30get_3norm_vec(CYTHON_UNUSED PyOb } } - /* "DarkNews/Cfourvec.pyx":231 + /* "DarkNews/Cfourvec.pyx":234 * for i in range(m): * s[i] = sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * return s # <<<<<<<<<<<<<< @@ -10554,20 +10947,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_30get_3norm_vec(CYTHON_UNUSED PyOb __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":224 + /* "DarkNews/Cfourvec.pyx":227 * * #****************************** - * def get_3norm_vec(ndarray[double,ndim=2] x): # <<<<<<<<<<<<<< + * def get_3norm_vec(np.ndarray[DTYPE_t,ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -10588,10 +10981,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_30get_3norm_vec(CYTHON_UNUSED PyOb return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":234 +/* "DarkNews/Cfourvec.pyx":237 * * #****************************** - * def get_3direction_3vec(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_3direction_3vec(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -10604,7 +10997,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_33get_3direction_3vec = {"get_3direction_3vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_33get_3direction_3vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_32get_3direction_3vec, "get_3direction_3vec(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_33get_3direction_3vec = {"get_3direction_3vec", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_33get_3direction_3vec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_32get_3direction_3vec}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_33get_3direction_3vec(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -10649,12 +11043,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 234, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 237, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_3direction_3vec") < 0)) __PYX_ERR(0, 234, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_3direction_3vec") < 0)) __PYX_ERR(0, 237, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -10665,7 +11059,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_3direction_3vec", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 234, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_3direction_3vec", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 237, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -10679,7 +11073,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 234, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 237, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_32get_3direction_3vec(__pyx_self, __pyx_v_x); /* function exit code */ @@ -10707,15 +11101,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_32get_3direction_3vec(CYTHON_UNUSE __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -10731,7 +11125,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_32get_3direction_3vec(CYTHON_UNUSE Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -10746,82 +11139,74 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_32get_3direction_3vec(CYTHON_UNUSE __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 234, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 237, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":236 - * def get_3direction_3vec(ndarray[double, ndim=2] x): + /* "DarkNews/Cfourvec.pyx":239 + * def get_3direction_3vec(np.ndarray[DTYPE_t, ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 236, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":237 + /* "DarkNews/Cfourvec.pyx":240 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error); __Pyx_INCREF(__pyx_int_3); __Pyx_GIVEREF(__pyx_int_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_3)) __PYX_ERR(0, 237, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_3)) __PYX_ERR(0, 240, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 240, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 237, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 240, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 237, __pyx_L1_error) + __PYX_ERR(0, 240, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_s.diminfo[1].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_s.diminfo[1].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":238 + /* "DarkNews/Cfourvec.pyx":241 * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i,0] = x[i,0]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) @@ -10835,98 +11220,98 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_32get_3direction_3vec(CYTHON_UNUSE #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":239 - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + /* "DarkNews/Cfourvec.pyx":242 + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i,0] = x[i,0]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * s[i,1] = x[i,1]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":240 + /* "DarkNews/Cfourvec.pyx":243 * with nogil: * for i in range(m): * s[i,0] = x[i,0]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) # <<<<<<<<<<<<<< * s[i,1] = x[i,1]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * s[i,2] = x[i,2]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 0; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 1; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 2; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 2; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 0; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 1; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 2; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 2; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides))))))); - /* "DarkNews/Cfourvec.pyx":241 + /* "DarkNews/Cfourvec.pyx":244 * for i in range(m): * s[i,0] = x[i,0]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * s[i,1] = x[i,1]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) # <<<<<<<<<<<<<< * s[i,2] = x[i,2]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * return s */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_22 = 1; - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = 0; - __pyx_t_19 = __pyx_v_i; - __pyx_t_18 = 0; - __pyx_t_17 = __pyx_v_i; - __pyx_t_16 = 1; - __pyx_t_15 = __pyx_v_i; - __pyx_t_14 = 1; - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 2; - __pyx_t_11 = __pyx_v_i; - __pyx_t_10 = 2; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides)) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)))))); + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = 1; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = 0; + __pyx_t_18 = __pyx_v_i; + __pyx_t_17 = 0; + __pyx_t_16 = __pyx_v_i; + __pyx_t_15 = 1; + __pyx_t_14 = __pyx_v_i; + __pyx_t_13 = 1; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 2; + __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = 2; + __pyx_t_24 = __pyx_v_i; + __pyx_t_23 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_x.diminfo[1].strides))))))); - /* "DarkNews/Cfourvec.pyx":242 + /* "DarkNews/Cfourvec.pyx":245 * s[i,0] = x[i,0]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * s[i,1] = x[i,1]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * s[i,2] = x[i,2]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 2; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 0; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 1; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 2; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 2; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 2; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 0; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 1; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 2; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 2; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides))))))); } } - /* "DarkNews/Cfourvec.pyx":238 + /* "DarkNews/Cfourvec.pyx":241 * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i,0] = x[i,0]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) @@ -10943,7 +11328,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_32get_3direction_3vec(CYTHON_UNUSE } } - /* "DarkNews/Cfourvec.pyx":243 + /* "DarkNews/Cfourvec.pyx":246 * s[i,1] = x[i,1]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * s[i,2] = x[i,2]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) * return s # <<<<<<<<<<<<<< @@ -10955,20 +11340,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_32get_3direction_3vec(CYTHON_UNUSE __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":234 + /* "DarkNews/Cfourvec.pyx":237 * * #****************************** - * def get_3direction_3vec(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_3direction_3vec(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -10989,10 +11374,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_32get_3direction_3vec(CYTHON_UNUSE return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":246 +/* "DarkNews/Cfourvec.pyx":249 * * #****************************** - * def get_cosTheta(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_cosTheta(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -11005,7 +11390,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_35get_cosTheta = {"get_cosTheta", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_35get_cosTheta, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_34get_cosTheta, "get_cosTheta(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_35get_cosTheta = {"get_cosTheta", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_35get_cosTheta, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_34get_cosTheta}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_35get_cosTheta(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -11050,12 +11436,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_cosTheta") < 0)) __PYX_ERR(0, 246, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_cosTheta") < 0)) __PYX_ERR(0, 249, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -11066,7 +11452,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_cosTheta", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 246, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_cosTheta", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 249, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -11080,7 +11466,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 246, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 249, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_34get_cosTheta(__pyx_self, __pyx_v_x); /* function exit code */ @@ -11108,15 +11494,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_34get_cosTheta(CYTHON_UNUSED PyObj __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -11131,7 +11517,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_34get_cosTheta(CYTHON_UNUSED PyObj Py_ssize_t __pyx_t_21; Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -11146,74 +11531,66 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_34get_cosTheta(CYTHON_UNUSED PyObj __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 246, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 249, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":248 - * def get_cosTheta(ndarray[double, ndim=2] x): + /* "DarkNews/Cfourvec.pyx":251 + * def get_cosTheta(np.ndarray[DTYPE_t, ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":249 + /* "DarkNews/Cfourvec.pyx":252 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 249, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 252, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 249, __pyx_L1_error) + __PYX_ERR(0, 252, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":250 + /* "DarkNews/Cfourvec.pyx":253 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,3]/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3]) @@ -11227,47 +11604,47 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_34get_cosTheta(CYTHON_UNUSED PyObj #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":251 - * cdef ndarray[double, ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":254 + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = x[i,3]/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3]) * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":252 + /* "DarkNews/Cfourvec.pyx":255 * with nogil: * for i in range(m): * s[i] = x[i,3]/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3]) # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 3; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 3; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 3; - __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 3; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 3; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 3; + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_s.diminfo[0].strides) = ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides))))))); } } - /* "DarkNews/Cfourvec.pyx":250 + /* "DarkNews/Cfourvec.pyx":253 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = x[i,3]/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3]) @@ -11284,7 +11661,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_34get_cosTheta(CYTHON_UNUSED PyObj } } - /* "DarkNews/Cfourvec.pyx":253 + /* "DarkNews/Cfourvec.pyx":256 * for i in range(m): * s[i] = x[i,3]/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3]) * return s # <<<<<<<<<<<<<< @@ -11296,20 +11673,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_34get_cosTheta(CYTHON_UNUSED PyObj __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":246 + /* "DarkNews/Cfourvec.pyx":249 * * #****************************** - * def get_cosTheta(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_cosTheta(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -11330,10 +11707,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_34get_cosTheta(CYTHON_UNUSED PyObj return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":256 +/* "DarkNews/Cfourvec.pyx":259 * * #****************************** - * def get_cos_opening_angle(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def get_cos_opening_angle(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -11346,7 +11723,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_37get_cos_opening_angle = {"get_cos_opening_angle", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_37get_cos_opening_angle, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_36get_cos_opening_angle, "get_cos_opening_angle(ndarray x, ndarray y)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_37get_cos_opening_angle = {"get_cos_opening_angle", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_37get_cos_opening_angle, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_36get_cos_opening_angle}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_37get_cos_opening_angle(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -11394,7 +11772,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 256, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 259, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -11402,14 +11780,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 256, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 259, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("get_cos_opening_angle", 1, 2, 2, 1); __PYX_ERR(0, 256, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_cos_opening_angle", 1, 2, 2, 1); __PYX_ERR(0, 259, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_cos_opening_angle") < 0)) __PYX_ERR(0, 256, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_cos_opening_angle") < 0)) __PYX_ERR(0, 259, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -11422,7 +11800,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_cos_opening_angle", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 256, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_cos_opening_angle", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 259, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -11436,8 +11814,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 256, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 256, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 259, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(0, 259, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_36get_cos_opening_angle(__pyx_self, __pyx_v_x, __pyx_v_y); /* function exit code */ @@ -11467,15 +11845,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_36get_cos_opening_angle(CYTHON_UNU __Pyx_Buffer __pyx_pybuffer_y; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -11512,7 +11890,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_36get_cos_opening_angle(CYTHON_UNU Py_ssize_t __pyx_t_43; Py_ssize_t __pyx_t_44; Py_ssize_t __pyx_t_45; - Py_ssize_t __pyx_t_46; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -11531,79 +11908,71 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_36get_cos_opening_angle(CYTHON_UNU __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 256, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 259, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 256, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 259, __pyx_L1_error) } __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y.diminfo[1].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y.diminfo[1].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":258 - * def get_cos_opening_angle(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): + /* "DarkNews/Cfourvec.pyx":261 + * def get_cos_opening_angle(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 258, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":259 + /* "DarkNews/Cfourvec.pyx":262 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __Pyx_DECREF(__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_ERR(0, 262, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 259, __pyx_L1_error) + __PYX_ERR(0, 262, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":260 + /* "DarkNews/Cfourvec.pyx":263 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = (x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3])/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3])/sqrt(y[i,1]*y[i,1] + y[i,2]*y[i,2] + y[i,3]*y[i,3]) @@ -11617,69 +11986,69 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_36get_cos_opening_angle(CYTHON_UNU #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":261 - * cdef ndarray[double, ndim=1] s = np.empty((m)) + /* "DarkNews/Cfourvec.pyx":264 + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i] = (x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3])/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3])/sqrt(y[i,1]*y[i,1] + y[i,2]*y[i,2] + y[i,3]*y[i,3]) * return s */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":262 + /* "DarkNews/Cfourvec.pyx":265 * with nogil: * for i in range(m): * s[i] = (x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3])/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3])/sqrt(y[i,1]*y[i,1] + y[i,2]*y[i,2] + y[i,3]*y[i,3]) # <<<<<<<<<<<<<< * return s * */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 2; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 3; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 3; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 1; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 1; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = 2; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 2; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = 3; - __pyx_t_32 = __pyx_v_i; - __pyx_t_33 = 3; - __pyx_t_34 = __pyx_v_i; - __pyx_t_35 = 1; - __pyx_t_36 = __pyx_v_i; - __pyx_t_37 = 1; - __pyx_t_38 = __pyx_v_i; - __pyx_t_39 = 2; - __pyx_t_40 = __pyx_v_i; - __pyx_t_41 = 2; - __pyx_t_42 = __pyx_v_i; - __pyx_t_43 = 3; - __pyx_t_44 = __pyx_v_i; - __pyx_t_45 = 3; - __pyx_t_46 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_s.diminfo[0].strides) = ((((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_y.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_y.diminfo[1].strides)))) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_x.diminfo[1].strides)))))) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_y.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_y.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_y.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_y.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_y.diminfo[1].strides)))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 2; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 3; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 3; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 1; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 1; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = 2; + __pyx_t_27 = __pyx_v_i; + __pyx_t_28 = 2; + __pyx_t_29 = __pyx_v_i; + __pyx_t_30 = 3; + __pyx_t_31 = __pyx_v_i; + __pyx_t_32 = 3; + __pyx_t_33 = __pyx_v_i; + __pyx_t_34 = 1; + __pyx_t_35 = __pyx_v_i; + __pyx_t_36 = 1; + __pyx_t_37 = __pyx_v_i; + __pyx_t_38 = 2; + __pyx_t_39 = __pyx_v_i; + __pyx_t_40 = 2; + __pyx_t_41 = __pyx_v_i; + __pyx_t_42 = 3; + __pyx_t_43 = __pyx_v_i; + __pyx_t_44 = 3; + __pyx_t_45 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_s.diminfo[0].strides) = ((((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_y.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_y.diminfo[1].strides)))) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_x.diminfo[1].strides))))))) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_y.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_35, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_36, __pyx_pybuffernd_y.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_37, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_38, __pyx_pybuffernd_y.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_y.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_41, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_42, __pyx_pybuffernd_y.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_43, __pyx_pybuffernd_y.diminfo[0].strides, __pyx_t_44, __pyx_pybuffernd_y.diminfo[1].strides))))))); } } - /* "DarkNews/Cfourvec.pyx":260 + /* "DarkNews/Cfourvec.pyx":263 * m= x.shape[0] - * cdef ndarray[double, ndim=1] s = np.empty((m)) + * cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i] = (x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3])/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3])/sqrt(y[i,1]*y[i,1] + y[i,2]*y[i,2] + y[i,3]*y[i,3]) @@ -11696,7 +12065,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_36get_cos_opening_angle(CYTHON_UNU } } - /* "DarkNews/Cfourvec.pyx":263 + /* "DarkNews/Cfourvec.pyx":266 * for i in range(m): * s[i] = (x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3])/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3])/sqrt(y[i,1]*y[i,1] + y[i,2]*y[i,2] + y[i,3]*y[i,3]) * return s # <<<<<<<<<<<<<< @@ -11708,20 +12077,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_36get_cos_opening_angle(CYTHON_UNU __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":256 + /* "DarkNews/Cfourvec.pyx":259 * * #****************************** - * def get_cos_opening_angle(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def get_cos_opening_angle(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -11744,10 +12113,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_36get_cos_opening_angle(CYTHON_UNU return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":266 +/* "DarkNews/Cfourvec.pyx":269 * * #****************************** - * def get_3direction(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_3direction(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -11760,7 +12129,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_39get_3direction = {"get_3direction", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_39get_3direction, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_38get_3direction, "get_3direction(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_39get_3direction = {"get_3direction", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_39get_3direction, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_38get_3direction}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_39get_3direction(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -11805,12 +12175,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 266, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 269, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_3direction") < 0)) __PYX_ERR(0, 266, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_3direction") < 0)) __PYX_ERR(0, 269, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -11821,7 +12191,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_3direction", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 266, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_3direction", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 269, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -11835,7 +12205,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 266, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 269, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_38get_3direction(__pyx_self, __pyx_v_x); /* function exit code */ @@ -11863,15 +12233,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_38get_3direction(CYTHON_UNUSED PyO __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -11887,7 +12257,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_38get_3direction(CYTHON_UNUSED PyO Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -11902,82 +12271,74 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_38get_3direction(CYTHON_UNUSED PyO __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 266, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 269, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; - /* "DarkNews/Cfourvec.pyx":268 - * def get_3direction(ndarray[double, ndim=2] x): + /* "DarkNews/Cfourvec.pyx":271 + * def get_3direction(np.ndarray[DTYPE_t, ndim=2] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 268, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":269 + /* "DarkNews/Cfourvec.pyx":272 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error); __Pyx_INCREF(__pyx_int_3); __Pyx_GIVEREF(__pyx_int_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_3)) __PYX_ERR(0, 269, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_3)) __PYX_ERR(0, 272, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 272, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 269, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 272, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 269, __pyx_L1_error) + __PYX_ERR(0, 272, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_s.diminfo[1].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_s.diminfo[1].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":270 + /* "DarkNews/Cfourvec.pyx":273 * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i,0] = x[i,1]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) @@ -11991,98 +12352,98 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_38get_3direction(CYTHON_UNUSED PyO #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":271 - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + /* "DarkNews/Cfourvec.pyx":274 + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i,0] = x[i,1]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) * s[i,1] = x[i,2]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":272 + /* "DarkNews/Cfourvec.pyx":275 * with nogil: * for i in range(m): * s[i,0] = x[i,1]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) # <<<<<<<<<<<<<< * s[i,1] = x[i,2]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) * s[i,2] = x[i,3]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 3; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 3; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)))))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 3; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 3; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides))))))); - /* "DarkNews/Cfourvec.pyx":273 + /* "DarkNews/Cfourvec.pyx":276 * for i in range(m): * s[i,0] = x[i,1]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) * s[i,1] = x[i,2]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) # <<<<<<<<<<<<<< * s[i,2] = x[i,3]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) * return s */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_22 = 2; - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = 1; - __pyx_t_19 = __pyx_v_i; - __pyx_t_18 = 1; - __pyx_t_17 = __pyx_v_i; - __pyx_t_16 = 2; - __pyx_t_15 = __pyx_v_i; - __pyx_t_14 = 2; - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 3; - __pyx_t_11 = __pyx_v_i; - __pyx_t_10 = 3; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides)) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)))))); - - /* "DarkNews/Cfourvec.pyx":274 - * s[i,0] = x[i,1]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) - * s[i,1] = x[i,2]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) - * s[i,2] = x[i,3]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) # <<<<<<<<<<<<<< - * return s - * - */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 3; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = 2; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = 3; __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = 3; + __pyx_t_21 = 2; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = 1; + __pyx_t_18 = __pyx_v_i; + __pyx_t_17 = 1; + __pyx_t_16 = __pyx_v_i; + __pyx_t_15 = 2; + __pyx_t_14 = __pyx_v_i; + __pyx_t_13 = 2; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 3; + __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = 3; __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) / sqrt(((((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_x.diminfo[1].strides)))))); + __pyx_t_23 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_x.diminfo[1].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_x.diminfo[1].strides))))))); + + /* "DarkNews/Cfourvec.pyx":277 + * s[i,0] = x[i,1]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) + * s[i,1] = x[i,2]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) + * s[i,2] = x[i,3]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) # <<<<<<<<<<<<<< + * return s + * + */ + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 3; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_18 = 2; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = 3; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = 3; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_s.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_x.diminfo[1].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt(((((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_x.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_x.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x.diminfo[1].strides))))))); } } - /* "DarkNews/Cfourvec.pyx":270 + /* "DarkNews/Cfourvec.pyx":273 * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i,0] = x[i,1]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) @@ -12099,7 +12460,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_38get_3direction(CYTHON_UNUSED PyO } } - /* "DarkNews/Cfourvec.pyx":275 + /* "DarkNews/Cfourvec.pyx":278 * s[i,1] = x[i,2]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) * s[i,2] = x[i,3]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) * return s # <<<<<<<<<<<<<< @@ -12111,20 +12472,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_38get_3direction(CYTHON_UNUSED PyO __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":266 + /* "DarkNews/Cfourvec.pyx":269 * * #****************************** - * def get_3direction(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_3direction(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -12145,10 +12506,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_38get_3direction(CYTHON_UNUSED PyO return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":278 +/* "DarkNews/Cfourvec.pyx":281 * * #****************************** - * def put_in_z_axis(ndarray[double, ndim=1] x): # <<<<<<<<<<<<<< + * def put_in_z_axis(np.ndarray[DTYPE_t, ndim=1] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ @@ -12161,7 +12522,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_41put_in_z_axis = {"put_in_z_axis", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_41put_in_z_axis, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_40put_in_z_axis, "put_in_z_axis(ndarray x)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_41put_in_z_axis = {"put_in_z_axis", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_41put_in_z_axis, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_40put_in_z_axis}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_41put_in_z_axis(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -12206,12 +12568,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 278, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 281, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "put_in_z_axis") < 0)) __PYX_ERR(0, 278, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "put_in_z_axis") < 0)) __PYX_ERR(0, 281, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -12222,7 +12584,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("put_in_z_axis", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 278, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("put_in_z_axis", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 281, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -12236,7 +12598,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 278, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 281, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_40put_in_z_axis(__pyx_self, __pyx_v_x); /* function exit code */ @@ -12264,18 +12626,17 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_40put_in_z_axis(CYTHON_UNUSED PyOb __Pyx_Buffer __pyx_pybuffer_x; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; - Py_ssize_t __pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -12290,82 +12651,74 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_40put_in_z_axis(CYTHON_UNUSED PyOb __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 278, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 281, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":280 - * def put_in_z_axis(ndarray[double, ndim=1] x): + /* "DarkNews/Cfourvec.pyx":283 + * def put_in_z_axis(np.ndarray[DTYPE_t, ndim=1] x): * cdef int i,m * m= x.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 280, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_x))[0]); - /* "DarkNews/Cfourvec.pyx":281 + /* "DarkNews/Cfourvec.pyx":284 * cdef int i,m * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 281, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 284, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 281, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error); __Pyx_INCREF(__pyx_int_3); __Pyx_GIVEREF(__pyx_int_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_3)) __PYX_ERR(0, 281, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_3)) __PYX_ERR(0, 284, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 284, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 281, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 284, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 281, __pyx_L1_error) + __PYX_ERR(0, 284, __pyx_L1_error) } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_s.diminfo[1].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_s.diminfo[1].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_s = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_s = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":282 + /* "DarkNews/Cfourvec.pyx":285 * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i,0] = 0.0 @@ -12379,57 +12732,57 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_40put_in_z_axis(CYTHON_UNUSED PyOb #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":283 - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + /* "DarkNews/Cfourvec.pyx":286 + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * s[i,0] = 0.0 * s[i,1] = 0.0 */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":284 + /* "DarkNews/Cfourvec.pyx":287 * with nogil: * for i in range(m): * s[i,0] = 0.0 # <<<<<<<<<<<<<< * s[i,1] = 0.0 * s[i,2] = x[i] */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_s.diminfo[1].strides) = 0.0; + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_s.diminfo[1].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":285 + /* "DarkNews/Cfourvec.pyx":288 * for i in range(m): * s[i,0] = 0.0 * s[i,1] = 0.0 # <<<<<<<<<<<<<< * s[i,2] = x[i] * return s */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_10 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_s.diminfo[1].strides) = 0.0; + __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_s.diminfo[1].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":286 + /* "DarkNews/Cfourvec.pyx":289 * s[i,0] = 0.0 * s[i,1] = 0.0 * s[i,2] = x[i] # <<<<<<<<<<<<<< * return s * */ + __pyx_t_9 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_s.diminfo[1].strides) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_x.diminfo[0].strides)); + __pyx_t_11 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_s.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_s.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_s.diminfo[1].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_x.diminfo[0].strides)); } } - /* "DarkNews/Cfourvec.pyx":282 + /* "DarkNews/Cfourvec.pyx":285 * m= x.shape[0] - * cdef ndarray[double, ndim=2] s = np.empty((m,3)) + * cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * s[i,0] = 0.0 @@ -12446,7 +12799,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_40put_in_z_axis(CYTHON_UNUSED PyOb } } - /* "DarkNews/Cfourvec.pyx":287 + /* "DarkNews/Cfourvec.pyx":290 * s[i,1] = 0.0 * s[i,2] = x[i] * return s # <<<<<<<<<<<<<< @@ -12458,20 +12811,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_40put_in_z_axis(CYTHON_UNUSED PyOb __pyx_r = ((PyObject *)__pyx_v_s); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":278 + /* "DarkNews/Cfourvec.pyx":281 * * #****************************** - * def put_in_z_axis(ndarray[double, ndim=1] x): # <<<<<<<<<<<<<< + * def put_in_z_axis(np.ndarray[DTYPE_t, ndim=1] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -12492,10 +12845,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_40put_in_z_axis(CYTHON_UNUSED PyOb return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":290 +/* "DarkNews/Cfourvec.pyx":293 * * #****************************** - * def rotationx(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationx(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ @@ -12508,7 +12861,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_43rotationx = {"rotationx", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_43rotationx, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_42rotationx, "rotationx(ndarray v4, ndarray theta)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_43rotationx = {"rotationx", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_43rotationx, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_42rotationx}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_43rotationx(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -12556,7 +12910,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 290, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 293, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -12564,14 +12918,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 290, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 293, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("rotationx", 1, 2, 2, 1); __PYX_ERR(0, 290, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationx", 1, 2, 2, 1); __PYX_ERR(0, 293, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationx") < 0)) __PYX_ERR(0, 290, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationx") < 0)) __PYX_ERR(0, 293, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -12584,7 +12938,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rotationx", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 290, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationx", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 293, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -12598,8 +12952,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 290, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_theta), __pyx_ptype_5numpy_ndarray, 1, "theta", 0))) __PYX_ERR(0, 290, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 293, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_theta), __pyx_ptype_5numpy_ndarray, 1, "theta", 0))) __PYX_ERR(0, 293, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_42rotationx(__pyx_self, __pyx_v_v4, __pyx_v_theta); /* function exit code */ @@ -12632,16 +12986,16 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_42rotationx(CYTHON_UNUSED PyObject __Pyx_Buffer __pyx_pybuffer_v4; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; - PyArrayObject *__pyx_t_8 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_6 = NULL; + int __pyx_t_7; + int __pyx_t_8; int __pyx_t_9; - int __pyx_t_10; + Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; Py_ssize_t __pyx_t_13; @@ -12663,7 +13017,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_42rotationx(CYTHON_UNUSED PyObject Py_ssize_t __pyx_t_29; Py_ssize_t __pyx_t_30; Py_ssize_t __pyx_t_31; - Py_ssize_t __pyx_t_32; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -12686,148 +13039,133 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_42rotationx(CYTHON_UNUSED PyObject __pyx_pybuffernd_theta.rcbuffer = &__pyx_pybuffer_theta; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 290, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 293, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_theta.rcbuffer->pybuffer, (PyObject*)__pyx_v_theta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 290, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_theta.rcbuffer->pybuffer, (PyObject*)__pyx_v_theta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 293, __pyx_L1_error) } __pyx_pybuffernd_theta.diminfo[0].strides = __pyx_pybuffernd_theta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_theta.diminfo[0].shape = __pyx_pybuffernd_theta.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":294 + /* "DarkNews/Cfourvec.pyx":297 * cdef int i, m; * * m = v4.shape[0] # <<<<<<<<<<<<<< * - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 294, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4))[0]); - /* "DarkNews/Cfourvec.pyx":296 + /* "DarkNews/Cfourvec.pyx":299 * m = v4.shape[0] * - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=3] R = np.empty((m,4,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=3] R = np.empty((m,4,4), dtype=DTYPE) * */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 296, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 296, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 299, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 296, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 299, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_res = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_res.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 296, __pyx_L1_error) + __PYX_ERR(0, 299, __pyx_L1_error) } else {__pyx_pybuffernd_res.diminfo[0].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_res.diminfo[0].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_res.diminfo[1].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_res.diminfo[1].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_res = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_res = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":297 + /* "DarkNews/Cfourvec.pyx":300 * - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) - * cdef ndarray[double, ndim=3] R = np.empty((m,4,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) + * cdef np.ndarray[DTYPE_t, ndim=3] R = np.empty((m,4,4), dtype=DTYPE) # <<<<<<<<<<<<<< * * with nogil: */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 297, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 297, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 297, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 297, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(0, 297, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 297, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_4)) __PYX_ERR(0, 300, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_int_4)) __PYX_ERR(0, 297, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_int_4)) __PYX_ERR(0, 300, __pyx_L1_error); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 297, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 297, __pyx_L1_error) - __pyx_t_8 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 300, __pyx_L1_error) + __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_R.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_R.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) { __pyx_v_R = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_R.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 297, __pyx_L1_error) + __PYX_ERR(0, 300, __pyx_L1_error) } else {__pyx_pybuffernd_R.diminfo[0].strides = __pyx_pybuffernd_R.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_R.diminfo[0].shape = __pyx_pybuffernd_R.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_R.diminfo[1].strides = __pyx_pybuffernd_R.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_R.diminfo[1].shape = __pyx_pybuffernd_R.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_R.diminfo[2].strides = __pyx_pybuffernd_R.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_R.diminfo[2].shape = __pyx_pybuffernd_R.rcbuffer->pybuffer.shape[2]; } } - __pyx_t_8 = 0; + __pyx_t_6 = 0; __pyx_v_R = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; - /* "DarkNews/Cfourvec.pyx":299 - * cdef ndarray[double, ndim=3] R = np.empty((m,4,4)) + /* "DarkNews/Cfourvec.pyx":302 + * cdef np.ndarray[DTYPE_t, ndim=3] R = np.empty((m,4,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -12842,342 +13180,342 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_42rotationx(CYTHON_UNUSED PyObject #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":300 + /* "DarkNews/Cfourvec.pyx":303 * * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * R[i,0,0] = 1.0 * R[i,0,1] = 0.0 */ - __pyx_t_6 = __pyx_v_m; - __pyx_t_9 = __pyx_t_6; - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) { - __pyx_v_i = __pyx_t_10; + __pyx_t_7 = __pyx_v_m; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "DarkNews/Cfourvec.pyx":301 + /* "DarkNews/Cfourvec.pyx":304 * with nogil: * for i in range(m): * R[i,0,0] = 1.0 # <<<<<<<<<<<<<< * R[i,0,1] = 0.0 * R[i,0,2] = 0.0 */ - __pyx_t_11 = __pyx_v_i; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 0; __pyx_t_12 = 0; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides) = 1.0; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides) = 1.0; - /* "DarkNews/Cfourvec.pyx":302 + /* "DarkNews/Cfourvec.pyx":305 * for i in range(m): * R[i,0,0] = 1.0 * R[i,0,1] = 0.0 # <<<<<<<<<<<<<< * R[i,0,2] = 0.0 * R[i,0,3] = 0.0 */ - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 0; - __pyx_t_11 = 1; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 0; + __pyx_t_10 = 1; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_10, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":303 + /* "DarkNews/Cfourvec.pyx":306 * R[i,0,0] = 1.0 * R[i,0,1] = 0.0 * R[i,0,2] = 0.0 # <<<<<<<<<<<<<< * R[i,0,3] = 0.0 * */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = 0; - __pyx_t_13 = 2; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 0; + __pyx_t_12 = 2; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":304 + /* "DarkNews/Cfourvec.pyx":307 * R[i,0,1] = 0.0 * R[i,0,2] = 0.0 * R[i,0,3] = 0.0 # <<<<<<<<<<<<<< * * R[i,1,0] = 0.0 */ - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 0; - __pyx_t_11 = 3; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 0; + __pyx_t_10 = 3; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_10, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":306 + /* "DarkNews/Cfourvec.pyx":309 * R[i,0,3] = 0.0 * * R[i,1,0] = 0.0 # <<<<<<<<<<<<<< * R[i,1,1] = 1.0 * R[i,1,2] = 0.0 */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = 1; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 1; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":307 + /* "DarkNews/Cfourvec.pyx":310 * * R[i,1,0] = 0.0 * R[i,1,1] = 1.0 # <<<<<<<<<<<<<< * R[i,1,2] = 0.0 * R[i,1,3] = 0.0 */ - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 1; + __pyx_t_12 = __pyx_v_i; __pyx_t_11 = 1; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[2].strides) = 1.0; + __pyx_t_10 = 1; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_10, __pyx_pybuffernd_R.diminfo[2].strides) = 1.0; - /* "DarkNews/Cfourvec.pyx":308 + /* "DarkNews/Cfourvec.pyx":311 * R[i,1,0] = 0.0 * R[i,1,1] = 1.0 * R[i,1,2] = 0.0 # <<<<<<<<<<<<<< * R[i,1,3] = 0.0 * */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = 1; - __pyx_t_13 = 2; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 1; + __pyx_t_12 = 2; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":309 + /* "DarkNews/Cfourvec.pyx":312 * R[i,1,1] = 1.0 * R[i,1,2] = 0.0 * R[i,1,3] = 0.0 # <<<<<<<<<<<<<< * * R[i,2,0] = 0.0 */ - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 1; - __pyx_t_11 = 3; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 1; + __pyx_t_10 = 3; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_10, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":311 + /* "DarkNews/Cfourvec.pyx":314 * R[i,1,3] = 0.0 * * R[i,2,0] = 0.0 # <<<<<<<<<<<<<< * R[i,2,1] = 0.0 * R[i,2,2] = cos(theta[i]) */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = 2; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 2; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":312 + /* "DarkNews/Cfourvec.pyx":315 * * R[i,2,0] = 0.0 * R[i,2,1] = 0.0 # <<<<<<<<<<<<<< * R[i,2,2] = cos(theta[i]) * R[i,2,3] = -sin(theta[i]) */ - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 2; - __pyx_t_11 = 1; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 2; + __pyx_t_10 = 1; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_10, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":313 + /* "DarkNews/Cfourvec.pyx":316 * R[i,2,0] = 0.0 * R[i,2,1] = 0.0 * R[i,2,2] = cos(theta[i]) # <<<<<<<<<<<<<< * R[i,2,3] = -sin(theta[i]) * */ + __pyx_t_10 = __pyx_v_i; __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = __pyx_v_i; + __pyx_t_12 = 2; __pyx_t_13 = 2; - __pyx_t_14 = 2; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_14, __pyx_pybuffernd_R.diminfo[2].strides) = cos((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides))); + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides) = cos((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_theta.diminfo[0].strides))); - /* "DarkNews/Cfourvec.pyx":314 + /* "DarkNews/Cfourvec.pyx":317 * R[i,2,1] = 0.0 * R[i,2,2] = cos(theta[i]) * R[i,2,3] = -sin(theta[i]) # <<<<<<<<<<<<<< * * R[i,3,0] = 0.0 */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_14 = __pyx_v_i; - __pyx_t_13 = 2; - __pyx_t_12 = 3; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides) = (-sin((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides)))); + __pyx_t_10 = __pyx_v_i; + __pyx_t_13 = __pyx_v_i; + __pyx_t_12 = 2; + __pyx_t_11 = 3; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[2].strides) = (-sin((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_theta.diminfo[0].strides)))); - /* "DarkNews/Cfourvec.pyx":316 + /* "DarkNews/Cfourvec.pyx":319 * R[i,2,3] = -sin(theta[i]) * * R[i,3,0] = 0.0 # <<<<<<<<<<<<<< * R[i,3,1] = 0.0 * R[i,3,2] = sin(theta[i]) */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = 3; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 3; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":317 + /* "DarkNews/Cfourvec.pyx":320 * * R[i,3,0] = 0.0 * R[i,3,1] = 0.0 # <<<<<<<<<<<<<< * R[i,3,2] = sin(theta[i]) * R[i,3,3] = cos(theta[i]) */ - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 3; - __pyx_t_11 = 1; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 3; + __pyx_t_10 = 1; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_10, __pyx_pybuffernd_R.diminfo[2].strides) = 0.0; - /* "DarkNews/Cfourvec.pyx":318 + /* "DarkNews/Cfourvec.pyx":321 * R[i,3,0] = 0.0 * R[i,3,1] = 0.0 * R[i,3,2] = sin(theta[i]) # <<<<<<<<<<<<<< * R[i,3,3] = cos(theta[i]) * */ + __pyx_t_10 = __pyx_v_i; __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 3; - __pyx_t_14 = 2; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_14, __pyx_pybuffernd_R.diminfo[2].strides) = sin((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides))); + __pyx_t_12 = 3; + __pyx_t_13 = 2; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides) = sin((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_theta.diminfo[0].strides))); - /* "DarkNews/Cfourvec.pyx":319 + /* "DarkNews/Cfourvec.pyx":322 * R[i,3,1] = 0.0 * R[i,3,2] = sin(theta[i]) * R[i,3,3] = cos(theta[i]) # <<<<<<<<<<<<<< * * res[i,0] = R[i,0,0]*v4[i,0] + R[i,0,1]*v4[i,1] + R[i,0,2]*v4[i,2] + R[i,0,3]*v4[i,3] */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_14 = __pyx_v_i; - __pyx_t_13 = 3; + __pyx_t_10 = __pyx_v_i; + __pyx_t_13 = __pyx_v_i; __pyx_t_12 = 3; - *__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides) = cos((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides))); + __pyx_t_11 = 3; + *__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[2].strides) = cos((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_theta.diminfo[0].strides))); - /* "DarkNews/Cfourvec.pyx":321 + /* "DarkNews/Cfourvec.pyx":324 * R[i,3,3] = cos(theta[i]) * * res[i,0] = R[i,0,0]*v4[i,0] + R[i,0,1]*v4[i,1] + R[i,0,2]*v4[i,2] + R[i,0,3]*v4[i,3] # <<<<<<<<<<<<<< * res[i,1] = R[i,1,0]*v4[i,0] + R[i,1,1]*v4[i,1] + R[i,1,2]*v4[i,2] + R[i,1,3]*v4[i,3] * res[i,2] = R[i,2,0]*v4[i,0] + R[i,2,1]*v4[i,1] + R[i,2,2]*v4[i,2] + R[i,2,3]*v4[i,3] */ - __pyx_t_11 = __pyx_v_i; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 0; __pyx_t_12 = 0; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 0; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 0; - __pyx_t_18 = 1; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = 1; - __pyx_t_21 = __pyx_v_i; - __pyx_t_22 = 0; - __pyx_t_23 = 2; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 2; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = 0; - __pyx_t_28 = 3; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = 3; - __pyx_t_31 = __pyx_v_i; - __pyx_t_32 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_res.diminfo[1].strides) = (((((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_28, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 0; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 0; + __pyx_t_17 = 1; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = 1; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = 0; + __pyx_t_22 = 2; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 2; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_27 = 3; + __pyx_t_28 = __pyx_v_i; + __pyx_t_29 = 3; + __pyx_t_30 = __pyx_v_i; + __pyx_t_31 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_res.diminfo[1].strides) = (((((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_17, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":322 + /* "DarkNews/Cfourvec.pyx":325 * * res[i,0] = R[i,0,0]*v4[i,0] + R[i,0,1]*v4[i,1] + R[i,0,2]*v4[i,2] + R[i,0,3]*v4[i,3] * res[i,1] = R[i,1,0]*v4[i,0] + R[i,1,1]*v4[i,1] + R[i,1,2]*v4[i,2] + R[i,1,3]*v4[i,3] # <<<<<<<<<<<<<< * res[i,2] = R[i,2,0]*v4[i,0] + R[i,2,1]*v4[i,1] + R[i,2,2]*v4[i,2] + R[i,2,3]*v4[i,3] * res[i,3] = R[i,3,0]*v4[i,0] + R[i,3,1]*v4[i,1] + R[i,3,2]*v4[i,2] + R[i,3,3]*v4[i,3] */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = 1; - __pyx_t_28 = 0; - __pyx_t_27 = __pyx_v_i; - __pyx_t_26 = 0; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = 1; + __pyx_t_29 = __pyx_v_i; + __pyx_t_28 = 1; + __pyx_t_27 = 0; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_24 = __pyx_v_i; __pyx_t_23 = 1; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = 1; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = 1; - __pyx_t_18 = 2; - __pyx_t_17 = __pyx_v_i; - __pyx_t_16 = 2; - __pyx_t_15 = __pyx_v_i; - __pyx_t_14 = 1; - __pyx_t_13 = 3; - __pyx_t_12 = __pyx_v_i; - __pyx_t_11 = 3; - __pyx_t_32 = __pyx_v_i; - __pyx_t_31 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_res.diminfo[1].strides) = (((((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_28, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_22 = 1; + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = 1; + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = 1; + __pyx_t_17 = 2; + __pyx_t_16 = __pyx_v_i; + __pyx_t_15 = 2; + __pyx_t_14 = __pyx_v_i; + __pyx_t_13 = 1; + __pyx_t_12 = 3; + __pyx_t_11 = __pyx_v_i; + __pyx_t_10 = 3; + __pyx_t_31 = __pyx_v_i; + __pyx_t_30 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_res.diminfo[1].strides) = (((((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_17, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":323 + /* "DarkNews/Cfourvec.pyx":326 * res[i,0] = R[i,0,0]*v4[i,0] + R[i,0,1]*v4[i,1] + R[i,0,2]*v4[i,2] + R[i,0,3]*v4[i,3] * res[i,1] = R[i,1,0]*v4[i,0] + R[i,1,1]*v4[i,1] + R[i,1,2]*v4[i,2] + R[i,1,3]*v4[i,3] * res[i,2] = R[i,2,0]*v4[i,0] + R[i,2,1]*v4[i,1] + R[i,2,2]*v4[i,2] + R[i,2,3]*v4[i,3] # <<<<<<<<<<<<<< * res[i,3] = R[i,3,0]*v4[i,0] + R[i,3,1]*v4[i,1] + R[i,3,2]*v4[i,2] + R[i,3,3]*v4[i,3] * */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = 2; - __pyx_t_13 = 0; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 0; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 2; - __pyx_t_18 = 1; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = 1; - __pyx_t_21 = __pyx_v_i; + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 2; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 0; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 2; + __pyx_t_17 = 1; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = 1; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = 2; __pyx_t_22 = 2; - __pyx_t_23 = 2; - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 2; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = 2; - __pyx_t_28 = 3; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = 3; - __pyx_t_31 = __pyx_v_i; - __pyx_t_32 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_res.diminfo[1].strides) = (((((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_28, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = 2; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = 2; + __pyx_t_27 = 3; + __pyx_t_28 = __pyx_v_i; + __pyx_t_29 = 3; + __pyx_t_30 = __pyx_v_i; + __pyx_t_31 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_res.diminfo[1].strides) = (((((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_17, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":324 + /* "DarkNews/Cfourvec.pyx":327 * res[i,1] = R[i,1,0]*v4[i,0] + R[i,1,1]*v4[i,1] + R[i,1,2]*v4[i,2] + R[i,1,3]*v4[i,3] * res[i,2] = R[i,2,0]*v4[i,0] + R[i,2,1]*v4[i,1] + R[i,2,2]*v4[i,2] + R[i,2,3]*v4[i,3] * res[i,3] = R[i,3,0]*v4[i,0] + R[i,3,1]*v4[i,1] + R[i,3,2]*v4[i,2] + R[i,3,3]*v4[i,3] # <<<<<<<<<<<<<< * * return res */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = 3; - __pyx_t_28 = 0; - __pyx_t_27 = __pyx_v_i; - __pyx_t_26 = 0; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = 3; - __pyx_t_23 = 1; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = 1; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = 3; - __pyx_t_18 = 2; - __pyx_t_17 = __pyx_v_i; - __pyx_t_16 = 2; - __pyx_t_15 = __pyx_v_i; - __pyx_t_14 = 3; + __pyx_t_29 = __pyx_v_i; + __pyx_t_28 = 3; + __pyx_t_27 = 0; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_23 = 3; + __pyx_t_22 = 1; + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = 1; + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = 3; + __pyx_t_17 = 2; + __pyx_t_16 = __pyx_v_i; + __pyx_t_15 = 2; + __pyx_t_14 = __pyx_v_i; __pyx_t_13 = 3; - __pyx_t_12 = __pyx_v_i; - __pyx_t_11 = 3; - __pyx_t_32 = __pyx_v_i; - __pyx_t_31 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_res.diminfo[1].strides) = (((((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_28, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_12 = 3; + __pyx_t_11 = __pyx_v_i; + __pyx_t_10 = 3; + __pyx_t_31 = __pyx_v_i; + __pyx_t_30 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_res.diminfo[1].strides) = (((((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_17, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)))) + ((*__Pyx_BufPtrStrided3d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_R.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_R.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_R.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_R.diminfo[2].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":299 - * cdef ndarray[double, ndim=3] R = np.empty((m,4,4)) + /* "DarkNews/Cfourvec.pyx":302 + * cdef np.ndarray[DTYPE_t, ndim=3] R = np.empty((m,4,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -13195,7 +13533,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_42rotationx(CYTHON_UNUSED PyObject } } - /* "DarkNews/Cfourvec.pyx":326 + /* "DarkNews/Cfourvec.pyx":329 * res[i,3] = R[i,3,0]*v4[i,0] + R[i,3,1]*v4[i,1] + R[i,3,2]*v4[i,2] + R[i,3,3]*v4[i,3] * * return res # <<<<<<<<<<<<<< @@ -13207,20 +13545,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_42rotationx(CYTHON_UNUSED PyObject __pyx_r = ((PyObject *)__pyx_v_res); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":290 + /* "DarkNews/Cfourvec.pyx":293 * * #****************************** - * def rotationx(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationx(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -13246,10 +13584,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_42rotationx(CYTHON_UNUSED PyObject return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":329 +/* "DarkNews/Cfourvec.pyx":332 * * #****************************** - * def rotationy(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationy(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ @@ -13262,7 +13600,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_45rotationy = {"rotationy", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_45rotationy, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_44rotationy, "rotationy(ndarray v4, ndarray theta)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_45rotationy = {"rotationy", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_45rotationy, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_44rotationy}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_45rotationy(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -13310,7 +13649,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 329, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 332, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -13318,14 +13657,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 329, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 332, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("rotationy", 1, 2, 2, 1); __PYX_ERR(0, 329, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationy", 1, 2, 2, 1); __PYX_ERR(0, 332, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationy") < 0)) __PYX_ERR(0, 329, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationy") < 0)) __PYX_ERR(0, 332, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -13338,7 +13677,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rotationy", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 329, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationy", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 332, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -13352,8 +13691,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 329, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_theta), __pyx_ptype_5numpy_ndarray, 1, "theta", 0))) __PYX_ERR(0, 329, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 332, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_theta), __pyx_ptype_5numpy_ndarray, 1, "theta", 0))) __PYX_ERR(0, 332, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_44rotationy(__pyx_self, __pyx_v_v4, __pyx_v_theta); /* function exit code */ @@ -13383,15 +13722,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_44rotationy(CYTHON_UNUSED PyObject __Pyx_Buffer __pyx_pybuffer_v4; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -13399,7 +13738,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_44rotationy(CYTHON_UNUSED PyObject Py_ssize_t __pyx_t_14; Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; - Py_ssize_t __pyx_t_17; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -13418,86 +13756,78 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_44rotationy(CYTHON_UNUSED PyObject __pyx_pybuffernd_theta.rcbuffer = &__pyx_pybuffer_theta; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 329, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 332, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_theta.rcbuffer->pybuffer, (PyObject*)__pyx_v_theta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 329, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_theta.rcbuffer->pybuffer, (PyObject*)__pyx_v_theta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 332, __pyx_L1_error) } __pyx_pybuffernd_theta.diminfo[0].strides = __pyx_pybuffernd_theta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_theta.diminfo[0].shape = __pyx_pybuffernd_theta.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":332 + /* "DarkNews/Cfourvec.pyx":335 * * cdef int i, m; * m = v4.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 332, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4))[0]); - /* "DarkNews/Cfourvec.pyx":333 + /* "DarkNews/Cfourvec.pyx":336 * cdef int i, m; * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< * * with nogil: */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 333, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 333, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 333, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 336, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 333, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 336, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_res = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_res.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 333, __pyx_L1_error) + __PYX_ERR(0, 336, __pyx_L1_error) } else {__pyx_pybuffernd_res.diminfo[0].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_res.diminfo[0].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_res.diminfo[1].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_res.diminfo[1].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_res = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_res = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":335 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":338 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -13512,7 +13842,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_44rotationy(CYTHON_UNUSED PyObject #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":336 + /* "DarkNews/Cfourvec.pyx":339 * * with nogil: * for i in range(m): # <<<<<<<<<<<<<< @@ -13520,74 +13850,74 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_44rotationy(CYTHON_UNUSED PyObject * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,3] */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":337 + /* "DarkNews/Cfourvec.pyx":340 * with nogil: * for i in range(m): * res[i,0] = v4[i,0] # <<<<<<<<<<<<<< * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,3] * res[i,2] = v4[i,2] */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":338 + /* "DarkNews/Cfourvec.pyx":341 * for i in range(m): * res[i,0] = v4[i,0] * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,3] # <<<<<<<<<<<<<< * res[i,2] = v4[i,2] * res[i,3] = sin(theta[i])*v4[i,1] + cos(theta[i])*v4[i,3] */ - __pyx_t_11 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 3; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = ((cos((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) - (sin((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 3; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = ((cos((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) - (sin((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":339 + /* "DarkNews/Cfourvec.pyx":342 * res[i,0] = v4[i,0] * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,3] * res[i,2] = v4[i,2] # <<<<<<<<<<<<<< * res[i,3] = sin(theta[i])*v4[i,1] + cos(theta[i])*v4[i,3] * */ - __pyx_t_15 = __pyx_v_i; - __pyx_t_14 = 2; - __pyx_t_12 = __pyx_v_i; + __pyx_t_14 = __pyx_v_i; __pyx_t_13 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":340 + /* "DarkNews/Cfourvec.pyx":343 * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,3] * res[i,2] = v4[i,2] * res[i,3] = sin(theta[i])*v4[i,1] + cos(theta[i])*v4[i,3] # <<<<<<<<<<<<<< * * return res */ + __pyx_t_13 = __pyx_v_i; __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 3; - __pyx_t_17 = __pyx_v_i; - __pyx_t_16 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = ((sin((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) + (cos((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_12 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 3; + __pyx_t_16 = __pyx_v_i; + __pyx_t_15 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_res.diminfo[1].strides) = ((sin((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) + (cos((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":335 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":338 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -13605,32 +13935,32 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_44rotationy(CYTHON_UNUSED PyObject } } - /* "DarkNews/Cfourvec.pyx":342 + /* "DarkNews/Cfourvec.pyx":345 * res[i,3] = sin(theta[i])*v4[i,1] + cos(theta[i])*v4[i,3] * * return res # <<<<<<<<<<<<<< * #****************************** - * def rotationy_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): + * def rotationy_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_res); __pyx_r = ((PyObject *)__pyx_v_res); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":329 + /* "DarkNews/Cfourvec.pyx":332 * * #****************************** - * def rotationy(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationy(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -13653,10 +13983,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_44rotationy(CYTHON_UNUSED PyObject return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":344 +/* "DarkNews/Cfourvec.pyx":347 * return res * #****************************** - * def rotationy_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): # <<<<<<<<<<<<<< + * def rotationy_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): # <<<<<<<<<<<<<< * * cdef int i, m; */ @@ -13669,7 +13999,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_47rotationy_sin = {"rotationy_sin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_47rotationy_sin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_46rotationy_sin, "rotationy_sin(ndarray v4, ndarray stheta)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_47rotationy_sin = {"rotationy_sin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_47rotationy_sin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_46rotationy_sin}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_47rotationy_sin(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -13717,7 +14048,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 344, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -13725,14 +14056,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 344, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("rotationy_sin", 1, 2, 2, 1); __PYX_ERR(0, 344, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationy_sin", 1, 2, 2, 1); __PYX_ERR(0, 347, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationy_sin") < 0)) __PYX_ERR(0, 344, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationy_sin") < 0)) __PYX_ERR(0, 347, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -13745,7 +14076,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rotationy_sin", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 344, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationy_sin", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 347, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -13759,8 +14090,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 344, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_stheta), __pyx_ptype_5numpy_ndarray, 1, "stheta", 0))) __PYX_ERR(0, 344, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 347, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_stheta), __pyx_ptype_5numpy_ndarray, 1, "stheta", 0))) __PYX_ERR(0, 347, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_46rotationy_sin(__pyx_self, __pyx_v_v4, __pyx_v_stheta); /* function exit code */ @@ -13790,15 +14121,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_46rotationy_sin(CYTHON_UNUSED PyOb __Pyx_Buffer __pyx_pybuffer_v4; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -13807,7 +14138,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_46rotationy_sin(CYTHON_UNUSED PyOb Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -13826,86 +14156,78 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_46rotationy_sin(CYTHON_UNUSED PyOb __pyx_pybuffernd_stheta.rcbuffer = &__pyx_pybuffer_stheta; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 344, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 347, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_stheta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 344, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_stheta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 347, __pyx_L1_error) } __pyx_pybuffernd_stheta.diminfo[0].strides = __pyx_pybuffernd_stheta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stheta.diminfo[0].shape = __pyx_pybuffernd_stheta.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":347 + /* "DarkNews/Cfourvec.pyx":350 * * cdef int i, m; * m = v4.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4))[0]); - /* "DarkNews/Cfourvec.pyx":348 + /* "DarkNews/Cfourvec.pyx":351 * cdef int i, m; * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< * * with nogil: */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 348, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 348, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 348, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 351, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 351, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 348, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 348, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 351, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_res = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_res.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 348, __pyx_L1_error) + __PYX_ERR(0, 351, __pyx_L1_error) } else {__pyx_pybuffernd_res.diminfo[0].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_res.diminfo[0].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_res.diminfo[1].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_res.diminfo[1].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_res = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_res = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":350 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":353 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -13920,7 +14242,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_46rotationy_sin(CYTHON_UNUSED PyOb #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":351 + /* "DarkNews/Cfourvec.pyx":354 * * with nogil: * for i in range(m): # <<<<<<<<<<<<<< @@ -13928,76 +14250,76 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_46rotationy_sin(CYTHON_UNUSED PyOb * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,3] */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":352 + /* "DarkNews/Cfourvec.pyx":355 * with nogil: * for i in range(m): * res[i,0] = v4[i,0] # <<<<<<<<<<<<<< * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,3] * res[i,2] = v4[i,2] */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":353 + /* "DarkNews/Cfourvec.pyx":356 * for i in range(m): * res[i,0] = v4[i,0] * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,3] # <<<<<<<<<<<<<< * res[i,2] = v4[i,2] * res[i,3] = stheta[i]*v4[i,1] + sqrt(1.0-stheta[i]*stheta[i])*v4[i,3] */ - __pyx_t_11 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 1; __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 1; __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = __pyx_v_i; - __pyx_t_16 = 3; - __pyx_t_17 = __pyx_v_i; - __pyx_t_18 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_res.diminfo[1].strides) = ((sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_stheta.diminfo[0].strides))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_15 = 3; + __pyx_t_16 = __pyx_v_i; + __pyx_t_17 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = ((sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_stheta.diminfo[0].strides))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":354 + /* "DarkNews/Cfourvec.pyx":357 * res[i,0] = v4[i,0] * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,3] * res[i,2] = v4[i,2] # <<<<<<<<<<<<<< * res[i,3] = stheta[i]*v4[i,1] + sqrt(1.0-stheta[i]*stheta[i])*v4[i,3] * */ - __pyx_t_16 = __pyx_v_i; - __pyx_t_15 = 2; - __pyx_t_14 = __pyx_v_i; - __pyx_t_12 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_15 = __pyx_v_i; + __pyx_t_14 = 2; + __pyx_t_13 = __pyx_v_i; + __pyx_t_11 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":355 + /* "DarkNews/Cfourvec.pyx":358 * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,3] * res[i,2] = v4[i,2] * res[i,3] = stheta[i]*v4[i,1] + sqrt(1.0-stheta[i]*stheta[i])*v4[i,3] # <<<<<<<<<<<<<< * * return res */ - __pyx_t_15 = __pyx_v_i; - __pyx_t_16 = __pyx_v_i; - __pyx_t_12 = 1; __pyx_t_14 = __pyx_v_i; + __pyx_t_15 = __pyx_v_i; + __pyx_t_11 = 1; __pyx_t_13 = __pyx_v_i; - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 3; - __pyx_t_18 = __pyx_v_i; - __pyx_t_17 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) + (sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_stheta.diminfo[0].strides))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_12 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 3; + __pyx_t_17 = __pyx_v_i; + __pyx_t_16 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides))) + (sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_stheta.diminfo[0].strides))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":350 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":353 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -14015,32 +14337,32 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_46rotationy_sin(CYTHON_UNUSED PyOb } } - /* "DarkNews/Cfourvec.pyx":357 + /* "DarkNews/Cfourvec.pyx":360 * res[i,3] = stheta[i]*v4[i,1] + sqrt(1.0-stheta[i]*stheta[i])*v4[i,3] * * return res # <<<<<<<<<<<<<< * #****************************** - * def rotationy_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign=1): + * def rotationy_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign=1): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_res); __pyx_r = ((PyObject *)__pyx_v_res); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":344 + /* "DarkNews/Cfourvec.pyx":347 * return res * #****************************** - * def rotationy_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): # <<<<<<<<<<<<<< + * def rotationy_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): # <<<<<<<<<<<<<< * * cdef int i, m; */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -14063,10 +14385,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_46rotationy_sin(CYTHON_UNUSED PyOb return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":359 +/* "DarkNews/Cfourvec.pyx":362 * return res * #****************************** - * def rotationy_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign=1): # <<<<<<<<<<<<<< + * def rotationy_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign=1): # <<<<<<<<<<<<<< * * cdef int i, m; */ @@ -14079,7 +14401,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_49rotationy_cos = {"rotationy_cos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_49rotationy_cos, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_48rotationy_cos, "rotationy_cos(ndarray v4, ndarray ctheta, int sign=1)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_49rotationy_cos = {"rotationy_cos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_49rotationy_cos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_48rotationy_cos}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_49rotationy_cos(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -14130,7 +14453,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 362, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -14138,21 +14461,21 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 362, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("rotationy_cos", 0, 2, 3, 1); __PYX_ERR(0, 359, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationy_cos", 0, 2, 3, 1); __PYX_ERR(0, 362, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sign); if (value) { values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 362, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationy_cos") < 0)) __PYX_ERR(0, 359, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationy_cos") < 0)) __PYX_ERR(0, 362, __pyx_L3_error) } } else { switch (__pyx_nargs) { @@ -14167,14 +14490,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __pyx_v_v4 = ((PyArrayObject *)values[0]); __pyx_v_ctheta = ((PyArrayObject *)values[1]); if (values[2]) { - __pyx_v_sign = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_sign == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 359, __pyx_L3_error) + __pyx_v_sign = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_sign == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 362, __pyx_L3_error) } else { __pyx_v_sign = ((int)((int)1)); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rotationy_cos", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 359, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationy_cos", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 362, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -14188,8 +14511,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 359, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ctheta), __pyx_ptype_5numpy_ndarray, 1, "ctheta", 0))) __PYX_ERR(0, 359, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 362, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ctheta), __pyx_ptype_5numpy_ndarray, 1, "ctheta", 0))) __PYX_ERR(0, 362, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(__pyx_self, __pyx_v_v4, __pyx_v_ctheta, __pyx_v_sign); /* function exit code */ @@ -14219,15 +14542,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(CYTHON_UNUSED PyOb __Pyx_Buffer __pyx_pybuffer_v4; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -14236,7 +14559,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(CYTHON_UNUSED PyOb Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -14255,86 +14577,78 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(CYTHON_UNUSED PyOb __pyx_pybuffernd_ctheta.rcbuffer = &__pyx_pybuffer_ctheta; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 359, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 362, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ctheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_ctheta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 359, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ctheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_ctheta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 362, __pyx_L1_error) } __pyx_pybuffernd_ctheta.diminfo[0].strides = __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ctheta.diminfo[0].shape = __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":362 + /* "DarkNews/Cfourvec.pyx":365 * * cdef int i, m; * m = v4.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 362, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4))[0]); - /* "DarkNews/Cfourvec.pyx":363 + /* "DarkNews/Cfourvec.pyx":366 * cdef int i, m; * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< * * with nogil: */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 363, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 363, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 363, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 363, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 363, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 363, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 366, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 366, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 363, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 363, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 366, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_res = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_res.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 363, __pyx_L1_error) + __PYX_ERR(0, 366, __pyx_L1_error) } else {__pyx_pybuffernd_res.diminfo[0].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_res.diminfo[0].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_res.diminfo[1].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_res.diminfo[1].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_res = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_res = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":365 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":368 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -14349,7 +14663,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(CYTHON_UNUSED PyOb #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":366 + /* "DarkNews/Cfourvec.pyx":369 * * with nogil: * for i in range(m): # <<<<<<<<<<<<<< @@ -14357,76 +14671,76 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(CYTHON_UNUSED PyOb * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,3] */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":367 + /* "DarkNews/Cfourvec.pyx":370 * with nogil: * for i in range(m): * res[i,0] = v4[i,0] # <<<<<<<<<<<<<< * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,3] * res[i,2] = v4[i,2] */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":368 + /* "DarkNews/Cfourvec.pyx":371 * for i in range(m): * res[i,0] = v4[i,0] * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,3] # <<<<<<<<<<<<<< * res[i,2] = v4[i,2] * res[i,3] = sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,1] + ctheta[i]*v4[i,3] */ - __pyx_t_11 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_12 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_13 = __pyx_v_i; __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = __pyx_v_i; - __pyx_t_16 = 3; - __pyx_t_17 = __pyx_v_i; - __pyx_t_18 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_res.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) - ((__pyx_v_sign * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_ctheta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_15 = 3; + __pyx_t_16 = __pyx_v_i; + __pyx_t_17 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) - ((__pyx_v_sign * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_ctheta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":369 + /* "DarkNews/Cfourvec.pyx":372 * res[i,0] = v4[i,0] * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,3] * res[i,2] = v4[i,2] # <<<<<<<<<<<<<< * res[i,3] = sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,1] + ctheta[i]*v4[i,3] * */ - __pyx_t_16 = __pyx_v_i; - __pyx_t_15 = 2; - __pyx_t_14 = __pyx_v_i; - __pyx_t_12 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_15 = __pyx_v_i; + __pyx_t_14 = 2; + __pyx_t_13 = __pyx_v_i; + __pyx_t_11 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":370 + /* "DarkNews/Cfourvec.pyx":373 * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,3] * res[i,2] = v4[i,2] * res[i,3] = sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,1] + ctheta[i]*v4[i,3] # <<<<<<<<<<<<<< * * return res */ + __pyx_t_14 = __pyx_v_i; __pyx_t_15 = __pyx_v_i; - __pyx_t_16 = __pyx_v_i; + __pyx_t_11 = __pyx_v_i; + __pyx_t_13 = 1; __pyx_t_12 = __pyx_v_i; - __pyx_t_14 = 1; - __pyx_t_13 = __pyx_v_i; - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 3; - __pyx_t_18 = __pyx_v_i; - __pyx_t_17 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = (((__pyx_v_sign * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_ctheta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 3; + __pyx_t_17 = __pyx_v_i; + __pyx_t_16 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = (((__pyx_v_sign * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_ctheta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":365 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":368 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * * with nogil: # <<<<<<<<<<<<<< * for i in range(m): @@ -14444,7 +14758,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(CYTHON_UNUSED PyOb } } - /* "DarkNews/Cfourvec.pyx":372 + /* "DarkNews/Cfourvec.pyx":375 * res[i,3] = sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,1] + ctheta[i]*v4[i,3] * * return res # <<<<<<<<<<<<<< @@ -14456,20 +14770,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(CYTHON_UNUSED PyOb __pyx_r = ((PyObject *)__pyx_v_res); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":359 + /* "DarkNews/Cfourvec.pyx":362 * return res * #****************************** - * def rotationy_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign=1): # <<<<<<<<<<<<<< + * def rotationy_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign=1): # <<<<<<<<<<<<<< * * cdef int i, m; */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -14492,10 +14806,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_48rotationy_cos(CYTHON_UNUSED PyOb return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":375 +/* "DarkNews/Cfourvec.pyx":378 * * #****************************** - * def rotationz(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationz(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ @@ -14508,7 +14822,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_51rotationz = {"rotationz", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_51rotationz, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_50rotationz, "rotationz(ndarray v4, ndarray theta)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_51rotationz = {"rotationz", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_51rotationz, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_50rotationz}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_51rotationz(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -14556,7 +14871,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 375, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 378, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -14564,14 +14879,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 375, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 378, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("rotationz", 1, 2, 2, 1); __PYX_ERR(0, 375, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationz", 1, 2, 2, 1); __PYX_ERR(0, 378, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationz") < 0)) __PYX_ERR(0, 375, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationz") < 0)) __PYX_ERR(0, 378, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -14584,7 +14899,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rotationz", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 375, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationz", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 378, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -14598,8 +14913,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 375, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_theta), __pyx_ptype_5numpy_ndarray, 1, "theta", 0))) __PYX_ERR(0, 375, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 378, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_theta), __pyx_ptype_5numpy_ndarray, 1, "theta", 0))) __PYX_ERR(0, 378, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_50rotationz(__pyx_self, __pyx_v_v4, __pyx_v_theta); /* function exit code */ @@ -14629,15 +14944,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_50rotationz(CYTHON_UNUSED PyObject __Pyx_Buffer __pyx_pybuffer_v4; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -14645,7 +14960,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_50rotationz(CYTHON_UNUSED PyObject Py_ssize_t __pyx_t_14; Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; - Py_ssize_t __pyx_t_17; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -14664,87 +14978,79 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_50rotationz(CYTHON_UNUSED PyObject __pyx_pybuffernd_theta.rcbuffer = &__pyx_pybuffer_theta; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 375, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 378, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_theta.rcbuffer->pybuffer, (PyObject*)__pyx_v_theta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 375, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_theta.rcbuffer->pybuffer, (PyObject*)__pyx_v_theta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 378, __pyx_L1_error) } __pyx_pybuffernd_theta.diminfo[0].strides = __pyx_pybuffernd_theta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_theta.diminfo[0].shape = __pyx_pybuffernd_theta.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":378 + /* "DarkNews/Cfourvec.pyx":381 * * cdef int i, m; * m = v4.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 378, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4))[0]); - /* "DarkNews/Cfourvec.pyx":379 + /* "DarkNews/Cfourvec.pyx":382 * cdef int i, m; * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 379, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 382, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 382, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 379, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 382, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_res = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_res.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 379, __pyx_L1_error) + __PYX_ERR(0, 382, __pyx_L1_error) } else {__pyx_pybuffernd_res.diminfo[0].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_res.diminfo[0].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_res.diminfo[1].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_res.diminfo[1].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_res = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_res = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":380 + /* "DarkNews/Cfourvec.pyx":383 * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * res[i,0] = v4[i,0] @@ -14758,83 +15064,83 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_50rotationz(CYTHON_UNUSED PyObject #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":381 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":384 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * res[i,0] = v4[i,0] * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,2] */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":382 + /* "DarkNews/Cfourvec.pyx":385 * with nogil: * for i in range(m): * res[i,0] = v4[i,0] # <<<<<<<<<<<<<< * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,2] * res[i,2] = sin(theta[i])*v4[i,1] + cos(theta[i])*v4[i,2] */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":383 + /* "DarkNews/Cfourvec.pyx":386 * for i in range(m): * res[i,0] = v4[i,0] * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,2] # <<<<<<<<<<<<<< * res[i,2] = sin(theta[i])*v4[i,1] + cos(theta[i])*v4[i,2] * res[i,3] = v4[i,3] */ - __pyx_t_11 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_12 = __pyx_v_i; - __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = 2; - __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = ((cos((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) - (sin((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = 2; + __pyx_t_15 = __pyx_v_i; + __pyx_t_16 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = ((cos((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) - (sin((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":384 + /* "DarkNews/Cfourvec.pyx":387 * res[i,0] = v4[i,0] * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,2] * res[i,2] = sin(theta[i])*v4[i,1] + cos(theta[i])*v4[i,2] # <<<<<<<<<<<<<< * res[i,3] = v4[i,3] * */ - __pyx_t_15 = __pyx_v_i; __pyx_t_14 = __pyx_v_i; - __pyx_t_12 = 1; __pyx_t_13 = __pyx_v_i; - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 2; - __pyx_t_17 = __pyx_v_i; - __pyx_t_16 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = ((sin((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) + (cos((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_11 = 1; + __pyx_t_12 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 2; + __pyx_t_16 = __pyx_v_i; + __pyx_t_15 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_res.diminfo[1].strides) = ((sin((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides))) + (cos((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_theta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_theta.diminfo[0].strides))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":385 + /* "DarkNews/Cfourvec.pyx":388 * res[i,1] = cos(theta[i])*v4[i,1] - sin(theta[i])*v4[i,2] * res[i,2] = sin(theta[i])*v4[i,1] + cos(theta[i])*v4[i,2] * res[i,3] = v4[i,3] # <<<<<<<<<<<<<< * * return res */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_10 = 3; - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = 3; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[1].strides)); } } - /* "DarkNews/Cfourvec.pyx":380 + /* "DarkNews/Cfourvec.pyx":383 * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * res[i,0] = v4[i,0] @@ -14851,32 +15157,32 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_50rotationz(CYTHON_UNUSED PyObject } } - /* "DarkNews/Cfourvec.pyx":387 + /* "DarkNews/Cfourvec.pyx":390 * res[i,3] = v4[i,3] * * return res # <<<<<<<<<<<<<< * #****************************** - * def rotationz_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): + * def rotationz_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_res); __pyx_r = ((PyObject *)__pyx_v_res); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":375 + /* "DarkNews/Cfourvec.pyx":378 * * #****************************** - * def rotationz(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationz(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -14899,10 +15205,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_50rotationz(CYTHON_UNUSED PyObject return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":389 +/* "DarkNews/Cfourvec.pyx":392 * return res * #****************************** - * def rotationz_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): # <<<<<<<<<<<<<< + * def rotationz_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): # <<<<<<<<<<<<<< * * cdef int i, m; */ @@ -14915,7 +15221,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_53rotationz_sin = {"rotationz_sin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_53rotationz_sin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_52rotationz_sin, "rotationz_sin(ndarray v4, ndarray stheta)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_53rotationz_sin = {"rotationz_sin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_53rotationz_sin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_52rotationz_sin}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_53rotationz_sin(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -14963,7 +15270,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 389, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 392, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -14971,14 +15278,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 389, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 392, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("rotationz_sin", 1, 2, 2, 1); __PYX_ERR(0, 389, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationz_sin", 1, 2, 2, 1); __PYX_ERR(0, 392, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationz_sin") < 0)) __PYX_ERR(0, 389, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationz_sin") < 0)) __PYX_ERR(0, 392, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -14991,7 +15298,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rotationz_sin", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 389, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationz_sin", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 392, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -15005,8 +15312,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 389, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_stheta), __pyx_ptype_5numpy_ndarray, 1, "stheta", 0))) __PYX_ERR(0, 389, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 392, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_stheta), __pyx_ptype_5numpy_ndarray, 1, "stheta", 0))) __PYX_ERR(0, 392, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_52rotationz_sin(__pyx_self, __pyx_v_v4, __pyx_v_stheta); /* function exit code */ @@ -15036,15 +15343,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_52rotationz_sin(CYTHON_UNUSED PyOb __Pyx_Buffer __pyx_pybuffer_v4; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -15053,7 +15360,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_52rotationz_sin(CYTHON_UNUSED PyOb Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -15072,87 +15378,79 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_52rotationz_sin(CYTHON_UNUSED PyOb __pyx_pybuffernd_stheta.rcbuffer = &__pyx_pybuffer_stheta; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 389, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 392, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_stheta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 389, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_stheta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 392, __pyx_L1_error) } __pyx_pybuffernd_stheta.diminfo[0].strides = __pyx_pybuffernd_stheta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stheta.diminfo[0].shape = __pyx_pybuffernd_stheta.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":392 + /* "DarkNews/Cfourvec.pyx":395 * * cdef int i, m; * m = v4.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 392, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4))[0]); - /* "DarkNews/Cfourvec.pyx":393 + /* "DarkNews/Cfourvec.pyx":396 * cdef int i, m; * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 393, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 396, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 393, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 396, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_res = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_res.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 393, __pyx_L1_error) + __PYX_ERR(0, 396, __pyx_L1_error) } else {__pyx_pybuffernd_res.diminfo[0].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_res.diminfo[0].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_res.diminfo[1].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_res.diminfo[1].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_res = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_res = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":394 + /* "DarkNews/Cfourvec.pyx":397 * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * res[i,0] = v4[i,0] @@ -15166,85 +15464,85 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_52rotationz_sin(CYTHON_UNUSED PyOb #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":395 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":398 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * res[i,0] = v4[i,0] * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,2] */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":396 + /* "DarkNews/Cfourvec.pyx":399 * with nogil: * for i in range(m): * res[i,0] = v4[i,0] # <<<<<<<<<<<<<< * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,2] * res[i,2] = stheta[i]*v4[i,1] + sqrt(1.0-stheta[i]*stheta[i])*v4[i,2] */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":397 + /* "DarkNews/Cfourvec.pyx":400 * for i in range(m): * res[i,0] = v4[i,0] * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,2] # <<<<<<<<<<<<<< * res[i,2] = stheta[i]*v4[i,1] + sqrt(1.0-stheta[i]*stheta[i])*v4[i,2] * res[i,3] = v4[i,3] */ - __pyx_t_11 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 1; __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 1; __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = __pyx_v_i; - __pyx_t_16 = 2; - __pyx_t_17 = __pyx_v_i; - __pyx_t_18 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_res.diminfo[1].strides) = ((sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_stheta.diminfo[0].strides))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_15 = 2; + __pyx_t_16 = __pyx_v_i; + __pyx_t_17 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = ((sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_stheta.diminfo[0].strides))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":398 + /* "DarkNews/Cfourvec.pyx":401 * res[i,0] = v4[i,0] * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,2] * res[i,2] = stheta[i]*v4[i,1] + sqrt(1.0-stheta[i]*stheta[i])*v4[i,2] # <<<<<<<<<<<<<< * res[i,3] = v4[i,3] * */ - __pyx_t_16 = __pyx_v_i; __pyx_t_15 = __pyx_v_i; - __pyx_t_14 = 1; + __pyx_t_14 = __pyx_v_i; + __pyx_t_13 = 1; + __pyx_t_11 = __pyx_v_i; __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = __pyx_v_i; - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_17 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides))) + (sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_stheta.diminfo[0].strides))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_16 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) + (sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_stheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_stheta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_stheta.diminfo[0].strides))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":399 + /* "DarkNews/Cfourvec.pyx":402 * res[i,1] = sqrt(1.0-stheta[i]*stheta[i])*v4[i,1] - stheta[i]*v4[i,2] * res[i,2] = stheta[i]*v4[i,1] + sqrt(1.0-stheta[i]*stheta[i])*v4[i,2] * res[i,3] = v4[i,3] # <<<<<<<<<<<<<< * * return res */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_10 = 3; - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = 3; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[1].strides)); } } - /* "DarkNews/Cfourvec.pyx":394 + /* "DarkNews/Cfourvec.pyx":397 * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * res[i,0] = v4[i,0] @@ -15261,32 +15559,32 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_52rotationz_sin(CYTHON_UNUSED PyOb } } - /* "DarkNews/Cfourvec.pyx":401 + /* "DarkNews/Cfourvec.pyx":404 * res[i,3] = v4[i,3] * * return res # <<<<<<<<<<<<<< * #****************************** - * def rotationz_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign = 1): + * def rotationz_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign = 1): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_res); __pyx_r = ((PyObject *)__pyx_v_res); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":389 + /* "DarkNews/Cfourvec.pyx":392 * return res * #****************************** - * def rotationz_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): # <<<<<<<<<<<<<< + * def rotationz_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): # <<<<<<<<<<<<<< * * cdef int i, m; */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -15309,10 +15607,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_52rotationz_sin(CYTHON_UNUSED PyOb return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":403 +/* "DarkNews/Cfourvec.pyx":406 * return res * #****************************** - * def rotationz_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign = 1): # <<<<<<<<<<<<<< + * def rotationz_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign = 1): # <<<<<<<<<<<<<< * * cdef int i, m; */ @@ -15325,7 +15623,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_55rotationz_cos = {"rotationz_cos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_55rotationz_cos, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_54rotationz_cos, "rotationz_cos(ndarray v4, ndarray ctheta, int sign=1)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_55rotationz_cos = {"rotationz_cos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_55rotationz_cos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_54rotationz_cos}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_55rotationz_cos(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -15376,7 +15675,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 403, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 406, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -15384,21 +15683,21 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 403, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 406, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("rotationz_cos", 0, 2, 3, 1); __PYX_ERR(0, 403, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationz_cos", 0, 2, 3, 1); __PYX_ERR(0, 406, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sign); if (value) { values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 403, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 406, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationz_cos") < 0)) __PYX_ERR(0, 403, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rotationz_cos") < 0)) __PYX_ERR(0, 406, __pyx_L3_error) } } else { switch (__pyx_nargs) { @@ -15413,14 +15712,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __pyx_v_v4 = ((PyArrayObject *)values[0]); __pyx_v_ctheta = ((PyArrayObject *)values[1]); if (values[2]) { - __pyx_v_sign = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_sign == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 403, __pyx_L3_error) + __pyx_v_sign = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_sign == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 406, __pyx_L3_error) } else { __pyx_v_sign = ((int)((int)1)); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rotationz_cos", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 403, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rotationz_cos", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 406, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -15434,8 +15733,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 403, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ctheta), __pyx_ptype_5numpy_ndarray, 1, "ctheta", 0))) __PYX_ERR(0, 403, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 406, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ctheta), __pyx_ptype_5numpy_ndarray, 1, "ctheta", 0))) __PYX_ERR(0, 406, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_54rotationz_cos(__pyx_self, __pyx_v_v4, __pyx_v_ctheta, __pyx_v_sign); /* function exit code */ @@ -15465,15 +15764,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_54rotationz_cos(CYTHON_UNUSED PyOb __Pyx_Buffer __pyx_pybuffer_v4; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -15482,7 +15781,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_54rotationz_cos(CYTHON_UNUSED PyOb Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -15501,87 +15799,79 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_54rotationz_cos(CYTHON_UNUSED PyOb __pyx_pybuffernd_ctheta.rcbuffer = &__pyx_pybuffer_ctheta; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 403, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 406, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ctheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_ctheta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 403, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ctheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_ctheta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 406, __pyx_L1_error) } __pyx_pybuffernd_ctheta.diminfo[0].strides = __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ctheta.diminfo[0].shape = __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":406 + /* "DarkNews/Cfourvec.pyx":409 * * cdef int i, m; * m = v4.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 406, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_v4))[0]); - /* "DarkNews/Cfourvec.pyx":407 + /* "DarkNews/Cfourvec.pyx":410 * cdef int i, m; * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 407, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 407, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 410, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 407, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 410, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_res = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_res.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 407, __pyx_L1_error) + __PYX_ERR(0, 410, __pyx_L1_error) } else {__pyx_pybuffernd_res.diminfo[0].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_res.diminfo[0].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_res.diminfo[1].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_res.diminfo[1].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_res = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_res = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":408 + /* "DarkNews/Cfourvec.pyx":411 * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * res[i,0] = v4[i,0] @@ -15595,85 +15885,85 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_54rotationz_cos(CYTHON_UNUSED PyOb #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":409 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":412 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * res[i,0] = v4[i,0] * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,2] */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":410 + /* "DarkNews/Cfourvec.pyx":413 * with nogil: * for i in range(m): * res[i,0] = v4[i,0] # <<<<<<<<<<<<<< * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,2] * res[i,2] = sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,1] + ctheta[i]*v4[i,2] */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 0; + __pyx_t_11 = __pyx_v_i; + __pyx_t_12 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":411 + /* "DarkNews/Cfourvec.pyx":414 * for i in range(m): * res[i,0] = v4[i,0] * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,2] # <<<<<<<<<<<<<< * res[i,2] = sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,1] + ctheta[i]*v4[i,2] * res[i,3] = v4[i,3] */ - __pyx_t_11 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; - __pyx_t_13 = 1; - __pyx_t_12 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_12 = 1; + __pyx_t_11 = __pyx_v_i; + __pyx_t_13 = __pyx_v_i; __pyx_t_14 = __pyx_v_i; - __pyx_t_15 = __pyx_v_i; - __pyx_t_16 = 2; - __pyx_t_17 = __pyx_v_i; - __pyx_t_18 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_res.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) - ((__pyx_v_sign * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_ctheta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_15 = 2; + __pyx_t_16 = __pyx_v_i; + __pyx_t_17 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = (((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) - ((__pyx_v_sign * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_ctheta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":412 + /* "DarkNews/Cfourvec.pyx":415 * res[i,0] = v4[i,0] * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,2] * res[i,2] = sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,1] + ctheta[i]*v4[i,2] # <<<<<<<<<<<<<< * res[i,3] = v4[i,3] * */ - __pyx_t_16 = __pyx_v_i; __pyx_t_15 = __pyx_v_i; __pyx_t_14 = __pyx_v_i; - __pyx_t_12 = 1; __pyx_t_13 = __pyx_v_i; - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 2; - __pyx_t_18 = __pyx_v_i; - __pyx_t_17 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_res.diminfo[1].strides) = (((__pyx_v_sign * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_ctheta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_11 = 1; + __pyx_t_12 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i; + __pyx_t_10 = 2; + __pyx_t_17 = __pyx_v_i; + __pyx_t_16 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = (((__pyx_v_sign * sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_ctheta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_ctheta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":413 + /* "DarkNews/Cfourvec.pyx":416 * res[i,1] = ctheta[i]*v4[i,1] - sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,2] * res[i,2] = sign*sqrt(1.0-ctheta[i]*ctheta[i])*v4[i,1] + ctheta[i]*v4[i,2] * res[i,3] = v4[i,3] # <<<<<<<<<<<<<< * * return res */ - __pyx_t_11 = __pyx_v_i; - __pyx_t_10 = 3; - __pyx_t_13 = __pyx_v_i; - __pyx_t_12 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = 3; + __pyx_t_12 = __pyx_v_i; + __pyx_t_11 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[1].strides)); } } - /* "DarkNews/Cfourvec.pyx":408 + /* "DarkNews/Cfourvec.pyx":411 * m = v4.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * res[i,0] = v4[i,0] @@ -15690,7 +15980,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_54rotationz_cos(CYTHON_UNUSED PyOb } } - /* "DarkNews/Cfourvec.pyx":415 + /* "DarkNews/Cfourvec.pyx":418 * res[i,3] = v4[i,3] * * return res # <<<<<<<<<<<<<< @@ -15702,20 +15992,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_54rotationz_cos(CYTHON_UNUSED PyOb __pyx_r = ((PyObject *)__pyx_v_res); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":403 + /* "DarkNews/Cfourvec.pyx":406 * return res * #****************************** - * def rotationz_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign = 1): # <<<<<<<<<<<<<< + * def rotationz_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign = 1): # <<<<<<<<<<<<<< * * cdef int i, m; */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -15738,10 +16028,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_54rotationz_cos(CYTHON_UNUSED PyOb return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":418 +/* "DarkNews/Cfourvec.pyx":421 * * #****************************** - * def L(ndarray[double, ndim=2] v4, ndarray[double] beta): # <<<<<<<<<<<<<< + * def L(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta): # <<<<<<<<<<<<<< * cdef int i, m; * m = beta.shape[0] */ @@ -15754,7 +16044,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_57L = {"L", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_57L, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_56L, "L(ndarray v4, ndarray beta)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_57L = {"L", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_57L, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_56L}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_57L(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -15802,7 +16093,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 418, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 421, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -15810,14 +16101,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 418, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 421, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("L", 1, 2, 2, 1); __PYX_ERR(0, 418, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("L", 1, 2, 2, 1); __PYX_ERR(0, 421, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "L") < 0)) __PYX_ERR(0, 418, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "L") < 0)) __PYX_ERR(0, 421, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; @@ -15830,7 +16121,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("L", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 418, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("L", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 421, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -15844,8 +16135,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 418, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_beta), __pyx_ptype_5numpy_ndarray, 1, "beta", 0))) __PYX_ERR(0, 418, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 421, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_beta), __pyx_ptype_5numpy_ndarray, 1, "beta", 0))) __PYX_ERR(0, 421, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_56L(__pyx_self, __pyx_v_v4, __pyx_v_beta); /* function exit code */ @@ -15875,15 +16166,15 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_56L(CYTHON_UNUSED PyObject *__pyx_ __Pyx_Buffer __pyx_pybuffer_v4; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - npy_intp *__pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_5 = NULL; int __pyx_t_6; - PyArrayObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + Py_ssize_t __pyx_t_9; Py_ssize_t __pyx_t_10; Py_ssize_t __pyx_t_11; Py_ssize_t __pyx_t_12; @@ -15894,7 +16185,6 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_56L(CYTHON_UNUSED PyObject *__pyx_ Py_ssize_t __pyx_t_17; Py_ssize_t __pyx_t_18; Py_ssize_t __pyx_t_19; - Py_ssize_t __pyx_t_20; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -15913,87 +16203,79 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_56L(CYTHON_UNUSED PyObject *__pyx_ __pyx_pybuffernd_beta.rcbuffer = &__pyx_pybuffer_beta; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 418, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 421, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_beta.rcbuffer->pybuffer, (PyObject*)__pyx_v_beta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 418, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_beta.rcbuffer->pybuffer, (PyObject*)__pyx_v_beta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 421, __pyx_L1_error) } __pyx_pybuffernd_beta.diminfo[0].strides = __pyx_pybuffernd_beta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_beta.diminfo[0].shape = __pyx_pybuffernd_beta.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":420 - * def L(ndarray[double, ndim=2] v4, ndarray[double] beta): + /* "DarkNews/Cfourvec.pyx":423 + * def L(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta): * cdef int i, m; * m = beta.shape[0] # <<<<<<<<<<<<<< - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: */ - __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_beta)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 420, __pyx_L1_error) - __pyx_v_m = (__pyx_t_1[0]); + __pyx_v_m = (__pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_beta))[0]); - /* "DarkNews/Cfourvec.pyx":421 + /* "DarkNews/Cfourvec.pyx":424 * cdef int i, m; * m = beta.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) # <<<<<<<<<<<<<< * with nogil: * for i in range(m): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 421, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 421, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error); __Pyx_INCREF(__pyx_int_4); __Pyx_GIVEREF(__pyx_int_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4)) __PYX_ERR(0, 421, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4)) __PYX_ERR(0, 424, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 424, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 421, __pyx_L1_error) - __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 424, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_res.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { __pyx_v_res = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_res.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 421, __pyx_L1_error) + __PYX_ERR(0, 424, __pyx_L1_error) } else {__pyx_pybuffernd_res.diminfo[0].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_res.diminfo[0].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_res.diminfo[1].strides = __pyx_pybuffernd_res.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_res.diminfo[1].shape = __pyx_pybuffernd_res.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_7 = 0; - __pyx_v_res = ((PyArrayObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_v_res = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":422 + /* "DarkNews/Cfourvec.pyx":425 * m = beta.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * res[i,0] = 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] - beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] @@ -16007,89 +16289,89 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_56L(CYTHON_UNUSED PyObject *__pyx_ #endif /*try:*/ { - /* "DarkNews/Cfourvec.pyx":423 - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + /* "DarkNews/Cfourvec.pyx":426 + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: * for i in range(m): # <<<<<<<<<<<<<< * res[i,0] = 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] - beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] * res[i,1] = v4[i,1] */ __pyx_t_6 = __pyx_v_m; - __pyx_t_8 = __pyx_t_6; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "DarkNews/Cfourvec.pyx":424 + /* "DarkNews/Cfourvec.pyx":427 * with nogil: * for i in range(m): * res[i,0] = 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] - beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] # <<<<<<<<<<<<<< * res[i,1] = v4[i,1] * res[i,2] = v4[i,2] */ + __pyx_t_9 = __pyx_v_i; __pyx_t_10 = __pyx_v_i; __pyx_t_11 = __pyx_v_i; - __pyx_t_12 = __pyx_v_i; - __pyx_t_13 = 0; + __pyx_t_12 = 0; + __pyx_t_13 = __pyx_v_i; __pyx_t_14 = __pyx_v_i; __pyx_t_15 = __pyx_v_i; __pyx_t_16 = __pyx_v_i; - __pyx_t_17 = __pyx_v_i; - __pyx_t_18 = 3; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = 0; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_res.diminfo[1].strides) = (((1.0 / sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_beta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_beta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) - (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_beta.diminfo[0].strides)) / sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_beta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_beta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_17 = 3; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_res.diminfo[1].strides) = (((1.0 / sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_beta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_beta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_v4.diminfo[1].strides))) - (((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_beta.diminfo[0].strides)) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_beta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_beta.diminfo[0].strides))))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_v4.diminfo[1].strides)))); - /* "DarkNews/Cfourvec.pyx":425 + /* "DarkNews/Cfourvec.pyx":428 * for i in range(m): * res[i,0] = 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] - beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] * res[i,1] = v4[i,1] # <<<<<<<<<<<<<< * res[i,2] = v4[i,2] * res[i,3] = -beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] + 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] - */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_17 = 1; - __pyx_t_16 = __pyx_v_i; - __pyx_t_15 = 1; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_v4.diminfo[1].strides)); + */ + __pyx_t_17 = __pyx_v_i; + __pyx_t_16 = 1; + __pyx_t_15 = __pyx_v_i; + __pyx_t_14 = 1; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":426 + /* "DarkNews/Cfourvec.pyx":429 * res[i,0] = 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] - beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] * res[i,1] = v4[i,1] * res[i,2] = v4[i,2] # <<<<<<<<<<<<<< * res[i,3] = -beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] + 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] * */ - __pyx_t_17 = __pyx_v_i; - __pyx_t_18 = 2; - __pyx_t_15 = __pyx_v_i; - __pyx_t_16 = 2; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_v4.diminfo[1].strides)); + __pyx_t_16 = __pyx_v_i; + __pyx_t_17 = 2; + __pyx_t_14 = __pyx_v_i; + __pyx_t_15 = 2; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_res.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_v4.diminfo[1].strides)); - /* "DarkNews/Cfourvec.pyx":427 + /* "DarkNews/Cfourvec.pyx":430 * res[i,1] = v4[i,1] * res[i,2] = v4[i,2] * res[i,3] = -beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] + 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] # <<<<<<<<<<<<<< * * return res */ - __pyx_t_18 = __pyx_v_i; __pyx_t_17 = __pyx_v_i; __pyx_t_16 = __pyx_v_i; __pyx_t_15 = __pyx_v_i; - __pyx_t_14 = 0; - __pyx_t_13 = __pyx_v_i; + __pyx_t_14 = __pyx_v_i; + __pyx_t_13 = 0; __pyx_t_12 = __pyx_v_i; __pyx_t_11 = __pyx_v_i; - __pyx_t_10 = 3; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = 3; - *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_res.diminfo[1].strides) = ((((-(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_beta.diminfo[0].strides))) / sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_beta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_beta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((1.0 / sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_beta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_beta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[1].strides)))); + __pyx_t_10 = __pyx_v_i; + __pyx_t_9 = 3; + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = 3; + *__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_res.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_res.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_res.diminfo[1].strides) = ((((-(*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_beta.diminfo[0].strides))) / ((__pyx_t_8DarkNews_8Cfourvec_DTYPE_t)sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_beta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_beta.diminfo[0].strides))))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_v4.diminfo[1].strides))) + ((1.0 / sqrt((1.0 - ((*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_beta.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_beta.diminfo[0].strides)))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_8DarkNews_8Cfourvec_DTYPE_t *, __pyx_pybuffernd_v4.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_v4.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_v4.diminfo[1].strides)))); } } - /* "DarkNews/Cfourvec.pyx":422 + /* "DarkNews/Cfourvec.pyx":425 * m = beta.shape[0] - * cdef ndarray[double, ndim=2] res = np.empty((m,4)) + * cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) * with nogil: # <<<<<<<<<<<<<< * for i in range(m): * res[i,0] = 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] - beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] @@ -16106,7 +16388,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_56L(CYTHON_UNUSED PyObject *__pyx_ } } - /* "DarkNews/Cfourvec.pyx":429 + /* "DarkNews/Cfourvec.pyx":432 * res[i,3] = -beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] + 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] * * return res # <<<<<<<<<<<<<< @@ -16118,20 +16400,20 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_56L(CYTHON_UNUSED PyObject *__pyx_ __pyx_r = ((PyObject *)__pyx_v_res); goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":418 + /* "DarkNews/Cfourvec.pyx":421 * * #****************************** - * def L(ndarray[double, ndim=2] v4, ndarray[double] beta): # <<<<<<<<<<<<<< + * def L(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta): # <<<<<<<<<<<<<< * cdef int i, m; * m = beta.shape[0] */ /* function exit code */ __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_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -16154,10 +16436,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_56L(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":432 +/* "DarkNews/Cfourvec.pyx":435 * * #****************************** - * def T(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] theta, ndarray[double] phi): # <<<<<<<<<<<<<< + * def T(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] theta, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * return L( rotationy( rotationz(v4,-phi), theta), -beta) * */ @@ -16170,7 +16452,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_59T = {"T", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_59T, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_58T, "T(ndarray v4, ndarray beta, ndarray theta, ndarray phi)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_59T = {"T", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_59T, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_58T}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_59T(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -16224,7 +16507,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 432, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 435, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -16232,9 +16515,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 432, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 435, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("T", 1, 4, 4, 1); __PYX_ERR(0, 432, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("T", 1, 4, 4, 1); __PYX_ERR(0, 435, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -16242,9 +16525,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 432, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 435, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("T", 1, 4, 4, 2); __PYX_ERR(0, 432, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("T", 1, 4, 4, 2); __PYX_ERR(0, 435, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: @@ -16252,14 +16535,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 432, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 435, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("T", 1, 4, 4, 3); __PYX_ERR(0, 432, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("T", 1, 4, 4, 3); __PYX_ERR(0, 435, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "T") < 0)) __PYX_ERR(0, 432, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "T") < 0)) __PYX_ERR(0, 435, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 4)) { goto __pyx_L5_argtuple_error; @@ -16276,7 +16559,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("T", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 432, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("T", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 435, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -16290,10 +16573,10 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 432, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_beta), __pyx_ptype_5numpy_ndarray, 1, "beta", 0))) __PYX_ERR(0, 432, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_theta), __pyx_ptype_5numpy_ndarray, 1, "theta", 0))) __PYX_ERR(0, 432, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_phi), __pyx_ptype_5numpy_ndarray, 1, "phi", 0))) __PYX_ERR(0, 432, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 435, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_beta), __pyx_ptype_5numpy_ndarray, 1, "beta", 0))) __PYX_ERR(0, 435, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_theta), __pyx_ptype_5numpy_ndarray, 1, "theta", 0))) __PYX_ERR(0, 435, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_phi), __pyx_ptype_5numpy_ndarray, 1, "phi", 0))) __PYX_ERR(0, 435, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_58T(__pyx_self, __pyx_v_v4, __pyx_v_beta, __pyx_v_theta, __pyx_v_phi); /* function exit code */ @@ -16330,7 +16613,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_58T(CYTHON_UNUSED PyObject *__pyx_ PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; + unsigned int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -16353,40 +16636,40 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_58T(CYTHON_UNUSED PyObject *__pyx_ __pyx_pybuffernd_phi.rcbuffer = &__pyx_pybuffer_phi; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 432, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 435, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_beta.rcbuffer->pybuffer, (PyObject*)__pyx_v_beta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 432, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_beta.rcbuffer->pybuffer, (PyObject*)__pyx_v_beta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 435, __pyx_L1_error) } __pyx_pybuffernd_beta.diminfo[0].strides = __pyx_pybuffernd_beta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_beta.diminfo[0].shape = __pyx_pybuffernd_beta.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_theta.rcbuffer->pybuffer, (PyObject*)__pyx_v_theta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 432, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_theta.rcbuffer->pybuffer, (PyObject*)__pyx_v_theta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 435, __pyx_L1_error) } __pyx_pybuffernd_theta.diminfo[0].strides = __pyx_pybuffernd_theta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_theta.diminfo[0].shape = __pyx_pybuffernd_theta.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_phi.rcbuffer->pybuffer, (PyObject*)__pyx_v_phi, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 432, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_phi.rcbuffer->pybuffer, (PyObject*)__pyx_v_phi, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 435, __pyx_L1_error) } __pyx_pybuffernd_phi.diminfo[0].strides = __pyx_pybuffernd_phi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_phi.diminfo[0].shape = __pyx_pybuffernd_phi.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":433 + /* "DarkNews/Cfourvec.pyx":436 * #****************************** - * def T(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] theta, ndarray[double] phi): + * def T(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] theta, np.ndarray[DTYPE_t, ndim=1] phi): * return L( rotationy( rotationz(v4,-phi), theta), -beta) # <<<<<<<<<<<<<< * * #****************************** */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_L); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_L); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_rotationy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_rotationy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_rotationz); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_rotationz); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyNumber_Negative(((PyObject *)__pyx_v_phi)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 433, __pyx_L1_error) + __pyx_t_7 = PyNumber_Negative(((PyObject *)__pyx_v_phi)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = NULL; __pyx_t_9 = 0; @@ -16407,7 +16690,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_58T(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 433, __pyx_L1_error) + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } @@ -16430,11 +16713,11 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_58T(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 433, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - __pyx_t_4 = PyNumber_Negative(((PyObject *)__pyx_v_beta)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 433, __pyx_L1_error) + __pyx_t_4 = PyNumber_Negative(((PyObject *)__pyx_v_beta)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; __pyx_t_9 = 0; @@ -16456,7 +16739,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_58T(CYTHON_UNUSED PyObject *__pyx_ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error) + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } @@ -16464,10 +16747,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_58T(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_1 = 0; goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":432 + /* "DarkNews/Cfourvec.pyx":435 * * #****************************** - * def T(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] theta, ndarray[double] phi): # <<<<<<<<<<<<<< + * def T(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] theta, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * return L( rotationy( rotationz(v4,-phi), theta), -beta) * */ @@ -16505,10 +16788,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_58T(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } -/* "DarkNews/Cfourvec.pyx":436 +/* "DarkNews/Cfourvec.pyx":439 * * #****************************** - * def Tinv(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] ctheta, ndarray[double] phi): # <<<<<<<<<<<<<< + * def Tinv(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] ctheta, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * return rotationz( rotationy_cos( L(v4, beta), ctheta, sign=-1), phi) * */ @@ -16521,7 +16804,8 @@ PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_61Tinv = {"Tinv", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_61Tinv, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +PyDoc_STRVAR(__pyx_doc_8DarkNews_8Cfourvec_60Tinv, "Tinv(ndarray v4, ndarray beta, ndarray ctheta, ndarray phi)"); +static PyMethodDef __pyx_mdef_8DarkNews_8Cfourvec_61Tinv = {"Tinv", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8DarkNews_8Cfourvec_61Tinv, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8DarkNews_8Cfourvec_60Tinv}; static PyObject *__pyx_pw_8DarkNews_8Cfourvec_61Tinv(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds @@ -16575,7 +16859,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 436, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 439, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -16583,9 +16867,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 436, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 439, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("Tinv", 1, 4, 4, 1); __PYX_ERR(0, 436, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Tinv", 1, 4, 4, 1); __PYX_ERR(0, 439, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -16593,9 +16877,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 436, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 439, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("Tinv", 1, 4, 4, 2); __PYX_ERR(0, 436, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Tinv", 1, 4, 4, 2); __PYX_ERR(0, 439, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: @@ -16603,14 +16887,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 436, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 439, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("Tinv", 1, 4, 4, 3); __PYX_ERR(0, 436, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Tinv", 1, 4, 4, 3); __PYX_ERR(0, 439, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "Tinv") < 0)) __PYX_ERR(0, 436, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "Tinv") < 0)) __PYX_ERR(0, 439, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 4)) { goto __pyx_L5_argtuple_error; @@ -16627,7 +16911,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("Tinv", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 436, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("Tinv", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 439, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -16641,10 +16925,10 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 436, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_beta), __pyx_ptype_5numpy_ndarray, 1, "beta", 0))) __PYX_ERR(0, 436, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ctheta), __pyx_ptype_5numpy_ndarray, 1, "ctheta", 0))) __PYX_ERR(0, 436, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_phi), __pyx_ptype_5numpy_ndarray, 1, "phi", 0))) __PYX_ERR(0, 436, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v4), __pyx_ptype_5numpy_ndarray, 1, "v4", 0))) __PYX_ERR(0, 439, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_beta), __pyx_ptype_5numpy_ndarray, 1, "beta", 0))) __PYX_ERR(0, 439, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ctheta), __pyx_ptype_5numpy_ndarray, 1, "ctheta", 0))) __PYX_ERR(0, 439, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_phi), __pyx_ptype_5numpy_ndarray, 1, "phi", 0))) __PYX_ERR(0, 439, __pyx_L1_error) __pyx_r = __pyx_pf_8DarkNews_8Cfourvec_60Tinv(__pyx_self, __pyx_v_v4, __pyx_v_beta, __pyx_v_ctheta, __pyx_v_phi); /* function exit code */ @@ -16679,7 +16963,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_60Tinv(CYTHON_UNUSED PyObject *__p PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; + unsigned int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -16702,37 +16986,37 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_60Tinv(CYTHON_UNUSED PyObject *__p __pyx_pybuffernd_phi.rcbuffer = &__pyx_pybuffer_phi; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 436, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_v4.rcbuffer->pybuffer, (PyObject*)__pyx_v_v4, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 439, __pyx_L1_error) } __pyx_pybuffernd_v4.diminfo[0].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_v4.diminfo[0].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_v4.diminfo[1].strides = __pyx_pybuffernd_v4.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_v4.diminfo[1].shape = __pyx_pybuffernd_v4.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_beta.rcbuffer->pybuffer, (PyObject*)__pyx_v_beta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 436, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_beta.rcbuffer->pybuffer, (PyObject*)__pyx_v_beta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 439, __pyx_L1_error) } __pyx_pybuffernd_beta.diminfo[0].strides = __pyx_pybuffernd_beta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_beta.diminfo[0].shape = __pyx_pybuffernd_beta.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ctheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_ctheta, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 436, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ctheta.rcbuffer->pybuffer, (PyObject*)__pyx_v_ctheta, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 439, __pyx_L1_error) } __pyx_pybuffernd_ctheta.diminfo[0].strides = __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ctheta.diminfo[0].shape = __pyx_pybuffernd_ctheta.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_phi.rcbuffer->pybuffer, (PyObject*)__pyx_v_phi, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 436, __pyx_L1_error) + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_phi.rcbuffer->pybuffer, (PyObject*)__pyx_v_phi, &__Pyx_TypeInfo_nn___pyx_t_8DarkNews_8Cfourvec_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 439, __pyx_L1_error) } __pyx_pybuffernd_phi.diminfo[0].strides = __pyx_pybuffernd_phi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_phi.diminfo[0].shape = __pyx_pybuffernd_phi.rcbuffer->pybuffer.shape[0]; - /* "DarkNews/Cfourvec.pyx":437 + /* "DarkNews/Cfourvec.pyx":440 * #****************************** - * def Tinv(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] ctheta, ndarray[double] phi): + * def Tinv(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] ctheta, np.ndarray[DTYPE_t, ndim=1] phi): * return rotationz( rotationy_cos( L(v4, beta), ctheta, sign=-1), phi) # <<<<<<<<<<<<<< * */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_rotationz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_rotationz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_rotationy_cos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_rotationy_cos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; __pyx_t_7 = 0; @@ -16752,22 +17036,22 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_60Tinv(CYTHON_UNUSED PyObject *__p PyObject *__pyx_callargs[3] = {__pyx_t_6, ((PyObject *)__pyx_v_v4), ((PyObject *)__pyx_v_beta)}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 440, __pyx_L1_error); __Pyx_INCREF((PyObject *)__pyx_v_ctheta); __Pyx_GIVEREF((PyObject *)__pyx_v_ctheta); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_ctheta))) __PYX_ERR(0, 437, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_ctheta))) __PYX_ERR(0, 440, __pyx_L1_error); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_sign, __pyx_int_neg_1) < 0) __PYX_ERR(0, 437, __pyx_L1_error) - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 437, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_sign, __pyx_int_neg_1) < 0) __PYX_ERR(0, 440, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; @@ -16791,7 +17075,7 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_60Tinv(CYTHON_UNUSED PyObject *__p __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } @@ -16799,10 +17083,10 @@ static PyObject *__pyx_pf_8DarkNews_8Cfourvec_60Tinv(CYTHON_UNUSED PyObject *__p __pyx_t_1 = 0; goto __pyx_L0; - /* "DarkNews/Cfourvec.pyx":436 + /* "DarkNews/Cfourvec.pyx":439 * * #****************************** - * def Tinv(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] ctheta, ndarray[double] phi): # <<<<<<<<<<<<<< + * def Tinv(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] ctheta, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * return rotationz( rotationy_cos( L(v4, beta), ctheta, sign=-1), phi) * */ @@ -16854,7 +17138,7 @@ static PyMethodDef __pyx_methods[] = { static int __Pyx_CreateStringTabAndInitStrings(void) { __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_Cfourvec_pyx, __pyx_k_Cfourvec_pyx, sizeof(__pyx_k_Cfourvec_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_DTYPE, __pyx_k_DTYPE, sizeof(__pyx_k_DTYPE), 0, 0, 1, 1}, {&__pyx_n_s_DarkNews_Cfourvec, __pyx_k_DarkNews_Cfourvec, sizeof(__pyx_k_DarkNews_Cfourvec), 0, 0, 1, 1}, {&__pyx_n_s_E, __pyx_k_E, sizeof(__pyx_k_E), 0, 0, 1, 1}, {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, @@ -16874,7 +17158,9 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_dot4, __pyx_k_dot4, sizeof(__pyx_k_dot4), 0, 0, 1, 1}, {&__pyx_n_s_dotXY, __pyx_k_dotXY, sizeof(__pyx_k_dotXY), 0, 0, 1, 1}, {&__pyx_n_s_dotXY_vec, __pyx_k_dotXY_vec, sizeof(__pyx_k_dotXY_vec), 0, 0, 1, 1}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, {&__pyx_n_s_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 0, 0, 1, 1}, + {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1}, {&__pyx_n_s_getXYnorm, __pyx_k_getXYnorm, sizeof(__pyx_k_getXYnorm), 0, 0, 1, 1}, {&__pyx_n_s_getXYnorm_3vec, __pyx_k_getXYnorm_3vec, sizeof(__pyx_k_getXYnorm_3vec), 0, 0, 1, 1}, {&__pyx_n_s_get_3direction, __pyx_k_get_3direction, sizeof(__pyx_k_get_3direction), 0, 0, 1, 1}, @@ -16899,8 +17185,8 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 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_kp_u_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 1, 0, 0}, - {&__pyx_kp_u_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 1, 0, 0}, + {&__pyx_kp_u_numpy__core_multiarray_failed_to, __pyx_k_numpy__core_multiarray_failed_to, sizeof(__pyx_k_numpy__core_multiarray_failed_to), 0, 1, 0, 0}, + {&__pyx_kp_u_numpy__core_umath_failed_to_impo, __pyx_k_numpy__core_umath_failed_to_impo, sizeof(__pyx_k_numpy__core_umath_failed_to_impo), 0, 1, 0, 0}, {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1}, {&__pyx_n_s_phi, __pyx_k_phi, sizeof(__pyx_k_phi), 0, 0, 1, 1}, {&__pyx_n_s_put_in_z_axis, __pyx_k_put_in_z_axis, sizeof(__pyx_k_put_in_z_axis), 0, 0, 1, 1}, @@ -16921,6 +17207,7 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_sign, __pyx_k_sign, sizeof(__pyx_k_sign), 0, 0, 1, 1}, {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_k_src_DarkNews_Cfourvec_pyx, sizeof(__pyx_k_src_DarkNews_Cfourvec_pyx), 0, 0, 1, 0}, {&__pyx_n_s_stheta, __pyx_k_stheta, sizeof(__pyx_k_stheta), 0, 0, 1, 1}, {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, {&__pyx_n_s_theta, __pyx_k_theta, sizeof(__pyx_k_theta), 0, 0, 1, 1}, @@ -16933,8 +17220,8 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { } /* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 59, __pyx_L1_error) - __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 984, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 62, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 1025, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; @@ -16945,348 +17232,348 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1025 * __pyx_import_array() * except Exception: - * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.multiarray failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_umath() except -1: */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 984, __pyx_L1_error) + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_numpy__core_multiarray_failed_to); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 1025, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_); - /* "../../../../../../usr/local/anaconda3/envs/py311/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../../../private/var/folders/dl/ccbsfs591r1fhgcws28m8xy40000gn/T/pip-build-env-rajxtsdp/overlay/lib/python3.11/site-packages/numpy/__init__.cython-30.pxd":1031 * _import_umath() * except Exception: - * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_ufunc() except -1: */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 990, __pyx_L1_error) + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_numpy__core_umath_failed_to_impo); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 1031, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__2); __Pyx_GIVEREF(__pyx_tuple__2); - /* "DarkNews/Cfourvec.pyx":57 + /* "DarkNews/Cfourvec.pyx":60 * * #****************************** * def random_generator(int size, double min, double max): # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): */ - __pyx_tuple__4 = PyTuple_Pack(5, __pyx_n_s_size, __pyx_n_s_min, __pyx_n_s_max, __pyx_n_s_s, __pyx_n_s_i); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 57, __pyx_L1_error) + __pyx_tuple__4 = PyTuple_Pack(5, __pyx_n_s_size, __pyx_n_s_min, __pyx_n_s_max, __pyx_n_s_s, __pyx_n_s_i); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); __Pyx_GIVEREF(__pyx_tuple__4); - __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__4, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_random_generator, 57, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 57, __pyx_L1_error) + __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__4, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_random_generator, 60, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 60, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":64 + /* "DarkNews/Cfourvec.pyx":67 * * #****************************** - * def random_normal(ndarray[double, ndim=1] x, ndarray[double, ndim=1] sigma): # <<<<<<<<<<<<<< + * def random_normal(np.ndarray[DTYPE_t, ndim=1] x, np.ndarray[DTYPE_t, ndim=1] sigma): # <<<<<<<<<<<<<< * cdef int size = x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) */ - __pyx_tuple__6 = PyTuple_Pack(5, __pyx_n_s_x, __pyx_n_s_sigma, __pyx_n_s_size, __pyx_n_s_s, __pyx_n_s_i); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 64, __pyx_L1_error) + __pyx_tuple__6 = PyTuple_Pack(5, __pyx_n_s_x, __pyx_n_s_sigma, __pyx_n_s_size, __pyx_n_s_s, __pyx_n_s_i); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__6); __Pyx_GIVEREF(__pyx_tuple__6); - __pyx_codeobj__7 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__6, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_random_normal, 64, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__7)) __PYX_ERR(0, 64, __pyx_L1_error) + __pyx_codeobj__7 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__6, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_random_normal, 67, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__7)) __PYX_ERR(0, 67, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":77 + /* "DarkNews/Cfourvec.pyx":80 * * #****************************** - * def build_fourvec(ndarray[double, ndim=1] E, ndarray[double, ndim=1] p, ndarray[double, ndim=1] cost, ndarray[double, ndim=1] phi): # <<<<<<<<<<<<<< + * def build_fourvec(np.ndarray[DTYPE_t, ndim=1] E, np.ndarray[DTYPE_t, ndim=1] p, np.ndarray[DTYPE_t, ndim=1] cost, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * * cdef int i,m */ - __pyx_tuple__8 = PyTuple_Pack(7, __pyx_n_s_E, __pyx_n_s_p, __pyx_n_s_cost, __pyx_n_s_phi, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 77, __pyx_L1_error) + __pyx_tuple__8 = PyTuple_Pack(7, __pyx_n_s_E, __pyx_n_s_p, __pyx_n_s_cost, __pyx_n_s_phi, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 80, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__8); __Pyx_GIVEREF(__pyx_tuple__8); - __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_build_fourvec, 77, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 77, __pyx_L1_error) + __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_build_fourvec, 80, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 80, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":93 + /* "DarkNews/Cfourvec.pyx":96 * * #****************************** - * def momentum_scalar(ndarray[double] E, double mass): # <<<<<<<<<<<<<< + * def momentum_scalar(np.ndarray[DTYPE_t, ndim=1] E, double mass): # <<<<<<<<<<<<<< * * cdef int i,m */ - __pyx_tuple__10 = PyTuple_Pack(5, __pyx_n_s_E, __pyx_n_s_mass, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_tuple__10 = PyTuple_Pack(5, __pyx_n_s_E, __pyx_n_s_mass, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 96, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10); - __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_momentum_scalar, 93, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_momentum_scalar, 96, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 96, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":105 + /* "DarkNews/Cfourvec.pyx":108 * * #****************************** - * def get_theta_3vec(ndarray[double, ndim=2] r): # <<<<<<<<<<<<<< + * def get_theta_3vec(np.ndarray[DTYPE_t, ndim=2] r): # <<<<<<<<<<<<<< * * cdef int i,m */ - __pyx_tuple__12 = PyTuple_Pack(4, __pyx_n_s_r, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 105, __pyx_L1_error) + __pyx_tuple__12 = PyTuple_Pack(4, __pyx_n_s_r, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 108, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__12); __Pyx_GIVEREF(__pyx_tuple__12); - __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_get_theta_3vec, 105, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 105, __pyx_L1_error) + __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_get_theta_3vec, 108, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 108, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":117 + /* "DarkNews/Cfourvec.pyx":120 * * #****************************** - * def mass(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def mass(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_tuple__14 = PyTuple_Pack(4, __pyx_n_s_x, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_tuple__14 = PyTuple_Pack(4, __pyx_n_s_x, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__14); __Pyx_GIVEREF(__pyx_tuple__14); - __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_mass, 117, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_mass, 120, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(0, 120, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":131 + /* "DarkNews/Cfourvec.pyx":134 * * #****************************** - * def inv_mass(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def inv_mass(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_tuple__16 = PyTuple_Pack(5, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 131, __pyx_L1_error) + __pyx_tuple__16 = PyTuple_Pack(5, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_s); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 134, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__16); __Pyx_GIVEREF(__pyx_tuple__16); - __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_inv_mass, 131, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(0, 131, __pyx_L1_error) + __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_inv_mass, 134, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(0, 134, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":145 + /* "DarkNews/Cfourvec.pyx":148 * * #****************************** - * def dot4(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dot4(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_dot4, 145, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 145, __pyx_L1_error) + __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_dot4, 148, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 148, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":155 + /* "DarkNews/Cfourvec.pyx":158 * * #****************************** - * def dot3(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dot3(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_dot3, 155, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(0, 155, __pyx_L1_error) + __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_dot3, 158, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(0, 158, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":165 + /* "DarkNews/Cfourvec.pyx":168 * * #****************************** - * def dotXY(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dotXY(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_dotXY, 165, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 165, __pyx_L1_error) + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_dotXY, 168, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 168, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":175 + /* "DarkNews/Cfourvec.pyx":178 * * #****************************** - * def dotXY_vec(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dotXY_vec(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_dotXY_vec, 175, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 175, __pyx_L1_error) + __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_dotXY_vec, 178, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 178, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":185 + /* "DarkNews/Cfourvec.pyx":188 * * #****************************** - * def getXYnorm(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def getXYnorm(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_getXYnorm, 185, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 185, __pyx_L1_error) + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_getXYnorm, 188, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 188, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":194 + /* "DarkNews/Cfourvec.pyx":197 * return s * #****************************** - * def getXYnorm_3vec(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def getXYnorm_3vec(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_getXYnorm_3vec, 194, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 194, __pyx_L1_error) + __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_getXYnorm_3vec, 197, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 197, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":204 + /* "DarkNews/Cfourvec.pyx":207 * * #****************************** - * def get_vec_norm(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_vec_norm(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_get_vec_norm, 204, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 204, __pyx_L1_error) + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_get_vec_norm, 207, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 207, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":214 + /* "DarkNews/Cfourvec.pyx":217 * * #****************************** - * def get_3vec_norm(ndarray[double,ndim=2] x): # <<<<<<<<<<<<<< + * def get_3vec_norm(np.ndarray[DTYPE_t,ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_get_3vec_norm, 214, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 214, __pyx_L1_error) + __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_get_3vec_norm, 217, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 217, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":224 + /* "DarkNews/Cfourvec.pyx":227 * * #****************************** - * def get_3norm_vec(ndarray[double,ndim=2] x): # <<<<<<<<<<<<<< + * def get_3norm_vec(np.ndarray[DTYPE_t,ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_get_3norm_vec, 224, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 224, __pyx_L1_error) + __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_get_3norm_vec, 227, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 227, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":234 + /* "DarkNews/Cfourvec.pyx":237 * * #****************************** - * def get_3direction_3vec(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_3direction_3vec(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_get_3direction_3vec, 234, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 234, __pyx_L1_error) + __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_get_3direction_3vec, 237, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 237, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":246 + /* "DarkNews/Cfourvec.pyx":249 * * #****************************** - * def get_cosTheta(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_cosTheta(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_get_cosTheta, 246, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 246, __pyx_L1_error) + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_get_cosTheta, 249, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 249, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":256 + /* "DarkNews/Cfourvec.pyx":259 * * #****************************** - * def get_cos_opening_angle(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def get_cos_opening_angle(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_get_cos_opening_angle, 256, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 256, __pyx_L1_error) + __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_get_cos_opening_angle, 259, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 259, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":266 + /* "DarkNews/Cfourvec.pyx":269 * * #****************************** - * def get_3direction(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_3direction(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_get_3direction, 266, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 266, __pyx_L1_error) + __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_get_3direction, 269, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 269, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":278 + /* "DarkNews/Cfourvec.pyx":281 * * #****************************** - * def put_in_z_axis(ndarray[double, ndim=1] x): # <<<<<<<<<<<<<< + * def put_in_z_axis(np.ndarray[DTYPE_t, ndim=1] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_put_in_z_axis, 278, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 278, __pyx_L1_error) + __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_put_in_z_axis, 281, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 281, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":290 + /* "DarkNews/Cfourvec.pyx":293 * * #****************************** - * def rotationx(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationx(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_tuple__32 = PyTuple_Pack(6, __pyx_n_s_v4, __pyx_n_s_theta, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res, __pyx_n_s_R); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_tuple__32 = PyTuple_Pack(6, __pyx_n_s_v4, __pyx_n_s_theta, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res, __pyx_n_s_R); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32); - __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_rotationx, 290, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_rotationx, 293, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(0, 293, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":329 + /* "DarkNews/Cfourvec.pyx":332 * * #****************************** - * def rotationy(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationy(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_tuple__34 = PyTuple_Pack(5, __pyx_n_s_v4, __pyx_n_s_theta, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 329, __pyx_L1_error) + __pyx_tuple__34 = PyTuple_Pack(5, __pyx_n_s_v4, __pyx_n_s_theta, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 332, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__34); __Pyx_GIVEREF(__pyx_tuple__34); - __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_rotationy, 329, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) __PYX_ERR(0, 329, __pyx_L1_error) + __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_rotationy, 332, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) __PYX_ERR(0, 332, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":344 + /* "DarkNews/Cfourvec.pyx":347 * return res * #****************************** - * def rotationy_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): # <<<<<<<<<<<<<< + * def rotationy_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_tuple__36 = PyTuple_Pack(5, __pyx_n_s_v4, __pyx_n_s_stheta, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 344, __pyx_L1_error) + __pyx_tuple__36 = PyTuple_Pack(5, __pyx_n_s_v4, __pyx_n_s_stheta, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 347, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__36); __Pyx_GIVEREF(__pyx_tuple__36); - __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_rotationy_sin, 344, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 344, __pyx_L1_error) + __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_rotationy_sin, 347, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 347, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":359 + /* "DarkNews/Cfourvec.pyx":362 * return res * #****************************** - * def rotationy_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign=1): # <<<<<<<<<<<<<< + * def rotationy_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign=1): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_tuple__38 = PyTuple_Pack(6, __pyx_n_s_v4, __pyx_n_s_ctheta, __pyx_n_s_sign, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_tuple__38 = PyTuple_Pack(6, __pyx_n_s_v4, __pyx_n_s_ctheta, __pyx_n_s_sign, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 362, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__38); __Pyx_GIVEREF(__pyx_tuple__38); - __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_rotationy_cos, 359, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_rotationy_cos, 362, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 362, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":375 + /* "DarkNews/Cfourvec.pyx":378 * * #****************************** - * def rotationz(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationz(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_rotationz, 375, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 375, __pyx_L1_error) + __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_rotationz, 378, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 378, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":389 + /* "DarkNews/Cfourvec.pyx":392 * return res * #****************************** - * def rotationz_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): # <<<<<<<<<<<<<< + * def rotationz_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_rotationz_sin, 389, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 389, __pyx_L1_error) + __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_rotationz_sin, 392, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 392, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":403 + /* "DarkNews/Cfourvec.pyx":406 * return res * #****************************** - * def rotationz_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign = 1): # <<<<<<<<<<<<<< + * def rotationz_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign = 1): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_rotationz_cos, 403, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 403, __pyx_L1_error) + __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_rotationz_cos, 406, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 406, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":418 + /* "DarkNews/Cfourvec.pyx":421 * * #****************************** - * def L(ndarray[double, ndim=2] v4, ndarray[double] beta): # <<<<<<<<<<<<<< + * def L(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta): # <<<<<<<<<<<<<< * cdef int i, m; * m = beta.shape[0] */ - __pyx_tuple__43 = PyTuple_Pack(5, __pyx_n_s_v4, __pyx_n_s_beta, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 418, __pyx_L1_error) + __pyx_tuple__43 = PyTuple_Pack(5, __pyx_n_s_v4, __pyx_n_s_beta, __pyx_n_s_i, __pyx_n_s_m, __pyx_n_s_res); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__43); __Pyx_GIVEREF(__pyx_tuple__43); - __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_L, 418, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 418, __pyx_L1_error) + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_L, 421, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 421, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":432 + /* "DarkNews/Cfourvec.pyx":435 * * #****************************** - * def T(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] theta, ndarray[double] phi): # <<<<<<<<<<<<<< + * def T(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] theta, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * return L( rotationy( rotationz(v4,-phi), theta), -beta) * */ - __pyx_tuple__45 = PyTuple_Pack(4, __pyx_n_s_v4, __pyx_n_s_beta, __pyx_n_s_theta, __pyx_n_s_phi); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 432, __pyx_L1_error) + __pyx_tuple__45 = PyTuple_Pack(4, __pyx_n_s_v4, __pyx_n_s_beta, __pyx_n_s_theta, __pyx_n_s_phi); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 435, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__45); __Pyx_GIVEREF(__pyx_tuple__45); - __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_T, 432, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 432, __pyx_L1_error) + __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_T, 435, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 435, __pyx_L1_error) - /* "DarkNews/Cfourvec.pyx":436 + /* "DarkNews/Cfourvec.pyx":439 * * #****************************** - * def Tinv(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] ctheta, ndarray[double] phi): # <<<<<<<<<<<<<< + * def Tinv(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] ctheta, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * return rotationz( rotationy_cos( L(v4, beta), ctheta, sign=-1), phi) * */ - __pyx_tuple__47 = PyTuple_Pack(4, __pyx_n_s_v4, __pyx_n_s_beta, __pyx_n_s_ctheta, __pyx_n_s_phi); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 436, __pyx_L1_error) + __pyx_tuple__47 = PyTuple_Pack(4, __pyx_n_s_v4, __pyx_n_s_beta, __pyx_n_s_ctheta, __pyx_n_s_phi); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 439, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__47); __Pyx_GIVEREF(__pyx_tuple__47); - __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Cfourvec_pyx, __pyx_n_s_Tinv, 436, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 436, __pyx_L1_error) + __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_DarkNews_Cfourvec_pyx, __pyx_n_s_Tinv, 439, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 439, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -17307,28 +17594,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { /* #### Code section: init_globals ### */ static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - /* NumpyImportArray.init */ - /* - * Cython has automatically inserted a call to _import_array since - * you didn't include one when you cimported numpy. To disable this - * add the line - * numpy._import_array - */ -#ifdef NPY_FEATURE_VERSION -#ifndef NO_IMPORT_ARRAY -if (unlikely(_import_array() == -1)) { - PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import " - "(auto-generated because you didn't call 'numpy.import_array()' after cimporting numpy; " - "use 'numpy._import_array' to disable if you are certain you don't need it)."); -} -#endif -#endif - -if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; } /* #### Code section: init_module ### */ @@ -17382,33 +17648,33 @@ static int __Pyx_modinit_type_import_code(void) { /*--- Type import code ---*/ __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_0_8(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_0_11(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 - sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyTypeObject), + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyTypeObject), #elif CYTHON_COMPILING_IN_LIMITED_API - sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyTypeObject), + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyTypeObject), #else - sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyHeapTypeObject), + sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyHeapTypeObject), #endif - __Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(2, 9, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 202, __pyx_L1_error) + __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_5numpy_dtype = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyArray_Descr),__Pyx_ImportType_CheckSize_Ignore_3_0_8); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(1, 202, __pyx_L1_error) - __pyx_ptype_5numpy_flatiter = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyArrayIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_8); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(1, 225, __pyx_L1_error) - __pyx_ptype_5numpy_broadcast = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyArrayMultiIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_8); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(1, 229, __pyx_L1_error) - __pyx_ptype_5numpy_ndarray = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyArrayObject),__Pyx_ImportType_CheckSize_Ignore_3_0_8); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(1, 238, __pyx_L1_error) - __pyx_ptype_5numpy_generic = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_generic) __PYX_ERR(1, 809, __pyx_L1_error) - __pyx_ptype_5numpy_number = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "number", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_number) __PYX_ERR(1, 811, __pyx_L1_error) - __pyx_ptype_5numpy_integer = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_integer) __PYX_ERR(1, 813, __pyx_L1_error) - __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(1, 815, __pyx_L1_error) - __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(1, 817, __pyx_L1_error) - __pyx_ptype_5numpy_inexact = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(1, 819, __pyx_L1_error) - __pyx_ptype_5numpy_floating = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_floating) __PYX_ERR(1, 821, __pyx_L1_error) - __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(1, 823, __pyx_L1_error) - __pyx_ptype_5numpy_flexible = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(1, 825, __pyx_L1_error) - __pyx_ptype_5numpy_character = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "character", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_8); if (!__pyx_ptype_5numpy_character) __PYX_ERR(1, 827, __pyx_L1_error) - __pyx_ptype_5numpy_ufunc = __Pyx_ImportType_3_0_8(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_8(PyUFuncObject),__Pyx_ImportType_CheckSize_Ignore_3_0_8); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(1, 866, __pyx_L1_error) + __pyx_ptype_5numpy_dtype = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArray_Descr),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(1, 271, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(1, 316, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayMultiIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(1, 320, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(1, 359, __pyx_L1_error) + __pyx_ptype_5numpy_generic = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_generic) __PYX_ERR(1, 847, __pyx_L1_error) + __pyx_ptype_5numpy_number = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "number", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_number) __PYX_ERR(1, 849, __pyx_L1_error) + __pyx_ptype_5numpy_integer = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_integer) __PYX_ERR(1, 851, __pyx_L1_error) + __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(1, 853, __pyx_L1_error) + __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(1, 855, __pyx_L1_error) + __pyx_ptype_5numpy_inexact = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(1, 857, __pyx_L1_error) + __pyx_ptype_5numpy_floating = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_floating) __PYX_ERR(1, 859, __pyx_L1_error) + __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(1, 861, __pyx_L1_error) + __pyx_ptype_5numpy_flexible = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(1, 863, __pyx_L1_error) + __pyx_ptype_5numpy_character = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "character", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_character) __PYX_ERR(1, 865, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyUFuncObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(1, 929, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_RefNannyFinishContext(); return 0; @@ -17597,7 +17863,8 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_Cfourvec(PyObject *__pyx_pyinit_mo #endif PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -17718,419 +17985,443 @@ if (!__Pyx_RefNanny) { * * import numpy as np # <<<<<<<<<<<<<< * cimport numpy as np - * from numpy cimport ndarray + * */ __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "DarkNews/Cfourvec.pyx":57 + /* "DarkNews/Cfourvec.pyx":10 + * cimport numpy as np + * + * np.import_array() # <<<<<<<<<<<<<< + * DTYPE = np.float64 + * ctypedef np.float64_t DTYPE_t + */ + __pyx_t_3 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 10, __pyx_L1_error) + + /* "DarkNews/Cfourvec.pyx":11 + * + * np.import_array() + * DTYPE = np.float64 # <<<<<<<<<<<<<< + * ctypedef np.float64_t DTYPE_t + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_4) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "DarkNews/Cfourvec.pyx":60 * * #****************************** * def random_generator(int size, double min, double max): # <<<<<<<<<<<<<< - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) * for i in range(size): */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_1random_generator, 0, __pyx_n_s_random_generator, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_random_generator, __pyx_t_2) < 0) __PYX_ERR(0, 57, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_1random_generator, 0, __pyx_n_s_random_generator, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_random_generator, __pyx_t_4) < 0) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":64 + /* "DarkNews/Cfourvec.pyx":67 * * #****************************** - * def random_normal(ndarray[double, ndim=1] x, ndarray[double, ndim=1] sigma): # <<<<<<<<<<<<<< + * def random_normal(np.ndarray[DTYPE_t, ndim=1] x, np.ndarray[DTYPE_t, ndim=1] sigma): # <<<<<<<<<<<<<< * cdef int size = x.shape[0] - * cdef ndarray[double,ndim=1] s = np.empty((size)) + * cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_3random_normal, 0, __pyx_n_s_random_normal, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_random_normal, __pyx_t_2) < 0) __PYX_ERR(0, 64, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_3random_normal, 0, __pyx_n_s_random_normal, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__7)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_random_normal, __pyx_t_4) < 0) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":77 + /* "DarkNews/Cfourvec.pyx":80 * * #****************************** - * def build_fourvec(ndarray[double, ndim=1] E, ndarray[double, ndim=1] p, ndarray[double, ndim=1] cost, ndarray[double, ndim=1] phi): # <<<<<<<<<<<<<< + * def build_fourvec(np.ndarray[DTYPE_t, ndim=1] E, np.ndarray[DTYPE_t, ndim=1] p, np.ndarray[DTYPE_t, ndim=1] cost, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * * cdef int i,m */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_5build_fourvec, 0, __pyx_n_s_build_fourvec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_build_fourvec, __pyx_t_2) < 0) __PYX_ERR(0, 77, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_5build_fourvec, 0, __pyx_n_s_build_fourvec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_build_fourvec, __pyx_t_4) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":93 + /* "DarkNews/Cfourvec.pyx":96 * * #****************************** - * def momentum_scalar(ndarray[double] E, double mass): # <<<<<<<<<<<<<< + * def momentum_scalar(np.ndarray[DTYPE_t, ndim=1] E, double mass): # <<<<<<<<<<<<<< * * cdef int i,m */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_7momentum_scalar, 0, __pyx_n_s_momentum_scalar, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 93, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_momentum_scalar, __pyx_t_2) < 0) __PYX_ERR(0, 93, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_7momentum_scalar, 0, __pyx_n_s_momentum_scalar, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_momentum_scalar, __pyx_t_4) < 0) __PYX_ERR(0, 96, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":105 + /* "DarkNews/Cfourvec.pyx":108 * * #****************************** - * def get_theta_3vec(ndarray[double, ndim=2] r): # <<<<<<<<<<<<<< + * def get_theta_3vec(np.ndarray[DTYPE_t, ndim=2] r): # <<<<<<<<<<<<<< * * cdef int i,m */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_9get_theta_3vec, 0, __pyx_n_s_get_theta_3vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 105, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_theta_3vec, __pyx_t_2) < 0) __PYX_ERR(0, 105, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_9get_theta_3vec, 0, __pyx_n_s_get_theta_3vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_theta_3vec, __pyx_t_4) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":117 + /* "DarkNews/Cfourvec.pyx":120 * * #****************************** - * def mass(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def mass(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_11mass, 0, __pyx_n_s_mass, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__15)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_mass, __pyx_t_2) < 0) __PYX_ERR(0, 117, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_11mass, 0, __pyx_n_s_mass, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__15)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_mass, __pyx_t_4) < 0) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":131 + /* "DarkNews/Cfourvec.pyx":134 * * #****************************** - * def inv_mass(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def inv_mass(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_13inv_mass, 0, __pyx_n_s_inv_mass, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__17)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_inv_mass, __pyx_t_2) < 0) __PYX_ERR(0, 131, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_13inv_mass, 0, __pyx_n_s_inv_mass, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__17)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_inv_mass, __pyx_t_4) < 0) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":145 + /* "DarkNews/Cfourvec.pyx":148 * * #****************************** - * def dot4(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dot4(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_15dot4, 0, __pyx_n_s_dot4, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dot4, __pyx_t_2) < 0) __PYX_ERR(0, 145, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_15dot4, 0, __pyx_n_s_dot4, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dot4, __pyx_t_4) < 0) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":155 + /* "DarkNews/Cfourvec.pyx":158 * * #****************************** - * def dot3(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dot3(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_17dot3, 0, __pyx_n_s_dot3, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__19)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 155, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dot3, __pyx_t_2) < 0) __PYX_ERR(0, 155, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_17dot3, 0, __pyx_n_s_dot3, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__19)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dot3, __pyx_t_4) < 0) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":165 + /* "DarkNews/Cfourvec.pyx":168 * * #****************************** - * def dotXY(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dotXY(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_19dotXY, 0, __pyx_n_s_dotXY, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dotXY, __pyx_t_2) < 0) __PYX_ERR(0, 165, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_19dotXY, 0, __pyx_n_s_dotXY, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dotXY, __pyx_t_4) < 0) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":175 + /* "DarkNews/Cfourvec.pyx":178 * * #****************************** - * def dotXY_vec(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def dotXY_vec(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_21dotXY_vec, 0, __pyx_n_s_dotXY_vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__21)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dotXY_vec, __pyx_t_2) < 0) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_21dotXY_vec, 0, __pyx_n_s_dotXY_vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__21)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dotXY_vec, __pyx_t_4) < 0) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":185 + /* "DarkNews/Cfourvec.pyx":188 * * #****************************** - * def getXYnorm(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def getXYnorm(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_23getXYnorm, 0, __pyx_n_s_getXYnorm, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_getXYnorm, __pyx_t_2) < 0) __PYX_ERR(0, 185, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_23getXYnorm, 0, __pyx_n_s_getXYnorm, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_getXYnorm, __pyx_t_4) < 0) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":194 + /* "DarkNews/Cfourvec.pyx":197 * return s * #****************************** - * def getXYnorm_3vec(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def getXYnorm_3vec(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_25getXYnorm_3vec, 0, __pyx_n_s_getXYnorm_3vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_getXYnorm_3vec, __pyx_t_2) < 0) __PYX_ERR(0, 194, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_25getXYnorm_3vec, 0, __pyx_n_s_getXYnorm_3vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_getXYnorm_3vec, __pyx_t_4) < 0) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":204 + /* "DarkNews/Cfourvec.pyx":207 * * #****************************** - * def get_vec_norm(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_vec_norm(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_27get_vec_norm, 0, __pyx_n_s_get_vec_norm, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_vec_norm, __pyx_t_2) < 0) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_27get_vec_norm, 0, __pyx_n_s_get_vec_norm, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_vec_norm, __pyx_t_4) < 0) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":214 + /* "DarkNews/Cfourvec.pyx":217 * * #****************************** - * def get_3vec_norm(ndarray[double,ndim=2] x): # <<<<<<<<<<<<<< + * def get_3vec_norm(np.ndarray[DTYPE_t,ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_29get_3vec_norm, 0, __pyx_n_s_get_3vec_norm, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_3vec_norm, __pyx_t_2) < 0) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_29get_3vec_norm, 0, __pyx_n_s_get_3vec_norm, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_3vec_norm, __pyx_t_4) < 0) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":224 + /* "DarkNews/Cfourvec.pyx":227 * * #****************************** - * def get_3norm_vec(ndarray[double,ndim=2] x): # <<<<<<<<<<<<<< + * def get_3norm_vec(np.ndarray[DTYPE_t,ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_31get_3norm_vec, 0, __pyx_n_s_get_3norm_vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_3norm_vec, __pyx_t_2) < 0) __PYX_ERR(0, 224, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_31get_3norm_vec, 0, __pyx_n_s_get_3norm_vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_3norm_vec, __pyx_t_4) < 0) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":234 + /* "DarkNews/Cfourvec.pyx":237 * * #****************************** - * def get_3direction_3vec(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_3direction_3vec(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_33get_3direction_3vec, 0, __pyx_n_s_get_3direction_3vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 234, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_3direction_3vec, __pyx_t_2) < 0) __PYX_ERR(0, 234, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_33get_3direction_3vec, 0, __pyx_n_s_get_3direction_3vec, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_3direction_3vec, __pyx_t_4) < 0) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":246 + /* "DarkNews/Cfourvec.pyx":249 * * #****************************** - * def get_cosTheta(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_cosTheta(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_35get_cosTheta, 0, __pyx_n_s_get_cosTheta, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_cosTheta, __pyx_t_2) < 0) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_35get_cosTheta, 0, __pyx_n_s_get_cosTheta, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_cosTheta, __pyx_t_4) < 0) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":256 + /* "DarkNews/Cfourvec.pyx":259 * * #****************************** - * def get_cos_opening_angle(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): # <<<<<<<<<<<<<< + * def get_cos_opening_angle(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_37get_cos_opening_angle, 0, __pyx_n_s_get_cos_opening_angle, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__29)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_cos_opening_angle, __pyx_t_2) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_37get_cos_opening_angle, 0, __pyx_n_s_get_cos_opening_angle, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__29)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_cos_opening_angle, __pyx_t_4) < 0) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":266 + /* "DarkNews/Cfourvec.pyx":269 * * #****************************** - * def get_3direction(ndarray[double, ndim=2] x): # <<<<<<<<<<<<<< + * def get_3direction(np.ndarray[DTYPE_t, ndim=2] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_39get_3direction, 0, __pyx_n_s_get_3direction, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_3direction, __pyx_t_2) < 0) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_39get_3direction, 0, __pyx_n_s_get_3direction, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_3direction, __pyx_t_4) < 0) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":278 + /* "DarkNews/Cfourvec.pyx":281 * * #****************************** - * def put_in_z_axis(ndarray[double, ndim=1] x): # <<<<<<<<<<<<<< + * def put_in_z_axis(np.ndarray[DTYPE_t, ndim=1] x): # <<<<<<<<<<<<<< * cdef int i,m * m= x.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_41put_in_z_axis, 0, __pyx_n_s_put_in_z_axis, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_put_in_z_axis, __pyx_t_2) < 0) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_41put_in_z_axis, 0, __pyx_n_s_put_in_z_axis, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_put_in_z_axis, __pyx_t_4) < 0) __PYX_ERR(0, 281, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":290 + /* "DarkNews/Cfourvec.pyx":293 * * #****************************** - * def rotationx(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationx(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_43rotationx, 0, __pyx_n_s_rotationx, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__33)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationx, __pyx_t_2) < 0) __PYX_ERR(0, 290, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_43rotationx, 0, __pyx_n_s_rotationx, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__33)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 293, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationx, __pyx_t_4) < 0) __PYX_ERR(0, 293, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":329 + /* "DarkNews/Cfourvec.pyx":332 * * #****************************** - * def rotationy(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationy(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_45rotationy, 0, __pyx_n_s_rotationy, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__35)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationy, __pyx_t_2) < 0) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_45rotationy, 0, __pyx_n_s_rotationy, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__35)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationy, __pyx_t_4) < 0) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":344 + /* "DarkNews/Cfourvec.pyx":347 * return res * #****************************** - * def rotationy_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): # <<<<<<<<<<<<<< + * def rotationy_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_47rotationy_sin, 0, __pyx_n_s_rotationy_sin, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 344, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationy_sin, __pyx_t_2) < 0) __PYX_ERR(0, 344, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_47rotationy_sin, 0, __pyx_n_s_rotationy_sin, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 347, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationy_sin, __pyx_t_4) < 0) __PYX_ERR(0, 347, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":359 + /* "DarkNews/Cfourvec.pyx":362 * return res * #****************************** - * def rotationy_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign=1): # <<<<<<<<<<<<<< + * def rotationy_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign=1): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_t_2 = __Pyx_PyInt_From_int(((int)1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 359, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 359, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_2); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 359, __pyx_L1_error); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_49rotationy_cos, 0, __pyx_n_s_rotationy_cos, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 359, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_int(((int)1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationy_cos, __pyx_t_2) < 0) __PYX_ERR(0, 359, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4)) __PYX_ERR(0, 362, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_49rotationy_cos, 0, __pyx_n_s_rotationy_cos, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationy_cos, __pyx_t_4) < 0) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":375 + /* "DarkNews/Cfourvec.pyx":378 * * #****************************** - * def rotationz(ndarray[double, ndim=2] v4, ndarray[double] theta): # <<<<<<<<<<<<<< + * def rotationz(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_51rotationz, 0, __pyx_n_s_rotationz, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationz, __pyx_t_2) < 0) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_51rotationz, 0, __pyx_n_s_rotationz, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 378, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationz, __pyx_t_4) < 0) __PYX_ERR(0, 378, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":389 + /* "DarkNews/Cfourvec.pyx":392 * return res * #****************************** - * def rotationz_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): # <<<<<<<<<<<<<< + * def rotationz_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_53rotationz_sin, 0, __pyx_n_s_rotationz_sin, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationz_sin, __pyx_t_2) < 0) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_53rotationz_sin, 0, __pyx_n_s_rotationz_sin, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 392, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationz_sin, __pyx_t_4) < 0) __PYX_ERR(0, 392, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":403 + /* "DarkNews/Cfourvec.pyx":406 * return res * #****************************** - * def rotationz_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign = 1): # <<<<<<<<<<<<<< + * def rotationz_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign = 1): # <<<<<<<<<<<<<< * * cdef int i, m; */ - __pyx_t_2 = __Pyx_PyInt_From_int(((int)1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 403, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_2); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_55rotationz_cos, 0, __pyx_n_s_rotationz_cos, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_int(((int)1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 406, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationz_cos, __pyx_t_2) < 0) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4)) __PYX_ERR(0, 406, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_55rotationz_cos, 0, __pyx_n_s_rotationz_cos, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rotationz_cos, __pyx_t_4) < 0) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":418 + /* "DarkNews/Cfourvec.pyx":421 * * #****************************** - * def L(ndarray[double, ndim=2] v4, ndarray[double] beta): # <<<<<<<<<<<<<< + * def L(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta): # <<<<<<<<<<<<<< * cdef int i, m; * m = beta.shape[0] */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_57L, 0, __pyx_n_s_L, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_L, __pyx_t_2) < 0) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_57L, 0, __pyx_n_s_L, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_L, __pyx_t_4) < 0) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":432 + /* "DarkNews/Cfourvec.pyx":435 * * #****************************** - * def T(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] theta, ndarray[double] phi): # <<<<<<<<<<<<<< + * def T(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] theta, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * return L( rotationy( rotationz(v4,-phi), theta), -beta) * */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_59T, 0, __pyx_n_s_T, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_T, __pyx_t_2) < 0) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_59T, 0, __pyx_n_s_T, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_T, __pyx_t_4) < 0) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "DarkNews/Cfourvec.pyx":436 + /* "DarkNews/Cfourvec.pyx":439 * * #****************************** - * def Tinv(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] ctheta, ndarray[double] phi): # <<<<<<<<<<<<<< + * def Tinv(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] ctheta, np.ndarray[DTYPE_t, ndim=1] phi): # <<<<<<<<<<<<<< * return rotationz( rotationy_cos( L(v4, beta), ctheta, sign=-1), phi) * */ - __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_61Tinv, 0, __pyx_n_s_Tinv, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Tinv, __pyx_t_2) < 0) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8DarkNews_8Cfourvec_61Tinv, 0, __pyx_n_s_Tinv, NULL, __pyx_n_s_DarkNews_Cfourvec, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Tinv, __pyx_t_4) < 0) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "DarkNews/Cfourvec.pyx":1 * #cython: boundscheck=False # <<<<<<<<<<<<<< * #cython: language_level=3 * #cython: wraparound=False */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /*--- Wrapped vars code ---*/ goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); if (__pyx_m) { if (__pyx_d && stringtab_initialized) { __Pyx_AddTraceback("init DarkNews.Cfourvec", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -19156,280 +19447,54 @@ static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; } static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); -} -#endif - -/* GetModuleGlobalName */ -#if CYTHON_USE_DICT_VERSIONS -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) -#else -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) -#endif -{ - PyObject *result; -#if !CYTHON_AVOID_BORROWED_REFS -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 - result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } else if (unlikely(PyErr_Occurred())) { - return NULL; - } -#elif CYTHON_COMPILING_IN_LIMITED_API - if (unlikely(!__pyx_m)) { - return NULL; - } - result = PyObject_GetAttr(__pyx_m, name); - if (likely(result)) { - return result; - } -#else - result = PyDict_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } -#endif -#else - result = PyObject_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } - PyErr_Clear(); -#endif - return __Pyx_GetBuiltinName(name); -} - -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; -} -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; -#endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; - PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - #if PY_MAJOR_VERSION < 3 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { - return NULL; - } - #else - if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { - return NULL; - } - #endif - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && -#endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; - } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); -#endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } -#if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); -#endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); - return result; -} -#endif - -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); - self = __Pyx_CyOrPyCFunction_GET_SELF(func); - #if PY_MAJOR_VERSION < 3 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - #else - if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) - return NULL; - #endif - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectFastCall */ -#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API -static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { - PyObject *argstuple; - PyObject *result = 0; - size_t i; - argstuple = PyTuple_New((Py_ssize_t)nargs); - if (unlikely(!argstuple)) return NULL; - for (i = 0; i < nargs; i++) { - Py_INCREF(args[i]); - if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; - } - result = __Pyx_PyObject_Call(func, argstuple, kwargs); - bad: - Py_DECREF(argstuple); - return result; + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); } #endif -static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { - Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); -#if CYTHON_COMPILING_IN_CPYTHON - if (nargs == 0 && kwargs == NULL) { - if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) - return __Pyx_PyObject_CallMethO(func, NULL); - } - else if (nargs == 1 && kwargs == NULL) { - if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) - return __Pyx_PyObject_CallMethO(func, args[0]); - } + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) #endif - #if PY_VERSION_HEX < 0x030800B1 - #if CYTHON_FAST_PYCCALL - if (PyCFunction_Check(func)) { - if (kwargs) { - return _PyCFunction_FastCallDict(func, args, nargs, kwargs); - } else { - return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); - } +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; } - #if PY_VERSION_HEX >= 0x030700A1 - if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { - return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; } - #endif - #endif - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; } - #endif - #endif - if (kwargs == NULL) { - #if CYTHON_VECTORCALL - #if PY_VERSION_HEX < 0x03090000 - vectorcallfunc f = _PyVectorcall_Function(func); - #else - vectorcallfunc f = PyVectorcall_Function(func); - #endif - if (f) { - return f(func, args, (size_t)nargs, NULL); - } - #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL - if (__Pyx_CyFunction_CheckExact(func)) { - __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); - if (f) return f(func, args, (size_t)nargs, NULL); - } - #endif +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); } - if (nargs == 0) { - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); } - #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API - return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); - #else - return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); - #endif + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); } /* ExtTypeTest */ @@ -20020,38 +20085,264 @@ fail:; return -1; } -/* ArgTypeTest */ - static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) -{ - __Pyx_TypeName type_name; - __Pyx_TypeName obj_type_name; - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; +/* ArgTypeTest */ + static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* PyFunctionFastCall */ + #if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCallMethO */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ + #if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; } - else if (exact) { - #if PY_MAJOR_VERSION == 2 - if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } #endif } - else { - if (likely(__Pyx_TypeCheck(obj, type))) return 1; + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); } - type_name = __Pyx_PyType_GetName(type); - obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME - ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); - __Pyx_DECREF_TypeName(type_name); - __Pyx_DECREF_TypeName(obj_type_name); - return 0; + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif } /* TypeImport */ - #ifndef __PYX_HAVE_RT_ImportType_3_0_8 -#define __PYX_HAVE_RT_ImportType_3_0_8 -static PyTypeObject *__Pyx_ImportType_3_0_8(PyObject *module, const char *module_name, const char *class_name, - size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_8 check_size) + #ifndef __PYX_HAVE_RT_ImportType_3_0_11 +#define __PYX_HAVE_RT_ImportType_3_0_11 +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size) { PyObject *result = 0; char warning[200]; @@ -20105,7 +20396,7 @@ static PyTypeObject *__Pyx_ImportType_3_0_8(PyObject *module, const char *module module_name, class_name, size, basicsize+itemsize); goto bad; } - if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_8 && + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_11 && ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { PyErr_Format(PyExc_ValueError, "%.200s.%.200s size changed, may indicate binary incompatibility. " @@ -20113,7 +20404,7 @@ static PyTypeObject *__Pyx_ImportType_3_0_8(PyObject *module, const char *module module_name, class_name, size, basicsize, basicsize+itemsize); goto bad; } - else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_8 && (size_t)basicsize > size) { + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_11 && (size_t)basicsize > size) { PyOS_snprintf(warning, sizeof(warning), "%s.%s size changed, may indicate binary incompatibility. " "Expected %zd from C header, got %zd from PyObject", @@ -21372,7 +21663,7 @@ static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, default: return NULL; } - return ((_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); } static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) { @@ -21507,6 +21798,9 @@ static PyTypeObject __pyx_CyFunctionType_type = { #if PY_VERSION_HEX >= 0x030C0000 0, #endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, #endif @@ -22084,17 +22378,171 @@ static void __Pyx_ReleaseBuffer(Py_buffer *view) { /* Declarations */ #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #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); + 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 + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__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_double(__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_double(__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_double(__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; + } + #if 1 + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabs(b.real) >= fabs(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + double r = b.imag / b.real; + double s = (double)(1.0) / (b.real + b.imag * r); + return __pyx_t_double_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + double r = b.real / b.imag; + double s = (double)(1.0) / (b.imag + b.real * r); + return __pyx_t_double_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_double_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__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_double(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__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_double(__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_double(__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: + return __Pyx_c_prod_double(a, a); + case 3: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, a); + case 4: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = pow(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_double(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 + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + return ::std::complex< long 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; + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + return x + y*(__pyx_t_long_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; + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + __pyx_t_long_double_complex z; z.real = x; z.imag = y; return z; @@ -22104,88 +22552,88 @@ static void __Pyx_ReleaseBuffer(Py_buffer *view) { /* Arithmetic */ #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #else - static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_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_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_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_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_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; } #if 1 - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { if (b.imag == 0) { - return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); - } else if (fabs(b.real) >= fabs(b.imag)) { + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsl(b.real) >= fabsl(b.imag)) { if (b.real == 0 && b.imag == 0) { - return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag); + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.imag); } else { - double r = b.imag / b.real; - double s = (double)(1.0) / (b.real + b.imag * r); - return __pyx_t_double_complex_from_parts( + long double r = b.imag / b.real; + long double s = (long double)(1.0) / (b.real + b.imag * r); + return __pyx_t_long_double_complex_from_parts( (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); } } else { - double r = b.real / b.imag; - double s = (double)(1.0) / (b.imag + b.real * r); - return __pyx_t_double_complex_from_parts( + long double r = b.real / b.imag; + long double s = (long double)(1.0) / (b.imag + b.real * r); + return __pyx_t_long_double_complex_from_parts( (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); } } #else - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { if (b.imag == 0) { - return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); } else { - double denom = b.real * b.real + b.imag * b.imag; - return __pyx_t_double_complex_from_parts( + long double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_long_double_complex_from_parts( (a.real * b.real + a.imag * b.imag) / denom, (a.imag * b.real - a.real * b.imag) / denom); } } #endif - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) { - __pyx_t_double_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex a) { + __pyx_t_long_double_complex z; z.real = -a.real; z.imag = -a.imag; return z; } - static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) { + static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex a) { return (a.real == 0) && (a.imag == 0); } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) { - __pyx_t_double_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex a) { + __pyx_t_long_double_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 - static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) { + static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrt(z.real*z.real + z.imag*z.imag); + return sqrtl(z.real*z.real + z.imag*z.imag); #else - return hypot(z.real, z.imag); + return hypotl(z.real, z.imag); #endif } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - double r, lnr, theta, z_r, z_theta; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + long 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; + long double denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; @@ -22198,20 +22646,20 @@ static void __Pyx_ReleaseBuffer(Py_buffer *view) { case 1: return a; case 2: - return __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_long__double(a, a); case 3: - z = __Pyx_c_prod_double(a, a); - return __Pyx_c_prod_double(z, a); + z = __Pyx_c_prod_long__double(a, a); + return __Pyx_c_prod_long__double(z, a); case 4: - z = __Pyx_c_prod_double(a, a); - return __Pyx_c_prod_double(z, z); + z = __Pyx_c_prod_long__double(a, a); + return __Pyx_c_prod_long__double(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } else if ((b.imag == 0) && (a.real >= 0)) { - z.real = pow(a.real, b.real); + z.real = powl(a.real, b.real); z.imag = 0; return z; } else if (a.real > 0) { @@ -22219,17 +22667,17 @@ static void __Pyx_ReleaseBuffer(Py_buffer *view) { theta = 0; } else { r = -a.real; - theta = atan2(0.0, -1.0); + theta = atan2l(0.0, -1.0); } } else { - r = __Pyx_c_abs_double(a); - theta = atan2(a.imag, a.real); + r = __Pyx_c_abs_long__double(a); + theta = atan2l(a.imag, a.real); } - lnr = log(r); - z_r = exp(lnr * b.real - theta * b.imag); + lnr = logl(r); + z_r = expl(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); + z.real = z_r * cosl(z_theta); + z.imag = z_r * sinl(z_theta); return z; } #endif @@ -22257,245 +22705,239 @@ static void __Pyx_ReleaseBuffer(Py_buffer *view) { } return (int) val; } - } else + } #endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - if (unlikely(__Pyx_PyLong_IsNeg(x))) { - goto raise_neg_overflow; - } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_DigitCount(x)) { - case 2: - if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } - break; - case 3: - if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } - break; - case 4: - if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } - break; - } + } + break; } + } #endif #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } #else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } #endif - if ((sizeof(int) <= sizeof(unsigned long))) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif - } - } else { + } + } else { #if CYTHON_USE_PYLONG_INTERNALS - if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_SignedDigitCount(x)) { - case -2: - if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } - break; - case 2: - if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } - break; - case -3: - if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } - break; - case 3: - if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } - break; - case -4: - if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } - break; - case 4: - if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } - break; - } + } + break; } + } #endif - if ((sizeof(int) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif - } } - { - int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); -#if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } -#endif - if (likely(v)) { - int ret = -1; -#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); -#else - PyObject *stepval = NULL, *mask = NULL, *shift = NULL; - int bits, remaining_bits, is_negative = 0; - long idigit; - int chunk_size = (sizeof(long) < 8) ? 30 : 62; - if (unlikely(!PyLong_CheckExact(v))) { - PyObject *tmp = v; - v = PyNumber_Long(v); - assert(PyLong_CheckExact(v)); - Py_DECREF(tmp); - if (unlikely(!v)) return (int) -1; - } -#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 - if (Py_SIZE(x) == 0) - return (int) 0; - is_negative = Py_SIZE(x) < 0; + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); #else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - is_negative = result == 1; - } -#endif - if (is_unsigned && unlikely(is_negative)) { - goto raise_neg_overflow; - } else if (is_negative) { - stepval = PyNumber_Invert(v); - if (unlikely(!stepval)) - return (int) -1; - } else { - stepval = __Pyx_NewRef(v); - } - val = (int) 0; - mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; - shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { - PyObject *tmp, *digit; - digit = PyNumber_And(stepval, mask); - if (unlikely(!digit)) goto done; - idigit = PyLong_AsLong(digit); - Py_DECREF(digit); - if (unlikely(idigit < 0)) goto done; - tmp = PyNumber_Rshift(stepval, shift); - if (unlikely(!tmp)) goto done; - Py_DECREF(stepval); stepval = tmp; - val |= ((int) idigit) << bits; - #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 - if (Py_SIZE(stepval) == 0) - goto unpacking_done; - #endif - } - idigit = PyLong_AsLong(stepval); - if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); - if (unlikely(idigit >= (1L << remaining_bits))) - goto raise_overflow; - val |= ((int) idigit) << bits; - #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 - unpacking_done: - #endif - if (!is_unsigned) { - if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) - goto raise_overflow; - if (is_negative) - val = ~val; - } - ret = 0; - done: - Py_XDECREF(shift); - Py_XDECREF(mask); - Py_XDECREF(stepval); -#endif + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { Py_DECREF(v); - if (likely(!ret)) - return val; + return (int) -1; } - return (int) -1; + is_negative = result == 1; } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; return val; } raise_overflow: @@ -22539,12 +22981,19 @@ static void __Pyx_ReleaseBuffer(Py_buffer *view) { } } { - int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; -#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; return _PyLong_FromByteArray(bytes, sizeof(int), little, !is_unsigned); #else + int one = 1; int little = (int)*(unsigned char *)&one; PyObject *from_bytes, *result = NULL; PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); @@ -22619,12 +23068,19 @@ __Pyx_PyType_GetName(PyTypeObject* tp) } } { - int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; -#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; return _PyLong_FromByteArray(bytes, sizeof(long), little, !is_unsigned); #else + int one = 1; int little = (int)*(unsigned char *)&one; PyObject *from_bytes, *result = NULL; PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); @@ -22674,245 +23130,239 @@ __Pyx_PyType_GetName(PyTypeObject* tp) } return (long) val; } - } else + } #endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - if (unlikely(__Pyx_PyLong_IsNeg(x))) { - goto raise_neg_overflow; - } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_DigitCount(x)) { - case 2: - if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } - break; - case 3: - if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } - break; - case 4: - if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } - break; - } + } + break; } + } #endif #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } #else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } #endif - if ((sizeof(long) <= sizeof(unsigned long))) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif - } - } else { + } + } else { #if CYTHON_USE_PYLONG_INTERNALS - if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_SignedDigitCount(x)) { - case -2: - if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } - break; - case 2: - if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } - break; - case -3: - if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } - break; - case 3: - if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } - break; - case -4: - if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } - break; - case 4: - if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } - break; - } + } + break; } + } #endif - if ((sizeof(long) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif - } } - { - long val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); -#if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } -#endif - if (likely(v)) { - int ret = -1; -#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); -#else - PyObject *stepval = NULL, *mask = NULL, *shift = NULL; - int bits, remaining_bits, is_negative = 0; - long idigit; - int chunk_size = (sizeof(long) < 8) ? 30 : 62; - if (unlikely(!PyLong_CheckExact(v))) { - PyObject *tmp = v; - v = PyNumber_Long(v); - assert(PyLong_CheckExact(v)); - Py_DECREF(tmp); - if (unlikely(!v)) return (long) -1; - } -#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 - if (Py_SIZE(x) == 0) - return (long) 0; - is_negative = Py_SIZE(x) < 0; + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); #else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - is_negative = result == 1; - } -#endif - if (is_unsigned && unlikely(is_negative)) { - goto raise_neg_overflow; - } else if (is_negative) { - stepval = PyNumber_Invert(v); - if (unlikely(!stepval)) - return (long) -1; - } else { - stepval = __Pyx_NewRef(v); - } - val = (long) 0; - mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; - shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { - PyObject *tmp, *digit; - digit = PyNumber_And(stepval, mask); - if (unlikely(!digit)) goto done; - idigit = PyLong_AsLong(digit); - Py_DECREF(digit); - if (unlikely(idigit < 0)) goto done; - tmp = PyNumber_Rshift(stepval, shift); - if (unlikely(!tmp)) goto done; - Py_DECREF(stepval); stepval = tmp; - val |= ((long) idigit) << bits; - #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 - if (Py_SIZE(stepval) == 0) - goto unpacking_done; - #endif - } - idigit = PyLong_AsLong(stepval); - if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); - if (unlikely(idigit >= (1L << remaining_bits))) - goto raise_overflow; - val |= ((long) idigit) << bits; - #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 - unpacking_done: - #endif - if (!is_unsigned) { - if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) - goto raise_overflow; - if (is_negative) - val = ~val; - } - ret = 0; - done: - Py_XDECREF(shift); - Py_XDECREF(mask); - Py_XDECREF(stepval); -#endif + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { Py_DECREF(v); - if (likely(!ret)) - return val; + return (long) -1; } - return (long) -1; + is_negative = result == 1; } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; return val; } raise_overflow: diff --git a/src/DarkNews/Cfourvec.pyx b/src/DarkNews/Cfourvec.pyx index 1cd69de..7792a36 100755 --- a/src/DarkNews/Cfourvec.pyx +++ b/src/DarkNews/Cfourvec.pyx @@ -6,7 +6,10 @@ import numpy as np cimport numpy as np -from numpy cimport ndarray + +np.import_array() +DTYPE = np.float64 +ctypedef np.float64_t DTYPE_t ####################################### # C functions to be used @@ -55,15 +58,15 @@ cdef double NormalRand(double mean, double stddev): #****************************** def random_generator(int size, double min, double max): - cdef ndarray[double,ndim=1] s = np.empty((size)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) for i in range(size): s[i] = (max-min)*UniformRand()+min return s #****************************** -def random_normal(ndarray[double, ndim=1] x, ndarray[double, ndim=1] sigma): +def random_normal(np.ndarray[DTYPE_t, ndim=1] x, np.ndarray[DTYPE_t, ndim=1] sigma): cdef int size = x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((size)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((size), dtype=DTYPE) for i in range(size): s[i] = NormalRand(x[i], sigma[i]) return s @@ -74,11 +77,11 @@ def random_normal(ndarray[double, ndim=1] x, ndarray[double, ndim=1] sigma): ####################################### #****************************** -def build_fourvec(ndarray[double, ndim=1] E, ndarray[double, ndim=1] p, ndarray[double, ndim=1] cost, ndarray[double, ndim=1] phi): +def build_fourvec(np.ndarray[DTYPE_t, ndim=1] E, np.ndarray[DTYPE_t, ndim=1] p, np.ndarray[DTYPE_t, ndim=1] cost, np.ndarray[DTYPE_t, ndim=1] phi): cdef int i,m m = phi.shape[0] - cdef ndarray[double,ndim=2] s = np.empty((m,4)) + cdef np.ndarray[DTYPE_t,ndim=2] s = np.empty((m,4), dtype=DTYPE) with nogil: for i in range(m): @@ -90,11 +93,11 @@ def build_fourvec(ndarray[double, ndim=1] E, ndarray[double, ndim=1] p, ndarray[ return s #****************************** -def momentum_scalar(ndarray[double] E, double mass): +def momentum_scalar(np.ndarray[DTYPE_t, ndim=1] E, double mass): cdef int i,m m = E.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): @@ -102,11 +105,11 @@ def momentum_scalar(ndarray[double] E, double mass): return s #****************************** -def get_theta_3vec(ndarray[double, ndim=2] r): +def get_theta_3vec(np.ndarray[DTYPE_t, ndim=2] r): cdef int i,m m = r.shape[0] - cdef ndarray[double, ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): @@ -114,10 +117,10 @@ def get_theta_3vec(ndarray[double, ndim=2] r): return s #****************************** -def mass(ndarray[double, ndim=2] x): +def mass(np.ndarray[DTYPE_t, ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = x[i,0]*x[i,0] - x[i,1]*x[i,1] - x[i,2]*x[i,2] - x[i,3]*x[i,3] @@ -128,10 +131,10 @@ def mass(ndarray[double, ndim=2] x): return s #****************************** -def inv_mass(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): +def inv_mass(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): cdef int i,m m= x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] @@ -142,99 +145,99 @@ def inv_mass(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): return s #****************************** -def dot4(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): +def dot4(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): cdef int i,m m= x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = x[i,0]*y[i,0] - x[i,1]*y[i,1] - x[i,2]*y[i,2] - x[i,3]*y[i,3] return s #****************************** -def dot3(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): +def dot3(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): cdef int i,m m= x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3] return s #****************************** -def dotXY(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): +def dotXY(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): cdef int i,m m= x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = x[i,1]*y[i,1] + x[i,2]*y[i,2] return s #****************************** -def dotXY_vec(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): +def dotXY_vec(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): cdef int i,m m= x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = x[i,0]*y[i,0] + x[i,1]*y[i,1] return s #****************************** -def getXYnorm(ndarray[double, ndim=2] x): +def getXYnorm(np.ndarray[DTYPE_t, ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2]) return s #****************************** -def getXYnorm_3vec(ndarray[double, ndim=2] x): +def getXYnorm_3vec(np.ndarray[DTYPE_t, ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double,ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t,ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1]) return s #****************************** -def get_vec_norm(ndarray[double, ndim=2] x): +def get_vec_norm(np.ndarray[DTYPE_t, ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double, ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = sqrt(x[i,0]*x[i,0] + x[i,1]*x[i,1] + x[i,2]*x[i,2]) return s #****************************** -def get_3vec_norm(ndarray[double,ndim=2] x): +def get_3vec_norm(np.ndarray[DTYPE_t,ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double, ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) return s #****************************** -def get_3norm_vec(ndarray[double,ndim=2] x): +def get_3norm_vec(np.ndarray[DTYPE_t,ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double, ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) return s #****************************** -def get_3direction_3vec(ndarray[double, ndim=2] x): +def get_3direction_3vec(np.ndarray[DTYPE_t, ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double, ndim=2] s = np.empty((m,3)) + cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) with nogil: for i in range(m): s[i,0] = x[i,0]/sqrt(x[i,0]*x[i,0]+x[i,1]*x[i,1]+x[i,2]*x[i,2]) @@ -243,30 +246,30 @@ def get_3direction_3vec(ndarray[double, ndim=2] x): return s #****************************** -def get_cosTheta(ndarray[double, ndim=2] x): +def get_cosTheta(np.ndarray[DTYPE_t, ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double, ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = x[i,3]/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3]) return s #****************************** -def get_cos_opening_angle(ndarray[double, ndim=2] x, ndarray[double, ndim=2] y): +def get_cos_opening_angle(np.ndarray[DTYPE_t, ndim=2] x, np.ndarray[DTYPE_t, ndim=2] y): cdef int i,m m= x.shape[0] - cdef ndarray[double, ndim=1] s = np.empty((m)) + cdef np.ndarray[DTYPE_t, ndim=1] s = np.empty((m), dtype=DTYPE) with nogil: for i in range(m): s[i] = (x[i,1]*y[i,1] + x[i,2]*y[i,2] + x[i,3]*y[i,3])/sqrt(x[i,1]*x[i,1] + x[i,2]*x[i,2] + x[i,3]*x[i,3])/sqrt(y[i,1]*y[i,1] + y[i,2]*y[i,2] + y[i,3]*y[i,3]) return s #****************************** -def get_3direction(ndarray[double, ndim=2] x): +def get_3direction(np.ndarray[DTYPE_t, ndim=2] x): cdef int i,m m= x.shape[0] - cdef ndarray[double, ndim=2] s = np.empty((m,3)) + cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) with nogil: for i in range(m): s[i,0] = x[i,1]/sqrt(x[i,1]*x[i,1]+x[i,2]*x[i,2]+x[i,3]*x[i,3]) @@ -275,10 +278,10 @@ def get_3direction(ndarray[double, ndim=2] x): return s #****************************** -def put_in_z_axis(ndarray[double, ndim=1] x): +def put_in_z_axis(np.ndarray[DTYPE_t, ndim=1] x): cdef int i,m m= x.shape[0] - cdef ndarray[double, ndim=2] s = np.empty((m,3)) + cdef np.ndarray[DTYPE_t, ndim=2] s = np.empty((m,3), dtype=DTYPE) with nogil: for i in range(m): s[i,0] = 0.0 @@ -287,14 +290,14 @@ def put_in_z_axis(ndarray[double, ndim=1] x): return s #****************************** -def rotationx(ndarray[double, ndim=2] v4, ndarray[double] theta): +def rotationx(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): cdef int i, m; m = v4.shape[0] - cdef ndarray[double, ndim=2] res = np.empty((m,4)) - cdef ndarray[double, ndim=3] R = np.empty((m,4,4)) + cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) + cdef np.ndarray[DTYPE_t, ndim=3] R = np.empty((m,4,4), dtype=DTYPE) with nogil: for i in range(m): @@ -326,11 +329,11 @@ def rotationx(ndarray[double, ndim=2] v4, ndarray[double] theta): return res #****************************** -def rotationy(ndarray[double, ndim=2] v4, ndarray[double] theta): +def rotationy(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): cdef int i, m; m = v4.shape[0] - cdef ndarray[double, ndim=2] res = np.empty((m,4)) + cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) with nogil: for i in range(m): @@ -341,11 +344,11 @@ def rotationy(ndarray[double, ndim=2] v4, ndarray[double] theta): return res #****************************** -def rotationy_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): +def rotationy_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): cdef int i, m; m = v4.shape[0] - cdef ndarray[double, ndim=2] res = np.empty((m,4)) + cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) with nogil: for i in range(m): @@ -356,11 +359,11 @@ def rotationy_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): return res #****************************** -def rotationy_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign=1): +def rotationy_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign=1): cdef int i, m; m = v4.shape[0] - cdef ndarray[double, ndim=2] res = np.empty((m,4)) + cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) with nogil: for i in range(m): @@ -372,11 +375,11 @@ def rotationy_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign=1 return res #****************************** -def rotationz(ndarray[double, ndim=2] v4, ndarray[double] theta): +def rotationz(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] theta): cdef int i, m; m = v4.shape[0] - cdef ndarray[double, ndim=2] res = np.empty((m,4)) + cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) with nogil: for i in range(m): res[i,0] = v4[i,0] @@ -386,11 +389,11 @@ def rotationz(ndarray[double, ndim=2] v4, ndarray[double] theta): return res #****************************** -def rotationz_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): +def rotationz_sin(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] stheta): cdef int i, m; m = v4.shape[0] - cdef ndarray[double, ndim=2] res = np.empty((m,4)) + cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) with nogil: for i in range(m): res[i,0] = v4[i,0] @@ -400,11 +403,11 @@ def rotationz_sin(ndarray[double, ndim=2] v4, ndarray[double] stheta): return res #****************************** -def rotationz_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign = 1): +def rotationz_cos(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] ctheta, int sign = 1): cdef int i, m; m = v4.shape[0] - cdef ndarray[double, ndim=2] res = np.empty((m,4)) + cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) with nogil: for i in range(m): res[i,0] = v4[i,0] @@ -415,10 +418,10 @@ def rotationz_cos(ndarray[double, ndim=2] v4, ndarray[double] ctheta, int sign = return res #****************************** -def L(ndarray[double, ndim=2] v4, ndarray[double] beta): +def L(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta): cdef int i, m; m = beta.shape[0] - cdef ndarray[double, ndim=2] res = np.empty((m,4)) + cdef np.ndarray[DTYPE_t, ndim=2] res = np.empty((m,4), dtype=DTYPE) with nogil: for i in range(m): res[i,0] = 1.0/sqrt(1.0 - beta[i]*beta[i])*v4[i,0] - beta[i]/sqrt(1.0 - beta[i]*beta[i])*v4[i,3] @@ -429,10 +432,10 @@ def L(ndarray[double, ndim=2] v4, ndarray[double] beta): return res #****************************** -def T(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] theta, ndarray[double] phi): +def T(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] theta, np.ndarray[DTYPE_t, ndim=1] phi): return L( rotationy( rotationz(v4,-phi), theta), -beta) #****************************** -def Tinv(ndarray[double, ndim=2] v4, ndarray[double] beta, ndarray[double] ctheta, ndarray[double] phi): +def Tinv(np.ndarray[DTYPE_t, ndim=2] v4, np.ndarray[DTYPE_t, ndim=1] beta, np.ndarray[DTYPE_t, ndim=1] ctheta, np.ndarray[DTYPE_t, ndim=1] phi): return rotationz( rotationy_cos( L(v4, beta), ctheta, sign=-1), phi) diff --git a/src/DarkNews/GenLauncher.py b/src/DarkNews/GenLauncher.py index 304119e..26a01f5 100644 --- a/src/DarkNews/GenLauncher.py +++ b/src/DarkNews/GenLauncher.py @@ -564,7 +564,7 @@ def _drop_zero_weight_samples(self): zero_entries = self.df["w_event_rate"] == 0 if zero_entries.sum() / len(self.df.index) > 0.01: logger.warning( - f"Warning: number of entries with w_event_rate = 0 surpasses 1% of number of samples. Found: {zero_entries.sum()/len(self.df.index)}." + f"Warning: number of entries with w_event_rate = 0 surpasses 1% of number of samples. Found: {zero_entries.sum()/len(self.df.index)*100:.2f}%. Sampling is likely not convering or integrand is too sparse." ) self.df = self.df.drop(self.df[zero_entries].index).reset_index(drop=True) diff --git a/src/DarkNews/__init__.py b/src/DarkNews/__init__.py index e6d61eb..c24d1f3 100755 --- a/src/DarkNews/__init__.py +++ b/src/DarkNews/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.4.5" +__version__ = "0.4.6" import sys diff --git a/src/DarkNews/const.py b/src/DarkNews/const.py index cb5870c..a697338 100755 --- a/src/DarkNews/const.py +++ b/src/DarkNews/const.py @@ -7,11 +7,15 @@ Some low-level auxiliary functions are defined. """ + import numpy as np from numpy import sqrt from scipy import interpolate -import importlib.resources as resources +try: + from importlib.resources import files +except ImportError: + from importlib_resources import files ################################################ # constants of light cm/s @@ -115,7 +119,7 @@ eQED = np.sqrt((4 * np.pi) * alphaQED) # get running alphaQED -Q, inv_alphaQED = np.genfromtxt(resources.open_text("DarkNews.include.aux_data", "alpha_QED_running_posQ2.dat"), unpack=True) +Q, inv_alphaQED = np.genfromtxt(files("DarkNews.include.aux_data").joinpath("alpha_QED_running_posQ2.dat").open(), unpack=True) runningAlphaQED = interpolate.interp1d(Q, 1.0 / inv_alphaQED) ################################################ @@ -231,6 +235,10 @@ def kallen_sqrt(a, b, c): return np.sqrt(kallen(a, b, c)) +def rng_interval(size, a, b, rng): + return rng(size) * (a - b) + b + + # aliases used in MATHEMATICA copy-paste MZBOSON = m_Z MW = m_W diff --git a/src/DarkNews/detector.py b/src/DarkNews/detector.py index d603107..310d5c3 100644 --- a/src/DarkNews/detector.py +++ b/src/DarkNews/detector.py @@ -2,7 +2,11 @@ from scipy import interpolate import os.path import os -import importlib.resources as resources + +try: + from importlib.resources import files +except ImportError: + from importlib_resources import files import logging @@ -72,7 +76,7 @@ def __init__(self, experiment): except (OSError, IOError, FileNotFoundError) as err: # if no file is found, then it is interpreted as a keyword for a pre-defined experiment if experiment in self.KEYWORDS: - with resources.files(DET_MODULE).joinpath(self.KEYWORDS[experiment]).open(**kwargs) as f: + with files(DET_MODULE).joinpath(self.KEYWORDS[experiment]).open(**kwargs) as f: parser.parse_file(file=f, comments="#") else: raise err @@ -114,7 +118,7 @@ def __init__(self, experiment): _enu, *_fluxes = np.genfromtxt(f"{exp_dir}/{self.FLUXFILE}", unpack=True) except (OSError, FileNotFoundError, TypeError): try: - file = resources.files("DarkNews.include.fluxes").joinpath(self.FLUXFILE).open() + file = files("DarkNews.include.fluxes").joinpath(self.FLUXFILE).open() _enu, *_fluxes = np.genfromtxt(file, unpack=True) except FileNotFoundError: raise FileNotFoundError(f"Fluxes file {self.FLUXFILE} not found in current experiment file path nor in config file path.") diff --git a/src/DarkNews/geom.py b/src/DarkNews/geom.py index d2bd1ee..0c8ebca 100644 --- a/src/DarkNews/geom.py +++ b/src/DarkNews/geom.py @@ -3,7 +3,10 @@ from DarkNews import Cfourvec as Cfv from numpy.random import choice -import importlib.resources as resources +try: + from importlib.resources import files +except ImportError: + from importlib_resources import files ################## ROTATION FUNCTIONS ###################### @@ -65,8 +68,8 @@ def rotate_dataframe(df): # get flux angle normalization and decay position of pions for BNB n_ebins = 99 BNB_enu_max = 4.245909093808516 # GeV -BNB_fluxes = np.genfromtxt(resources.files("DarkNews.include.fluxes").joinpath("BNB_angle_energy_normalization.dat").open("r")) -BNB_energies_positions = np.genfromtxt(resources.files("DarkNews.include.fluxes").joinpath("BNB_energy_distances.dat").open("r")) +BNB_fluxes = np.genfromtxt(files("DarkNews.include.fluxes").joinpath("BNB_angle_energy_normalization.dat").open("r")) +BNB_energies_positions = np.genfromtxt(files("DarkNews.include.fluxes").joinpath("BNB_energy_distances.dat").open("r")) BNB_energy_nu = BNB_energies_positions[1:, 0] BNB_energy_nu_bins = np.linspace(0, BNB_enu_max, n_ebins + 1) BNB_e_bins_angle = np.linspace(0, BNB_enu_max, 100) @@ -77,6 +80,37 @@ def rotate_dataframe(df): radius_decay_pipe = 35.0 # cm +def sample_neutrino_origin_at_MiniBooNE(E_nu): + # Define number of E bins in MiniBooNE flux simulation + n_ebins = 99 + + # Creating e_bins using np.searchsorted and np.clip + e_bins = np.clip(np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1, 0, n_ebins - 1) + + # Ensure probs_distance is correctly normalized + probs_distance = np.where( + np.sum(BNB_e_vs_z_dist, axis=1, keepdims=True) != 0, BNB_e_vs_z_dist / (np.sum(BNB_e_vs_z_dist, axis=1, keepdims=True) + 1e-18), BNB_e_vs_z_dist + ) + + # Flattened choice to handle vectorized approach more efficiently + choices = np.random.random(size=len(e_bins)) + + # Cumulative distribution for more efficient sampling + cumulative_probs = np.cumsum(probs_distance, axis=1) + + # Allocating space for results + origin = np.zeros(len(e_bins)) + + # Vectorized sampling using cumulative probabilities + for i, e in enumerate(e_bins): + if cumulative_probs[e, -1] > 0: # Ensure it’s not an all-zero row + origin[i] = BNB_distances_nu[np.searchsorted(cumulative_probs[e], choices[i])] + else: + origin[i] = np.random.choice(BNB_distances_nu) + + return origin * 1e2 + + class Chisel: def __init__(self, nsamples, box=np.array(3 * [[-0.5, 0.5]]), name="my_mold"): """ @@ -349,18 +383,7 @@ def sbnd_geometry(df): df["pos_scatt", "2"] = events[1, :nsamples] df["pos_scatt", "3"] = events[2, :nsamples] - # Compute the mean position where the pions decayed - n_ebins = 99 - E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(df["P_projectile", "0"].values) length_events = len(df) u_normal = np.random.random(length_events) @@ -405,18 +428,7 @@ def icarus_geometry(df): df["pos_scatt", "2"] = events[1, :nsamples] df["pos_scatt", "3"] = events[2, :nsamples] - # Compute the mean position where the pions decayed - n_ebins = 99 - E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(df["P_projectile", "0"].values) length_events = len(df) u_normal = np.random.random(length_events) @@ -464,18 +476,7 @@ def miniboone_dirt_geometry(df): df["pos_scatt", "2"] = y0 df["pos_scatt", "3"] = z0 - # Compute the mean position where the pions decayed - n_ebins = 99 - E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(df["P_projectile", "0"].values) length_events = len(df) u_normal = np.random.random(length_events) @@ -522,18 +523,7 @@ def microboone_dirt_geometry(df): df["pos_scatt", "2"] = y0 df["pos_scatt", "3"] = z0 - # Compute the mean position where the pions decayed - n_ebins = 99 - E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(df["P_projectile", "0"].values) u_normal = np.random.random(length_events) phi_normal = np.random.random(length_events) * 2.0 * np.pi @@ -579,18 +569,7 @@ def sbnd_dirt_cone_geometry(df): df["pos_scatt", "2"] = y0 df["pos_scatt", "3"] = z0 - # Compute the mean position where the pions decayed - n_ebins = 99 - E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(df["P_projectile", "0"].values) u_normal = np.random.random(length_events) phi_normal = np.random.random(length_events) * 2.0 * np.pi @@ -636,18 +615,7 @@ def icarus_dirt_geometry(df): df["pos_scatt", "2"] = y0 df["pos_scatt", "3"] = z0 - # Compute the mean position where the pions decayed - n_ebins = 99 - E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(df["P_projectile", "0"].values) u_normal = np.random.random(length_events) phi_normal = np.random.random(length_events) * 2.0 * np.pi @@ -677,18 +645,7 @@ def microboone_tpc_geometry(df): df["pos_scatt", "2"] = np.random.random(length_events) * (y_muB) - y_muB / 2.0 df["pos_scatt", "3"] = z0 - # Compute the mean position where the pions decayed - n_ebins = 99 - E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(df["P_projectile", "0"].values) u_normal = np.random.random(length_events) phi_normal = np.random.random(length_events) * 2.0 * np.pi @@ -717,18 +674,8 @@ def sbnd_dirt_geometry(df): df["pos_scatt", "2"] = np.random.random(length_events) * (y_sbnd_dirt_max - y_sbnd_dirt_min) + y_sbnd_dirt_min df["pos_scatt", "3"] = z0 - # Compute the mean position where the pions decayed - n_ebins = 99 E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(E_nu) u_normal = np.random.random(length_events) phi_normal = np.random.random(length_events) * 2.0 * np.pi @@ -797,17 +744,7 @@ def miniboone_geometry(df): df["pos_scatt", "3"] = events[2, :nsamples] # Compute the mean position where the pions decayed - n_ebins = 99 - E_nu = df["P_projectile", "0"].values - e_bins = np.searchsorted(BNB_energy_nu_bins, E_nu, side="right") - 1 - if n_ebins in e_bins: - mask = e_bins >= n_ebins - e_bins[mask] = n_ebins - 1 - probs_distance = np.ones_like(BNB_e_vs_z_dist) - for i in range(len(probs_distance)): - if BNB_e_vs_z_dist[e_bins[i], :].sum() != 0: - probs_distance[i] = BNB_e_vs_z_dist[e_bins[i], :] - origin = np.array([choice(BNB_distances_nu, 1, p=probs_distance[e_bins[i]] / probs_distance[e_bins[i]].sum())[0] * 1e2 for i in range(len(e_bins))]) + origin = sample_neutrino_origin_at_MiniBooNE(df["P_projectile", "0"].values) length_events = len(df) u_normal = np.random.random(length_events) diff --git a/src/DarkNews/integrands.py b/src/DarkNews/integrands.py index bce6476..dba33db 100755 --- a/src/DarkNews/integrands.py +++ b/src/DarkNews/integrands.py @@ -551,7 +551,7 @@ def get_momenta_from_vegas_samples(vsamples, MC_case): "m4": MA, # final target } - P1LAB, P2LAB, P3LAB, P4LAB = phase_space.two_to_two_scatter(scatter_samples, **masses_scatter) + P1LAB, P2LAB, P3LAB, P4LAB = phase_space.two_to_two_scatter(scatter_samples, **masses_scatter, rng=MC_case.rng) # N boost parameters boost_scattered_N = { @@ -593,7 +593,7 @@ def get_momenta_from_vegas_samples(vsamples, MC_case): "m3": m_mediator, # Z' } # Phnl, Phnl_daughter, Pz' - P1LAB_decay, P2LAB_decay, P3LAB_decay = phase_space.two_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay) + P1LAB_decay, P2LAB_decay, P3LAB_decay = phase_space.two_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay, rng=MC_case.rng) # Z' boost parameters boost_Z = { @@ -613,7 +613,7 @@ def get_momenta_from_vegas_samples(vsamples, MC_case): "m3": mm, # \ell- } # PZ', pe-, pe+ - P1LAB_decayZ, P2LAB_decayZ, P3LAB_decayZ = phase_space.two_body_decay(Z_decay_samples, boost=boost_Z, **masses_decay) + P1LAB_decayZ, P2LAB_decayZ, P3LAB_decayZ = phase_space.two_body_decay(Z_decay_samples, boost=boost_Z, **masses_decay, rng=MC_case.rng) four_momenta["P_decay_N_parent"] = P1LAB_decay four_momenta["P_decay_N_daughter"] = P2LAB_decay @@ -644,7 +644,7 @@ def get_momenta_from_vegas_samples(vsamples, MC_case): P2LAB_decay, P3LAB_decay, P4LAB_decay, - ) = phase_space.three_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay) + ) = phase_space.three_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay, rng=MC_case.rng) four_momenta["P_decay_N_parent"] = P1LAB_decay four_momenta["P_decay_ell_minus"] = P2LAB_decay @@ -666,7 +666,7 @@ def get_momenta_from_vegas_samples(vsamples, MC_case): "m3": 0.0, # gamma } # Phnl, Phnl', Pgamma - P1LAB_decay, P2LAB_decay, P3LAB_decay = phase_space.two_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay) + P1LAB_decay, P2LAB_decay, P3LAB_decay = phase_space.two_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay, rng=MC_case.rng) four_momenta["P_decay_N_parent"] = P1LAB_decay four_momenta["P_decay_N_daughter"] = P2LAB_decay @@ -732,7 +732,7 @@ def get_decay_momenta_from_vegas_samples(vsamples, decay_case, PN_LAB): "m3": m_mediator, # Z' } # Phnl, Phnl_daughter, Pz' - P1LAB_decay, P2LAB_decay, P3LAB_decay = phase_space.two_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay) + P1LAB_decay, P2LAB_decay, P3LAB_decay = phase_space.two_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay, rng=MC_case.rng) # Z' boost parameters boost_Z = { @@ -751,7 +751,7 @@ def get_decay_momenta_from_vegas_samples(vsamples, decay_case, PN_LAB): "m3": mm, # \ell- } # PZ', pe-, pe+ - P1LAB_decayZ, P2LAB_decayZ, P3LAB_decayZ = phase_space.two_body_decay(Z_decay_samples, boost=boost_Z, **masses_decay) + P1LAB_decayZ, P2LAB_decayZ, P3LAB_decayZ = phase_space.two_body_decay(Z_decay_samples, boost=boost_Z, **masses_decay, rng=MC_case.rng) four_momenta["P_decay_N_parent"] = P1LAB_decay four_momenta["P_decay_N_daughter"] = P2LAB_decay @@ -782,7 +782,7 @@ def get_decay_momenta_from_vegas_samples(vsamples, decay_case, PN_LAB): P2LAB_decay, P3LAB_decay, P4LAB_decay, - ) = phase_space.three_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay) + ) = phase_space.three_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay, rng=MC_case.rng) four_momenta["P_decay_N_parent"] = P1LAB_decay four_momenta["P_decay_ell_minus"] = P2LAB_decay @@ -804,7 +804,7 @@ def get_decay_momenta_from_vegas_samples(vsamples, decay_case, PN_LAB): "m3": 0.0, # gamma } # Phnl, Phnl', Pgamma - P1LAB_decay, P2LAB_decay, P3LAB_decay = phase_space.two_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay) + P1LAB_decay, P2LAB_decay, P3LAB_decay = phase_space.two_body_decay(N_decay_samples, boost=boost_scattered_N, **masses_decay, rng=MC_case.rng) four_momenta["P_decay_N_parent"] = P1LAB_decay four_momenta["P_decay_N_daughter"] = P2LAB_decay diff --git a/src/DarkNews/nuclear_tools.py b/src/DarkNews/nuclear_tools.py index 784b08b..9bd0949 100644 --- a/src/DarkNews/nuclear_tools.py +++ b/src/DarkNews/nuclear_tools.py @@ -1,9 +1,13 @@ import numpy as np import numpy.ma as ma -import importlib.resources as resources from itertools import islice from functools import partial +try: + from importlib.resources import files +except ImportError: + from importlib_resources import files + from particle import literals as lp import logging @@ -248,7 +252,7 @@ def electron_binding_energy(Z): hydrogen_Eb = 13.5981e-9 # GeV atomic_unit = 0.9314941024228 # mass of Carbon12 in GeV / 12 -with resources.files("DarkNews.include.aux_data").joinpath("mass20_1.txt").open() as ame: +with files("DarkNews.include.aux_data").joinpath("mass20_1.txt").open() as ame: # Read lines in file starting at line 36 for line in islice(ame, 36, None): diff --git a/src/DarkNews/phase_space.py b/src/DarkNews/phase_space.py index 545e7c4..8f9238c 100644 --- a/src/DarkNews/phase_space.py +++ b/src/DarkNews/phase_space.py @@ -5,7 +5,8 @@ logger = logging.getLogger("logger." + __name__) -from . import Cfourvec as Cfv +from DarkNews import Cfourvec as Cfv +from DarkNews.const import rng_interval ######################################################## # Kinematical limits @@ -99,7 +100,7 @@ def three_body_tmin(m1, m2, m3, m4): # ###################### # 2 -> 2 scattering # Ni(k1) target(k2) --> Nj(k3) target(k4) -def two_to_two_scatter(samples, m1=1.0, m2=0.0, m3=1.0, m4=0.0): +def two_to_two_scatter(samples, m1=1.0, m2=0.0, m3=1.0, m4=0.0, rng=np.random.random): if "Eprojectile" in samples.keys(): Eprojectile = samples["Eprojectile"] @@ -134,7 +135,7 @@ def two_to_two_scatter(samples, m1=1.0, m2=0.0, m3=1.0, m4=0.0): Q2 = samples["Q2"] else: logger.debug("DEBUG: Could not find Q2 samples, using uniform distribution instead.") - Q2 = Cfv.random_generator(sample_size, Q2min, Q2max) + Q2 = rng_interval(sample_size, Q2min, Q2max, rng=rng) # KINEMATICS TO LAB FRAME costN = (-Q2 - m1**2 - m3**2 + 2 * E1CM * E3CM) / (2 * p1CM * p3CM) @@ -146,7 +147,7 @@ def two_to_two_scatter(samples, m1=1.0, m2=0.0, m3=1.0, m4=0.0): elif "phi3" in samples.keys(): phi3 = samples["phi3"] else: - phi3 = Cfv.random_generator(sample_size, 0.0, 2 * np.pi) + phi3 = rng_interval(sample_size, 0.0, 2 * np.pi, rng=rng) P1CM = Cfv.build_fourvec(E1CM, p1CM, np.full_like(costN, 1.0), np.full_like(phi3, 0)) P2CM = Cfv.build_fourvec(E2CM, -p1CM, np.full_like(costN, 1.0), np.full_like(phi3, 0)) @@ -167,7 +168,7 @@ def two_to_two_scatter(samples, m1=1.0, m2=0.0, m3=1.0, m4=0.0): # Two body decay # p1 (k1) --> p2(k2) p3(k3) -def two_body_decay(samples, boost=False, m1=1, m2=0, m3=0): +def two_body_decay(samples, boost=False, m1=1, m2=0, m3=0, rng=np.random.random): if not samples: logger.debug("DEBUG: No samples were passed to two_body_decay. Assuming uniform phase space.") @@ -183,7 +184,7 @@ def two_body_decay(samples, boost=False, m1=1, m2=0, m3=0): cost = samples["cost"] else: logger.debug("DEBUG: Could not find cost samples, using uniform distribution instead.") - cost = Cfv.random_generator(sample_size, -1, 1) + cost = rng_interval(sample_size, -1, 1, rng=rng) E1CM_decay = np.full_like(cost, m1) E2CM_decay = np.full_like(cost, (m1**2 + m2**2 - m3**2) / 2.0 / m1) @@ -199,7 +200,7 @@ def two_body_decay(samples, boost=False, m1=1, m2=0, m3=0): phiz = samples["phiz"] else: logger.debug("DEBUG: Could not find phiz samples, using uniform distribution instead.") - phiz = Cfv.random_generator(sample_size, 0.0, 2 * np.pi) + phiz = rng_interval(sample_size, 0.0, 2 * np.pi, rng=rng) P1CM_decay = Cfv.build_fourvec(E1CM_decay, p2CM_decay * 0.0, cost / cost, phiz * 0) P2CM_decay = Cfv.build_fourvec(E2CM_decay, p2CM_decay, cost, phiz) @@ -227,7 +228,7 @@ def two_body_decay(samples, boost=False, m1=1, m2=0, m3=0): # Three body decay # p1 (k1) --> p2(k2) p3(k3) p4(k4) -def three_body_decay(samples, boost=False, m1=1, m2=0, m3=0, m4=0): +def three_body_decay(samples, boost=False, m1=1, m2=0, m3=0, m4=0, rng=np.random.random): if not samples: logger.error("Error! No samples were passed to three_body_decay.") @@ -244,7 +245,7 @@ def three_body_decay(samples, boost=False, m1=1, m2=0, m3=0, m4=0): t = samples["t"] else: logger.debug("DEBUG: Could not find t samples, using uniform distribution instead.") - t = Cfv.random_generator(sample_size, tminus, tplus) + t = rng_interval(sample_size, tminus, tplus, rng=rng) # Mandelstam u = m_24^2 # from MATHEMATICA @@ -267,7 +268,7 @@ def three_body_decay(samples, boost=False, m1=1, m2=0, m3=0, m4=0): u = samples["u"] else: logger.debug("DEBUG: Could not find u samples, using uniform distribution instead.") - u = Cfv.random_generator(sample_size, uminus, uplus) + u = rng_interval(sample_size, uminus, uplus, rng=rng) # Mandelstam v = m_34^2 v = m1**2 + m2**2 + m3**2 + m4**2 - u - t @@ -287,9 +288,9 @@ def three_body_decay(samples, boost=False, m1=1, m2=0, m3=0, m4=0): c_theta3 = samples["c3"] else: logger.debug("DEBUG: Could not find c3 samples, using uniform distribution instead.") - c_theta3 = Cfv.random_generator(sample_size, -1, 1) + c_theta3 = rng_interval(sample_size, -1, 1, rng=rng) - phi3 = Cfv.random_generator(sample_size, 0.0, 2 * np.pi) + phi3 = rng_interval(sample_size, 0.0, 2 * np.pi, rng=rng) # Azimuthal angle of P_4 wrt to P_3 (phi_34) if "unit_phi34" in samples.keys(): @@ -298,7 +299,7 @@ def three_body_decay(samples, boost=False, m1=1, m2=0, m3=0, m4=0): phi34 = samples["phi34"] else: logger.debug("DEBUG: Could not find phi34 samples, using uniform distribution instead.") - phi34 = Cfv.random_generator(sample_size, 0, 2 * np.pi) + phi34 = rng_interval(sample_size, 0, 2 * np.pi, rng=rng) # polar angle of P_4 wrt to P_3 is a known function of u and v c_theta34 = (t + u - m2**2 - m1**2 + 2 * E3CM_decay * E4CM_decay) / (2 * p3CM_decay * p4CM_decay) diff --git a/tests/conftest.py b/tests/conftest.py index f145f43..e61eb5e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -65,20 +65,32 @@ def set_seeds(): # generate a specific set of events to be tested in a session @pytest.fixture(scope="session") def SM_gen(): - gen = GenLauncher(gD=0.0, Umu4=1e-3, epsilon=0.0, m4=0.01, loglevel="ERROR", neval=1000, seed=42) + gen = GenLauncher( + gD=0.0, Umu4=1e-3, epsilon=0.0, m4=0.01, loglevel="ERROR", neval=100, nint=1, neval_warmup=100, nint_warmup=1, seed=42, make_summary_plots=True + ) return gen.run() @pytest.fixture(scope="session") def portal_vs_simplified(): EPSILON = 3.4e-4 - common_kwargs = {"loglevel": "ERROR", "HNLtype": "majorana", "neval": 1e4, "m5": 0.15, "m4": 0.1, "mzprime": 1.25} + common_kwargs = { + "loglevel": "ERROR", + "HNLtype": "majorana", + "neval": 100, + "nint": 1, + "neval_warmup": 100, + "nint_warmup": 1, + "m5": 0.15, + "m4": 0.1, + "mzprime": 1.25, + } kwargs_1 = {"d_mu5": 1e-3, "d_45": 1 / 2, "dprotonV": EPSILON * const.eQED, "deV": EPSILON * const.eQED} kwargs_2 = {"UD4": 1 / np.sqrt(2), "UD5": 1 / np.sqrt(2), "Umu5": 1e-3, "Umu4": 1e-3, "gD": 1, "epsilon": EPSILON} - gen_1 = GenLauncher(experiment="miniboone_fhc", **kwargs_1, **common_kwargs) - gen_2 = GenLauncher(experiment="miniboone_fhc", **kwargs_2, **common_kwargs) + gen_1 = GenLauncher(experiment="miniboone_fhc", seed=42, **kwargs_1, **common_kwargs) + gen_2 = GenLauncher(experiment="miniboone_fhc", seed=42, **kwargs_2, **common_kwargs) return gen_1.run(), gen_2.run() @@ -88,7 +100,10 @@ def light_DP_gen_all_outputs(): gen = GenLauncher( mzprime=0.03, m4=0.430, - neval=1000, + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, experiment="miniboone_fhc", loglevel="ERROR", seed=42, @@ -103,36 +118,15 @@ def light_DP_gen_all_outputs(): return gen.run() -@pytest.fixture(scope="session") -def generic_model_gen(): - gen = GenLauncher( - mzprime=0.03, - m4=0.100, - m5=0.200, - m6=0.300, - neval=1000, - experiment="miniboone_fhc", - loglevel="ERROR", - seed=42, - parquet=True, - numpy=True, - hepevt=True, - hepevt_legacy=True, - hepmc2=True, - hepmc3=True, - hep_unweight=True, - hep_unweight_events=100, - **GENERIC_MODEL_KWARGS - ) - return gen.run() - - @pytest.fixture(scope="session") def light_DP_gen_all_outputs_sparse(): gen = GenLauncher( mzprime=0.03, m4=0.425, - neval=1000, + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, experiment="miniboone_fhc", loglevel="ERROR", seed=42, @@ -151,13 +145,30 @@ def light_DP_gen_all_outputs_sparse(): @pytest.fixture(scope="session") def gen_simplest_benchmarks(): - gen = GenLauncher(mzprime=0.03, m4=0.420, neval=1000, experiment="miniboone_fhc", loglevel="ERROR", seed=42, **MODEL_KWARGS) + gen = GenLauncher( + mzprime=0.03, m4=0.420, neval=100, nint=1, neval_warmup=100, nint_warmup=1, experiment="miniboone_fhc", loglevel="ERROR", seed=42, **MODEL_KWARGS + ) df_light = gen.run() - gen = GenLauncher(mzprime=1.25, m4=0.150, neval=1000, experiment="miniboone_fhc", loglevel="ERROR", seed=42, **MODEL_KWARGS) + gen = GenLauncher( + mzprime=1.25, m4=0.150, neval=100, nint=1, neval_warmup=100, nint_warmup=1, experiment="miniboone_fhc", loglevel="ERROR", seed=42, **MODEL_KWARGS + ) df_heavy = gen.run() - gen = GenLauncher(mu_tr_mu4=2e-6, m4=0.150, epsilon=0.0, gD=0.0, Umu4=0.0, neval=1000, experiment="miniboone_fhc", loglevel="ERROR", seed=42) + gen = GenLauncher( + mu_tr_mu4=2e-6, + m4=0.150, + epsilon=0.0, + gD=0.0, + Umu4=0.0, + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, + experiment="miniboone_fhc", + loglevel="ERROR", + seed=42, + ) df_TMM = gen.run() return df_light, df_heavy, df_TMM @@ -165,10 +176,34 @@ def gen_simplest_benchmarks(): @pytest.fixture(scope="session") def gen_other_final_states(): - gen = GenLauncher(mzprime=0.3, m4=0.5, decay_product="mu+mu-", neval=1000, experiment="miniboone_fhc", loglevel="ERROR", seed=42, **MODEL_KWARGS) + gen = GenLauncher( + mzprime=0.3, + m4=0.5, + decay_product="mu+mu-", + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, + experiment="miniboone_fhc", + loglevel="ERROR", + seed=42, + **MODEL_KWARGS + ) df_light = gen.run() - gen = GenLauncher(mzprime=1.25, m4=0.5, decay_product="mu+mu-", neval=1000, experiment="miniboone_fhc", loglevel="ERROR", seed=42, **MODEL_KWARGS) + gen = GenLauncher( + mzprime=1.25, + m4=0.5, + decay_product="mu+mu-", + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, + experiment="miniboone_fhc", + loglevel="ERROR", + seed=42, + **MODEL_KWARGS + ) df_heavy = gen.run() gen = GenLauncher( @@ -178,7 +213,10 @@ def gen_other_final_states(): gD=0.0, decay_product="mu+mu-", Umu4=0.0, - neval=1000, + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, HNLtype="dirac", experiment="miniboone_fhc", loglevel="ERROR", @@ -193,7 +231,10 @@ def gen_other_final_states(): gD=0.0, decay_product="photon", Umu4=0.0, - neval=1000, + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, HNLtype="dirac", experiment="miniboone_fhc", loglevel="ERROR", @@ -212,7 +253,10 @@ def gen_most_generic_model(): m4=0.100, m5=0.200, m6=0.300, - neval=1000, + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, experiment="miniboone_fhc", include_nelastic=True, loglevel="ERROR", @@ -226,7 +270,10 @@ def gen_most_generic_model(): m4=0.100, m5=0.200, m6=0.300, - neval=1000, + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, experiment="miniboone_fhc", include_nelastic=True, loglevel="ERROR", @@ -241,7 +288,10 @@ def gen_most_generic_model(): m4=0.100, m5=0.200, m6=0.300, - neval=1000, + neval=100, + nint=1, + neval_warmup=100, + nint_warmup=1, decay_product="photon", experiment="miniboone_fhc", include_nelastic=True, @@ -256,16 +306,24 @@ def gen_most_generic_model(): @pytest.fixture(scope="session") def gen_dirt_cases(): - gen = GenLauncher(mzprime=1.25, m4=0.5, neval=1000, experiment="sbnd_dirt", loglevel="ERROR", seed=42, **MODEL_KWARGS) + gen = GenLauncher( + mzprime=1.25, m4=0.5, neval=100, nint=1, neval_warmup=100, nint_warmup=1, experiment="sbnd_dirt", loglevel="ERROR", seed=42, **MODEL_KWARGS + ) df_1 = gen.run() - gen = GenLauncher(mzprime=1.25, m4=0.5, neval=1000, experiment="microboone_dirt", loglevel="ERROR", seed=42, **MODEL_KWARGS) + gen = GenLauncher( + mzprime=1.25, m4=0.5, neval=100, nint=1, neval_warmup=100, nint_warmup=1, experiment="microboone_dirt", loglevel="ERROR", seed=42, **MODEL_KWARGS + ) df_2 = gen.run() - gen = GenLauncher(mzprime=1.25, m4=0.5, neval=1000, experiment="icarus_dirt", loglevel="ERROR", seed=42, **MODEL_KWARGS) + gen = GenLauncher( + mzprime=1.25, m4=0.5, neval=100, nint=1, neval_warmup=100, nint_warmup=1, experiment="icarus_dirt", loglevel="ERROR", seed=42, **MODEL_KWARGS + ) df_3 = gen.run() - gen = GenLauncher(mzprime=1.25, m4=0.5, neval=1000, experiment="miniboone_fhc_dirt", loglevel="ERROR", seed=42, **MODEL_KWARGS) + gen = GenLauncher( + mzprime=1.25, m4=0.5, neval=100, nint=1, neval_warmup=100, nint_warmup=1, experiment="miniboone_fhc_dirt", loglevel="ERROR", seed=42, **MODEL_KWARGS + ) df_4 = gen.run() return df_1, df_2, df_3, df_4 diff --git a/tests/helpers.py b/tests/helpers.py new file mode 100644 index 0000000..b07af67 --- /dev/null +++ b/tests/helpers.py @@ -0,0 +1,29 @@ +from contextlib import contextmanager +import traceback + + +def close_enough(x, y, tol=1e-3): + return abs(x - y) / y < tol + + +@contextmanager +def assert_all(): + errors = [] + try: + yield errors + finally: + errors = [error for error in errors if error != "Passed"] + if errors: + raise AssertionError(f"Multiple Failures:\n{''.join(errors)}") + + +def soft_compare(value, target, error_message, **kwargs): + if not close_enough(value, target, **kwargs): + return f"Assertion failed: {error_message}\n val:{value} != target:{target}\n" + return "Passed" + + +def soft_assert(condition, error_message): + if not condition: + return f"Assertion failed: {error_message}" + return "Passed" diff --git a/tests/test_inputs.py b/tests/test_inputs.py index 6c505ab..23445e9 100644 --- a/tests/test_inputs.py +++ b/tests/test_inputs.py @@ -5,6 +5,24 @@ from DarkNews import AssignmentParser from DarkNews import GenLauncher +from DarkNews.ModelContainer import ModelContainer + +from .helpers import assert_all, soft_assert + + +def test_ModelContainer_default(): + mc = vars(ModelContainer(loglevel="error")) + gl = vars(GenLauncher(loglevel="error")) + + with assert_all() as assertions: + for key, val in mc.items(): + if key in gl.keys(): + assertions.append( + soft_assert( + mc[key] == gl[key] or isinstance(mc[key], list), + f"Different values between GenLauncher and ModelContainer: {key}: ModelContainer={mc[key]}, GenLauncher={gl[key]}", + ) + ) def test_input_parameter_files(): diff --git a/tests/test_outputs.py b/tests/test_outputs.py index 2747daa..2e23194 100644 --- a/tests/test_outputs.py +++ b/tests/test_outputs.py @@ -9,7 +9,7 @@ import pyhepmc.io as io -def test_(light_DP_gen_all_outputs, light_DP_gen_all_outputs_sparse): +def test_output(light_DP_gen_all_outputs, light_DP_gen_all_outputs_sparse): """Test all output formats of DarkNews""" for df in [light_DP_gen_all_outputs, light_DP_gen_all_outputs_sparse]: diff --git a/tests/test_predictions.py b/tests/test_predictions.py index 8e0ab9b..c041f87 100644 --- a/tests/test_predictions.py +++ b/tests/test_predictions.py @@ -2,99 +2,122 @@ import pytest import platform +import numpy as np + import DarkNews as dn -import numpy as np +from .helpers import assert_all, soft_compare, soft_assert, close_enough -def close_enough(x, y, tol=1e-3): - return abs(x - y) / y < tol +def is_macos_14(): + if platform.system() == "Darwin": + vers = platform.mac_ver()[0] + if vers.startswith("14."): + return True + return False -@pytest.mark.skipif("Linux" in platform.system(), reason="Linux appears to misbehave with seeded random numbers on GitHub actions") +@pytest.mark.skipif(not is_macos_14(), reason="This test runs only on macOS 14.") def test_MB_SM(SM_gen): expect = 0.03666960244288936 - assert close_enough(SM_gen.w_event_rate.sum(), expect), "seeded SM generation has changed!" + soft_compare(SM_gen.w_event_rate.sum(), expect, "seeded SM generation has changed!") +@pytest.mark.skipif(not is_macos_14(), reason="This test runs only on macOS 14.") def test_MB_benchmarks(gen_simplest_benchmarks): df_light, df_heavy, df_TMM = gen_simplest_benchmarks - # check seeded generation - expect = 13607.917925196376 - assert close_enough(df_light.w_event_rate.sum(), expect), "seeded light dark photon has changed!" - # check seeded generation - expect = 5.490449133362185 - assert close_enough(df_heavy.w_event_rate.sum(), expect), "seeded heavy dark photon has changed!" + with assert_all() as assertions: + # check seeded generation + expect = 12966.103497649234 + assertions.append(soft_compare(df_light.w_event_rate.sum(), expect, "seeded light dark photon has changed!")) - # check seeded generation - expect = 52246.996516303276 - assert close_enough(df_TMM.w_event_rate.sum(), expect), "seeded TMM has changed!" + # check seeded generation + expect = 5.144522161307712 + assertions.append(soft_compare(df_heavy.w_event_rate.sum(), expect, "seeded heavy dark photon has changed!")) + # check seeded generation + expect = 120590.91809832449 + assertions.append(soft_compare(df_TMM.w_event_rate.sum(), expect, "seeded TMM has changed!")) + +@pytest.mark.skipif(not is_macos_14(), reason="This test runs only on macOS 14.") def test_MB_other_final_states(gen_other_final_states): df_light, df_heavy, df_TMM_mumu, df_TMM_photon = gen_other_final_states - # check seeded generation - expect = 203.35903851291818 - assert close_enough(df_light.w_event_rate.sum(), expect), "seeded light dark photon to muons has changed!" - - # check seeded generation - expect = 2.326728225953212 - assert close_enough(df_heavy.w_event_rate.sum(), expect), "seeded heavy dark photon to muons has changed!" - - # check seeded generation - expect = 3425.7711399143527 - assert close_enough(df_TMM_mumu.w_event_rate.sum(), expect), "seeded TMM to muons has changed!" - assert "P_decay_ell_plus" in df_TMM_mumu.columns - assert df_TMM_mumu["P_decay_ell_plus", "0"].min() > dn.const.m_mu, "Mu+ energy smaller than its mass? Not generating for muons?" - assert df_TMM_mumu["P_decay_ell_minus", "0"].min() > dn.const.m_mu, "Mu- energy smaller than its mass? Not generating for muons?" - - # check seeded generation - expect = 3450.618873090897 - assert close_enough(df_TMM_photon.w_event_rate.sum(), expect), "seeded heavy dark photon to muons has changed!" - assert "P_decay_photon" in df_TMM_photon.columns - + with assert_all() as assertions: + # check seeded generation + expect = 204.5472884344149 + assertions.append(soft_compare(df_light.w_event_rate.sum(), expect, "seeded light dark photon to muons has changed!")) + + # check seeded generation + expect = 2.247219303879909 + assertions.append(soft_compare(df_heavy.w_event_rate.sum(), expect, "seeded heavy dark photon to muons has changed!")) + + # check seeded generation + expect = 3587.5139192644183 + assertions.append(soft_compare(df_TMM_mumu.w_event_rate.sum(), expect, "seeded TMM to muons has changed!")) + assertions.append(soft_assert(("P_decay_ell_plus" in df_TMM_mumu.columns), "Could not find ell+ in the decay products!")) + assertions.append( + soft_assert(df_TMM_mumu["P_decay_ell_plus", "0"].min() > dn.const.m_mu, "Mu+ energy smaller than its mass? Not generating for muons?") + ) + assertions.append( + soft_assert(df_TMM_mumu["P_decay_ell_minus", "0"].min() > dn.const.m_mu, "Mu- energy smaller than its mass? Not generating for muons?") + ) + + # check seeded generation + expect = 3414.5819533280555 + assertions.append(soft_compare(df_TMM_photon.w_event_rate.sum(), expect, "seeded heavy dark photon to muons has changed!")) + assertions.append(soft_assert(("P_decay_photon" in df_TMM_photon.columns), "Could not find photon in the decay products!")) + + +@pytest.mark.skipif(not is_macos_14(), reason="This test runs only on macOS 14.") def test_MB_generic_model(gen_most_generic_model): df_light, df_heavy, df_photon = gen_most_generic_model - # check seeded generation - expect = 24883913.24697555 - assert close_enough(df_light.w_event_rate.sum(), expect), "seeded light dark photon to muons has changed!" - # check seeded generation - expect = 219891.69339439517 - assert close_enough(df_heavy.w_event_rate.sum(), expect), "seeded heavy most-generic model has changed!" + with assert_all() as assertions: + # check seeded generation + expect = 24221990.051016837 + assertions.append(soft_compare(df_light.w_event_rate.sum(), expect, "seeded light dark photon to muons has changed!")) + + # check seeded generation + expect = 243775.96717828474 + assertions.append(soft_compare(df_heavy.w_event_rate.sum(), expect, "seeded heavy most-generic model has changed!")) - # check seeded generation - expect = 219436.76877259254 - assert close_enough(df_photon.w_event_rate.sum(), expect), "seeded heavy most-generic model has changed!" + # check seeded generation + expect = 229955.91953765703 + assertions.append(soft_compare(df_photon.w_event_rate.sum(), expect, "seeded heavy most-generic model has changed!")) +@pytest.mark.skipif(not is_macos_14(), reason="This test runs only on macOS 14.") def test_MB_dirt(gen_dirt_cases): df_1, df_2, df_3, df_4 = gen_dirt_cases - # check seeded generation - expect = 82089.91508629762 - assert close_enough(df_1.w_event_rate.sum(), expect), "seeded sbnd dirt generation has changed!" - # check seeded generation - expect = 31.809474146527283 - assert close_enough(df_2.w_event_rate.sum(), expect), "seeded microboone dirt generation has changed!" + with assert_all() as assertions: + # check seeded generation + expect = 74562.07927470398 + assertions.append(soft_compare(df_1.w_event_rate.sum(), expect, "seeded sbnd dirt generation has changed!")) - # check seeded generation - expect = 274.96427582452174 - assert close_enough(df_3.w_event_rate.sum(), expect), "seeded icarus dirt generation has changed!" + # check seeded generation + expect = 33.10398216496445 + assertions.append(soft_compare(df_2.w_event_rate.sum(), expect, "seeded microboone dirt generation has changed!")) - # check seeded generation - expect = 402.99035914458227 - assert close_enough(df_4.w_event_rate.sum(), expect), "seeded miniboone dirt generation has changed!" + # check seeded generation + expect = 273.0694082249817 + assertions.append(soft_compare(df_3.w_event_rate.sum(), expect, "seeded icarus dirt generation has changed!")) + + # check seeded generation + expect = 396.72373820311645 + assertions.append(soft_compare(df_4.w_event_rate.sum(), expect, "seeded miniboone dirt generation has changed!")) def test_portal_vs_simplified(portal_vs_simplified): df_1, df_2 = portal_vs_simplified # simplified model approach generates similar output to 3 portal model - assert df_1.w_event_rate.sum() / df_2.w_event_rate.sum() < 1.5 - assert df_1.w_decay_rate_0.sum() / df_2.w_decay_rate_0.sum() < 1.5 + with assert_all() as assertions: + assertions.append(soft_assert((df_1.w_event_rate.sum() / df_2.w_event_rate.sum() < 1.5), "3 portal and general models do not agree.")) + assertions.append(soft_assert((df_1.w_decay_rate_0.sum() / df_2.w_decay_rate_0.sum() < 1.5), "3 portal and general models do not agree.")) def test_xsecs(): @@ -154,25 +177,44 @@ def test_xsecs(): scalar_l_xs_subd = (calculator_scalar_l_subd.total_xsec(**xs_kwargs), calculator_scalar_l_pel_subd.total_xsec(**xs_kwargs)) kwargs = {"tol": 1e-3} - - assert close_enough( - np.sum(dipole_xs[0] + dipole_xs_subd[0] + dipole_xs[1] + dipole_xs_subd[1]) * 1e38, 1.167635698988556, **kwargs - ), "seeded dipole_xs_subd prediction changed." - assert close_enough( - np.sum(vector_l_xs[0] + vector_l_xs_subd[0] + vector_l_xs[1] + vector_l_xs_subd[1]) * 1e38, 47.71350400042774, **kwargs - ), "seeded vector_l_xs_subd prediction changed." - assert close_enough( - np.sum(scalar_l_xs[0] + scalar_l_xs_subd[0] + scalar_l_xs[1] + scalar_l_xs_subd[1]) * 1e38, 1.292457796553301e-06, **kwargs - ), "seeded scalar_l_xs_subd prediction changed." - assert close_enough( - np.sum(scalar_l_xs[0] + scalar_l_xs_subd[0] + scalar_l_xs[1] + scalar_l_xs_subd[1]) * 1e38, 1.292457796553301e-06, **kwargs - ), "seeded scalar_l_xs_subd prediction changed." - assert close_enough( - np.sum(vector_h_xs[0] + vector_h_xs_subd[0] + vector_h_xs[1] + vector_h_xs_subd[1]) * 1e38, 0.0009700678537285885, **kwargs - ), "seeded vector_h_xs_subd prediction changed." - assert close_enough( - np.sum(scalar_h_xs[0] + scalar_h_xs_subd[0] + scalar_h_xs[1] + scalar_h_xs_subd[1]) * 1e38, 5.916783033781255e-11, **kwargs - ), "seeded scalar_h_xs_subd prediction changed." + if is_macos_14(): + with assert_all() as assertions: + assertions.append( + soft_assert( + close_enough(np.sum(dipole_xs[0] + dipole_xs_subd[0] + dipole_xs[1] + dipole_xs_subd[1]) * 1e38, 1.167635698988556, **kwargs), + "seeded dipole_xs_subd prediction changed.", + ) + ) + assertions.append( + soft_assert( + close_enough(np.sum(vector_l_xs[0] + vector_l_xs_subd[0] + vector_l_xs[1] + vector_l_xs_subd[1]) * 1e38, 47.71350400042774, **kwargs), + "seeded vector_l_xs_subd prediction changed.", + ) + ) + assertions.append( + soft_assert( + close_enough(np.sum(scalar_l_xs[0] + scalar_l_xs_subd[0] + scalar_l_xs[1] + scalar_l_xs_subd[1]) * 1e38, 1.292457796553301e-06, **kwargs), + "seeded scalar_l_xs_subd prediction changed.", + ) + ) + assertions.append( + soft_assert( + close_enough(np.sum(scalar_l_xs[0] + scalar_l_xs_subd[0] + scalar_l_xs[1] + scalar_l_xs_subd[1]) * 1e38, 1.292457796553301e-06, **kwargs), + "seeded scalar_l_xs_subd prediction changed.", + ) + ) + assertions.append( + soft_assert( + close_enough(np.sum(vector_h_xs[0] + vector_h_xs_subd[0] + vector_h_xs[1] + vector_h_xs_subd[1]) * 1e38, 0.0009700678537285885, **kwargs), + "seeded vector_h_xs_subd prediction changed.", + ) + ) + assertions.append( + soft_assert( + close_enough(np.sum(scalar_h_xs[0] + scalar_h_xs_subd[0] + scalar_h_xs[1] + scalar_h_xs_subd[1]) * 1e38, 5.916783033781255e-11, **kwargs), + "seeded scalar_h_xs_subd prediction changed.", + ) + ) def test_geometries(SM_gen): diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 1fdb76d..4f7bc44 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -3,26 +3,33 @@ import pytest import os +from DarkNews import scripts + + def test_dn_gen(): - """test_scripts check that dn scripts run and produce the output desired - """ + """test_scripts check that dn scripts run and produce the output desired""" # dark photon os.system('dn_gen --path="./test_script_v1" --HNLtype="majorana" --make_summary_plots') - filename = 'test_script_v1/data/miniboone_fhc/3plus1/m4_0.15_mzprime_1.25_majorana/pandas_df.pckl' - assert os.path.exists(filename), f'Could not find dn_gen output in {filename}' - plots_path = 'test_script_v1/data/miniboone_fhc/3plus1/m4_0.15_mzprime_1.25_majorana/summary_plots' - assert os.path.exists(plots_path), f'Could not find summary plots in {plots_path}' + filename = "test_script_v1/data/miniboone_fhc/3plus1/m4_0.15_mzprime_1.25_majorana/pandas_df.pckl" + assert os.path.exists(filename), f"Could not find dn_gen output in {filename}" + plots_path = "test_script_v1/data/miniboone_fhc/3plus1/m4_0.15_mzprime_1.25_majorana/summary_plots" + assert os.path.exists(plots_path), f"Could not find summary plots in {plots_path}" # now for TMM os.system('dn_gen --path="./test_script_v2" --HNLtype="majorana" --decay_product="photon" --mu_tr_mu4=1e-6 --make_summary_plots') - filename = 'test_script_v2/data/miniboone_fhc/3plus1/m4_0.15_mzprime_1.25_mu_tr_mu4_1e-06_majorana/pandas_df.pckl' - assert os.path.exists(filename), f'Could not find dn_gen output in {filename}' - plots_path = 'test_script_v2/data/miniboone_fhc/3plus1/m4_0.15_mzprime_1.25_mu_tr_mu4_1e-06_majorana/summary_plots' - assert os.path.exists(plots_path), f'Could not find summary plots in {plots_path}' + filename = "test_script_v2/data/miniboone_fhc/3plus1/m4_0.15_mzprime_1.25_mu_tr_mu4_1e-06_majorana/pandas_df.pckl" + assert os.path.exists(filename), f"Could not find dn_gen output in {filename}" + plots_path = "test_script_v2/data/miniboone_fhc/3plus1/m4_0.15_mzprime_1.25_mu_tr_mu4_1e-06_majorana/summary_plots" + assert os.path.exists(plots_path), f"Could not find summary plots in {plots_path}" + + +def test_python_call_to_dngen(): + scripts.dn_gen() + @pytest.mark.skip(reason="Still need to find a way to set up git for venvs") def test_examples_download(): os.system("dn_get_examples") - assert os.path.exists('DarkNews-examples'), 'Could not find DarkNews-examples/ after running dn_get_examples' + assert os.path.exists("DarkNews-examples"), "Could not find DarkNews-examples/ after running dn_get_examples" diff --git a/tox.ini b/tox.ini index dab2284..f441242 100644 --- a/tox.ini +++ b/tox.ini @@ -2,6 +2,8 @@ minversion = 3.8.0 envlist = clean, py38, py39, py310, py311, py312, report isolated_build = true +skipsdist = false +log_level = DEBUG [gh-actions] python = @@ -12,9 +14,10 @@ python = 3.12: py312 [testenv] -deps = .[test] extras = testing - +deps = + cython + numpy setenv = PYTHONPATH = {toxinidir} commands =