Created
August 11, 2017 14:38
-
-
Save poppingtonic/5244b2d54cff5a3506835a258817f89e to your computer and use it in GitHub Desktop.
Wrapping BLAS/Fortran code in Cython
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"%load_ext Cython" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<!DOCTYPE html>\n", | |
"<!-- Generated by Cython 0.26 -->\n", | |
"<html>\n", | |
"<head>\n", | |
" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n", | |
" <title>Cython: _cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e.pyx</title>\n", | |
" <style type=\"text/css\">\n", | |
" \n", | |
"body.cython { font-family: courier; font-size: 12; }\n", | |
"\n", | |
".cython.tag { }\n", | |
".cython.line { margin: 0em }\n", | |
".cython.code { font-size: 9; color: #444444; display: none; margin: 0px 0px 0px 8px; border-left: 8px none; }\n", | |
"\n", | |
".cython.line .run { background-color: #B0FFB0; }\n", | |
".cython.line .mis { background-color: #FFB0B0; }\n", | |
".cython.code.run { border-left: 8px solid #B0FFB0; }\n", | |
".cython.code.mis { border-left: 8px solid #FFB0B0; }\n", | |
"\n", | |
".cython.code .py_c_api { color: red; }\n", | |
".cython.code .py_macro_api { color: #FF7000; }\n", | |
".cython.code .pyx_c_api { color: #FF3000; }\n", | |
".cython.code .pyx_macro_api { color: #FF7000; }\n", | |
".cython.code .refnanny { color: #FFA000; }\n", | |
".cython.code .trace { color: #FFA000; }\n", | |
".cython.code .error_goto { color: #FFA000; }\n", | |
"\n", | |
".cython.code .coerce { color: #008000; border: 1px dotted #008000 }\n", | |
".cython.code .py_attr { color: #FF0000; font-weight: bold; }\n", | |
".cython.code .c_attr { color: #0000FF; }\n", | |
".cython.code .py_call { color: #FF0000; font-weight: bold; }\n", | |
".cython.code .c_call { color: #0000FF; }\n", | |
"\n", | |
".cython.score-0 {background-color: #FFFFff;}\n", | |
".cython.score-1 {background-color: #FFFFe7;}\n", | |
".cython.score-2 {background-color: #FFFFd4;}\n", | |
".cython.score-3 {background-color: #FFFFc4;}\n", | |
".cython.score-4 {background-color: #FFFFb6;}\n", | |
".cython.score-5 {background-color: #FFFFaa;}\n", | |
".cython.score-6 {background-color: #FFFF9f;}\n", | |
".cython.score-7 {background-color: #FFFF96;}\n", | |
".cython.score-8 {background-color: #FFFF8d;}\n", | |
".cython.score-9 {background-color: #FFFF86;}\n", | |
".cython.score-10 {background-color: #FFFF7f;}\n", | |
".cython.score-11 {background-color: #FFFF79;}\n", | |
".cython.score-12 {background-color: #FFFF73;}\n", | |
".cython.score-13 {background-color: #FFFF6e;}\n", | |
".cython.score-14 {background-color: #FFFF6a;}\n", | |
".cython.score-15 {background-color: #FFFF66;}\n", | |
".cython.score-16 {background-color: #FFFF62;}\n", | |
".cython.score-17 {background-color: #FFFF5e;}\n", | |
".cython.score-18 {background-color: #FFFF5b;}\n", | |
".cython.score-19 {background-color: #FFFF57;}\n", | |
".cython.score-20 {background-color: #FFFF55;}\n", | |
".cython.score-21 {background-color: #FFFF52;}\n", | |
".cython.score-22 {background-color: #FFFF4f;}\n", | |
".cython.score-23 {background-color: #FFFF4d;}\n", | |
".cython.score-24 {background-color: #FFFF4b;}\n", | |
".cython.score-25 {background-color: #FFFF48;}\n", | |
".cython.score-26 {background-color: #FFFF46;}\n", | |
".cython.score-27 {background-color: #FFFF44;}\n", | |
".cython.score-28 {background-color: #FFFF43;}\n", | |
".cython.score-29 {background-color: #FFFF41;}\n", | |
".cython.score-30 {background-color: #FFFF3f;}\n", | |
".cython.score-31 {background-color: #FFFF3e;}\n", | |
".cython.score-32 {background-color: #FFFF3c;}\n", | |
".cython.score-33 {background-color: #FFFF3b;}\n", | |
".cython.score-34 {background-color: #FFFF39;}\n", | |
".cython.score-35 {background-color: #FFFF38;}\n", | |
".cython.score-36 {background-color: #FFFF37;}\n", | |
".cython.score-37 {background-color: #FFFF36;}\n", | |
".cython.score-38 {background-color: #FFFF35;}\n", | |
".cython.score-39 {background-color: #FFFF34;}\n", | |
".cython.score-40 {background-color: #FFFF33;}\n", | |
".cython.score-41 {background-color: #FFFF32;}\n", | |
".cython.score-42 {background-color: #FFFF31;}\n", | |
".cython.score-43 {background-color: #FFFF30;}\n", | |
".cython.score-44 {background-color: #FFFF2f;}\n", | |
".cython.score-45 {background-color: #FFFF2e;}\n", | |
".cython.score-46 {background-color: #FFFF2d;}\n", | |
".cython.score-47 {background-color: #FFFF2c;}\n", | |
".cython.score-48 {background-color: #FFFF2b;}\n", | |
".cython.score-49 {background-color: #FFFF2b;}\n", | |
".cython.score-50 {background-color: #FFFF2a;}\n", | |
".cython.score-51 {background-color: #FFFF29;}\n", | |
".cython.score-52 {background-color: #FFFF29;}\n", | |
".cython.score-53 {background-color: #FFFF28;}\n", | |
".cython.score-54 {background-color: #FFFF27;}\n", | |
".cython.score-55 {background-color: #FFFF27;}\n", | |
".cython.score-56 {background-color: #FFFF26;}\n", | |
".cython.score-57 {background-color: #FFFF26;}\n", | |
".cython.score-58 {background-color: #FFFF25;}\n", | |
".cython.score-59 {background-color: #FFFF24;}\n", | |
".cython.score-60 {background-color: #FFFF24;}\n", | |
".cython.score-61 {background-color: #FFFF23;}\n", | |
".cython.score-62 {background-color: #FFFF23;}\n", | |
".cython.score-63 {background-color: #FFFF22;}\n", | |
".cython.score-64 {background-color: #FFFF22;}\n", | |
".cython.score-65 {background-color: #FFFF22;}\n", | |
".cython.score-66 {background-color: #FFFF21;}\n", | |
".cython.score-67 {background-color: #FFFF21;}\n", | |
".cython.score-68 {background-color: #FFFF20;}\n", | |
".cython.score-69 {background-color: #FFFF20;}\n", | |
".cython.score-70 {background-color: #FFFF1f;}\n", | |
".cython.score-71 {background-color: #FFFF1f;}\n", | |
".cython.score-72 {background-color: #FFFF1f;}\n", | |
".cython.score-73 {background-color: #FFFF1e;}\n", | |
".cython.score-74 {background-color: #FFFF1e;}\n", | |
".cython.score-75 {background-color: #FFFF1e;}\n", | |
".cython.score-76 {background-color: #FFFF1d;}\n", | |
".cython.score-77 {background-color: #FFFF1d;}\n", | |
".cython.score-78 {background-color: #FFFF1c;}\n", | |
".cython.score-79 {background-color: #FFFF1c;}\n", | |
".cython.score-80 {background-color: #FFFF1c;}\n", | |
".cython.score-81 {background-color: #FFFF1c;}\n", | |
".cython.score-82 {background-color: #FFFF1b;}\n", | |
".cython.score-83 {background-color: #FFFF1b;}\n", | |
".cython.score-84 {background-color: #FFFF1b;}\n", | |
".cython.score-85 {background-color: #FFFF1a;}\n", | |
".cython.score-86 {background-color: #FFFF1a;}\n", | |
".cython.score-87 {background-color: #FFFF1a;}\n", | |
".cython.score-88 {background-color: #FFFF1a;}\n", | |
".cython.score-89 {background-color: #FFFF19;}\n", | |
".cython.score-90 {background-color: #FFFF19;}\n", | |
".cython.score-91 {background-color: #FFFF19;}\n", | |
".cython.score-92 {background-color: #FFFF19;}\n", | |
".cython.score-93 {background-color: #FFFF18;}\n", | |
".cython.score-94 {background-color: #FFFF18;}\n", | |
".cython.score-95 {background-color: #FFFF18;}\n", | |
".cython.score-96 {background-color: #FFFF18;}\n", | |
".cython.score-97 {background-color: #FFFF17;}\n", | |
".cython.score-98 {background-color: #FFFF17;}\n", | |
".cython.score-99 {background-color: #FFFF17;}\n", | |
".cython.score-100 {background-color: #FFFF17;}\n", | |
".cython.score-101 {background-color: #FFFF16;}\n", | |
".cython.score-102 {background-color: #FFFF16;}\n", | |
".cython.score-103 {background-color: #FFFF16;}\n", | |
".cython.score-104 {background-color: #FFFF16;}\n", | |
".cython.score-105 {background-color: #FFFF16;}\n", | |
".cython.score-106 {background-color: #FFFF15;}\n", | |
".cython.score-107 {background-color: #FFFF15;}\n", | |
".cython.score-108 {background-color: #FFFF15;}\n", | |
".cython.score-109 {background-color: #FFFF15;}\n", | |
".cython.score-110 {background-color: #FFFF15;}\n", | |
".cython.score-111 {background-color: #FFFF15;}\n", | |
".cython.score-112 {background-color: #FFFF14;}\n", | |
".cython.score-113 {background-color: #FFFF14;}\n", | |
".cython.score-114 {background-color: #FFFF14;}\n", | |
".cython.score-115 {background-color: #FFFF14;}\n", | |
".cython.score-116 {background-color: #FFFF14;}\n", | |
".cython.score-117 {background-color: #FFFF14;}\n", | |
".cython.score-118 {background-color: #FFFF13;}\n", | |
".cython.score-119 {background-color: #FFFF13;}\n", | |
".cython.score-120 {background-color: #FFFF13;}\n", | |
".cython.score-121 {background-color: #FFFF13;}\n", | |
".cython.score-122 {background-color: #FFFF13;}\n", | |
".cython.score-123 {background-color: #FFFF13;}\n", | |
".cython.score-124 {background-color: #FFFF13;}\n", | |
".cython.score-125 {background-color: #FFFF12;}\n", | |
".cython.score-126 {background-color: #FFFF12;}\n", | |
".cython.score-127 {background-color: #FFFF12;}\n", | |
".cython.score-128 {background-color: #FFFF12;}\n", | |
".cython.score-129 {background-color: #FFFF12;}\n", | |
".cython.score-130 {background-color: #FFFF12;}\n", | |
".cython.score-131 {background-color: #FFFF12;}\n", | |
".cython.score-132 {background-color: #FFFF11;}\n", | |
".cython.score-133 {background-color: #FFFF11;}\n", | |
".cython.score-134 {background-color: #FFFF11;}\n", | |
".cython.score-135 {background-color: #FFFF11;}\n", | |
".cython.score-136 {background-color: #FFFF11;}\n", | |
".cython.score-137 {background-color: #FFFF11;}\n", | |
".cython.score-138 {background-color: #FFFF11;}\n", | |
".cython.score-139 {background-color: #FFFF11;}\n", | |
".cython.score-140 {background-color: #FFFF11;}\n", | |
".cython.score-141 {background-color: #FFFF10;}\n", | |
".cython.score-142 {background-color: #FFFF10;}\n", | |
".cython.score-143 {background-color: #FFFF10;}\n", | |
".cython.score-144 {background-color: #FFFF10;}\n", | |
".cython.score-145 {background-color: #FFFF10;}\n", | |
".cython.score-146 {background-color: #FFFF10;}\n", | |
".cython.score-147 {background-color: #FFFF10;}\n", | |
".cython.score-148 {background-color: #FFFF10;}\n", | |
".cython.score-149 {background-color: #FFFF10;}\n", | |
".cython.score-150 {background-color: #FFFF0f;}\n", | |
".cython.score-151 {background-color: #FFFF0f;}\n", | |
".cython.score-152 {background-color: #FFFF0f;}\n", | |
".cython.score-153 {background-color: #FFFF0f;}\n", | |
".cython.score-154 {background-color: #FFFF0f;}\n", | |
".cython.score-155 {background-color: #FFFF0f;}\n", | |
".cython.score-156 {background-color: #FFFF0f;}\n", | |
".cython.score-157 {background-color: #FFFF0f;}\n", | |
".cython.score-158 {background-color: #FFFF0f;}\n", | |
".cython.score-159 {background-color: #FFFF0f;}\n", | |
".cython.score-160 {background-color: #FFFF0f;}\n", | |
".cython.score-161 {background-color: #FFFF0e;}\n", | |
".cython.score-162 {background-color: #FFFF0e;}\n", | |
".cython.score-163 {background-color: #FFFF0e;}\n", | |
".cython.score-164 {background-color: #FFFF0e;}\n", | |
".cython.score-165 {background-color: #FFFF0e;}\n", | |
".cython.score-166 {background-color: #FFFF0e;}\n", | |
".cython.score-167 {background-color: #FFFF0e;}\n", | |
".cython.score-168 {background-color: #FFFF0e;}\n", | |
".cython.score-169 {background-color: #FFFF0e;}\n", | |
".cython.score-170 {background-color: #FFFF0e;}\n", | |
".cython.score-171 {background-color: #FFFF0e;}\n", | |
".cython.score-172 {background-color: #FFFF0e;}\n", | |
".cython.score-173 {background-color: #FFFF0d;}\n", | |
".cython.score-174 {background-color: #FFFF0d;}\n", | |
".cython.score-175 {background-color: #FFFF0d;}\n", | |
".cython.score-176 {background-color: #FFFF0d;}\n", | |
".cython.score-177 {background-color: #FFFF0d;}\n", | |
".cython.score-178 {background-color: #FFFF0d;}\n", | |
".cython.score-179 {background-color: #FFFF0d;}\n", | |
".cython.score-180 {background-color: #FFFF0d;}\n", | |
".cython.score-181 {background-color: #FFFF0d;}\n", | |
".cython.score-182 {background-color: #FFFF0d;}\n", | |
".cython.score-183 {background-color: #FFFF0d;}\n", | |
".cython.score-184 {background-color: #FFFF0d;}\n", | |
".cython.score-185 {background-color: #FFFF0d;}\n", | |
".cython.score-186 {background-color: #FFFF0d;}\n", | |
".cython.score-187 {background-color: #FFFF0c;}\n", | |
".cython.score-188 {background-color: #FFFF0c;}\n", | |
".cython.score-189 {background-color: #FFFF0c;}\n", | |
".cython.score-190 {background-color: #FFFF0c;}\n", | |
".cython.score-191 {background-color: #FFFF0c;}\n", | |
".cython.score-192 {background-color: #FFFF0c;}\n", | |
".cython.score-193 {background-color: #FFFF0c;}\n", | |
".cython.score-194 {background-color: #FFFF0c;}\n", | |
".cython.score-195 {background-color: #FFFF0c;}\n", | |
".cython.score-196 {background-color: #FFFF0c;}\n", | |
".cython.score-197 {background-color: #FFFF0c;}\n", | |
".cython.score-198 {background-color: #FFFF0c;}\n", | |
".cython.score-199 {background-color: #FFFF0c;}\n", | |
".cython.score-200 {background-color: #FFFF0c;}\n", | |
".cython.score-201 {background-color: #FFFF0c;}\n", | |
".cython.score-202 {background-color: #FFFF0c;}\n", | |
".cython.score-203 {background-color: #FFFF0b;}\n", | |
".cython.score-204 {background-color: #FFFF0b;}\n", | |
".cython.score-205 {background-color: #FFFF0b;}\n", | |
".cython.score-206 {background-color: #FFFF0b;}\n", | |
".cython.score-207 {background-color: #FFFF0b;}\n", | |
".cython.score-208 {background-color: #FFFF0b;}\n", | |
".cython.score-209 {background-color: #FFFF0b;}\n", | |
".cython.score-210 {background-color: #FFFF0b;}\n", | |
".cython.score-211 {background-color: #FFFF0b;}\n", | |
".cython.score-212 {background-color: #FFFF0b;}\n", | |
".cython.score-213 {background-color: #FFFF0b;}\n", | |
".cython.score-214 {background-color: #FFFF0b;}\n", | |
".cython.score-215 {background-color: #FFFF0b;}\n", | |
".cython.score-216 {background-color: #FFFF0b;}\n", | |
".cython.score-217 {background-color: #FFFF0b;}\n", | |
".cython.score-218 {background-color: #FFFF0b;}\n", | |
".cython.score-219 {background-color: #FFFF0b;}\n", | |
".cython.score-220 {background-color: #FFFF0b;}\n", | |
".cython.score-221 {background-color: #FFFF0b;}\n", | |
".cython.score-222 {background-color: #FFFF0a;}\n", | |
".cython.score-223 {background-color: #FFFF0a;}\n", | |
".cython.score-224 {background-color: #FFFF0a;}\n", | |
".cython.score-225 {background-color: #FFFF0a;}\n", | |
".cython.score-226 {background-color: #FFFF0a;}\n", | |
".cython.score-227 {background-color: #FFFF0a;}\n", | |
".cython.score-228 {background-color: #FFFF0a;}\n", | |
".cython.score-229 {background-color: #FFFF0a;}\n", | |
".cython.score-230 {background-color: #FFFF0a;}\n", | |
".cython.score-231 {background-color: #FFFF0a;}\n", | |
".cython.score-232 {background-color: #FFFF0a;}\n", | |
".cython.score-233 {background-color: #FFFF0a;}\n", | |
".cython.score-234 {background-color: #FFFF0a;}\n", | |
".cython.score-235 {background-color: #FFFF0a;}\n", | |
".cython.score-236 {background-color: #FFFF0a;}\n", | |
".cython.score-237 {background-color: #FFFF0a;}\n", | |
".cython.score-238 {background-color: #FFFF0a;}\n", | |
".cython.score-239 {background-color: #FFFF0a;}\n", | |
".cython.score-240 {background-color: #FFFF0a;}\n", | |
".cython.score-241 {background-color: #FFFF0a;}\n", | |
".cython.score-242 {background-color: #FFFF0a;}\n", | |
".cython.score-243 {background-color: #FFFF0a;}\n", | |
".cython.score-244 {background-color: #FFFF0a;}\n", | |
".cython.score-245 {background-color: #FFFF0a;}\n", | |
".cython.score-246 {background-color: #FFFF09;}\n", | |
".cython.score-247 {background-color: #FFFF09;}\n", | |
".cython.score-248 {background-color: #FFFF09;}\n", | |
".cython.score-249 {background-color: #FFFF09;}\n", | |
".cython.score-250 {background-color: #FFFF09;}\n", | |
".cython.score-251 {background-color: #FFFF09;}\n", | |
".cython.score-252 {background-color: #FFFF09;}\n", | |
".cython.score-253 {background-color: #FFFF09;}\n", | |
".cython.score-254 {background-color: #FFFF09;}\n", | |
".cython .hll { background-color: #ffffcc }\n", | |
".cython { background: #f8f8f8; }\n", | |
".cython .c { color: #408080; font-style: italic } /* Comment */\n", | |
".cython .err { border: 1px solid #FF0000 } /* Error */\n", | |
".cython .k { color: #008000; font-weight: bold } /* Keyword */\n", | |
".cython .o { color: #666666 } /* Operator */\n", | |
".cython .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", | |
".cython .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", | |
".cython .cp { color: #BC7A00 } /* Comment.Preproc */\n", | |
".cython .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", | |
".cython .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", | |
".cython .cs { color: #408080; font-style: italic } /* Comment.Special */\n", | |
".cython .gd { color: #A00000 } /* Generic.Deleted */\n", | |
".cython .ge { font-style: italic } /* Generic.Emph */\n", | |
".cython .gr { color: #FF0000 } /* Generic.Error */\n", | |
".cython .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", | |
".cython .gi { color: #00A000 } /* Generic.Inserted */\n", | |
".cython .go { color: #888888 } /* Generic.Output */\n", | |
".cython .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", | |
".cython .gs { font-weight: bold } /* Generic.Strong */\n", | |
".cython .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", | |
".cython .gt { color: #0044DD } /* Generic.Traceback */\n", | |
".cython .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", | |
".cython .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", | |
".cython .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", | |
".cython .kp { color: #008000 } /* Keyword.Pseudo */\n", | |
".cython .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", | |
".cython .kt { color: #B00040 } /* Keyword.Type */\n", | |
".cython .m { color: #666666 } /* Literal.Number */\n", | |
".cython .s { color: #BA2121 } /* Literal.String */\n", | |
".cython .na { color: #7D9029 } /* Name.Attribute */\n", | |
".cython .nb { color: #008000 } /* Name.Builtin */\n", | |
".cython .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", | |
".cython .no { color: #880000 } /* Name.Constant */\n", | |
".cython .nd { color: #AA22FF } /* Name.Decorator */\n", | |
".cython .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", | |
".cython .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", | |
".cython .nf { color: #0000FF } /* Name.Function */\n", | |
".cython .nl { color: #A0A000 } /* Name.Label */\n", | |
".cython .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", | |
".cython .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", | |
".cython .nv { color: #19177C } /* Name.Variable */\n", | |
".cython .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", | |
".cython .w { color: #bbbbbb } /* Text.Whitespace */\n", | |
".cython .mb { color: #666666 } /* Literal.Number.Bin */\n", | |
".cython .mf { color: #666666 } /* Literal.Number.Float */\n", | |
".cython .mh { color: #666666 } /* Literal.Number.Hex */\n", | |
".cython .mi { color: #666666 } /* Literal.Number.Integer */\n", | |
".cython .mo { color: #666666 } /* Literal.Number.Oct */\n", | |
".cython .sa { color: #BA2121 } /* Literal.String.Affix */\n", | |
".cython .sb { color: #BA2121 } /* Literal.String.Backtick */\n", | |
".cython .sc { color: #BA2121 } /* Literal.String.Char */\n", | |
".cython .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", | |
".cython .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", | |
".cython .s2 { color: #BA2121 } /* Literal.String.Double */\n", | |
".cython .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", | |
".cython .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", | |
".cython .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", | |
".cython .sx { color: #008000 } /* Literal.String.Other */\n", | |
".cython .sr { color: #BB6688 } /* Literal.String.Regex */\n", | |
".cython .s1 { color: #BA2121 } /* Literal.String.Single */\n", | |
".cython .ss { color: #19177C } /* Literal.String.Symbol */\n", | |
".cython .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", | |
".cython .fm { color: #0000FF } /* Name.Function.Magic */\n", | |
".cython .vc { color: #19177C } /* Name.Variable.Class */\n", | |
".cython .vg { color: #19177C } /* Name.Variable.Global */\n", | |
".cython .vi { color: #19177C } /* Name.Variable.Instance */\n", | |
".cython .vm { color: #19177C } /* Name.Variable.Magic */\n", | |
".cython .il { color: #666666 } /* Literal.Number.Integer.Long */\n", | |
" </style>\n", | |
" <script>\n", | |
" function toggleDiv(id) {\n", | |
" theDiv = id.nextElementSibling\n", | |
" if (theDiv.style.display != 'block') theDiv.style.display = 'block';\n", | |
" else theDiv.style.display = 'none';\n", | |
" }\n", | |
" </script>\n", | |
"</head>\n", | |
"<body class=\"cython\">\n", | |
"<p><span style=\"border-bottom: solid 1px grey;\">Generated by Cython 0.26</span></p>\n", | |
"<p>\n", | |
" <span style=\"background-color: #FFFF00\">Yellow lines</span> hint at Python interaction.<br />\n", | |
" Click on a line that starts with a \"<code>+</code>\" to see the C code that Cython generated for it.\n", | |
"</p>\n", | |
"<div class=\"cython\"><pre class=\"cython line score-0\"> <span class=\"\">01</span>: </pre>\n", | |
"<pre class=\"cython line score-11\" onclick='toggleDiv(this)'>+<span class=\"\">02</span>: <span class=\"k\">import</span> <span class=\"nn\">cython</span></pre>\n", | |
"<pre class='cython code score-11 '> __pyx_t_1 = <span class='py_c_api'>PyDict_New</span>(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 2, __pyx_L1_error)\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-8\" onclick='toggleDiv(this)'>+<span class=\"\">03</span>: <span class=\"k\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span></pre>\n", | |
"<pre class='cython code score-8 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 3, __pyx_L1_error)\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-0\"> <span class=\"\">04</span>: <span class=\"k\">cimport</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span></pre>\n", | |
"<pre class=\"cython line score-0\"> <span class=\"\">05</span>: </pre>\n", | |
"<pre class=\"cython line score-0\"> <span class=\"\">06</span>: <span class=\"k\">from</span> <span class=\"nn\">libc.math</span> <span class=\"k\">cimport</span> <span class=\"n\">exp</span></pre>\n", | |
"<pre class=\"cython line score-0\"> <span class=\"\">07</span>: <span class=\"k\">from</span> <span class=\"nn\">libc.string</span> <span class=\"k\">cimport</span> <span class=\"n\">memset</span></pre>\n", | |
"<pre class=\"cython line score-16\" onclick='toggleDiv(this)'>+<span class=\"\">08</span>: <span class=\"k\">import</span> <span class=\"nn\">scipy.linalg.blas</span> <span class=\"k\">as</span> <span class=\"nn\">fblas</span></pre>\n", | |
"<pre class='cython code score-16 '> __pyx_t_1 = <span class='py_c_api'>PyList_New</span>(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s__10);\n", | |
" <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s__10);\n", | |
" <span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_1, 0, __pyx_n_s__10);\n", | |
" __pyx_t_2 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_scipy_linalg_blas, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
" if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_fblas, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error)\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n", | |
"</pre><pre class=\"cython line score-0\"> <span class=\"\">09</span>: </pre>\n", | |
"<pre class=\"cython line score-11\" onclick='toggleDiv(this)'>+<span class=\"\">10</span>: <span class=\"n\">REAL</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">float32</span></pre>\n", | |
"<pre class='cython code score-11 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n", | |
" if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_REAL, __pyx_t_1) < 0) __PYX_ERR(0, 10, __pyx_L1_error)\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-0\"> <span class=\"\">11</span>: <span class=\"k\">ctypedef</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">float32_t</span> <span class=\"n\">REAL_t</span></pre>\n", | |
"<pre class=\"cython line score-0\"> <span class=\"\">12</span>: </pre>\n", | |
"<pre class=\"cython line score-0\"> <span class=\"\">13</span>: <span class=\"k\">cdef</span> <span class=\"kr\">extern</span> <span class=\"k\">from</span> <span class=\"s\">"/home/brian/src/ai.learn/OpenMined/PySonar/notebooks/voidptr.h"</span><span class=\"p\">:</span></pre>\n", | |
"<pre class=\"cython line score-0\"> <span class=\"\">14</span>: <span class=\"n\">void</span><span class=\"o\">*</span> <span class=\"n\">PyCObject_AsVoidPtr</span><span class=\"p\">(</span><span class=\"nb\">object</span> <span class=\"n\">obj</span><span class=\"p\">)</span></pre>\n", | |
"<pre class=\"cython line score-0\"> <span class=\"\">15</span>: </pre>\n", | |
"<pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">16</span>: <span class=\"k\">ctypedef</span> <span class=\"n\">void</span> <span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">scopy_ptr</span><span class=\"p\">)</span> <span class=\"p\">(</span><span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">N</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">X</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incX</span><span class=\"p\">,</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">Y</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incY</span><span class=\"p\">)</span> <span class=\"k\">nogil</span></pre>\n", | |
"<pre class='cython code score-0 '>typedef void (*__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_scopy_ptr)(int const *, float const *, int const *, float *, int const *);\n", | |
"</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">17</span>: <span class=\"k\">ctypedef</span> <span class=\"n\">void</span> <span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">saxpy_ptr</span><span class=\"p\">)</span> <span class=\"p\">(</span><span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">N</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">alpha</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">X</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incX</span><span class=\"p\">,</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">Y</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incY</span><span class=\"p\">)</span> <span class=\"k\">nogil</span></pre>\n", | |
"<pre class='cython code score-0 '>typedef void (*__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_saxpy_ptr)(int const *, float const *, float const *, int const *, float *, int const *);\n", | |
"</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">18</span>: <span class=\"k\">ctypedef</span> <span class=\"nb\">float</span> <span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">sdot_ptr</span><span class=\"p\">)</span> <span class=\"p\">(</span><span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">N</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">X</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incX</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">Y</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incY</span><span class=\"p\">)</span> <span class=\"k\">nogil</span></pre>\n", | |
"<pre class='cython code score-0 '>typedef float (*__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_sdot_ptr)(int const *, float const *, int const *, float const *, int const *);\n", | |
"</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">19</span>: <span class=\"k\">ctypedef</span> <span class=\"n\">double</span> <span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">dsdot_ptr</span><span class=\"p\">)</span> <span class=\"p\">(</span><span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">N</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">X</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incX</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">Y</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incY</span><span class=\"p\">)</span> <span class=\"k\">nogil</span></pre>\n", | |
"<pre class='cython code score-0 '>typedef double (*__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_dsdot_ptr)(int const *, float const *, int const *, float const *, int const *);\n", | |
"</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">20</span>: <span class=\"k\">ctypedef</span> <span class=\"n\">double</span> <span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">snrm2_ptr</span><span class=\"p\">)</span> <span class=\"p\">(</span><span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">N</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">X</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incX</span><span class=\"p\">)</span> <span class=\"k\">nogil</span></pre>\n", | |
"<pre class='cython code score-0 '>typedef double (*__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_snrm2_ptr)(int const *, float const *, int const *);\n", | |
"</pre><pre class=\"cython line score-0\"> <span class=\"\">21</span>: <span class=\"k\">ctypedef</span> <span class=\"n\">void</span> <span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">sscal_ptr</span><span class=\"p\">)</span> <span class=\"p\">(</span><span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">N</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">alpha</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">float</span> <span class=\"o\">*</span><span class=\"n\">X</span><span class=\"p\">,</span> <span class=\"n\">const</span> <span class=\"nb\">int</span> <span class=\"o\">*</span><span class=\"n\">incX</span><span class=\"p\">)</span> <span class=\"k\">nogil</span></pre>\n", | |
"<pre class=\"cython line score-0\"> <span class=\"\">22</span>: </pre>\n", | |
"<pre class=\"cython line score-9\" onclick='toggleDiv(this)'>+<span class=\"\">23</span>: <span class=\"k\">cdef</span> <span class=\"kt\">scopy_ptr</span> <span class=\"nf\">scopy</span><span class=\"o\">=<</span><span class=\"n\">scopy_ptr</span><span class=\"o\">></span><span class=\"n\">PyCObject_AsVoidPtr</span><span class=\"p\">(</span><span class=\"n\">fblas</span><span class=\"o\">.</span><span class=\"n\">scopy</span><span class=\"o\">.</span><span class=\"n\">_cpointer</span><span class=\"p\">)</span> <span class=\"c\"># y = x</span></pre>\n", | |
"<pre class='cython code score-9 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_fblas); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_scopy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
" __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_cpointer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n", | |
" __pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_scopy = ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_scopy_ptr)PyCObject_AsVoidPtr(__pyx_t_1));\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-9\" onclick='toggleDiv(this)'>+<span class=\"\">24</span>: <span class=\"k\">cdef</span> <span class=\"kt\">saxpy_ptr</span> <span class=\"nf\">saxpy</span><span class=\"o\">=<</span><span class=\"n\">saxpy_ptr</span><span class=\"o\">></span><span class=\"n\">PyCObject_AsVoidPtr</span><span class=\"p\">(</span><span class=\"n\">fblas</span><span class=\"o\">.</span><span class=\"n\">saxpy</span><span class=\"o\">.</span><span class=\"n\">_cpointer</span><span class=\"p\">)</span> <span class=\"c\"># y += alpha * x</span></pre>\n", | |
"<pre class='cython code score-9 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_fblas); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_saxpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
" __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_cpointer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n", | |
" __pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_saxpy = ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_saxpy_ptr)PyCObject_AsVoidPtr(__pyx_t_1));\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-9\" onclick='toggleDiv(this)'>+<span class=\"\">25</span>: <span class=\"k\">cdef</span> <span class=\"kt\">sdot_ptr</span> <span class=\"nf\">sdot</span><span class=\"o\">=<</span><span class=\"n\">sdot_ptr</span><span class=\"o\">></span><span class=\"n\">PyCObject_AsVoidPtr</span><span class=\"p\">(</span><span class=\"n\">fblas</span><span class=\"o\">.</span><span class=\"n\">sdot</span><span class=\"o\">.</span><span class=\"n\">_cpointer</span><span class=\"p\">)</span> <span class=\"c\"># flat = dot(x, y)</span></pre>\n", | |
"<pre class='cython code score-9 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_fblas); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_sdot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
" __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_cpointer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n", | |
" __pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_sdot = ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_sdot_ptr)PyCObject_AsVoidPtr(__pyx_t_1));\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-9\" onclick='toggleDiv(this)'>+<span class=\"\">26</span>: <span class=\"k\">cdef</span> <span class=\"kt\">dsdot_ptr</span> <span class=\"nf\">dsdot</span><span class=\"o\">=<</span><span class=\"n\">dsdot_ptr</span><span class=\"o\">></span><span class=\"n\">PyCObject_AsVoidPtr</span><span class=\"p\">(</span><span class=\"n\">fblas</span><span class=\"o\">.</span><span class=\"n\">sdot</span><span class=\"o\">.</span><span class=\"n\">_cpointer</span><span class=\"p\">)</span> <span class=\"c\"># double = dot(x, y)</span></pre>\n", | |
"<pre class='cython code score-9 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_fblas); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_sdot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
" __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_cpointer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n", | |
" __pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_dsdot = ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_dsdot_ptr)PyCObject_AsVoidPtr(__pyx_t_1));\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-9\" onclick='toggleDiv(this)'>+<span class=\"\">27</span>: <span class=\"k\">cdef</span> <span class=\"kt\">snrm2_ptr</span> <span class=\"nf\">snrm2</span><span class=\"o\">=<</span><span class=\"n\">snrm2_ptr</span><span class=\"o\">></span><span class=\"n\">PyCObject_AsVoidPtr</span><span class=\"p\">(</span><span class=\"n\">fblas</span><span class=\"o\">.</span><span class=\"n\">snrm2</span><span class=\"o\">.</span><span class=\"n\">_cpointer</span><span class=\"p\">)</span> <span class=\"c\"># sqrt(x^2)</span></pre>\n", | |
"<pre class='cython code score-9 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_fblas); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_snrm2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 27, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
" __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_cpointer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n", | |
" __pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_snrm2 = ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_snrm2_ptr)PyCObject_AsVoidPtr(__pyx_t_1));\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-9\" onclick='toggleDiv(this)'>+<span class=\"\">28</span>: <span class=\"k\">cdef</span> <span class=\"kt\">sscal_ptr</span> <span class=\"nf\">sscal</span><span class=\"o\">=<</span><span class=\"n\">sscal_ptr</span><span class=\"o\">></span><span class=\"n\">PyCObject_AsVoidPtr</span><span class=\"p\">(</span><span class=\"n\">fblas</span><span class=\"o\">.</span><span class=\"n\">sscal</span><span class=\"o\">.</span><span class=\"n\">_cpointer</span><span class=\"p\">)</span> <span class=\"c\"># x = alpha * x</span></pre>\n", | |
"<pre class='cython code score-9 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_fblas); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_sscal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
" __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_cpointer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n", | |
" __pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_sscal = ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_sscal_ptr)PyCObject_AsVoidPtr(__pyx_t_1));\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-0\"> <span class=\"\">29</span>: </pre>\n", | |
"<pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">30</span>: <span class=\"k\">cdef</span> <span class=\"kt\">int</span> <span class=\"nf\">ONE</span> <span class=\"o\">=</span> <span class=\"mf\">1</span></pre>\n", | |
"<pre class='cython code score-0 '> __pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_ONE = 1;\n", | |
"</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">31</span>: <span class=\"k\">cdef</span> <span class=\"kt\">REAL_t</span> <span class=\"nf\">ONEF</span> <span class=\"o\">=</span> <span class=\"o\"><</span><span class=\"n\">REAL_t</span><span class=\"o\">></span><span class=\"mf\">1.0</span></pre>\n", | |
"<pre class='cython code score-0 '> __pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_ONEF = ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_REAL_t)1.0);\n", | |
"</pre><pre class=\"cython line score-0\"> <span class=\"\">32</span>: </pre>\n", | |
"<pre class=\"cython line score-54\" onclick='toggleDiv(this)'>+<span class=\"\">33</span>: <span class=\"k\">def</span> <span class=\"nf\">pubDotty</span><span class=\"p\">(</span><span class=\"n\">syn0</span><span class=\"p\">,</span> <span class=\"n\">syn1</span><span class=\"p\">,</span> <span class=\"n\">size</span><span class=\"p\">):</span></pre>\n", | |
"<pre class='cython code score-54 '>/* Python wrapper */\n", | |
"static PyObject *__pyx_pw_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_1pubDotty(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n", | |
"static PyMethodDef __pyx_mdef_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_1pubDotty = {\"pubDotty\", (PyCFunction)__pyx_pw_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_1pubDotty, METH_VARARGS|METH_KEYWORDS, 0};\n", | |
"static PyObject *__pyx_pw_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_1pubDotty(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n", | |
" PyObject *__pyx_v_syn0 = 0;\n", | |
" PyObject *__pyx_v_syn1 = 0;\n", | |
" PyObject *__pyx_v_size = 0;\n", | |
" PyObject *__pyx_r = 0;\n", | |
" <span class='refnanny'>__Pyx_RefNannyDeclarations</span>\n", | |
" <span class='refnanny'>__Pyx_RefNannySetupContext</span>(\"pubDotty (wrapper)\", 0);\n", | |
" {\n", | |
" static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_syn0,&__pyx_n_s_syn1,&__pyx_n_s_size,0};\n", | |
" PyObject* values[3] = {0,0,0};\n", | |
" if (unlikely(__pyx_kwds)) {\n", | |
" Py_ssize_t kw_args;\n", | |
" const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);\n", | |
" switch (pos_args) {\n", | |
" case 3: values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);\n", | |
" CYTHON_FALLTHROUGH;\n", | |
" case 2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);\n", | |
" CYTHON_FALLTHROUGH;\n", | |
" case 1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);\n", | |
" CYTHON_FALLTHROUGH;\n", | |
" case 0: break;\n", | |
" default: goto __pyx_L5_argtuple_error;\n", | |
" }\n", | |
" kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);\n", | |
" switch (pos_args) {\n", | |
" case 0:\n", | |
" if (likely((values[0] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_syn0)) != 0)) kw_args--;\n", | |
" else goto __pyx_L5_argtuple_error;\n", | |
" CYTHON_FALLTHROUGH;\n", | |
" case 1:\n", | |
" if (likely((values[1] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_syn1)) != 0)) kw_args--;\n", | |
" else {\n", | |
" <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>(\"pubDotty\", 1, 3, 3, 1); __PYX_ERR(0, 33, __pyx_L3_error)\n", | |
" }\n", | |
" CYTHON_FALLTHROUGH;\n", | |
" case 2:\n", | |
" if (likely((values[2] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;\n", | |
" else {\n", | |
" <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>(\"pubDotty\", 1, 3, 3, 2); __PYX_ERR(0, 33, __pyx_L3_error)\n", | |
" }\n", | |
" }\n", | |
" if (unlikely(kw_args > 0)) {\n", | |
" if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, \"pubDotty\") < 0)) __PYX_ERR(0, 33, __pyx_L3_error)\n", | |
" }\n", | |
" } else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 3) {\n", | |
" goto __pyx_L5_argtuple_error;\n", | |
" } else {\n", | |
" values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);\n", | |
" values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);\n", | |
" values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);\n", | |
" }\n", | |
" __pyx_v_syn0 = values[0];\n", | |
" __pyx_v_syn1 = values[1];\n", | |
" __pyx_v_size = values[2];\n", | |
" }\n", | |
" goto __pyx_L4_argument_unpacking_done;\n", | |
" __pyx_L5_argtuple_error:;\n", | |
" <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>(\"pubDotty\", 1, 3, 3, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); __PYX_ERR(0, 33, __pyx_L3_error)\n", | |
" __pyx_L3_error:;\n", | |
" <span class='pyx_c_api'>__Pyx_AddTraceback</span>(\"_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e.pubDotty\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", | |
" <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n", | |
" return NULL;\n", | |
" __pyx_L4_argument_unpacking_done:;\n", | |
" __pyx_r = __pyx_pf_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_pubDotty(__pyx_self, __pyx_v_syn0, __pyx_v_syn1, __pyx_v_size);\n", | |
"\n", | |
" /* function exit code */\n", | |
" <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n", | |
" return __pyx_r;\n", | |
"}\n", | |
"\n", | |
"static PyObject *__pyx_pf_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_pubDotty(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_syn0, PyObject *__pyx_v_syn1, PyObject *__pyx_v_size) {\n", | |
" int __pyx_v_lSize;\n", | |
" PyObject *__pyx_v_f = NULL;\n", | |
" PyObject *__pyx_r = NULL;\n", | |
" <span class='refnanny'>__Pyx_RefNannyDeclarations</span>\n", | |
" <span class='refnanny'>__Pyx_RefNannySetupContext</span>(\"pubDotty\", 0);\n", | |
"/* … */\n", | |
" /* function exit code */\n", | |
" __pyx_L1_error:;\n", | |
" <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);\n", | |
" <span class='pyx_c_api'>__Pyx_AddTraceback</span>(\"_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e.pubDotty\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", | |
" __pyx_r = NULL;\n", | |
" __pyx_L0:;\n", | |
" <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_f);\n", | |
" <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);\n", | |
" <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n", | |
" return __pyx_r;\n", | |
"}\n", | |
"/* … */\n", | |
" __pyx_tuple__11 = <span class='py_c_api'>PyTuple_Pack</span>(5, __pyx_n_s_syn0, __pyx_n_s_syn1, __pyx_n_s_size, __pyx_n_s_lSize, __pyx_n_s_f); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 33, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__11);\n", | |
" <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__11);\n", | |
"/* … */\n", | |
" __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_1pubDotty, NULL, __pyx_n_s_cython_magic_9cdd5df9e9ef390fd8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n", | |
" if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_pubDotty, __pyx_t_1) < 0) __PYX_ERR(0, 33, __pyx_L1_error)\n", | |
" <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n", | |
"</pre><pre class=\"cython line score-7\" onclick='toggleDiv(this)'>+<span class=\"\">34</span>: <span class=\"k\">cdef</span> <span class=\"kt\">int</span> <span class=\"nf\">lSize</span> <span class=\"o\">=</span> <span class=\"n\">size</span></pre>\n", | |
"<pre class='cython code score-7 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyInt_As_int</span>(__pyx_v_size); if (unlikely((__pyx_t_1 == (int)-1) && <span class='py_c_api'>PyErr_Occurred</span>())) __PYX_ERR(0, 34, __pyx_L1_error)\n", | |
" __pyx_v_lSize = __pyx_t_1;\n", | |
"</pre><pre class=\"cython line score-11\" onclick='toggleDiv(this)'>+<span class=\"\">35</span>: <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"o\"><</span><span class=\"n\">REAL_t</span><span class=\"o\">></span><span class=\"n\">dsdot</span><span class=\"p\">(</span><span class=\"o\">&</span><span class=\"n\">lSize</span><span class=\"p\">,</span> <span class=\"o\"><</span><span class=\"n\">REAL_t</span> <span class=\"o\">*></span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">PyArray_DATA</span><span class=\"p\">(</span><span class=\"n\">syn0</span><span class=\"p\">)),</span> <span class=\"o\">&</span><span class=\"n\">ONE</span><span class=\"p\">,</span> <span class=\"o\"><</span><span class=\"n\">REAL_t</span> <span class=\"o\">*></span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">PyArray_DATA</span><span class=\"p\">(</span><span class=\"n\">syn1</span><span class=\"p\">)),</span> <span class=\"o\">&</span><span class=\"n\">ONE</span><span class=\"p\">)</span></pre>\n", | |
"<pre class='cython code score-11 '> if (!(likely(((__pyx_v_syn0) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_v_syn0, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 35, __pyx_L1_error)\n", | |
" if (!(likely(((__pyx_v_syn1) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_v_syn1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 35, __pyx_L1_error)\n", | |
" __pyx_t_2 = <span class='py_c_api'>PyFloat_FromDouble</span>(((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_REAL_t)__pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_dsdot((&__pyx_v_lSize), ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_REAL_t *)<span class='py_macro_api'>PyArray_DATA</span>(((PyArrayObject *)__pyx_v_syn0))), (&__pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_ONE), ((__pyx_t_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_REAL_t *)<span class='py_macro_api'>PyArray_DATA</span>(((PyArrayObject *)__pyx_v_syn1))), (&__pyx_v_46_cython_magic_9cdd5df9e9ef390fd8f2bcbac58d341e_ONE)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)\n", | |
" <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n", | |
" __pyx_v_f = __pyx_t_2;\n", | |
" __pyx_t_2 = 0;\n", | |
"</pre><pre class=\"cython line score-2\" onclick='toggleDiv(this)'>+<span class=\"\">36</span>: <span class=\"k\">return</span> <span class=\"n\">f</span></pre>\n", | |
"<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);\n", | |
" <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_f);\n", | |
" __pyx_r = __pyx_v_f;\n", | |
" goto __pyx_L0;\n", | |
"</pre></div></body></html>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"execution_count": 32, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%cython --annotate\n", | |
"\n", | |
"import cython\n", | |
"import numpy as np\n", | |
"cimport numpy as np\n", | |
"\n", | |
"from libc.math cimport exp\n", | |
"from libc.string cimport memset\n", | |
"import scipy.linalg.blas as fblas\n", | |
"\n", | |
"REAL = np.float32\n", | |
"ctypedef np.float32_t REAL_t\n", | |
"\n", | |
"cdef extern from \"/home/brian/src/ai.learn/OpenMined/PySonar/notebooks/voidptr.h\":\n", | |
" void* PyCObject_AsVoidPtr(object obj) \n", | |
"\n", | |
"ctypedef void (*scopy_ptr) (const int *N, const float *X, const int *incX, float *Y, const int *incY) nogil\n", | |
"ctypedef void (*saxpy_ptr) (const int *N, const float *alpha, const float *X, const int *incX, float *Y, const int *incY) nogil\n", | |
"ctypedef float (*sdot_ptr) (const int *N, const float *X, const int *incX, const float *Y, const int *incY) nogil\n", | |
"ctypedef double (*dsdot_ptr) (const int *N, const float *X, const int *incX, const float *Y, const int *incY) nogil\n", | |
"ctypedef double (*snrm2_ptr) (const int *N, const float *X, const int *incX) nogil\n", | |
"ctypedef void (*sscal_ptr) (const int *N, const float *alpha, const float *X, const int *incX) nogil\n", | |
"\n", | |
"cdef scopy_ptr scopy=<scopy_ptr>PyCObject_AsVoidPtr(fblas.scopy._cpointer) # y = x\n", | |
"cdef saxpy_ptr saxpy=<saxpy_ptr>PyCObject_AsVoidPtr(fblas.saxpy._cpointer) # y += alpha * x\n", | |
"cdef sdot_ptr sdot=<sdot_ptr>PyCObject_AsVoidPtr(fblas.sdot._cpointer) # flat = dot(x, y)\n", | |
"cdef dsdot_ptr dsdot=<dsdot_ptr>PyCObject_AsVoidPtr(fblas.sdot._cpointer) # double = dot(x, y)\n", | |
"cdef snrm2_ptr snrm2=<snrm2_ptr>PyCObject_AsVoidPtr(fblas.snrm2._cpointer) # sqrt(x^2)\n", | |
"cdef sscal_ptr sscal=<sscal_ptr>PyCObject_AsVoidPtr(fblas.sscal._cpointer) # x = alpha * x\n", | |
"\n", | |
"cdef int ONE = 1\n", | |
"cdef REAL_t ONEF = <REAL_t>1.0\n", | |
"\n", | |
"def pubDotty(syn0, syn1, size):\n", | |
" cdef int lSize = size\n", | |
" f = <REAL_t>dsdot(&lSize, <REAL_t *>(np.PyArray_DATA(syn0)), &ONE, <REAL_t *>(np.PyArray_DATA(syn1)), &ONE)\n", | |
" return f" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 33, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"np.random.seed(0)\n", | |
"x = np.zeros(32, dtype='f')\n", | |
"y = np.zeros(32, dtype='f')\n", | |
"\n", | |
"x+=1\n", | |
"y+=3" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"667 ns ± 22.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%timeit np.dot(x, y)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"189 ns ± 2.12 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%timeit pubDotty(x, y, len(x))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 34, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"35184380477440.0" | |
] | |
}, | |
"execution_count": 34, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"pubDotty(x, y, len(x))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"96.0" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"np.dot(x, y)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment